]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
lwtunnel: Pass encap and encap_type attributes to lwt_parse_encap
authorDavid Ahern <dsahern@gmail.com>
Fri, 7 Jun 2019 22:38:08 +0000 (15:38 -0700)
committerDavid Ahern <dsahern@gmail.com>
Tue, 11 Jun 2019 17:30:46 +0000 (10:30 -0700)
lwt_parse_encap currently assumes the encap attribute is RTA_ENCAP
and the type is RTA_ENCAP_TYPE. Change lwt_parse_encap to take these
as input arguments for reuse by nexthop code which has the attributes
as NHA_ENCAP and NHA_ENCAP_TYPE.

Signed-off-by: David Ahern <dsahern@gmail.com>
ip/ip_common.h
ip/iproute.c
ip/iproute_lwtunnel.c

index b4aa34a70c92b9a53e82734105701a444e3a5576..df279e4f7b9af1b72ae0f0e0293c44d785f5267a 100644 (file)
@@ -134,7 +134,8 @@ int bond_parse_xstats(struct link_util *lu, int argc, char **argv);
 int bond_print_xstats(struct nlmsghdr *n, void *arg);
 
 /* iproute_lwtunnel.c */
-int lwt_parse_encap(struct rtattr *rta, size_t len, int *argcp, char ***argvp);
+int lwt_parse_encap(struct rtattr *rta, size_t len, int *argcp, char ***argvp,
+                   int encap_attr, int encap_type_attr);
 void lwt_print_encap(FILE *fp, struct rtattr *encap_type, struct rtattr *encap);
 
 /* iplink_xdp.c */
index 2b3dcc5dbd53fc2318853f40f35c87c81561e5ff..440b1fc8b413b64a97aa2bd721b2ebaa28933934 100644 (file)
@@ -997,7 +997,8 @@ static int parse_one_nh(struct nlmsghdr *n, struct rtmsg *r,
                } else if (strcmp(*argv, "encap") == 0) {
                        int old_len = rta->rta_len;
 
-                       if (lwt_parse_encap(rta, len, &argc, &argv))
+                       if (lwt_parse_encap(rta, len, &argc, &argv,
+                                           RTA_ENCAP, RTA_ENCAP_TYPE))
                                return -1;
                        rtnh->rtnh_len += rta->rta_len - old_len;
                } else if (strcmp(*argv, "as") == 0) {
@@ -1416,7 +1417,8 @@ static int iproute_modify(int cmd, unsigned int flags, int argc, char **argv)
                        rta->rta_type = RTA_ENCAP;
                        rta->rta_len = RTA_LENGTH(0);
 
-                       lwt_parse_encap(rta, sizeof(buf), &argc, &argv);
+                       lwt_parse_encap(rta, sizeof(buf), &argc, &argv,
+                                       RTA_ENCAP, RTA_ENCAP_TYPE);
 
                        if (rta->rta_len > RTA_LENGTH(0))
                                addraw_l(&req.n, 1024
index 03217b8f08f86fd2b385c6c8c64bb87936a58709..60f34a32a6e5bbd8ebf7af0e5a3b1d07cb2b2026 100644 (file)
@@ -1111,7 +1111,8 @@ static int parse_encap_bpf(struct rtattr *rta, size_t len, int *argcp,
        return 0;
 }
 
-int lwt_parse_encap(struct rtattr *rta, size_t len, int *argcp, char ***argvp)
+int lwt_parse_encap(struct rtattr *rta, size_t len, int *argcp, char ***argvp,
+                   int encap_attr, int encap_type_attr)
 {
        struct rtattr *nest;
        int argc = *argcp;
@@ -1131,7 +1132,7 @@ int lwt_parse_encap(struct rtattr *rta, size_t len, int *argcp, char ***argvp)
                exit(-1);
        }
 
-       nest = rta_nest(rta, len, RTA_ENCAP);
+       nest = rta_nest(rta, len, encap_attr);
        switch (type) {
        case LWTUNNEL_ENCAP_MPLS:
                ret = parse_encap_mpls(rta, len, &argc, &argv);
@@ -1164,7 +1165,7 @@ int lwt_parse_encap(struct rtattr *rta, size_t len, int *argcp, char ***argvp)
 
        rta_nest_end(rta, nest);
 
-       ret = rta_addattr16(rta, len, RTA_ENCAP_TYPE, type);
+       ret = rta_addattr16(rta, len, encap_type_attr, type);
 
        *argcp = argc;
        *argvp = argv;