From: darkcoven Date: Fri, 11 Oct 2013 19:48:29 +0000 (+0200) Subject: Merge branch 'autotools' X-Git-Url: https://git.sur5r.net/?p=ngadmin;a=commitdiff_plain;h=ce846b1344839e09f7c272c2ba2d5259a891892a;hp=e7b42a7a483fbb8a6a78ed65096788f64eda8301 Merge branch 'autotools' Conflicts: cli/src/admin.c --- diff --git a/cli/src/admin.c b/cli/src/admin.c index dbd30bb..73ea79c 100644 --- a/cli/src/admin.c +++ b/cli/src/admin.c @@ -21,8 +21,6 @@ #define MAXCOM 32 -int main_loop_continue; - static const struct TreeNode* getSubCom (char **com, int n, int *t) { @@ -115,6 +113,7 @@ static char** my_completion (const char *text, int start, int end UNUSED) #endif /* HAVE_LIBREADLINE */ +int main_loop_continue; static struct ngadmin *nga; static sigjmp_buf jmpbuf; static struct termios orig_term; @@ -133,7 +132,7 @@ NORET static void handler (int sig) current_term.c_lflag |= ECHO; tcsetattr(STDIN_FILENO, TCSANOW, ¤t_term); - if (!batch) + if (!batch && main_loop_continue) siglongjmp(jmpbuf, 1); default: @@ -159,7 +158,7 @@ static int pre_login (const struct ether_addr *mac, int retries) err = ngadmin_scan(nga); if (err < 0) { printErrCode(err); - continue; + return err; } /* search switch with requested MAC */ @@ -199,9 +198,9 @@ int main (int argc, char **argv) {"batch", no_argument, NULL, 'a'}, {"keep-broadcasting", no_argument, NULL, 'b'}, {"force-interface", no_argument, NULL, 'f'}, - {"global-broadcast", no_argument, NULL, 'g'}, {"help", no_argument, NULL, 'h'}, {"interface", required_argument, NULL, 'i'}, + {"local-broadcast", no_argument, NULL, 'l'}, {"mac", required_argument, NULL, 'm'}, {"password", required_argument, NULL, 'p'}, {"retries", required_argument, NULL, 'r'}, @@ -211,7 +210,7 @@ int main (int argc, char **argv) char *line, *com[MAXCOM]; const char *iface = "eth0", *password = NULL; float timeout = 0.f; - bool kb = false, force = false, global = false; + bool kb = false, force = false, global = true; struct timeval tv; const struct TreeNode *cur, *next; struct ether_addr *mac = NULL; @@ -228,7 +227,7 @@ int main (int argc, char **argv) opterr = 0; - while ((n = getopt_long(argc, argv, "abfghi:m:p:r:t:", opts, NULL)) != -1) { + while ((n = getopt_long(argc, argv, "abfhi:lm:p:r:t:", opts, NULL)) != -1) { switch (n) { case 'a': @@ -243,10 +242,6 @@ int main (int argc, char **argv) force = true; break; - case 'g': - global = true; - break; - case 'h': printf("usage: %s [-a] [-b] [-f] [-g] [-i ] [-m ] [-p ]\n", argv[0]); goto end; @@ -255,6 +250,10 @@ int main (int argc, char **argv) iface = optarg; break; + case 'l': + global = false; + break; + case 'm': mac = ether_aton(optarg); if (mac == NULL) { @@ -306,13 +305,13 @@ int main (int argc, char **argv) } - if (kb && ngadmin_setKeepBroadcasting(nga, true) != ERR_OK) + if (ngadmin_setKeepBroadcasting(nga, kb) != ERR_OK) goto end; if (force && ngadmin_forceInterface(nga) != ERR_OK) goto end; - if (global && ngadmin_useGlobalBroadcast(nga, true) != ERR_OK) + if (ngadmin_useGlobalBroadcast(nga, global) != ERR_OK) goto end; /* non-TTY inputs are automatically set to batch mode */ @@ -329,7 +328,13 @@ int main (int argc, char **argv) if (mac != NULL && pre_login(mac, retries) != 0) goto end; - if (!batch) { + if (batch) { + /* in batch mode, we must be logged to continue */ + if (ngadmin_getCurrentSwitch(nga) == NULL) { + printf("must be logged\n"); + goto end; + } + } else { #ifdef HAVE_LIBREADLINE /* initialize readline functions */ rl_attempted_completion_function = my_completion; @@ -340,7 +345,6 @@ int main (int argc, char **argv) } main_loop_continue = 1; - while (main_loop_continue) { /* read user input */ line = NULL; diff --git a/cli/src/com_vlan.c b/cli/src/com_vlan.c index 3496815..0baa1d5 100644 --- a/cli/src/com_vlan.c +++ b/cli/src/com_vlan.c @@ -339,6 +339,7 @@ int do_vlan_mode_set (int argc, const char **argv, struct ngadmin *nga) if (argc == 0) { printf( "usage: vlan mode set \n" + "0 - disabled\n" "1 - basic port based\n" "2 - advanced port based\n" "3 - basic 802.1Q\n" @@ -353,7 +354,7 @@ int do_vlan_mode_set (int argc, const char **argv, struct ngadmin *nga) } mode = strtoul(argv[0], NULL, 0); - if (mode < 1 || mode > 4) { + if (mode < VLAN_DISABLED || mode > VLAN_DOT_ADV) { printf("mode out of range\n"); return 1; } diff --git a/lib/src/libconf.c b/lib/src/libconf.c index e26a722..62cb6ff 100644 --- a/lib/src/libconf.c +++ b/lib/src/libconf.c @@ -19,6 +19,7 @@ struct ngadmin* ngadmin_init (const char *iface) /* allocate main structure */ nga = malloc(sizeof(struct ngadmin)); memset(nga, 0, sizeof(struct ngadmin)); + nga->globalbroad = true; strncpy(nga->iface, iface, IFNAMSIZ - 1); @@ -76,9 +77,10 @@ int ngadmin_useGlobalBroadcast (struct ngadmin *nga, bool value) if (nga == NULL) return ERR_INVARG; - nga->globalbroad = value; - - return ERR_OK; + if (setBroadcastType(nga, value) == 0) + return ERR_OK; + else + return ERR_NET; } diff --git a/lib/src/network.c b/lib/src/network.c index 0306d0a..1e0211b 100644 --- a/lib/src/network.c +++ b/lib/src/network.c @@ -30,16 +30,7 @@ int startNetwork (struct ngadmin *nga) memset(&ifr, 0, sizeof(struct ifreq)); strncpy(ifr.ifr_name, nga->iface, IFNAMSIZ - 1); - - /* get the interface broadcast address */ - ret = ioctl(nga->sock, SIOCGIFBRDADDR, &ifr); - if (ret < 0) { - perror("ioctl(SIOCGIFBRDADDR)"); - close(nga->sock); - return ret; - } - nga->brd = (*(struct sockaddr_in*)&ifr.ifr_addr).sin_addr; - + /* get the interface MAC address */ ret = ioctl(nga->sock, SIOCGIFHWADDR, &ifr); if (ret < 0) { @@ -82,6 +73,36 @@ int startNetwork (struct ngadmin *nga) } +int setBroadcastType (struct ngadmin *nga, bool value) +{ + int ret; + struct ifreq ifr; + + + nga->globalbroad = value; + if (value) { + nga->brd.s_addr = (in_addr_t)0; + return 0; + } + + memset(&ifr, 0, sizeof(struct ifreq)); + strncpy(ifr.ifr_name, nga->iface, IFNAMSIZ - 1); + + /* get the interface broadcast address */ + ret = ioctl(nga->sock, SIOCGIFBRDADDR, &ifr); + if (ret < 0) { + perror("ioctl(SIOCGIFBRDADDR)"); + nga->brd.s_addr = (in_addr_t)0; + nga->globalbroad = true; + return ret; + } + + nga->brd = (*(struct sockaddr_in*)&ifr.ifr_addr).sin_addr; + + return 0; +} + + int stopNetwork (struct ngadmin *nga) { return close(nga->sock); diff --git a/lib/src/network.h b/lib/src/network.h index c071f10..5137c98 100644 --- a/lib/src/network.h +++ b/lib/src/network.h @@ -10,6 +10,9 @@ int startNetwork (struct ngadmin *nga); +int setBroadcastType (struct ngadmin *nga, bool value); + + int stopNetwork (struct ngadmin *nga); diff --git a/lib/src/vlan.c b/lib/src/vlan.c index dda8ce5..2e6b2f6 100644 --- a/lib/src/vlan.c +++ b/lib/src/vlan.c @@ -31,11 +31,12 @@ int ngadmin_getVLANType (struct ngadmin *nga, int *t) *t = VLAN_DISABLED; - if (attr->first != NULL) { - at = attr->first->data; - *t =(int)*(char*)at->data; + if (attr->first == NULL) { + ret = ERR_INVARG; + goto end; } - + at = attr->first->data; + *t =(int)*(char*)at->data; end: destroyList(attr, (void(*)(void*))freeAttr); @@ -50,7 +51,7 @@ int ngadmin_setVLANType (struct ngadmin *nga, int t) List *attr; - if (nga == NULL || t < 1 || t > 4) + if (nga == NULL || t < VLAN_DISABLED || t > VLAN_DOT_ADV) return ERR_INVARG; else if (nga->current == NULL) return ERR_NOTLOG; diff --git a/wireshark/nsdp.lua b/wireshark/nsdp.lua index 52a94b2..53aea70 100644 --- a/wireshark/nsdp.lua +++ b/wireshark/nsdp.lua @@ -61,6 +61,7 @@ local bitrates_codes = { local vlan_type_codes = { + [0] = "disabled", [1] = "port basic", [2] = "port advanced", [3] = "802.1Q basic",