Help on commands added. Link list function added. Bugfixes
authorAndreas Tonnesen <andreto@olsr.org>
Tue, 31 May 2005 16:40:45 +0000 (16:40 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Tue, 31 May 2005 16:40:45 +0000 (16:40 +0000)
src/olsr_switch/commands.h
src/olsr_switch/ohs_cmd.c

index 4ae53c0..f0d7488 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: commands.h,v 1.3 2005/05/31 05:30:40 kattemat Exp $
+ * $Id: commands.h,v 1.4 2005/05/31 16:40:45 kattemat Exp $
  */
 
 
@@ -61,17 +61,17 @@ static struct ohs_command ohs_commands[] =
     },
     { "log", "log <set [type]>",
       "Displays or sets log bits",
-      "...",
+      "This command sets or clears various logbits. Available logbits are:\n FORWARD - display info about all traffic forwarding\n CONNECT - display info about all connections happening\n LINK - display all link lookup information\n",
       ohs_cmd_log
     },
-    { "list", "list",
-      "List all connected clients",
-      "...",
+    { "list", "list <clients|links>",
+      "List all connected clients or links",
+      "This command will list all the clients or all the links registered by olsr_switch. By default clients are listed.",
       ohs_cmd_list
     },
     { "link", "link <bi> srcIP dstIP [0-100]",
       "Manipulate links",
-      "...",
+      "This command is used for manipulating olsr links. The link quality is a number between 0-100 representing the chance in percentage for a packet to be forwarded on the link.\nTo make the link between 10.0.0.1 and 10.0.0.2 have 50% packetloss do:\nlink 10.0.0.1 10.0.0.2 50\nNote that this will only effect the unidirectional link 10.0.0.1 -> 10.0.0.2. To make the changes affect traffic in both directions do:\nlink bi 10.0.0.1 10.0.0.2 50\nTo completly block a link do:\nlink 10.0.0.1 10.0.0.2 0\nTo make all traffic pass(delete the entry) do:\nlink 10.0.0.1 10.0.0.2 100\nNote that \"bi\" can be used in all these examples. To list all manipulated links use 'list links'.\n",
       ohs_cmd_link
     },
     { NULL, NULL,
index ebaa8a4..89c54f6 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: ohs_cmd.c,v 1.8 2005/05/31 14:04:21 kattemat Exp $
+ * $Id: ohs_cmd.c,v 1.9 2005/05/31 16:40:45 kattemat Exp $
  */
 
 #include "olsr_host_switch.h"
@@ -71,8 +71,6 @@ get_arg_buf(FILE *handle, char *buf, size_t size)
     }
 
   buf[pos] = 0;
-
-  printf("Args: %s\n", buf);
 }
 
 static int
@@ -96,7 +94,8 @@ get_next_token(char *src, char *dst, size_t buflen)
     }
   dst[i] = 0;
 
-  printf("Extracted token: %s\n", dst);
+  if(strlen(dst))
+    printf("Extracted token: %s\n", dst);
   return i + j;
 }
 
@@ -196,7 +195,7 @@ ohs_cmd_link(FILE *handle, char *args)
       if(!link)
         {
           /* Create new link */
-            link = malloc(sizeof(link));
+            link = malloc(sizeof(struct ohs_ip_link));
             if(!link)
               OHS_OUT_OF_MEMORY("New link");
             /* Queue */
@@ -213,7 +212,7 @@ ohs_cmd_link(FILE *handle, char *args)
           if(!inv_link)
             {
               /* Create new link */
-              inv_link = malloc(sizeof(link));
+              inv_link = malloc(sizeof(struct ohs_ip_link));
               if(!inv_link)
                 OHS_OUT_OF_MEMORY("New link");
               /* Queue */
@@ -237,13 +236,45 @@ ohs_cmd_list(FILE *handle, char *args)
 {
   struct ohs_connection *oc = ohs_conns;
 
-  printf("All connected clients:\n");
+  args += get_next_token(args, tok_buf, TOK_BUF_SIZE);
+  
+  if(!strlen(tok_buf) || 
+     !strncmp(tok_buf, "clients", strlen("clients")))
+    {
+      printf("All connected clients:\n");
+      
+      while(oc)
+       {
+         printf("\t%s - Rx: %d Tx: %d LinkCnt: %d\n", olsr_ip_to_string(&oc->ip_addr), 
+                oc->rx, oc->tx, oc->linkcnt);
+         oc = oc->next;
+       }
+    }
+  else if(!strncmp(tok_buf, "links", strlen("links")))
+    {
+      printf("All configured links:\n");
+      
+      while(oc)
+       {
+         struct ohs_ip_link *links = oc->links;
 
-  while(oc)
+         while(links)
+           {
+             printf("\t%s => %s Quality: %d\n", 
+                    olsr_ip_to_string(&oc->ip_addr),
+                    olsr_ip_to_string(&links->dst),
+                    links->quality);
+
+             links = links->next;
+           }
+         oc = oc->next;
+       }
+    }
+  else
     {
-      printf("\t%s - Rx: %d Tx: %d LinkCnt: %d\n", olsr_ip_to_string(&oc->ip_addr), 
-             oc->rx, oc->tx, oc->linkcnt);
-      oc = oc->next;
+
+      printf("list [clients|links]");
+      return -1;
     }
 
   return 1;
@@ -254,17 +285,38 @@ ohs_cmd_help(FILE *handle, char *args)
 {
   int i;
 
-  printf("Olsrd host switch version %s\n", OHS_VERSION);
-  printf("Available commands:\n");
-
-  for(i = 0; ohs_commands[i].cmd; i++)
+  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");
+    }
+  else
     {
-      if(ohs_commands[i].helptext_brief)
-       printf("\t%s - %s\n", 
-              ohs_commands[i].cmd,
-              ohs_commands[i].helptext_brief);
+      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(NIY)\n");
+
   return i;
 }
 
@@ -354,7 +406,6 @@ ohs_parse_command(FILE *handle)
 
   get_arg_buf(handle, arg_buf, ARG_BUF_SIZE);
 
-  printf("ohs_parse_command: %s\n", input_data);
   for(i = 0; ohs_commands[i].cmd; i++)
     {
       if(!strcmp(input_data, ohs_commands[i].cmd))