summaryrefslogtreecommitdiff
path: root/zebra/rt_netlink.c
diff options
context:
space:
mode:
authorRafael Zalamena <rzalamena@opensourcerouting.org>2019-12-04 10:37:40 -0300
committerRafael Zalamena <rzalamena@opensourcerouting.org>2020-04-14 11:44:39 -0300
commitf78fe8f3d60d23f96adf35f589dd7f257a4a40f4 (patch)
tree1d662e1bae4c06e711ccc632c078354938129bc7 /zebra/rt_netlink.c
parentb9c875150b99094a7bce86ea50332496f763d3d1 (diff)
zebra: export netlink function and change return
Instead of retuning always `0`, lets return the amount of used bytes for the message. This will be used by the new FPM interface to know how many bytes we must reserve for the output buffer. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
Diffstat (limited to 'zebra/rt_netlink.c')
-rw-r--r--zebra/rt_netlink.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
index 43f12145f4..cda6904517 100644
--- a/zebra/rt_netlink.c
+++ b/zebra/rt_netlink.c
@@ -1531,8 +1531,8 @@ static bool nexthop_set_src(const struct nexthop *nexthop, int family,
/*
* Routing table change via netlink interface, using a dataplane context object
*/
-static int netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx,
- uint8_t *data, size_t datalen)
+ssize_t netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx,
+ uint8_t *data, size_t datalen)
{
int bytelen;
struct nexthop *nexthop = NULL;
@@ -1636,7 +1636,7 @@ static int netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx,
* it.
*/
if (cmd == RTM_DELROUTE)
- return 0;
+ return req->n.nlmsg_len;
if (dplane_ctx_get_mtu(ctx) || dplane_ctx_get_nh_mtu(ctx)) {
char buf[NL_PKT_BUF_SIZE];
@@ -1680,7 +1680,8 @@ static int netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx,
addattr_l(&req->n, datalen, RTA_PREFSRC,
&src.ipv6, bytelen);
}
- return 0;
+
+ return req->n.nlmsg_len;
}
/* Count overall nexthops so we can decide whether to use singlepath
@@ -1719,7 +1720,7 @@ static int netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx,
req->r.rtm_type = RTN_BLACKHOLE;
break;
}
- return 0;
+ return req->n.nlmsg_len;
}
if (CHECK_FLAG(nexthop->flags,
NEXTHOP_FLAG_RECURSIVE)) {
@@ -1818,7 +1819,7 @@ static int netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx,
zlog_debug("%s: No useful nexthop.", __func__);
}
- return 0;
+ return req->n.nlmsg_len;
}
int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *in)