ip: Use specific slave id
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 <psutter@redhat.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
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 rtattr *);
void (*print_help)(struct link_util *, int, char **,
FILE *);
- bool slave;
};
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 @@
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 @@
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 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 @@
}
}
- 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 @@
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 @@
if (type) {
struct rtattr *linkinfo;
- char slavebuf[128], *ulinep = strchr(type, '_');
+ char *ulinep = strchr(type, '_');
int iflatype;
linkinfo = addattr_nest(&req.n, sizeof(req), IFLA_LINKINFO);
addattr_l(&req.n, 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 *data = addattr_nest(&req.n,
sizeof(req), iflatype);
diff --git a/ip/iplink_bond_slave.c b/ip/iplink_bond_slave.c
index 9c60dea..877e2d9 100644
--- a/ip/iplink_bond_slave.c
+++ b/ip/iplink_bond_slave.c
@@ -130,10 +130,9 @@
}
struct link_util bond_slave_link_util = {
- .id = "bond",
+ .id = "bond_slave",
.maxattr = IFLA_BOND_SLAVE_MAX,
.print_opt = bond_slave_print_opt,
.parse_opt = bond_slave_parse_opt,
.print_help = bond_slave_print_help,
- .slave = true,
};
diff --git a/ip/iplink_bridge_slave.c b/ip/iplink_bridge_slave.c
index a44d4e4..6c5c59a 100644
--- a/ip/iplink_bridge_slave.c
+++ b/ip/iplink_bridge_slave.c
@@ -293,10 +293,9 @@
}
struct link_util bridge_slave_link_util = {
- .id = "bridge",
+ .id = "bridge_slave",
.maxattr = IFLA_BRPORT_MAX,
.print_opt = bridge_slave_print_opt,
.parse_opt = bridge_slave_parse_opt,
.print_help = bridge_slave_print_help,
- .slave = true,
};
diff --git a/ip/iplink_vrf.c b/ip/iplink_vrf.c
index 015b41e..a238b29 100644
--- a/ip/iplink_vrf.c
+++ b/ip/iplink_vrf.c
@@ -91,10 +91,9 @@
};
struct link_util vrf_slave_link_util = {
- .id = "vrf",
+ .id = "vrf_slave",
.maxattr = IFLA_VRF_PORT_MAX,
.print_opt = vrf_slave_print_opt,
- .slave = true,
};
/* returns table id if name is a VRF device */
diff --git a/ip/ipmacsec.c b/ip/ipmacsec.c
index 127fa1e..c9252bb 100644
--- a/ip/ipmacsec.c
+++ b/ip/ipmacsec.c
@@ -1265,5 +1265,4 @@
.parse_opt = macsec_parse_opt,
.print_help = macsec_print_help,
.print_opt = macsec_print_opt,
- .slave = false,
};