|
|
@@ -420,11 +420,20 @@ swlib_set_attr(struct switch_dev *dev, struct switch_attr *attr, struct switch_v
|
|
|
return swlib_call(cmd, NULL, send_attr_val, val);
|
|
|
}
|
|
|
|
|
|
+enum {
|
|
|
+ CMD_NONE,
|
|
|
+ CMD_DUPLEX,
|
|
|
+ CMD_ANEG,
|
|
|
+ CMD_SPEED,
|
|
|
+};
|
|
|
+
|
|
|
int swlib_set_attr_string(struct switch_dev *dev, struct switch_attr *a, int port_vlan, const char *str)
|
|
|
{
|
|
|
struct switch_port *ports;
|
|
|
+ struct switch_port_link *link;
|
|
|
struct switch_val val;
|
|
|
char *ptr;
|
|
|
+ int cmd = CMD_NONE;
|
|
|
|
|
|
memset(&val, 0, sizeof(val));
|
|
|
val.port_vlan = port_vlan;
|
|
|
@@ -470,6 +479,48 @@ int swlib_set_attr_string(struct switch_dev *dev, struct switch_attr *a, int por
|
|
|
}
|
|
|
val.value.ports = ports;
|
|
|
break;
|
|
|
+ case SWITCH_TYPE_LINK:
|
|
|
+ link = malloc(sizeof(struct switch_port_link));
|
|
|
+ memset(link, 0, sizeof(struct switch_port_link));
|
|
|
+ ptr = (char *)str;
|
|
|
+ for (ptr = strtok(ptr," "); ptr; ptr = strtok(NULL, " ")) {
|
|
|
+ switch (cmd) {
|
|
|
+ case CMD_NONE:
|
|
|
+ if (!strcmp(ptr, "duplex"))
|
|
|
+ cmd = CMD_DUPLEX;
|
|
|
+ else if (!strcmp(ptr, "autoneg"))
|
|
|
+ cmd = CMD_ANEG;
|
|
|
+ else if (!strcmp(ptr, "speed"))
|
|
|
+ cmd = CMD_SPEED;
|
|
|
+ else
|
|
|
+ fprintf(stderr, "Unsupported option %s\n", ptr);
|
|
|
+ break;
|
|
|
+ case CMD_DUPLEX:
|
|
|
+ if (!strcmp(ptr, "half"))
|
|
|
+ link->duplex = 0;
|
|
|
+ else if (!strcmp(ptr, "full"))
|
|
|
+ link->duplex = 1;
|
|
|
+ else
|
|
|
+ fprintf(stderr, "Unsupported value %s\n", ptr);
|
|
|
+ cmd = CMD_NONE;
|
|
|
+ break;
|
|
|
+ case CMD_ANEG:
|
|
|
+ if (!strcmp(ptr, "on"))
|
|
|
+ link->aneg = 1;
|
|
|
+ else if (!strcmp(ptr, "off"))
|
|
|
+ link->aneg = 0;
|
|
|
+ else
|
|
|
+ fprintf(stderr, "Unsupported value %s\n", ptr);
|
|
|
+ cmd = CMD_NONE;
|
|
|
+ break;
|
|
|
+ case CMD_SPEED:
|
|
|
+ link->speed = atoi(ptr);
|
|
|
+ cmd = CMD_NONE;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ val.value.link = link;
|
|
|
+ break;
|
|
|
case SWITCH_TYPE_NOVAL:
|
|
|
if (str && !strcmp(str, "0"))
|
|
|
return 0;
|