3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-12-26 01:02:35 +01:00

monitor: Dump RTM_NEWROUTE/DELROUTE/GETROUTE

This commit is contained in:
Denis Kenzior 2019-07-23 11:35:27 -05:00
parent c439a2614c
commit 60078478cf

View File

@ -5748,6 +5748,23 @@ static struct attr_entry addr_entry[] = {
{ },
};
static struct attr_entry route_entry[] = {
{ RTA_DST, "Destination Address", ATTR_CUSTOM,
{ .function = print_inet_addr } },
{ RTA_SRC, "Source Address", ATTR_CUSTOM,
{ .function = print_inet_addr } },
{ RTA_IIF, "Input Interface Index", ATTR_S32 },
{ RTA_OIF, "Output Interface Index", ATTR_S32 },
{ RTA_GATEWAY, "Gateway", ATTR_CUSTOM,
{ .function = print_inet_addr } },
{ RTA_PRIORITY, "Priority of the route", ATTR_S32 },
{ RTA_METRICS, "Metric of the route", ATTR_S32 },
{ RTA_TABLE, "Routing Table", ATTR_U32 },
{ RTA_PREFSRC, "Preferred Source", ATTR_CUSTOM,
{ .function = print_inet_addr } },
{ },
};
static void print_rtnl_attributes(int indent, const struct attr_entry *table,
struct rtattr *rt_attr, int len)
{
@ -5947,6 +5964,28 @@ static void print_ifaddrmsg(const struct ifaddrmsg *addr)
print_field("IFA Flags: %u", addr->ifa_flags);
}
static void print_rtmsg(const struct rtmsg *msg)
{
static struct flag_names rtm_flags[] = {
{ RTM_F_NOTIFY, "notify" },
{ RTM_F_CLONED, "cloned" },
{ RTM_F_EQUALIZE, "multipath-equalizer" },
{ },
};
char str[256];
print_field("RTM Family: %hhu", msg->rtm_family);
print_field("RTM Destination Len: %hhu", msg->rtm_dst_len);
print_field("RTM Source Len: %hhu", msg->rtm_src_len);
print_field("RTM TOS Field: %hhu", msg->rtm_tos);
print_field("RTM Table: %hhu", msg->rtm_table);
print_field("RTM Protocol: %hhu", msg->rtm_protocol);
print_field("RTM Scope: %hhu", msg->rtm_scope);
print_field("RTM Type: %hhu", msg->rtm_type);
flags_str(rtm_flags, str, sizeof(str), msg->rtm_flags);
print_field("RTM Flags: %s", str);
}
static void read_uevent(const char *ifname, int index)
{
char filename[64], line[128];
@ -6036,6 +6075,15 @@ static void print_rtm_link(uint16_t type, const struct ifinfomsg *info, int len)
}
}
static void print_rtm_route(uint16_t type, const struct rtmsg *msg, size_t len)
{
if (!msg || len < sizeof(struct rtmsg))
return;
print_rtmsg(msg);
print_rtnl_attributes(1, route_entry, RTM_RTA(msg), len);
}
static const char *nlmsg_type_to_str(uint32_t msg_type)
{
const char *str = NULL;
@ -6147,6 +6195,7 @@ static void print_rtnl_msg(const struct timeval *tv,
{
struct ifinfomsg *info;
struct ifaddrmsg *addr;
struct rtmsg *rtm;
struct wlan_iface *iface;
int len;
@ -6161,6 +6210,24 @@ static void print_rtnl_msg(const struct timeval *tv,
print_rtm_link(nlmsg->nlmsg_type, info, len);
break;
case RTM_NEWROUTE:
case RTM_GETROUTE:
case RTM_DELROUTE:
rtm = (struct rtmsg *) NLMSG_DATA(nlmsg);
len = RTM_PAYLOAD(nlmsg);
if (!rtm || len <= (int) sizeof(struct rtmsg))
return;
/* Skip 'kernel' and 'default' tables */
if (rtm->rtm_table == RT_TABLE_LOCAL ||
rtm->rtm_table == RT_TABLE_DEFAULT)
return;
print_nlmsghdr(tv, nlmsg);
print_rtm_route(nlmsg->nlmsg_type, rtm, len);
break;
case RTM_NEWADDR:
case RTM_DELADDR:
case RTM_GETADDR:
@ -6206,6 +6273,9 @@ void nlmon_print_rtnl(struct nlmon *nlmon, const struct timeval *tv,
case RTM_NEWADDR:
case RTM_DELADDR:
case RTM_GETADDR:
case RTM_NEWROUTE:
case RTM_GETROUTE:
case RTM_DELROUTE:
print_rtnl_msg(tv, nlmsg);
break;
}