struct ifinfomsg *ifi;
struct rtattr *tb[IFLA_MAX + 1];
struct interface *ifp;
- char *name;
+ char *name = NULL;
+ char *kind = NULL;
ifi = NLMSG_DATA (h);
if (tb[IFLA_LINKINFO])
{
- char *kind = parse_link_kind(tb[IFLA_LINKINFO]);
+ kind = parse_link_kind(tb[IFLA_LINKINFO]);
if (kind && strcmp(kind, "vrf") == 0)
{
}
if (tb[IFLA_MASTER])
- vrf_id = *(u_int32_t *)RTA_DATA(tb[IFLA_MASTER]);
+ {
+ if (kind && strcmp(kind, "vrf") == 0)
+ vrf_id = *(u_int32_t *)RTA_DATA(tb[IFLA_MASTER]);
+ else
+ vrf_id = VRF_DEFAULT;
+ }
/* Add interface. */
ifp = if_get_by_name_vrf (name, vrf_id);
struct ifinfomsg *ifi;
struct rtattr *tb[IFLA_MAX + 1];
struct interface *ifp;
- char *name;
+ char *name = NULL;
+ char *kind = NULL;
struct connected *ifc;
struct listnode *node;
if (tb[IFLA_LINKINFO])
{
- char *kind = parse_link_kind(tb[IFLA_LINKINFO]);
+ kind = parse_link_kind(tb[IFLA_LINKINFO]);
if (kind && strcmp(kind, "vrf") == 0)
{
if (h->nlmsg_type == RTM_NEWLINK)
{
if (tb[IFLA_MASTER])
- vrf_id = *(u_int32_t *)RTA_DATA(tb[IFLA_MASTER]);
+ {
+ if (kind && strcmp (kind, "vrf") == 0)
+ vrf_id = *(u_int32_t *)RTA_DATA(tb[IFLA_MASTER]);
+ else
+ vrf_id = VRF_DEFAULT;
+ }
/* clean up any old ifps in a different VRF */
ifp = if_lookup_by_index_per_ns (dzns, ifi->ifi_index);