return dev->ops->get_port_pvid(dev, val->port_vlan, &val->value.i);
}
-static const char *
-swconfig_speed_str(enum switch_port_speed speed)
-{
- switch (speed) {
- case SWITCH_PORT_SPEED_10:
- return "10baseT";
- case SWITCH_PORT_SPEED_100:
- return "100baseT";
- case SWITCH_PORT_SPEED_1000:
- return "1000baseT";
- default:
- break;
- }
-
- return "unknown";
-}
-
static int
swconfig_get_link(struct switch_dev *dev, const struct switch_attr *attr,
struct switch_val *val)
{
- struct switch_port_link link;
- int len;
- int ret;
+ struct switch_port_link *link = val->value.link;
if (val->port_vlan >= dev->ports)
return -EINVAL;
if (!dev->ops->get_port_link)
return -EOPNOTSUPP;
- memset(&link, 0, sizeof(link));
- ret = dev->ops->get_port_link(dev, val->port_vlan, &link);
- if (ret)
- return ret;
-
- memset(dev->buf, 0, sizeof(dev->buf));
-
- if (link.link)
- len = snprintf(dev->buf, sizeof(dev->buf),
- "port:%d link:up speed:%s %s-duplex %s%s%s%s%s",
- val->port_vlan,
- swconfig_speed_str(link.speed),
- link.duplex ? "full" : "half",
- link.tx_flow ? "txflow " : "",
- link.rx_flow ? "rxflow " : "",
- link.eee & ADVERTISED_100baseT_Full ? "eee100 " : "",
- link.eee & ADVERTISED_1000baseT_Full ? "eee1000 " : "",
- link.aneg ? "auto" : "");
- else
- len = snprintf(dev->buf, sizeof(dev->buf), "port:%d link:down",
- val->port_vlan);
-
- val->value.s = dev->buf;
- val->len = len;
-
- return 0;
+ memset(link, 0, sizeof(*link));
+ return dev->ops->get_port_link(dev, val->port_vlan, link);
}
static int
.get = swconfig_get_pvid,
},
[PORT_LINK] = {
- .type = SWITCH_TYPE_STRING,
+ .type = SWITCH_TYPE_LINK,
.name = "link",
.description = "Get port link information",
.set = NULL,