mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 08:50:26 +00:00
ospfd: avoid installing SR FTNs twice
There's no need to install MPLS FTNs using the ZEBRA_ROUTE_ADD message since the ZEBRA_MPLS_LABELS_ADD message already does that (in addition to installing an MPLS LSP). Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
parent
ea6b290bf6
commit
bf54ca8213
@ -639,67 +639,18 @@ static int ospf_zebra_send_mpls_labels(int cmd, struct sr_nhlfe nhlfe)
|
|||||||
return zebra_send_mpls_labels(zclient, cmd, &zl);
|
return zebra_send_mpls_labels(zclient, cmd, &zl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Request zebra to install/remove FEC in FIB */
|
|
||||||
static int ospf_zebra_send_mpls_ftn(int cmd, struct sr_nhlfe nhlfe)
|
|
||||||
{
|
|
||||||
struct zapi_route api;
|
|
||||||
struct zapi_nexthop *api_nh;
|
|
||||||
|
|
||||||
/* Support only IPv4 */
|
|
||||||
if (nhlfe.prefv4.family != AF_INET)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
memset(&api, 0, sizeof(api));
|
|
||||||
api.vrf_id = VRF_DEFAULT;
|
|
||||||
api.type = ZEBRA_ROUTE_OSPF;
|
|
||||||
api.safi = SAFI_UNICAST;
|
|
||||||
memcpy(&api.prefix, &nhlfe.prefv4, sizeof(struct prefix_ipv4));
|
|
||||||
|
|
||||||
if (cmd == ZEBRA_ROUTE_ADD) {
|
|
||||||
/* Metric value. */
|
|
||||||
SET_FLAG(api.message, ZAPI_MESSAGE_METRIC);
|
|
||||||
api.metric = OSPF_SR_DEFAULT_METRIC;
|
|
||||||
/* Nexthop */
|
|
||||||
SET_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP);
|
|
||||||
api_nh = &api.nexthops[0];
|
|
||||||
IPV4_ADDR_COPY(&api_nh->gate.ipv4, &nhlfe.nexthop);
|
|
||||||
api_nh->type = NEXTHOP_TYPE_IPV4_IFINDEX;
|
|
||||||
api_nh->ifindex = nhlfe.ifindex;
|
|
||||||
/* MPLS labels */
|
|
||||||
SET_FLAG(api.message, ZAPI_MESSAGE_LABEL);
|
|
||||||
api_nh->labels[0] = nhlfe.label_out;
|
|
||||||
api_nh->label_num = 1;
|
|
||||||
api_nh->vrf_id = VRF_DEFAULT;
|
|
||||||
api.nexthop_num = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_DEBUG_OSPF_SR)
|
|
||||||
zlog_debug(" |- %s FEC %u for %s/%u via %u",
|
|
||||||
cmd == ZEBRA_ROUTE_ADD ? "Add" : "Delete",
|
|
||||||
nhlfe.label_out, inet_ntoa(nhlfe.prefv4.prefix),
|
|
||||||
nhlfe.prefv4.prefixlen, nhlfe.ifindex);
|
|
||||||
|
|
||||||
return zclient_route_send(cmd, zclient, &api);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add new NHLFE entry for SID */
|
/* Add new NHLFE entry for SID */
|
||||||
static inline void add_sid_nhlfe(struct sr_nhlfe nhlfe)
|
static inline void add_sid_nhlfe(struct sr_nhlfe nhlfe)
|
||||||
{
|
{
|
||||||
if ((nhlfe.label_in != 0) && (nhlfe.label_out != 0)) {
|
if ((nhlfe.label_in != 0) && (nhlfe.label_out != 0))
|
||||||
ospf_zebra_send_mpls_labels(ZEBRA_MPLS_LABELS_ADD, nhlfe);
|
ospf_zebra_send_mpls_labels(ZEBRA_MPLS_LABELS_ADD, nhlfe);
|
||||||
if (nhlfe.label_out != MPLS_LABEL_IMPLICIT_NULL)
|
|
||||||
ospf_zebra_send_mpls_ftn(ZEBRA_ROUTE_ADD, nhlfe);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove NHLFE entry for SID */
|
/* Remove NHLFE entry for SID */
|
||||||
static inline void del_sid_nhlfe(struct sr_nhlfe nhlfe)
|
static inline void del_sid_nhlfe(struct sr_nhlfe nhlfe)
|
||||||
{
|
{
|
||||||
if ((nhlfe.label_in != 0) && (nhlfe.label_out != 0)) {
|
if ((nhlfe.label_in != 0) && (nhlfe.label_out != 0))
|
||||||
ospf_zebra_send_mpls_labels(ZEBRA_MPLS_LABELS_DELETE, nhlfe);
|
ospf_zebra_send_mpls_labels(ZEBRA_MPLS_LABELS_DELETE, nhlfe);
|
||||||
if (nhlfe.label_out != MPLS_LABEL_IMPLICIT_NULL)
|
|
||||||
ospf_zebra_send_mpls_ftn(ZEBRA_ROUTE_DELETE, nhlfe);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update NHLFE entry for SID */
|
/* Update NHLFE entry for SID */
|
||||||
|
Loading…
Reference in New Issue
Block a user