summaryrefslogtreecommitdiff
path: root/zebra
diff options
context:
space:
mode:
authorRuss White <russ@riw.us>2025-01-28 12:23:06 -0500
committerGitHub <noreply@github.com>2025-01-28 12:23:06 -0500
commitbd82864d03b12723d96bd2e10a2ad9b0de82f6f9 (patch)
treeaa7d4969adacf6cb04283757a79908a465e3f416 /zebra
parente82788de4665b5b6a9bc8a9e5af9224d90984a50 (diff)
parent91540d2e316ecd391622752096e5099b71d91497 (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.c8
-rw-r--r--zebra/zapi_msg.c18
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);