lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 8 Jul 2015 18:09:20 -0700 From: Anuradha Karuppiah <anuradhak@...ulusnetworks.com> To: Stephen Hemminger <stephen@...workplumber.org> Cc: "David S. Miller" <davem@...emloft.net>, Scott Feldman <sfeldma@...il.com>, "netdev@...r.kernel.org" <netdev@...r.kernel.org>, Roopa Prabhu <roopa@...ulusnetworks.com>, Andy Gospodarek <gospo@...ulusnetworks.com>, Wilson Kok <wkok@...ulusnetworks.com> Subject: Re: [PATCH net-next v4 4/4] ip link: proto_down config and display. On Wed, Jul 8, 2015 at 6:01 PM, Stephen Hemminger <stephen@...workplumber.org> wrote: > On Wed, 8 Jul 2015 14:04:25 -0700 > anuradhak@...ulusnetworks.com wrote: > >> From: Anuradha Karuppiah <anuradhak@...ulusnetworks.com> >> >> This patch adds support to set and display the IF_PROTOF_DOWN proto_flag. >> One example user space application setting this flag is a multi-chassis >> LAG application to handle split-brain situation on peer-link failure. >> >> Example: >> root@...-next:~# ip link set eth1 protodown on >> root@...-next:~# ip link show eth1 >> 4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 proto_flags <DOWN> >> link/ether 52:54:00:12:35:01 brd ff:ff:ff:ff:ff:ff >> root@...-next:~# ip link set eth1 protodown off >> root@...-next:~# ip link show eth1 >> 4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 >> link/ether 52:54:00:12:35:01 brd ff:ff:ff:ff:ff:ff >> root@...-next:~# >> >> Signed-off-by: Anuradha Karuppiah <anuradhak@...ulusnetworks.com> >> Signed-off-by: Andy Gospodarek <gospo@...ulusnetworks.com> >> Signed-off-by: Roopa Prabhu <roopa@...ulusnetworks.com> >> Signed-off-by: Wilson Kok <wkok@...ulusnetworks.com> >> --- >> include/linux/if.h | 6 ++++++ >> include/linux/if_link.h | 12 ++++++++++++ >> ip/ipaddress.c | 27 +++++++++++++++++++++++++++ >> ip/iplink.c | 18 ++++++++++++++++++ >> man/man8/ip-link.8.in | 8 ++++++++ >> 5 files changed, 71 insertions(+) >> >> diff --git a/include/linux/if.h b/include/linux/if.h >> index a55a9e0..97f53d8 100644 >> --- a/include/linux/if.h >> +++ b/include/linux/if.h >> @@ -156,6 +156,12 @@ enum { >> IF_LINK_MODE_DORMANT, /* limit upward transition to dormant */ >> }; >> >> +/* proto_flags - port state information can be passed to the switch driver and >> + * used to determine the phys state of the switch port */ >> +enum { >> + IF_PROTOF_DOWN = 1<<0 /* set switch port phys state down */ >> +}; >> + >> /* >> * Device mapping structure. I'd just gone off and designed a >> * beautiful scheme using only loadable modules with arguments >> diff --git a/include/linux/if_link.h b/include/linux/if_link.h >> index 3d0d613..1d07f3f 100644 >> --- a/include/linux/if_link.h >> +++ b/include/linux/if_link.h >> @@ -148,6 +148,7 @@ enum { >> IFLA_PHYS_SWITCH_ID, >> IFLA_LINK_NETNSID, >> IFLA_PHYS_PORT_NAME, >> + IFLA_PROTO_FLAGS_INFO, >> __IFLA_MAX >> }; >> >> @@ -620,4 +621,15 @@ enum { >> >> #define IFLA_HSR_MAX (__IFLA_HSR_MAX - 1) >> >> + >> +/* proto_flags section */ >> +enum { >> + IFLA_PROTO_FLAGS_UNSPEC, >> + IFLA_PROTO_FLAGS_VAL, >> + IFLA_PROTO_FLAGS_CHANGE, >> + __IFLA_PROTO_FLAGS_MAX, >> +}; >> + >> +#define IFLA_PROTO_FLAGS_MAX (__IFLA_PROTO_FLAGS_MAX - 1) >> + >> #endif /* _LINUX_IF_LINK_H */ >> diff --git a/ip/ipaddress.c b/ip/ipaddress.c >> index 340e1c9..4078023 100644 >> --- a/ip/ipaddress.c >> +++ b/ip/ipaddress.c >> @@ -556,6 +556,30 @@ static void print_link_stats(FILE *fp, struct nlmsghdr *n) >> fprintf(fp, "%s", _SL_); >> } >> >> +static void print_proto_flags(FILE *fp, struct rtattr *tb) >> +{ >> + struct rtattr *proto_info[IFLA_INFO_MAX+1]; >> + uint32_t proto_flags; >> + >> + parse_rtattr_nested(proto_info, IFLA_PROTO_FLAGS_MAX, tb); >> + >> + if (proto_info[IFLA_PROTO_FLAGS_VAL]) { >> + proto_flags = *(uint32_t *)RTA_DATA( >> + proto_info[IFLA_PROTO_FLAGS_VAL]); >> + if (proto_flags) { >> + fprintf(fp, " proto_flags <"); >> +#define _PROTOF(f) if (proto_flags & IF_PROTOF_##f) { \ >> + proto_flags &= ~IF_PROTOF_##f ; \ >> + fprintf(fp, #f "%s", proto_flags ? "," : ""); } >> + _PROTOF(DOWN); >> +#undef _PROTOF >> + if (proto_flags) >> + fprintf(fp, "%x", proto_flags); >> + fprintf(fp, "> "); >> + } >> + } >> +} >> + >> int print_linkinfo(const struct sockaddr_nl *who, >> struct nlmsghdr *n, void *arg) >> { >> @@ -669,6 +693,9 @@ int print_linkinfo(const struct sockaddr_nl *who, >> if (filter.showqueue) >> print_queuelen(fp, tb); >> >> + if (tb[IFLA_PROTO_FLAGS_INFO]) >> + print_proto_flags(fp, tb[IFLA_PROTO_FLAGS_INFO]); >> + >> if (!filter.family || filter.family == AF_PACKET || show_details) { >> SPRINT_BUF(b1); >> fprintf(fp, "%s", _SL_); >> diff --git a/ip/iplink.c b/ip/iplink.c >> index a4a4980..29cb8ce 100644 >> --- a/ip/iplink.c >> +++ b/ip/iplink.c >> @@ -611,6 +611,24 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, >> invarg("Invalid \"link-netnsid\" value\n", *argv); >> addattr32(&req->n, sizeof(*req), IFLA_LINK_NETNSID, >> link_netnsid); >> + } else if (strcmp(*argv, "protodown") == 0) { >> + struct rtattr *proto_info; >> + unsigned int proto_flags = 0; >> + >> + NEXT_ARG(); >> + if (strcmp(*argv, "on") == 0) >> + proto_flags |= IF_PROTOF_DOWN; >> + else if (strcmp(*argv, "off") != 0) >> + return on_off("protodown", *argv); >> + proto_info = addattr_nest(&req->n, >> + sizeof(*req), >> + IFLA_PROTO_FLAGS_INFO); >> + addattr32(&req->n, sizeof(*req), >> + IFLA_PROTO_FLAGS_VAL, proto_flags); >> + addattr32(&req->n, sizeof(*req), >> + IFLA_PROTO_FLAGS_CHANGE, IF_PROTOF_DOWN); >> + >> + addattr_nest_end(&req->n, proto_info); >> } else { >> if (strcmp(*argv, "dev") == 0) { >> NEXT_ARG(); >> diff --git a/man/man8/ip-link.8.in b/man/man8/ip-link.8.in >> index 714aab4..479f652 100644 >> --- a/man/man8/ip-link.8.in >> +++ b/man/man8/ip-link.8.in >> @@ -100,6 +100,8 @@ ip-link \- network device configuration >> .br >> .BR multicast " { " on " | " off " } |" >> .br >> +.BR protodown " { " on " | " off " } |" >> +.br >> .B txqueuelen >> .IR PACKETS " |" >> .br >> @@ -645,6 +647,12 @@ change the >> flag on the device. >> >> .TP >> +.BR "protodown on " or " protodown off" >> +change the >> +.B PROTODOWN >> +proto_flag on the device. >> + >> +.TP >> .BR "dynamic on " or " dynamic off" >> change the >> .B DYNAMIC > > It is good to see support for all features in iproute2 and adding it to ip link > is the right place. > > The problem is the syntax. > With the iproute commands the display and set format should be the same. > The format of the proto flags display does not match the required input. > > Please redo the format of the show to match the set and resubmit. > > Ack. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists