Added extended IPC options for config
authorAndreas Tonnesen <andreto@olsr.org>
Thu, 11 Nov 2004 21:14:18 +0000 (21:14 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Thu, 11 Nov 2004 21:14:18 +0000 (21:14 +0000)
src/cfgparser/olsrd_conf.c
src/cfgparser/oparse.y
src/cfgparser/oscan.lex
src/ipc_frontend.c
src/main.c
src/olsr_cfg.h

index dacb217..ce45834 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsrd_conf.c,v 1.15 2004/11/08 06:47:55 kattemat Exp $
+ * $Id: olsrd_conf.c,v 1.16 2004/11/11 21:14:17 kattemat Exp $
  *
  */
 
@@ -251,7 +251,8 @@ set_default_cnf(struct olsrd_config *cnf)
     cnf->allow_no_interfaces = DEF_ALLOW_NO_INTS;
     cnf->tos = DEF_TOS;
     cnf->willingness_auto = DEF_WILL_AUTO;
-    cnf->open_ipc = DEF_OPEN_IPC;
+    cnf->ipc_connections = DEF_IPC_CONNECTIONS;
+    cnf->open_ipc = cnf->ipc_connections ? OLSR_TRUE : OLSR_FALSE;
 
     cnf->use_hysteresis = DEF_USE_HYST;
     cnf->hysteresis_param.scaling = HYST_SCALING;
@@ -318,6 +319,9 @@ olsrd_write_cnf(struct olsrd_config *cnf, char *fname)
   struct olsr_if           *in = cnf->interfaces;
   struct plugin_entry      *pe = cnf->plugins;
   struct plugin_param      *pp;
+  struct ipc_host          *ih = cnf->ipc_hosts;
+  struct ipc_net           *ie = cnf->ipc_nets;
+
   char ipv6_buf[100];             /* buffer for IPv6 inet_htop */
   struct in_addr in4;
 
@@ -387,11 +391,27 @@ olsrd_write_cnf(struct olsrd_config *cnf, char *fname)
     fprintf(fd, "Willingness%d\n\n", cnf->willingness);
 
   /* IPC */
-  fprintf(fd, "# Allow processes like the GUI front-end\n# to connect to the daemon. 'yes' or 'no'\n\n");
-  if(cnf->open_ipc)
-    fprintf(fd, "IpcConnect\tyes\n\n");
-  else
-    fprintf(fd, "IpcConnect\tno\n\n");
+  fprintf(fd, "# Allow processes like the GUI front-end\n# to connect to the daemon.\n\n");
+  fprintf(fd, "IpcConnect\n{\n");
+  fprintf(fd, "   MaxConnections  %d\n\n", cnf->ipc_connections);
+
+  while(ih)
+    {
+      in4.s_addr = ih->host.v4;
+      fprintf(fd, "   Host          %s\n", inet_ntoa(in4));
+      ih = ih->next;
+    }
+  fprintf(fd, "\n");
+  while(ie)
+    {
+      in4.s_addr = ie->net.v4;
+      fprintf(fd, "   Net           %s ", inet_ntoa(in4));
+      in4.s_addr = ie->mask.v4;
+      fprintf(fd, "%s\n", inet_ntoa(in4));
+      ie = ie->next;
+    }
+
+  fprintf(fd, "}\n\n");
 
 
 
@@ -550,6 +570,8 @@ olsrd_print_cnf(struct olsrd_config *cnf)
   struct hna6_entry        *h6 = cnf->hna6_entries;
   struct olsr_if           *in = cnf->interfaces;
   struct plugin_entry      *pe = cnf->plugins;
+  struct ipc_host          *ih = cnf->ipc_hosts;
+  struct ipc_net           *ie = cnf->ipc_nets;
   char ipv6_buf[100];             /* buffer for IPv6 inet_htop */
   struct in_addr in4;
 
@@ -567,10 +589,24 @@ olsrd_print_cnf(struct olsrd_config *cnf)
   else
     printf("Willingness      : %d\n", cnf->willingness);
 
-  if(cnf->open_ipc)
-    printf("IPC              : ENABLED\n");
-  else
-    printf("IPC              : DISABLED\n");
+  printf("IPC connections  : %d\n", cnf->ipc_connections);
+
+  while(ih)
+    {
+      in4.s_addr = ih->host.v4;
+      printf("\tHost %s\n", inet_ntoa(in4));
+      ih = ih->next;
+    }
+  
+  while(ie)
+    {
+      in4.s_addr = ie->net.v4;
+      printf("\tNet %s/", inet_ntoa(in4));
+      in4.s_addr = ie->mask.v4;
+      printf("%s\n", inet_ntoa(in4));
+      ie = ie->next;
+    }
+
 
   printf("Pollrate         : %0.2f\n", cnf->pollrate);
 
index d220d81..44ee7a7 100644 (file)
@@ -21,7 +21,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: oparse.y,v 1.14 2004/11/07 20:09:12 tlopatic Exp $
+ * $Id: oparse.y,v 1.15 2004/11/11 21:14:18 kattemat Exp $
  *
  */
 
@@ -82,6 +82,10 @@ int yylex(void);
 %token TOK_PLNAME
 %token TOK_PLPARAM
 
+%token TOK_HOSTLABEL
+%token TOK_NETLABEL
+%token TOK_MAXIPC
+
 %token TOK_IP4BROADCAST
 %token TOK_IP6ADDRTYPE
 %token TOK_IP6MULTISITE
@@ -112,7 +116,6 @@ stmt:       idebug
           | bnoint
           | atos
           | awillingness
-          | bipccon
           | busehyst
           | fhystscale
           | fhystupper
@@ -126,6 +129,7 @@ stmt:       idebug
 
 block:      TOK_HNA4 hna4body
           | TOK_HNA6 hna6body
+          | TOK_IPCCON ipcbody
           | ifblock ifbody
           | plblock plbody
 ;
@@ -150,6 +154,18 @@ hna6stmt:  vcomment
          | ihna6entry
 ;
 
+ipcbody:    TOK_OPEN ipcstmts TOK_CLOSE
+;
+
+ipcstmts: | ipcstmts ipcstmt
+;
+
+ipcstmt:  vcomment
+          | imaxipc
+          | ipchost
+          | ipcnet
+;
+
 ifbody:     TOK_OPEN ifstmts TOK_CLOSE
 ;
 
@@ -182,6 +198,75 @@ plstmt:     plparam
 ;
 
 
+imaxipc: TOK_MAXIPC TOK_INTEGER
+{
+  cnf->ipc_connections = $2->integer;
+
+  cnf->open_ipc = cnf->ipc_connections ? OLSR_TRUE : OLSR_FALSE;
+
+  free($2);
+}
+;
+
+
+ipchost: TOK_HOSTLABEL TOK_IP4_ADDR
+{
+  struct in_addr in;
+  struct ipc_host *ipch;
+
+  if(PARSER_DEBUG) printf("\tIPC host: %s\n", $2->string);
+  
+  if(inet_aton($2->string, &in) == 0)
+    {
+      fprintf(stderr, "Failed converting IP address IPC %s\n", $2->string);
+      exit(EXIT_FAILURE);
+    }
+
+  ipch = malloc(sizeof(struct ipc_host));
+  ipch->host.v4 = in.s_addr;
+
+  ipch->next = cnf->ipc_hosts;
+  cnf->ipc_hosts = ipch;
+
+  free($2->string);
+  free($2);
+
+}
+;
+
+ipcnet: TOK_NETLABEL TOK_IP4_ADDR TOK_IP4_ADDR
+{
+  struct in_addr in1, in2;
+  struct ipc_net *ipcn;
+
+  if(PARSER_DEBUG) printf("\tIPC net: %s/%s\n", $2->string, $3->string);
+  
+  if(inet_aton($2->string, &in1) == 0)
+    {
+      fprintf(stderr, "Failed converting IP net IPC %s\n", $2->string);
+      exit(EXIT_FAILURE);
+    }
+
+  if(inet_aton($3->string, &in2) == 0)
+    {
+      fprintf(stderr, "Failed converting IP mask IPC %s\n", $3->string);
+      exit(EXIT_FAILURE);
+    }
+
+  ipcn = malloc(sizeof(struct ipc_net));
+  ipcn->net.v4 = in1.s_addr;
+  ipcn->mask.v4 = in2.s_addr;
+
+  ipcn->next = cnf->ipc_nets;
+  cnf->ipc_nets = ipcn;
+
+  free($2->string);
+  free($2);
+  free($3->string);
+  free($3);
+
+}
+;
 
 isetip4br: TOK_IP4BROADCAST TOK_IP4_ADDR
 {
@@ -191,7 +276,7 @@ isetip4br: TOK_IP4BROADCAST TOK_IP4_ADDR
 
   if(inet_aton($2->string, &in) == 0)
     {
-      fprintf(stderr, "Failed converting IP address %s\n", $1->string);
+      fprintf(stderr, "Failed converting IP address %s\n", $2->string);
       exit(EXIT_FAILURE);
     }
 
@@ -470,22 +555,6 @@ awillingness: TOK_WILLINGNESS TOK_INTEGER
 }
 ;
 
-bipccon: TOK_IPCCON TOK_BOOLEAN
-{
-  cnf->open_ipc = $2->boolean;
-
-  if(cnf->open_ipc)
-    {
-      if(PARSER_DEBUG) printf("IPC allowed\n");
-    }
-  else
-    {
-      if(PARSER_DEBUG) printf("IPC blocked\n");
-    }
-  free($2);
-
-}
-;
 
 
 busehyst: TOK_USEHYST TOK_BOOLEAN
index fbd8b65..1dab4ac 100644 (file)
@@ -21,7 +21,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: oscan.lex,v 1.9 2004/11/07 20:09:12 tlopatic Exp $
+ * $Id: oscan.lex,v 1.10 2004/11/11 21:14:18 kattemat Exp $
  *
  */
 
@@ -230,6 +230,20 @@ IPV6ADDR {IP6PAT1}|{IP6PAT2}|{IP6PAT3}|{IP6PAT4}|{IP6PAT5}|{IP6PAT6}|{IP6PAT7}|{
   return TOK_IP6TYPE;
 }
 
+"Host" {
+  yylval = NULL;
+  return TOK_HOSTLABEL;
+}
+
+"Net" {
+  yylval = NULL;
+  return TOK_NETLABEL;
+}
+
+"MaxConnections" {
+  yylval = NULL;
+  return TOK_MAXIPC;
+}
 
 "DebugLevel" {
   yylval = NULL;
index a0a0b0f..8f5b656 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: ipc_frontend.c,v 1.12 2004/11/05 14:33:31 tlopatic Exp $
+ * $Id: ipc_frontend.c,v 1.13 2004/11/11 21:14:17 kattemat Exp $
  *
  */
 
@@ -494,7 +494,7 @@ ipc_send_net_info()
     {
       olsr_printf(1, "(NETINFO)IPC connection lost!\n");
       close(ipc_connection);
-      olsr_cnf->open_ipc = 0;
+      //olsr_cnf->open_ipc = 0;
       return -1;
     }
 
index 1177636..d8dc993 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: main.c,v 1.34 2004/11/10 14:39:47 kattemat Exp $
+ * $Id: main.c,v 1.35 2004/11/11 21:14:17 kattemat Exp $
  *
  */
 
@@ -393,6 +393,7 @@ main(int argc, char *argv[])
       if (strcmp(*argv, "-ipc") == 0) 
        {
          argv++; argc--;
+         olsr_cnf->ipc_connections = 1;
          olsr_cnf->open_ipc = OLSR_TRUE;
          continue;
        }
index 30ab9a1..d9c05dc 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsr_cfg.h,v 1.7 2004/11/08 06:47:55 kattemat Exp $
+ * $Id: olsr_cfg.h,v 1.8 2004/11/11 21:14:17 kattemat Exp $
  *
  */
 
 #include "olsr_protocol.h"
 
 /* Default valuse not declared in olsr_protocol.h */
-#define DEF_POLLRATE       0.1
-#define DEF_WILL_AUTO      OLSR_TRUE
-#define DEF_ALLOW_NO_INTS  OLSR_TRUE
-#define DEF_TOS            16
-#define DEF_DEBUGLVL       1
-#define DEF_OPEN_IPC       OLSR_FALSE
-#define DEF_USE_HYST       OLSR_TRUE
-#define DEF_LQ_LEVEL       0
+#define DEF_POLLRATE        0.1
+#define DEF_WILL_AUTO       OLSR_TRUE
+#define DEF_ALLOW_NO_INTS   OLSR_TRUE
+#define DEF_TOS             16
+#define DEF_DEBUGLVL        1
+#define DEF_IPC_CONNECTIONS 0
+#define DEF_USE_HYST        OLSR_TRUE
+#define DEF_LQ_LEVEL        0
 
 
 #ifndef IPV6_ADDR_SITELOCAL
@@ -138,6 +138,19 @@ struct plugin_entry
   struct plugin_entry      *next;
 };
 
+struct ipc_host
+{
+  union olsr_ip_addr       host;
+  struct ipc_host          *next;
+};
+
+struct ipc_net
+{
+  union olsr_ip_addr       net;
+  union olsr_ip_addr       mask;
+  struct ipc_net           *next;
+};
+
 /*
  * The config struct
  */
@@ -150,6 +163,7 @@ struct olsrd_config
   olsr_u16_t               tos;
   olsr_bool                willingness_auto;
   olsr_u8_t                willingness;
+  int                      ipc_connections;
   olsr_bool                open_ipc;
   olsr_bool                use_hysteresis;
   struct hyst_param        hysteresis_param;
@@ -160,6 +174,8 @@ struct olsrd_config
   struct plugin_entry      *plugins;
   struct hna4_entry        *hna4_entries;
   struct hna6_entry        *hna6_entries;
+  struct ipc_host          *ipc_hosts;
+  struct ipc_net           *ipc_nets;
   struct olsr_if           *interfaces;
   olsr_u16_t               ifcnt;
 };