Changeset 18078
- Timestamp:
- 01/05/12 16:18:16 (17 months ago)
- Location:
- src/router
- Files:
-
- 14 deleted
- 6 edited
-
rules/all.mk (modified) (1 diff)
-
rules/configs.mk (modified) (1 diff)
-
swconfig/Makefile (modified) (2 diffs)
-
swconfig/attr.c (deleted)
-
swconfig/cache.c (deleted)
-
swconfig/cache_mngt.c (deleted)
-
swconfig/cli.c (modified) (13 diffs)
-
swconfig/error.c (deleted)
-
swconfig/genl.c (deleted)
-
swconfig/genl_ctrl.c (deleted)
-
swconfig/genl_family.c (deleted)
-
swconfig/genl_mngt.c (deleted)
-
swconfig/handlers.c (deleted)
-
swconfig/include (deleted)
-
swconfig/msg.c (deleted)
-
swconfig/nl.c (deleted)
-
swconfig/object.c (deleted)
-
swconfig/socket.c (deleted)
-
swconfig/swlib.c (modified) (6 diffs)
-
swconfig/swlib.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/router/rules/all.mk
r17490 r18078 235 235 include rules/pcre.mk 236 236 include rules/snort.mk 237 include rules/swconfig.mk 237 238 # 238 239 # Generic rules -
src/router/rules/configs.mk
r17939 r18078 198 198 obj-$(CONFIG_POUND) += pound 199 199 obj-$(CONFIG_VNCREPEATER) += vncrepeater 200 obj-$(CONFIG_SWCONFIG) += swconfig200 obj-$(CONFIG_SWCONFIG) += libnltiny swconfig 201 201 obj-$(CONFIG_NPROBE) += nprobe 202 202 obj-$(CONFIG_MTR) += mtr -
src/router/swconfig/Makefile
r12084 r18078 1 CFLAGS = $(COPTS) -Os -Iinclude -I. -DNEED_PRINTF2 3 1 all: swconfig 4 2 … … 6 4 $(CC) $(CFLAGS) -c -o $@ $^ 7 5 8 LIBNL_OBJ=nl.o handlers.o msg.o attr.o cache.o cache_mngt.o object.o socket.o error.o 9 GENL_OBJ=genl.o genl_family.o genl_ctrl.o genl_mngt.o 10 11 swconfig: $(LIBNL_OBJ) $(GENL_OBJ) cli.o swlib.o 6 swconfig: cli.o swlib.o #uci.o 12 7 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) 13 8 14 9 clean: 15 10 rm -f swconfig *.o 16 17 install:18 install -D swconfig $(INSTALLDIR)/usr/sbin/swconfig -
src/router/swconfig/cli.c
r12079 r18078 3 3 * 4 4 * Copyright (C) 2008 Felix Fietkau <nbd@openwrt.org> 5 * Copyright (C) 2010 Martin Mares <mj@ucw.cz> 5 6 * 6 7 * This program is free software; you can redistribute it and/or … … 23 24 #include <sys/types.h> 24 25 #include <sys/socket.h> 26 #include <stdbool.h> 27 // #include <uci.h> 25 28 26 29 #include <linux/types.h> … … 34 37 35 38 enum { 36 GET, 37 SET, 38 LOAD 39 CMD_NONE, 40 CMD_GET, 41 CMD_SET, 42 CMD_LOAD, 43 CMD_HELP, 44 CMD_SHOW, 39 45 }; 40 46 … … 70 76 list_attributes(struct switch_dev *dev) 71 77 { 72 printf(" Switch %d: %s(%s), ports: %d, vlans: %d\n", dev->id, dev->dev_name, dev->name, dev->ports, dev->vlans);78 printf("%s: %s(%s), ports: %d (cpu @ %d), vlans: %d\n", dev->dev_name, dev->alias, dev->name, dev->ports, dev->cpu_port, dev->vlans); 73 79 printf(" --switch\n"); 74 80 print_attrs(dev->ops); … … 80 86 81 87 static void 88 print_attr_val(const struct switch_attr *attr, const struct switch_val *val) 89 { 90 int i; 91 92 switch (attr->type) { 93 case SWITCH_TYPE_INT: 94 printf("%d", val->value.i); 95 break; 96 case SWITCH_TYPE_STRING: 97 printf("%s", val->value.s); 98 break; 99 case SWITCH_TYPE_PORTS: 100 for(i = 0; i < val->len; i++) { 101 printf("%d%s ", 102 val->value.ports[i].id, 103 (val->value.ports[i].flags & 104 SWLIB_PORT_FLAG_TAGGED) ? "t" : ""); 105 } 106 break; 107 default: 108 printf("?unknown-type?"); 109 } 110 } 111 112 static void 113 show_attrs(struct switch_dev *dev, struct switch_attr *attr, struct switch_val *val) 114 { 115 while (attr) { 116 if (attr->type != SWITCH_TYPE_NOVAL) { 117 printf("\t%s: ", attr->name); 118 if (swlib_get_attr(dev, attr, val) < 0) 119 printf("???"); 120 else 121 print_attr_val(attr, val); 122 putchar('\n'); 123 } 124 attr = attr->next; 125 } 126 } 127 128 static void 129 show_global(struct switch_dev *dev) 130 { 131 struct switch_val val; 132 133 printf("Global attributes:\n"); 134 show_attrs(dev, dev->ops, &val); 135 } 136 137 static void 138 show_port(struct switch_dev *dev, int port) 139 { 140 struct switch_val val; 141 142 printf("Port %d:\n", port); 143 val.port_vlan = port; 144 show_attrs(dev, dev->port_ops, &val); 145 } 146 147 static void 148 show_vlan(struct switch_dev *dev, int vlan, bool all) 149 { 150 struct switch_val val; 151 struct switch_attr *attr; 152 153 val.port_vlan = vlan; 154 155 if (all) { 156 attr = swlib_lookup_attr(dev, SWLIB_ATTR_GROUP_VLAN, "ports"); 157 if (swlib_get_attr(dev, attr, &val) < 0) 158 return; 159 160 if (!val.len) 161 return; 162 } 163 164 printf("VLAN %d:\n", vlan); 165 show_attrs(dev, dev->vlan_ops, &val); 166 } 167 168 static void 82 169 print_usage(void) 83 170 { 84 printf("swconfig dev <dev> [port <port>|vlan <vlan>] (help|set <key> <value>|get <key> )\n");171 printf("swconfig dev <dev> [port <port>|vlan <vlan>] (help|set <key> <value>|get <key>|load <config>|show)\n"); 85 172 exit(1); 86 173 } 87 174 /* 175 static void 176 swconfig_load_uci(struct switch_dev *dev, const char *name) 177 { 178 struct uci_context *ctx; 179 struct uci_package *p = NULL; 180 struct uci_element *e; 181 int ret = -1; 182 183 ctx = uci_alloc_context(); 184 if (!ctx) 185 return; 186 187 uci_load(ctx, name, &p); 188 if (!p) { 189 uci_perror(ctx, "Failed to load config file: "); 190 goto out; 191 } 192 193 ret = swlib_apply_from_uci(dev, p); 194 if (ret < 0) 195 fprintf(stderr, "Failed to apply configuration for switch '%s'\n", dev->dev_name); 196 197 out: 198 uci_free_context(ctx); 199 exit(ret); 200 } 201 */ 88 202 89 203 int main(int argc, char **argv) … … 96 210 int i; 97 211 98 struct switch_port *ports; 99 100 int cmd = 0; 212 int cmd = CMD_NONE; 101 213 char *cdev = NULL; 102 214 int cport = -1; … … 104 216 char *ckey = NULL; 105 217 char *cvalue = NULL; 106 int chelp = 0;107 218 108 219 if(argc < 4) … … 116 227 for(i = 3; i < argc; i++) 117 228 { 118 int p; 119 if (!strcmp(argv[i], "help")) { 120 chelp = 1; 121 continue; 122 } 123 if( i + 1 >= argc) 229 char *arg = argv[i]; 230 if (cmd != CMD_NONE) { 124 231 print_usage(); 125 p = atoi(argv[i + 1]); 126 if (!strcmp(argv[i], "port")) { 127 cport = p; 128 } else if (!strcmp(argv[i], "vlan")) { 129 cvlan = p; 130 } else if (!strcmp(argv[i], "set")) { 131 if(argc <= i + 1) 232 } else if (!strcmp(arg, "port") && i+1 < argc) { 233 cport = atoi(argv[++i]); 234 } else if (!strcmp(arg, "vlan") && i+1 < argc) { 235 cvlan = atoi(argv[++i]); 236 } else if (!strcmp(arg, "help")) { 237 cmd = CMD_HELP; 238 } else if (!strcmp(arg, "set") && i+1 < argc) { 239 cmd = CMD_SET; 240 ckey = argv[++i]; 241 if (i+1 < argc) 242 cvalue = argv[++i]; 243 } else if (!strcmp(arg, "get") && i+1 < argc) { 244 cmd = CMD_GET; 245 ckey = argv[++i]; 246 } else if (!strcmp(arg, "load") && i+1 < argc) { 247 if ((cport >= 0) || (cvlan >= 0)) 132 248 print_usage(); 133 cmd = SET; 134 ckey = argv[i + 1]; 135 if (argc > i + 2) 136 cvalue = argv[i + 2]; 137 else 138 cvalue = NULL; 139 i++; 140 } else if (!strcmp(argv[i], "get")) { 141 cmd = GET; 142 ckey = argv[i + 1]; 249 cmd = CMD_LOAD; 250 ckey = argv[++i]; 251 } else if (!strcmp(arg, "show")) { 252 cmd = CMD_SHOW; 143 253 } else { 144 254 print_usage(); 145 255 } 146 i++; 147 } 148 149 if(cport > -1 && cvlan > -1) 256 } 257 258 if (cmd == CMD_NONE) 259 print_usage(); 260 if (cport > -1 && cvlan > -1) 150 261 print_usage(); 151 262 … … 156 267 } 157 268 158 ports = malloc(sizeof(struct switch_port) * dev->ports);159 memset(ports, 0, sizeof(struct switch_port) * dev->ports);160 269 swlib_scan(dev); 161 270 162 if(chelp) 163 { 164 list_attributes(dev); 165 goto out; 166 } 167 168 if (cmd != LOAD) { 271 if (cmd == CMD_GET || cmd == CMD_SET) { 169 272 if(cport > -1) 170 273 a = swlib_lookup_attr(dev, SWLIB_ATTR_GROUP_PORT, ckey); … … 183 286 switch(cmd) 184 287 { 185 case SET:288 case CMD_SET: 186 289 if ((a->type != SWITCH_TYPE_NOVAL) && 187 290 (cvalue == NULL)) … … 198 301 } 199 302 break; 200 case GET:303 case CMD_GET: 201 304 if(cvlan > -1) 202 305 val.port_vlan = cvlan; … … 209 312 goto out; 210 313 } 211 switch(a->type) { 212 case SWITCH_TYPE_INT: 213 printf("%d\n", val.value.i); 214 break; 215 case SWITCH_TYPE_STRING: 216 printf("%s\n", val.value.s); 217 break; 218 case SWITCH_TYPE_PORTS: 219 for(i = 0; i < val.len; i++) 220 printf("%d ", val.value.ports[i]); 221 printf("\n"); 222 break; 314 print_attr_val(a, &val); 315 putchar('\n'); 316 break; 317 /* case CMD_LOAD: 318 swconfig_load_uci(dev, ckey); 319 break; */ 320 case CMD_HELP: 321 list_attributes(dev); 322 break; 323 case CMD_SHOW: 324 if (cport >= 0 || cvlan >= 0) { 325 if (cport >= 0) 326 show_port(dev, cport); 327 else 328 show_vlan(dev, cvlan, false); 329 } else { 330 show_global(dev); 331 for (i=0; i < dev->ports; i++) 332 show_port(dev, i); 333 for (i=0; i < dev->vlans; i++) 334 show_vlan(dev, i, true); 223 335 } 224 336 break; … … 227 339 out: 228 340 swlib_free_all(dev); 229 free(ports);230 231 341 return 0; 232 342 } -
src/router/swconfig/swlib.c
r12079 r18078 369 369 while(ptr && *ptr) 370 370 { 371 while(*ptr && isspace(*ptr)) 372 ptr++; 373 374 if (!*ptr) 375 break; 376 377 if (!isdigit(*ptr)) 378 return -1; 379 380 if (val.len >= dev->ports) 381 return -1; 382 371 383 ports[val.len].flags = 0; 372 384 ports[val.len].id = strtoul(ptr, &ptr, 10); … … 374 386 if (*ptr == 't') 375 387 ports[val.len].flags |= SWLIB_PORT_FLAG_TAGGED; 388 else 389 return -1; 390 376 391 ptr++; 377 392 } … … 383 398 break; 384 399 case SWITCH_TYPE_NOVAL: 400 if (str && !strcmp(str, "0")) 401 return 0; 402 385 403 break; 386 404 default: … … 563 581 struct switch_dev *dev; 564 582 const char *name; 583 // const char *alias; 565 584 566 585 if (nla_parse(tb, SWITCH_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL) < 0) … … 571 590 572 591 name = nla_get_string(tb[SWITCH_ATTR_DEV_NAME]); 573 if (sa->name && (strcmp(name, sa->name) != 0)) 574 goto done; 592 // alias = nla_get_string(tb[SWITCH_ATTR_ALIAS]); 593 594 // if (sa->name && (strcmp(name, sa->name) != 0) && (strcmp(alias, sa->name) != 0)) 595 if (sa->name && (strcmp(name, sa->name) != 0) ) 596 goto done; 575 597 576 598 dev = swlib_alloc(sizeof(struct switch_dev)); … … 578 600 goto done; 579 601 580 dev->dev_name = strdup(name); 602 strncpy(dev->dev_name, name, IFNAMSIZ - 1); 603 // dev->alias = strdup(alias); 604 dev->alias = strdup(""); 605 581 606 if (tb[SWITCH_ATTR_ID]) 582 607 dev->id = nla_get_u32(tb[SWITCH_ATTR_ID]); 583 608 if (tb[SWITCH_ATTR_NAME]) 584 dev->name = strdup(nla_get_string(tb[SWITCH_ATTR_ DEV_NAME]));609 dev->name = strdup(nla_get_string(tb[SWITCH_ATTR_NAME])); 585 610 if (tb[SWITCH_ATTR_PORTS]) 586 611 dev->ports = nla_get_u32(tb[SWITCH_ATTR_PORTS]); 587 612 if (tb[SWITCH_ATTR_VLANS]) 588 613 dev->vlans = nla_get_u32(tb[SWITCH_ATTR_VLANS]); 614 if (tb[SWITCH_ATTR_CPU_PORT]) 615 dev->cpu_port = nla_get_u32(tb[SWITCH_ATTR_CPU_PORT]); 589 616 590 617 if (!sa->head) { -
src/router/swconfig/swlib.h
r12079 r18078 115 115 struct switch_dev { 116 116 int id; 117 char dev_name[IFNAMSIZ]; 117 118 const char *name; 118 const char * dev_name;119 const char *alias; 119 120 int ports; 120 121 int vlans; 122 int cpu_port; 121 123 struct switch_attr *ops; 122 124 struct switch_attr *port_ops;
Note: See TracChangeset
for help on using the changeset viewer.
