mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 23:58:44 +00:00
Merge pull request #615 from dslicenc/cm16531
zebra: add bgp unnumbered labeled-unicast to zserv
This commit is contained in:
commit
cf4e348abb
@ -1397,7 +1397,7 @@ zread_ipv4_route_ipv6_nexthop_add (struct zserv *client, u_short length, struct
|
|||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
struct stream *s;
|
struct stream *s;
|
||||||
struct in6_addr nexthop;
|
struct in6_addr nhop_addr;
|
||||||
struct rib *rib;
|
struct rib *rib;
|
||||||
u_char message;
|
u_char message;
|
||||||
u_char nexthop_num;
|
u_char nexthop_num;
|
||||||
@ -1407,11 +1407,14 @@ zread_ipv4_route_ipv6_nexthop_add (struct zserv *client, u_short length, struct
|
|||||||
static struct in6_addr nexthops[MULTIPATH_NUM];
|
static struct in6_addr nexthops[MULTIPATH_NUM];
|
||||||
static unsigned int ifindices[MULTIPATH_NUM];
|
static unsigned int ifindices[MULTIPATH_NUM];
|
||||||
int ret;
|
int ret;
|
||||||
|
static mpls_label_t labels[MULTIPATH_NUM];
|
||||||
|
mpls_label_t label;
|
||||||
|
struct nexthop *nexthop;
|
||||||
|
|
||||||
/* Get input stream. */
|
/* Get input stream. */
|
||||||
s = client->ibuf;
|
s = client->ibuf;
|
||||||
|
|
||||||
memset (&nexthop, 0, sizeof (struct in6_addr));
|
memset (&nhop_addr, 0, sizeof (struct in6_addr));
|
||||||
|
|
||||||
/* Allocate new rib. */
|
/* Allocate new rib. */
|
||||||
rib = XCALLOC (MTYPE_RIB, sizeof (struct rib));
|
rib = XCALLOC (MTYPE_RIB, sizeof (struct rib));
|
||||||
@ -1452,9 +1455,17 @@ zread_ipv4_route_ipv6_nexthop_add (struct zserv *client, u_short length, struct
|
|||||||
switch (nexthop_type)
|
switch (nexthop_type)
|
||||||
{
|
{
|
||||||
case NEXTHOP_TYPE_IPV6:
|
case NEXTHOP_TYPE_IPV6:
|
||||||
stream_get (&nexthop, s, 16);
|
stream_get (&nhop_addr, s, 16);
|
||||||
if (nh_count < multipath_num) {
|
if (nh_count < MULTIPATH_NUM)
|
||||||
nexthops[nh_count++] = nexthop;
|
{
|
||||||
|
/* For labeled-unicast, each nexthop is followed by label. */
|
||||||
|
if (CHECK_FLAG (message, ZAPI_MESSAGE_LABEL))
|
||||||
|
{
|
||||||
|
label = (mpls_label_t)stream_getl (s);
|
||||||
|
labels[nh_count] = label;
|
||||||
|
}
|
||||||
|
nexthops[nh_count] = nhop_addr;
|
||||||
|
nh_count++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NEXTHOP_TYPE_IFINDEX:
|
case NEXTHOP_TYPE_IFINDEX:
|
||||||
@ -1472,20 +1483,20 @@ zread_ipv4_route_ipv6_nexthop_add (struct zserv *client, u_short length, struct
|
|||||||
for (i = 0; i < max_nh_if; i++)
|
for (i = 0; i < max_nh_if; i++)
|
||||||
{
|
{
|
||||||
if ((i < nh_count) && !IN6_IS_ADDR_UNSPECIFIED (&nexthops[i])) {
|
if ((i < nh_count) && !IN6_IS_ADDR_UNSPECIFIED (&nexthops[i])) {
|
||||||
if ((i < if_count) && ifindices[i]) {
|
if ((i < if_count) && ifindices[i])
|
||||||
rib_nexthop_ipv6_ifindex_add (rib, &nexthops[i], ifindices[i]);
|
nexthop = rib_nexthop_ipv6_ifindex_add (rib, &nexthops[i], ifindices[i]);
|
||||||
|
else
|
||||||
|
nexthop = rib_nexthop_ipv6_add (rib, &nexthops[i]);
|
||||||
|
|
||||||
|
if (CHECK_FLAG (message, ZAPI_MESSAGE_LABEL))
|
||||||
|
nexthop_add_labels (nexthop, nexthop->nh_label_type, 1, &labels[i]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rib_nexthop_ipv6_add (rib, &nexthops[i]);
|
if ((i < if_count) && ifindices[i])
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ((i < if_count) && ifindices[i]) {
|
|
||||||
rib_nexthop_ifindex_add (rib, ifindices[i]);
|
rib_nexthop_ifindex_add (rib, ifindices[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Distance. */
|
/* Distance. */
|
||||||
if (CHECK_FLAG (message, ZAPI_MESSAGE_DISTANCE))
|
if (CHECK_FLAG (message, ZAPI_MESSAGE_DISTANCE))
|
||||||
|
Loading…
Reference in New Issue
Block a user