samples: bpf: Convert ARP table network order fields into readable format
The ARP table that is dumped when the xdp_router_ipv4 process is launched has the IP address & MAC address in non-readable network byte order format, also the alignment is off when printing the table. Address HwAddress 160000e0 1600005e0001 ff96a8c0 ffffffffffff faffffef faff7f5e0001 196a8c0 9607871293ea fb0000e0 fb00005e0001 0 0 196a8c0 9607871293ea ffff11ac ffffffffffff faffffef faff7f5e0001 fb0000e0 fb00005e0001 160000e0 1600005e0001 160000e0 1600005e0001 faffffef faff7f5e0001 fb0000e0 fb00005e0001 40011ac 40011ac4202 Fix this by converting the "Address" field from network byte order Hex into dotted decimal notation IPv4 format and "HwAddress" field from network byte order Hex into Colon separated Hex format. Also fix the aligntment of the fields in the ARP table. Address HwAddress 224.0.0.22 01:00:5e:00:00:16 192.168.150.255 ff:ff:ff:ff:ff:ff 239.255.255.250 01:00:5e:7f:ff:fa 192.168.150.1 ea:93:12:87:07:96 224.0.0.251 01:00:5e:00:00:fb 0.0.0.0 00:00:00:00:00:00 192.168.150.1 ea:93:12:87:07:96 172.17.255.255 ff:ff:ff:ff:ff:ff 239.255.255.250 01:00:5e:7f:ff:fa 224.0.0.251 01:00:5e:00:00:fb 224.0.0.22 01:00:5e:00:00:16 224.0.0.22 01:00:5e:00:00:16 239.255.255.250 01:00:5e:7f:ff:fa 224.0.0.251 01:00:5e:00:00:fb 172.17.0.4 02:42:ac:11:00:04 Signed-off-by: Gokul Sivakumar <gokulkumar792@gmail.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20210919080305.173588-2-gokulkumar792@gmail.com
This commit is contained in:
parent
f5c4e4191b
commit
cf8980a362
@ -397,8 +397,12 @@ static void read_arp(struct nlmsghdr *nh, int nll)
|
||||
|
||||
if (nh->nlmsg_type == RTM_GETNEIGH)
|
||||
printf("READING arp entry\n");
|
||||
printf("Address\tHwAddress\n");
|
||||
printf("Address HwAddress\n");
|
||||
for (; NLMSG_OK(nh, nll); nh = NLMSG_NEXT(nh, nll)) {
|
||||
struct in_addr dst_addr;
|
||||
char mac_str[18];
|
||||
int len = 0, i;
|
||||
|
||||
rt_msg = (struct ndmsg *)NLMSG_DATA(nh);
|
||||
rt_attr = (struct rtattr *)RTM_RTA(rt_msg);
|
||||
ndm_family = rt_msg->ndm_family;
|
||||
@ -419,7 +423,14 @@ static void read_arp(struct nlmsghdr *nh, int nll)
|
||||
}
|
||||
arp_entry.dst = atoi(dsts);
|
||||
arp_entry.mac = atol(mac);
|
||||
printf("%x\t\t%llx\n", arp_entry.dst, arp_entry.mac);
|
||||
|
||||
dst_addr.s_addr = arp_entry.dst;
|
||||
for (i = 0; i < 6; i++)
|
||||
len += snprintf(mac_str + len, 18 - len, "%02llx%s",
|
||||
((arp_entry.mac >> i * 8) & 0xff),
|
||||
i < 5 ? ":" : "");
|
||||
printf("%-16s%s\n", inet_ntoa(dst_addr), mac_str);
|
||||
|
||||
if (ndm_family == AF_INET) {
|
||||
if (bpf_map_lookup_elem(exact_match_map_fd,
|
||||
&arp_entry.dst,
|
||||
@ -728,7 +739,7 @@ int main(int ac, char **argv)
|
||||
|
||||
printf("\n*******************ROUTE TABLE*************************\n");
|
||||
get_route_table(AF_INET);
|
||||
printf("*******************ARP TABLE***************************\n\n\n");
|
||||
printf("\n*******************ARP TABLE***************************\n");
|
||||
get_arp_table(AF_INET);
|
||||
if (monitor_route() < 0) {
|
||||
printf("Error in receiving route update");
|
||||
|
Loading…
Reference in New Issue
Block a user