]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
iproute2: allow to ipv6 set address generation mode
authorJiri Pirko <jiri@resnulli.us>
Fri, 11 Jul 2014 19:11:46 +0000 (21:11 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 4 Aug 2014 19:41:14 +0000 (12:41 -0700)
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
ip/iplink.c

index 18fb1ccd779a8f4305d8d82b2d58f3d83fae565a..1a907d998a87f3730a68cd8de8baa6fd544d0113 100644 (file)
@@ -81,6 +81,7 @@ void iplink_usage(void)
        fprintf(stderr, "                                  [ state { auto | enable | disable} ] ]\n");
        fprintf(stderr, "                         [ master DEVICE ]\n");
        fprintf(stderr, "                         [ nomaster ]\n");
+       fprintf(stderr, "                         [ addrgenmode { eui64 | none } ]\n");
        fprintf(stderr, "       ip link show [ DEVICE | group GROUP ] [up]\n");
 
        if (iplink_have_newlink()) {
@@ -161,6 +162,15 @@ static int get_link_mode(const char *mode)
        return -1;
 }
 
+static int get_addr_gen_mode(const char *mode)
+{
+       if (strcasecmp(mode, "eui64") == 0)
+               return IN6_ADDR_GEN_MODE_EUI64;
+       if (strcasecmp(mode, "none") == 0)
+               return IN6_ADDR_GEN_MODE_NONE;
+       return -1;
+}
+
 #if IPLINK_IOCTL_COMPAT
 static int have_rtnl_newlink = -1;
 
@@ -561,6 +571,18 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
                                invarg("Invalid \"numrxqueues\" value\n", *argv);
                        addattr_l(&req->n, sizeof(*req), IFLA_NUM_RX_QUEUES,
                                  &numrxqueues, 4);
+               } else if (matches(*argv, "addrgenmode") == 0) {
+                       struct rtattr *afs, *afs6;
+                       int mode;
+                       NEXT_ARG();
+                       mode = get_addr_gen_mode(*argv);
+                       if (mode < 0)
+                               invarg("Invalid address generation mode\n", *argv);
+                       afs = addattr_nest(&req->n, sizeof(*req), IFLA_AF_SPEC);
+                       afs6 = addattr_nest(&req->n, sizeof(*req), AF_INET6);
+                       addattr8(&req->n, sizeof(*req), IFLA_INET6_ADDR_GEN_MODE, mode);
+                       addattr_nest_end(&req->n, afs6);
+                       addattr_nest_end(&req->n, afs);
                } else {
                        if (strcmp(*argv, "dev") == 0) {
                                NEXT_ARG();