summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2018-11-02 00:24:59 +0100
committerDonald Sharp <sharpd@cumulusnetworks.com>2018-11-02 00:24:59 +0100
commita756969dc61880d781060a9387c7bdf6da02a238 (patch)
tree8607532fc8861413d9ea72fde1060f7cda696ca0
parentlib, zebra: Encode nexthop vrf in nht updates (diff)
downloadfrr-a756969dc61880d781060a9387c7bdf6da02a238.tar.xz
frr-a756969dc61880d781060a9387c7bdf6da02a238.zip
pimd, zebra: Encode nexthop vrf in message
Encode the nexthop vrf in the message sent about mrib lookups. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
-rw-r--r--pimd/pim_zlookup.c7
-rw-r--r--pimd/pim_zlookup.h1
-rw-r--r--zebra/zapi_msg.c1
3 files changed, 7 insertions, 2 deletions
diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c
index 6e7035210..0e7486611 100644
--- a/pimd/pim_zlookup.c
+++ b/pimd/pim_zlookup.c
@@ -202,10 +202,12 @@ static int zclient_read_nexthop(struct pim_instance *pim,
}
for (i = 0; i < nexthop_num; ++i) {
+ vrf_id_t nexthop_vrf_id;
enum nexthop_types_t nexthop_type;
struct pim_neighbor *nbr;
struct prefix p;
+ nexthop_vrf_id = stream_getl(s);
nexthop_type = stream_getc(s);
if (num_ifindex >= tab_size) {
char addr_str[INET_ADDRSTRLEN];
@@ -219,6 +221,7 @@ static int zclient_read_nexthop(struct pim_instance *pim,
}
nexthop_tab[num_ifindex].protocol_distance = distance;
nexthop_tab[num_ifindex].route_metric = metric;
+ nexthop_tab[num_ifindex].vrf_id = nexthop_vrf_id;
switch (nexthop_type) {
case NEXTHOP_TYPE_IFINDEX:
nexthop_tab[num_ifindex].ifindex = stream_getl(s);
@@ -265,12 +268,12 @@ static int zclient_read_nexthop(struct pim_instance *pim,
if_lookup_by_index(
nexthop_tab[num_ifindex]
.ifindex,
- vrf_id),
+ nexthop_vrf_id),
&p);
else
nbr = pim_neighbor_find_if(if_lookup_by_index(
nexthop_tab[num_ifindex].ifindex,
- vrf_id));
+ nexthop_vrf_id));
if (nbr) {
nexthop_tab[num_ifindex].nexthop_addr.family =
AF_INET;
diff --git a/pimd/pim_zlookup.h b/pimd/pim_zlookup.h
index f8a2d59f6..09e8dcd51 100644
--- a/pimd/pim_zlookup.h
+++ b/pimd/pim_zlookup.h
@@ -27,6 +27,7 @@
#define PIM_NEXTHOP_LOOKUP_MAX (3) /* max. recursive route lookup */
struct pim_zlookup_nexthop {
+ vrf_id_t vrf_id;
struct prefix nexthop_addr;
ifindex_t ifindex;
uint32_t route_metric;
diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c
index 42b0a8151..83b4ffa83 100644
--- a/zebra/zapi_msg.c
+++ b/zebra/zapi_msg.c
@@ -118,6 +118,7 @@ static void zserv_encode_vrf(struct stream *s, struct zebra_vrf *zvrf)
static int zserv_encode_nexthop(struct stream *s, struct nexthop *nexthop)
{
+ stream_putl(s, nexthop->vrf_id);
stream_putc(s, nexthop->type);
switch (nexthop->type) {
case NEXTHOP_TYPE_IPV4: