]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_zebra.c
Merge pull request #12646 from pguibert6WIND/mpls_alloc_per_nh
[mirror_frr.git] / bgpd / bgp_zebra.c
index 96b1f3e00f4c1776e9f9028b240869b7643a2838..1965cd270471553eeac051adf2def5aae65f00c5 100644 (file)
@@ -3911,3 +3911,32 @@ int bgp_zebra_srv6_manager_release_locator_chunk(const char *name)
 {
        return srv6_manager_release_locator_chunk(zclient, name);
 }
+
+void bgp_zebra_send_nexthop_label(int cmd, mpls_label_t label,
+                                 ifindex_t ifindex, vrf_id_t vrf_id,
+                                 enum lsp_types_t ltype, struct prefix *p)
+{
+       struct zapi_labels zl = {};
+       struct zapi_nexthop *znh;
+
+       zl.type = ltype;
+       zl.local_label = label;
+       zl.nexthop_num = 1;
+       znh = &zl.nexthops[0];
+       if (p->family == AF_INET)
+               IPV4_ADDR_COPY(&znh->gate.ipv4, &p->u.prefix4);
+       else
+               IPV6_ADDR_COPY(&znh->gate.ipv6, &p->u.prefix6);
+       if (ifindex == IFINDEX_INTERNAL)
+               znh->type = (p->family == AF_INET) ? NEXTHOP_TYPE_IPV4
+                                                  : NEXTHOP_TYPE_IPV6;
+       else
+               znh->type = (p->family == AF_INET) ? NEXTHOP_TYPE_IPV4_IFINDEX
+                                                  : NEXTHOP_TYPE_IPV6_IFINDEX;
+       znh->ifindex = ifindex;
+       znh->vrf_id = vrf_id;
+       znh->label_num = 0;
+
+       /* vrf_id is DEFAULT_VRF */
+       zebra_send_mpls_labels(zclient, cmd, &zl);
+}