Added some commands
authorAndreas Tonnesen <andreto@olsr.org>
Mon, 30 May 2005 19:57:49 +0000 (19:57 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Mon, 30 May 2005 19:57:49 +0000 (19:57 +0000)
src/olsr_switch/commands.h
src/olsr_switch/main.c
src/olsr_switch/ohs_cmd.c
src/olsr_switch/ohs_cmd.h
src/olsr_switch/olsr_host_switch.h

index 6fdf440..11523d3 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.1 2005/05/30 19:17:20 kattemat Exp $
+ * $Id: commands.h,v 1.2 2005/05/30 19:57:49 kattemat Exp $
  */
 
 
@@ -59,6 +59,16 @@ static struct ohs_command ohs_commands[] =
       "Exits olsr host switch",
       ohs_cmd_exit
     },
+    { "log", "log <set [type]>",
+      "Displays or sets log bits",
+      "...",
+      ohs_cmd_log
+    },
+    { "list", "list",
+      "List all connected clients",
+      "...",
+      ohs_cmd_list
+    },
     { NULL, NULL,
       NULL,
       NULL,
index efbd250..a72c21b 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: main.c,v 1.3 2005/05/30 19:17:20 kattemat Exp $
+ * $Id: main.c,v 1.4 2005/05/30 19:57:49 kattemat Exp $
  */
 
 /* olsrd host-switch daemon */
@@ -69,13 +69,15 @@ static int srv_socket;
 #define OHS_BUFSIZE 1500
 static olsr_u8_t data_buffer[OHS_BUFSIZE];
 
-static struct ohs_connection *ohs_conns;
+struct ohs_connection *ohs_conns;
 
 
 static int ip_version;
 int ipsize;
 static char ipv6_buf[100]; /* for address coversion */
 
+olsr_u32_t logbits;
+
 char *
 olsr_ip_to_string(union olsr_ip_addr *addr)
 {
@@ -127,7 +129,8 @@ ohs_init_new_connection(int s)
   struct ohs_connection *oc;
   olsr_u8_t new_addr[4];
 
-  printf("ohs_init_new_connection\n");
+  if(logbits & LOG_CONNECT)
+    printf("ohs_init_new_connection\n");
 
   /* Create new client node */
   oc = malloc(sizeof(struct ohs_connection));
@@ -152,7 +155,8 @@ ohs_init_new_connection(int s)
     }
   memcpy(&oc->ip_addr, new_addr, 4);
   oc->ip_addr.v4 = ntohl(oc->ip_addr.v4);
-  printf("IP: %s\n", olsr_ip_to_string(&oc->ip_addr));
+  if(logbits & LOG_CONNECT)
+    printf("IP: %s\n", olsr_ip_to_string(&oc->ip_addr));
 
   return 1;
 }
@@ -164,7 +168,8 @@ ohs_delete_connection(struct ohs_connection *oc)
   /* Close the socket */
   close(oc->socket);
 
-  printf("Removing entry %s\n", olsr_ip_to_string(&oc->ip_addr));
+  if(logbits & LOG_CONNECT)
+    printf("Removing entry %s\n", olsr_ip_to_string(&oc->ip_addr));
   /* De-queue */
   if(oc == ohs_conns)
     {
@@ -204,7 +209,8 @@ ohs_route_data(struct ohs_connection *oc)
   if((len = recv(oc->socket, data_buffer, OHS_BUFSIZE, 0)) <= 0)
     return -1;
 
-  printf("Received %d bytes from %s\n", len, olsr_ip_to_string(&oc->ip_addr));
+  if(logbits & LOG_FORWARD)
+    printf("Received %d bytes from %s\n", len, olsr_ip_to_string(&oc->ip_addr));
 
   /* Loop trough clients */
   for(ohs_cs = ohs_conns; ohs_cs; ohs_cs = ohs_cs->next)
@@ -221,9 +227,10 @@ ohs_route_data(struct ohs_connection *oc)
              printf("Error sending link address!\n");
            }
          /* Send data */
-         printf("Sending %d bytes %s=>%s\n", len, 
-                olsr_ip_to_string(&oc->ip_addr),
-                olsr_ip_to_string(&ohs_cs->ip_addr));
+         if(logbits & LOG_FORWARD)
+           printf("Sending %d bytes %s=>%s\n", len, 
+                  olsr_ip_to_string(&oc->ip_addr),
+                  olsr_ip_to_string(&ohs_cs->ip_addr));
 
          if((sent = send(ohs_cs->socket, data_buffer, len, 0)) != len)
            {
@@ -393,6 +400,7 @@ main(int argc, char *argv[])
 
   printf("olsrd host-switch daemon version %s starting\n", OHS_VERSION);
 
+  logbits = LOG_DEFAULT;
   ip_version = AF_INET;
   ipsize = 4;
 
index 5d88383..b5d5690 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: ohs_cmd.c,v 1.1 2005/05/30 19:17:20 kattemat Exp $
+ * $Id: ohs_cmd.c,v 1.2 2005/05/30 19:57:49 kattemat Exp $
  */
 
 #include "olsr_host_switch.h"
+#include "olsr_types.h"
 #include "commands.h"
 #include <string.h>
 
+#define ARG_BUF_SIZE 500
+static char arg_buf[ARG_BUF_SIZE];
+
+static void
+get_arg_buf(FILE *handle, char *buf, size_t size)
+{
+  char c = 0;
+  int pos = 0;
+
+  while(((c = fgetc(handle)) != '\n') &&
+       pos < (size - 2))
+    {
+      buf[pos] = c;
+      pos++;
+    }
+
+  buf[pos] = 0;
+
+  printf("Args: %s\n", buf);
+}
+
+
+int
+ohs_cmd_list(FILE *handle, char *args)
+{
+  struct ohs_connection *oc = ohs_conns;
+
+  printf("All connected clients:\n");
+
+  while(oc)
+    {
+      printf("\t%s\n", olsr_ip_to_string(&oc->ip_addr));
+      oc = oc->next;
+    }
+
+  return 1;
+}
+
 int
-ohs_cmd_help(FILE *handle)
+ohs_cmd_help(FILE *handle, char *args)
 {
   int i;
 
@@ -55,15 +94,72 @@ ohs_cmd_help(FILE *handle)
   for(i = 0; ohs_commands[i].cmd; i++)
     {
       if(ohs_commands[i].helptext_brief)
-       printf("%s - %s\n", 
+       printf("\t%s - %s\n", 
               ohs_commands[i].cmd,
               ohs_commands[i].helptext_brief);
     }
+  printf("\nType 'help cmd' for help on a specific command(NIY)\n");
   return i;
 }
 
 int
-ohs_cmd_exit(FILE *handle)
+ohs_cmd_log(FILE *handle, char *args)
+{
+  olsr_u8_t set = 0;
+
+  set = !strncmp(args, " set", strlen(" set"));
+
+  if(set || !strncmp(args, " unset", strlen(" unset")))
+    {
+      if(strlen(args) > (strlen("set") + 1))
+       {
+         olsr_u32_t new_bit = 0;
+         
+         if(!strncmp(&args[set ? 4 : 6], " CON", strlen(" CON")))
+           new_bit = LOG_CONNECT;
+         else if(!strncmp(&args[set ? 4 : 6], " FOR", strlen(" FOR")))
+           new_bit = LOG_CONNECT;
+         
+         if(!new_bit)
+           goto print_usage;
+
+         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);
+
+       }
+      else
+       {
+         goto print_usage;
+       }
+    }
+  else
+    {
+      if(strlen(args))
+       goto print_usage;
+
+      printf("Log: (0x%08x) ", logbits);
+      if(logbits & LOG_CONNECT)
+       printf("CONNECT ");
+      if(logbits & LOG_FORWARD)
+       printf("FORWARD ");
+
+      printf("\n");
+    }
+  return 1;
+
+ print_usage:
+  printf("Usage: log <[set|unset] [CONNECT|FORWARD]>\n");
+  return 0;
+
+}
+
+int
+ohs_cmd_exit(FILE *handle, char *args)
 {
 
   printf("Exitting... bye-bye!\n");
@@ -85,6 +181,8 @@ ohs_parse_command(FILE *handle)
 
   fscanf(handle, "%s", input_data);
 
+  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++)
     {
@@ -92,7 +190,7 @@ ohs_parse_command(FILE *handle)
        {
          if(ohs_commands[i].cmd_cb)
            {
-             ohs_commands[i].cmd_cb(handle);
+             ohs_commands[i].cmd_cb(handle, arg_buf);
            }
          else
            {
@@ -107,12 +205,6 @@ ohs_parse_command(FILE *handle)
       printf("%s: no such cmd!\n", input_data);
     }
 
-  i = 0;
-  /* Drain */
-  while(fgetc(handle) != '\n')
-    {
-      i++;
-    }
 
-  return i;
+  return 0;
 }
index 92ee9f3..3fbbf5a 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: ohs_cmd.h,v 1.1 2005/05/30 19:17:20 kattemat Exp $
+ * $Id: ohs_cmd.h,v 1.2 2005/05/30 19:57:49 kattemat Exp $
  */
 
 
@@ -52,17 +52,23 @@ struct ohs_command
   char *syntax;
   char *helptext_brief;
   char *helptext_long;
-  int (*cmd_cb)(FILE *);
+  int (*cmd_cb)(FILE *, char *);
 };
 
 int
 ohs_parse_command(FILE *);
 
 int
-ohs_cmd_help(FILE *);
+ohs_cmd_list(FILE *, char *);
 
 int
-ohs_cmd_exit(FILE *);
+ohs_cmd_help(FILE *, char *);
+
+int
+ohs_cmd_exit(FILE *, char *);
+
+int
+ohs_cmd_log(FILE *, char *);
 
 
 #endif
index 97d3cb0..5573efb 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsr_host_switch.h,v 1.2 2005/05/30 19:17:20 kattemat Exp $
+ * $Id: olsr_host_switch.h,v 1.3 2005/05/30 19:57:49 kattemat Exp $
  */
 
 #ifndef _OLSR_HOST_SWITCH
@@ -69,6 +69,13 @@ struct ohs_connection
 
 extern int ipsize;
 
+extern olsr_u32_t logbits;
+
+extern struct ohs_connection *ohs_conns;
+
+#define LOG_DEFAULT 0x0
+#define LOG_FORWARD 0x1
+#define LOG_CONNECT 0x3
 
 #ifdef WIN32
 int __stdcall
@@ -78,4 +85,7 @@ void
 ohs_close(int);
 #endif
 
+char *
+olsr_ip_to_string(union olsr_ip_addr *);
+
 #endif