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>
This commit is contained in:
Hangbin Liu 2016-09-20 18:02:12 +08:00 committed by Stephen Hemminger
parent 77089b583a
commit 22a84711f4
7 changed files with 13 additions and 39 deletions

View File

@ -83,11 +83,9 @@ struct link_util {
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);

View File

@ -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;

View File

@ -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(&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);

View File

@ -130,10 +130,9 @@ static void bond_slave_print_help(struct link_util *lu, int argc, char **argv,
}
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,
};

View File

@ -293,10 +293,9 @@ static void bridge_slave_print_help(struct link_util *lu, int argc, char **argv,
}
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,
};

View File

@ -91,10 +91,9 @@ struct link_util vrf_link_util = {
};
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 */

View File

@ -1265,5 +1265,4 @@ struct link_util macsec_link_util = {
.parse_opt = macsec_parse_opt,
.print_help = macsec_print_help,
.print_opt = macsec_print_opt,
.slave = false,
};