X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/69e8309e23b96176a74c356e47c48bac610bdda1..HEAD:/package/swconfig/src/swlib.c diff --git a/package/swconfig/src/swlib.c b/package/swconfig/src/swlib.c index c2316d068..de08717e3 100644 --- a/package/swconfig/src/swlib.c +++ b/package/swconfig/src/swlib.c @@ -38,7 +38,7 @@ static struct nl_sock *handle; static struct nl_cache *cache; static struct genl_family *family; -static struct nlattr *tb[SWITCH_ATTR_MAX]; +static struct nlattr *tb[SWITCH_ATTR_MAX + 1]; static int refcount = 0; static struct nla_policy port_policy[] = { @@ -397,6 +397,9 @@ int swlib_set_attr_string(struct switch_dev *dev, struct switch_attr *a, int por val.value.ports = ports; break; case SWITCH_TYPE_NOVAL: + if (str && !strcmp(str, "0")) + return 0; + break; default: return -1; @@ -577,6 +580,7 @@ add_switch(struct nl_msg *msg, void *arg) struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg)); struct switch_dev *dev; const char *name; + const char *alias; if (nla_parse(tb, SWITCH_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL) < 0) goto done; @@ -585,14 +589,17 @@ add_switch(struct nl_msg *msg, void *arg) goto done; name = nla_get_string(tb[SWITCH_ATTR_DEV_NAME]); - if (sa->name && (strcmp(name, sa->name) != 0)) + alias = nla_get_string(tb[SWITCH_ATTR_ALIAS]); + + if (sa->name && (strcmp(name, sa->name) != 0) && (strcmp(alias, sa->name) != 0)) goto done; dev = swlib_alloc(sizeof(struct switch_dev)); if (!dev) goto done; - dev->dev_name = strdup(name); + strncpy(dev->dev_name, name, IFNAMSIZ - 1); + dev->alias = strdup(alias); if (tb[SWITCH_ATTR_ID]) dev->id = nla_get_u32(tb[SWITCH_ATTR_ID]); if (tb[SWITCH_ATTR_NAME])