From: Philippe Guibert Date: Wed, 29 Aug 2018 09:29:07 +0000 (+0200) Subject: zebra: do not update link if interface is veth interface X-Git-Tag: frr-7.1-dev~412^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=0e4864eaf0dfd5d883d8192a905405b9a72af68e;p=mirror%2Ffrr.git zebra: do not update link if interface is veth interface when interface is a virtual ethernet interface, then there is no need to update link pointer of interface. Signed-off-by: Philippe Guibert --- diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index 2b9e8a589c..0dcf5082a2 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -259,6 +259,8 @@ static void netlink_determine_zebra_iftype(char *kind, zebra_iftype_t *zif_type) *zif_type = ZEBRA_IF_VXLAN; else if (strcmp(kind, "macvlan") == 0) *zif_type = ZEBRA_IF_MACVLAN; + else if (strcmp(kind, "veth") == 0) + *zif_type = ZEBRA_IF_VETH; } #define parse_rtattr_nested(tb, max, rta) \ diff --git a/zebra/interface.c b/zebra/interface.c index 8558a8bd59..32ee1a566a 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1007,6 +1007,8 @@ void zebra_if_update_link(struct interface *ifp, ifindex_t link_ifindex, { struct zebra_if *zif; + if (IS_ZEBRA_IF_VETH(ifp)) + return; zif = (struct zebra_if *)ifp->info; zif->link_ifindex = link_ifindex; zif->link = if_lookup_by_index_per_ns(zebra_ns_lookup(ns_id), @@ -1094,6 +1096,10 @@ static const char *zebra_ziftype_2str(zebra_iftype_t zif_type) return "VRF"; break; + case ZEBRA_IF_VETH: + return "VETH"; + break; + default: return "Unknown"; break; diff --git a/zebra/interface.h b/zebra/interface.h index bb39ac5e67..956d430cf9 100644 --- a/zebra/interface.h +++ b/zebra/interface.h @@ -191,6 +191,7 @@ typedef enum { ZEBRA_IF_BRIDGE, /* bridge device */ ZEBRA_IF_VLAN, /* VLAN sub-interface */ ZEBRA_IF_MACVLAN, /* MAC VLAN interface*/ + ZEBRA_IF_VETH, /* VETH interface*/ } zebra_iftype_t; /* Zebra "slave" interface type */ @@ -312,7 +313,10 @@ static inline void zebra_if_set_ziftype(struct interface *ifp, #define IS_ZEBRA_IF_MACVLAN(ifp) \ (((struct zebra_if *)(ifp->info))->zif_type == ZEBRA_IF_MACVLAN) -#define IS_ZEBRA_IF_BRIDGE_SLAVE(ifp) \ +#define IS_ZEBRA_IF_VETH(ifp) \ + (((struct zebra_if *)(ifp->info))->zif_type == ZEBRA_IF_VETH) + +#define IS_ZEBRA_IF_BRIDGE_SLAVE(ifp) \ (((struct zebra_if *)(ifp->info))->zif_slave_type \ == ZEBRA_IF_SLAVE_BRIDGE)