More configuration updates
authorAndreas Tonnesen <andreto@olsr.org>
Tue, 19 Oct 2004 19:24:44 +0000 (19:24 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Tue, 19 Oct 2004 19:24:44 +0000 (19:24 +0000)
15 files changed:
Makefile
src/build_msg.c
src/cfgparser/olsrd_conf.c
src/cfgparser/olsrd_conf.h
src/cfgparser/oparse.y
src/configfile.c
src/defs.h
src/ifnet.h
src/interfaces.c
src/interfaces.h
src/ipc_frontend.c
src/linux/ifnet.c
src/local_hna_set.c
src/local_hna_set.h
src/main.c

index 976ee5b..35b6ffd 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -56,8 +56,8 @@ HDRS= src/defs.h src/interfaces.h src/packet.h src/build_msg.h \
        src/plugin.h src/socket_parser.h src/ifnet.h \
        src/kernel_routes.h src/log.h src/net_os.h \
        src/apm.h src/linux/tunnel.h src/scheduler.h \
+       src/olsr_cfg.h \
        $(CFGDIR)/oparse.h $(CFGDIR)/olsrd_conf.h \
-       $(CFGDIR)/olsrd_cfgparser.h \
        src/linux/net.h src/linux/link_layer.h
 
 all:   olsrd
index 9f1ece3..803cdea 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: build_msg.c,v 1.14 2004/10/18 13:13:36 kattemat Exp $
+ * $Id: build_msg.c,v 1.15 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
@@ -1118,39 +1118,37 @@ hna_build4(struct interface *ifp)
   /* preserve existing data in output buffer */
   union olsr_message *m;
   struct hnapair *pair;
-  struct local_hna_entry *h;
+  struct hna4_entry *h = olsr_cnf->hna4_entries;
 
   /* No hna nets */
-  if((olsr_cnf->ip_version != AF_INET) || (!ifp) || (local_hna4_set.next == &local_hna4_set))
+  if((olsr_cnf->ip_version != AF_INET) || (!ifp) || h == NULL)
     return;
     
   remainsize = net_outbuffer_bytes_left(ifp);
-
+  
   curr_size = 12; /* OLSR message header */
-
+  
   /* Send pending packet if not room in buffer */
   if(curr_size > remainsize)
     {
       net_output(ifp);
       remainsize = net_outbuffer_bytes_left(ifp);
     }
-
+  
   m = (union olsr_message *)msg_buffer;
-    
-
+  
+  
   /* Fill header */
   COPY_IP(&m->v4.originator, &main_addr);
   m->v4.hopcnt = 0;
   m->v4.ttl = MAX_TTL;
   m->v4.olsr_msgtype = HNA_MESSAGE;
   m->v4.olsr_vtime = ifp->valtimes.hna;
-
+  
 
   pair = m->v4.message.hna.hna_net;
-
-  for(h = local_hna4_set.next;
-      h != &local_hna4_set;
-      h = h->next)
+  
+  while(h)
     {
       if((curr_size + (2 * ipsize)) > remainsize)
        {
@@ -1166,10 +1164,11 @@ hna_build4(struct interface *ifp)
          net_output(ifp);
          remainsize = net_outbuffer_bytes_left(ifp);
        }
-      COPY_IP(&pair->addr, &h->A_network_addr);
-      COPY_IP(&pair->netmask, &h->A_netmask);
+      COPY_IP(&pair->addr, &h->net);
+      COPY_IP(&pair->netmask, &h->netmask);
       pair++;
       curr_size += (2 * ipsize);
+      h = h->next;
     }
 
   m->v4.seqno = htons(get_msg_seqno());
@@ -1199,10 +1198,10 @@ hna_build6(struct interface *ifp)
   union olsr_message *m;
   struct hnapair6 *pair6;
   union olsr_ip_addr tmp_netmask;
-  struct local_hna_entry *h;
+  struct hna6_entry *h = olsr_cnf->hna6_entries;
   
   /* No hna nets */
-  if((olsr_cnf->ip_version != AF_INET6) || (!ifp) || (local_hna6_set.next == &local_hna6_set))
+  if((olsr_cnf->ip_version != AF_INET6) || (!ifp) || h == NULL)
     return;
 
     
@@ -1229,9 +1228,7 @@ hna_build6(struct interface *ifp)
   pair6 = m->v6.message.hna.hna_net;
 
 
-  for(h = local_hna6_set.next;
-      h != &local_hna6_set;
-      h = h->next)
+  while(h)
     {
       if((curr_size + (2 * ipsize)) > remainsize)
        {
@@ -1247,18 +1244,19 @@ hna_build6(struct interface *ifp)
          net_output(ifp);
          remainsize = net_outbuffer_bytes_left(ifp);
        }
-
+      
       //printf("Adding %s\n", olsr_ip_to_string(&h->hna_net.addr));
-      COPY_IP(&pair6->addr, &h->A_network_addr);
-      olsr_prefix_to_netmask(&tmp_netmask, h->A_netmask.v6);
+      COPY_IP(&pair6->addr, &h->net);
+      olsr_prefix_to_netmask(&tmp_netmask, h->prefix_len);
       COPY_IP(&pair6->netmask, &tmp_netmask);
       pair6++;
       curr_size += (2 * ipsize);
+      h = h->next;
     }
   
   m->v6.olsr_msgsize = htons(curr_size);
   m->v6.seqno = htons(get_msg_seqno());
-
+  
   net_outbuffer_push(ifp, msg_buffer, curr_size);
   
   //printf("Sending HNA (%d bytes)...\n", outputsize);
index 6c7b71f..78d91b7 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsrd_conf.c,v 1.6 2004/10/18 13:13:37 kattemat Exp $
+ * $Id: olsrd_conf.c,v 1.7 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
@@ -164,22 +164,28 @@ olsrd_parse_cnf(char *filename)
   io->next = cnf->if_options;
   cnf->if_options = io;
 
-  /* Verify interface rulesets */
+  /* Verify and set up interface rulesets */
   in = cnf->interfaces;
 
   while(in)
     {
-      in->if_options = find_if_rule_by_name(cnf->if_options, in->config);
+      in->cnf = find_if_rule_by_name(cnf->if_options, in->config);
 
-      if(in->if_options == NULL)
+      if(in->cnf == NULL)
        {
          fprintf(stderr, "ERROR: Could not find a matching ruleset \"%s\" for %s\n", in->config, in->name);
          olsrd_free_cnf(cnf);
          exit(0);
        }
+      /* set various stuff */
+      in->index = cnf->ifcnt++;
+      in->configured = 0;
+      in->interf = NULL;
+      /* Calculate max jitter */
       in = in->next;
     }
 
+
   return cnf;
 }
 
@@ -368,9 +374,9 @@ olsrd_write_cnf(struct olsrd_config *cnf, char *fname)
   fprintf(fd, "# HNA IPv4 routes\n# syntax: netaddr netmask\n# Example Internet gateway:\n# 0.0.0.0 0.0.0.0\n\nHna4\n{\n");
   while(h4)
     {
-      in4.s_addr=h4->net;
+      in4.s_addr = h4->net.v4;
       fprintf(fd, "    %s ", inet_ntoa(in4));
-      in4.s_addr=h4->netmask;
+      in4.s_addr = h4->netmask.v4;
       fprintf(fd, "%s\n", inet_ntoa(in4));
       h4 = h4->next;
     }
@@ -655,9 +661,9 @@ olsrd_print_cnf(struct olsrd_config *cnf)
       printf("HNA4 entries:\n");
       while(h4)
        {
-         in4.s_addr=h4->net;
+         in4.s_addr = h4->net.v4;
          printf("\t%s/", inet_ntoa(in4));
-         in4.s_addr=h4->netmask;
+         in4.s_addr = h4->netmask.v4;
          printf("%s\n", inet_ntoa(in4));
 
          h4 = h4->next;
index 69fae77..05d3b7b 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsrd_conf.h,v 1.4 2004/10/18 13:13:37 kattemat Exp $
+ * $Id: olsrd_conf.h,v 1.5 2004/10/19 19:23:01 kattemat Exp $
  *
  */
 
@@ -28,7 +28,7 @@
 #define _OLSRD_CONF_H
 
 #include "olsr_protocol.h"
-#include "../olsrd_cfgparser.h"
+#include "../olsr_cfg.h"
 
 #define SOFTWARE_VERSION "0.1.1"
 
index e850f9c..5bcfc7f 100644 (file)
@@ -21,7 +21,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: oparse.y,v 1.6 2004/10/18 13:13:37 kattemat Exp $
+ * $Id: oparse.y,v 1.7 2004/10/19 19:23:01 kattemat Exp $
  *
  */
 
@@ -389,13 +389,13 @@ ihna4entry:     TOK_IP4_ADDR TOK_IP4_ADDR
       fprintf(stderr, "Failed converting IP address %s\n", $1->string);
       exit(EXIT_FAILURE);
     }
-  h->net = in.s_addr;
+  h->net.v4 = in.s_addr;
   if(inet_aton($2->string, &in) == 0)
     {
       fprintf(stderr, "Failed converting IP address %s\n", $1->string);
       exit(EXIT_FAILURE);
     }
-  h->netmask = in.s_addr;
+  h->netmask.v4 = in.s_addr;
   /* Queue */
   h->next = cnf->hna4_entries;
   cnf->hna4_entries = h;
index dc2b7b8..f348365 100644 (file)
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: configfile.c,v 1.8 2004/10/18 13:13:36 kattemat Exp $
+ * $Id: configfile.c,v 1.9 2004/10/19 19:23:00 kattemat Exp $
  *
  */
  
@@ -34,7 +34,7 @@
 #include <string.h>
 #include <stdlib.h>
 
-#include "olsrd_cfgparser.h"
+#include "olsr_cfg.h"
 
 /**
  *Funtion that tries to read and parse the config
 int
 read_config_file(char *filename)
 {
-  struct olsr_if *in;
-  union hna_netmask netmask;
-  struct hna4_entry *h4;
-  struct hna6_entry *h6;
 
   /*
    * NB - CHECK IPv6 MULTICAST!
@@ -64,483 +60,10 @@ read_config_file(char *filename)
       return -1;
     }
 
-  /* Add interfaces */
-  in = olsr_cnf->interfaces;
-  while(in)
-    {
-      queue_if(in->name, in->if_options);
-      in = in->next;
-    }
-
-  /* Add HNA4 entries */
-  h4 = olsr_cnf->hna4_entries;
-
-  while(h4)
-    {
-      netmask.v4 = h4->netmask;
-      add_local_hna4_entry((union olsr_ip_addr *)&h4->net, &netmask);
-      h4 = h4->next;
-    }
-
-  /* Add HNA6 entries */
-  h6 = olsr_cnf->hna6_entries;
-
-  while(h6)
-    {
-      netmask.v6 = h6->prefix_len;
-      add_local_hna6_entry(&h6->net, &netmask);
-      h6 = h6->next;
-    }
-
   /* Add plugins */
 
 
   return 0;
-
-#if 0
-  FILE *conf_file;
-  char line[CONFIG_MAX_LINESIZE];
-  char *linebuf, *firstbuf;
-  char tmp[FILENAME_MAX];
-  int ipv, prefix6, tmp_debug_level;
-  char addr[20], mask[20];
-  char addr6[50];
-  struct in_addr in;
-  struct in6_addr in6;
-  union olsr_ip_addr net;
-  union hna_netmask netmask;
-
-
-
-         /*
-          * IPv4 broadcast 255.255.255.255 or interface detection
-          */
-          if(strncmp(line, "IP4BROAD", 8) == 0)
-            {
-              sscanf(&line[8], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               {
-                 if (inet_aton(tmp, &in) == 0)
-                   {
-                     olsr_printf(2, "Invalid broadcast address! %s\nSkipping it!\n", tmp);
-                     continue;
-                   }
-
-                 bcast_set = 1;
-                
-                 memcpy(&bcastaddr.sin_addr, &in.s_addr, sizeof(olsr_u32_t));
-
-               }
-
-             olsr_printf(2, "IPv4 broadcast:            %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * IPv6 address to prioritize
-          */
-          if(strncmp(line, "IP6ADDRTYPE", 11) == 0)
-            {
-              sscanf(&line[11], "%s", tmp);
-              if(strncmp(tmp, "site-local", 10) == 0)
-               {
-                 ipv6_addrtype = IPV6_ADDR_SITELOCAL;
-               }
-              else
-               {
-                 if(strncmp(tmp, "global", 6) == 0)
-                   {
-                     ipv6_addrtype = 0;
-                   }
-                 else
-                   {
-                     fprintf(stderr, "Error parsing IPv6 type \"%s\" from configfile\n", tmp);
-                     exit(1);
-                   }
-               }
-
-             olsr_printf(2, "IPv6 addrtype:             %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * IPv6 multicast address for site local interfaces
-          */
-          if(strncmp(line, "IP6MULTI-SITE", 13) == 0)
-            {
-              sscanf(&line[13], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) == 0)
-               strncpy(ipv6_mult_site, OLSR_IPV6_MCAST_SITE_LOCAL, strlen(OLSR_IPV6_MCAST_SITE_LOCAL));
-             else
-               strncpy(ipv6_mult_site, tmp, strlen(tmp));
-
-             olsr_printf(2, "IPv6 multicast site-local: %s\n", ipv6_mult_site);
-
-              continue;
-            }
-
-
-         /*
-          * IPv6 multicast address for global interfaces
-          */
-          if(strncmp(line, "IP6MULTI-GLOBAL", 15) == 0)
-            {
-              sscanf(&line[15], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) == 0)
-               strncpy(ipv6_mult_global, OLSR_IPV6_MCAST_GLOBAL, strlen(OLSR_IPV6_MCAST_GLOBAL));
-             else
-               strncpy(ipv6_mult_global, tmp, strlen(tmp));
-
-             olsr_printf(2, "IPv6 multicast global:     %s\n", ipv6_mult_global);
-
-              continue;
-            }
-
-
-
-         /*
-          * Hello interval
-          */
-          if(strncmp(line, "HELLOINT", 8) == 0)
-            {
-              sscanf(&line[8], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[8], "%f", &hello_int);
-
-
-             olsr_printf(2, "Hello interval:            %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * Hello hold multiplier
-          */
-          if(strncmp(line, "HELLOMULTI", 10) == 0)
-            {
-              sscanf(&line[10], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[10], "%d", &neighbor_timeout_mult);
-
-
-             olsr_printf(2, "Hello multiplier:          %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * MID interval
-          */
-          if(strncmp(line, "MIDINT", 6) == 0)
-            {
-              sscanf(&line[6], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(tmp, "%f", &mid_int);
-
-
-             olsr_printf(2, "MID interval:              %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * MID hold multiplier
-          */
-          if(strncmp(line, "MIDMULTI", 8) == 0)
-            {
-              sscanf(&line[8], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(tmp, "%d", &hna_timeout_mult);
-
-
-             olsr_printf(2, "HNA multiplier:            %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * HNA interval
-          */
-          if(strncmp(line, "HNAINT", 6) == 0)
-            {
-              sscanf(&line[6], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(tmp, "%f", &hna_int);
-
-
-             olsr_printf(2, "HNA interval:              %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * HNA hold multiplier
-          */
-          if(strncmp(line, "HNAMULTI", 8) == 0)
-            {
-              sscanf(&line[8], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(tmp, "%d", &hna_timeout_mult);
-
-
-             olsr_printf(2, "HNA multiplier:            %s\n", tmp);
-
-              continue;
-            }
-
-
-
-         /*
-          * Hello non-wlan interval
-          */
-          if(strncmp(line, "NWHELLOINT", 10) == 0)
-            {
-              sscanf(&line[10], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               {
-                 sscanf(&line[10], "%f", &hello_int_nw);
-               }
-
-             olsr_printf(2, "Non-WLAN HELLO interval:   %s\n", tmp);
-
-              continue;
-            }
-
-         /*
-          * Hello hold multiplier non-WLAN
-          */
-          if(strncmp(line, "NWHELLOMULTI", 12) == 0)
-            {
-              sscanf(&line[12], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[12], "%d", &neighbor_timeout_mult_nw);
-
-
-             olsr_printf(2, "Hello multiplier non-WLAN: %s\n", tmp);
-
-              continue;
-            }
-
-
-
-         /*
-          * TC interval
-          */
-          if(strncmp(line, "TCINT", 5) == 0)
-            {
-              sscanf(&line[5], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[5], "%f", &tc_int);
-
-
-             olsr_printf(2, "TC interval:               %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * TC hold multiplier
-          */
-          if(strncmp(line, "TCMULTI", 7) == 0)
-            {
-              sscanf(&line[7], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[7], "%d", &topology_timeout_mult);
-
-
-             olsr_printf(2, "TC multiplier:             %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * Type Of Service
-          */
-          if(strncmp(line, "TOSVALUE", 8) == 0)
-            {
-              sscanf(&line[8], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[8], "%d", (int *)&tos);
-
-
-             olsr_printf(2, "TOS:                       %s\n", tmp);
-
-              continue;
-            }
-
-         /*
-          * Willingness
-          */
-          if(strncmp(line, "WILLINGNESS", 11) == 0)
-            {
-              sscanf(&line[11], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               {
-                 sscanf(&line[11], "%d", &my_willingness);
-                 if((0 > my_willingness) || (my_willingness > 7))
-                   {
-                     fprintf(stderr, "Error setting willingness! Bad value: %d\n", my_willingness);
-                   }
-                 else
-                   {
-                     willingness_set = 1;
-                   }
-               }
-
-             olsr_printf(2, "Willingness:               %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          * Willingness
-          */
-          if(strncmp(line, "IPC-CONNECT", 11) == 0)
-            {
-              sscanf(&line[11], "%s", tmp);
-              if(strncmp(tmp, "yes", 3) == 0)
-               {
-                 use_ipc = 1;
-               }
-             olsr_printf(2, "IPC connections:           %s\n", tmp);
-
-              continue;
-            }
-
-
-
-         /*
-          *Hysteresis usage
-          */
-          if(strncmp(line, "USE_HYSTERESIS", 14) == 0)
-            {
-              sscanf(&line[14], "%s", tmp);
-              if(strncmp(tmp, "yes", 3) == 0)
-               use_hysteresis = 1;
-              if(strncmp(tmp, "no", 2) == 0)
-               use_hysteresis = 0;
-
-             olsr_printf(2, "Use hysteresis:            %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          *Hysteresis scaling
-          */
-          if(strncmp(line, "HYST_SCALING", 12) == 0)
-            {
-              sscanf(&line[12], "%4s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[12], "%4f", &hyst_scaling);
-
-             olsr_printf(2, "Hyst scaling:              %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          *Hysteresis low threshold
-          */
-          if(strncmp(line, "HYST_THR_LOW", 12) == 0)
-            {
-              sscanf(&line[12], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[12], "%4f", &hyst_threshold_low);
-
-             olsr_printf(2, "Hyst threshold low:        %s\n", tmp);
-
-              continue;
-            }
-
-         /*
-          *Hysteresis high threshold
-          */
-          if(strncmp(line, "HYST_THR_HIGH", 13) == 0)
-            {
-              sscanf(&line[13], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[13], "%4f", &hyst_threshold_high);
-
-             olsr_printf(2, "Hyst threshold high:       %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          *Topology redundancy
-          */
-          if(strncmp(line, "TC_REDUNDANCY", 13) == 0)
-            {
-              sscanf(&line[13], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[13], "%d", &tc_redundancy);
-
-             olsr_printf(2, "TC redunanacy:             %s\n", tmp);
-
-              continue;
-            }
-
-
-         /*
-          *MPR redundancy
-          */
-          if(strncmp(line, "MPR_COVERAGE", 12) == 0)
-            {
-              sscanf(&line[12], "%s", tmp);
-              if(strncmp(tmp, "auto", 4) != 0)
-               sscanf(&line[12], "%d", &mpr_coverage);
-
-             olsr_printf(2, "MPR coverage:              %s\n", tmp);
-
-              continue;
-            }
-
-
-
-         /*
-          *PLUGIN
-          */
-          if(strncmp(line, "LOAD_PLUGIN", 11) == 0)
-            {
-              sscanf(&line[11], "%s", tmp);
-
-             olsr_add_plugin(tmp);
-
-             olsr_printf(2, "PLUGIN:                    %s\n", tmp);
-
-              continue;
-            }
-
-
-         //olsr_syslog(OLSR_LOG_ERR, "Could not parse config file(%s) line:\"%s\"", filename, line);
-
-         olsr_printf(1, "Could not parse config file(%s) line: %s", filename, line);
-       
-      else
-       olsr_printf(5, "Skipping: %s", line);
-    
-
-
-  fclose(conf_file);
-  return 0;
-
-#endif
 }
 
 
index 25c762d..007a31f 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: defs.h,v 1.15 2004/10/18 13:13:36 kattemat Exp $
+ * $Id: defs.h,v 1.16 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
@@ -45,7 +45,7 @@
 #include "process_routes.h" /* Needed for rt_entry */
 #include "net.h" /* IPaddr -> string conversions is used by everyone */
 #include "olsr.h" /* Everybody uses theese */
-#include "olsrd_cfgparser.h"
+#include "olsr_cfg.h"
 
 #define VERSION "0.4.8-pre"
 #define SOFTWARE_VERSION "olsr.org - " VERSION
@@ -152,7 +152,6 @@ extern struct sockaddr_in6 null_addr6;
 
 
 extern int del_gws;
-extern int inet_gw; /* Are we an internet gateway? */
 
 extern int minsize;
 
index fb27f25..d021f8b 100644 (file)
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: ifnet.h,v 1.7 2004/10/18 13:13:36 kattemat Exp $
+ * $Id: ifnet.h,v 1.8 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
@@ -36,6 +36,8 @@
 //#include <arpa/inet.h>
 #include <net/if.h>
 
+#include "olsr_cfg.h"
+
 int
 set_flag(char *, short);
 
@@ -43,10 +45,10 @@ void
 check_interface_updates(void *);
 
 int
-chk_if_changed(struct if_name *);
+chk_if_changed(struct olsr_if *);
 
 int
-chk_if_up(struct if_name *, int);
+chk_if_up(struct olsr_if *, int);
 
 #ifndef WIN32
 int
index 7c69104..03d700b 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: interfaces.c,v 1.7 2004/10/18 13:13:36 kattemat Exp $
+ * $Id: interfaces.c,v 1.8 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
@@ -27,6 +27,7 @@
 #include "interfaces.h"
 #include "ifnet.h"
 #include "scheduler.h"
+#include "configfile.h"
 
 /**
  *Do initialization of various data needed for
 int
 ifinit()
 {
-  struct if_name *tmp_if;
+  struct olsr_if *tmp_if;
 
 
   /* Initial values */
   ifnet = NULL;
-  nbinterf = 0;
 
   /*
    *Initializing addrsock struct to be
@@ -68,7 +68,7 @@ ifinit()
 
   olsr_printf(1, "\n ---- Interface configuration ---- \n\n");
   /* Run trough all interfaces immedeatly */
-  for(tmp_if = if_names; tmp_if != NULL; tmp_if = tmp_if->next)
+  for(tmp_if = olsr_cnf->interfaces; tmp_if != NULL; tmp_if = tmp_if->next)
     {
       chk_if_up(tmp_if, 1);    
     }
@@ -76,7 +76,7 @@ ifinit()
   /* register network interface update function with scheduler */
   olsr_register_scheduler_event(&check_interface_updates, NULL, 5.0, 0, NULL);
 
-  return nbinterf;
+  return (ifnet == NULL) ? 0 : 1;
 }
 
 
@@ -145,8 +145,6 @@ if_ifwithsock(int fd)
 }
 
 
-
-
 /**
  *Create a new interf_name struct using a given
  *name and insert it into the interface list.
@@ -156,15 +154,14 @@ if_ifwithsock(int fd)
  *@return nada
  */
 void
-queue_if(char *name, struct if_config_options *ico)
+queue_if(char *name)
 {
 
-  struct if_name *interf_n;
+  struct olsr_if *interf_n = olsr_cnf->interfaces;
 
   //printf("Adding interface %s\n", name);
 
   /* check if the inerfaces already exists */
-  interf_n = if_names;
   while(interf_n != NULL)
     {
       if(memcmp(interf_n->name, name, strlen(name)) == 0)
@@ -175,25 +172,23 @@ queue_if(char *name, struct if_config_options *ico)
       interf_n = interf_n->next;
     }
 
-  interf_n = olsr_malloc(sizeof(struct if_name), "queue interface");
+  interf_n = olsr_malloc(sizeof(struct olsr_if), "queue interface");
 
   /* strlen () does not return length including terminating /0 */
   interf_n->name = olsr_malloc(strlen(name) + 1, "queue interface name");
-  interf_n->cnf = ico;
-  interf_n->max_jitter = ico->hello_params.emission_interval / 4;
+  interf_n->cnf = get_default_ifcnf(olsr_cnf);
   interf_n->configured = 0;
   interf_n->interf = NULL;
-  interf_n->index = queued_ifs++;
+  interf_n->index = olsr_cnf->ifcnt++;
 
   strcpy(interf_n->name, name);
-  interf_n->next = if_names;
-  if_names = interf_n;
+  interf_n->next = olsr_cnf->interfaces;
+  olsr_cnf->interfaces = interf_n;
 
 }
 
 
 
-
 /**
  *Add an ifchange function. These functions are called on all (non-initial)
  *changes in the interface set.
index fe29928..ff9ffa3 100644 (file)
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: interfaces.h,v 1.9 2004/10/18 13:13:36 kattemat Exp $
+ * $Id: interfaces.h,v 1.10 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
@@ -93,22 +93,6 @@ struct interface
 
 #define OLSR_DEFAULT_MTU             1500
 
-
-struct if_name
-{
-  char *name;
-  int configured;
-  int index;
-  float max_jitter;
-  struct interface *interf;
-  struct if_config_options *cnf;
-  struct if_name *next;
-};
-
-struct if_name *if_names;
-
-int queued_ifs;
-
 #define        IFF_PASSIVE     0x200000        /* can't tell if up/down */
 #define        IFF_INTERFACE   0x400000        /* hardware interface */
 
@@ -153,7 +137,7 @@ struct      interface *
 if_ifwithaddr(union olsr_ip_addr *);
 
 void
-queue_if(char *, struct if_config_options *);
+queue_if(char *);
 
 int
 add_ifchgf(int (*f)(struct interface *, int));
index 6ddaa2d..f785c94 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: ipc_frontend.c,v 1.6 2004/10/18 13:13:37 kattemat Exp $
+ * $Id: ipc_frontend.c,v 1.7 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
@@ -432,7 +432,7 @@ ipc_send_net_info()
   /* HNAs */
   if(olsr_cnf->ip_version == AF_INET6)
     {
-      if(local_hna6_set.next == &local_hna6_set)
+      if(olsr_cnf->hna6_entries == NULL)
        net_msg->hnas = 0;
       else
        net_msg->hnas = 1;
@@ -440,7 +440,7 @@ ipc_send_net_info()
 
   if(olsr_cnf->ip_version == AF_INET)
     {
-      if(local_hna4_set.next == &local_hna4_set)
+      if(olsr_cnf->hna4_entries == NULL)
        net_msg->hnas = 0;
       else
        net_msg->hnas = 1;
index 9c4fa1f..006f712 100644 (file)
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: ifnet.c,v 1.11 2004/10/18 13:13:38 kattemat Exp $
+ * $Id: ifnet.c,v 1.12 2004/10/19 19:23:01 kattemat Exp $
  *
  */
 
@@ -97,13 +97,13 @@ set_flag(char *ifname, short flag)
 void
 check_interface_updates(void *foo)
 {
-  struct if_name *tmp_if;
+  struct olsr_if *tmp_if;
 
 #ifdef DEBUG
   olsr_printf(3, "Checking for updates in the interface set\n");
 #endif
 
-  for(tmp_if = if_names; tmp_if != NULL; tmp_if = tmp_if->next)
+  for(tmp_if = olsr_cnf->interfaces; tmp_if != NULL; tmp_if = tmp_if->next)
     {
 
       if(tmp_if->configured)
@@ -120,10 +120,10 @@ check_interface_updates(void *foo)
  * that is if it has been set down or the address
  * has been changed.
  *
- *@param iface the if_name struct describing the interface
+ *@param iface the olsr_if struct describing the interface
  */
 int
-chk_if_changed(struct if_name *iface)
+chk_if_changed(struct olsr_if *iface)
 {
   struct interface *ifp, *tmp_ifp;
   struct ifreq ifr;
@@ -485,12 +485,12 @@ chk_if_changed(struct if_name *iface)
  * Initializes a interface described by iface,
  * if it is set up and is of the correct type.
  *
- *@param iface the if_name struct describing the interface
+ *@param iface the olsr_if struct describing the interface
  *@param so the socket to use for ioctls
  *
  */
 int
-chk_if_up(struct if_name *iface, int debuglvl)
+chk_if_up(struct olsr_if *iface, int debuglvl)
 {
   struct interface ifs, *ifp;
   struct ifreq ifr;
index 8a7aa50..24961fb 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: local_hna_set.c,v 1.6 2004/10/18 13:13:37 kattemat Exp $
+ * $Id: local_hna_set.c,v 1.7 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
 #include "local_hna_set.h"
 
 
-int
-olsr_init_local_hna_set()
+void
+add_local_hna4_entry(union olsr_ip_addr *net, union olsr_ip_addr *mask)
 {
+  struct hna4_entry *new_entry;
 
-  inet_gw = 0;
-
-  local_hna4_set.next = &local_hna4_set;
-  local_hna4_set.prev = &local_hna4_set;
-  local_hna6_set.next = &local_hna6_set;
-  local_hna6_set.prev = &local_hna6_set;
+  new_entry = olsr_malloc(sizeof(struct hna4_entry), "Add local HNA entry 4");
+  
+  new_entry->net.v4 = net->v4;
+  new_entry->netmask.v4 = mask->v4;
 
-  return 1;
+  /* Queue */
+  new_entry->next = olsr_cnf->hna4_entries;
+  olsr_cnf->hna4_entries = new_entry;
 }
 
 
 void
-add_local_hna4_entry(union olsr_ip_addr *net, union hna_netmask *mask)
+add_local_hna6_entry(union olsr_ip_addr *net, olsr_u16_t prefix_len)
 {
-  struct local_hna_entry *new_entry;
-
-  if((net->v4 == 0) && (mask->v4 == 0))
-    inet_gw = 1;
-
-  new_entry = olsr_malloc(sizeof(struct local_hna_entry), "Add local HNA entry 4");
+  struct hna6_entry *new_entry;
 
-  memcpy(&new_entry->A_network_addr, net, sizeof(olsr_u32_t));
-  memcpy(&new_entry->A_netmask, mask, sizeof(olsr_u32_t));
+  new_entry = olsr_malloc(sizeof(struct hna6_entry), "Add local HNA entry 6");
+  
+  memcpy(&new_entry->net, net, sizeof(struct in6_addr));
+  prefix_len = prefix_len;
 
   /* Queue */
-
-  local_hna4_set.next->prev = new_entry;
-  new_entry->next = local_hna4_set.next;
-  local_hna4_set.next = new_entry;
-  new_entry->prev = &local_hna4_set;
+  new_entry->next = olsr_cnf->hna6_entries;
+  olsr_cnf->hna6_entries = new_entry;
 }
 
 
-void
-add_local_hna6_entry(union olsr_ip_addr *net, union hna_netmask *mask)
+int
+remove_local_hna4_entry(union olsr_ip_addr *net, union olsr_ip_addr *mask)
 {
-  struct local_hna_entry *new_entry;
+  struct hna4_entry *h4 = olsr_cnf->hna4_entries, *h4prev = NULL;
 
-  new_entry = olsr_malloc(sizeof(struct local_hna_entry), "Add local HNA entry 6");
-
-  memcpy(&new_entry->A_network_addr, net, sizeof(struct in6_addr));
-  memcpy(&new_entry->A_netmask, mask, sizeof(olsr_u16_t));
+  while(h4)
+    {
+      if((net->v4 == h4->net.v4) && 
+        (mask->v4 == h4->netmask.v4))
+       {
+         /* Dequeue */
+         if(h4prev == NULL)
+           olsr_cnf->hna4_entries = h4->next;
+         else
+           h4prev->next = h4->next;
 
-  /* Queue */
+         free(h4);
+         return 1;
+       }
+      h4prev = h4;
+      h4 = h4->next;
+    }
 
-  local_hna6_set.next->prev = new_entry;
-  new_entry->next = local_hna6_set.next;
-  local_hna6_set.next = new_entry;
-  new_entry->prev = &local_hna6_set;
+  return 0;
 }
 
 
+
 int
-remove_local_hna4_entry(union olsr_ip_addr *net, union hna_netmask *mask)
+remove_local_hna6_entry(union olsr_ip_addr *net, olsr_u16_t prefix_len)
 {
-  struct local_hna_entry *entry;
+  struct hna6_entry *h6 = olsr_cnf->hna6_entries, *h6prev = NULL;
 
-  if((net->v4 == 0) && (mask->v4 == 0))
-    inet_gw = 0;
-
-  for(entry = local_hna4_set.next; 
-      entry != &local_hna4_set;
-      entry = entry->next)
+  while(h6)
     {
-      if((net->v4 == entry->A_network_addr.v4) && 
-        (mask->v4 == entry->A_netmask.v4))
+      if((memcmp(net, &h6->net, ipsize) == 0) && 
+        (prefix_len == h6->prefix_len))
        {
-         entry->prev->next = entry->next;
-         entry->next->prev = entry->prev;
+         /* Dequeue */
+         if(h6prev == NULL)
+           olsr_cnf->hna6_entries = h6->next;
+         else
+           h6prev->next = h6->next;
 
-         free(entry);
+         free(h6);
          return 1;
        }
+      h6prev = h6;
+      h6 = h6->next;
     }
+
   return 0;
 }
 
 
 
 int
-remove_local_hna6_entry(union olsr_ip_addr *net, union hna_netmask *mask)
+check_inet_gw()
 {
-  struct local_hna_entry *entry;
+  struct hna4_entry *h4 = olsr_cnf->hna4_entries;
 
-  for(entry = local_hna6_set.next; 
-      entry != &local_hna6_set;
-      entry = entry->next)
+  if(olsr_cnf->ip_version == AF_INET)
     {
-      if((memcmp(net, &entry->A_network_addr, ipsize) == 0) && 
-        (mask->v6 == entry->A_netmask.v6))
+      while(h4)
        {
-         entry->prev->next = entry->next;
-         entry->next->prev = entry->prev;
-         
-         free(entry);
-         return 1;
+         if(h4->netmask.v4 == 0 && h4->net.v4 == 0)
+           return 1;
+         h4 = h4->next;
        }
+      return 0;
     }
   return 0;
-}
 
+}
index 27f5e8b..19bd421 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: local_hna_set.h,v 1.6 2004/10/09 22:32:47 kattemat Exp $
+ * $Id: local_hna_set.h,v 1.7 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
 #include "hna_set.h"
 
 
-struct local_hna_entry
-{
-  union olsr_ip_addr     A_network_addr;
-  union hna_netmask      A_netmask;
-  struct local_hna_entry *next;
-  struct local_hna_entry *prev;
-};
-
-
-struct local_hna_entry local_hna4_set;
-struct local_hna_entry local_hna6_set;
-
-extern size_t netmask_size;
-int inet_gw;
-
-
-int
-olsr_init_local_hna_set(void);
-
 void
-add_local_hna4_entry(union olsr_ip_addr *, union hna_netmask *);
+add_local_hna4_entry(union olsr_ip_addr *, union olsr_ip_addr *);
 
 void
-add_local_hna6_entry(union olsr_ip_addr *, union hna_netmask *);
+add_local_hna6_entry(union olsr_ip_addr *, olsr_u16_t);
+
+int
+remove_local_hna4_entry(union olsr_ip_addr *, union olsr_ip_addr *);
 
 int
-remove_local_hna4_entry(union olsr_ip_addr *, union hna_netmask *);
+remove_local_hna6_entry(union olsr_ip_addr *, olsr_u16_t);
 
 int
-remove_local_hna6_entry(union olsr_ip_addr *, union hna_netmask *);
+check_inet_gw(void);
 
 #endif
index c709be6..ae9b7a8 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: main.c,v 1.14 2004/10/18 13:13:37 kattemat Exp $
+ * $Id: main.c,v 1.15 2004/10/19 19:23:00 kattemat Exp $
  *
  */
 
@@ -280,18 +280,17 @@ main(int argc, char *argv[])
       if (strcmp(*argv, "-i") == 0) 
        {
          argv++, argc--;
-         queue_if(*argv, default_ifcnf);
+         queue_if(*argv);
          argv++, argc--;
 
          while((argc) && (**argv != '-'))
            {
-             queue_if(*argv, default_ifcnf);
+             queue_if(*argv);
              argv++; argc--;
            }
 
          continue;
        }
-
       /*
        * Set the hello interval to be used by olsrd.
        * 
@@ -456,7 +455,7 @@ main(int argc, char *argv[])
   /*
    *Interfaces need to be specified
    */
-  if(if_names == NULL)
+  if(olsr_cnf->interfaces == NULL)
     {
       fprintf(stderr, "OLSRD: no interfaces specified!\nuse the -i switch to specify interface(s)\nor set interface(s) in the configuration file!\n");
       print_usage();
@@ -607,7 +606,7 @@ main(int argc, char *argv[])
   olsr_load_plugins();
 
   /* Set up recieving tunnel if Inet gw */
-  if(use_tunnel && inet_gw)
+  if(use_tunnel && check_inet_gw())
     set_up_gw_tunnel(&main_addr);
 
   olsr_printf(1, "Main address: %s\n\n", olsr_ip_to_string(&main_addr));
@@ -723,16 +722,12 @@ set_default_values()
    * if not, exit_value is set by the function calling olsr_exit.
    */
 
-  if_names = NULL;
-
   max_jitter = 0;
   max_tc_vtime = 0;
   dup_hold_time = DUP_HOLD_TIME;
 
   sending_tc = 0;
 
-  queued_ifs = 0;
-
   will_int = 10 * HELLO_INTERVAL; /* Willingness update interval */
 
   llinfo = 0;
@@ -743,9 +738,6 @@ set_default_values()
   main_thread = pthread_self();
 #endif
 
-  /* local HNA set must be initialized before reading options */
-  olsr_init_local_hna_set();
-
   /* Gateway tunneling */
   use_tunnel = 0;
   inet_tnl_added = 0;