int len;
struct ifinfomsg *ifi;
struct rtattr *tb[IFLA_MAX + 1];
+ struct rtattr *linkinfo[IFLA_MAX + 1];
struct interface *ifp;
char *name = NULL;
char *kind = NULL;
+ char *slave_kind = NULL;
ifi = NLMSG_DATA (h);
if (tb[IFLA_LINKINFO])
{
kind = parse_link_kind(tb[IFLA_LINKINFO]);
+ parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb[IFLA_LINKINFO]);
+
+ if (linkinfo[IFLA_INFO_SLAVE_KIND])
+ slave_kind = RTA_DATA(linkinfo[IFLA_INFO_SLAVE_KIND]);
if (kind && strcmp(kind, "vrf") == 0)
{
if (tb[IFLA_MASTER])
{
- if (kind && strcmp(kind, "vrf") == 0)
+ if ((kind && strcmp(kind, "vrf") == 0) ||
+ (slave_kind && strcmp(slave_kind, "vrf") == 0))
vrf_id = *(u_int32_t *)RTA_DATA(tb[IFLA_MASTER]);
else
vrf_id = VRF_DEFAULT;
int len;
struct ifinfomsg *ifi;
struct rtattr *tb[IFLA_MAX + 1];
+ struct rtattr *linkinfo[IFLA_MAX + 1];
struct interface *ifp;
char *name = NULL;
char *kind = NULL;
+ char *slave_kind = NULL;
struct connected *ifc;
struct listnode *node;
if (tb[IFLA_LINKINFO])
{
kind = parse_link_kind(tb[IFLA_LINKINFO]);
+ parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb[IFLA_LINKINFO]);
+
+ if (linkinfo[IFLA_INFO_SLAVE_KIND])
+ slave_kind = RTA_DATA(linkinfo[IFLA_INFO_SLAVE_KIND]);
if (kind && strcmp(kind, "vrf") == 0)
{
{
if (tb[IFLA_MASTER])
{
- if (kind && strcmp (kind, "vrf") == 0)
+ if ((kind && strcmp(kind, "vrf") == 0) ||
+ (slave_kind && strcmp(slave_kind, "vrf") == 0))
vrf_id = *(u_int32_t *)RTA_DATA(tb[IFLA_MASTER]);
else
vrf_id = VRF_DEFAULT;