|
|
@@ -336,6 +336,30 @@ nla_put_failure:
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
+static int
|
|
|
+send_attr_link(struct nl_msg *msg, struct switch_val *val)
|
|
|
+{
|
|
|
+ struct switch_port_link *link = val->value.link;
|
|
|
+ struct nlattr *n;
|
|
|
+
|
|
|
+ n = nla_nest_start(msg, SWITCH_ATTR_OP_VALUE_LINK);
|
|
|
+ if (!n)
|
|
|
+ goto nla_put_failure;
|
|
|
+
|
|
|
+ if (link->duplex)
|
|
|
+ NLA_PUT_FLAG(msg, SWITCH_LINK_FLAG_DUPLEX);
|
|
|
+ if (link->aneg)
|
|
|
+ NLA_PUT_FLAG(msg, SWITCH_LINK_FLAG_ANEG);
|
|
|
+ NLA_PUT_U32(msg, SWITCH_LINK_SPEED, link->speed);
|
|
|
+
|
|
|
+ nla_nest_end(msg, n);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+nla_put_failure:
|
|
|
+ return -1;
|
|
|
+}
|
|
|
+
|
|
|
static int
|
|
|
send_attr_val(struct nl_msg *msg, void *arg)
|
|
|
{
|
|
|
@@ -360,6 +384,10 @@ send_attr_val(struct nl_msg *msg, void *arg)
|
|
|
if (send_attr_ports(msg, val) < 0)
|
|
|
goto nla_put_failure;
|
|
|
break;
|
|
|
+ case SWITCH_TYPE_LINK:
|
|
|
+ if (send_attr_link(msg, val))
|
|
|
+ goto nla_put_failure;
|
|
|
+ break;
|
|
|
default:
|
|
|
goto nla_put_failure;
|
|
|
}
|