mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 07:56:29 +00:00
zebra: Be consistent in how we call rib_add( and rib_delete( with tableid
The rib_add( and rib_delete( functions are there to allow kernel interactions with the creation of routes. Fixup the code to be consistent in the passup of the tableid. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
b1ad7351a5
commit
56e7825479
@ -209,8 +209,16 @@ void connected_up(struct interface *ifp, struct connected *ifc)
|
|||||||
.ifindex = ifp->ifindex,
|
.ifindex = ifp->ifindex,
|
||||||
.vrf_id = ifp->vrf_id,
|
.vrf_id = ifp->vrf_id,
|
||||||
};
|
};
|
||||||
|
struct zebra_vrf *zvrf;
|
||||||
uint32_t metric;
|
uint32_t metric;
|
||||||
|
|
||||||
|
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_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL))
|
if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -246,11 +254,11 @@ void connected_up(struct interface *ifp, struct connected *ifc)
|
|||||||
|
|
||||||
metric = (ifc->metric < (uint32_t)METRIC_MAX) ?
|
metric = (ifc->metric < (uint32_t)METRIC_MAX) ?
|
||||||
ifc->metric : ifp->metric;
|
ifc->metric : ifp->metric;
|
||||||
rib_add(afi, SAFI_UNICAST, ifp->vrf_id, ZEBRA_ROUTE_CONNECT, 0, 0, &p,
|
rib_add(afi, SAFI_UNICAST, zvrf->vrf->vrf_id, ZEBRA_ROUTE_CONNECT,
|
||||||
NULL, &nh, RT_TABLE_MAIN, metric, 0, 0, 0);
|
0, 0, &p, NULL, &nh, zvrf->table_id, metric, 0, 0, 0);
|
||||||
|
|
||||||
rib_add(afi, SAFI_MULTICAST, ifp->vrf_id, ZEBRA_ROUTE_CONNECT, 0, 0, &p,
|
rib_add(afi, SAFI_MULTICAST, zvrf->vrf->vrf_id, ZEBRA_ROUTE_CONNECT,
|
||||||
NULL, &nh, RT_TABLE_MAIN, metric, 0, 0, 0);
|
0, 0, &p, NULL, &nh, zvrf->table_id, metric, 0, 0, 0);
|
||||||
|
|
||||||
if (IS_ZEBRA_DEBUG_RIB_DETAILED) {
|
if (IS_ZEBRA_DEBUG_RIB_DETAILED) {
|
||||||
char buf[PREFIX_STRLEN];
|
char buf[PREFIX_STRLEN];
|
||||||
@ -260,19 +268,19 @@ void connected_up(struct interface *ifp, struct connected *ifc)
|
|||||||
ifp->vrf_id, ifp->name,
|
ifp->vrf_id, ifp->name,
|
||||||
prefix2str(&p, buf, sizeof(buf)));
|
prefix2str(&p, buf, sizeof(buf)));
|
||||||
}
|
}
|
||||||
rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE);
|
rib_update(zvrf->vrf->vrf_id, RIB_UPDATE_IF_CHANGE);
|
||||||
|
|
||||||
/* Schedule LSP forwarding entries for processing, if appropriate. */
|
/* Schedule LSP forwarding entries for processing, if appropriate. */
|
||||||
if (ifp->vrf_id == VRF_DEFAULT) {
|
if (zvrf->vrf->vrf_id == VRF_DEFAULT) {
|
||||||
if (IS_ZEBRA_DEBUG_MPLS) {
|
if (IS_ZEBRA_DEBUG_MPLS) {
|
||||||
char buf[PREFIX_STRLEN];
|
char buf[PREFIX_STRLEN];
|
||||||
|
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%u: IF %s IP %s address add/up, scheduling MPLS processing",
|
"%u: IF %s IP %s address add/up, scheduling MPLS processing",
|
||||||
ifp->vrf_id, ifp->name,
|
zvrf->vrf->vrf_id, ifp->name,
|
||||||
prefix2str(&p, buf, sizeof(buf)));
|
prefix2str(&p, buf, sizeof(buf)));
|
||||||
}
|
}
|
||||||
mpls_mark_lsps_for_processing(vrf_info_lookup(ifp->vrf_id), &p);
|
mpls_mark_lsps_for_processing(zvrf, &p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -377,6 +385,15 @@ void connected_down(struct interface *ifp, struct connected *ifc)
|
|||||||
.ifindex = ifp->ifindex,
|
.ifindex = ifp->ifindex,
|
||||||
.vrf_id = ifp->vrf_id,
|
.vrf_id = ifp->vrf_id,
|
||||||
};
|
};
|
||||||
|
struct zebra_vrf *zvrf;
|
||||||
|
|
||||||
|
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_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL))
|
if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL))
|
||||||
return;
|
return;
|
||||||
@ -410,34 +427,34 @@ void connected_down(struct interface *ifp, struct connected *ifc)
|
|||||||
* Same logic as for connected_up(): push the changes into the
|
* Same logic as for connected_up(): push the changes into the
|
||||||
* head.
|
* head.
|
||||||
*/
|
*/
|
||||||
rib_delete(afi, SAFI_UNICAST, ifp->vrf_id, ZEBRA_ROUTE_CONNECT, 0, 0,
|
rib_delete(afi, SAFI_UNICAST, zvrf->vrf->vrf_id, ZEBRA_ROUTE_CONNECT,
|
||||||
&p, NULL, &nh, 0, 0, 0, false);
|
0, 0, &p, NULL, &nh, zvrf->table_id, 0, 0, false);
|
||||||
|
|
||||||
rib_delete(afi, SAFI_MULTICAST, ifp->vrf_id, ZEBRA_ROUTE_CONNECT, 0, 0,
|
rib_delete(afi, SAFI_MULTICAST, zvrf->vrf->vrf_id, ZEBRA_ROUTE_CONNECT,
|
||||||
&p, NULL, &nh, 0, 0, 0, false);
|
0, 0, &p, NULL, &nh, zvrf->table_id, 0, 0, false);
|
||||||
|
|
||||||
if (IS_ZEBRA_DEBUG_RIB_DETAILED) {
|
if (IS_ZEBRA_DEBUG_RIB_DETAILED) {
|
||||||
char buf[PREFIX_STRLEN];
|
char buf[PREFIX_STRLEN];
|
||||||
|
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%u: IF %s IP %s address down, scheduling RIB processing",
|
"%u: IF %s IP %s address down, scheduling RIB processing",
|
||||||
ifp->vrf_id, ifp->name,
|
zvrf->vrf->vrf_id, ifp->name,
|
||||||
prefix2str(&p, buf, sizeof(buf)));
|
prefix2str(&p, buf, sizeof(buf)));
|
||||||
}
|
}
|
||||||
|
|
||||||
rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE);
|
rib_update(zvrf->vrf->vrf_id, RIB_UPDATE_IF_CHANGE);
|
||||||
|
|
||||||
/* Schedule LSP forwarding entries for processing, if appropriate. */
|
/* Schedule LSP forwarding entries for processing, if appropriate. */
|
||||||
if (ifp->vrf_id == VRF_DEFAULT) {
|
if (zvrf->vrf->vrf_id == VRF_DEFAULT) {
|
||||||
if (IS_ZEBRA_DEBUG_MPLS) {
|
if (IS_ZEBRA_DEBUG_MPLS) {
|
||||||
char buf[PREFIX_STRLEN];
|
char buf[PREFIX_STRLEN];
|
||||||
|
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%u: IF %s IP %s address down, scheduling MPLS processing",
|
"%u: IF %s IP %s address down, scheduling MPLS processing",
|
||||||
ifp->vrf_id, ifp->name,
|
zvrf->vrf->vrf_id, ifp->name,
|
||||||
prefix2str(&p, buf, sizeof(buf)));
|
prefix2str(&p, buf, sizeof(buf)));
|
||||||
}
|
}
|
||||||
mpls_mark_lsps_for_processing(vrf_info_lookup(ifp->vrf_id), &p);
|
mpls_mark_lsps_for_processing(zvrf, &p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1138,14 +1138,16 @@ void rtm_read(struct rt_msghdr *rtm)
|
|||||||
*/
|
*/
|
||||||
if (rtm->rtm_type == RTM_CHANGE)
|
if (rtm->rtm_type == RTM_CHANGE)
|
||||||
rib_delete(afi, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL,
|
rib_delete(afi, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL,
|
||||||
0, zebra_flags, &p, NULL, NULL, 0, 0, 0, true);
|
0, zebra_flags, &p, NULL, NULL, RT_TABLE_MAIN,
|
||||||
|
0, 0, true);
|
||||||
if (rtm->rtm_type == RTM_GET || rtm->rtm_type == RTM_ADD
|
if (rtm->rtm_type == RTM_GET || rtm->rtm_type == RTM_ADD
|
||||||
|| rtm->rtm_type == RTM_CHANGE)
|
|| rtm->rtm_type == RTM_CHANGE)
|
||||||
rib_add(afi, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL, 0,
|
rib_add(afi, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL, 0,
|
||||||
zebra_flags, &p, NULL, &nh, 0, 0, 0, 0, 0);
|
zebra_flags, &p, NULL, &nh, RT_TABLE_MAIN, 0, 0, 0, 0);
|
||||||
else
|
else
|
||||||
rib_delete(afi, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL,
|
rib_delete(afi, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL,
|
||||||
0, zebra_flags, &p, NULL, &nh, 0, 0, 0, true);
|
0, zebra_flags, &p, NULL, &nh, RT_TABLE_MAIN,
|
||||||
|
0, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Interface function for the kernel routing table updates. Support
|
/* Interface function for the kernel routing table updates. Support
|
||||||
|
Loading…
Reference in New Issue
Block a user