diff options
| author | Nathan Bahr <nbahr@atcorp.com> | 2024-09-24 19:57:46 +0000 |
|---|---|---|
| committer | Nathan Bahr <nbahr@atcorp.com> | 2024-12-12 13:50:31 +0000 |
| commit | 4250eae00dab6cefea3c8a38a8e113069289c54f (patch) | |
| tree | 66a839c3ce1dd350d018b7f6446f892ae0a56925 /zebra/zapi_msg.c | |
| parent | f170e9bba933ea0f4ba7d7000480a7cae97e304d (diff) | |
zebra,pimd,lib: Modify ZEBRA_NEXTHOP_LOOKUP_MRIB
Modified ZEBRA_NEXTHOP_LOOKUP_MRIB to include the SAFI from which to do the lookup.
This generalizes the API away from MRIB specifically and allows the user to decide how it should do lookups.
Rename ZEBRA_NEXTHOP_LOOKUP_MRIB to ZEBRA_NEXTHOP_LOOKUP now that it is more generalized.
This change is in preperation to remove multicast lookup mode completely from zebra.
Signed-off-by: Nathan Bahr <nbahr@atcorp.com>
Diffstat (limited to 'zebra/zapi_msg.c')
| -rw-r--r-- | zebra/zapi_msg.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c index d269cdd015..ab55998af0 100644 --- a/zebra/zapi_msg.c +++ b/zebra/zapi_msg.c @@ -640,10 +640,15 @@ int zsend_redistribute_route(int cmd, struct zserv *client, * (Otherwise we would need to implement sending NHT updates for the result of * this "URIB-MRIB-combined" table, but we only decide that here on the fly, * so it'd be rather complex to do NHT for.) + * + * 9/19/24 NEB I've updated this API to include the SAFI in the lookup + * request and response. This allows PIM to do a syncronous lookup for the + * correct table along side NHT. + * This also makes this a more generic synchronous lookup not specifically + * tied to the mrib. */ -static int zsend_nexthop_lookup_mrib(struct zserv *client, struct ipaddr *addr, - struct route_entry *re, - struct zebra_vrf *zvrf) +static int zsend_nexthop_lookup(struct zserv *client, struct ipaddr *addr, struct route_entry *re, + struct route_node *rn, struct zebra_vrf *zvrf, safi_t safi) { struct stream *s; unsigned long nump; @@ -655,14 +660,16 @@ static int zsend_nexthop_lookup_mrib(struct zserv *client, struct ipaddr *addr, stream_reset(s); /* Fill in result. */ - zclient_create_header(s, ZEBRA_NEXTHOP_LOOKUP_MRIB, zvrf_id(zvrf)); + zclient_create_header(s, ZEBRA_NEXTHOP_LOOKUP, zvrf_id(zvrf)); stream_put_ipaddr(s, addr); - if (re) { + if (re && rn) { struct nexthop_group *nhg; stream_putc(s, re->distance); stream_putl(s, re->metric); + stream_putw(s, rn->p.prefixlen); + num = 0; /* remember position for nexthop_num */ nump = stream_get_endp(s); @@ -679,6 +686,7 @@ static int zsend_nexthop_lookup_mrib(struct zserv *client, struct ipaddr *addr, } else { stream_putc(s, 0); /* distance */ stream_putl(s, 0); /* metric */ + stream_putw(s, 0); /* prefix len */ stream_putw(s, 0); /* nexthop_num */ } @@ -2315,33 +2323,37 @@ static void zread_route_del(ZAPI_HANDLER_ARGS) } } -/* MRIB Nexthop lookup for IPv4. */ -static void zread_nexthop_lookup_mrib(ZAPI_HANDLER_ARGS) +/* Syncronous Nexthop lookup. */ +static void zread_nexthop_lookup(ZAPI_HANDLER_ARGS) { struct ipaddr addr; struct route_entry *re = NULL; + struct route_node *rn = NULL; union g_addr gaddr; + afi_t afi = AFI_IP; + safi_t safi = SAFI_UNICAST; STREAM_GET_IPADDR(msg, &addr); + STREAM_GETC(msg, safi); switch (addr.ipa_type) { case IPADDR_V4: gaddr.ipv4 = addr.ipaddr_v4; - re = rib_match_multicast(AFI_IP, zvrf_id(zvrf), &gaddr, NULL); + afi = AFI_IP; break; case IPADDR_V6: gaddr.ipv6 = addr.ipaddr_v6; - re = rib_match_multicast(AFI_IP6, zvrf_id(zvrf), &gaddr, NULL); + afi = AFI_IP6; break; case IPADDR_NONE: /* ??? */ goto stream_failure; } - zsend_nexthop_lookup_mrib(client, &addr, re, zvrf); + re = rib_match(afi, safi, zvrf_id(zvrf), &gaddr, &rn); stream_failure: - return; + zsend_nexthop_lookup(client, &addr, re, rn, zvrf, safi); } /* Register zebra server router-id information. Send current router-id */ @@ -4027,7 +4039,7 @@ void (*const zserv_handlers[])(ZAPI_HANDLER_ARGS) = { [ZEBRA_REDISTRIBUTE_DELETE] = zebra_redistribute_delete, [ZEBRA_REDISTRIBUTE_DEFAULT_ADD] = zebra_redistribute_default_add, [ZEBRA_REDISTRIBUTE_DEFAULT_DELETE] = zebra_redistribute_default_delete, - [ZEBRA_NEXTHOP_LOOKUP_MRIB] = zread_nexthop_lookup_mrib, + [ZEBRA_NEXTHOP_LOOKUP] = zread_nexthop_lookup, [ZEBRA_HELLO] = zread_hello, [ZEBRA_NEXTHOP_REGISTER] = zread_rnh_register, [ZEBRA_NEXTHOP_UNREGISTER] = zread_rnh_unregister, |
