diff options
author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-06-24 01:46:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-24 01:46:39 +0200 |
commit | a36898e7555036c786f7aa944b848966b45d5897 (patch) | |
tree | fb34f0ca1836e09a8e89e73ebd6696a08b89b631 | |
parent | Merge pull request #3775 from pguibert6WIND/ospf_missing_interface_handling_2 (diff) | |
download | frr-a36898e7555036c786f7aa944b848966b45d5897.tar.xz frr-a36898e7555036c786f7aa944b848966b45d5897.zip |
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 36adf118a..0eeb9b2bb 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 736dedcf7..6ad004a4a 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 efbdc8b4f..08a70abc1 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 a634d923d..3e2ace6ea 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 ca88a38df..8e18ed752 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 5d1d430e9..c0f2dfca1 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 8a96d46cd..3ca209676 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 7727fd96c..93eed9452 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 10f8df6f1..f080ba487 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 5040386e8..0a74e8626 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 d2733ebaf..0334b98a1 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 fa3c5398b..ffc6ee046 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 a56c2836d..4ea6c2c60 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 94d92f67e..e9b4f5a58 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 a01911ca4..8f1ba14fe 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 91a28eaa4..946bbf8cc 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 114a56c95..692c84ad0 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 bbc9247b0..40c612381 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 6516129c5..ce1604a5b 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 52ec97e34..e68363663 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 6fee49d12..631465fb2 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 33d2c82d0..c178e367d 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 de51ec226..073a51561 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 a46febaec..cbea033b7 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 d71b4bf64..c6617d9d2 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 6ccc6ed19..7b8f04569 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 954b5dee7..b1f7cfd2c 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 4ddf21951..442b22e06 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 eef36288d..4cebc43a0 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 3a892f33b..80561f350 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 b09af7e08..85d83c61d 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 a859bcc43..e0ff0430f 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 520e19a71..49ed13a2c 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 874d81516..0604e272c 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 34d8b3121..3314892e7 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 01d6db078..cd6f95658 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 e9fdad6ba..5f9ecad69 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 6ffeb2ca4..c6da00418 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 bd4f9b66a..bba221c2c 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 6ce566262..8bec25635 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 1ed75bfa5..8b539a904 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 4b6000c94..df8d4bfe1 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 34bdd54b8..719cf05db 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 628be6563..8202e076a 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 be1191bac..156ce5072 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 7b3332e58..b13f1170c 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 b5a8860c4..569ffbab4 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 c4654510b..d594accf4 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 33d0022a9..5841c44b0 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 2f41f7133..61200806b 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 e2128b1c8..f93562b31 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 636bceb98..46f138552 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 1b8766950..972fe381c 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 a38d060bd..1f8eec9ca 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 c058fdce6..4289f4b6f 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, |