From: Stephen Hemminger Date: Thu, 5 Apr 2012 22:08:57 +0000 (-0700) Subject: Add ability to set link state with ip X-Git-Tag: v3.4.0~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f2fdd44b6694f713aa638cc2222a2d7d17dfe5f;p=thirdparty%2Fiproute2.git Add ability to set link state with ip Exposes existing netlink operations to modify link state of devices. --- diff --git a/ip/ip_common.h b/ip/ip_common.h index b45c5eeff..62884375a 100644 --- a/ip/ip_common.h +++ b/ip/ip_common.h @@ -1,3 +1,4 @@ +extern int get_operstate(const char *name); extern int print_linkinfo(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg); diff --git a/ip/ipaddress.c b/ip/ipaddress.c index aea1a8176..9306a3728 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -131,6 +131,16 @@ static void print_operstate(FILE *f, __u8 state) fprintf(f, "state %s ", oper_states[state]); } +int get_operstate(const char *name) +{ + int i; + + for (i = 0; i < sizeof(oper_states)/sizeof(oper_states[0]); i++) + if (strcasecmp(name, oper_states[i]) == 0) + return i; + return -1; +} + static void print_queuelen(FILE *f, struct rtattr *tb[IFLA_MAX + 1]) { int qlen; diff --git a/ip/iplink.c b/ip/iplink.c index 814a92c94..a58e4d067 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -433,10 +433,18 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, } else if (strcmp(*argv, "mode") == 0) { int mode; NEXT_ARG(); - mode = get_link_mode(*argv); + mode = get_link_mode(*argv); if (mode < 0) invarg("Invalid link mode\n", *argv); addattr8(&req->n, sizeof(*req), IFLA_LINKMODE, mode); + } else if (strcmp(*argv, "state") == 0) { + int state; + NEXT_ARG(); + state = get_operstate(*argv); + if (state < 0) + invarg("Invalid operstate\n", *argv); + + addattr8(&req->n, sizeof(*req), IFLA_OPERSTATE, state); } else { if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); diff --git a/man/man8/ip-link.8 b/man/man8/ip-link.8 index acc6d2876..72f4cfd68 100644 --- a/man/man8/ip-link.8 +++ b/man/man8/ip-link.8 @@ -103,6 +103,9 @@ ip-link \- network device configuration .B mode .IR LINKMODE " |" .br +.B state +.IR LINKSTATE " |" +.br .B master .IR DEVICE .br @@ -259,6 +262,10 @@ the device will transistion to when it is brought up. Setting mode changes the behaviour so that device goes into DORMANT state instead of UP when driver is ready. +.TP +.BI state " LINKSTATE" +allows setting the operational link state. The values (defined in RFC2863) +are: UP, DOWN, TESTING, UNKNOWN, DORMANT, NOTPRESENT, LOWERLAYERDOWN. .TP .BI alias " NAME" give the device a symbolic name for easy reference.