Commit 712249d8 authored by Vadim Kochan's avatar Vadim Kochan Committed by Stephen Hemminger

ip link: Show devices by type

Added new option 'type' to 'ip link show'
command which allows to filter devices by type:

    ip link show type bridge
    ip link show type vlan
Signed-off-by: default avatarVadim Kochan <vadim4j@gmail.com>
parent b5f39b25
...@@ -57,6 +57,7 @@ static struct ...@@ -57,6 +57,7 @@ static struct
int flushe; int flushe;
int group; int group;
int master; int master;
char *kind;
} filter; } filter;
static int do_link; static int do_link;
...@@ -189,6 +190,18 @@ static void print_linkmode(FILE *f, struct rtattr *tb) ...@@ -189,6 +190,18 @@ static void print_linkmode(FILE *f, struct rtattr *tb)
fprintf(f, "mode %s ", link_modes[mode]); fprintf(f, "mode %s ", link_modes[mode]);
} }
static char *parse_link_kind(struct rtattr *tb)
{
struct rtattr *linkinfo[IFLA_INFO_MAX+1];
parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb);
if (linkinfo[IFLA_INFO_KIND])
return RTA_DATA(linkinfo[IFLA_INFO_KIND]);
return "";
}
static void print_linktype(FILE *fp, struct rtattr *tb) static void print_linktype(FILE *fp, struct rtattr *tb)
{ {
struct rtattr *linkinfo[IFLA_INFO_MAX+1]; struct rtattr *linkinfo[IFLA_INFO_MAX+1];
...@@ -551,6 +564,17 @@ int print_linkinfo(const struct sockaddr_nl *who, ...@@ -551,6 +564,17 @@ int print_linkinfo(const struct sockaddr_nl *who,
else if (filter.master > 0) else if (filter.master > 0)
return -1; return -1;
if (filter.kind) {
if (tb[IFLA_LINKINFO]) {
char *kind = parse_link_kind(tb[IFLA_LINKINFO]);
if (strcmp(kind, filter.kind))
return -1;
} else {
return -1;
}
}
if (n->nlmsg_type == RTM_DELLINK) if (n->nlmsg_type == RTM_DELLINK)
fprintf(fp, "Deleted "); fprintf(fp, "Deleted ");
...@@ -1302,6 +1326,9 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action) ...@@ -1302,6 +1326,9 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action)
if (!ifindex) if (!ifindex)
invarg("Device does not exist\n", *argv); invarg("Device does not exist\n", *argv);
filter.master = ifindex; filter.master = ifindex;
} else if (do_link && strcmp(*argv, "type") == 0) {
NEXT_ARG();
filter.kind = *argv;
} else { } else {
if (strcmp(*argv, "dev") == 0) { if (strcmp(*argv, "dev") == 0) {
NEXT_ARG(); NEXT_ARG();
......
...@@ -82,7 +82,7 @@ void iplink_usage(void) ...@@ -82,7 +82,7 @@ void iplink_usage(void)
fprintf(stderr, " [ master DEVICE ]\n"); fprintf(stderr, " [ master DEVICE ]\n");
fprintf(stderr, " [ nomaster ]\n"); fprintf(stderr, " [ nomaster ]\n");
fprintf(stderr, " [ addrgenmode { eui64 | none } ]\n"); fprintf(stderr, " [ addrgenmode { eui64 | none } ]\n");
fprintf(stderr, " ip link show [ DEVICE | group GROUP ] [up] [master DEV]\n"); fprintf(stderr, " ip link show [ DEVICE | group GROUP ] [up] [master DEV] [type TYPE]\n");
if (iplink_have_newlink()) { if (iplink_have_newlink()) {
fprintf(stderr, " ip link help [ TYPE ]\n"); fprintf(stderr, " ip link help [ TYPE ]\n");
......
...@@ -148,7 +148,9 @@ ip-link \- network device configuration ...@@ -148,7 +148,9 @@ ip-link \- network device configuration
.IR GROUP " | " .IR GROUP " | "
.BR up " | " .BR up " | "
.B master .B master
.IR DEVICE " ]" .IR DEVICE " | "
.B type
.IR TYPE " ]"
.ti -8 .ti -8
.B ip link help .B ip link help
...@@ -688,6 +690,11 @@ only display running interfaces. ...@@ -688,6 +690,11 @@ only display running interfaces.
.I DEVICE .I DEVICE
specifies the master device which enslaves devices to show. specifies the master device which enslaves devices to show.
.TP
.BI type " TYPE "
.I TYPE
specifies the type of devices to show.
.TP .TP
The show command has additional formatting options: The show command has additional formatting options:
...@@ -722,6 +729,16 @@ ip link show ...@@ -722,6 +729,16 @@ ip link show
Shows the state of all network interfaces on the system. Shows the state of all network interfaces on the system.
.RE .RE
.PP .PP
ip link show type bridge
.RS 4
Shows the bridge devices.
.RE
.PP
ip link show type vlan
.RS 4
Shows the vlan devices.
.RE
.PP
ip link set dev ppp0 mtu 1400 ip link set dev ppp0 mtu 1400
.RS 4 .RS 4
Change the MTU the ppp0 device. Change the MTU the ppp0 device.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment