Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ycai
simbricks
Commits
511d00c7
Commit
511d00c7
authored
Aug 30, 2021
by
Antoine Kaufmann
Browse files
sims/net/switch: more informative debug messages
Includes source & dest mac/port, and ARP ips
parent
718d10d2
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
9 deletions
+14
-9
sims/net/switch/net_switch.cc
sims/net/switch/net_switch.cc
+14
-9
No files found.
sims/net/switch/net_switch.cc
View file @
511d00c7
...
...
@@ -338,7 +338,8 @@ static void sigusr2_handler(int dummy) {
}
#endif
static
void
forward_pkt
(
const
void
*
pkt_data
,
size_t
pkt_len
,
size_t
port_id
)
{
static
void
forward_pkt
(
const
void
*
pkt_data
,
size_t
pkt_len
,
size_t
port_id
,
size_t
iport_id
)
{
struct
pcap_pkthdr
ph
;
Port
&
dest_port
=
*
ports
[
port_id
];
...
...
@@ -360,19 +361,23 @@ static void forward_pkt(const void *pkt_data, size_t pkt_len, size_t port_id) {
hdr
=
(
struct
ethhdr
*
)
pkt_data
;
eth_proto
=
ntohs
(
hdr
->
h_proto
);
iph
=
(
struct
iphdr
*
)(
hdr
+
1
);
fprintf
(
stderr
,
"%20lu: "
,
cur_ts
);
uint64_t
dmac
=
(
*
(
uint64_t
*
)
hdr
->
h_dest
)
&
0xFFFFFFFFFFULL
;
uint64_t
smac
=
(
*
(
uint64_t
*
)
hdr
->
h_source
)
&
0xFFFFFFFFFFULL
;
fprintf
(
stderr
,
"%20lu: [P %zu -> %zu] %lx -> %lx "
,
cur_ts
,
iport_id
,
port_id
,
smac
,
dmac
);
if
(
eth_proto
==
ETH_P_IP
){
fprintf
(
stderr
,
"[ IP] "
);
fprintf
(
stderr
,
"%8X -> %8X len: %lu
\n
"
,
iph
->
saddr
,
iph
->
daddr
,
ntohs
(
iph
->
tot_len
)
+
sizeof
(
struct
ethhdr
));
}
else
if
(
eth_proto
==
ETH_P_ARP
){
fprintf
(
stderr
,
"[ARP] "
);
fprintf
(
stderr
,
"[ARP] %8X -> %8X
\n
"
,
*
(
uint32_t
*
)
((
uint8_t
*
)
pkt_data
+
28
),
*
(
uint32_t
*
)
((
uint8_t
*
)
pkt_data
+
38
)
);
}
else
{
fprintf
(
stderr
,
"unkw
o
n eth type
\n
"
);
fprintf
(
stderr
,
"unk
no
wn eth type
\n
"
);
}
fprintf
(
stderr
,
"%8X -> %8X len: %lu
\n
"
,
iph
->
saddr
,
iph
->
daddr
,
iph
->
tot_len
+
sizeof
(
struct
ethhdr
));
#endif
if
(
!
dest_port
.
TxPacket
(
pkt_data
,
pkt_len
,
cur_ts
))
...
...
@@ -414,13 +419,13 @@ static void switch_pkt(Port &port, size_t iport) {
if
(
i
!=
mac_table
.
end
())
{
size_t
eport
=
i
->
second
;
if
(
eport
!=
iport
)
forward_pkt
(
pkt_data
,
pkt_len
,
eport
);
forward_pkt
(
pkt_data
,
pkt_len
,
eport
,
iport
);
}
else
{
// Broadcast
for
(
size_t
eport
=
0
;
eport
<
ports
.
size
();
eport
++
)
{
if
(
eport
!=
iport
)
{
// Do not forward to ingress port
forward_pkt
(
pkt_data
,
pkt_len
,
eport
);
forward_pkt
(
pkt_data
,
pkt_len
,
eport
,
iport
);
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment