aboutsummaryrefslogtreecommitdiffstats
path: root/package/swconfig/src/swlib.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2009-04-21 01:35:30 +0000
committerFelix Fietkau <nbd@openwrt.org>2009-04-21 01:35:30 +0000
commit1a7b537ebbad637e5a8b75aa7b3b7207fe26fb92 (patch)
treecd0e54c4973624321c9d584a9d64885df936b58a /package/swconfig/src/swlib.c
parent3c7b1324a5f77c0bede093dc9c8b5de9c270dc58 (diff)
downloadmaster-187ad058-1a7b537ebbad637e5a8b75aa7b3b7207fe26fb92.tar.gz
master-187ad058-1a7b537ebbad637e5a8b75aa7b3b7207fe26fb92.tar.bz2
master-187ad058-1a7b537ebbad637e5a8b75aa7b3b7207fe26fb92.zip
swconfig: implement uci loading support
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@15315 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/swconfig/src/swlib.c')
-rw-r--r--package/swconfig/src/swlib.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/package/swconfig/src/swlib.c b/package/swconfig/src/swlib.c
index 3fde816414..fbc036555d 100644
--- a/package/swconfig/src/swlib.c
+++ b/package/swconfig/src/swlib.c
@@ -343,6 +343,49 @@ swlib_set_attr(struct switch_dev *dev, struct switch_attr *attr, struct switch_v
return swlib_call(cmd, NULL, send_attr_val, val);
}
+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_val val;
+ char *ptr;
+
+ memset(&val, 0, sizeof(val));
+ val.port_vlan = port_vlan;
+ switch(a->type) {
+ case SWITCH_TYPE_INT:
+ val.value.i = atoi(str);
+ break;
+ case SWITCH_TYPE_STRING:
+ val.value.s = str;
+ break;
+ case SWITCH_TYPE_PORTS:
+ ports = alloca(sizeof(struct switch_port) * dev->ports);
+ memset(ports, 0, sizeof(struct switch_port) * dev->ports);
+ val.len = 0;
+ ptr = (char *)str;
+ while(ptr && *ptr)
+ {
+ ports[val.len].flags = 0;
+ ports[val.len].id = strtoul(ptr, &ptr, 10);
+ while(*ptr && !isspace(*ptr)) {
+ if (*ptr == 't')
+ ports[val.len].flags |= SWLIB_PORT_FLAG_TAGGED;
+ ptr++;
+ }
+ if (*ptr)
+ ptr++;
+ val.len++;
+ }
+ val.value.ports = ports;
+ break;
+ case SWITCH_TYPE_NOVAL:
+ break;
+ default:
+ return -1;
+ }
+ return swlib_set_attr(dev, a, &val);
+}
+
struct attrlist_arg {
int id;