[swconfig] add "swconfig list" support
authorblogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 9 Apr 2013 14:19:05 +0000 (14:19 +0000)
committerblogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 9 Apr 2013 14:19:05 +0000 (14:19 +0000)
Signed-off-by: John Crispin <blogic@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36282 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/network/config/swconfig/src/cli.c
package/network/config/swconfig/src/swlib.c
package/network/config/swconfig/src/swlib.h

index 9cd16ab..5f9e532 100644 (file)
@@ -167,6 +167,7 @@ show_vlan(struct switch_dev *dev, int vlan, bool all)
 static void
 print_usage(void)
 {
 static void
 print_usage(void)
 {
+       printf("swconfig list\n");
        printf("swconfig dev <dev> [port <port>|vlan <vlan>] (help|set <key> <value>|get <key>|load <config>|show)\n");
        exit(1);
 }
        printf("swconfig dev <dev> [port <port>|vlan <vlan>] (help|set <key> <value>|get <key>|load <config>|show)\n");
        exit(1);
 }
@@ -214,6 +215,11 @@ int main(int argc, char **argv)
        char *ckey = NULL;
        char *cvalue = NULL;
 
        char *ckey = NULL;
        char *cvalue = NULL;
 
+       if((argc == 2) && !strcmp(argv[1], "list")) {
+               swlib_list();
+               return 0;
+       }
+
        if(argc < 4)
                print_usage();
 
        if(argc < 4)
                print_usage();
 
index de08717..a867d2e 100644 (file)
@@ -624,6 +624,36 @@ done:
        return NL_SKIP;
 }
 
        return NL_SKIP;
 }
 
+static int
+list_switch(struct nl_msg *msg, void *arg)
+{
+       struct swlib_scan_arg *sa = arg;
+       struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
+       struct switch_dev *dev;
+       const char *name;
+       const char *alias;
+
+       if (nla_parse(tb, SWITCH_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL) < 0)
+               goto done;
+
+       if (!tb[SWITCH_ATTR_DEV_NAME] || !tb[SWITCH_ATTR_NAME])
+               goto done;
+
+       printf("Found: %s - %s\n", nla_get_string(tb[SWITCH_ATTR_DEV_NAME]),
+               nla_get_string(tb[SWITCH_ATTR_ALIAS]));
+
+done:
+       return NL_SKIP;
+}
+
+void
+swlib_list(void)
+{
+       if (swlib_priv_init() < 0)
+               return;
+       swlib_call(SWITCH_CMD_GET_SWITCH, list_switch, NULL, NULL);
+       swlib_priv_free();
+}
 
 struct switch_dev *
 swlib_connect(const char *name)
 
 struct switch_dev *
 swlib_connect(const char *name)
index ff73969..02fa456 100644 (file)
@@ -155,6 +155,11 @@ struct switch_port {
 };
 
 /**
 };
 
 /**
+ * swlib_list: list all switches
+ */
+void swlib_list(void);
+
+/**
  * swlib_connect: connect to the switch through netlink
  * @name: name of the ethernet interface,
  *
  * swlib_connect: connect to the switch through netlink
  * @name: name of the ethernet interface,
  *