diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-06-23 19:46:39 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-06-23 19:46:39 -0400 | 
| commit | a36898e7555036c786f7aa944b848966b45d5897 (patch) | |
| tree | fb34f0ca1836e09a8e89e73ebd6696a08b89b631 | |
| parent | a12bb225a6681b7e7eb0aac105cbc8b745675131 (diff) | |
Revert "Ospf missing interface handling 2"
59 files changed, 322 insertions, 490 deletions
diff --git a/babeld/babel_interface.c b/babeld/babel_interface.c index 36adf118a4..0eeb9b2bbb 100644 --- a/babeld/babel_interface.c +++ b/babeld/babel_interface.c @@ -242,7 +242,7 @@ babel_enable_if_add (const char *ifname)      vector_set (babel_enable_if, strdup (ifname)); -    ifp = if_lookup_by_name(ifname, vrf_lookup_by_id(VRF_DEFAULT)); +    ifp = if_lookup_by_name(ifname, VRF_DEFAULT);      if (ifp != NULL)          interface_recalculate(ifp); @@ -265,7 +265,7 @@ babel_enable_if_delete (const char *ifname)      free (str);      vector_unset (babel_enable_if, babel_enable_if_index); -    ifp = if_lookup_by_name(ifname, vrf_lookup_by_id(VRF_DEFAULT)); +    ifp = if_lookup_by_name(ifname, VRF_DEFAULT);      if (ifp != NULL)          interface_reset(ifp); @@ -908,8 +908,7 @@ DEFUN (show_babel_interface,        show_babel_interface_sub (vty, ifp);      return CMD_SUCCESS;    } -  if ((ifp = if_lookup_by_name (argv[3]->arg, -				vrf_lookup_by_id(VRF_DEFAULT))) == NULL) +  if ((ifp = if_lookup_by_name (argv[3]->arg, VRF_DEFAULT)) == NULL)    {      vty_out (vty, "No such interface name\n");      return CMD_WARNING; @@ -951,8 +950,7 @@ DEFUN (show_babel_neighbour,          }          return CMD_SUCCESS;      } -    if ((ifp = if_lookup_by_name (argv[3]->arg, -				  vrf_lookup_by_id(VRF_DEFAULT))) == NULL) +    if ((ifp = if_lookup_by_name (argv[3]->arg, VRF_DEFAULT)) == NULL)      {          vty_out (vty, "No such interface name\n");          return CMD_WARNING; diff --git a/babeld/babeld.c b/babeld/babeld.c index 736dedcf70..6ad004a4a4 100644 --- a/babeld/babeld.c +++ b/babeld/babeld.c @@ -557,7 +557,7 @@ babel_distribute_update (struct distribute_ctx *ctx, struct distribute *dist)      if (! dist->ifname)          return; -    ifp = if_lookup_by_name (dist->ifname, vrf_lookup_by_id(VRF_DEFAULT)); +    ifp = if_lookup_by_name (dist->ifname, VRF_DEFAULT);      if (ifp == NULL)          return; diff --git a/bfdd/bfd.c b/bfdd/bfd.c index efbdc8b4f7..08a70abc1e 100644 --- a/bfdd/bfd.c +++ b/bfdd/bfd.c @@ -142,7 +142,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); +			ifp = if_lookup_by_name(bs->key.ifname, vrf->vrf_id);  		else  			ifp = if_lookup_by_name_all_vrf(bs->key.ifname);  		if (ifp == NULL) { @@ -151,7 +151,7 @@ int bfd_session_enable(struct bfd_session *bs)  			return 0;  		}  		if (bs->key.ifname[0] && !vrf) { -			vrf = ifp->vrf; +			vrf = vrf_lookup_by_id(ifp->vrf_id);  			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 a634d923d2..3e2ace6ea6 100644 --- a/bfdd/ptm_adapter.c +++ b/bfdd/ptm_adapter.c @@ -572,10 +572,7 @@ static void bfdd_sessions_enable_interface(struct interface *ifp)  {  	struct bfd_session_observer *bso;  	struct bfd_session *bs; -	struct vrf *vrf = ifp->vrf; - -	if (!vrf) -		return; +	struct vrf *vrf;  	TAILQ_FOREACH(bso, &bglobal.bg_obslist, bso_entry) {  		bs = bso->bso_bs; @@ -584,6 +581,9 @@ 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; @@ -698,14 +698,13 @@ static int bfdd_interface_update(ZAPI_CALLBACK_ARGS)  static int bfdd_interface_vrf_update(ZAPI_CALLBACK_ARGS)  {  	struct interface *ifp; -	struct vrf *nvrf;  	vrf_id_t nvrfid;  	ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id, &nvrfid);  	if (ifp == NULL)  		return 0; -	nvrf = vrf_lookup_by_id(nvrfid); -	if_update_to_new_vrf(ifp, nvrf); + +	if_update_to_new_vrf(ifp, nvrfid);  	return 0;  } diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c index ca88a38df2..8e18ed7529 100644 --- a/bgpd/bgp_network.c +++ b/bgpd/bgp_network.c @@ -310,8 +310,7 @@ static int bgp_get_instance_for_inc_conn(int sock, struct bgp **bgp_inst)  		if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW)  			continue; -		ifp = if_lookup_by_name(name, -					vrf_lookup_by_id(bgp->vrf_id)); +		ifp = if_lookup_by_name(name, bgp->vrf_id);  		if (ifp) {  			*bgp_inst = bgp;  			return 0; @@ -571,8 +570,7 @@ static int bgp_update_source(struct peer *peer)  	/* Source is specified with interface name.  */  	if (peer->update_if) { -		ifp = if_lookup_by_name(peer->update_if, -					vrf_lookup_by_id(peer->bgp->vrf_id)); +		ifp = if_lookup_by_name(peer->update_if, peer->bgp->vrf_id);  		if (!ifp)  			return -1; diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index 5d1d430e9d..c0f2dfca17 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -503,7 +503,7 @@ static int bgp_interface_vrf_update(ZAPI_CALLBACK_ARGS)  		}  	} -	if_update_to_new_vrf(ifp, vrf_lookup_by_id(new_vrf_id)); +	if_update_to_new_vrf(ifp, new_vrf_id);  	bgp = bgp_lookup_by_vrf_id(new_vrf_id);  	if (!bgp) @@ -787,7 +787,7 @@ bool bgp_zebra_nexthop_set(union sockunion *local, union sockunion *remote,  		nexthop->v4 = local->sin.sin_addr;  		if (peer->update_if)  			ifp = if_lookup_by_name(peer->update_if, -						vrf_lookup_by_id(peer->bgp->vrf_id)); +						peer->bgp->vrf_id);  		else  			ifp = if_lookup_by_ipv4_exact(&local->sin.sin_addr,  						      peer->bgp->vrf_id); @@ -799,11 +799,10 @@ bool bgp_zebra_nexthop_set(union sockunion *local, union sockunion *remote,  				ifp = if_lookup_by_name(peer->conf_if  								? peer->conf_if  								: peer->ifname, -							vrf_lookup_by_id( -								 peer->bgp->vrf_id)); +							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)); +						peer->bgp->vrf_id);  		else  			ifp = if_lookup_by_ipv6_exact(&local->sin6.sin6_addr,  						      local->sin6.sin6_scope_id, @@ -2884,8 +2883,7 @@ static void bgp_encode_pbr_interface_list(struct bgp *bgp, struct stream *s)  	head = &(bgp_pbr_cfg->ifaces_by_name_ipv4);  	RB_FOREACH (pbr_if, bgp_pbr_interface_head, head) { -		ifp = if_lookup_by_name(pbr_if->name, -					vrf_lookup_by_id(bgp->vrf_id)); +		ifp = if_lookup_by_name(pbr_if->name, bgp->vrf_id);  		if (ifp)  			stream_putl(s, ifp->ifindex);  	} @@ -2903,8 +2901,7 @@ static int bgp_pbr_get_ifnumber(struct bgp *bgp)  	head = &(bgp_pbr_cfg->ifaces_by_name_ipv4);  	RB_FOREACH (pbr_if, bgp_pbr_interface_head, head) { -		if (if_lookup_by_name(pbr_if->name, -				      vrf_lookup_by_id(bgp->vrf_id))) +		if (if_lookup_by_name(pbr_if->name, bgp->vrf_id))  			cnt++;  	}  	return cnt; diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 8a96d46cd6..3ca209676f 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -1440,8 +1440,7 @@ void bgp_peer_conf_if_to_su_update(struct peer *peer)  	hash_release(peer->bgp->peerhash, peer);  	prev_family = peer->su.sa.sa_family; -	if ((ifp = if_lookup_by_name(peer->conf_if, -				     vrf_lookup_by_id(peer->bgp->vrf_id)))) { +	if ((ifp = if_lookup_by_name(peer->conf_if, peer->bgp->vrf_id))) {  		peer->ifp = ifp;  		/* If BGP unnumbered is not "v6only", we first see if we can  		 * derive the diff --git a/eigrpd/eigrp_filter.c b/eigrpd/eigrp_filter.c index 7727fd96c8..93eed9452c 100644 --- a/eigrpd/eigrp_filter.c +++ b/eigrpd/eigrp_filter.c @@ -174,8 +174,7 @@ void eigrp_distribute_update(struct distribute_ctx *ctx,  		return;  	} -	ifp = if_lookup_by_name(dist->ifname, -				vrf_lookup_by_id(VRF_DEFAULT)); +	ifp = if_lookup_by_name(dist->ifname, VRF_DEFAULT);  	if (ifp == NULL)  		return; diff --git a/eigrpd/eigrp_routemap.c b/eigrpd/eigrp_routemap.c index 10f8df6f1d..f080ba4876 100644 --- a/eigrpd/eigrp_routemap.c +++ b/eigrpd/eigrp_routemap.c @@ -62,7 +62,7 @@ void eigrp_if_rmap_update(struct if_rmap *if_rmap)  	struct route_map *rmap;  	struct eigrp *e; -	ifp = if_lookup_by_name(if_rmap->ifname, vrf_lookup_by_id(VRF_DEFAULT)); +	ifp = if_lookup_by_name(if_rmap->ifname);  	if (ifp == NULL)  		return; diff --git a/eigrpd/eigrp_zebra.c b/eigrpd/eigrp_zebra.c index 5040386e88..0a74e86263 100644 --- a/eigrpd/eigrp_zebra.c +++ b/eigrpd/eigrp_zebra.c @@ -336,8 +336,7 @@ static struct interface *zebra_interface_if_lookup(struct stream *s)  	stream_get(ifname_tmp, s, INTERFACE_NAMSIZ);  	/* And look it up. */ -	return if_lookup_by_name(ifname_tmp, -				 vrf_lookup_by_id(VRF_DEFAULT)); +	return if_lookup_by_name(ifname_tmp, VRF_DEFAULT);  }  void eigrp_zebra_route_add(struct prefix *p, struct list *successors, diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c index d2733ebaff..0334b98a12 100644 --- a/isisd/isis_cli.c +++ b/isisd/isis_cli.c @@ -97,7 +97,8 @@ 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 = -				circuit->interface->vrf->name; +				vrf_lookup_by_id(circuit->interface->vrf_id) +					->name;  			snprintf(  				temp_xpath, XPATH_MAXLEN,  				"/frr-interface:lib/interface[name='%s'][vrf='%s']/frr-isisd:isis", diff --git a/isisd/isis_northbound.c b/isisd/isis_northbound.c index fa3c5398b0..ffc6ee0464 100644 --- a/isisd/isis_northbound.c +++ b/isisd/isis_northbound.c @@ -1597,7 +1597,7 @@ static int lib_interface_isis_area_tag_modify(enum nb_event event,  		vrfname = yang_dnode_get_string(dnode->parent->parent, "./vrf");  		vrf = vrf_lookup_by_name(vrfname);  		assert(vrf); -		ifp = if_lookup_by_name(ifname, vrf); +		ifp = if_lookup_by_name(ifname, vrf->vrf_id);  		if (!ifp)  			return NB_OK;  		circuit = circuit_lookup_by_ifp(ifp, isis->init_circ_list); @@ -1635,7 +1635,7 @@ static int lib_interface_isis_circuit_type_modify(enum nb_event event,  		vrfname = yang_dnode_get_string(dnode->parent->parent, "./vrf");  		vrf = vrf_lookup_by_name(vrfname);  		assert(vrf); -		ifp = if_lookup_by_name(ifname, vrf); +		ifp = if_lookup_by_name(ifname, vrf->vrf_id);  		if (!ifp)  			break;  		circuit = circuit_lookup_by_ifp(ifp, isis->init_circ_list); diff --git a/isisd/isis_te.c b/isisd/isis_te.c index a56c2836d0..4ea6c2c60d 100644 --- a/isisd/isis_te.c +++ b/isisd/isis_te.c @@ -1175,8 +1175,7 @@ DEFUN (show_isis_mpls_te_interface,  		}  	} else {  		/* Interface name is specified. */ -		ifp = if_lookup_by_name(argv[idx_interface]->arg, -					vrf_lookup_by_id(VRF_DEFAULT)); +		ifp = if_lookup_by_name(argv[idx_interface]->arg, VRF_DEFAULT);  		if (ifp == NULL)  			vty_out(vty, "No such interface name\n");  		else { @@ -132,8 +132,9 @@ static int if_cmp_index_func(const struct interface *ifp1,  }  /* Create new interface structure. */ -struct interface *if_create(const char *name, struct vrf *vrf) +struct interface *if_create(const char *name, vrf_id_t vrf_id)  { +	struct vrf *vrf = vrf_get(vrf_id, NULL);  	struct interface *ifp;  	ifp = XCALLOC(MTYPE_IF, sizeof(struct interface)); @@ -141,7 +142,7 @@ struct interface *if_create(const char *name, struct vrf *vrf)  	assert(name);  	strlcpy(ifp->name, name, sizeof(ifp->name)); -	ifp->vrf = vrf; +	ifp->vrf_id = vrf_id;  	IFNAME_RB_INSERT(vrf, ifp);  	ifp->connected = list_new();  	ifp->connected->del = (void (*)(void *))connected_free; @@ -157,34 +158,26 @@ struct interface *if_create(const char *name, struct vrf *vrf)  	return ifp;  } -/* Create new interface structure. - * vrf must be created outside of this routing - */ -void if_update_to_new_vrf(struct interface *ifp, struct vrf *vrf) +/* Create new interface structure. */ +void if_update_to_new_vrf(struct interface *ifp, vrf_id_t vrf_id)  { -	struct vrf *old_vrf; +	struct vrf *old_vrf, *vrf; -	if (!vrf) { -		flog_err(EC_LIB_INTERFACE, "interface %s. Unknown VRF", -			 ifp->name); -		return; -	}  	/* remove interface from old master vrf list */ -	old_vrf = ifp->vrf; +	old_vrf = vrf_lookup_by_id(ifp->vrf_id);  	if (old_vrf) {  		IFNAME_RB_REMOVE(old_vrf, ifp);  		if (ifp->ifindex != IFINDEX_INTERNAL)  			IFINDEX_RB_REMOVE(old_vrf, ifp);  	} -	ifp->vrf = vrf; +	ifp->vrf_id = vrf_id; +	vrf = vrf_get(ifp->vrf_id, NULL);  	IFNAME_RB_INSERT(vrf, ifp);  	if (ifp->ifindex != IFINDEX_INTERNAL)  		IFINDEX_RB_INSERT(vrf, ifp); -	if (!old_vrf->name) -		return;  	/*  	 * HACK: Change the interface VRF in the running configuration directly,  	 * bypassing the northbound layer. This is necessary to avoid deleting @@ -225,8 +218,9 @@ void if_delete_retain(struct interface *ifp)  /* Delete and free interface structure. */  void if_delete(struct interface *ifp)  { -	struct vrf *vrf = ifp->vrf; +	struct vrf *vrf; +	vrf = vrf_lookup_by_id(ifp->vrf_id);  	assert(vrf);  	IFNAME_RB_REMOVE(vrf, ifp); @@ -271,16 +265,16 @@ const char *ifindex2ifname(ifindex_t ifindex, vrf_id_t vrf_id)  ifindex_t ifname2ifindex(const char *name, vrf_id_t vrf_id)  {  	struct interface *ifp; -	struct vrf *vrf = vrf_lookup_by_id(vrf_id); -	return ((ifp = if_lookup_by_name(name, vrf)) != NULL) +	return ((ifp = if_lookup_by_name(name, vrf_id)) != NULL)  		       ? ifp->ifindex  		       : IFINDEX_INTERNAL;  }  /* Interface existance check by interface name. */ -struct interface *if_lookup_by_name(const char *name, struct vrf *vrf) +struct interface *if_lookup_by_name(const char *name, vrf_id_t vrf_id)  { +	struct vrf *vrf = vrf_lookup_by_id(vrf_id);  	struct interface if_tmp;  	if (!vrf || !name @@ -300,7 +294,7 @@ struct interface *if_lookup_by_name_all_vrf(const char *name)  		return NULL;  	RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { -		ifp = if_lookup_by_name(name, vrf); +		ifp = if_lookup_by_name(name, vrf->vrf_id);  		if (ifp)  			return ifp;  	} @@ -425,29 +419,29 @@ size_t if_lookup_by_hwaddr(const uint8_t *hw_addr, size_t addrsz,  /* Get interface by name if given name interface doesn't exist create     one. */ -struct interface *if_get_by_name(const char *name, struct vrf *vrf) +struct interface *if_get_by_name(const char *name, vrf_id_t vrf_id)  {  	struct interface *ifp;  	switch (vrf_get_backend()) {  	case VRF_BACKEND_UNKNOWN:  	case VRF_BACKEND_NETNS: -		ifp = if_lookup_by_name(name, vrf); +		ifp = if_lookup_by_name(name, vrf_id);  		if (ifp)  			return ifp; -		return if_create(name, vrf); +		return if_create(name, vrf_id);  	case VRF_BACKEND_VRF_LITE:  		ifp = if_lookup_by_name_all_vrf(name);  		if (ifp) { -			if (ifp->vrf == vrf) +			if (ifp->vrf_id == vrf_id)  				return ifp;  			/* If it came from the kernel or by way of zclient,  			 * believe it and update the ifp accordingly.  			 */ -			if_update_to_new_vrf(ifp, vrf); +			if_update_to_new_vrf(ifp, vrf_id);  			return ifp;  		} -		return if_create(name, vrf); +		return if_create(name, vrf_id);  	}  	return NULL; @@ -457,7 +451,7 @@ void if_set_index(struct interface *ifp, ifindex_t ifindex)  {  	struct vrf *vrf; -	vrf = ifp->vrf; +	vrf = vrf_lookup_by_id(ifp->vrf_id);  	assert(vrf);  	if (ifp->ifindex == ifindex) @@ -601,8 +595,7 @@ 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, vrf_to_id(ifp->vrf), -			ifp->ifindex, ifp->metric, +			ifp->name, ifp->vrf_id, ifp->ifindex, ifp->metric,  			ifp->mtu, ifp->mtu6, if_flag_dump(ifp->flags));  } @@ -638,12 +631,12 @@ void if_dump_all(void)   *     if not:   *     - no idea, just get the name in its entirety.   */ -static struct interface *if_sunwzebra_get(const char *name, struct vrf *vrf) +static struct interface *if_sunwzebra_get(const char *name, vrf_id_t vrf_id)  {  	struct interface *ifp;  	char *cp; -	if ((ifp = if_lookup_by_name(name, vrf)) != NULL) +	if ((ifp = if_lookup_by_name(name, vrf_id)) != NULL)  		return ifp;  	/* hunt the primary interface name... */ @@ -651,7 +644,7 @@ static struct interface *if_sunwzebra_get(const char *name, struct vrf *vrf)  	if (cp)  		*cp = '\0'; -	return if_get_by_name(name, vrf); +	return if_get_by_name(name, vrf_id);  }  #endif /* SUNOS_5 */ @@ -784,8 +777,7 @@ connected_log(struct connected *connected, char *str)  	p = connected->address;  	snprintf(logbuf, BUFSIZ, "%s interface %s vrf %u %s %s/%d ", str, -		 ifp->name, vrf_to_id(ifp->vrf), -		 prefix_family_str(p), +		 ifp->name, ifp->vrf_id, prefix_family_str(p),  		 inet_ntop(p->family, &p->u.prefix, buf, BUFSIZ), p->prefixlen);  	p = connected->destination; @@ -1134,9 +1126,9 @@ DEFPY_NOSH (interface,         VRF_CMD_HELP_STR)  {  	char xpath_list[XPATH_MAXLEN]; -	struct interface *ifp = NULL; +	vrf_id_t vrf_id; +	struct interface *ifp;  	int ret; -	struct vrf *vrf;  	if (!vrfname)  		vrfname = VRF_DEFAULT_NAME; @@ -1148,24 +1140,16 @@ DEFPY_NOSH (interface,  	 * interface is found, then a new one should be created on the default  	 * VRF.  	 */ -	VRF_GET_INSTANCE(vrf, vrfname, false, true); -	/* -	 * within vrf context, vrf_id may be unknown -	 * this happens on daemons relying on zebra -	 * on this specific case, interface creation may -	 * be forced -	 */ -	if (vrf && (vrf->vrf_id == VRF_UNKNOWN || -		    vrf_get_backend() == VRF_BACKEND_UNKNOWN)) -		ifp = if_lookup_by_name(ifname, vrf); -	else -		ifp = if_lookup_by_name_all_vrf(ifname); -	if (ifp && ifp->vrf != vrf) { +	VRF_GET_ID(vrf_id, vrfname, false); +	ifp = if_lookup_by_name_all_vrf(ifname); +	if (ifp && ifp->vrf_id != vrf_id) { +		struct vrf *vrf; +  		/*  		 * Special case 1: a VRF name was specified, but the found  		 * interface is associated to different VRF. Reject the command.  		 */ -		if (vrf->vrf_id != VRF_DEFAULT) { +		if (vrf_id != VRF_DEFAULT) {  			vty_out(vty, "%% interface %s not in %s vrf\n", ifname,  				vrfname);  			return CMD_WARNING_CONFIG_FAILED; @@ -1176,8 +1160,9 @@ DEFPY_NOSH (interface,  		 * interface is associated to a VRF other than the default one.  		 * Update vrf_id and vrfname to account for that.  		 */ -		vrf = ifp->vrf; +		vrf = vrf_lookup_by_id(ifp->vrf_id);  		assert(vrf); +		vrf_id = ifp->vrf_id;  		vrfname = vrf->name;  	} @@ -1196,7 +1181,7 @@ DEFPY_NOSH (interface,  		 * all interface-level commands are converted to the new  		 * northbound model.  		 */ -		ifp = if_lookup_by_name(ifname, vrf); +		ifp = if_lookup_by_name(ifname, vrf_id);  		if (ifp)  			VTY_PUSH_CONTEXT(INTERFACE_NODE, ifp);  	} @@ -1318,7 +1303,7 @@ static int lib_interface_create(enum nb_event event,  	const char *ifname;  	const char *vrfname;  	struct vrf *vrf; -	struct interface *ifp = NULL; +	struct interface *ifp;  	ifname = yang_dnode_get_string(dnode, "./name");  	vrfname = yang_dnode_get_string(dnode, "./vrf"); @@ -1331,9 +1316,11 @@ static int lib_interface_create(enum nb_event event,  				  vrfname);  			return NB_ERR_VALIDATION;  		} -		if (vrf->vrf_id == VRF_UNKNOWN) -			zlog_warn("%s: VRF %s is not active. Using interface however.", -				  __func__, vrf->name); +		if (vrf->vrf_id == VRF_UNKNOWN) { +			zlog_warn("%s: VRF %s is not active", __func__, +				  vrf->name); +			return NB_ERR_VALIDATION; +		}  		/* if VRF is netns or not yet known - init for instance  		 * then assumption is that passed config is exact @@ -1341,7 +1328,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 != vrf) { +			if (ifp && ifp->vrf_id != vrf->vrf_id) {  				zlog_warn(  					"%s: interface %s already exists in another VRF",  					__func__, ifp->name); @@ -1356,9 +1343,9 @@ static int lib_interface_create(enum nb_event event,  		vrf = vrf_lookup_by_name(vrfname);  		assert(vrf);  #ifdef SUNOS_5 -		ifp = if_sunwzebra_get(ifname, vrf); +		ifp = if_sunwzebra_get(ifname, vrf->vrf_id);  #else -		ifp = if_get_by_name(ifname, vrf); +		ifp = if_get_by_name(ifname, vrf->vrf_id);  #endif /* SUNOS_5 */  		nb_running_set_entry(dnode, ifp);  		break; @@ -33,8 +33,6 @@ extern "C" {  DECLARE_MTYPE(CONNECTED_LABEL) -struct vrf; -  /* Interface link-layer type, if known. Derived from:   *   * net/if_arp.h on various platforms - Linux especially. @@ -293,7 +291,7 @@ struct interface {  #endif /* HAVE_NET_RT_IFLIST */  	struct route_node *node; -	struct vrf *vrf; +	vrf_id_t vrf_id;  	QOBJ_FIELDS  }; @@ -304,37 +302,33 @@ 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 ?                 \ -			 (_ifp)->vrf->vrf_id : VRF_UNKNOWN); +			 __func__, (ifp)->name, (ifp)->vrf_id); -#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 ?                 \ -			 (_ifp)->vrf->vrf_id : VRF_UNKNOWN); +			 __func__, (ifp)->name, (ifp)->vrf_id); -#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 ?              \ -			 (_ifp)->vrf->vrf_id : VRF_UNKNOWN); +			 __func__, (ifp)->ifindex, (ifp)->vrf_id); -#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 ?              \ -			 (_ifp)->vrf->vrf_id : VRF_UNKNOWN); +			 __func__, (ifp)->ifindex, (ifp)->vrf_id);  #define FOR_ALL_INTERFACES(vrf, ifp)                                           \  	if (vrf)                                                               \ @@ -482,8 +476,8 @@ extern int if_cmp_name_func(const char *p1, const char *p2);   * This is useful for vrf route-leaking.  So more than anything   * else think before you use VRF_UNKNOWN   */ -extern void if_update_to_new_vrf(struct interface *, struct vrf *vrf); -extern struct interface *if_create(const char *name, struct vrf *vrf); +extern void if_update_to_new_vrf(struct interface *, vrf_id_t vrf_id); +extern struct interface *if_create(const char *name, vrf_id_t vrf_id);  extern struct interface *if_lookup_by_index(ifindex_t, vrf_id_t vrf_id);  extern struct interface *if_lookup_exact_address(void *matchaddr, int family,  						 vrf_id_t vrf_id); @@ -497,8 +491,8 @@ size_t if_lookup_by_hwaddr(const uint8_t *hw_addr, size_t addrsz,  /* These 3 functions are to be used when the ifname argument is terminated     by a '\0' character: */  extern struct interface *if_lookup_by_name_all_vrf(const char *ifname); -extern struct interface *if_lookup_by_name(const char *ifname, struct vrf *vrf); -extern struct interface *if_get_by_name(const char *ifname, struct vrf *vrf); +extern struct interface *if_lookup_by_name(const char *ifname, vrf_id_t vrf_id); +extern struct interface *if_get_by_name(const char *ifname, vrf_id_t vrf_id);  extern void if_set_index(struct interface *ifp, ifindex_t ifindex);  /* Delete the interface, but do not free the structure, and leave it in the @@ -176,24 +176,6 @@ struct vrf *vrf_get(vrf_id_t vrf_id, const char *name)  			   name, vrf_id, vrf->vrf_id);  		return NULL;  	} -	/* look for duplicates. case is followine one: -	 * - a vrf is configured per name -> vrfA -	 * - netlink discovery creates a vrf with vrf_id ->vrfB -	 * - then, netlink discovers vrf, and associated vrf_id and name -	 * -> so vrfA and vrfB must be merged -	 */ -	if (vrf && vrf_id != VRF_UNKNOWN -	    && vrf->vrf_id == VRF_UNKNOWN) { -		struct vrf *vrf2 = vrf_lookup_by_id(vrf_id); -		struct interface *ifp; - -		if (vrf2 && !vrf2->name && vrf2 != vrf) { -			/* move vrf2 context to vrf */ -			FOR_ALL_INTERFACES (vrf2, ifp) -				if_update_to_new_vrf(ifp, vrf); -			vrf_delete(vrf2); -		} -	}  	/* Try to find VRF both by ID and name */  	if (!vrf && vrf_id != VRF_UNKNOWN)  		vrf = vrf_lookup_by_id(vrf_id); @@ -923,15 +905,14 @@ 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 || !vrf) +	if (fd < 0 || name == NULL)  		return fd;  	/* the device should exist  	 * otherwise we should return  	 * case ifname = vrf in netns mode => return  	 */ -	ifp = if_lookup_by_name(name, vrf); +	ifp = if_lookup_by_name(name, vrf_id);  	if (!ifp)  		return fd;  #ifdef SO_BINDTODEVICE @@ -1018,13 +999,3 @@ 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,36 +113,6 @@ 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 - */ -#define VRF_GET_INSTANCE(V, NAME, USE_JSON, FORCE_CREATION)		       \ -	do {								       \ -		struct vrf *_vrf;                                              \ -									       \ -		if (!(_vrf = vrf_lookup_by_name(NAME))) {                      \ -			if (!FORCE_CREATION) {   			       \ -				if (USE_JSON) {				       \ -					vty_out(vty, "{}\n");                  \ -				} else {                                       \ -					vty_out(vty, "%% VRF %s not found\n",  \ -						NAME);			       \ -				}                                              \ -				return CMD_WARNING;                            \ -			}                                                      \ -			_vrf = vrf_get(VRF_UNKNOWN, NAME);                     \ -		}                                                              \ -		if (_vrf->vrf_id == VRF_UNKNOWN) {                             \ -			if (USE_JSON) {                                        \ -				vty_out(vty, "{}\n");                          \ -			} else {                                               \ -				vty_out(vty, "%% VRF %s not active\n", NAME);  \ -			}                                                      \ -		}                                                              \ -		(V) = _vrf;						       \ -	} while (0)  #define VRF_GET_ID(V, NAME, USE_JSON)                                          \  	do {                                                                   \ diff --git a/lib/zclient.c b/lib/zclient.c index 94d92f67e7..e9b4f5a58b 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -1461,18 +1461,12 @@ struct interface *zebra_interface_add_read(struct stream *s, vrf_id_t vrf_id)  {  	struct interface *ifp;  	char ifname_tmp[INTERFACE_NAMSIZ]; -	struct vrf *vrf = vrf_lookup_by_id(vrf_id);  	/* Read interface name. */  	stream_get(ifname_tmp, s, INTERFACE_NAMSIZ);  	/* 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; +	ifp = if_get_by_name(ifname_tmp, vrf_id);  	zebra_interface_if_set_value(s, ifp); @@ -1495,8 +1489,7 @@ struct interface *zebra_interface_state_read(struct stream *s, vrf_id_t vrf_id)  	stream_get(ifname_tmp, s, INTERFACE_NAMSIZ);  	/* Lookup this by interface index. */ -	ifp = if_lookup_by_name(ifname_tmp, -				vrf_lookup_by_id(vrf_id)); +	ifp = if_lookup_by_name(ifname_tmp, vrf_id);  	if (ifp == NULL) {  		flog_err(EC_LIB_ZAPI_ENCODE,  			 "INTERFACE_STATE: Cannot find IF %s in VRF %d", @@ -1556,8 +1549,7 @@ struct interface *zebra_interface_link_params_read(struct stream *s,  	ifindex = stream_getl(s); -	struct interface *ifp = if_lookup_by_index(ifindex, -						   vrf_id); +	struct interface *ifp = if_lookup_by_index(ifindex, vrf_id);  	if (ifp == NULL) {  		flog_err(EC_LIB_ZAPI_ENCODE, @@ -1853,8 +1845,7 @@ struct interface *zebra_interface_vrf_update_read(struct stream *s,  	stream_get(ifname, s, INTERFACE_NAMSIZ);  	/* Lookup interface. */ -	ifp = if_lookup_by_name(ifname, -				vrf_lookup_by_id(vrf_id)); +	ifp = if_lookup_by_name(ifname, vrf_id);  	if (ifp == NULL) {  		flog_err(EC_LIB_ZAPI_ENCODE,  			 "INTERFACE_VRF_UPDATE: Cannot find IF %s in VRF %d", @@ -2849,12 +2840,11 @@ void zclient_interface_set_master(struct zclient *client,  	s = client->obuf;  	stream_reset(s); -	zclient_create_header(s, ZEBRA_INTERFACE_SET_MASTER, -			      vrf_to_id(master->vrf)); +	zclient_create_header(s, ZEBRA_INTERFACE_SET_MASTER, master->vrf_id); -	stream_putl(s, vrf_to_id(master->vrf)); +	stream_putl(s, master->vrf_id);  	stream_putl(s, master->ifindex); -	stream_putl(s, vrf_to_id(slave->vrf)); +	stream_putl(s, slave->vrf_id);  	stream_putl(s, slave->ifindex);  	stream_putw_at(s, 0, stream_get_endp(s)); diff --git a/nhrpd/nhrp_interface.c b/nhrpd/nhrp_interface.c index a01911ca4b..8f1ba14fe4 100644 --- a/nhrpd/nhrp_interface.c +++ b/nhrpd/nhrp_interface.c @@ -126,8 +126,7 @@ static void nhrp_interface_update_nbma(struct interface *ifp)  	sockunion_family(&nbma) = AF_UNSPEC;  	if (nifp->source) -		nbmaifp = if_lookup_by_name(nifp->source, -					    vrf_lookup_by_id(VRF_DEFAULT)); +		nbmaifp = if_lookup_by_name(nifp->source, VRF_DEFAULT);  	switch (ifp->ll_type) {  	case ZEBRA_LLT_IPGRE: { diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c index 91a28eaa4f..946bbf8cc9 100644 --- a/ospf6d/ospf6_asbr.c +++ b/ospf6d/ospf6_asbr.c @@ -1404,8 +1404,7 @@ ospf6_routemap_rule_match_interface(void *rule, const struct prefix *prefix,  	if (type == RMAP_OSPF6) {  		ei = ((struct ospf6_route *)object)->route_option; -		ifp = if_lookup_by_name((char *)rule, -					vrf_lookup_by_id(VRF_DEFAULT)); +		ifp = if_lookup_by_name((char *)rule, VRF_DEFAULT);  		if (ifp != NULL && ei->ifindex == ifp->ifindex)  			return RMAP_MATCH; diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c index 114a56c952..692c84ad08 100644 --- a/ospf6d/ospf6_interface.c +++ b/ospf6d/ospf6_interface.c @@ -996,8 +996,7 @@ DEFUN (show_ipv6_ospf6_interface,  	struct interface *ifp;  	if (argc == 5) { -		ifp = if_lookup_by_name(argv[idx_ifname]->arg, -					vrf_lookup_by_id(VRF_DEFAULT)); +		ifp = if_lookup_by_name(argv[idx_ifname]->arg, VRF_DEFAULT);  		if (ifp == NULL) {  			vty_out(vty, "No such Interface: %s\n",  				argv[idx_ifname]->arg); @@ -1082,8 +1081,7 @@ DEFUN (show_ipv6_ospf6_interface_traffic,  	if (argv_find(argv, argc, "IFNAME", &idx_ifname)) {  		intf_name = argv[idx_ifname]->arg; -		ifp = if_lookup_by_name(intf_name, -					vrf_lookup_by_id(VRF_DEFAULT)); +		ifp = if_lookup_by_name(intf_name, VRF_DEFAULT);  		if (ifp == NULL) {  			vty_out(vty, "No such Interface: %s\n", intf_name);  			return CMD_WARNING; @@ -1127,8 +1125,7 @@ DEFUN (show_ipv6_ospf6_interface_ifname_prefix,  	struct interface *ifp;  	struct ospf6_interface *oi; -	ifp = if_lookup_by_name(argv[idx_ifname]->arg, -				vrf_lookup_by_id(VRF_DEFAULT)); +	ifp = if_lookup_by_name(argv[idx_ifname]->arg, VRF_DEFAULT);  	if (ifp == NULL) {  		vty_out(vty, "No such Interface: %s\n", argv[idx_ifname]->arg);  		return CMD_WARNING; @@ -2029,7 +2026,7 @@ DEFUN (clear_ipv6_ospf6_interface,  	} else /* Interface name is specified. */  	{  		if ((ifp = if_lookup_by_name(argv[idx_ifname]->arg, -					     vrf_lookup_by_id(VRF_DEFAULT))) +					     VRF_DEFAULT))  		    == NULL) {  			vty_out(vty, "No such Interface: %s\n",  				argv[idx_ifname]->arg); diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c index bbc9247b07..40c6123810 100644 --- a/ospf6d/ospf6_top.c +++ b/ospf6d/ospf6_top.c @@ -654,10 +654,9 @@ DEFUN (ospf6_interface_area,  	struct ospf6_interface *oi;  	struct interface *ifp;  	uint32_t area_id; -	struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);  	/* find/create ospf6 interface */ -	ifp = if_get_by_name(argv[idx_ifname]->arg, vrf); +	ifp = if_get_by_name(argv[idx_ifname]->arg, VRF_DEFAULT);  	oi = (struct ospf6_interface *)ifp->info;  	if (oi == NULL)  		oi = ospf6_interface_create(ifp); @@ -715,8 +714,7 @@ DEFUN (no_ospf6_interface_area,  	struct interface *ifp;  	uint32_t area_id; -	ifp = if_lookup_by_name(argv[idx_ifname]->arg, -				vrf_lookup_by_id(VRF_DEFAULT)); +	ifp = if_lookup_by_name(argv[idx_ifname]->arg, VRF_DEFAULT);  	if (ifp == NULL) {  		vty_out(vty, "No such interface %s\n", argv[idx_ifname]->arg);  		return CMD_SUCCESS; diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c index 6516129c5d..ce1604a5b1 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, -			   vrf_to_name(oi->ifp->vrf), -			   vrf_to_id(oi->ifp->vrf)); +			   ospf_vrf_id_to_name(oi->ifp->vrf_id), +			   oi->ifp->vrf_id);  	ospf_delete_from_if(oi->ifp, oi); @@ -838,7 +838,6 @@ struct ospf_interface *ospf_vl_new(struct ospf *ospf,  	struct in_addr area_id;  	struct connected *co;  	struct prefix_ipv4 *p; -	struct vrf *vrf;  	if (IS_DEBUG_OSPF_EVENT)  		zlog_debug("ospf_vl_new(): Start"); @@ -856,8 +855,7 @@ struct ospf_interface *ospf_vl_new(struct ospf *ospf,  			ospf->vrf_id);  	snprintf(ifname, sizeof(ifname), "VLINK%u", vlink_count); -	vrf = vrf_lookup_by_id(ospf->vrf_id); -	vi = if_create(ifname, vrf); +	vi = if_create(ifname, ospf->vrf_id);  	/*  	 * if_create sets ZEBRA_INTERFACE_LINKDETECTION  	 * virtual links don't need this. diff --git a/ospfd/ospf_te.c b/ospfd/ospf_te.c index 52ec97e345..e683636639 100644 --- a/ospfd/ospf_te.c +++ b/ospfd/ospf_te.c @@ -2569,7 +2569,7 @@ DEFUN (show_ip_ospf_mpls_te_link,  	if (idx_interface) {  		ifp = if_lookup_by_name(  					argv[idx_interface]->arg, -					vrf_lookup_by_id(ospf->vrf_id)); +					ospf->vrf_id);  		if (ifp == NULL) {  			vty_out(vty, "No such interface name in vrf %s\n",  				vrf->name); diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 6fee49d122..631465fb20 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -457,14 +457,13 @@ DEFUN (ospf_passive_interface,  	int ret;  	struct ospf_if_params *params;  	struct route_node *rn; -	struct vrf *vrf = vrf_lookup_by_id(ospf->vrf_id);  	if (strmatch(argv[1]->text, "default")) {  		ospf_passive_interface_default(ospf, OSPF_IF_PASSIVE);  		return CMD_SUCCESS;  	}  	if (ospf->vrf_id != VRF_UNKNOWN) -		ifp = if_get_by_name(argv[1]->arg, vrf); +		ifp = if_get_by_name(argv[1]->arg, ospf->vrf_id);  	if (ifp == NULL) {  		vty_out(vty, "interface %s not found.\n", (char *)argv[1]->arg); @@ -530,7 +529,6 @@ DEFUN (no_ospf_passive_interface,  	struct ospf_if_params *params;  	int ret;  	struct route_node *rn; -	struct vrf *vrf = vrf_lookup_by_id(ospf->vrf_id);  	if (strmatch(argv[2]->text, "default")) {  		ospf_passive_interface_default(ospf, OSPF_IF_ACTIVE); @@ -538,7 +536,7 @@ DEFUN (no_ospf_passive_interface,  	}  	if (ospf->vrf_id != VRF_UNKNOWN) -		ifp = if_get_by_name(argv[2]->arg, vrf); +		ifp = if_get_by_name(argv[2]->arg, ospf->vrf_id);  	if (ifp == NULL) {  		vty_out(vty, "interface %s not found.\n", (char *)argv[2]->arg); @@ -3741,8 +3739,7 @@ static int show_ip_ospf_interface_common(struct vty *vty, struct ospf *ospf,  					       json_interface);  	} else {  		/* Interface name is specified. */ -		ifp = if_lookup_by_name(intf_name, -					vrf_lookup_by_id(ospf->vrf_id)); +		ifp = if_lookup_by_name(intf_name, ospf->vrf_id);  		if (ifp == NULL) {  			if (use_json)  				json_object_boolean_true_add(json_vrf, @@ -3882,8 +3879,7 @@ static int show_ip_ospf_interface_traffic_common(  		}  	} else {  		/* Interface name is specified. */ -		ifp = if_lookup_by_name(intf_name, -					vrf_lookup_by_id(ospf->vrf_id)); +		ifp = if_lookup_by_name(intf_name, ospf->vrf_id);  		if (ifp != NULL) {  			struct route_node *rn;  			struct ospf_interface *oi; @@ -4693,8 +4689,7 @@ static int show_ip_ospf_neighbor_int_common(struct vty *vty, struct ospf *ospf,  	ospf_show_vrf_name(ospf, vty, json, use_vrf); -	ifp = if_lookup_by_name(argv[arg_base]->arg, -				vrf_lookup_by_id(ospf->vrf_id)); +	ifp = if_lookup_by_name(argv[arg_base]->arg, ospf->vrf_id);  	if (!ifp) {  		if (use_json)  			json_object_boolean_true_add(json, "noSuchIface"); @@ -4762,8 +4757,7 @@ DEFUN (show_ip_ospf_neighbor_int,  	argv_find(argv, argc, "IFNAME", &idx_ifname); -	ifp = if_lookup_by_name(argv[idx_ifname]->arg, -				vrf_lookup_by_id(vrf_id)); +	ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf_id);  	if (!ifp)  		return ret; @@ -5580,8 +5574,7 @@ static int show_ip_ospf_neighbor_int_detail_common(struct vty *vty,  			vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);  	} -	ifp = if_lookup_by_name(argv[arg_base]->arg, -				vrf_lookup_by_id(ospf->vrf_id)); +	ifp = if_lookup_by_name(argv[arg_base]->arg, ospf->vrf_id);  	if (!ifp) {  		if (!use_json)  			vty_out(vty, "No such interface.\n"); @@ -7279,7 +7272,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(ifp->vrf); +		ospf = ospf_lookup_by_vrf_id(ifp->vrf_id);  		if (ospf) {  			oi = ospf_if_lookup_by_local_addr(ospf, ifp, addr);  			if (oi) @@ -7396,7 +7389,7 @@ DEFUN (no_ip_ospf_dead_interval,  	if (argc == 1) {  		struct ospf *ospf = NULL; -		ospf = ospf_lookup_by_vrf(ifp->vrf); +		ospf = ospf_lookup_by_vrf_id(ifp->vrf_id);  		if (ospf) {  			oi = ospf_if_lookup_by_local_addr(ospf, ifp, addr);  			if (oi) @@ -7995,8 +7988,8 @@ DEFUN (ip_ospf_area,  	argv_find(argv, argc, "area", &idx);  	areaid = argv[idx + 1]->arg; -	if (ifp->vrf && ifp->vrf->vrf_id && !instance) -		ospf = ospf_lookup_by_vrf(ifp->vrf); +	if (ifp->vrf_id && !instance) +		ospf = ospf_lookup_by_vrf_id(ifp->vrf_id);  	else  		ospf = ospf_lookup_instance(instance); @@ -8093,8 +8086,8 @@ DEFUN (no_ip_ospf_area,  	if (argv_find(argv, argc, "(1-65535)", &idx))  		instance = strtol(argv[idx]->arg, NULL, 10); -	if (ifp->vrf && ifp->vrf->vrf_id && !instance) -		ospf = ospf_lookup_by_vrf(ifp->vrf); +	if (ifp->vrf_id && !instance) +		ospf = ospf_lookup_by_vrf_id(ifp->vrf_id);  	else  		ospf = ospf_lookup_instance(instance); @@ -9720,7 +9713,7 @@ static int config_write_interface_one(struct vty *vty, struct vrf *vrf)  			continue;  		vty_frame(vty, "!\n"); -		if (ifp->vrf->vrf_id == VRF_DEFAULT) +		if (ifp->vrf_id == VRF_DEFAULT)  			vty_frame(vty, "interface %s\n", ifp->name);  		else  			vty_frame(vty, "interface %s vrf %s\n", ifp->name, @@ -10689,8 +10682,7 @@ DEFUN (clear_ip_ospf_interface,  		}  	} else {  		/* Interface name is specified. */ -		ifp = if_lookup_by_name(argv[idx_ifname]->arg, -					vrf_lookup_by_id(vrf_id)); +		ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf_id);  		if (ifp == NULL)  			vty_out(vty, "No such interface name\n");  		else diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c index 33d2c82d03..c178e367d3 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, vrf_to_name(ifp->vrf), -			vrf_to_id(ifp->vrf), ifp->ifindex, +			ifp->name, ospf_vrf_id_to_name(ifp->vrf_id), +			ifp->vrf_id, 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, vrf_to_name(ifp->vrf), -			vrf_to_id(ifp->vrf), ifp->ifindex, +			ifp->name, ospf_vrf_id_to_name(ifp->vrf_id), +			ifp->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	hook_call(ospf_if_delete, ifp); @@ -175,8 +175,7 @@ static struct interface *zebra_interface_if_lookup(struct stream *s,  	stream_get(ifname_tmp, s, INTERFACE_NAMSIZ);  	/* And look it up. */ -	return if_lookup_by_name(ifname_tmp, -				 vrf_lookup_by_id(vrf_id)); +	return if_lookup_by_name(ifname_tmp, vrf_id);  }  static int ospf_interface_state_up(ZAPI_CALLBACK_ARGS) @@ -366,7 +365,7 @@ static int ospf_interface_vrf_update(ZAPI_CALLBACK_ARGS)  			ospf_vrf_id_to_name(new_vrf_id), new_vrf_id);  	/*if_update(ifp, ifp->name, strlen(ifp->name), new_vrf_id);*/ -	if_update_to_new_vrf(ifp, vrf_lookup_by_id(new_vrf_id)); +	if_update_to_new_vrf(ifp, new_vrf_id);  	return 0;  } diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c index de51ec226a..073a51561b 100644 --- a/ospfd/ospfd.c +++ b/ospfd/ospfd.c @@ -452,11 +452,6 @@ 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;  } @@ -1352,8 +1347,8 @@ void ospf_if_update(struct ospf *ospf, struct interface *ifp)  	if (IS_DEBUG_OSPF_EVENT)  		zlog_debug( -			"%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), +			"%s: interface %s ifp->vrf_id %u ospf vrf %s vrf_id %u router_id %s", +			__PRETTY_FUNCTION__, ifp->name, ifp->vrf_id,  			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 a46febaeca..cbea033b73 100644 --- a/ospfd/ospfd.h +++ b/ospfd/ospfd.h @@ -507,7 +507,6 @@ 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_cmd.c b/pimd/pim_cmd.c index d71b4bf640..c6617d9d21 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -7655,7 +7655,7 @@ DEFUN (interface_ip_mroute,  	pim = pim_ifp->pim;  	oifname = argv[idx_interface]->arg; -	oif = if_lookup_by_name(oifname, pim->vrf); +	oif = if_lookup_by_name(oifname, pim->vrf_id);  	if (!oif) {  		vty_out(vty, "No such interface name %s\n", oifname);  		return CMD_WARNING; @@ -7706,7 +7706,7 @@ DEFUN (interface_ip_mroute_source,  	pim = pim_ifp->pim;  	oifname = argv[idx_interface]->arg; -	oif = if_lookup_by_name(oifname, pim->vrf); +	oif = if_lookup_by_name(oifname, pim->vrf_id);  	if (!oif) {  		vty_out(vty, "No such interface name %s\n", oifname);  		return CMD_WARNING; @@ -7761,7 +7761,7 @@ DEFUN (interface_no_ip_mroute,  	pim = pim_ifp->pim;  	oifname = argv[idx_interface]->arg; -	oif = if_lookup_by_name(oifname, pim->vrf); +	oif = if_lookup_by_name(oifname, pim->vrf_id);  	if (!oif) {  		vty_out(vty, "No such interface name %s\n", oifname);  		return CMD_WARNING; @@ -7813,7 +7813,7 @@ DEFUN (interface_no_ip_mroute_source,  	pim = pim_ifp->pim;  	oifname = argv[idx_interface]->arg; -	oif = if_lookup_by_name(oifname, pim->vrf); +	oif = if_lookup_by_name(oifname, pim->vrf_id);  	if (!oif) {  		vty_out(vty, "No such interface name %s\n", oifname);  		return CMD_WARNING; @@ -10136,7 +10136,7 @@ DEFUN_HIDDEN (ip_pim_mlag,  	idx = 3;  	peerlink = argv[idx]->arg; -	ifp = if_lookup_by_name(peerlink, vrf_lookup_by_id(VRF_DEFAULT)); +	ifp = if_lookup_by_name(peerlink, VRF_DEFAULT);  	if (!ifp) {  		vty_out(vty, "No such interface name %s\n", peerlink);  		return CMD_WARNING; diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index 6ccc6ed196..7b8f045697 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(vrf_to_id(ifp->vrf)); +	pim_ifp->pim = pim_get_pim_instance(ifp->vrf_id);  	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 = ifp->vrf; +	struct vrf *vrf = vrf_lookup_by_id(ifp->vrf_id);  	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 = ifp->vrf; +	struct vrf *vrf = vrf_lookup_by_id(ifp->vrf_id);  	if (!vrf)  		return addr; @@ -894,10 +894,10 @@ 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 || ifp->vrf->vrf_id == VRF_DEFAULT) -			lo_ifp = if_lookup_by_name("lo", vrf); +		if (ifp->vrf_id == VRF_DEFAULT) +			lo_ifp = if_lookup_by_name("lo", vrf->vrf_id);  		else -			lo_ifp = if_lookup_by_name(vrf->name, vrf); +			lo_ifp = if_lookup_by_name(vrf->name, vrf->vrf_id);  		if (lo_ifp)  			return pim_find_primary_addr(lo_ifp); @@ -1480,7 +1480,7 @@ void pim_if_create_pimreg(struct pim_instance *pim)  			snprintf(pimreg_name, sizeof(pimreg_name), "pimreg%u",  				 pim->vrf->data.l.table_id); -		pim->regiface = if_create(pimreg_name, pim->vrf); +		pim->regiface = if_create(pimreg_name, pim->vrf_id);  		pim->regiface->ifindex = PIM_OIF_PIM_REGISTER_VIF;  		pim_if_new(pim->regiface, false, false, true, diff --git a/pimd/pim_msdp_socket.c b/pimd/pim_msdp_socket.c index 954b5dee7e..b1f7cfd2c6 100644 --- a/pimd/pim_msdp_socket.c +++ b/pimd/pim_msdp_socket.c @@ -158,7 +158,7 @@ int pim_msdp_sock_listen(struct pim_instance *pim)  	if (pim->vrf_id != VRF_DEFAULT) {  		struct interface *ifp = -			if_lookup_by_name(pim->vrf->name, pim->vrf); +			if_lookup_by_name(pim->vrf->name, pim->vrf_id);  		if (!ifp) {  			flog_err(EC_LIB_INTERFACE,  				 "%s: Unable to lookup vrf interface: %s", @@ -239,7 +239,7 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp)  	if (mp->pim->vrf_id != VRF_DEFAULT) {  		struct interface *ifp = -			if_lookup_by_name(mp->pim->vrf->name, mp->pim->vrf); +			if_lookup_by_name(mp->pim->vrf->name, mp->pim->vrf_id);  		if (!ifp) {  			flog_err(EC_LIB_INTERFACE,  				 "%s: Unable to lookup vrf interface: %s", diff --git a/pimd/pim_static.c b/pimd/pim_static.c index 4ddf21951b..442b22e06f 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 != oif->vrf) { +	if (iif->vrf_id != oif->vrf_id) {  		return -3;  	} diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c index eef36288d9..4cebc43a0a 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -211,12 +211,11 @@ static int pim_zebra_if_state_up(ZAPI_CALLBACK_ARGS)  	 */  	if (sscanf(ifp->name, "pimreg%" SCNu32, &table_id) == 1) {  		struct vrf *vrf; -  		RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {  			if ((table_id == vrf->data.l.table_id) -			    && (ifp->vrf != vrf)) { +			    && (ifp->vrf_id != vrf->vrf_id)) {  				struct interface *master = if_lookup_by_name( -							     vrf->name, vrf); +					vrf->name, vrf->vrf_id);  				if (!master) {  					zlog_debug( @@ -291,7 +290,7 @@ static int pim_zebra_interface_vrf_update(ZAPI_CALLBACK_ARGS)  			   __PRETTY_FUNCTION__,  			   ifp->name, vrf_id, new_vrf_id); -	if_update_to_new_vrf(ifp, vrf_lookup_by_id(new_vrf_id)); +	if_update_to_new_vrf(ifp, new_vrf_id);  	return 0;  } diff --git a/ripd/rip_interface.c b/ripd/rip_interface.c index 3a892f33b2..80561f350b 100644 --- a/ripd/rip_interface.c +++ b/ripd/rip_interface.c @@ -366,7 +366,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->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	return 0; @@ -387,7 +387,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->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	rip_interface_sync(ifp); @@ -415,7 +415,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->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	/* Check if this interface is RIP enabled or not.*/ @@ -455,7 +455,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->vrf_id, ifp->ifindex, +		ifp->name, ifp->vrf_id, ifp->ifindex,  		(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);  	/* To support pseudo interface do not free interface structure.  */ @@ -470,21 +470,17 @@ int rip_interface_vrf_update(ZAPI_CALLBACK_ARGS)  {  	struct interface *ifp;  	vrf_id_t new_vrf_id; -	struct vrf *new_vrf;  	ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id,  					      &new_vrf_id);  	if (!ifp)  		return 0; -	new_vrf = vrf_lookup_by_id(new_vrf_id); -  	if (IS_RIP_DEBUG_ZEBRA)  		zlog_debug("interface %s VRF change vrf_id %u new vrf id %u",  			   ifp->name, vrf_id, new_vrf_id); -	if_update_to_new_vrf(ifp, new_vrf); - +	if_update_to_new_vrf(ifp, new_vrf_id);  	rip_interface_sync(ifp);  	return 0; @@ -1229,7 +1225,7 @@ void rip_interface_sync(struct interface *ifp)  {  	struct vrf *vrf; -	vrf = ifp->vrf; +	vrf = vrf_lookup_by_id(ifp->vrf_id);  	if (vrf) {  		struct rip_interface *ri; diff --git a/ripd/rip_routemap.c b/ripd/rip_routemap.c index b09af7e086..85d83c61dc 100644 --- a/ripd/rip_routemap.c +++ b/ripd/rip_routemap.c @@ -106,8 +106,7 @@ static route_map_result_t route_match_interface(void *rule,  	if (type == RMAP_RIP) {  		ifname = rule; -		ifp = if_lookup_by_name(ifname, -					vrf_lookup_by_id(VRF_DEFAULT)); +		ifp = if_lookup_by_name(ifname, VRF_DEFAULT);  		if (!ifp)  			return RMAP_NOMATCH; diff --git a/ripd/ripd.c b/ripd/ripd.c index a859bcc43e..e0ff0430f8 100644 --- a/ripd/ripd.c +++ b/ripd/ripd.c @@ -3305,7 +3305,7 @@ static void rip_distribute_update(struct distribute_ctx *ctx,  	if (!ctx->vrf || !dist->ifname)  		return; -	ifp = if_lookup_by_name(dist->ifname, ctx->vrf); +	ifp = if_lookup_by_name(dist->ifname, ctx->vrf->vrf_id);  	if (ifp == NULL)  		return; @@ -3424,7 +3424,7 @@ static void rip_if_rmap_update(struct if_rmap_ctx *ctx,  	if (ctx->name)  		vrf = vrf_lookup_by_name(ctx->name);  	if (vrf) -		ifp = if_lookup_by_name(if_rmap->ifname, vrf); +		ifp = if_lookup_by_name(if_rmap->ifname, vrf->vrf_id);  	if (ifp == NULL)  		return; @@ -3457,8 +3457,6 @@ 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 520e19a710..49ed13a2c2 100644 --- a/ripngd/ripng_interface.c +++ b/ripngd/ripng_interface.c @@ -212,7 +212,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->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);  	ripng_interface_sync(ifp); @@ -249,7 +249,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->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);  	return 0; @@ -266,7 +266,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->vrf_id, ifp->ifindex, +			ifp->name, ifp->vrf_id, ifp->ifindex,  			(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);  	/* Check is this interface is RIP enabled or not.*/ @@ -301,7 +301,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->vrf_id, ifp->ifindex, +		ifp->name, ifp->vrf_id, ifp->ifindex,  		(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);  	/* To support pseudo interface do not free interface structure.  */ @@ -316,21 +316,17 @@ int ripng_interface_vrf_update(ZAPI_CALLBACK_ARGS)  {  	struct interface *ifp;  	vrf_id_t new_vrf_id; -	struct vrf *new_vrf;  	ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id,  					      &new_vrf_id);  	if (!ifp)  		return 0; -	new_vrf = vrf_lookup_by_id(new_vrf_id); -  	if (IS_RIPNG_DEBUG_ZEBRA)  		zlog_debug("interface %s VRF change vrf_id %u new vrf id %u",  			   ifp->name, vrf_id, new_vrf_id); -	if_update_to_new_vrf(ifp, new_vrf); - +	if_update_to_new_vrf(ifp, new_vrf_id);  	ripng_interface_sync(ifp);  	return 0; @@ -935,7 +931,7 @@ void ripng_interface_sync(struct interface *ifp)  {  	struct vrf *vrf; -	vrf = ifp->vrf; +	vrf = vrf_lookup_by_id(ifp->vrf_id);  	if (vrf) {  		struct ripng_interface *ri; diff --git a/ripngd/ripng_routemap.c b/ripngd/ripng_routemap.c index 874d815167..0604e272cd 100644 --- a/ripngd/ripng_routemap.c +++ b/ripngd/ripng_routemap.c @@ -97,8 +97,7 @@ static route_map_result_t route_match_interface(void *rule,  	if (type == RMAP_RIPNG) {  		ifname = rule; -		ifp = if_lookup_by_name(ifname, -					vrf_lookup_by_id(VRF_DEFAULT)); +		ifp = if_lookup_by_name(ifname, VRF_DEFAULT);  		if (!ifp)  			return RMAP_NOMATCH; diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c index 34d8b3121e..3314892e74 100644 --- a/ripngd/ripngd.c +++ b/ripngd/ripngd.c @@ -2459,7 +2459,7 @@ static void ripng_distribute_update(struct distribute_ctx *ctx,  	if (!ctx->vrf || !dist->ifname)  		return; -	ifp = if_lookup_by_name(dist->ifname, ctx->vrf); +	ifp = if_lookup_by_name(dist->ifname, ctx->vrf->vrf_id);  	if (ifp == NULL)  		return; @@ -2576,7 +2576,7 @@ static void ripng_if_rmap_update(struct if_rmap_ctx *ctx,  	if (ctx->name)  		vrf = vrf_lookup_by_name(ctx->name);  	if (vrf) -		ifp = if_lookup_by_name(if_rmap->ifname, vrf); +		ifp = if_lookup_by_name(if_rmap->ifname, vrf->vrf_id);  	if (ifp == NULL)  		return; @@ -2608,8 +2608,6 @@ 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/sharpd/sharp_zebra.c b/sharpd/sharp_zebra.c index 01d6db0784..cd6f956580 100644 --- a/sharpd/sharp_zebra.c +++ b/sharpd/sharp_zebra.c @@ -46,7 +46,7 @@ struct zclient *zclient = NULL;  /* For registering threads. */  extern struct thread_master *master; -static struct interface *zebra_interface_if_lookup(struct stream *s, vrf_id_t vrf_id) +static struct interface *zebra_interface_if_lookup(struct stream *s)  {  	char ifname_tmp[INTERFACE_NAMSIZ]; @@ -54,8 +54,7 @@ static struct interface *zebra_interface_if_lookup(struct stream *s, vrf_id_t vr  	stream_get(ifname_tmp, s, INTERFACE_NAMSIZ);  	/* And look it up. */ -	return if_lookup_by_name(ifname_tmp, -				 vrf_lookup_by_id(vrf_id)); +	return if_lookup_by_name(ifname_tmp, VRF_DEFAULT);  }  /* Inteface addition message from zebra. */ @@ -113,7 +112,7 @@ static int interface_address_delete(ZAPI_CALLBACK_ARGS)  static int interface_state_up(ZAPI_CALLBACK_ARGS)  { -	zebra_interface_if_lookup(zclient->ibuf, vrf_id); +	zebra_interface_if_lookup(zclient->ibuf);  	return 0;  } diff --git a/staticd/static_routes.c b/staticd/static_routes.c index e9fdad6bac..5f9ecad694 100644 --- a/staticd/static_routes.c +++ b/staticd/static_routes.c @@ -187,7 +187,7 @@ int static_add_route(afi_t afi, safi_t safi, uint8_t type, struct prefix *p,  	else {  		struct interface *ifp; -		ifp = if_lookup_by_name(ifname, nh_svrf->vrf); +		ifp = if_lookup_by_name(ifname, nh_svrf->vrf->vrf_id);  		if (ifp && ifp->ifindex != IFINDEX_INTERNAL) {  			si->ifindex = ifp->ifindex;  			static_install_route(rn, si, safi); @@ -331,7 +331,8 @@ static void static_fixup_vrf(struct static_vrf *svrf,  			si->nh_vrf_id = svrf->vrf->vrf_id;  			si->nh_registered = false;  			if (si->ifindex) { -				ifp = if_lookup_by_name(si->ifname, svrf->vrf); +				ifp = if_lookup_by_name(si->ifname, +							si->nh_vrf_id);  				if (ifp)  					si->ifindex = ifp->ifindex;  				else @@ -366,8 +367,7 @@ static void static_enable_vrf(struct static_vrf *svrf,  			si->vrf_id = vrf->vrf_id;  			if (si->ifindex) {  				ifp = if_lookup_by_name(si->ifname, -							vrf_lookup_by_id( -							 si->nh_vrf_id)); +							si->nh_vrf_id);  				if (ifp)  					si->ifindex = ifp->ifindex;  				else @@ -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 != vrf_to_id(ifp->vrf)) +			if (si->nh_vrf_id != ifp->vrf_id)  				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 == ifp->vrf) +		if (vrf->vrf_id == ifp->vrf_id)  			continue;  		/* Install any static routes configured for this interface. */ diff --git a/staticd/static_zebra.c b/staticd/static_zebra.c index 6ffeb2ca4b..c6da00418b 100644 --- a/staticd/static_zebra.c +++ b/staticd/static_zebra.c @@ -47,7 +47,7 @@  struct zclient *zclient;  static struct hash *static_nht_hash; -static struct interface *zebra_interface_if_lookup(struct stream *s, vrf_id_t vrf_id) +static struct interface *zebra_interface_if_lookup(struct stream *s)  {  	char ifname_tmp[INTERFACE_NAMSIZ]; @@ -55,8 +55,7 @@ static struct interface *zebra_interface_if_lookup(struct stream *s, vrf_id_t vr  	stream_get(ifname_tmp, s, INTERFACE_NAMSIZ);  	/* And look it up. */ -	return if_lookup_by_name(ifname_tmp, -				 vrf_lookup_by_id(vrf_id)); +	return if_lookup_by_name(ifname_tmp, VRF_DEFAULT);  }  /* Inteface addition message from zebra. */ @@ -116,7 +115,7 @@ static int interface_state_up(ZAPI_CALLBACK_ARGS)  {  	struct interface *ifp; -	ifp = zebra_interface_if_lookup(zclient->ibuf, vrf_id); +	ifp = zebra_interface_if_lookup(zclient->ibuf);  	if (ifp) {  		if (if_is_vrf(ifp)) { diff --git a/zebra/connected.c b/zebra/connected.c index bd4f9b66a9..bba221c2cf 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 = vrf_to_id(ifp->vrf), +		.vrf_id = ifp->vrf_id,  	};  	struct zebra_vrf *zvrf;  	uint32_t metric; -	zvrf = zebra_vrf_lookup_by_id(ifp->vrf->vrf_id); +	zvrf = zebra_vrf_lookup_by_id(ifp->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->vrf_id); +			 __PRETTY_FUNCTION__, ifp->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", -			vrf_to_id(ifp->vrf), ifp->name, +			ifp->vrf_id, 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 = vrf_to_id(ifp->vrf), +		.vrf_id = ifp->vrf_id,  	};  	struct zebra_vrf *zvrf; -	zvrf = zebra_vrf_lookup_by_id(ifp->vrf->vrf_id); +	zvrf = zebra_vrf_lookup_by_id(ifp->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->vrf_id); +			 __PRETTY_FUNCTION__, ifp->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", -			vrf_to_id(ifp->vrf), ifp->name, +			ifp->vrf_id, ifp->name,  			prefix2str(p, buf, sizeof(buf)));  	} -	rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE); +	rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE);  	/* Schedule LSP forwarding entries for processing, if appropriate. */ -	if (vrf_to_id(ifp->vrf) == VRF_DEFAULT) { +	if (ifp->vrf_id == VRF_DEFAULT) {  		if (IS_ZEBRA_DEBUG_MPLS) {  			char buf[PREFIX_STRLEN];  			zlog_debug(  				"%u: IF %s IP %s address delete, scheduling MPLS processing", -				vrf_to_id(ifp->vrf), ifp->name, +				ifp->vrf_id, ifp->name,  				prefix2str(p, buf, sizeof(buf)));  		} -		mpls_mark_lsps_for_processing(zvrf_info_lookup(ifp->vrf), p); +		mpls_mark_lsps_for_processing(vrf_info_lookup(ifp->vrf_id), p);  	}  } diff --git a/zebra/if_ioctl.c b/zebra/if_ioctl.c index 6ce566262d..8bec256355 100644 --- a/zebra/if_ioctl.c +++ b/zebra/if_ioctl.c @@ -54,7 +54,6 @@ static int interface_list_ioctl(void)  	struct interface *ifp;  	int n;  	int lastlen; -	struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);  	/* Normally SIOCGIFCONF works with AF_INET socket. */  	sock = socket(AF_INET, SOCK_DGRAM, 0); @@ -111,7 +110,7 @@ static int interface_list_ioctl(void)  		unsigned int size;  		ifreq = (struct ifreq *)((caddr_t)ifconf.ifc_req + n); -		ifp = if_get_by_name(ifreq->ifr_name, vrf); +		ifp = if_get_by_name(ifreq->ifr_name, VRF_DEFAULT);  		if_add_update(ifp);  		size = ifreq->ifr_addr.sa_len;  		if (size < sizeof(ifreq->ifr_addr)) @@ -121,7 +120,7 @@ static int interface_list_ioctl(void)  	}  #else  	for (n = 0; n < ifconf.ifc_len; n += sizeof(struct ifreq)) { -		ifp = if_get_by_name(ifreq->ifr_name, vrf); +		ifp = if_get_by_name(ifreq->ifr_name, VRF_DEFAULT);  		if_add_update(ifp);  		ifreq++;  	} @@ -152,8 +151,7 @@ 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, -			   vrf_to_id(ifp->vrf)); +	ret = vrf_if_ioctl(SIOCGIFHWADDR, (caddr_t)&ifreq, ifp->vrf_id);  	if (ret < 0)  		ifp->hw_addr_len = 0;  	else { @@ -197,8 +195,7 @@ static int if_getaddrs(void)  			continue;  		} -		ifp = if_lookup_by_name(ifap->ifa_name, -					vrf_lookup_by_id(VRF_DEFAULT)); +		ifp = if_lookup_by_name(ifap->ifa_name, VRF_DEFAULT);  		if (ifp == NULL) {  			flog_err(EC_LIB_INTERFACE,  				 "if_getaddrs(): Can't lookup interface %s\n", diff --git a/zebra/if_ioctl_solaris.c b/zebra/if_ioctl_solaris.c index 1ed75bfa55..8b539a9049 100644 --- a/zebra/if_ioctl_solaris.c +++ b/zebra/if_ioctl_solaris.c @@ -59,7 +59,6 @@ static int interface_list_ioctl(int af)  	int n;  	size_t needed, lastneeded = 0;  	char *buf = NULL; -	struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);  	frr_elevate_privs(&zserv_privs) {  		sock = socket(af, SOCK_DGRAM, 0); @@ -157,7 +156,7 @@ calculate_lifc_len:  		       && (*(lifreq->lifr_name + normallen) != ':'))  			normallen++; -		ifp = if_get_by_name(lifreq->lifr_name, vrf); +		ifp = if_get_by_name(lifreq->lifr_name, VRF_DEFAULT);  		if (lifreq->lifr_addr.ss_family == AF_INET)  			ifp->flags |= IFF_IPV4; diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index 4b6000c94b..df8d4bfe15 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, -				vrf_to_id(interface->vrf), +				interface->vrf_id,  				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(vrf_to_id(interface->vrf), sd, SIOCETHTOOL, +		rc = vrf_ioctl(interface->vrf_id, sd, SIOCETHTOOL,  			       (char *)&ifdata);  	}  	if (rc < 0) { @@ -598,7 +598,6 @@ static int netlink_interface(struct nlmsghdr *h, ns_id_t ns_id, int startup)  	ifindex_t link_ifindex = IFINDEX_INTERNAL;  	ifindex_t bond_ifindex = IFINDEX_INTERNAL;  	struct zebra_if *zif; -	struct vrf *vrf;  	zns = zebra_ns_lookup(ns_id);  	ifi = NLMSG_DATA(h); @@ -665,8 +664,6 @@ static int netlink_interface(struct nlmsghdr *h, ns_id_t ns_id, int startup)  		    && !vrf_is_backend_netns()) {  			zif_slave_type = ZEBRA_IF_SLAVE_VRF;  			vrf_id = *(uint32_t *)RTA_DATA(tb[IFLA_MASTER]); -			/* vrf can be needed before vrf netlink discovery */ -			vrf_get(vrf_id, NULL);  		} else if (slave_kind && (strcmp(slave_kind, "bridge") == 0)) {  			zif_slave_type = ZEBRA_IF_SLAVE_BRIDGE;  			bridge_ifindex = @@ -679,13 +676,13 @@ static int netlink_interface(struct nlmsghdr *h, ns_id_t ns_id, int startup)  	}  	if (vrf_is_backend_netns())  		vrf_id = (vrf_id_t)ns_id; -	vrf = vrf_lookup_by_id(vrf_id); +  	/* If linking to another interface, note it. */  	if (tb[IFLA_LINK])  		link_ifindex = *(ifindex_t *)RTA_DATA(tb[IFLA_LINK]);  	/* Add interface. */ -	ifp = if_get_by_name(name, vrf); +	ifp = if_get_by_name(name, vrf_id);  	set_ifindex(ifp, ifi->ifi_index, zns);  	ifp->flags = ifi->ifi_flags & 0x0000fffff;  	ifp->mtu6 = ifp->mtu = *(uint32_t *)RTA_DATA(tb[IFLA_MTU]); @@ -1112,7 +1109,6 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)  	ifindex_t link_ifindex = IFINDEX_INTERNAL;  	uint8_t old_hw_addr[INTERFACE_HWADDR_MAX];  	struct zebra_if *zif; -	struct vrf *vrf;  	zns = zebra_ns_lookup(ns_id);  	ifi = NLMSG_DATA(h); @@ -1213,9 +1209,6 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)  		}  		if (vrf_is_backend_netns())  			vrf_id = (vrf_id_t)ns_id; - -		vrf = vrf_lookup_by_id(vrf_id); -  		if (ifp == NULL  		    || !CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_ACTIVE)) {  			/* Add interface notification from kernel */ @@ -1229,11 +1222,11 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)  			if (ifp == NULL) {  				/* unknown interface */ -				ifp = if_get_by_name(name, vrf); +				ifp = if_get_by_name(name, vrf_id);  			} else {  				/* pre-configured interface, learnt now */ -				if (ifp->vrf != vrf) -					if_update_to_new_vrf(ifp, vrf); +				if (ifp->vrf_id != vrf_id) +					if_update_to_new_vrf(ifp, vrf_id);  			}  			/* Update interface information. */ @@ -1272,16 +1265,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 != vrf) { +		} else if (ifp->vrf_id != vrf_id) {  			/* 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, vrf_to_id(ifp->vrf), -					vrf_id, ifi->ifi_flags); +					name, ifp->ifindex, ifp->vrf_id, vrf_id, +					ifi->ifi_flags); -			if_handle_vrf_change(ifp, vrf->vrf_id); +			if_handle_vrf_change(ifp, vrf_id);  		} else {  			bool was_bridge_slave, was_bond_slave; diff --git a/zebra/interface.c b/zebra/interface.c index 34bdd54b8b..719cf05db1 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 = zvrf_info_lookup(ifp->vrf); +	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);  	/* case interface populate before vrf enabled */  	if (zvrf->zns) @@ -558,8 +558,7 @@ void if_add_update(struct interface *ifp)  				zlog_debug(  					"interface %s vrf %u index %d is shutdown. "  					"Won't wake it up.", -					ifp->name, vrf_to_id(ifp->vrf), -					ifp->ifindex); +					ifp->name, ifp->vrf_id, ifp->ifindex);  			return;  		} @@ -568,13 +567,12 @@ void if_add_update(struct interface *ifp)  		if (IS_ZEBRA_DEBUG_KERNEL)  			zlog_debug(  				"interface %s vrf %u index %d becomes active.", -				ifp->name, vrf_to_id(ifp->vrf), ifp->ifindex); +				ifp->name, ifp->vrf_id, ifp->ifindex);  	} else {  		if (IS_ZEBRA_DEBUG_KERNEL)  			zlog_debug("interface %s vrf %u index %d is added.", -				   ifp->name, vrf_to_id(ifp->vrf), -				   ifp->ifindex); +				   ifp->name, ifp->vrf_id, ifp->ifindex);  	}  } @@ -716,7 +714,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, vrf_to_id(ifp->vrf), ifp->ifindex); +			ifp->name, ifp->vrf_id, ifp->ifindex);  		return;  	} @@ -728,7 +726,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, vrf_to_id(ifp->vrf), ifp->ifindex); +			   ifp->name, ifp->vrf_id, ifp->ifindex);  	/* Delete connected routes from the kernel. */  	if_delete_connected(ifp); @@ -752,7 +750,7 @@ void if_delete_update(struct interface *ifp)  	 * occur with this implementation whereas it is not possible with  	 * vrf-lite).  	 */ -	if (ifp->vrf->vrf_id && !vrf_is_backend_netns()) +	if (ifp->vrf_id && !vrf_is_backend_netns())  		if_handle_vrf_change(ifp, VRF_DEFAULT);  	/* Reset some zebra interface params to default values. */ @@ -770,9 +768,8 @@ void if_delete_update(struct interface *ifp)  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 = vrf_to_id(ifp->vrf); +	old_vrf_id = ifp->vrf_id;  	/* Uninstall connected routes. */  	if_uninstall_connected(ifp); @@ -788,7 +785,7 @@ void if_handle_vrf_change(struct interface *ifp, vrf_id_t vrf_id)  	zebra_interface_vrf_update_del(ifp, vrf_id);  	/* update VRF */ -	if_update_to_new_vrf(ifp, vrf); +	if_update_to_new_vrf(ifp, vrf_id);  	/* Send out notification on interface VRF change. */  	/* This is to issue an ADD, if needed. */ @@ -803,9 +800,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", -			   vrf_to_id(ifp->vrf), ifp->name); +			   ifp->vrf_id, ifp->name);  	rib_update(old_vrf_id, RIB_UPDATE_IF_CHANGE); -	rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE); +	rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE);  }  static void ipv6_ll_address_to_mac(struct in6_addr *address, uint8_t *mac) @@ -823,7 +820,7 @@ void if_nbr_mac_to_ipv4ll_neigh_update(struct interface *ifp,  				       struct in6_addr *address,  				       int add)  { -	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf); +	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);  	struct zebra_if *zif = ifp->info;  	char buf[16] = "169.254.0.1";  	struct in_addr ipv4_ll; @@ -919,7 +916,7 @@ void if_up(struct interface *ifp)  {  	struct zebra_if *zif;  	struct interface *link_if; -	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf); +	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);  	zif = ifp->info;  	zif->up_count++; @@ -950,8 +947,8 @@ void if_up(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_RIB_DETAILED)  		zlog_debug("%u: IF %s up, scheduling RIB processing", -			   vrf_to_id(ifp->vrf), ifp->name); -	rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE); +			   ifp->vrf_id, ifp->name); +	rib_update(ifp->vrf_id, 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 @@ -976,7 +973,7 @@ void if_down(struct interface *ifp)  {  	struct zebra_if *zif;  	struct interface *link_if; -	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf); +	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);  	zif = ifp->info;  	zif->down_count++; @@ -1008,8 +1005,8 @@ void if_down(struct interface *ifp)  	if (IS_ZEBRA_DEBUG_RIB_DETAILED)  		zlog_debug("%u: IF %s down, scheduling RIB processing", -			   vrf_to_id(ifp->vrf), ifp->name); -	rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE); +			   ifp->vrf_id, ifp->name); +	rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE);  	if_nbr_ipv6ll_to_ipv4ll_neigh_del_all(ifp); @@ -1310,7 +1307,7 @@ static void if_dump_vty(struct vty *vty, struct interface *ifp)  	zebra_ptm_show_status(vty, ifp); -	vrf = ifp->vrf; +	vrf = vrf_lookup_by_id(ifp->vrf_id);  	vty_out(vty, "  vrf: %s\n", vrf->name);  	if (ifp->desc) @@ -1572,15 +1569,17 @@ DEFPY(show_interface, show_interface_cmd,        VRF_CMD_HELP_STR        "Interface status and configuration summary\n")  { -	struct vrf *vrf = NULL; +	struct vrf *vrf;  	struct interface *ifp; +	vrf_id_t vrf_id = VRF_DEFAULT;  	interface_update_stats();  	if (name) -		VRF_GET_INSTANCE(vrf, name, false, false); +		VRF_GET_ID(vrf_id, name, false);  	/* All interface print. */ +	vrf = vrf_lookup_by_id(vrf_id);  	if (brief) {  		ifs_dump_brief_vty(vty, vrf);  	} else { @@ -1633,14 +1632,14 @@ DEFUN (show_interface_name_vrf,  	int idx_ifname = 2;  	int idx_name = 4;  	struct interface *ifp; -	struct vrf *vrf; +	vrf_id_t vrf_id;  	interface_update_stats(); -	VRF_GET_INSTANCE(vrf, argv[idx_name]->arg, false, false); +	VRF_GET_ID(vrf_id, argv[idx_name]->arg, false);  	/* Specified interface print. */ -	ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf); +	ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf_id);  	if (ifp == NULL) {  		vty_out(vty, "%% Can't find interface %s\n",  			argv[idx_ifname]->arg); @@ -1670,7 +1669,7 @@ DEFUN (show_interface_name_vrf_all,  	/* All interface print. */  	RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {  		/* Specified interface print. */ -		ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf); +		ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf->vrf_id);  		if (ifp) {  			if_dump_vty(vty, ifp);  			found++; @@ -1687,8 +1686,9 @@ DEFUN (show_interface_name_vrf_all,  } -static void if_show_description(struct vty *vty, struct vrf *vrf) +static void if_show_description(struct vty *vty, vrf_id_t vrf_id)  { +	struct vrf *vrf = vrf_lookup_by_id(vrf_id);  	struct interface *ifp;  	vty_out(vty, "Interface       Status  Protocol  Description\n"); @@ -1742,14 +1742,12 @@ DEFUN (show_interface_desc,         "Interface description\n"         VRF_CMD_HELP_STR)  { -	struct vrf *vrf; +	vrf_id_t vrf_id = VRF_DEFAULT;  	if (argc > 3) -		VRF_GET_INSTANCE(vrf, argv[4]->arg, false, false); -	else -		vrf = vrf_lookup_by_id(VRF_DEFAULT); +		VRF_GET_ID(vrf_id, argv[4]->arg, false); -	if_show_description(vty, vrf); +	if_show_description(vty, vrf_id);  	return CMD_SUCCESS;  } @@ -1768,7 +1766,7 @@ DEFUN (show_interface_desc_vrf_all,  	RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)  		if (!RB_EMPTY(if_name_head, &vrf->ifaces_by_name)) {  			vty_out(vty, "\n\tVRF %u\n\n", vrf->vrf_id); -			if_show_description(vty, vrf); +			if_show_description(vty, vrf->vrf_id);  		}  	return CMD_SUCCESS; @@ -3122,9 +3120,9 @@ static int if_config_write(struct vty *vty)  			struct vrf *vrf;  			if_data = ifp->info; -			vrf = ifp->vrf; +			vrf = vrf_lookup_by_id(ifp->vrf_id); -			if (vrf->vrf_id == VRF_DEFAULT) +			if (ifp->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 628be6563a..8202e076af 100644 --- a/zebra/ioctl.c +++ b/zebra/ioctl.c @@ -142,8 +142,7 @@ void if_get_metric(struct interface *ifp)  	ifreq_set_name(&ifreq, ifp); -	if (vrf_if_ioctl(SIOCGIFMETRIC, (caddr_t)&ifreq, -			 vrf_to_id(ifp->vrf)) < 0) +	if (vrf_if_ioctl(SIOCGIFMETRIC, (caddr_t)&ifreq, ifp->vrf_id) < 0)  		return;  	ifp->metric = ifreq.ifr_metric;  	if (ifp->metric == 0) @@ -161,8 +160,7 @@ void if_get_mtu(struct interface *ifp)  	ifreq_set_name(&ifreq, ifp);  #if defined(SIOCGIFMTU) -	if (vrf_if_ioctl(SIOCGIFMTU, (caddr_t)&ifreq, -			 vrf_to_id(ifp->vrf)) < 0) { +	if (vrf_if_ioctl(SIOCGIFMTU, (caddr_t)&ifreq, ifp->vrf_id) < 0) {  		zlog_info("Can't lookup mtu by ioctl(SIOCGIFMTU)");  		ifp->mtu6 = ifp->mtu = -1;  		return; @@ -429,7 +427,7 @@ void if_get_flags(struct interface *ifp)  	ifreq_set_name(&ifreq, ifp); -	ret = vrf_if_ioctl(SIOCGIFFLAGS, (caddr_t)&ifreq, vrf_to_id(ifp->vrf)); +	ret = vrf_if_ioctl(SIOCGIFFLAGS, (caddr_t)&ifreq, ifp->vrf_id);  	if (ret < 0) {  		flog_err_sys(EC_LIB_SYSTEM_CALL,  			     "vrf_if_ioctl(SIOCGIFFLAGS) failed: %s", @@ -479,7 +477,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, vrf_to_id(ifp->vrf)); +	ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, ifp->vrf_id);  	if (ret < 0) {  		zlog_info("can't set interface flags"); @@ -500,7 +498,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, vrf_to_id(ifp->vrf)); +	ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, ifp->vrf_id);  	if (ret < 0) {  		zlog_info("can't unset interface flags"); diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c index be1191bac1..156ce50725 100644 --- a/zebra/kernel_socket.c +++ b/zebra/kernel_socket.c @@ -435,7 +435,6 @@ static void rtm_flag_dump(int flag)  static int ifan_read(struct if_announcemsghdr *ifan)  {  	struct interface *ifp; -	struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);  	ifp = if_lookup_by_index(ifan->ifan_index, VRF_DEFAULT); @@ -451,7 +450,7 @@ static int ifan_read(struct if_announcemsghdr *ifan)  				__func__, ifan->ifan_index, ifan->ifan_name);  		/* Create Interface */ -		ifp = if_get_by_name(ifan->ifan_name, vrf); +		ifp = if_get_by_name(ifan->ifan_name, VRF_DEFAULT);  		if_set_index(ifp, ifan->ifan_index);  		if_get_metric(ifp); @@ -530,7 +529,6 @@ int ifm_read(struct if_msghdr *ifm)  	int maskbit;  	caddr_t cp;  	char fbuf[64]; -	struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);  	/* terminate ifname at head (for strnlen) and tail (for safety) */  	ifname[IFNAMSIZ - 1] = '\0'; @@ -616,7 +614,7 @@ int ifm_read(struct if_msghdr *ifm)  	 * be filled in.  	 */  	if ((ifp == NULL) && ifnlen) -		ifp = if_lookup_by_name(ifname, vrf); +		ifp = if_lookup_by_name(ifname, VRF_DEFAULT);  	/*  	 * If ifp still does not exist or has an invalid index @@ -645,7 +643,7 @@ int ifm_read(struct if_msghdr *ifm)  		if (ifp == NULL) {  			/* Interface that zebra was not previously aware of, so  			 * create. */ -			ifp = if_create(ifname, vrf); +			ifp = if_create(ifname, VRF_DEFAULT);  			if (IS_ZEBRA_DEBUG_KERNEL)  				zlog_debug("%s: creating ifp for ifindex %d",  					   __func__, ifm->ifm_index); diff --git a/zebra/redistribute.c b/zebra/redistribute.c index 7b3332e582..b13f1170cd 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, vrf_to_id(ifp->vrf)); +			   ifp->name, ifp->vrf_id);  	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, vrf_to_id(ifp->vrf)); +			   ifp->name, ifp->vrf_id);  	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, -			   vrf_to_id(ifp->vrf)); +			   ifp->vrf_id);  	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, vrf_to_id(ifp->vrf)); +			   ifp->name, ifp->vrf_id);  	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, -			   vrf_to_id(ifp->vrf)); +			   ifp->vrf_id);  	}  	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, vrf_to_id(ifp->vrf)); +			   ifp->name, ifp->vrf_id);  	}  	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, vrf_to_id(ifp->vrf), new_vrf_id); +			ifp->name, ifp->vrf_id, 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, vrf_to_id(ifp->vrf)); +			ifp->name, old_vrf_id, ifp->vrf_id);  	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, vrf_to_id(ifp->vrf)); +			   ifp->name, ifp->vrf_id);  	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 b5a8860c43..569ffbab41 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(vrf_to_id(ifc->ifp->vrf)); +	struct zebra_vrf *zvrf = vrf_info_get(ifc->ifp->vrf_id);  	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(vrf_to_id(ifc->ifp->vrf)); +	struct zebra_vrf *zvrf = vrf_info_get(ifc->ifp->vrf_id);  	if (router_id_bad_address(ifc))  		return; diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index c4654510be..d594accf4d 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -549,7 +549,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 = vrf_to_id(ifp->vrf); +					nh_vrf_id = ifp->vrf_id;  			}  			nh.vrf_id = nh_vrf_id; @@ -609,7 +609,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 = vrf_to_id(ifp->vrf); +						nh_vrf_id = ifp->vrf_id;  					else {  						flog_warn(  							EC_ZEBRA_UNKNOWN_INTERFACE, @@ -1893,7 +1893,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 = zvrf_info_lookup(ifp->vrf); +	struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);  	zns = zvrf->zns;  	memset(&req, 0, sizeof(req)); @@ -2291,7 +2291,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 = zvrf_info_lookup(ifp->vrf); +	struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);  	zns = zvrf->zns;  	zif = ifp->info; @@ -2640,7 +2640,7 @@ int netlink_neigh_read_specific_ip(struct ipaddr *ip,  {  	int ret = 0;  	struct zebra_ns *zns; -	struct zebra_vrf *zvrf = zvrf_info_lookup(vlan_if->vrf); +	struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(vlan_if->vrf_id);  	char buf[INET6_ADDRSTRLEN];  	struct zebra_dplane_info dp_info; @@ -2653,7 +2653,7 @@ int netlink_neigh_read_specific_ip(struct ipaddr *ip,  			   __PRETTY_FUNCTION__, vlan_if->name,  			   vlan_if->ifindex,  			   ipaddr2str(ip, buf, sizeof(buf)), -			   vrf_to_id(vlan_if->vrf)); +			   vlan_if->vrf_id);  	ret = netlink_request_specific_neigh_in_vlan(zns, RTM_GETNEIGH, ip,  					    vlan_if->ifindex); @@ -2718,7 +2718,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 =  zvrf_info_lookup(ifp->vrf); +	struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);  	zns = zvrf->zns;  	memset(&req, 0, sizeof(req)); diff --git a/zebra/rtadv.c b/zebra/rtadv.c index 33d0022a9d..5841c44b03 100644 --- a/zebra/rtadv.c +++ b/zebra/rtadv.c @@ -534,7 +534,7 @@ static int rtadv_timer(struct thread *thread)  static void rtadv_process_solicit(struct interface *ifp)  { -	struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf); +	struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);  	assert(zvrf);  	rtadv_send_packet(rtadv_get_socket(zvrf), ifp); @@ -884,7 +884,7 @@ static void ipv6_nd_suppress_ra_set(struct interface *ifp,  	struct zebra_vrf *zvrf;  	zif = ifp->info; -	zvrf = zvrf_info_lookup(ifp->vrf); +	zvrf = vrf_info_lookup(ifp->vrf_id);  	if (status == RA_SUPPRESS) {  		/* RA is currently enabled */ @@ -957,11 +957,11 @@ static void zebra_interface_radv_set(ZAPI_HANDLER_ARGS, int enable)  			  zebra_route_string(client->proto));  		return;  	} -	if (ifp->vrf != zvrf->vrf) { +	if (ifp->vrf_id != zvrf_id(zvrf)) {  		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), vrf_to_id(ifp->vrf)); +			zebra_route_string(client->proto), ifp->vrf_id);  		return;  	} @@ -1058,7 +1058,7 @@ DEFUN (ipv6_nd_ra_interval_msec,  	struct zebra_if *zif = ifp->info;  	struct zebra_vrf *zvrf; -	zvrf = zvrf_info_lookup(ifp->vrf); +	zvrf = vrf_info_lookup(ifp->vrf_id);  	interval = strtoul(argv[idx_number]->arg, NULL, 10);  	if ((zif->rtadv.AdvDefaultLifetime != -1 @@ -1096,7 +1096,7 @@ DEFUN (ipv6_nd_ra_interval,  	struct zebra_if *zif = ifp->info;  	struct zebra_vrf *zvrf; -	zvrf = zvrf_info_lookup(ifp->vrf); +	zvrf = vrf_info_lookup(ifp->vrf_id);  	interval = strtoul(argv[idx_number]->arg, NULL, 10);  	if ((zif->rtadv.AdvDefaultLifetime != -1 @@ -1135,7 +1135,7 @@ DEFUN (no_ipv6_nd_ra_interval,  	struct zebra_if *zif = ifp->info;  	struct zebra_vrf *zvrf = NULL; -	zvrf = zvrf_info_lookup(ifp->vrf); +	zvrf = vrf_info_lookup(ifp->vrf_id);  	if (zif->rtadv.MaxRtrAdvInterval % 1000)  		zvrf->rtadv.adv_msec_if_count--; diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c index 2f41f7133d..61200806ba 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, vrf_to_id(ifp->vrf)); +	zclient_create_header(s, ZEBRA_INTERFACE_ADD, ifp->vrf_id);  	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, vrf_to_id(ifp->vrf)); +	zclient_create_header(s, ZEBRA_INTERFACE_DELETE, ifp->vrf_id);  	zserv_encode_interface(s, ifp);  	client->ifdel_cnt++; @@ -217,8 +217,7 @@ int zsend_interface_link_params(struct zserv *client, struct interface *ifp)  		return 0;  	} -	zclient_create_header(s, ZEBRA_INTERFACE_LINK_PARAMS, -			      vrf_to_id(ifp->vrf)); +	zclient_create_header(s, ZEBRA_INTERFACE_LINK_PARAMS, ifp->vrf_id);  	/* Add Interface Index */  	stream_putl(s, ifp->ifindex); @@ -280,7 +279,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, vrf_to_id(ifp->vrf)); +	zclient_create_header(s, cmd, ifp->vrf_id);  	stream_putl(s, ifp->ifindex);  	/* Interface address flag. */ @@ -322,7 +321,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, vrf_to_id(ifp->vrf)); +	zclient_create_header(s, cmd, ifp->vrf_id);  	stream_putl(s, ifp->ifindex);  	/* Prefix information. */ @@ -430,8 +429,7 @@ 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, -			      vrf_to_id(ifp->vrf)); +	zclient_create_header(s, ZEBRA_INTERFACE_VRF_UPDATE, ifp->vrf_id);  	/* Fill in the name of the interface and its new VRF (id) */  	stream_put(s, ifp->name, INTERFACE_NAMSIZ); @@ -506,7 +504,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, vrf_to_id(ifp->vrf)); +	zclient_create_header(s, cmd, ifp->vrf_id);  	zserv_encode_interface(s, ifp);  	if (cmd == ZEBRA_INTERFACE_UP) @@ -2209,9 +2207,9 @@ static void zread_vrf_label(ZAPI_HANDLER_ARGS)  	STREAM_GETC(s, ltype);  	if (zvrf->vrf->vrf_id != VRF_DEFAULT) -		ifp = if_lookup_by_name(zvrf->vrf->name, zvrf->vrf); +		ifp = if_lookup_by_name(zvrf->vrf->name, zvrf->vrf->vrf_id);  	else -		ifp = if_lookup_by_name("lo", vrf_lookup_by_id(VRF_DEFAULT)); +		ifp = if_lookup_by_name("lo", VRF_DEFAULT);  	if (!ifp) {  		zlog_debug("Unable to find specified Interface for %s", diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c index e2128b1c89..f93562b31b 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c @@ -1920,7 +1920,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->vrf_id); +		rib_lookup_and_pushup(p, ifp->vrf_id);  	}  #endif @@ -1951,7 +1951,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->vrf_id, +			   dplane_op2str(op), ifp->ifindex, ifp->vrf_id,  			   addr_str);  	} @@ -1959,9 +1959,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->vrf_id; +	ctx->zd_vrf_id = ifp->vrf_id; -	zns = zebra_ns_lookup(ifp->vrf->vrf_id); +	zns = zebra_ns_lookup(ifp->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 636bceb980..46f1385520 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 = vrf_to_id(ifp->vrf); +		vrf_id = ifp->vrf_id;  	} else {  		vrf_id = vrf_name_to_id(vrf_str);  	} diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h index 1b87669505..972fe381cc 100644 --- a/zebra/zebra_vrf.h +++ b/zebra/zebra_vrf.h @@ -193,15 +193,6 @@ 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_vty.c b/zebra/zebra_vty.c index a38d060bd1..1f8eec9cad 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -970,9 +970,10 @@ DEFPY (show_route_table_vrf,  	afi_t afi = ipv4 ? AFI_IP : AFI_IP6;  	struct zebra_vrf *zvrf;  	struct route_table *t; -	vrf_id_t vrf_id; +	vrf_id_t vrf_id = VRF_DEFAULT; -	VRF_GET_ID(vrf_id, vrf_name, !!json); +	if (vrf_name) +		VRF_GET_ID(vrf_id, vrf_name, !!json);  	zvrf = zebra_vrf_lookup_by_id(vrf_id);  	t = zebra_router_find_table(zvrf, table, afi, SAFI_UNICAST); diff --git a/zebra/zebra_vxlan.c b/zebra/zebra_vxlan.c index c058fdce6c..4289f4b6fa 100644 --- a/zebra/zebra_vxlan.c +++ b/zebra/zebra_vxlan.c @@ -2358,7 +2358,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 = zvrf_info_lookup(zvni->vxlan_if->vrf); +	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);  	if (IS_ZEBRA_DEBUG_VXLAN)  		zlog_debug("Processing neighbors on local MAC %s %s, VNI %u", @@ -2617,7 +2617,7 @@ struct interface *zebra_get_vrr_intf_for_svi(struct interface *ifp)  	struct interface *tmp_if = NULL;  	struct zebra_if *zif = NULL; -	zvrf = zvrf_info_lookup(ifp->vrf); +	zvrf = vrf_info_lookup(ifp->vrf_id);  	assert(zvrf);  	FOR_ALL_INTERFACES (zvrf->vrf, tmp_if) { @@ -2721,10 +2721,10 @@ static int zvni_advertise_subnet(zebra_vni_t *zvni, struct interface *ifp,  		apply_mask(&p);  		if (advertise) -			ip_prefix_send_to_client(vrf_to_id(ifp->vrf), &p, +			ip_prefix_send_to_client(ifp->vrf_id, &p,  						 ZEBRA_IP_PREFIX_ROUTE_ADD);  		else -			ip_prefix_send_to_client(vrf_to_id(ifp->vrf), &p, +			ip_prefix_send_to_client(ifp->vrf_id, &p,  						 ZEBRA_IP_PREFIX_ROUTE_DEL);  	}  	return 0; @@ -2843,7 +2843,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", -			vrf_to_id(ifp->vrf), ifp->name, ifp->ifindex, zvni->vni, +			ifp->vrf_id, ifp->name, ifp->ifindex, zvni->vni,  			prefix_mac2str(&(n->emac), buf1, sizeof(buf1)),  			ipaddr2str(ip, buf2, sizeof(buf2))); @@ -3030,11 +3030,11 @@ static int zvni_local_neigh_update(zebra_vni_t *zvni,  		}  	} -	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf); +	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);  	if (!zvrf) {  		if (IS_ZEBRA_DEBUG_VXLAN) -			zlog_debug("\tUnable to find vrf for: %s", -				   zvni->vxlan_if->vrf->name); +			zlog_debug("\tUnable to find vrf for: %d", +				   zvni->vxlan_if->vrf_id);  		return -1;  	} @@ -4091,9 +4091,8 @@ 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 = vrf_to_id(vlan_if->vrf); -				zl3vni = zl3vni_from_vrf( -						vrf_to_id(vlan_if->vrf)); +				zvni->vrf_id = vlan_if->vrf_id; +				zl3vni = zl3vni_from_vrf(vlan_if->vrf_id);  				if (zl3vni)  					listnode_add_sort(zl3vni->l2vnis, zvni);  			} @@ -5258,7 +5257,7 @@ static void process_remote_macip_add(vni_t vni,  		return;  	} -	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf); +	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);  	if (!zvrf)  		return; @@ -5586,7 +5585,7 @@ static void process_remote_macip_del(vni_t vni,  	if (!mac && !n)  		return; -	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf); +	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);  	/* Ignore the delete if this mac is a gateway mac-ip */  	if (CHECK_FLAG(mac->flags, ZEBRA_MAC_LOCAL) @@ -7273,7 +7272,7 @@ int zebra_vxlan_handle_kernel_neigh_del(struct interface *ifp,  		return 0;  	} -	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf); +	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);  	if (!zvrf) {  		zlog_debug("%s: VNI %u vrf lookup failed.",  				   __PRETTY_FUNCTION__, zvni->vni); @@ -7696,11 +7695,11 @@ int zebra_vxlan_local_mac_add_update(struct interface *ifp,  		return -1;  	} -	zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf); +	zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);  	if (!zvrf) {  		if (IS_ZEBRA_DEBUG_VXLAN) -			zlog_debug("\tNo Vrf found for vrf_id: %s", -				   zvni->vxlan_if->vrf->name); +			zlog_debug("\tNo Vrf found for vrf_id: %d", +				   zvni->vxlan_if->vrf_id);  		return -1;  	} @@ -8232,10 +8231,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_to_name(ifp->vrf)); +				vrf_id_to_name(ifp->vrf_id));  		/* update the vrf information for l2-vni and inform bgp */ -		zvni->vrf_id = vrf_to_id(ifp->vrf); +		zvni->vrf_id = ifp->vrf_id;  		zvni_send_add_to_client(zvni);  		/* Install any remote neighbors for this VNI. */ @@ -8361,8 +8360,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 = vrf_to_id(vlan_if->vrf); -			zl3vni = zl3vni_from_vrf(vrf_to_id(vlan_if->vrf)); +			zvni->vrf_id = vlan_if->vrf_id; +			zl3vni = zl3vni_from_vrf(vlan_if->vrf_id);  			if (zl3vni)  				listnode_add_sort(zl3vni->l2vnis, zvni);  		} @@ -8690,8 +8689,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 = vrf_to_id(vlan_if->vrf); -			zl3vni = zl3vni_from_vrf(vrf_to_id(vlan_if->vrf)); +			zvni->vrf_id = vlan_if->vrf_id; +			zl3vni = zl3vni_from_vrf(vlan_if->vrf_id);  			if (zl3vni)  				listnode_add_sort(zl3vni->l2vnis, zvni);  		} @@ -8708,7 +8707,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_to_name(vlan_if->vrf) +				vlan_if ? vrf_id_to_name(vlan_if->vrf_id)  					: VRF_DEFAULT_NAME,  				ifp->name, ifp->ifindex, vxl->access_vlan,  				addr_buf1, addr_buf2,  | 
