forked from Minki/linux
samples: bpf: Convert route table network order fields into readable format
The route table that is dumped when the xdp_router_ipv4 process is launched has the "Gateway" field in non-readable network byte order format, also the alignment is off when printing the table. Destination Gateway Genmask Metric Iface 0.0.0.0 196a8c0 0 0 enp7s0 0.0.0.0 196a8c0 0 0 wlp6s0 169.254.0.0 196a8c0 16 0 enp7s0 172.17.0.0 0 16 0 docker0 192.168.150.0 0 24 0 enp7s0 192.168.150.0 0 24 0 wlp6s0 Fix this by converting the "Gateway" field from network byte order Hex into dotted decimal notation IPv4 format and "Genmask" from CIDR notation into dotted decimal notation IPv4 format. Also fix the aligntment of the fields in the route table. Destination Gateway Genmask Metric Iface 0.0.0.0 192.168.150.1 0.0.0.0 0 enp7s0 0.0.0.0 192.168.150.1 0.0.0.0 0 wlp6s0 169.254.0.0 192.168.150.1 255.255.0.0 0 enp7s0 172.17.0.0 0.0.0.0 255.255.0.0 0 docker0 192.168.150.0 0.0.0.0 255.255.255.0 0 enp7s0 192.168.150.0 0.0.0.0 255.255.255.0 0 wlp6s0 Signed-off-by: Gokul Sivakumar <gokulkumar792@gmail.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20210919080305.173588-1-gokulkumar792@gmail.com
This commit is contained in:
parent
97c140d94e
commit
f5c4e4191b
@ -155,7 +155,7 @@ static void read_route(struct nlmsghdr *nh, int nll)
|
||||
printf("%d\n", nh->nlmsg_type);
|
||||
|
||||
memset(&route, 0, sizeof(route));
|
||||
printf("Destination\t\tGateway\t\tGenmask\t\tMetric\t\tIface\n");
|
||||
printf("Destination Gateway Genmask Metric Iface\n");
|
||||
for (; NLMSG_OK(nh, nll); nh = NLMSG_NEXT(nh, nll)) {
|
||||
rt_msg = (struct rtmsg *)NLMSG_DATA(nh);
|
||||
rtm_family = rt_msg->rtm_family;
|
||||
@ -207,6 +207,7 @@ static void read_route(struct nlmsghdr *nh, int nll)
|
||||
int metric;
|
||||
__be32 gw;
|
||||
} *prefix_value;
|
||||
struct in_addr dst_addr, gw_addr, mask_addr;
|
||||
|
||||
prefix_key = alloca(sizeof(*prefix_key) + 3);
|
||||
prefix_value = alloca(sizeof(*prefix_value));
|
||||
@ -234,14 +235,17 @@ static void read_route(struct nlmsghdr *nh, int nll)
|
||||
for (i = 0; i < 4; i++)
|
||||
prefix_key->data[i] = (route.dst >> i * 8) & 0xff;
|
||||
|
||||
printf("%3d.%d.%d.%d\t\t%3x\t\t%d\t\t%d\t\t%s\n",
|
||||
(int)prefix_key->data[0],
|
||||
(int)prefix_key->data[1],
|
||||
(int)prefix_key->data[2],
|
||||
(int)prefix_key->data[3],
|
||||
route.gw, route.dst_len,
|
||||
dst_addr.s_addr = route.dst;
|
||||
printf("%-16s", inet_ntoa(dst_addr));
|
||||
|
||||
gw_addr.s_addr = route.gw;
|
||||
printf("%-16s", inet_ntoa(gw_addr));
|
||||
|
||||
mask_addr.s_addr = htonl(~(0xffffffffU >> route.dst_len));
|
||||
printf("%-16s%-7d%s\n", inet_ntoa(mask_addr),
|
||||
route.metric,
|
||||
route.iface_name);
|
||||
|
||||
if (bpf_map_lookup_elem(lpm_map_fd, prefix_key,
|
||||
prefix_value) < 0) {
|
||||
for (i = 0; i < 4; i++)
|
||||
@ -672,7 +676,7 @@ int main(int ac, char **argv)
|
||||
if (bpf_prog_load_xattr(&prog_load_attr, &obj, &prog_fd))
|
||||
return 1;
|
||||
|
||||
printf("\n**************loading bpf file*********************\n\n\n");
|
||||
printf("\n******************loading bpf file*********************\n");
|
||||
if (!prog_fd) {
|
||||
printf("bpf_prog_load_xattr: %s\n", strerror(errno));
|
||||
return 1;
|
||||
@ -722,7 +726,7 @@ int main(int ac, char **argv)
|
||||
signal(SIGINT, int_exit);
|
||||
signal(SIGTERM, int_exit);
|
||||
|
||||
printf("*******************ROUTE TABLE*************************\n\n\n");
|
||||
printf("\n*******************ROUTE TABLE*************************\n");
|
||||
get_route_table(AF_INET);
|
||||
printf("*******************ARP TABLE***************************\n\n\n");
|
||||
get_arp_table(AF_INET);
|
||||
|
Loading…
Reference in New Issue
Block a user