From 498d2f996354179ef186a3c623586318106a70d2 Mon Sep 17 00:00:00 2001 From: Don Slice Date: Fri, 19 Feb 2016 19:31:16 +0000 Subject: [PATCH] Zebra: Fix vrf setting based on netlink messages Adjusted application of vrf_id as interfaces are handled via netlink message. Ticket: CM-9278 Signed-off-by: Don Slice Reviewed-by: Donald Sharp --- zebra/rt_netlink.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 61dd8b620e..ea3c45c778 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -577,19 +577,6 @@ netlink_vrf_change (struct nlmsghdr *h, struct rtattr *tb, const char *name) } } -static char * -parse_link_kind (struct rtattr *tb) -{ - struct rtattr *linkinfo[IFLA_INFO_MAX+1]; - - memset (linkinfo, 0, sizeof(struct rtattr *)*(IFLA_INFO_MAX+1)); - parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb); - - if (linkinfo[IFLA_INFO_KIND]) - return RTA_DATA(linkinfo[IFLA_INFO_KIND]); - - return NULL; -} /* Called from interface_lookup_netlink(). This function is only used during bootstrap. */ static int @@ -637,9 +624,12 @@ netlink_interface (struct sockaddr_nl *snl, struct nlmsghdr *h, if (tb[IFLA_LINKINFO]) { - kind = parse_link_kind(tb[IFLA_LINKINFO]); + memset (linkinfo, 0, sizeof linkinfo); parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb[IFLA_LINKINFO]); + if (linkinfo[IFLA_INFO_KIND]) + kind = RTA_DATA(linkinfo[IFLA_INFO_KIND]); + if (linkinfo[IFLA_INFO_SLAVE_KIND]) slave_kind = RTA_DATA(linkinfo[IFLA_INFO_SLAVE_KIND]); @@ -1262,9 +1252,12 @@ netlink_link_change (struct sockaddr_nl *snl, struct nlmsghdr *h, if (tb[IFLA_LINKINFO]) { - kind = parse_link_kind(tb[IFLA_LINKINFO]); + memset (linkinfo, 0, sizeof linkinfo); parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb[IFLA_LINKINFO]); + if (linkinfo[IFLA_INFO_KIND]) + kind = RTA_DATA(linkinfo[IFLA_INFO_KIND]); + if (linkinfo[IFLA_INFO_SLAVE_KIND]) slave_kind = RTA_DATA(linkinfo[IFLA_INFO_SLAVE_KIND]); -- 2.39.5