Re: [PATCH iproute2] ip: Use specific slave id

2016-09-22 Thread Stephen Hemminger
On Tue, 20 Sep 2016 18:02:12 +0800
Hangbin Liu  wrote:

> The original bond/bridge/vrf and slaves use same id, which make people
> confused. Use bond/bridge/vrf_slave as id name will make code more clear.
> 
> Acked-by: Phil Sutter 
> Signed-off-by: Hangbin Liu 
> ---

Applied


[PATCH iproute2] ip: Use specific slave id

2016-09-20 Thread Hangbin Liu
The original bond/bridge/vrf and slaves use same id, which make people
confused. Use bond/bridge/vrf_slave as id name will make code more clear.

Acked-by: Phil Sutter 
Signed-off-by: Hangbin Liu 
---
 ip/ip_common.h   |  2 --
 ip/ipaddress.c   |  4 +++-
 ip/iplink.c  | 36 +++-
 ip/iplink_bond_slave.c   |  3 +--
 ip/iplink_bridge_slave.c |  3 +--
 ip/iplink_vrf.c  |  3 +--
 ip/ipmacsec.c|  1 -
 7 files changed, 13 insertions(+), 39 deletions(-)

diff --git a/ip/ip_common.h b/ip/ip_common.h
index 93ff5bc..1c1cbdf 100644
--- a/ip/ip_common.h
+++ b/ip/ip_common.h
@@ -83,11 +83,9 @@ struct link_util {
 struct rtattr *);
void(*print_help)(struct link_util *, int, char **,
 FILE *);
-   boolslave;
 };
 
 struct link_util *get_link_kind(const char *kind);
-struct link_util *get_link_slave_kind(const char *slave_kind);
 
 void br_dump_bridge_id(const struct ifla_bridge_id *id, char *buf, size_t len);
 
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index 76bd7b3..fcc3c53 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -232,6 +232,7 @@ static void print_linktype(FILE *fp, struct rtattr *tb)
struct rtattr *linkinfo[IFLA_INFO_MAX+1];
struct link_util *lu;
struct link_util *slave_lu;
+   char slave[32];
char *kind;
char *slave_kind;
 
@@ -265,8 +266,9 @@ static void print_linktype(FILE *fp, struct rtattr *tb)
 
fprintf(fp, "%s", _SL_);
fprintf(fp, "%s_slave ", slave_kind);
+   snprintf(slave, sizeof(slave), "%s_slave", slave_kind);
 
-   slave_lu = get_link_slave_kind(slave_kind);
+   slave_lu = get_link_kind(slave);
if (slave_lu && slave_lu->print_opt) {
struct rtattr *attr[slave_lu->maxattr+1], **data = NULL;
 
diff --git a/ip/iplink.c b/ip/iplink.c
index 6b1db18..dec8268 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -119,15 +119,14 @@ static int on_off(const char *msg, const char *realval)
 static void *BODY; /* cached dlopen(NULL) handle */
 static struct link_util *linkutil_list;
 
-static struct link_util *__get_link_kind(const char *id, bool slave)
+struct link_util *get_link_kind(const char *id)
 {
void *dlh;
char buf[256];
struct link_util *l;
 
for (l = linkutil_list; l; l = l->next)
-   if (strcmp(l->id, id) == 0 &&
-   l->slave == slave)
+   if (strcmp(l->id, id) == 0)
return l;
 
snprintf(buf, sizeof(buf), LIBDIR "/ip/link_%s.so", id);
@@ -142,10 +141,7 @@ static struct link_util *__get_link_kind(const char *id, 
bool slave)
}
}
 
-   if (slave)
-   snprintf(buf, sizeof(buf), "%s_slave_link_util", id);
-   else
-   snprintf(buf, sizeof(buf), "%s_link_util", id);
+   snprintf(buf, sizeof(buf), "%s_link_util", id);
l = dlsym(dlh, buf);
if (l == NULL)
return NULL;
@@ -155,16 +151,6 @@ static struct link_util *__get_link_kind(const char *id, 
bool slave)
return l;
 }
 
-struct link_util *get_link_kind(const char *id)
-{
-   return __get_link_kind(id, false);
-}
-
-struct link_util *get_link_slave_kind(const char *id)
-{
-   return __get_link_kind(id, true);
-}
-
 static int get_link_mode(const char *mode)
 {
if (strcasecmp(mode, "default") == 0)
@@ -872,26 +858,18 @@ static int iplink_modify(int cmd, unsigned int flags, int 
argc, char **argv)
 
if (type) {
struct rtattr *linkinfo;
-   char slavebuf[128], *ulinep = strchr(type, '_');
+   char *ulinep = strchr(type, '_');
int iflatype;
 
linkinfo = addattr_nest(, sizeof(req), IFLA_LINKINFO);
addattr_l(, sizeof(req), IFLA_INFO_KIND, type,
 strlen(type));
 
-   if (ulinep && !strcmp(ulinep, "_slave")) {
-   strncpy(slavebuf, type, sizeof(slavebuf));
-   slavebuf[sizeof(slavebuf) - 1] = '\0';
-   ulinep = strchr(slavebuf, '_');
-   /* check in case it was after sizeof(slavebuf) - 1*/
-   if (ulinep)
-   *ulinep = '\0';
-   lu = get_link_slave_kind(slavebuf);
+   lu = get_link_kind(type);
+   if (ulinep && !strcmp(ulinep, "_slave"))
iflatype = IFLA_INFO_SLAVE_DATA;
-   } else {
-   lu = get_link_kind(type);
+   else
iflatype = IFLA_INFO_DATA;
-   }
if (lu && argc) {
struct rtattr