diff options
| author | Russ White <russ@riw.us> | 2025-01-28 12:23:06 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-28 12:23:06 -0500 | 
| commit | bd82864d03b12723d96bd2e10a2ad9b0de82f6f9 (patch) | |
| tree | aa7d4969adacf6cb04283757a79908a465e3f416 /zebra | |
| parent | e82788de4665b5b6a9bc8a9e5af9224d90984a50 (diff) | |
| parent | 91540d2e316ecd391622752096e5099b71d91497 (diff) | |
Merge pull request #17941 from opensourcerouting/fix-dst-src
static: fix botched staticd YANG conversion for dst-src
Diffstat (limited to 'zebra')
| -rw-r--r-- | zebra/rt_netlink.c | 8 | ||||
| -rw-r--r-- | zebra/zapi_msg.c | 18 | 
2 files changed, 19 insertions, 7 deletions
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index b32882e858..d696b19859 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -2588,10 +2588,10 @@ ssize_t netlink_route_multipath_msg_encode(int cmd, struct zebra_dplane_ctx *ctx  		}  	} -	if ((!fpm && kernel_nexthops_supported() -	     && (!proto_nexthops_only() -		 || is_proto_nhg(dplane_ctx_get_nhe_id(ctx), 0))) -	    || (fpm && force_nhg)) { +	if ((!fpm && kernel_nexthops_supported() && +	     (!proto_nexthops_only() || is_proto_nhg(dplane_ctx_get_nhe_id(ctx), 0)) && +	     (!src_p || !src_p->prefixlen)) || +	    (fpm && force_nhg)) {  		/* Kernel supports nexthop objects */  		if (IS_ZEBRA_DEBUG_KERNEL)  			zlog_debug("%s: %pFX nhg_id is %u", __func__, p, diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c index f32d8ea6c6..e9d554ba3d 100644 --- a/zebra/zapi_msg.c +++ b/zebra/zapi_msg.c @@ -740,6 +740,10 @@ static int route_notify_internal(const struct route_node *rn, int type,  	struct zserv *client;  	struct stream *s;  	uint8_t blen; +	const struct prefix *p, *src_p; +	struct prefix src_dummy = {}; + +	srcdest_rnode_prefixes(rn, &p, &src_p);  	client = zserv_find_client(type, instance);  	if (!client || !client->notify_owner) { @@ -771,9 +775,17 @@ static int route_notify_internal(const struct route_node *rn, int type,  	stream_putc(s, rn->p.family); -	blen = prefix_blen(&rn->p); -	stream_putc(s, rn->p.prefixlen); -	stream_put(s, &rn->p.u.prefix, blen); +	blen = prefix_blen(p); +	stream_putc(s, p->prefixlen); +	stream_put(s, &p->u.prefix, blen); + +	if (!src_p) { +		src_dummy.family = p->family; +		src_p = &src_dummy; +	} +	blen = prefix_blen(src_p); +	stream_putc(s, src_p->prefixlen); +	stream_put(s, &src_p->u.prefix, blen);  	stream_putl(s, table_id);  | 
