]> git.sur5r.net Git - ngadmin/commitdiff
Set global broadcast by default
authordarkcoven <admin@darkcoven.tk>
Sun, 6 Oct 2013 10:56:28 +0000 (12:56 +0200)
committerdarkcoven <admin@darkcoven.tk>
Sun, 6 Oct 2013 10:56:28 +0000 (12:56 +0200)
cli/admin.c
lib/src/libconf.c
lib/src/network.c
lib/src/network.h

index bb4b310fd721afb234fe10a1cc647bf82c7d61b7..b40bbd99d5b45e2ea6d9765171159ecfb2b81fae 100644 (file)
@@ -191,9 +191,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'},
@@ -203,7 +203,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;
@@ -216,7 +216,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':
@@ -231,10 +231,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 <interface>] [-m <MAC>] [-p <password>]\n", argv[0]);
                        goto end;
@@ -243,6 +239,10 @@ int main (int argc, char **argv)
                        iface = optarg;
                        break;
                
+               case 'l':
+                       global = false;
+                       break;
+               
                case 'm':
                        mac = ether_aton(optarg);
                        if (mac == NULL) {
@@ -294,13 +294,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 */
index e26a7224e23ba964210d635e20cffc843c060c91..62cb6ff54698a33c86ee0ebf4830eeadf8392b66 100644 (file)
@@ -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;
 }
 
 
index 0306d0aa5462601489b8770b71298069a6b87973..1e0211bce5992aab7f2c3335002fde1282ddd090 100644 (file)
@@ -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);
index c071f10a83258be4a35738001a37e82a17c8af4a..5137c98a4990fa0bb81166c591fb65efc0fbd1de 100644 (file)
@@ -10,6 +10,9 @@
 int startNetwork (struct ngadmin *nga);
 
 
+int setBroadcastType (struct ngadmin *nga, bool value);
+
+
 int stopNetwork (struct ngadmin *nga);