]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
ip link: Allow to filter devices by master dev
authorVadim Kochan <vadim4j@gmail.com>
Sat, 29 Nov 2014 19:27:41 +0000 (11:27 -0800)
committerStephen Hemminger <shemming@brocade.com>
Sat, 29 Nov 2014 19:27:41 +0000 (11:27 -0800)
Added 'master' option to 'ip link show' command
to filter devices by master dev.

Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
ip/ipaddress.c
ip/iplink.c
man/man8/ip-link.8.in

index c95aa6d5bf6fb2cfcd51cf9f440d3b7b971c0c32..4d993243d5f8070d36965ce036cdd1129133453e 100644 (file)
@@ -56,6 +56,7 @@ static struct
        int flushp;
        int flushe;
        int group;
+       int master;
 } filter;
 
 static int do_link;
@@ -542,6 +543,14 @@ int print_linkinfo(const struct sockaddr_nl *who,
                        return -1;
        }
 
+       if (tb[IFLA_MASTER]) {
+               int master = *(int*)RTA_DATA(tb[IFLA_MASTER]);
+               if (filter.master > 0 && master != filter.master)
+                       return -1;
+       }
+       else if (filter.master > 0)
+               return -1;
+
        if (n->nlmsg_type == RTM_DELLINK)
                fprintf(fp, "Deleted ");
 
@@ -1277,6 +1286,13 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action)
                        NEXT_ARG();
                        if (rtnl_group_a2n(&filter.group, *argv))
                                invarg("Invalid \"group\" value\n", *argv);
+               } else if (strcmp(*argv, "master") == 0) {
+                       int ifindex;
+                       NEXT_ARG();
+                       ifindex = ll_name_to_index(*argv);
+                       if (!ifindex)
+                               invarg("Device does not exist\n", *argv);
+                       filter.master = ifindex;
                } else {
                        if (strcmp(*argv, "dev") == 0) {
                                NEXT_ARG();
index 43b26f4cea08c535fbe57c2e61033f6786904e11..ce6eb3e1f7c906678c79e9f3be30eaf11efbc479 100644 (file)
@@ -82,7 +82,7 @@ void iplink_usage(void)
        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");
+       fprintf(stderr, "       ip link show [ DEVICE | group GROUP ] [up] [master DEV]\n");
 
        if (iplink_have_newlink()) {
                fprintf(stderr, "       ip link help [ TYPE ]\n");
index a05633faf89241cfafb82c3e525cc8ca6ad536c0..ea23a726fe1cb64caef85e15a033980dc395de98 100644 (file)
@@ -145,9 +145,10 @@ ip-link \- network device configuration
 .B ip link show
 .RI "[ " DEVICE " | "
 .B group
-.IR GROUP " |"
-.B up
-]
+.IR GROUP " | "
+.BR up " | "
+.B master
+.IR DEVICE " ]"
 
 .SH "DESCRIPTION"
 .SS ip link add - add virtual link
@@ -678,6 +679,11 @@ specifies what group of devices to show.
 .B up
 only display running interfaces.
 
+.TP
+.BI master " DEVICE "
+.I DEVICE
+specifies the master device which enslaves devices to show.
+
 The show command has additional formatting options:
 
 .TP