Browse Source

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 <[email protected]>

SVN-Revision: 19640
Felix Fietkau 16 years ago
parent
commit
b7d662dce8
1 changed files with 88 additions and 1 deletions
  1. 88 1
      package/swconfig/src/cli.c

+ 88 - 1
package/swconfig/src/cli.c

@@ -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: