From: Lahav Schlesinger Date: Thu, 9 Sep 2021 07:20:19 +0000 (+0300) Subject: ip: Support filter links/neighs with no master X-Git-Tag: v5.16.0~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0431e1e724881001c1c82e5db0df83c45ad94e18;p=thirdparty%2Fiproute2.git ip: Support filter links/neighs with no master Commit d3432bf10f17 ("net: Support filtering interfaces on no master") in the kernel added support for filtering interfaces/neighbours that have no master interface. This patch completes it and adds this support to iproute2: 1. ip link show nomaster 2. ip address show nomaster 3. ip neighbour {show | flush} nomaster Signed-off-by: Lahav Schlesinger Signed-off-by: David Ahern --- diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 85534aaf5..4109d8bd2 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -60,6 +60,7 @@ static void usage(void) " ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]\n" " [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]\n" " ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]\n" + " [ nomaster ]\n" " [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]\n" " [ label LABEL ] [up] [ vrf NAME ] ]\n" " ip address {showdump|restore}\n" @@ -2123,6 +2124,8 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action) if (!name_is_vrf(*argv)) invarg("Not a valid VRF name\n", *argv); filter.master = ifindex; + } else if (strcmp(*argv, "nomaster") == 0) { + filter.master = -1; } else if (strcmp(*argv, "type") == 0) { int soff; diff --git a/ip/iplink.c b/ip/iplink.c index 18b2ea25b..2fc0443ca 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -120,6 +120,7 @@ void iplink_usage(void) " [ gso_max_size BYTES ] | [ gso_max_segs PACKETS ]\n" "\n" " ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]\n" + " [nomaster]\n" "\n" " ip link xstats type TYPE [ ARGS ]\n" "\n" diff --git a/ip/ipneigh.c b/ip/ipneigh.c index b778de00b..c29325e14 100644 --- a/ip/ipneigh.c +++ b/ip/ipneigh.c @@ -54,7 +54,7 @@ static void usage(void) " [ dev DEV ] [ router ] [ extern_learn ] [ protocol PROTO ]\n" "\n" " ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]\n" - " [ vrf NAME ]\n" + " [ vrf NAME ] [ nomaster ]\n" " ip neigh get { ADDR | proxy ADDR } dev DEV\n" "\n" "STATE := { delay | failed | incomplete | noarp | none |\n" @@ -535,6 +535,8 @@ static int do_show_or_flush(int argc, char **argv, int flush) if (!name_is_vrf(*argv)) invarg("Not a valid VRF name\n", *argv); filter.master = ifindex; + } else if (strcmp(*argv, "nomaster") == 0) { + filter.master = -1; } else if (strcmp(*argv, "unused") == 0) { filter.unused_only = 1; } else if (strcmp(*argv, "nud") == 0) { diff --git a/man/man8/ip-address.8.in b/man/man8/ip-address.8.in index fe773c915..65f67e06a 100644 --- a/man/man8/ip-address.8.in +++ b/man/man8/ip-address.8.in @@ -49,7 +49,8 @@ ip-address \- protocol address management .IR TYPE " ] [ " .B vrf .IR NAME " ] [ " -.BR up " ] ]" +.BR up " ] [" +.BR nomaster " ] ]" .ti -8 .BR "ip address" " { " showdump " | " restore " }" @@ -340,6 +341,10 @@ output. .B up only list running interfaces. +.TP +.B nomaster +only list interfaces with no master. + .TP .BR dynamic " and " permanent (IPv6 only) only list addresses installed due to stateless diff --git a/man/man8/ip-link.8.in b/man/man8/ip-link.8.in index 41efc6d4e..c0cbb5e85 100644 --- a/man/man8/ip-link.8.in +++ b/man/man8/ip-link.8.in @@ -179,7 +179,8 @@ ip-link \- network device configuration .B type .IR ETYPE " ] [" .B vrf -.IR NAME " ]" +.IR NAME " ] [" +.BR nomaster " ]" .ti -8 .B ip link xstats @@ -2536,6 +2537,10 @@ interface list by comparing it with the relevant attribute in case the kernel didn't filter already. Therefore any string is accepted, but may lead to empty output. +.TP +.B nomaster +only show devices with no master + .SS ip link xstats - display extended statistics .TP diff --git a/man/man8/ip-neighbour.8 b/man/man8/ip-neighbour.8 index a27f9ef84..028629641 100644 --- a/man/man8/ip-neighbour.8 +++ b/man/man8/ip-neighbour.8 @@ -35,7 +35,8 @@ ip-neighbour \- neighbour/arp tables management. .B nud .IR STATE " ] [ " .B vrf -.IR NAME " ] " +.IR NAME " ] [" +.BR nomaster " ]" .ti -8 .B ip neigh get @@ -191,6 +192,10 @@ only list the neighbours attached to this device. .BI vrf " NAME" only list the neighbours for given VRF. +.TP +.BI nomaster +only list neighbours attached to an interface with no master. + .TP .BI proxy list neighbour proxies.