swconfig: add show command
Add a "show" command, which displays all attributes of the selected port, VLAN, or of the whole switch. Signed-off-by: Martin Mares <mj@ucw.cz> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19640 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
f5d08467e2
commit
643c4e1303
|
@ -39,6 +39,7 @@ enum {
|
|||
CMD_SET,
|
||||
CMD_LOAD,
|
||||
CMD_HELP,
|
||||
CMD_SHOW,
|
||||
};
|
||||
|
||||
static void
|
||||
|
@ -81,10 +82,80 @@ list_attributes(struct switch_dev *dev)
|
|||
print_attrs(dev->port_ops);
|
||||
}
|
||||
|
||||
static void
|
||||
print_attr_val(const struct switch_attr *attr, const struct switch_val *val)
|
||||
{
|
||||
int i;
|
||||
|
||||
switch (attr->type) {
|
||||
case SWITCH_TYPE_INT:
|
||||
printf("%d", val->value.i);
|
||||
break;
|
||||
case SWITCH_TYPE_STRING:
|
||||
printf("%s", val->value.s);
|
||||
break;
|
||||
case SWITCH_TYPE_PORTS:
|
||||
for(i = 0; i < val->len; i++) {
|
||||
printf("%d%s ",
|
||||
val->value.ports[i].id,
|
||||
(val->value.ports[i].flags &
|
||||
SWLIB_PORT_FLAG_TAGGED) ? "t" : "");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("?unknown-type?");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
show_attrs(struct switch_dev *dev, struct switch_attr *attr, struct switch_val *val)
|
||||
{
|
||||
while (attr) {
|
||||
if (attr->type != SWITCH_TYPE_NOVAL) {
|
||||
printf("\t%s: ", attr->name);
|
||||
if (swlib_get_attr(dev, attr, val) < 0)
|
||||
printf("???");
|
||||
else
|
||||
print_attr_val(attr, val);
|
||||
putchar('\n');
|
||||
}
|
||||
attr = attr->next;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
show_global(struct switch_dev *dev)
|
||||
{
|
||||
struct switch_val val;
|
||||
|
||||
printf("Global attributes:\n");
|
||||
show_attrs(dev, dev->ops, &val);
|
||||
}
|
||||
|
||||
static void
|
||||
show_port(struct switch_dev *dev, int port)
|
||||
{
|
||||
struct switch_val val;
|
||||
|
||||
printf("Port %d:\n", port);
|
||||
val.port_vlan = port;
|
||||
show_attrs(dev, dev->port_ops, &val);
|
||||
}
|
||||
|
||||
static void
|
||||
show_vlan(struct switch_dev *dev, int vlan)
|
||||
{
|
||||
struct switch_val val;
|
||||
|
||||
printf("VLAN %d:\n", vlan);
|
||||
val.port_vlan = vlan;
|
||||
show_attrs(dev, dev->vlan_ops, &val);
|
||||
}
|
||||
|
||||
static void
|
||||
print_usage(void)
|
||||
{
|
||||
printf("swconfig dev <dev> [port <port>|vlan <vlan>] (help|set <key> <value>|get <key>|load <config>)\n");
|
||||
printf("swconfig dev <dev> [port <port>|vlan <vlan>] (help|set <key> <value>|get <key>|load <config>|show)\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -165,6 +236,8 @@ int main(int argc, char **argv)
|
|||
print_usage();
|
||||
cmd = CMD_LOAD;
|
||||
ckey = argv[++i];
|
||||
} else if (!strcmp(arg, "show")) {
|
||||
cmd = CMD_SHOW;
|
||||
} else {
|
||||
print_usage();
|
||||
}
|
||||
|
@ -252,6 +325,20 @@ int main(int argc, char **argv)
|
|||
case CMD_HELP:
|
||||
list_attributes(dev);
|
||||
break;
|
||||
case CMD_SHOW:
|
||||
if (cport >= 0 || cvlan >= 0) {
|
||||
if (cport >= 0)
|
||||
show_port(dev, cport);
|
||||
else
|
||||
show_vlan(dev, cvlan);
|
||||
} else {
|
||||
show_global(dev);
|
||||
for (i=0; i < dev->ports; i++)
|
||||
show_port(dev, i);
|
||||
for (i=0; i < dev->vlans; i++)
|
||||
show_vlan(dev, i);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
out:
|
||||
|
|
Loading…
Reference in New Issue