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