]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip: nexthop: factor out ipnh_get_id rtnl talk into a helper
authorNikolay Aleksandrov <nikolay@nvidia.com>
Thu, 30 Sep 2021 11:38:40 +0000 (14:38 +0300)
committerDavid Ahern <dsahern@kernel.org>
Mon, 4 Oct 2021 00:24:36 +0000 (18:24 -0600)
Factor out ipnh_get_id's rtnl talk portion into a separate helper which
will be reused later to retrieve nexthops for caching.

Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
ip/ipnexthop.c

index a589febca605c6e55503db64ab344c43722b756c..454c7416e30f10209f1b48d2ae39c8398c481adc 100644 (file)
@@ -485,6 +485,25 @@ static void __print_nexthop_entry(FILE *fp, const char *jsobj,
        close_json_object();
 }
 
+static int  __ipnh_get_id(struct rtnl_handle *rthp, __u32 nh_id,
+                         struct nlmsghdr **answer)
+{
+       struct {
+               struct nlmsghdr n;
+               struct nhmsg    nhm;
+               char            buf[1024];
+       } req = {
+               .n.nlmsg_len    = NLMSG_LENGTH(sizeof(struct nhmsg)),
+               .n.nlmsg_flags  = NLM_F_REQUEST,
+               .n.nlmsg_type   = RTM_GETNEXTHOP,
+               .nhm.nh_family  = preferred_family,
+       };
+
+       addattr32(&req.n, sizeof(req), NHA_ID, nh_id);
+
+       return rtnl_talk(rthp, &req.n, answer);
+}
+
 int print_nexthop(struct nlmsghdr *n, void *arg)
 {
        struct nhmsg *nhm = NLMSG_DATA(n);
@@ -827,21 +846,9 @@ static int ipnh_modify(int cmd, unsigned int flags, int argc, char **argv)
 
 static int ipnh_get_id(__u32 id)
 {
-       struct {
-               struct nlmsghdr n;
-               struct nhmsg    nhm;
-               char            buf[1024];
-       } req = {
-               .n.nlmsg_len = NLMSG_LENGTH(sizeof(struct nhmsg)),
-               .n.nlmsg_flags = NLM_F_REQUEST,
-               .n.nlmsg_type  = RTM_GETNEXTHOP,
-               .nhm.nh_family = preferred_family,
-       };
        struct nlmsghdr *answer;
 
-       addattr32(&req.n, sizeof(req), NHA_ID, id);
-
-       if (rtnl_talk(&rth, &req.n, &answer) < 0)
+       if (__ipnh_get_id(&rth, id, &answer) < 0)
                return -2;
 
        new_json_obj(json);