diff options
36 files changed, 229 insertions, 177 deletions
diff --git a/bfdd/bfd.c b/bfdd/bfd.c index 4354431820..3d8f38181f 100644 --- a/bfdd/bfd.c +++ b/bfdd/bfd.c @@ -139,7 +139,7 @@ int bfd_session_enable(struct bfd_session *bs)  	if (bs->key.ifname[0]) {  		if (vrf) -			ifp = if_lookup_by_name(bs->key.ifname, vrf->vrf_id); +			ifp = if_lookup_by_name(bs->key.ifname, vrf);  		else  			ifp = if_lookup_by_name_all_vrf(bs->key.ifname);  		if (ifp == NULL) { @@ -148,7 +148,7 @@ int bfd_session_enable(struct bfd_session *bs)  			return 0;  		}  		if (bs->key.ifname[0] && !vrf) { -			vrf = vrf_lookup_by_id(ifp->vrf_id); +			vrf = ifp->vrf;  			if (vrf == NULL) {  				log_error(  					  "session-enable: specified VRF doesn't exists."); diff --git a/bfdd/ptm_adapter.c b/bfdd/ptm_adapter.c index 1d5e8310fd..a634d923d2 100644 --- a/bfdd/ptm_adapter.c +++ b/bfdd/ptm_adapter.c @@ -572,7 +572,10 @@ static void bfdd_sessions_enable_interface(struct interface *ifp)  {  	struct bfd_session_observer *bso;  	struct bfd_session *bs; -	struct vrf *vrf; +	struct vrf *vrf = ifp->vrf; + +	if (!vrf) +		return;  	TAILQ_FOREACH(bso, &bglobal.bg_obslist, bso_entry) {  		bs = bso->bso_bs; @@ -581,9 +584,6 @@ static void bfdd_sessions_enable_interface(struct interface *ifp)  		/* Interface name mismatch. */  		if (strcmp(ifp->name, bs->key.ifname))  			continue; -		vrf = vrf_lookup_by_id(ifp->vrf_id); -		if (!vrf) -			continue;  		if (bs->key.vrfname[0] &&  		    strcmp(vrf->name, bs->key.vrfname))  			continue; diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index 44c1261a9a..ae30fcfb18 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -802,7 +802,7 @@ bool bgp_zebra_nexthop_set(union sockunion *local, union sockunion *remote,  								 peer->bgp->vrf_id));  		} else if (peer->update_if)  			ifp = if_lookup_by_name(peer->update_if, -						vrf_lookup_by_id(peer->bgp->vrf_id)); +					vrf_lookup_by_id(peer->bgp->vrf_id));  		else  			ifp = if_lookup_by_ipv6_exact(&local->sin6.sin6_addr,  						      local->sin6.sin6_scope_id, diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c index 0334b98a12..d2733ebaff 100644 --- a/isisd/isis_cli.c +++ b/isisd/isis_cli.c @@ -97,8 +97,7 @@ DEFPY(no_router_isis, no_router_isis_cmd, "no router isis WORD$tag",  			/* add callbacks to delete each of the circuits listed  			 */  			const char *vrf_name = -				vrf_lookup_by_id(circuit->interface->vrf_id) -					->name; +				circuit->interface->vrf->name;  			snprintf(  				temp_xpath, XPATH_MAXLEN,  				"/frr-interface:lib/interface[name='%s'][vrf='%s']/frr-isisd:isis", @@ -141,7 +141,7 @@ struct interface *if_create(const char *name, struct vrf *vrf)  	assert(name);  	strlcpy(ifp->name, name, sizeof(ifp->name)); -	ifp->vrf_id = vrf->vrf_id; +	ifp->vrf = vrf;  	IFNAME_RB_INSERT(vrf, ifp);  	ifp->connected = list_new();  	ifp->connected->del = (void (*)(void *))connected_free; @@ -170,14 +170,14 @@ void if_update_to_new_vrf(struct interface *ifp, struct vrf *vrf)  		return;  	}  	/* remove interface from old master vrf list */ -	old_vrf = vrf_lookup_by_id(ifp->vrf_id); +	old_vrf = ifp->vrf;  	if (old_vrf) {  		IFNAME_RB_REMOVE(old_vrf, ifp);  		if (ifp->ifindex != IFINDEX_INTERNAL)  			IFINDEX_RB_REMOVE(old_vrf, ifp);  	} -	ifp->vrf_id = vrf->vrf_id; +	ifp->vrf = vrf;  	IFNAME_RB_INSERT(vrf, ifp);  	if (ifp->ifindex != IFINDEX_INTERNAL) @@ -225,9 +225,8 @@ void if_delete_retain(struct interface *ifp)  /* Delete and free interface structure. */  void if_delete(struct interface *ifp)  { -	struct vrf *vrf; +	struct vrf *vrf = ifp->vrf; -	vrf = vrf_lookup_by_id(ifp->vrf_id);  	assert(vrf);  	IFNAME_RB_REMOVE(vrf, ifp); @@ -440,7 +439,7 @@ struct interface *if_get_by_name(const char *name, struct vrf *vrf)  	case VRF_BACKEND_VRF_LITE:  		ifp = if_lookup_by_name_all_vrf(name);  		if (ifp) { -			if (ifp->vrf_id == vrf->vrf_id) +			if (ifp->vrf == vrf)  				return ifp;  			/* If it came from the kernel or by way of zclient,  			 * believe it and update the ifp accordingly. @@ -458,7 +457,7 @@ void if_set_index(struct interface *ifp, ifindex_t ifindex)  {  	struct vrf *vrf; -	vrf = vrf_lookup_by_id(ifp->vrf_id); +	vrf = ifp->vrf;  	assert(vrf);  	if (ifp->ifindex == ifindex) @@ -602,7 +601,8 @@ static void if_dump(const struct interface *ifp)  		zlog_info(  			"Interface %s vrf %u index %d metric %d mtu %d "  			"mtu6 %d %s", -			ifp->name, ifp->vrf_id, ifp->ifindex, ifp->metric, +			ifp->name, vrf_to_id(ifp->vrf), +			ifp->ifindex, ifp->metric,  			ifp->mtu, ifp->mtu6, if_flag_dump(ifp->flags));  } @@ -784,7 +784,8 @@ connected_log(struct connected *connected, char *str)  	p = connected->address;  	snprintf(logbuf, BUFSIZ, "%s interface %s vrf %u %s %s/%d ", str, -		 ifp->name, ifp->vrf_id, prefix_family_str(p), +		 ifp->name, vrf_to_id(ifp->vrf), +		 prefix_family_str(p),  		 inet_ntop(p->family, &p->u.prefix, buf, BUFSIZ), p->prefixlen);  	p = connected->destination; @@ -1159,7 +1160,7 @@ DEFPY_NOSH (interface,  		ifp = if_lookup_by_name(ifname, vrf);  	else  		ifp = if_lookup_by_name_all_vrf(ifname); -	if (ifp && ifp->vrf_id != vrf->vrf_id) { +	if (ifp && ifp->vrf != vrf) {  		/*  		 * Special case 1: a VRF name was specified, but the found  		 * interface is associated to different VRF. Reject the command. @@ -1175,7 +1176,7 @@ DEFPY_NOSH (interface,  		 * interface is associated to a VRF other than the default one.  		 * Update vrf_id and vrfname to account for that.  		 */ -		vrf = vrf_lookup_by_id(ifp->vrf_id); +		vrf = ifp->vrf;  		assert(vrf);  		vrfname = vrf->name;  	} @@ -1340,7 +1341,7 @@ static int lib_interface_create(enum nb_event event,  		 */  		if (vrf_get_backend() == VRF_BACKEND_VRF_LITE) {  			ifp = if_lookup_by_name_all_vrf(ifname); -			if (ifp && ifp->vrf_id != vrf->vrf_id) { +			if (ifp && ifp->vrf != vrf) {  				zlog_warn(  					"%s: interface %s already exists in another VRF",  					__func__, ifp->name); @@ -294,7 +294,7 @@ struct interface {  #endif /* HAVE_NET_RT_IFLIST */  	struct route_node *node; -	vrf_id_t vrf_id; +	struct vrf *vrf;  	QOBJ_FIELDS  }; @@ -305,33 +305,37 @@ RB_HEAD(if_index_head, interface);  RB_PROTOTYPE(if_index_head, interface, index_entry, if_cmp_func)  DECLARE_QOBJ_TYPE(interface) -#define IFNAME_RB_INSERT(vrf, ifp)                                             \ -	if (RB_INSERT(if_name_head, &vrf->ifaces_by_name, (ifp)))              \ +#define IFNAME_RB_INSERT(_vrf, _ifp)                                           \ +	if (RB_INSERT(if_name_head, &(_vrf)->ifaces_by_name, (_ifp)))	       \  		flog_err(EC_LIB_INTERFACE,                                     \  			 "%s(%s): corruption detected -- interface with this " \  			 "name exists already in VRF %u!",                     \ -			 __func__, (ifp)->name, (ifp)->vrf_id); +			 __func__, (_ifp)->name, (_ifp)->vrf ?                 \ +			 (_ifp)->vrf->vrf_id : VRF_UNKNOWN); -#define IFNAME_RB_REMOVE(vrf, ifp)                                             \ -	if (RB_REMOVE(if_name_head, &vrf->ifaces_by_name, (ifp)) == NULL)      \ +#define IFNAME_RB_REMOVE(_vrf, _ifp)                                           \ +	if (RB_REMOVE(if_name_head, &(_vrf)->ifaces_by_name, (_ifp)) == NULL)  \  		flog_err(EC_LIB_INTERFACE,                                     \  			 "%s(%s): corruption detected -- interface with this " \  			 "name doesn't exist in VRF %u!",                      \ -			 __func__, (ifp)->name, (ifp)->vrf_id); +			 __func__, (_ifp)->name, (_ifp)->vrf ?                 \ +			 (_ifp)->vrf->vrf_id : VRF_UNKNOWN); -#define IFINDEX_RB_INSERT(vrf, ifp)                                            \ -	if (RB_INSERT(if_index_head, &vrf->ifaces_by_index, (ifp)))            \ +#define IFINDEX_RB_INSERT(_vrf, _ifp)                                          \ +	if (RB_INSERT(if_index_head, &(_vrf)->ifaces_by_index, (_ifp)))        \  		flog_err(EC_LIB_INTERFACE,                                     \  			 "%s(%u): corruption detected -- interface with this " \  			 "ifindex exists already in VRF %u!",                  \ -			 __func__, (ifp)->ifindex, (ifp)->vrf_id); +			 __func__, (_ifp)->ifindex, (_ifp)->vrf ?              \ +			 (_ifp)->vrf->vrf_id : VRF_UNKNOWN); -#define IFINDEX_RB_REMOVE(vrf, ifp)                                            \ -	if (RB_REMOVE(if_index_head, &vrf->ifaces_by_index, (ifp)) == NULL)    \ +#define IFINDEX_RB_REMOVE(_vrf, _ifp)                                          \ +	if (RB_REMOVE(if_index_head, &(_vrf)->ifaces_by_index, (_ifp)) == NULL)\  		flog_err(EC_LIB_INTERFACE,                                     \  			 "%s(%u): corruption detected -- interface with this " \  			 "ifindex doesn't exist in VRF %u!",                   \ -			 __func__, (ifp)->ifindex, (ifp)->vrf_id); +			 __func__, (_ifp)->ifindex, (_ifp)->vrf ?              \ +			 (_ifp)->vrf->vrf_id : VRF_UNKNOWN);  #define FOR_ALL_INTERFACES(vrf, ifp)                                           \  	if (vrf)                                                               \ @@ -923,14 +923,15 @@ int vrf_bind(vrf_id_t vrf_id, int fd, const char *name)  {  	int ret = 0;  	struct interface *ifp; +	struct vrf *vrf = vrf_lookup_by_id(vrf_id); -	if (fd < 0 || name == NULL) +	if (fd < 0 || name == NULL || !vrf)  		return fd;  	/* the device should exist  	 * otherwise we should return  	 * case ifname = vrf in netns mode => return  	 */ -	ifp = if_lookup_by_name(name, vrf_id); +	ifp = if_lookup_by_name(name, vrf);  	if (!ifp)  		return fd;  #ifdef SO_BINDTODEVICE @@ -1017,3 +1018,13 @@ vrf_id_t vrf_generate_id(void)  	return ++vrf_id_local;  } + +vrf_id_t vrf_to_id(struct vrf *vrf) +{ +	return vrf ? vrf->vrf_id : VRF_UNKNOWN; +} + +const char *vrf_to_name(struct vrf *vrf) +{ +	return vrf ? vrf->name : "NIL"; +} @@ -113,6 +113,8 @@ extern struct vrf *vrf_lookup_by_name(const char *);  extern struct vrf *vrf_get(vrf_id_t, const char *);  extern const char *vrf_id_to_name(vrf_id_t vrf_id);  extern vrf_id_t vrf_name_to_id(const char *); +extern vrf_id_t vrf_to_id(struct vrf *vrf); +extern const char *vrf_to_name(struct vrf *vrf);  /* vrf context is searched and created   */ diff --git a/lib/zclient.c b/lib/zclient.c index da8dc4e906..94d92f67e7 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -1469,6 +1469,11 @@ struct interface *zebra_interface_add_read(struct stream *s, vrf_id_t vrf_id)  	/* Lookup/create interface by name. */  	ifp = if_get_by_name(ifname_tmp, vrf); +	/* update vrf_id of interface */ +	if (ifp->vrf->vrf_id == VRF_UNKNOWN && +	    vrf->vrf_id != VRF_UNKNOWN) +		ifp->vrf = vrf; +  	zebra_interface_if_set_value(s, ifp);  	return ifp; @@ -2844,11 +2849,12 @@ void zclient_interface_set_master(struct zclient *client,  	s = client->obuf;  	stream_reset(s); -	zclient_create_header(s, ZEBRA_INTERFACE_SET_MASTER, master->vrf_id); +	zclient_create_header(s, ZEBRA_INTERFACE_SET_MASTER, +			      vrf_to_id(master->vrf)); -	stream_putl(s, master->vrf_id); +	stream_putl(s, vrf_to_id(master->vrf));  	stream_putl(s, master->ifindex); -	stream_putl(s, slave->vrf_id); +	stream_putl(s, vrf_to_id(slave->vrf));  	stream_putl(s, slave->ifindex);  	stream_putw_at(s, 0, stream_get_endp(s)); diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c index 4075f32092..6516129c5d 100644 --- a/ospfd/ospf_interface.c +++ b/ospfd/ospf_interface.c @@ -349,8 +349,8 @@ void ospf_if_free(struct ospf_interface *oi)  	if (IS_DEBUG_OSPF_EVENT)  		zlog_debug("%s: ospf interface %s vrf %s id %u deleted",  			   __PRETTY_FUNCTION__, oi->ifp->name, -			   ospf_vrf_id_to_name(oi->ifp->vrf_id), -			   oi->ifp->vrf_id); +			   vrf_to_name(oi->ifp->vrf), +			   vrf_to_id(oi->ifp->vrf));  	ospf_delete_from_if(oi->ifp, oi); diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index e2ddf36a36..6fee49d122 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -7279,7 +7279,7 @@ static int ospf_vty_dead_interval_set(struct vty *vty, const char *interval_str,  	if (nbr_str) {  		struct ospf *ospf = NULL; -		ospf = ospf_lookup_by_vrf_id(ifp->vrf_id); +		ospf = ospf_lookup_by_vrf(ifp->vrf);  		if (ospf) {  			oi = ospf_if_lookup_by_local_addr(ospf, ifp, addr);  			if (oi) @@ -7396,7 +7396,7 @@ DEFUN (no_ip_ospf_dead_interval,  	if (argc == 1) {  		struct ospf *ospf = NULL; -		ospf = ospf_lookup_by_vrf_id(ifp->vrf_id); +		ospf = ospf_lookup_by_vrf(ifp->vrf);  		if (ospf) {  			oi = ospf_if_lookup_by_local_addr(ospf, ifp, addr);  			if (oi) @@ -7995,8 +7995,8 @@ DEFUN (ip_ospf_area,  	argv_find(argv, argc, "area", &idx);  	areaid = argv[idx + 1]->arg; -	if (ifp->vrf_id && !instance) -		ospf = ospf_lookup_by_vrf_id(ifp->vrf_id); +	if (ifp->vrf && ifp->vrf->vrf_id && !instance) +		ospf = ospf_lookup_by_vrf(ifp->vrf);  	else  		ospf = ospf_lookup_instance(instance); @@ -8093,8 +8093,8 @@ DEFUN (no_ip_ospf_area,  	if (argv_find(argv, argc, "(1-65535)", &idx))  		instance = strtol(argv[idx]->arg, NULL, 10); -	if (ifp->vrf_id && !instance) -		ospf = ospf_lookup_by_vrf_id(ifp->vrf_id); +	if (ifp->vrf && ifp->vrf->vrf_id && !instance) +		ospf = ospf_lookup_by_vrf(ifp->vrf);  	else  		ospf = ospf_lookup_instance(instance); @@ -9720,7 +9720,7 @@ static int config_write_interface_one(struct vty *vty, struct vrf *vrf)  			continue;  		vty_frame(vty, "!\n"); -		if (ifp->vrf_id == VRF_DEFAULT) +		if (ifp->vrf->vrf_id == VRF_DEFAULT)  			vty_frame(vty, "interface %s\n", ifp->name);  		else  			vty_frame(vty, "interface %s vrf %s\n", ifp->name, diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c index 01b48b0c74..33d2c82d03 100644 --- a/ospfd/ospf_zebra.c +++ b/ospfd/ospf_zebra.c @@ -110,8 +110,8 @@ static int ospf_interface_add(ZAPI_CALLBACK_ARGS)  	if (IS_DEBUG_OSPF(zebra, ZEBRA_INTERFACE))  		zlog_debug(  			"Zebra: interface add %s vrf %s[%u] index %d flags %llx metric %d mtu %d speed %u", -			ifp->name, ospf_vrf_id_to_name(ifp->vrf_id), -			ifp->vrf_id, ifp->ifindex, +			ifp->name, vrf_to_name(ifp->vrf), +			vrf_to_id(ifp->vrf), ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu,  			ifp->speed); @@ -152,8 +152,8 @@ static int ospf_interface_delete(ZAPI_CALLBACK_ARGS)  	if (IS_DEBUG_OSPF(zebra, ZEBRA_INTERFACE))  		zlog_debug(  			"Zebra: interface delete %s vrf %s[%u] index %d flags %llx metric %d mtu %d", -			ifp->name, ospf_vrf_id_to_name(ifp->vrf_id), -			ifp->vrf_id, ifp->ifindex, +			ifp->name, vrf_to_name(ifp->vrf), +			vrf_to_id(ifp->vrf), ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	hook_call(ospf_if_delete, ifp); diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c index 073a51561b..de51ec226a 100644 --- a/ospfd/ospfd.c +++ b/ospfd/ospfd.c @@ -452,6 +452,11 @@ struct ospf *ospf_lookup_by_vrf_id(vrf_id_t vrf_id)  	vrf = vrf_lookup_by_id(vrf_id);  	if (!vrf)  		return NULL; +	return ospf_lookup_by_vrf(vrf); +} + +struct ospf *ospf_lookup_by_vrf(struct vrf *vrf) +{  	return (vrf->info) ? (struct ospf *)vrf->info : NULL;  } @@ -1347,8 +1352,8 @@ void ospf_if_update(struct ospf *ospf, struct interface *ifp)  	if (IS_DEBUG_OSPF_EVENT)  		zlog_debug( -			"%s: interface %s ifp->vrf_id %u ospf vrf %s vrf_id %u router_id %s", -			__PRETTY_FUNCTION__, ifp->name, ifp->vrf_id, +			"%s: interface %s ifp->vrf->vrf_id %u ospf vrf %s vrf_id %u router_id %s", +			__PRETTY_FUNCTION__, ifp->name, vrf_to_id(ifp->vrf),  			ospf_vrf_id_to_name(ospf->vrf_id), ospf->vrf_id,  			inet_ntoa(ospf->router_id)); diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h index cbea033b73..a46febaeca 100644 --- a/ospfd/ospfd.h +++ b/ospfd/ospfd.h @@ -507,6 +507,7 @@ extern struct ospf *ospf_get_instance(unsigned short);  extern struct ospf *ospf_lookup_by_inst_name(unsigned short instance,  					     const char *name);  extern struct ospf *ospf_lookup_by_vrf_id(vrf_id_t vrf_id); +extern struct ospf *ospf_lookup_by_vrf(struct vrf *vrf);  extern void ospf_finish(struct ospf *);  extern void ospf_router_id_update(struct ospf *ospf);  extern int ospf_network_set(struct ospf *, struct prefix_ipv4 *, struct in_addr, diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index 4d6af1b51e..6ccc6ed196 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -120,7 +120,7 @@ struct pim_interface *pim_if_new(struct interface *ifp, bool igmp, bool pim,  	pim_ifp = XCALLOC(MTYPE_PIM_INTERFACE, sizeof(*pim_ifp));  	pim_ifp->options = 0; -	pim_ifp->pim = pim_get_pim_instance(ifp->vrf_id); +	pim_ifp->pim = pim_get_pim_instance(vrf_to_id(ifp->vrf));  	pim_ifp->mroute_vif_index = -1;  	pim_ifp->igmp_version = IGMP_DEFAULT_VERSION; @@ -781,7 +781,7 @@ void pim_if_addr_del_all(struct interface *ifp)  	struct connected *ifc;  	struct listnode *node;  	struct listnode *nextnode; -	struct vrf *vrf = vrf_lookup_by_id(ifp->vrf_id); +	struct vrf *vrf = ifp->vrf;  	struct pim_instance *pim;  	if (!vrf) @@ -853,7 +853,7 @@ struct in_addr pim_find_primary_addr(struct interface *ifp)  	int v4_addrs = 0;  	int v6_addrs = 0;  	struct pim_interface *pim_ifp = ifp->info; -	struct vrf *vrf = vrf_lookup_by_id(ifp->vrf_id); +	struct vrf *vrf = ifp->vrf;  	if (!vrf)  		return addr; @@ -894,7 +894,7 @@ struct in_addr pim_find_primary_addr(struct interface *ifp)  	if (!v4_addrs && v6_addrs && !if_is_loopback(ifp)) {  		struct interface *lo_ifp;  		// DBS - Come back and check here -		if (ifp->vrf_id == VRF_DEFAULT) +		if (!ifp->vrf || ifp->vrf->vrf_id == VRF_DEFAULT)  			lo_ifp = if_lookup_by_name("lo", vrf);  		else  			lo_ifp = if_lookup_by_name(vrf->name, vrf); diff --git a/pimd/pim_static.c b/pimd/pim_static.c index 442b22e06f..4ddf21951b 100644 --- a/pimd/pim_static.c +++ b/pimd/pim_static.c @@ -92,7 +92,7 @@ int pim_static_add(struct pim_instance *pim, struct interface *iif,  		return -4;  	}  #endif -	if (iif->vrf_id != oif->vrf_id) { +	if (iif->vrf != oif->vrf) {  		return -3;  	} diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c index b5cde6b7f5..c4d1835352 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -214,7 +214,7 @@ static int pim_zebra_if_state_up(ZAPI_CALLBACK_ARGS)  		RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {  			if ((table_id == vrf->data.l.table_id) -			    && (ifp->vrf_id != vrf->vrf_id)) { +			    && (ifp->vrf != vrf)) {  				struct interface *master = if_lookup_by_name(  							     vrf->name, vrf); diff --git a/ripd/rip_interface.c b/ripd/rip_interface.c index 631c7f4603..307785cdb4 100644 --- a/ripd/rip_interface.c +++ b/ripd/rip_interface.c @@ -364,7 +364,7 @@ int rip_interface_down(ZAPI_CALLBACK_ARGS)  	if (IS_RIP_DEBUG_ZEBRA)  		zlog_debug(  			"interface %s vrf %u index %d flags %llx metric %d mtu %d is down", -			ifp->name, ifp->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	return 0; @@ -385,7 +385,7 @@ int rip_interface_up(ZAPI_CALLBACK_ARGS)  	if (IS_RIP_DEBUG_ZEBRA)  		zlog_debug(  			"interface %s vrf %u index %d flags %#llx metric %d mtu %d is up", -			ifp->name, ifp->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	rip_interface_sync(ifp); @@ -413,7 +413,7 @@ int rip_interface_add(ZAPI_CALLBACK_ARGS)  	if (IS_RIP_DEBUG_ZEBRA)  		zlog_debug(  			"interface add %s vrf %u index %d flags %#llx metric %d mtu %d", -			ifp->name, ifp->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	/* Check if this interface is RIP enabled or not.*/ @@ -453,7 +453,7 @@ int rip_interface_delete(ZAPI_CALLBACK_ARGS)  	zlog_info(  		"interface delete %s vrf %u index %d flags %#llx metric %d mtu %d", -		ifp->name, ifp->vrf_id, ifp->ifindex, +		ifp->name, ifp->vrf->vrf_id, ifp->ifindex,  		(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	/* To support pseudo interface do not free interface structure.  */ @@ -482,6 +482,7 @@ int rip_interface_vrf_update(ZAPI_CALLBACK_ARGS)  			   ifp->name, vrf_id, new_vrf_id);  	if_update_to_new_vrf(ifp, new_vrf); +  	rip_interface_sync(ifp);  	return 0; @@ -1226,7 +1227,7 @@ void rip_interface_sync(struct interface *ifp)  {  	struct vrf *vrf; -	vrf = vrf_lookup_by_id(ifp->vrf_id); +	vrf = ifp->vrf;  	if (vrf) {  		struct rip_interface *ri; diff --git a/ripd/ripd.c b/ripd/ripd.c index 72af5326b5..2098435d7b 100644 --- a/ripd/ripd.c +++ b/ripd/ripd.c @@ -3451,6 +3451,8 @@ void rip_if_rmap_update_interface(struct interface *ifp)  	if (!rip)  		return; +	if (ifp->vrf && ifp->vrf->vrf_id == VRF_UNKNOWN) +		return;  	ctx = rip->if_rmap_ctx;  	if (!ctx)  		return; diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c index ebecb64847..71f5552b2a 100644 --- a/ripngd/ripng_interface.c +++ b/ripngd/ripng_interface.c @@ -210,7 +210,7 @@ int ripng_interface_up(ZAPI_CALLBACK_ARGS)  	if (IS_RIPNG_DEBUG_ZEBRA)  		zlog_debug(  			"interface up %s vrf %u index %d flags %llx metric %d mtu %d", -			ifp->name, ifp->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);  	ripng_interface_sync(ifp); @@ -247,7 +247,7 @@ int ripng_interface_down(ZAPI_CALLBACK_ARGS)  	if (IS_RIPNG_DEBUG_ZEBRA)  		zlog_debug(  			"interface down %s vrf %u index %d flags %#llx metric %d mtu %d", -			ifp->name, ifp->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);  	return 0; @@ -264,7 +264,7 @@ int ripng_interface_add(ZAPI_CALLBACK_ARGS)  	if (IS_RIPNG_DEBUG_ZEBRA)  		zlog_debug(  			"RIPng interface add %s vrf %u index %d flags %#llx metric %d mtu %d", -			ifp->name, ifp->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);  	/* Check is this interface is RIP enabled or not.*/ @@ -299,7 +299,7 @@ int ripng_interface_delete(ZAPI_CALLBACK_ARGS)  	zlog_info(  		"interface delete %s vrf %u index %d flags %#llx metric %d mtu %d", -		ifp->name, ifp->vrf_id, ifp->ifindex, +		ifp->name, ifp->vrf->vrf_id, ifp->ifindex,  		(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);  	/* To support pseudo interface do not free interface structure.  */ @@ -328,6 +328,7 @@ int ripng_interface_vrf_update(ZAPI_CALLBACK_ARGS)  			   ifp->name, vrf_id, new_vrf_id);  	if_update_to_new_vrf(ifp, new_vrf); +  	ripng_interface_sync(ifp);  	return 0; @@ -932,7 +933,7 @@ void ripng_interface_sync(struct interface *ifp)  {  	struct vrf *vrf; -	vrf = vrf_lookup_by_id(ifp->vrf_id); +	vrf = ifp->vrf;  	if (vrf) {  		struct ripng_interface *ri; diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c index 67a52e9f01..b083a07f85 100644 --- a/ripngd/ripngd.c +++ b/ripngd/ripngd.c @@ -2603,6 +2603,8 @@ void ripng_if_rmap_update_interface(struct interface *ifp)  	struct if_rmap *if_rmap;  	struct if_rmap_ctx *ctx; +	if (ifp->vrf && ifp->vrf->vrf_id == VRF_UNKNOWN) +		return;  	if (!ripng)  		return;  	ctx = ripng->if_rmap_ctx; diff --git a/staticd/static_routes.c b/staticd/static_routes.c index 9c012c4751..e9fdad6bac 100644 --- a/staticd/static_routes.c +++ b/staticd/static_routes.c @@ -516,7 +516,7 @@ static void static_fixup_intf_nh(struct route_table *stable,  	for (rn = route_top(stable); rn; rn = route_next(rn)) {  		for (si = rn->info; si; si = si->next) { -			if (si->nh_vrf_id != ifp->vrf_id) +			if (si->nh_vrf_id != vrf_to_id(ifp->vrf))  				continue;  			if (si->ifindex != ifp->ifindex) @@ -542,7 +542,7 @@ void static_install_intf_nh(struct interface *ifp)  		struct static_vrf *svrf = vrf->info;  		/* Not needed if same vrf since happens naturally */ -		if (vrf->vrf_id == ifp->vrf_id) +		if (vrf == ifp->vrf)  			continue;  		/* Install any static routes configured for this interface. */ diff --git a/zebra/connected.c b/zebra/connected.c index bba221c2cf..bd4f9b66a9 100644 --- a/zebra/connected.c +++ b/zebra/connected.c @@ -207,16 +207,16 @@ void connected_up(struct interface *ifp, struct connected *ifc)  	struct nexthop nh = {  		.type = NEXTHOP_TYPE_IFINDEX,  		.ifindex = ifp->ifindex, -		.vrf_id = ifp->vrf_id, +		.vrf_id = vrf_to_id(ifp->vrf),  	};  	struct zebra_vrf *zvrf;  	uint32_t metric; -	zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id); +	zvrf = zebra_vrf_lookup_by_id(ifp->vrf->vrf_id);  	if (!zvrf) {  		flog_err(EC_ZEBRA_VRF_NOT_FOUND,  			 "%s: Received Up for interface but no associated zvrf: %d", -			 __PRETTY_FUNCTION__, ifp->vrf_id); +			 __PRETTY_FUNCTION__, ifp->vrf->vrf_id);  		return;  	}  	if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL)) @@ -265,7 +265,7 @@ void connected_up(struct interface *ifp, struct connected *ifc)  		zlog_debug(  			"%u: IF %s address %s add/up, scheduling RIB processing", -			ifp->vrf_id, ifp->name, +			vrf_to_id(ifp->vrf), ifp->name,  			prefix2str(&p, buf, sizeof(buf)));  	}  	rib_update(zvrf->vrf->vrf_id, RIB_UPDATE_IF_CHANGE); @@ -383,15 +383,15 @@ void connected_down(struct interface *ifp, struct connected *ifc)  	struct nexthop nh = {  		.type = NEXTHOP_TYPE_IFINDEX,  		.ifindex = ifp->ifindex, -		.vrf_id = ifp->vrf_id, +		.vrf_id = vrf_to_id(ifp->vrf),  	};  	struct zebra_vrf *zvrf; -	zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id); +	zvrf = zebra_vrf_lookup_by_id(ifp->vrf->vrf_id);  	if (!zvrf) {  		flog_err(EC_ZEBRA_VRF_NOT_FOUND,  			 "%s: Received Up for interface but no associated zvrf: %d", -			 __PRETTY_FUNCTION__, ifp->vrf_id); +			 __PRETTY_FUNCTION__, ifp->vrf->vrf_id);  		return;  	} @@ -473,22 +473,22 @@ static void connected_delete_helper(struct connected *ifc, struct prefix *p)  		zlog_debug(  			"%u: IF %s IP %s address del, scheduling RIB processing", -			ifp->vrf_id, ifp->name, +			vrf_to_id(ifp->vrf), ifp->name,  			prefix2str(p, buf, sizeof(buf)));  	} -	rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE); +	rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE);  	/* Schedule LSP forwarding entries for processing, if appropriate. */ -	if (ifp->vrf_id == VRF_DEFAULT) { +	if (vrf_to_id(ifp->vrf) == VRF_DEFAULT) {  		if (IS_ZEBRA_DEBUG_MPLS) {  			char buf[PREFIX_STRLEN];  			zlog_debug(  				"%u: IF %s IP %s address delete, scheduling MPLS processing", -				ifp->vrf_id, ifp->name, +				vrf_to_id(ifp->vrf), ifp->name,  				prefix2str(p, buf, sizeof(buf)));  		} -		mpls_mark_lsps_for_processing(vrf_info_lookup(ifp->vrf_id), p); +		mpls_mark_lsps_for_processing(zvrf_info_lookup(ifp->vrf), p);  	}  } diff --git a/zebra/if_ioctl.c b/zebra/if_ioctl.c index a5a18a10fa..6ce566262d 100644 --- a/zebra/if_ioctl.c +++ b/zebra/if_ioctl.c @@ -152,7 +152,8 @@ static int if_get_hwaddr(struct interface *ifp)  	ifreq.ifr_addr.sa_family = AF_INET;  	/* Fetch Hardware address if available. */ -	ret = vrf_if_ioctl(SIOCGIFHWADDR, (caddr_t)&ifreq, ifp->vrf_id); +	ret = vrf_if_ioctl(SIOCGIFHWADDR, (caddr_t)&ifreq, +			   vrf_to_id(ifp->vrf));  	if (ret < 0)  		ifp->hw_addr_len = 0;  	else { diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index acd1159ca6..4b6000c94b 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -387,7 +387,7 @@ static int get_iflink_speed(struct interface *interface)  	/* use ioctl to get IP address of an interface */  	frr_elevate_privs(&zserv_privs) {  		sd = vrf_socket(PF_INET, SOCK_DGRAM, IPPROTO_IP, -				interface->vrf_id, +				vrf_to_id(interface->vrf),  				NULL);  		if (sd < 0) {  			if (IS_ZEBRA_DEBUG_KERNEL) @@ -396,7 +396,7 @@ static int get_iflink_speed(struct interface *interface)  			return 0;  		}  	/* Get the current link state for the interface */ -		rc = vrf_ioctl(interface->vrf_id, sd, SIOCETHTOOL, +		rc = vrf_ioctl(vrf_to_id(interface->vrf), sd, SIOCETHTOOL,  			       (char *)&ifdata);  	}  	if (rc < 0) { @@ -1232,7 +1232,7 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)  				ifp = if_get_by_name(name, vrf);  			} else {  				/* pre-configured interface, learnt now */ -				if (ifp->vrf_id != vrf_id) +				if (ifp->vrf != vrf)  					if_update_to_new_vrf(ifp, vrf);  			} @@ -1272,16 +1272,16 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)  							       bridge_ifindex);  			else if (IS_ZEBRA_IF_BOND_SLAVE(ifp))  				zebra_l2if_update_bond_slave(ifp, bond_ifindex); -		} else if (ifp->vrf_id != vrf_id) { +		} else if (ifp->vrf != vrf) {  			/* VRF change for an interface. */  			if (IS_ZEBRA_DEBUG_KERNEL)  				zlog_debug(  					"RTM_NEWLINK vrf-change for %s(%u) "  					"vrf_id %u -> %u flags 0x%x", -					name, ifp->ifindex, ifp->vrf_id, vrf_id, -					ifi->ifi_flags); +					name, ifp->ifindex, vrf_to_id(ifp->vrf), +					vrf_id, ifi->ifi_flags); -			if_handle_vrf_change(ifp, vrf_id); +			if_handle_vrf_change(ifp, vrf->vrf_id);  		} else {  			bool was_bridge_slave, was_bond_slave; diff --git a/zebra/interface.c b/zebra/interface.c index 0eec68e840..6e16ae8196 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -530,7 +530,7 @@ void if_add_update(struct interface *ifp)  {  	struct zebra_if *if_data;  	struct zebra_ns *zns; -	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id); +	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);  	/* case interface populate before vrf enabled */  	if (zvrf->zns) @@ -558,7 +558,8 @@ void if_add_update(struct interface *ifp)  				zlog_debug(  					"interface %s vrf %u index %d is shutdown. "  					"Won't wake it up.", -					ifp->name, ifp->vrf_id, ifp->ifindex); +					ifp->name, vrf_to_id(ifp->vrf), +					ifp->ifindex);  			return;  		} @@ -567,12 +568,13 @@ void if_add_update(struct interface *ifp)  		if (IS_ZEBRA_DEBUG_KERNEL)  			zlog_debug(  				"interface %s vrf %u index %d becomes active.", -				ifp->name, ifp->vrf_id, ifp->ifindex); +				ifp->name, vrf_to_id(ifp->vrf), ifp->ifindex);  	} else {  		if (IS_ZEBRA_DEBUG_KERNEL)  			zlog_debug("interface %s vrf %u index %d is added.", -				   ifp->name, ifp->vrf_id, ifp->ifindex); +				   ifp->name, vrf_to_id(ifp->vrf), +				   ifp->ifindex);  	}  } @@ -714,7 +716,7 @@ void if_delete_update(struct interface *ifp)  		flog_err(  			EC_LIB_INTERFACE,  			"interface %s vrf %u index %d is still up while being deleted.", -			ifp->name, ifp->vrf_id, ifp->ifindex); +			ifp->name, vrf_to_id(ifp->vrf), ifp->ifindex);  		return;  	} @@ -726,7 +728,7 @@ void if_delete_update(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_KERNEL)  		zlog_debug("interface %s vrf %u index %d is now inactive.", -			   ifp->name, ifp->vrf_id, ifp->ifindex); +			   ifp->name, vrf_to_id(ifp->vrf), ifp->ifindex);  	/* Delete connected routes from the kernel. */  	if_delete_connected(ifp); @@ -750,7 +752,7 @@ void if_delete_update(struct interface *ifp)  	 * occur with this implementation whereas it is not possible with  	 * vrf-lite).  	 */ -	if (ifp->vrf_id && !vrf_is_backend_netns()) +	if (ifp->vrf->vrf_id && !vrf_is_backend_netns())  		if_handle_vrf_change(ifp, VRF_DEFAULT);  	/* Reset some zebra interface params to default values. */ @@ -770,7 +772,7 @@ void if_handle_vrf_change(struct interface *ifp, vrf_id_t vrf_id)  	vrf_id_t old_vrf_id;  	struct vrf *vrf = vrf_lookup_by_id(vrf_id); -	old_vrf_id = ifp->vrf_id; +	old_vrf_id = vrf_to_id(ifp->vrf);  	/* Uninstall connected routes. */  	if_uninstall_connected(ifp); @@ -801,9 +803,9 @@ void if_handle_vrf_change(struct interface *ifp, vrf_id_t vrf_id)  	 */  	if (IS_ZEBRA_DEBUG_RIB_DETAILED)  		zlog_debug("%u: IF %s VRF change, scheduling RIB processing", -			   ifp->vrf_id, ifp->name); +			   vrf_to_id(ifp->vrf), ifp->name);  	rib_update(old_vrf_id, RIB_UPDATE_IF_CHANGE); -	rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE); +	rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE);  }  static void ipv6_ll_address_to_mac(struct in6_addr *address, uint8_t *mac) @@ -821,7 +823,7 @@ void if_nbr_mac_to_ipv4ll_neigh_update(struct interface *ifp,  				       struct in6_addr *address,  				       int add)  { -	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id); +	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);  	struct zebra_if *zif = ifp->info;  	char buf[16] = "169.254.0.1";  	struct in_addr ipv4_ll; @@ -917,7 +919,7 @@ void if_up(struct interface *ifp)  {  	struct zebra_if *zif;  	struct interface *link_if; -	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id); +	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);  	zif = ifp->info;  	zif->up_count++; @@ -948,8 +950,8 @@ void if_up(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_RIB_DETAILED)  		zlog_debug("%u: IF %s up, scheduling RIB processing", -			   ifp->vrf_id, ifp->name); -	rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE); +			   vrf_to_id(ifp->vrf), ifp->name); +	rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE);  	/* Handle interface up for specific types for EVPN. Non-VxLAN interfaces  	 * are checked to see if (remote) neighbor entries need to be installed @@ -974,7 +976,7 @@ void if_down(struct interface *ifp)  {  	struct zebra_if *zif;  	struct interface *link_if; -	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id); +	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);  	zif = ifp->info;  	zif->down_count++; @@ -1006,8 +1008,8 @@ void if_down(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_RIB_DETAILED)  		zlog_debug("%u: IF %s down, scheduling RIB processing", -			   ifp->vrf_id, ifp->name); -	rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE); +			   vrf_to_id(ifp->vrf), ifp->name); +	rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE);  	if_nbr_ipv6ll_to_ipv4ll_neigh_del_all(ifp); @@ -1308,7 +1310,7 @@ static void if_dump_vty(struct vty *vty, struct interface *ifp)  	zebra_ptm_show_status(vty, ifp); -	vrf = vrf_lookup_by_id(ifp->vrf_id); +	vrf = ifp->vrf;  	vty_out(vty, "  vrf: %s\n", vrf->name);  	if (ifp->desc) @@ -3134,9 +3136,9 @@ static int if_config_write(struct vty *vty)  			struct vrf *vrf;  			if_data = ifp->info; -			vrf = vrf_lookup_by_id(ifp->vrf_id); +			vrf = ifp->vrf; -			if (ifp->vrf_id == VRF_DEFAULT) +			if (vrf->vrf_id == VRF_DEFAULT)  				vty_frame(vty, "interface %s\n", ifp->name);  			else  				vty_frame(vty, "interface %s vrf %s\n", diff --git a/zebra/ioctl.c b/zebra/ioctl.c index 8202e076af..628be6563a 100644 --- a/zebra/ioctl.c +++ b/zebra/ioctl.c @@ -142,7 +142,8 @@ void if_get_metric(struct interface *ifp)  	ifreq_set_name(&ifreq, ifp); -	if (vrf_if_ioctl(SIOCGIFMETRIC, (caddr_t)&ifreq, ifp->vrf_id) < 0) +	if (vrf_if_ioctl(SIOCGIFMETRIC, (caddr_t)&ifreq, +			 vrf_to_id(ifp->vrf)) < 0)  		return;  	ifp->metric = ifreq.ifr_metric;  	if (ifp->metric == 0) @@ -160,7 +161,8 @@ void if_get_mtu(struct interface *ifp)  	ifreq_set_name(&ifreq, ifp);  #if defined(SIOCGIFMTU) -	if (vrf_if_ioctl(SIOCGIFMTU, (caddr_t)&ifreq, ifp->vrf_id) < 0) { +	if (vrf_if_ioctl(SIOCGIFMTU, (caddr_t)&ifreq, +			 vrf_to_id(ifp->vrf)) < 0) {  		zlog_info("Can't lookup mtu by ioctl(SIOCGIFMTU)");  		ifp->mtu6 = ifp->mtu = -1;  		return; @@ -427,7 +429,7 @@ void if_get_flags(struct interface *ifp)  	ifreq_set_name(&ifreq, ifp); -	ret = vrf_if_ioctl(SIOCGIFFLAGS, (caddr_t)&ifreq, ifp->vrf_id); +	ret = vrf_if_ioctl(SIOCGIFFLAGS, (caddr_t)&ifreq, vrf_to_id(ifp->vrf));  	if (ret < 0) {  		flog_err_sys(EC_LIB_SYSTEM_CALL,  			     "vrf_if_ioctl(SIOCGIFFLAGS) failed: %s", @@ -477,7 +479,7 @@ int if_set_flags(struct interface *ifp, uint64_t flags)  	ifreq.ifr_flags = ifp->flags;  	ifreq.ifr_flags |= flags; -	ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, ifp->vrf_id); +	ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, vrf_to_id(ifp->vrf));  	if (ret < 0) {  		zlog_info("can't set interface flags"); @@ -498,7 +500,7 @@ int if_unset_flags(struct interface *ifp, uint64_t flags)  	ifreq.ifr_flags = ifp->flags;  	ifreq.ifr_flags &= ~flags; -	ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, ifp->vrf_id); +	ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, vrf_to_id(ifp->vrf));  	if (ret < 0) {  		zlog_info("can't unset interface flags"); diff --git a/zebra/redistribute.c b/zebra/redistribute.c index b13f1170cd..7b3332e582 100644 --- a/zebra/redistribute.c +++ b/zebra/redistribute.c @@ -402,7 +402,7 @@ void zebra_interface_up_update(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_EVENT)  		zlog_debug("MESSAGE: ZEBRA_INTERFACE_UP %s(%u)", -			   ifp->name, ifp->vrf_id); +			   ifp->name, vrf_to_id(ifp->vrf));  	if (ifp->ptm_status || !ifp->ptm_enable) {  		for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, @@ -422,7 +422,7 @@ void zebra_interface_down_update(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_EVENT)  		zlog_debug("MESSAGE: ZEBRA_INTERFACE_DOWN %s(%u)", -			   ifp->name, ifp->vrf_id); +			   ifp->name, vrf_to_id(ifp->vrf));  	for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {  		zsend_interface_update(ZEBRA_INTERFACE_DOWN, client, ifp); @@ -437,7 +437,7 @@ void zebra_interface_add_update(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_EVENT)  		zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADD %s(%u)", ifp->name, -			   ifp->vrf_id); +			   vrf_to_id(ifp->vrf));  	for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {  		client->ifadd_cnt++; @@ -453,7 +453,7 @@ void zebra_interface_delete_update(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_EVENT)  		zlog_debug("MESSAGE: ZEBRA_INTERFACE_DELETE %s(%u)", -			   ifp->name, ifp->vrf_id); +			   ifp->name, vrf_to_id(ifp->vrf));  	for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {  		client->ifdel_cnt++; @@ -475,7 +475,7 @@ void zebra_interface_address_add_update(struct interface *ifp,  		p = ifc->address;  		zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADDRESS_ADD %s on %s(%u)",  			   prefix2str(p, buf, sizeof(buf)), ifp->name, -			   ifp->vrf_id); +			   vrf_to_id(ifp->vrf));  	}  	if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL)) @@ -509,7 +509,7 @@ void zebra_interface_address_delete_update(struct interface *ifp,  		p = ifc->address;  		zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADDRESS_DELETE %s on %s(%u)",  			   prefix2str(p, buf, sizeof(buf)), -			   ifp->name, ifp->vrf_id); +			   ifp->name, vrf_to_id(ifp->vrf));  	}  	zebra_vxlan_add_del_gw_macip(ifp, ifc->address, 0); @@ -535,7 +535,7 @@ void zebra_interface_vrf_update_del(struct interface *ifp, vrf_id_t new_vrf_id)  	if (IS_ZEBRA_DEBUG_EVENT)  		zlog_debug(  			"MESSAGE: ZEBRA_INTERFACE_VRF_UPDATE/DEL %s VRF Id %u -> %u", -			ifp->name, ifp->vrf_id, new_vrf_id); +			ifp->name, vrf_to_id(ifp->vrf), new_vrf_id);  	for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {  		/* Need to delete if the client is not interested in the new @@ -558,7 +558,7 @@ void zebra_interface_vrf_update_add(struct interface *ifp, vrf_id_t old_vrf_id)  	if (IS_ZEBRA_DEBUG_EVENT)  		zlog_debug(  			"MESSAGE: ZEBRA_INTERFACE_VRF_UPDATE/ADD %s VRF Id %u -> %u", -			ifp->name, old_vrf_id, ifp->vrf_id); +			ifp->name, old_vrf_id, vrf_to_id(ifp->vrf));  	for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {  		/* Need to add if the client is interested in the new VRF. */ @@ -816,7 +816,7 @@ void zebra_interface_parameters_update(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_EVENT)  		zlog_debug("MESSAGE: ZEBRA_INTERFACE_LINK_PARAMS %s(%u)", -			   ifp->name, ifp->vrf_id); +			   ifp->name, vrf_to_id(ifp->vrf));  	for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client))  		zsend_interface_link_params(client, ifp); diff --git a/zebra/router-id.c b/zebra/router-id.c index 569ffbab41..b5a8860c43 100644 --- a/zebra/router-id.c +++ b/zebra/router-id.c @@ -122,7 +122,7 @@ void router_id_add_address(struct connected *ifc)  	struct prefix before;  	struct prefix after;  	struct zserv *client; -	struct zebra_vrf *zvrf = vrf_info_get(ifc->ifp->vrf_id); +	struct zebra_vrf *zvrf = vrf_info_get(vrf_to_id(ifc->ifp->vrf));  	if (router_id_bad_address(ifc))  		return; @@ -154,7 +154,7 @@ void router_id_del_address(struct connected *ifc)  	struct prefix before;  	struct listnode *node;  	struct zserv *client; -	struct zebra_vrf *zvrf = vrf_info_get(ifc->ifp->vrf_id); +	struct zebra_vrf *zvrf = vrf_info_get(vrf_to_id(ifc->ifp->vrf));  	if (router_id_bad_address(ifc))  		return; diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 92c78a4cbb..1624eea391 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -545,7 +545,7 @@ static int netlink_route_change_read_unicast(struct nlmsghdr *h, ns_id_t ns_id,  						zebra_ns_lookup(ns_id),  						index);  				if (ifp) -					nh_vrf_id = ifp->vrf_id; +					nh_vrf_id = vrf_to_id(ifp->vrf);  			}  			nh.vrf_id = nh_vrf_id; @@ -605,7 +605,7 @@ static int netlink_route_change_read_unicast(struct nlmsghdr *h, ns_id_t ns_id,  							zebra_ns_lookup(ns_id),  							index);  					if (ifp) -						nh_vrf_id = ifp->vrf_id; +						nh_vrf_id = vrf_to_id(ifp->vrf);  					else {  						flog_warn(  							EC_ZEBRA_UNKNOWN_INTERFACE, @@ -1889,7 +1889,7 @@ static int netlink_vxlan_flood_list_update(struct interface *ifp,  		char buf[256];  	} req;  	uint8_t dst_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; -	struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id); +	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);  	zns = zvrf->zns;  	memset(&req, 0, sizeof(req)); @@ -2287,7 +2287,7 @@ static int netlink_macfdb_update(struct interface *ifp, vlanid_t vid,  	int vid_present = 0;  	char vid_buf[20];  	char dst_buf[30]; -	struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id); +	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);  	zns = zvrf->zns;  	zif = ifp->info; @@ -2631,7 +2631,7 @@ int netlink_neigh_read_specific_ip(struct ipaddr *ip,  {  	int ret = 0;  	struct zebra_ns *zns; -	struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(vlan_if->vrf_id); +	struct zebra_vrf *zvrf = zvrf_info_lookup(vlan_if->vrf);  	char buf[INET6_ADDRSTRLEN];  	struct zebra_dplane_info dp_info; @@ -2644,7 +2644,7 @@ int netlink_neigh_read_specific_ip(struct ipaddr *ip,  			   __PRETTY_FUNCTION__, vlan_if->name,  			   vlan_if->ifindex,  			   ipaddr2str(ip, buf, sizeof(buf)), -			   vlan_if->vrf_id); +			   vrf_to_id(vlan_if->vrf));  	ret = netlink_request_specific_neigh_in_vlan(zns, RTM_GETNEIGH, ip,  					    vlan_if->ifindex); @@ -2709,7 +2709,7 @@ static int netlink_neigh_update2(struct interface *ifp, struct ipaddr *ip,  	struct zebra_ns *zns;  	char buf[INET6_ADDRSTRLEN];  	char buf2[ETHER_ADDR_STRLEN]; -	struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id); +	struct zebra_vrf *zvrf =  zvrf_info_lookup(ifp->vrf);  	zns = zvrf->zns;  	memset(&req, 0, sizeof(req)); diff --git a/zebra/rtadv.c b/zebra/rtadv.c index e181b495b8..d591e230c3 100644 --- a/zebra/rtadv.c +++ b/zebra/rtadv.c @@ -532,7 +532,7 @@ static int rtadv_timer(struct thread *thread)  static void rtadv_process_solicit(struct interface *ifp)  { -	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id); +	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);  	assert(zvrf);  	rtadv_send_packet(rtadv_get_socket(zvrf), ifp); @@ -882,7 +882,7 @@ static void ipv6_nd_suppress_ra_set(struct interface *ifp,  	struct zebra_vrf *zvrf;  	zif = ifp->info; -	zvrf = vrf_info_lookup(ifp->vrf_id); +	zvrf = zvrf_info_lookup(ifp->vrf);  	if (status == RA_SUPPRESS) {  		/* RA is currently enabled */ @@ -955,11 +955,11 @@ static void zebra_interface_radv_set(ZAPI_HANDLER_ARGS, int enable)  			  zebra_route_string(client->proto));  		return;  	} -	if (ifp->vrf_id != zvrf_id(zvrf)) { +	if (ifp->vrf != zvrf->vrf) {  		zlog_debug(  			"%u: IF %u RA %s client %s - VRF mismatch, IF VRF %u",  			zvrf_id(zvrf), ifindex, enable ? "enable" : "disable", -			zebra_route_string(client->proto), ifp->vrf_id); +			zebra_route_string(client->proto), vrf_to_id(ifp->vrf));  		return;  	} @@ -1056,7 +1056,7 @@ DEFUN (ipv6_nd_ra_interval_msec,  	struct zebra_if *zif = ifp->info;  	struct zebra_vrf *zvrf; -	zvrf = vrf_info_lookup(ifp->vrf_id); +	zvrf = zvrf_info_lookup(ifp->vrf);  	interval = strtoul(argv[idx_number]->arg, NULL, 10);  	if ((zif->rtadv.AdvDefaultLifetime != -1 @@ -1094,7 +1094,7 @@ DEFUN (ipv6_nd_ra_interval,  	struct zebra_if *zif = ifp->info;  	struct zebra_vrf *zvrf; -	zvrf = vrf_info_lookup(ifp->vrf_id); +	zvrf = zvrf_info_lookup(ifp->vrf);  	interval = strtoul(argv[idx_number]->arg, NULL, 10);  	if ((zif->rtadv.AdvDefaultLifetime != -1 @@ -1133,7 +1133,7 @@ DEFUN (no_ipv6_nd_ra_interval,  	struct zebra_if *zif = ifp->info;  	struct zebra_vrf *zvrf = NULL; -	zvrf = vrf_info_lookup(ifp->vrf_id); +	zvrf = zvrf_info_lookup(ifp->vrf);  	if (zif->rtadv.MaxRtrAdvInterval % 1000)  		zvrf->rtadv.adv_msec_if_count--; diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c index f4347e5ac5..2f41f7133d 100644 --- a/zebra/zapi_msg.c +++ b/zebra/zapi_msg.c @@ -165,7 +165,7 @@ int zsend_interface_add(struct zserv *client, struct interface *ifp)  {  	struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ); -	zclient_create_header(s, ZEBRA_INTERFACE_ADD, ifp->vrf_id); +	zclient_create_header(s, ZEBRA_INTERFACE_ADD, vrf_to_id(ifp->vrf));  	zserv_encode_interface(s, ifp);  	client->ifadd_cnt++; @@ -177,7 +177,7 @@ int zsend_interface_delete(struct zserv *client, struct interface *ifp)  {  	struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ); -	zclient_create_header(s, ZEBRA_INTERFACE_DELETE, ifp->vrf_id); +	zclient_create_header(s, ZEBRA_INTERFACE_DELETE, vrf_to_id(ifp->vrf));  	zserv_encode_interface(s, ifp);  	client->ifdel_cnt++; @@ -217,7 +217,8 @@ int zsend_interface_link_params(struct zserv *client, struct interface *ifp)  		return 0;  	} -	zclient_create_header(s, ZEBRA_INTERFACE_LINK_PARAMS, ifp->vrf_id); +	zclient_create_header(s, ZEBRA_INTERFACE_LINK_PARAMS, +			      vrf_to_id(ifp->vrf));  	/* Add Interface Index */  	stream_putl(s, ifp->ifindex); @@ -279,7 +280,7 @@ int zsend_interface_address(int cmd, struct zserv *client,  	struct prefix *p;  	struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ); -	zclient_create_header(s, cmd, ifp->vrf_id); +	zclient_create_header(s, cmd, vrf_to_id(ifp->vrf));  	stream_putl(s, ifp->ifindex);  	/* Interface address flag. */ @@ -321,7 +322,7 @@ static int zsend_interface_nbr_address(int cmd, struct zserv *client,  	struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);  	struct prefix *p; -	zclient_create_header(s, cmd, ifp->vrf_id); +	zclient_create_header(s, cmd, vrf_to_id(ifp->vrf));  	stream_putl(s, ifp->ifindex);  	/* Prefix information. */ @@ -429,7 +430,8 @@ int zsend_interface_vrf_update(struct zserv *client, struct interface *ifp,  {  	struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ); -	zclient_create_header(s, ZEBRA_INTERFACE_VRF_UPDATE, ifp->vrf_id); +	zclient_create_header(s, ZEBRA_INTERFACE_VRF_UPDATE, +			      vrf_to_id(ifp->vrf));  	/* Fill in the name of the interface and its new VRF (id) */  	stream_put(s, ifp->name, INTERFACE_NAMSIZ); @@ -504,7 +506,7 @@ int zsend_interface_update(int cmd, struct zserv *client, struct interface *ifp)  {  	struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ); -	zclient_create_header(s, cmd, ifp->vrf_id); +	zclient_create_header(s, cmd, vrf_to_id(ifp->vrf));  	zserv_encode_interface(s, ifp);  	if (cmd == ZEBRA_INTERFACE_UP) diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c index 1707d3a68b..3d64c201fa 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c @@ -1916,7 +1916,7 @@ enum zebra_dplane_result dplane_intf_addr_set(const struct interface *ifp,  		struct prefix_ipv4 *p;  		p = (struct prefix_ipv4 *)ifc->address; -		rib_lookup_and_pushup(p, ifp->vrf_id); +		rib_lookup_and_pushup(p, ifp->vrf->vrf_id);  	}  #endif @@ -1947,7 +1947,7 @@ static enum zebra_dplane_result intf_addr_update_internal(  		prefix2str(ifc->address, addr_str, sizeof(addr_str));  		zlog_debug("init intf ctx %s: idx %d, addr %u:%s", -			   dplane_op2str(op), ifp->ifindex, ifp->vrf_id, +			   dplane_op2str(op), ifp->ifindex, ifp->vrf->vrf_id,  			   addr_str);  	} @@ -1955,9 +1955,9 @@ static enum zebra_dplane_result intf_addr_update_internal(  	ctx->zd_op = op;  	ctx->zd_status = ZEBRA_DPLANE_REQUEST_SUCCESS; -	ctx->zd_vrf_id = ifp->vrf_id; +	ctx->zd_vrf_id = ifp->vrf->vrf_id; -	zns = zebra_ns_lookup(ifp->vrf_id); +	zns = zebra_ns_lookup(ifp->vrf->vrf_id);  	dplane_ctx_ns_init(ctx, zns, false);  	/* Init the interface-addr-specific area */ diff --git a/zebra/zebra_ptm.c b/zebra/zebra_ptm.c index 46f1385520..636bceb980 100644 --- a/zebra/zebra_ptm.c +++ b/zebra/zebra_ptm.c @@ -522,7 +522,7 @@ static int zebra_ptm_handle_bfd_msg(void *arg, void *in_ctxt,  	}  	if (!strcmp(ZEBRA_PTM_INVALID_VRF, vrf_str) && ifp) { -		vrf_id = ifp->vrf_id; +		vrf_id = vrf_to_id(ifp->vrf);  	} else {  		vrf_id = vrf_name_to_id(vrf_str);  	} diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h index 972fe381cc..1b87669505 100644 --- a/zebra/zebra_vrf.h +++ b/zebra/zebra_vrf.h @@ -193,6 +193,15 @@ static inline vrf_id_t zvrf_id(struct zebra_vrf *zvrf)  	return zvrf->vrf->vrf_id;  } +static inline struct zebra_vrf *zvrf_info_lookup(struct vrf *vrf) +{ +	struct zebra_vrf *zvrf = NULL; + +	if (vrf) +		zvrf = (struct zebra_vrf *)vrf->info; +	return zvrf; +} +  static inline const char *zvrf_ns_name(struct zebra_vrf *zvrf)  {  	if (!zvrf->vrf || !zvrf->vrf->ns_ctxt) diff --git a/zebra/zebra_vxlan.c b/zebra/zebra_vxlan.c index 077c1ff8f0..99e2f9b170 100644 --- a/zebra/zebra_vxlan.c +++ b/zebra/zebra_vxlan.c @@ -2353,7 +2353,7 @@ static void zvni_process_neigh_on_local_mac_change(zebra_vni_t *zvni,  	struct zebra_vrf *zvrf = NULL;  	char buf[ETHER_ADDR_STRLEN]; -	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id); +	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);  	if (IS_ZEBRA_DEBUG_VXLAN)  		zlog_debug("Processing neighbors on local MAC %s %s, VNI %u", @@ -2612,7 +2612,7 @@ struct interface *zebra_get_vrr_intf_for_svi(struct interface *ifp)  	struct interface *tmp_if = NULL;  	struct zebra_if *zif = NULL; -	zvrf = vrf_info_lookup(ifp->vrf_id); +	zvrf = zvrf_info_lookup(ifp->vrf);  	assert(zvrf);  	FOR_ALL_INTERFACES (zvrf->vrf, tmp_if) { @@ -2716,10 +2716,10 @@ static int zvni_advertise_subnet(zebra_vni_t *zvni, struct interface *ifp,  		apply_mask(&p);  		if (advertise) -			ip_prefix_send_to_client(ifp->vrf_id, &p, +			ip_prefix_send_to_client(vrf_to_id(ifp->vrf), &p,  						 ZEBRA_IP_PREFIX_ROUTE_ADD);  		else -			ip_prefix_send_to_client(ifp->vrf_id, &p, +			ip_prefix_send_to_client(vrf_to_id(ifp->vrf), &p,  						 ZEBRA_IP_PREFIX_ROUTE_DEL);  	}  	return 0; @@ -2838,7 +2838,7 @@ static int zvni_gw_macip_del(struct interface *ifp, zebra_vni_t *zvni,  	if (IS_ZEBRA_DEBUG_VXLAN)  		zlog_debug(  			"%u:SVI %s(%u) VNI %u, sending GW MAC %s IP %s del to BGP", -			ifp->vrf_id, ifp->name, ifp->ifindex, zvni->vni, +			vrf_to_id(ifp->vrf), ifp->name, ifp->ifindex, zvni->vni,  			prefix_mac2str(&(n->emac), buf1, sizeof(buf1)),  			ipaddr2str(ip, buf2, sizeof(buf2))); @@ -3025,11 +3025,11 @@ static int zvni_local_neigh_update(zebra_vni_t *zvni,  		}  	} -	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id); +	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);  	if (!zvrf) {  		if (IS_ZEBRA_DEBUG_VXLAN) -			zlog_debug("\tUnable to find vrf for: %d", -				   zvni->vxlan_if->vrf_id); +			zlog_debug("\tUnable to find vrf for: %s", +				   zvni->vxlan_if->vrf->name);  		return -1;  	} @@ -4086,8 +4086,9 @@ static void zvni_build_hash_table(void)  			vlan_if = zvni_map_to_svi(vxl->access_vlan,  						  zif->brslave_info.br_if);  			if (vlan_if) { -				zvni->vrf_id = vlan_if->vrf_id; -				zl3vni = zl3vni_from_vrf(vlan_if->vrf_id); +				zvni->vrf_id = vrf_to_id(vlan_if->vrf); +				zl3vni = zl3vni_from_vrf( +						vrf_to_id(vlan_if->vrf));  				if (zl3vni)  					listnode_add_sort(zl3vni->l2vnis, zvni);  			} @@ -5240,7 +5241,7 @@ static void process_remote_macip_add(vni_t vni,  		return;  	} -	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id); +	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);  	if (!zvrf)  		return; @@ -5568,7 +5569,7 @@ static void process_remote_macip_del(vni_t vni,  	if (!mac && !n)  		return; -	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id); +	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);  	/* Ignore the delete if this mac is a gateway mac-ip */  	if (CHECK_FLAG(mac->flags, ZEBRA_MAC_LOCAL) @@ -7255,7 +7256,7 @@ int zebra_vxlan_handle_kernel_neigh_del(struct interface *ifp,  		return 0;  	} -	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id); +	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);  	if (!zvrf) {  		zlog_debug("%s: VNI %u vrf lookup failed.",  				   __PRETTY_FUNCTION__, zvni->vni); @@ -7678,11 +7679,11 @@ int zebra_vxlan_local_mac_add_update(struct interface *ifp,  		return -1;  	} -	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id); +	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);  	if (!zvrf) {  		if (IS_ZEBRA_DEBUG_VXLAN) -			zlog_debug("\tNo Vrf found for vrf_id: %d", -				   zvni->vxlan_if->vrf_id); +			zlog_debug("\tNo Vrf found for vrf_id: %s", +				   zvni->vxlan_if->vrf->name);  		return -1;  	} @@ -8214,10 +8215,10 @@ int zebra_vxlan_svi_up(struct interface *ifp, struct interface *link_if)  			zlog_debug(  				"SVI %s(%u) VNI %u VRF %s is UP, installing neighbors",  				ifp->name, ifp->ifindex, zvni->vni, -				vrf_id_to_name(ifp->vrf_id)); +				vrf_to_name(ifp->vrf));  		/* update the vrf information for l2-vni and inform bgp */ -		zvni->vrf_id = ifp->vrf_id; +		zvni->vrf_id = vrf_to_id(ifp->vrf);  		zvni_send_add_to_client(zvni);  		/* Install any remote neighbors for this VNI. */ @@ -8343,8 +8344,8 @@ int zebra_vxlan_if_up(struct interface *ifp)  		vlan_if = zvni_map_to_svi(vxl->access_vlan,  					  zif->brslave_info.br_if);  		if (vlan_if) { -			zvni->vrf_id = vlan_if->vrf_id; -			zl3vni = zl3vni_from_vrf(vlan_if->vrf_id); +			zvni->vrf_id = vrf_to_id(vlan_if->vrf); +			zl3vni = zl3vni_from_vrf(vrf_to_id(vlan_if->vrf));  			if (zl3vni)  				listnode_add_sort(zl3vni->l2vnis, zvni);  		} @@ -8672,8 +8673,8 @@ int zebra_vxlan_if_add(struct interface *ifp)  		vlan_if = zvni_map_to_svi(vxl->access_vlan,  					  zif->brslave_info.br_if);  		if (vlan_if) { -			zvni->vrf_id = vlan_if->vrf_id; -			zl3vni = zl3vni_from_vrf(vlan_if->vrf_id); +			zvni->vrf_id = vrf_to_id(vlan_if->vrf); +			zl3vni = zl3vni_from_vrf(vrf_to_id(vlan_if->vrf));  			if (zl3vni)  				listnode_add_sort(zl3vni->l2vnis, zvni);  		} @@ -8690,7 +8691,7 @@ int zebra_vxlan_if_add(struct interface *ifp)  			zlog_debug(  				"Add L2-VNI %u VRF %s intf %s(%u) VLAN %u local IP %s mcast_grp %s master %u",  				vni, -				vlan_if ? vrf_id_to_name(vlan_if->vrf_id) +				vlan_if ? vrf_to_name(vlan_if->vrf)  					: VRF_DEFAULT_NAME,  				ifp->name, ifp->ifindex, vxl->access_vlan,  				addr_buf1, addr_buf2,  | 
