Added foundations for command interface and cleaned up
authorAndreas Tonnesen <andreto@olsr.org>
Mon, 30 May 2005 19:17:20 +0000 (19:17 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Mon, 30 May 2005 19:17:20 +0000 (19:17 +0000)
src/olsr_switch/Makefile
src/olsr_switch/commands.h [new file with mode: 0644]
src/olsr_switch/link_rules.c
src/olsr_switch/main.c
src/olsr_switch/ohs_cmd.c [new file with mode: 0644]
src/olsr_switch/ohs_cmd.h [new file with mode: 0644]
src/olsr_switch/olsr_host_switch.h

index 027eaca..ed97661 100644 (file)
@@ -2,7 +2,7 @@
 CC ?= gcc
 BINNAME = olsr_switch
 INCLUDES += -I./..
-CFLAGS += -O2 -g $(INCLUDES)
+CFLAGS += -O2 -g $(INCLUDES) -Wall
 LDFLAGS +=
 TOPDIR = ../../
 
diff --git a/src/olsr_switch/commands.h b/src/olsr_switch/commands.h
new file mode 100644 (file)
index 0000000..6fdf440
--- /dev/null
@@ -0,0 +1,70 @@
+
+/*
+ * The olsr.org Optimized Link-State Routing daemon(olsrd)
+ * Copyright (c) 2005, Andreas Tønnesen(andreto@olsr.org)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright 
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in 
+ *   the documentation and/or other materials provided with the 
+ *   distribution.
+ * * Neither the name of olsr.org, olsrd nor the names of its 
+ *   contributors may be used to endorse or promote products derived 
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Visit http://www.olsr.org for more information.
+ *
+ * If you find this software useful feel free to make a donation
+ * 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 $
+ */
+
+
+#ifndef _COMMAND
+#define _COMMAND
+
+#include "ohs_cmd.h"
+
+
+static struct ohs_command ohs_commands[] =
+  {
+    { "help", "help",
+      "Help on shell commands",
+      "Help on shell commands",
+      ohs_cmd_help
+    },
+    { "exit", "exit",
+      "Exits olsr host switch",
+      "Exits olsr host switch",
+      ohs_cmd_exit
+    },
+    { NULL, NULL,
+      NULL,
+      NULL,
+      NULL
+    }
+  };
+
+
+#endif
index 42f55f7..8d20edd 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: link_rules.c,v 1.1 2005/05/30 13:13:47 kattemat Exp $
+ * $Id: link_rules.c,v 1.2 2005/05/30 19:17:20 kattemat Exp $
  */
 
 #include "link_rules.h"
 #include "olsr_host_switch.h"
+#include <string.h>
 
 #define COMP_IP(ip1, ip2) (!memcmp(ip1, ip2, ipsize))
 
index fa57e15..efbd250 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.2 2005/05/30 14:32:00 kattemat Exp $
+ * $Id: main.c,v 1.3 2005/05/30 19:17:20 kattemat Exp $
  */
 
 /* olsrd host-switch daemon */
 #define close(x) closesocket(x)
 int __stdcall SignalHandler(unsigned long signal);
 #else
-static void
+void
 olsr_shutdown(int);
 #endif
 
 #include "olsr_host_switch.h"
 #include "link_rules.h"
+#include "ohs_cmd.h"
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <errno.h>
@@ -59,6 +60,9 @@ olsr_shutdown(int);
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
 
 static int srv_socket;
 
@@ -105,7 +109,7 @@ olsr_ip_to_string(union olsr_ip_addr *addr)
 int __stdcall
 SignalHandler(unsigned long signal)
 #else
-static void
+void
 ohs_close(int signal)
 #endif
 {
@@ -149,6 +153,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));
+
+  return 1;
 }
 
 int
@@ -183,6 +189,8 @@ ohs_delete_connection(struct ohs_connection *oc)
     }
   /* Free */
   free(oc);
+
+  return 0;
 }
 
 int
@@ -190,6 +198,7 @@ ohs_route_data(struct ohs_connection *oc)
 {
   struct ohs_connection *ohs_cs;
   ssize_t len;
+  int cnt = 0;
 
   /* Read data */
   if((len = recv(oc->socket, data_buffer, OHS_BUFSIZE, 0)) <= 0)
@@ -219,17 +228,17 @@ ohs_route_data(struct ohs_connection *oc)
          if((sent = send(ohs_cs->socket, data_buffer, len, 0)) != len)
            {
              printf("Error sending(buf %d != sent %d)\n", len, sent);
-           } 
+           }
+         cnt++;
        }
     }
 
-
+  return cnt;
 }
 
 int
 ohs_init_connect_sockets()
 {
-  int i;
   olsr_u32_t yes = 1;
   struct sockaddr_in sin;
 
@@ -265,16 +274,18 @@ ohs_init_connect_sockets()
   /* show that we are willing to listen */
   if (listen(srv_socket, 5) == -1) 
     {
-      printf("listen failed for socket: %s\n", i, strerror(errno));
+      printf("listen failed for socket: %s\n", strerror(errno));
       exit(0);
     }
-
+  return 1;
 }
 
+
 int
 ohs_configure()
 {
 
+  return 1;
 }
 
 void
@@ -282,12 +293,16 @@ ohs_listen_loop()
 {
   int n;
   fd_set ibits;
+  int fn_stdin = fileno(stdin);
 
-  printf("ohs_listen_loop\n");
+
+  printf("OHS command interper reading from STDIN\n");
+  printf("\n> ");
+  fflush(stdout);
 
   while(1)
     {
-      int i, high;
+      int high;
 
       struct ohs_connection *ohs_cs;
 
@@ -298,6 +313,12 @@ ohs_listen_loop()
       high = srv_socket;
       FD_SET(srv_socket, &ibits);
 
+
+      if(fn_stdin > high) 
+       high = fn_stdin;
+
+      FD_SET(fn_stdin, &ibits);
+
       /* Add clients */
       for(ohs_cs = ohs_conns; ohs_cs; ohs_cs = ohs_cs->next)
        {
@@ -355,7 +376,13 @@ ohs_listen_loop()
                  ohs_delete_connection(ohs_tmp);
            }
        }
-      
+
+      if(FD_ISSET(fn_stdin, &ibits))
+       {
+         ohs_parse_command(stdin);
+         printf("\n> ");
+         fflush(stdout);
+       }      
     }
 }
 
@@ -383,4 +410,5 @@ main(int argc, char *argv[])
 
   ohs_close(0);
 
+  return 1;
 }
diff --git a/src/olsr_switch/ohs_cmd.c b/src/olsr_switch/ohs_cmd.c
new file mode 100644 (file)
index 0000000..5d88383
--- /dev/null
@@ -0,0 +1,118 @@
+
+/*
+ * The olsr.org Optimized Link-State Routing daemon(olsrd)
+ * Copyright (c) 2005, Andreas Tønnesen(andreto@olsr.org)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright 
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in 
+ *   the documentation and/or other materials provided with the 
+ *   distribution.
+ * * Neither the name of olsr.org, olsrd nor the names of its 
+ *   contributors may be used to endorse or promote products derived 
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Visit http://www.olsr.org for more information.
+ *
+ * If you find this software useful feel free to make a donation
+ * 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 $
+ */
+
+#include "olsr_host_switch.h"
+#include "commands.h"
+#include <string.h>
+
+int
+ohs_cmd_help(FILE *handle)
+{
+  int i;
+
+  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("%s - %s\n", 
+              ohs_commands[i].cmd,
+              ohs_commands[i].helptext_brief);
+    }
+  return i;
+}
+
+int
+ohs_cmd_exit(FILE *handle)
+{
+
+  printf("Exitting... bye-bye!\n");
+
+#ifdef WIN32
+  SignalHandler(0);
+#else
+  ohs_close(0);
+#endif
+
+  return 0;
+}
+
+int
+ohs_parse_command(FILE *handle)
+{
+  char input_data[100];
+  int i;
+
+  fscanf(handle, "%s", input_data);
+
+  printf("ohs_parse_command: %s\n", input_data);
+  for(i = 0; ohs_commands[i].cmd; i++)
+    {
+      if(!strcmp(input_data, ohs_commands[i].cmd))
+       {
+         if(ohs_commands[i].cmd_cb)
+           {
+             ohs_commands[i].cmd_cb(handle);
+           }
+         else
+           {
+             printf("No action registered on cmd %s!\n", input_data);
+           }
+         break;
+       }
+    }
+  
+  if(!ohs_commands[i].cmd)
+    {
+      printf("%s: no such cmd!\n", input_data);
+    }
+
+  i = 0;
+  /* Drain */
+  while(fgetc(handle) != '\n')
+    {
+      i++;
+    }
+
+  return i;
+}
diff --git a/src/olsr_switch/ohs_cmd.h b/src/olsr_switch/ohs_cmd.h
new file mode 100644 (file)
index 0000000..92ee9f3
--- /dev/null
@@ -0,0 +1,68 @@
+
+/*
+ * The olsr.org Optimized Link-State Routing daemon(olsrd)
+ * Copyright (c) 2005, Andreas Tønnesen(andreto@olsr.org)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright 
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in 
+ *   the documentation and/or other materials provided with the 
+ *   distribution.
+ * * Neither the name of olsr.org, olsrd nor the names of its 
+ *   contributors may be used to endorse or promote products derived 
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Visit http://www.olsr.org for more information.
+ *
+ * If you find this software useful feel free to make a donation
+ * 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 $
+ */
+
+
+#ifndef _OHS_CMD
+#define _OHS_CMD
+
+#include <stdio.h>
+
+struct ohs_command
+{
+  char *cmd;
+  char *syntax;
+  char *helptext_brief;
+  char *helptext_long;
+  int (*cmd_cb)(FILE *);
+};
+
+int
+ohs_parse_command(FILE *);
+
+int
+ohs_cmd_help(FILE *);
+
+int
+ohs_cmd_exit(FILE *);
+
+
+#endif
index f53712e..97d3cb0 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.1 2005/05/30 13:13:47 kattemat Exp $
+ * $Id: olsr_host_switch.h,v 1.2 2005/05/30 19:17:20 kattemat Exp $
  */
 
 #ifndef _OLSR_HOST_SWITCH
@@ -69,4 +69,13 @@ struct ohs_connection
 
 extern int ipsize;
 
+
+#ifdef WIN32
+int __stdcall
+SignalHandler(unsigned long);
+#else
+void
+ohs_close(int);
+#endif
+
 #endif