use inet_pton instead of inet_aton
[olsrd.git] / src / olsr_switch / ohs_cmd.c
index 20ee34f..7be18d6 100644 (file)
@@ -44,7 +44,6 @@
 #include "commands.h"
 #include "link_rules.h"
 #include "ipcalc.h"
-#include "../common/string.h"
 
 #include <string.h>
 #include <stdlib.h>
@@ -56,7 +55,6 @@
 #include <unistd.h>
 #include <errno.h>
 
-
 #define TOK_BUF_SIZE 500
 static char tok_buf[TOK_BUF_SIZE];
 
@@ -70,18 +68,16 @@ get_next_token(const char *src, char *dst, size_t buflen)
 
   dst[0] = 0;
   /* Skip leading spaces */
-  while(src[j] == ' ' && src[j] != 0)
-    {
-      j++;
-    }
+  while (src[j] == ' ' && src[j] != 0) {
+    j++;
+  }
 
   src += j;
   i = 0;
-  while((src[i] != ' ') && (src[i] != 0) && (i < ((int)buflen - 1)))
-    {
-      dst[i] = src[i];
-      i++;
-    }
+  while ((src[i] != ' ') && (src[i] != 0) && (i < ((int)buflen - 1))) {
+    dst[i] = src[i];
+    i++;
+  }
   dst[i] = 0;
 
   //if(strlen(dst))
@@ -96,14 +92,14 @@ ohs_set_olsrd_path(const char *path)
   return 0;
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 int
-ohs_cmd_olsrd(const char *args __attribute__((unused)))
+ohs_cmd_olsrd(const char *args __attribute__ ((unused)))
 {
   printf("olsrd command not available in windows version\nStart instances manually\n");
   return 0;
 }
-#else
+#else /* _WIN32 */
 int
 ohs_cmd_olsrd(const char *args)
 {
@@ -112,130 +108,115 @@ ohs_cmd_olsrd(const char *args)
 
   args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
 
-  if(!strlen(tok_buf))
+  if (!strlen(tok_buf))
     goto print_usage;
 
   /* Start olsrd instance */
-  if(!strncmp(tok_buf, "start", strlen("start")))
-    {
-      int argc = 0, i = 0;
-
-      args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
-
-      if(!strlen(tok_buf))
-       goto print_usage;
-
-      if(!inet_aton(tok_buf, &iaddr))
-       {
-         printf("Invalid IP %s\n", tok_buf);
-         goto print_usage;
-       }
-
-      olsrd_args[argc++] = olsrd_path;
-
-      if(1) /* config file is set */
-       {
-         olsrd_args[argc++] = "-f";
-         olsrd_args[argc++] = "/etc/olsrd-emu.conf";
-       }
-      olsrd_args[argc++] = "-hemu";
-      olsrd_args[argc++] = tok_buf;
-
-      olsrd_args[argc++] = "-d";
-      olsrd_args[argc++] = "0";
-      olsrd_args[argc++] = "-nofork";
-      olsrd_args[argc] = NULL;
-
-      printf("Executing: %s", olsrd_path);
-      for(i = 0; i < argc; i++)
-       printf(" %s", olsrd_args[i]);
-      printf("\n");
-
-      if(fork())
-       return 1;
-
-      if(execve(olsrd_path, (char * const *)olsrd_args, NULL) < 0)
-       {
-         printf("Error executing olsrd: %s\n", strerror(errno));
-         exit(1);
-       }
-    }
-  /* Stop olsrd instance */
-  else if(!strncmp(tok_buf, "stop", strlen("stop")))
-    {
-      struct ohs_connection *oc;
+  if (!strncmp(tok_buf, "start", strlen("start"))) {
+    int argc = 0, i = 0;
+
+    args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
 
-      args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
+    if (!strlen(tok_buf))
+      goto print_usage;
 
-      if(!strlen(tok_buf))
-       goto print_usage;
+    if (!inet_pton(AF_INET, tok_buf, &iaddr)) {
+      printf("Invalid IP %s\n", tok_buf);
+      goto print_usage;
+    }
 
-      if(!inet_aton(tok_buf, &iaddr))
-       {
-         printf("Invalid IP %s\n", tok_buf);
-         goto print_usage;
-       }
+    olsrd_args[argc++] = olsrd_path;
+
+    if (1) {                    /* config file is set */
+      olsrd_args[argc++] = "-f";
+      olsrd_args[argc++] = "./olsrd.emu.conf";
+    }
+    olsrd_args[argc++] = "-hemu";
+    olsrd_args[argc++] = tok_buf;
 
-      oc = get_client_by_addr((union olsr_ip_addr *)&iaddr.s_addr);
+    olsrd_args[argc++] = "-d";
+    olsrd_args[argc++] = "0";
+    olsrd_args[argc++] = "-nofork";
+    olsrd_args[argc] = NULL;
 
-      if(!oc)
-       {
-         printf("No such client: %s\n", tok_buf);
-         return -1;
-       }
-      ohs_delete_connection(oc);
+    printf("Executing: %s", olsrd_path);
+    for (i = 0; i < argc; i++)
+      printf(" %s", olsrd_args[i]);
+    printf("\n");
 
+    if (fork())
       return 1;
+
+    if (execve(olsrd_path, (char *const *)olsrd_args, NULL) < 0) {
+      printf("Error executing olsrd: %s\n", strerror(errno));
+      exit(1);
     }
-  /* Set olsrd binary path */
-  else if(!strncmp(tok_buf, "setb", strlen("setb")))
-    {
-      struct stat sbuf;
+  }
+  /* Stop olsrd instance */
+  else if (!strncmp(tok_buf, "stop", strlen("stop"))) {
+    struct ohs_connection *oc;
 
-      args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
+    args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
 
-      if(!strlen(tok_buf))
-       goto print_usage;
+    if (!strlen(tok_buf))
+      goto print_usage;
 
-      if(stat(tok_buf, &sbuf) < 0)
-       {
-         printf("Error setting binary \"%s\": %s\n",
-                tok_buf, strerror(errno));
-         return -1;
-       }
+    if (!inet_pton(AF_INET, tok_buf, &iaddr)) {
+      printf("Invalid IP %s\n", tok_buf);
+      goto print_usage;
+    }
 
-      if((sbuf.st_mode & S_IFDIR) || !(sbuf.st_mode & S_IXUSR))
-       {
-         printf("Error setting binary \"%s\": Not a regular execuatble file!\n",
-                tok_buf);
-         return -1;
-       }
+    oc = get_client_by_addr((union olsr_ip_addr *)&iaddr.s_addr);
 
-      printf("New olsrd binary path:\"%s\"\n", tok_buf);
-      ohs_set_olsrd_path(tok_buf);
+    if (!oc) {
+      printf("No such client: %s\n", tok_buf);
+      return -1;
+    }
+    ohs_delete_connection(oc);
 
-      return 1;
+    return 1;
+  }
+  /* Set olsrd binary path */
+  else if (!strncmp(tok_buf, "setb", strlen("setb"))) {
+    struct stat sbuf;
 
+    args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
+
+    if (!strlen(tok_buf))
+      goto print_usage;
+
+    if (stat(tok_buf, &sbuf) < 0) {
+      printf("Error setting binary \"%s\": %s\n", tok_buf, strerror(errno));
+      return -1;
     }
-  /* Set arguments */
-  else if(!strncmp(tok_buf, "seta", strlen("seta")))
-    {
-       printf("Error - NOT IMPLEMENTED YET\n");
-       return 1;
+
+    if ((sbuf.st_mode & S_IFDIR) || !(sbuf.st_mode & S_IXUSR)) {
+      printf("Error setting binary \"%s\": Not a regular execuatble file!\n", tok_buf);
+      return -1;
     }
+
+    printf("New olsrd binary path:\"%s\"\n", tok_buf);
+    ohs_set_olsrd_path(tok_buf);
+
+    return 1;
+
+  }
+  /* Set arguments */
+  else if (!strncmp(tok_buf, "seta", strlen("seta"))) {
+    printf("Error - NOT IMPLEMENTED YET\n");
+    return 1;
+  }
   /* Show settings */
-  else if(!strncmp(tok_buf, "show", strlen("show")))
-    {
-      printf("olsrd command settings:\n\tBinary path: %s\n\tArguments  : \n",
-            olsrd_path);
-      return 1;
-    }
+  else if (!strncmp(tok_buf, "show", strlen("show"))) {
+    printf("olsrd command settings:\n\tBinary path: %s\n\tArguments  : \n", olsrd_path);
+    return 1;
+  }
 
- print_usage:
+print_usage:
   printf("Usage: olsrd [start|stop|show|setb|seta] [IP|path|args]\n");
   return 0;
 }
-#endif
+#endif /* _WIN32 */
 
 int
 ohs_cmd_link(const char *args)
@@ -244,13 +225,14 @@ ohs_cmd_link(const char *args)
   struct ohs_connection *src, *dst;
   struct in_addr iaddr;
   int qual;
+  struct ohs_ip_link *my_link, *inv_link;
 
   args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
 
   if (!strlen(tok_buf)) {
     goto print_usage;
   }
-  if(!strncmp(tok_buf, "bi", strlen("bi"))) {
+  if (!strncmp(tok_buf, "bi", strlen("bi"))) {
     bi = 1;
     args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
 
@@ -259,11 +241,11 @@ ohs_cmd_link(const char *args)
     }
   }
 
-  if(tok_buf[0] == '*') {
+  if (tok_buf[0] == '*') {
     wildc_src = 1;
     src = ohs_conns;
   } else {
-    if (!inet_aton(tok_buf, &iaddr)) {
+    if (!inet_pton(AF_INET, tok_buf, &iaddr)) {
       printf("Invalid src IP %s\n", tok_buf);
       return -1;
     }
@@ -271,8 +253,8 @@ ohs_cmd_link(const char *args)
     src = get_client_by_addr((union olsr_ip_addr *)&iaddr.s_addr);
 
     if (!src) {
-        printf("No such client: %s!\n", tok_buf);
-        return -1;
+      printf("No such client: %s!\n", tok_buf);
+      return -1;
     }
   }
 
@@ -282,11 +264,11 @@ ohs_cmd_link(const char *args)
     goto print_usage;
   }
 
-  if(tok_buf[0] == '*') {
+  if (tok_buf[0] == '*') {
     wildc_dst = 1;
     dst = ohs_conns;
   } else {
-    if(!inet_aton(tok_buf, &iaddr)) {
+    if (!inet_pton(AF_INET, tok_buf, &iaddr)) {
       printf("Invalid src IP %s\n", tok_buf);
       return -1;
     }
@@ -311,7 +293,7 @@ ohs_cmd_link(const char *args)
 
   qual = atoi(tok_buf);
 
-  if(qual < 0 || qual > 100) {
+  if (qual < 0 || qual > 100) {
     printf("Link quality out of range(0-100)\n");
     return -1;
   }
@@ -320,45 +302,40 @@ ohs_cmd_link(const char *args)
     while (dst) {
       struct ipaddr_str srcaddrstr, dstaddrstr;
 
-      if(src != dst) {
-        struct ohs_ip_link *fwd_link = get_link(src, &dst->ip_addr);
-        struct ohs_ip_link *inv_link = bi ? get_link(dst, &src->ip_addr) : NULL;
-        if(qual == 100)  {
+      if (src != dst) {
+        my_link = get_link(src, &dst->ip_addr);
+        inv_link = bi ? get_link(dst, &src->ip_addr) : NULL;
+        if (qual == 100) {
           /* Remove link entry */
-          if (fwd_link) {
-           remove_link(src, fwd_link);
+          if (my_link) {
+            remove_link(src, my_link);
           }
           if (inv_link) {
             remove_link(dst, inv_link);
           }
-        } else  {
-          if (!fwd_link) {
+        } else {
+          if (!my_link) {
             /* Create new link */
-            fwd_link = add_link(src, dst);
+            my_link = add_link(src, dst);
           }
 
-          fwd_link->quality = qual;
+          my_link->quality = qual;
 
           if (bi) {
-            if(!inv_link) {
+            if (!inv_link) {
               /* Create new link */
               inv_link = add_link(dst, src);
             }
             inv_link->quality = qual;
           }
         }
-        printf("%s %sdirectional link(s) %s %c=> %s quality %d\n",
-               (qual == 100) ? "Removing" : "Setting",
-               bi ? "bi" : "uni",
-               olsr_ip_to_string(&srcaddrstr, &src->ip_addr),
-               bi ? '<' : '=',
-               olsr_ip_to_string(&dstaddrstr, &dst->ip_addr),
-               qual);
+        printf("%s %sdirectional link(s) %s %c=> %s quality %d\n", (qual == 100) ? "Removing" : "Setting", bi ? "bi" : "uni",
+               olsr_ip_to_string(&srcaddrstr, &src->ip_addr), bi ? '<' : '=', olsr_ip_to_string(&dstaddrstr, &dst->ip_addr), qual);
       }
       if (wildc_dst) {
-           dst = dst->next;
+        dst = dst->next;
       } else {
-           break;
+        break;
       }
     }
     dst = wildc_dst ? ohs_conns : dst;
@@ -366,7 +343,7 @@ ohs_cmd_link(const char *args)
   }
 
   return 1;
- print_usage:
+print_usage:
   printf("link <bi> srcIP dstIP [0-100]");
   return -1;
 }
@@ -378,29 +355,21 @@ ohs_cmd_list(const char *args)
 
   args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
 
-  if(!strlen(tok_buf) ||
-     !strncmp(tok_buf, "clients", strlen("clients"))) {
+  if (!strlen(tok_buf) || !strncmp(tok_buf, "clients", strlen("clients"))) {
     printf("All connected clients:\n");
 
-    while(oc) {
+    while (oc) {
       struct ipaddr_str addrstr;
-      printf("\t%s - Rx: %u Tx: %u LinkCnt: %u\n",
-             olsr_ip_to_string(&addrstr, &oc->ip_addr),
-             oc->rx,
-             oc->tx,
-             oc->linkcnt);
+      printf("\t%s - Rx: %d Tx: %d LinkCnt: %d\n", olsr_ip_to_string(&addrstr, &oc->ip_addr), oc->rx, oc->tx, oc->linkcnt);
       oc = oc->next;
     }
-  }
-  else if(!strncmp(tok_buf, "links", strlen("links"))) {
+  } else if (!strncmp(tok_buf, "links", strlen("links"))) {
     printf("All configured links:\n");
     while (oc) {
       struct ohs_ip_link *links = oc->links;
       while (links) {
-          struct ipaddr_str addrstr, dststr;
-        printf("\t%s => %s Quality: %d\n",
-               olsr_ip_to_string(&addrstr, &oc->ip_addr),
-               olsr_ip_to_string(&dststr, &links->dst),
+        struct ipaddr_str addrstr, dststr;
+        printf("\t%s => %s Quality: %d\n", olsr_ip_to_string(&addrstr, &oc->ip_addr), olsr_ip_to_string(&dststr, &links->dst),
                links->quality);
 
         links = links->next;
@@ -421,36 +390,26 @@ ohs_cmd_help(const char *args)
 
   args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
 
-  if(!strlen(tok_buf))
-    {
-      printf("Olsrd host switch version %s\n", OHS_VERSION);
-      printf("Available commands:\n");
-
-      for(i = 0; ohs_commands[i].cmd; i++)
-       {
-         if(ohs_commands[i].helptext_brief)
-           printf("\t%s - %s\n",
-                  ohs_commands[i].cmd,
-                  ohs_commands[i].helptext_brief);
-       }
-      printf("\nType 'help cmd' for help on a specific command\n");
+  if (!strlen(tok_buf)) {
+    printf("Olsrd host switch version %s\n", OHS_VERSION);
+    printf("Available commands:\n");
+
+    for (i = 0; ohs_commands[i].cmd; i++) {
+      if (ohs_commands[i].helptext_brief)
+        printf("\t%s - %s\n", ohs_commands[i].cmd, ohs_commands[i].helptext_brief);
     }
-  else
-    {
-      for(i = 0; ohs_commands[i].cmd; i++)
-       {
-         if(!strncmp(tok_buf, ohs_commands[i].cmd, strlen(ohs_commands[i].cmd)))
-           {
-             printf("Usage: %s\nDescription:\n%s\n",
-                    ohs_commands[i].syntax,
-                    ohs_commands[i].helptext_long);
-             return 1;
-           }
-       }
-
-      printf("Usage: help <command>\n");
+    printf("\nType 'help cmd' for help on a specific command\n");
+  } else {
+    for (i = 0; ohs_commands[i].cmd; i++) {
+      if (!strncmp(tok_buf, ohs_commands[i].cmd, strlen(ohs_commands[i].cmd))) {
+        printf("Usage: %s\nDescription:\n%s\n", ohs_commands[i].syntax, ohs_commands[i].helptext_long);
+        return 1;
+      }
     }
 
+    printf("Usage: help <command>\n");
+  }
+
   return i;
 }
 
@@ -461,62 +420,55 @@ ohs_cmd_log(const char *args)
 
   args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
 
-  if(strlen(tok_buf) &&
-     ((set = !strncmp(tok_buf, "set", strlen("set"))) ||
-      !strncmp(tok_buf, "unset", strlen("unset"))))
-    {
-        uint32_t new_bit = 0;
+  if (strlen(tok_buf) && ((set = !strncmp(tok_buf, "set", strlen("set"))) || !strncmp(tok_buf, "unset", strlen("unset")))) {
+    uint32_t new_bit = 0;
 
-        args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
+    args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
 
-        if(!strlen(tok_buf))
-            goto print_usage;
+    if (!strlen(tok_buf))
+      goto print_usage;
 
+    if (!strncmp(tok_buf, "CON", strlen("CON")))
+      new_bit = LOG_CONNECT;
+    else if (!strncmp(tok_buf, "FOR", strlen("FOR")))
+      new_bit = LOG_FORWARD;
+    else if (!strncmp(tok_buf, "LIN", strlen("LIN")))
+      new_bit = LOG_LINK;
 
-        if(!strncmp(tok_buf, "CON", strlen("CON")))
-           new_bit = LOG_CONNECT;
-        else if(!strncmp(tok_buf, "FOR", strlen("FOR")))
-           new_bit = LOG_FORWARD;
-        else if(!strncmp(tok_buf, "LIN", strlen("LIN")))
-           new_bit = LOG_LINK;
+    if (!new_bit)
+      goto print_usage;
 
-        if(!new_bit)
-           goto print_usage;
+    if (set)
+      logbits |= new_bit;
+    else
+      logbits &= ~new_bit;
 
-        if(set)
-           logbits |= new_bit;
-        else
-           logbits &= ~new_bit;
+    printf("%s log bit: 0x%08x, new log: 0x%08x\n", set ? "Setting" : "Removing", new_bit, logbits);
 
-        printf("%s log bit: 0x%08x, new log: 0x%08x\n", set ? "Setting" : "Removing",
-               new_bit, logbits);
+  } else {
+    if (strlen(tok_buf))
+      goto print_usage;
 
-    }
-  else
-    {
-      if(strlen(tok_buf))
-       goto print_usage;
-
-      printf("Log: (0x%08x) ", logbits);
-      if(logbits & LOG_CONNECT)
-       printf("CONNECT ");
-      if(logbits & LOG_FORWARD)
-       printf("FORWARD ");
-      if(logbits & LOG_LINK)
-       printf("LINK ");
-
-      printf("\n");
-    }
+    printf("Log: (0x%08x) ", logbits);
+    if (logbits & LOG_CONNECT)
+      printf("CONNECT ");
+    if (logbits & LOG_FORWARD)
+      printf("FORWARD ");
+    if (logbits & LOG_LINK)
+      printf("LINK ");
+
+    printf("\n");
+  }
   return 1;
 
- print_usage:
+print_usage:
   printf("Usage: log <[set|unset] [CONNECT|FORWARD|LINK]>\n");
   return 0;
 
 }
 
 int
-ohs_cmd_exit(const char *args __attribute__((unused)))
+ohs_cmd_exit(const char *args __attribute__ ((unused)))
 {
 
   printf("Exitting... bye-bye!\n");
@@ -532,16 +484,15 @@ ohs_parse_command(void)
   char *args;
   char cmd_token[20];
   int i;
-#if defined WIN32
+#if defined _WIN32
   char c;
   unsigned long Read;
   INPUT_RECORD InRec;
   KEY_EVENT_RECORD *KeyEventRec;
-#endif
+#endif /* defined _WIN32 */
 
-#if defined WIN32
-  if (!ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &InRec, sizeof (InRec), &Read))
-  {
+#if defined _WIN32
+  if (!ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &InRec, sizeof(InRec), &Read)) {
     fprintf(stderr, "ReadConsoleInput failed: %s\n", strerror(GetLastError()));
     return;
   }
@@ -556,8 +507,7 @@ ohs_parse_command(void)
 
   c = KeyEventRec->uChar.AsciiChar;
 
-  if (c == 8)
-  {
+  if (c == 8) {
     if (cmd_len == 0)
       return;
 
@@ -575,30 +525,27 @@ ohs_parse_command(void)
   fputc(c, stdout);
   fflush(stdout);
 
-  if (c != '\n' && c != '\r' && cmd_len < (int)sizeof (cmd_line) - 1)
+  if (c != '\n' && c != '\r' && cmd_len < (int)sizeof(cmd_line) - 1)
     cmd_line[cmd_len++] = (char)c;
 
   else
-#else
-  if(fgets(cmd_line, sizeof (cmd_line), stdin) == NULL) {
+#else /* defined _WIN32 */
+  if (fgets(cmd_line, sizeof(cmd_line), stdin) == NULL) {
     ohs_cmd_exit(NULL);
   }
 
-  for (cmd_len = 0; cmd_line[cmd_len] != 0 && cmd_line[cmd_len] != '\n';
-       cmd_len++);
-#endif
+  for (cmd_len = 0; cmd_line[cmd_len] != 0 && cmd_line[cmd_len] != '\n'; cmd_len++);
+#endif /* defined _WIN32 */
 
   {
     cmd_line[cmd_len] = 0;
     cmd_len = 0;
 
-    args = cmd_line + get_next_token(cmd_line, cmd_token, sizeof (cmd_token));
+    args = cmd_line + get_next_token(cmd_line, cmd_token, sizeof(cmd_token));
 
-    for (i = 0; ohs_commands[i].cmd != NULL; i++)
-    {
-      if (strcmp(cmd_token, ohs_commands[i].cmd) == 0)
-      {
-        if(ohs_commands[i].cmd_cb != NULL)
+    for (i = 0; ohs_commands[i].cmd != NULL; i++) {
+      if (strcmp(cmd_token, ohs_commands[i].cmd) == 0) {
+        if (ohs_commands[i].cmd_cb != NULL)
           ohs_commands[i].cmd_cb(args);
 
         else
@@ -608,7 +555,7 @@ ohs_parse_command(void)
       }
     }
 
-    if(ohs_commands[i].cmd == NULL)
+    if (ohs_commands[i].cmd == NULL)
       printf("%s: no such cmd!\n", cmd_token);
 
     printf("\n> ");