Skip to content

Commit

Permalink
Merge branch 'rajasekarr/zebra_kernel_3597389' into 'dev'
Browse files Browse the repository at this point in the history
zebra: Added traces around zebra-kernel

 #

See merge request nbu-sws/CL/FRR/frr!620
  • Loading branch information
raja-rajasekar committed Feb 16, 2024
2 parents 0ae94a0 + e8f478f commit 2305506
Show file tree
Hide file tree
Showing 4 changed files with 271 additions and 0 deletions.
102 changes: 102 additions & 0 deletions tools/frr_babeltrace.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,74 @@ def location_if_oper_zrecv(field_val):
elif field_val == 4:
return ("Rx Intf Neighbor Delete")

def location_netlink_nexthop_msg_encode_err(field_val):
if field_val == 1:
return ("kernel nexthops not supported, ignoring")
elif field_val == 2:
return ("proto-based nexthops only, ignoring")
elif field_val == 3:
return ("labeled NHGs not supported, ignoring")

def location_netlink_vrf_change(field_val):
if field_val == 1:
return ("IFLA_INFO_DATA missing from VRF message")
elif field_val == 2:
return ("IFLA_VRF_TABLE missing from VRF message")

def location_get_iflink_speed(field_val):
if field_val == 1:
return ("Failure to read interface")
elif field_val == 2:
return ("IOCTL failure to read interface")

def location_zebra_err_string(field_val):
if field_val == 1:
return ("IFLA_VLAN_ID missing from VLAN IF message")
elif field_val == 2:
return ("IFLA_GRE_LOCAL missing from GRE IF message")
elif field_val == 3:
return ("IFLA_GRE_REMOTE missing from GRE IF message")
elif field_val == 4:
return ("IFLA_GRE_LINK missing from GRE IF message")
elif field_val == 5:
return ("IFLA_VXLAN_ID missing from VXLAN IF message")
elif field_val == 6:
return ("IFLA_VXLAN_LOCAL missing from VXLAN IF message")
elif field_val == 7:
return ("IFLA_VXLAN_LINK missing from VXLAN IF message")
elif field_val == 8:
return ("ignoring IFLA_WIRELESS message")
elif field_val == 9:
return ("invalid Intf Name")

def location_netlink_msg_err(field_val):
if field_val == 1:
return ("Invalid address family")
elif field_val == 2:
return ("netlink msg bad size")
elif field_val == 3:
return ("Invalid prefix length-V4")
elif field_val == 4:
return ("Invalid prefix length-V6")
elif field_val == 5:
return ("Invalid/tentative addr")
elif field_val == 6:
return ("No local interface address")
elif field_val == 7:
return ("wrong kernel message")

def location_netlink_intf_err(field_val):
if field_val == 1:
return ("Local Interface Address is NULL")
elif field_val == 2:
return ("RTM_NEWLINK for interface without MTU set")
elif field_val == 3:
return ("Cannot find VNI for VID and IF for vlan state update")
elif field_val == 4:
return ("Cannot find bridge-vlan IF for vlan update")
elif field_val == 5:
return ("Ignoring non-vxlan IF for vlan update")

def location_if_add_del_upd(field_val):
if field_val == 0:
return ("Interface Delete")
Expand Down Expand Up @@ -752,9 +820,31 @@ def parse_frr_bgp_attr_type_unsupported(event):

def parse_frr_zebra_gr_last_route_re(event):
field_parsers = {"location" : location_last_route_re}
parse_event(event, field_parsers)

def parse_frr_zebra_netlink_vrf_change(event):
field_parsers = {"location" : location_netlink_vrf_change}
parse_event(event, field_parsers)

def parse_frr_zebra_netlink_nexthop_msg_encode_err(event):
field_parsers = {"location" : location_netlink_nexthop_msg_encode_err}
parse_event(event, field_parsers)

def parse_frr_zebra_get_iflink_speed(event):
field_parsers = {"location" : location_get_iflink_speed}
parse_event(event, field_parsers)

def parse_frr_zebra_zebra_err_string(event):
field_parsers = {"location" : location_zebra_err_string}
parse_event(event, field_parsers)

def parse_frr_zebra_netlink_msg_err(event):
field_parsers = {"location" : location_netlink_msg_err}
parse_event(event, field_parsers)

def parse_frr_zebra_netlink_intf_err(event):
field_parsers = {"location" : location_netlink_intf_err}
parse_event(event, field_parsers)
############################ evpn parsers - end *#############################

def main():
Expand Down Expand Up @@ -869,6 +959,18 @@ def main():
parse_frr_bgp_attr_type_unsupported,
"frr_zebra:gr_last_route_re":
parse_frr_zebra_gr_last_route_re,
"frr_zebra:netlink_vrf_change":
parse_frr_zebra_netlink_vrf_change,
"frr_zebra:netlink_nexthop_msg_encode_err":
parse_frr_zebra_netlink_nexthop_msg_encode_err,
"frr_zebra:get_iflink_speed":
parse_frr_zebra_get_iflink_speed,
"frr_zebra:z_err_string":
parse_frr_zebra_zebra_err_string,
"frr_zebra:netlink_msg_err":
parse_frr_zebra_netlink_msg_err,
"frr_zebra:netlink_intf_err":
parse_frr_zebra_netlink_intf_err,
}

# get the trace path from the first command line argument
Expand Down
49 changes: 49 additions & 0 deletions zebra/if_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb,
zlog_debug(
"%s: IFLA_INFO_DATA missing from VRF message: %s",
__func__, name);
frrtrace(2, frr_zebra, netlink_vrf_change, name, 1);
return;
}

Expand All @@ -262,6 +263,7 @@ static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb,
zlog_debug(
"%s: IFLA_VRF_TABLE missing from VRF message: %s",
__func__, name);
frrtrace(2, frr_zebra, netlink_vrf_change, name, 2);
return;
}

Expand Down Expand Up @@ -298,6 +300,9 @@ static uint32_t get_iflink_speed(struct interface *interface, int *error)
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("Failure to read interface %s speed: %d %s",
ifname, errno, safe_strerror(errno));

frrtrace(4, frr_zebra, get_iflink_speed, ifname, errno,
safe_strerror(errno), 1);
/* no vrf socket creation may probably mean vrf issue */
if (error)
*error = -1;
Expand All @@ -312,6 +317,11 @@ static uint32_t get_iflink_speed(struct interface *interface, int *error)
zlog_debug(
"IOCTL failure to read interface %s speed: %d %s",
ifname, errno, safe_strerror(errno));

if (errno != EOPNOTSUPP)
frrtrace(4, frr_zebra, get_iflink_speed, ifname, errno,
safe_strerror(errno), 2);

/* no device means interface unreachable */
if (errno == ENODEV && error)
*error = -1;
Expand Down Expand Up @@ -427,6 +437,7 @@ static int netlink_extract_vlan_info(struct rtattr *link_data,
if (!attr[IFLA_VLAN_ID]) {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("IFLA_VLAN_ID missing from VLAN IF message");
frrtrace(1, frr_zebra, z_err_string, 1);
return -1;
}

Expand All @@ -448,20 +459,23 @@ static int netlink_extract_gre_info(struct rtattr *link_data,
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
"IFLA_GRE_LOCAL missing from GRE IF message");
frrtrace(1, frr_zebra, z_err_string, 2);
} else
gre_info->vtep_ip =
*(struct in_addr *)RTA_DATA(attr[IFLA_GRE_LOCAL]);
if (!attr[IFLA_GRE_REMOTE]) {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
"IFLA_GRE_REMOTE missing from GRE IF message");
frrtrace(1, frr_zebra, z_err_string, 3);
} else
gre_info->vtep_ip_remote =
*(struct in_addr *)RTA_DATA(attr[IFLA_GRE_REMOTE]);

if (!attr[IFLA_GRE_LINK]) {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("IFLA_GRE_LINK missing from GRE IF message");
frrtrace(1, frr_zebra, z_err_string, 4);
} else {
gre_info->ifindex_link =
*(ifindex_t *)RTA_DATA(attr[IFLA_GRE_LINK]);
Expand Down Expand Up @@ -504,6 +518,7 @@ static int netlink_extract_vxlan_info(struct rtattr *link_data,
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
"IFLA_VXLAN_ID missing from VXLAN IF message");
frrtrace(1, frr_zebra, z_err_string, 5);
return -1;
}

Expand All @@ -518,6 +533,7 @@ static int netlink_extract_vxlan_info(struct rtattr *link_data,
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
"IFLA_VXLAN_LOCAL missing from VXLAN IF message");
frrtrace(1, frr_zebra, z_err_string, 6);
} else {
vtep_ip_in_msg =
*(struct in_addr *)RTA_DATA(attr[IFLA_VXLAN_LOCAL]);
Expand All @@ -534,6 +550,7 @@ static int netlink_extract_vxlan_info(struct rtattr *link_data,
if (!attr[IFLA_VXLAN_LINK]) {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("IFLA_VXLAN_LINK missing from VXLAN IF message");
frrtrace(1, frr_zebra, z_err_string, 7);
} else {
ifindex_link =
*(ifindex_t *)RTA_DATA(attr[IFLA_VXLAN_LINK]);
Expand Down Expand Up @@ -1171,6 +1188,8 @@ int netlink_interface_addr(struct nlmsghdr *h, ns_id_t ns_id, int startup)
if (addr == NULL) {
zlog_debug("%s: Local Interface Address is NULL for %s",
__func__, ifp->name);
frrtrace(3, frr_zebra, netlink_intf_err, ifp->name,
INTF_INVALID_INDEX, 1);
return -1;
}

Expand Down Expand Up @@ -1282,6 +1301,9 @@ int netlink_interface_addr_dplane(struct nlmsghdr *h, ns_id_t ns_id,
zlog_debug("%s: %s: Invalid address family: %u",
__func__, nl_msg_type_to_str(h->nlmsg_type),
ifa->ifa_family);

frrtrace(3, frr_zebra, netlink_msg_err,
nl_msg_type_to_str(h->nlmsg_type), ifa->ifa_family, 1);
return 0;
}

Expand All @@ -1293,6 +1315,9 @@ int netlink_interface_addr_dplane(struct nlmsghdr *h, ns_id_t ns_id,
h->nlmsg_len,
(size_t)NLMSG_LENGTH(
sizeof(struct ifaddrmsg)));

frrtrace(3, frr_zebra, netlink_msg_err,
nl_msg_type_to_str(h->nlmsg_type), h->nlmsg_len, 2);
return -1;
}

Expand Down Expand Up @@ -1348,6 +1373,10 @@ int netlink_interface_addr_dplane(struct nlmsghdr *h, ns_id_t ns_id,
zlog_debug("%s: %s: Invalid prefix length: %u",
__func__, nl_msg_type_to_str(h->nlmsg_type),
ifa->ifa_prefixlen);

frrtrace(3, frr_zebra, netlink_msg_err,
nl_msg_type_to_str(h->nlmsg_type), ifa->ifa_prefixlen,
3);
return -1;
}

Expand All @@ -1358,6 +1387,10 @@ int netlink_interface_addr_dplane(struct nlmsghdr *h, ns_id_t ns_id,
__func__,
nl_msg_type_to_str(h->nlmsg_type),
ifa->ifa_prefixlen);

frrtrace(3, frr_zebra, netlink_msg_err,
nl_msg_type_to_str(h->nlmsg_type),
ifa->ifa_prefixlen, 4);
return -1;
}

Expand All @@ -1371,6 +1404,9 @@ int netlink_interface_addr_dplane(struct nlmsghdr *h, ns_id_t ns_id,
zlog_debug("%s: %s: Invalid/tentative addr",
__func__,
nl_msg_type_to_str(h->nlmsg_type));

frrtrace(3, frr_zebra, netlink_msg_err,
nl_msg_type_to_str(h->nlmsg_type), 0, 5);
return 0;
}
}
Expand All @@ -1389,6 +1425,8 @@ int netlink_interface_addr_dplane(struct nlmsghdr *h, ns_id_t ns_id,
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("%s: %s: No local interface address",
__func__, nl_msg_type_to_str(h->nlmsg_type));
frrtrace(3, frr_zebra, netlink_msg_err,
nl_msg_type_to_str(h->nlmsg_type), 0, 6);
return -1;
}

Expand Down Expand Up @@ -1487,6 +1525,8 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
/* If this is not link add/delete message so print warning. */
zlog_debug("%s: wrong kernel message %s", __func__,
nl_msg_type_to_str(h->nlmsg_type));
frrtrace(3, frr_zebra, netlink_msg_err,
nl_msg_type_to_str(h->nlmsg_type), 0, 7);
return 0;
}

Expand Down Expand Up @@ -1518,6 +1558,7 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("%s: ignoring IFLA_WIRELESS message",
__func__);
frrtrace(1, frr_zebra, z_err_string, 8);
return 0;
}

Expand All @@ -1530,6 +1571,7 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
if (len < 2 || name[len - 1] != '\0') {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("%s: invalid intf name", __func__);
frrtrace(1, frr_zebra, z_err_string, 9);
return -1;
}

Expand Down Expand Up @@ -1586,6 +1628,8 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
zlog_debug(
"RTM_NEWLINK for interface %s(%u) without MTU set",
name, ifi->ifi_index);
frrtrace(3, frr_zebra, netlink_intf_err, name,
ifi->ifi_index, 2);
dplane_ctx_fini(&ctx);
return 0;
}
Expand Down Expand Up @@ -1896,6 +1940,7 @@ static void vxlan_vni_state_change(struct zebra_if *zif, uint16_t id,
zlog_debug(
"Cannot find VNI for VID (%u) IF %s for vlan state update",
id, zif->ifp->name);
frrtrace(3, frr_zebra, netlink_intf_err, zif->ifp->name, id, 3);
return;
}
if (zif)
Expand Down Expand Up @@ -1975,6 +2020,8 @@ int netlink_vlan_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
if (!ifp) {
zlog_debug("Cannot find bridge-vlan IF (%u) for vlan update",
bvm->ifindex);
frrtrace(3, frr_zebra, netlink_intf_err, INTF_INVALID_NAME,
bvm->ifindex, 4);
return 0;
}

Expand All @@ -1983,6 +2030,8 @@ int netlink_vlan_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
zlog_debug("Ignoring non-vxlan IF (%s) for vlan update",
ifp->name);

frrtrace(3, frr_zebra, netlink_intf_err, ifp->name,
INTF_INVALID_INDEX, 5);
return 0;
}

Expand Down
12 changes: 12 additions & 0 deletions zebra/rt_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -2592,6 +2592,9 @@ ssize_t netlink_nexthop_msg_encode(uint16_t cmd,
zlog_debug(
"%s: nhg_id %u (%s): kernel nexthops not supported, ignoring",
__func__, id, zebra_route_string(type));

frrtrace(3, frr_zebra, netlink_nexthop_msg_encode_err, id,
zebra_route_string(type), 1);
return 0;
}

Expand All @@ -2600,6 +2603,9 @@ ssize_t netlink_nexthop_msg_encode(uint16_t cmd,
zlog_debug(
"%s: nhg_id %u (%s): proto-based nexthops only, ignoring",
__func__, id, zebra_route_string(type));

frrtrace(3, frr_zebra, netlink_nexthop_msg_encode_err, id,
zebra_route_string(type), 2);
return 0;
}

Expand All @@ -2609,6 +2615,9 @@ ssize_t netlink_nexthop_msg_encode(uint16_t cmd,
zlog_debug(
"%s: nhg_id %u (%s): labeled NHGs not supported, ignoring",
__func__, id, zebra_route_string(type));

frrtrace(3, frr_zebra, netlink_nexthop_msg_encode_err, id,
zebra_route_string(type), 3);
return 0;
}

Expand Down Expand Up @@ -3194,6 +3203,9 @@ int netlink_nexthop_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
zlog_debug("Ignore kernel update (%u) for fdb-nh 0x%x",
h->nlmsg_type, id);
}

frrtrace(2, frr_zebra, netlink_nexthop_change_err,
h->nlmsg_type, id);
return 0;
}

Expand Down
Loading

0 comments on commit 2305506

Please sign in to comment.