Cleanup:
authorBernd Petrovitsch <bernd@firmix.at>
Mon, 5 Nov 2007 15:32:55 +0000 (15:32 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Mon, 5 Nov 2007 15:32:55 +0000 (15:32 +0000)
* Merged "struct hna4_entry" and "struct hna6_entry" into
  "struct local_hna_entry" (as "struct hna_entry" is a different thing)
  Both have almost the same data (IP address + netmask/prefix) so we use
  the quite new "struct olsr_ip_prefix" to store it.
  Also merged the "hna4" and "hna6" pointer in "struct olsr_config" -
  look at the global "olsr_cnf->ip_version".
* const'ified here and there
* added a olsr_ip_prefix_to_string() function

17 files changed:
lib/dot_draw/src/olsrd_dot_draw.c
lib/httpinfo/src/admin_interface.c
lib/httpinfo/src/olsrd_httpinfo.c
lib/nameservice/src/nameservice.c
lib/nameservice/src/nameservice.h
lib/txtinfo/src/olsrd_txtinfo.c
src/build_msg.c
src/cfgparser/cfgfile_gen.c
src/cfgparser/olsrd_conf.c
src/cfgparser/oparse.y
src/ipc_frontend.c
src/local_hna_set.c
src/local_hna_set.h
src/lq_route.c
src/net_olsr.c
src/net_olsr.h
src/olsr_cfg.h

index 0cdf83a..ba9d8c0 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_dot_draw.c,v 1.29 2007/11/03 23:11:40 bernd67 Exp $
+ * $Id: olsrd_dot_draw.c,v 1.30 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 /*
@@ -89,7 +89,7 @@ static int
 plugin_ipc_init(void);
 
 static char*
-olsr_netmask_to_string(union hna_netmask *mask);
+olsr_netmask_to_string(const union hna_netmask *mask);
 
 /* Event function to register with the sceduler */
 static int
@@ -99,13 +99,13 @@ static void
 ipc_action(int);
 
 static void
-ipc_print_neigh_link(struct neighbor_entry *neighbor);
+ipc_print_neigh_link(const struct neighbor_entry *neighbor);
 
 static void
-ipc_print_tc_link(struct tc_entry *entry, struct tc_edge_entry *dst_entry);
+ipc_print_tc_link(const struct tc_entry *entry, const struct tc_edge_entry *dst_entry);
 
 static void
-ipc_print_net(union olsr_ip_addr *, union olsr_ip_addr *, union hna_netmask *);
+ipc_print_net(const union olsr_ip_addr *, const union olsr_ip_addr *, const union hna_netmask *);
 
 static int
 ipc_send(const char *, int);
@@ -150,7 +150,7 @@ olsr_plugin_exit(void)
 
 
 static void
-ipc_print_neigh_link(struct neighbor_entry *neighbor)
+ipc_print_neigh_link(const struct neighbor_entry *neighbor)
 {
   char buf[256];
   const char* adr;
@@ -296,11 +296,6 @@ pcf_event(int changes_neighborhood,
   struct neighbor_entry *neighbor_table_tmp;
   struct tc_entry *tc;
   struct tc_edge_entry *tc_edge;
-  struct hna_entry *tmp_hna;
-  struct hna_net *tmp_net;
-  struct hna4_entry *hna4;
-  struct hna6_entry *hna6;
-  union hna_netmask hna_msk;
 
   res = 0;
 
@@ -330,51 +325,43 @@ pcf_event(int changes_neighborhood,
       } OLSR_FOR_ALL_TC_ENTRIES_END(tc);
 
       /* HNA entries */
-      for(index=0;index<HASHSIZE;index++)
-       {
-         tmp_hna = hna_set[index].next;
+      for(index=0;index<HASHSIZE;index++) {
+          struct hna_entry *tmp_hna;
          /* Check all entrys */
-         while(tmp_hna != &hna_set[index])
-           {
+         for (tmp_hna = hna_set[index].next; tmp_hna != &hna_set[index]; tmp_hna = tmp_hna->next) {
              /* Check all networks */
-             tmp_net = tmp_hna->networks.next;
-             
-             while(tmp_net != &tmp_hna->networks)
-               {
+              struct hna_net *tmp_net;
+             for (tmp_net = tmp_hna->networks.next; tmp_net != &tmp_hna->networks; tmp_net = tmp_net->next) {
                  ipc_print_net(&tmp_hna->A_gateway_addr, 
                                &tmp_net->A_network_addr, 
                                &tmp_net->A_netmask);
-                 tmp_net = tmp_net->next;
-               }
-             
-             tmp_hna = tmp_hna->next;
-           }
-       }
+              }
+          }
+      }
 
       /* Local HNA entries */
-      if (olsr_cnf->ip_version == AF_INET)
-       {
-       hna4 = olsr_cnf->hna4_entries;
-       while(hna4)
-        {
-         hna_msk.v4 = hna4->netmask.v4;
-         ipc_print_net(&olsr_cnf->interfaces->interf->ip_addr,
-                       &hna4->net,
-                       &hna_msk);
-         hna4 = hna4->next;
-        }
-       }
-      else
-       {
-       hna6 = olsr_cnf->hna6_entries;
-       while(hna6)
-        {
-         hna_msk.v6 = hna6->prefix_len;
-         ipc_print_net(&olsr_cnf->interfaces->interf->ip_addr,
-                       &hna6->net,
-                       &hna_msk);
-         hna6 = hna6->next;
-        }
+      if (olsr_cnf->ip_version == AF_INET) {
+          struct local_hna_entry *hna;
+          for (hna = olsr_cnf->hna_entries; hna != NULL; hna = hna->next) {
+              union olsr_ip_addr netmask;
+              union hna_netmask hna_msk;
+              //hna_msk.v4 = hna4->netmask.v4;
+              olsr_prefix_to_netmask(&netmask, hna->net.prefix_len);
+              hna_msk.v4 = netmask.v4;
+              ipc_print_net(&olsr_cnf->interfaces->interf->ip_addr,
+                            &hna->net.prefix,
+                            &hna_msk);
+              
+          }
+      } else {
+          struct local_hna_entry *hna;
+          for (hna = olsr_cnf->hna_entries; hna != NULL; hna = hna->next) {
+              union hna_netmask hna_msk;
+              hna_msk.v6 = hna->net.prefix_len;
+              ipc_print_net(&olsr_cnf->interfaces->interf->ip_addr,
+                            &hna->net.prefix,
+                            &hna_msk);
+          }
       }
 
       ipc_send_str("}\n\n");
@@ -390,7 +377,7 @@ pcf_event(int changes_neighborhood,
 }
 
 static void
-ipc_print_tc_link(struct tc_entry *entry, struct tc_edge_entry *dst_entry)
+ipc_print_tc_link(const struct tc_entry *entry, const struct tc_edge_entry *dst_entry)
 {
   char buf[256];
 
@@ -403,7 +390,7 @@ ipc_print_tc_link(struct tc_entry *entry, struct tc_edge_entry *dst_entry)
 
 
 static void
-ipc_print_net(union olsr_ip_addr *gw, union olsr_ip_addr *net, union hna_netmask *mask)
+ipc_print_net(const union olsr_ip_addr *gw, const union olsr_ip_addr *net, const union hna_netmask *mask)
 {
   const char *adr;
 
@@ -459,23 +446,19 @@ ipc_send(const char *data, int size)
 }
 
 static char*
-olsr_netmask_to_string(union hna_netmask *mask)
+olsr_netmask_to_string(const union hna_netmask *mask)
 {
   char *ret;
   struct in_addr in;
 
-  if(olsr_cnf->ip_version == AF_INET)
-    {
+  if(olsr_cnf->ip_version == AF_INET) {
       in.s_addr = mask->v4;
       ret = inet_ntoa(in);
-    }
-  else
-    {
+  } else {
       /* IPv6 */
       static char netmask[5];
       sprintf(netmask, "%d", mask->v6);
       ret = netmask;
-    }
-
+  }
   return ret;
 }
index 1d9f9ed..96f16a9 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: admin_interface.c,v 1.10 2007/10/20 20:41:04 bernd67 Exp $
+ * $Id: admin_interface.c,v 1.11 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 /*
@@ -77,8 +77,8 @@ build_admin_body(char *buf, olsr_u32_t bufsize __attribute__((unused)))
   size += snprintf(&buf[size], bufsize-size, admin_basic_setting_string,
                  "TOS:", "tos", 6, "TBD");
 
-  size += snprintf(&buf[size], bufsize-size, "</tr>\n");
-  size += snprintf(&buf[size], bufsize-size, "<tr>\n");
+  size += snprintf(&buf[size], bufsize-size, "</tr>\n"
+                                             "<tr>\n");
 
   size += snprintf(&buf[size], bufsize-size, admin_basic_setting_int,
                  "TC redundancy:", "tc_redundancy", 1, olsr_cnf->tc_redundancy);
@@ -120,28 +120,26 @@ build_admin_body(char *buf, olsr_u32_t bufsize __attribute__((unused)))
   
   size += snprintf(&buf[size], bufsize-size, admin_frame_mid);
 
-  if(olsr_cnf->ip_version == AF_INET) {
-    struct hna4_entry *hna4;      
-    for(hna4 = olsr_cnf->hna4_entries; hna4; hna4 = hna4->next)        {
-      const char * const net = olsr_ip_to_string((union olsr_ip_addr *)&hna4->net);
-      const char * const mask = olsr_ip_to_string((union olsr_ip_addr *)&hna4->netmask);
-      size += snprintf(&buf[size], bufsize-size,
-                       "<tr><td halign=\"middle\"><input type=\"checkbox\" name=\"del_hna%s*%s\" class=\"input_checkbox\"></td><td>%s</td><td>%s</td></tr>\n", 
-                       net,
-                       mask,
-                       net,
-                       mask);
-    }
-  } else {
-    struct hna6_entry *hna6;
-    for(hna6 = olsr_cnf->hna6_entries; hna6; hna6 = hna6->next) {
-      const char * const net = olsr_ip_to_string((union olsr_ip_addr *)&hna6->net);
-      size += snprintf(&buf[size], bufsize-size,
-                       "<tr><td halign=\"middle\"><input type=\"checkbox\" name=\"del_hna%s*%d\" class=\"input_checkbox\"></td><td>%s</td><td>%d</td></tr>\n", 
-                       net,
-                       hna6->prefix_len,
-                       net,
-                       hna6->prefix_len);
+  if(olsr_cnf->hna_entries) {
+    if(olsr_cnf->ip_version == AF_INET) {
+      struct local_hna_entry *hna;
+      
+      for(hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+        union olsr_ip_addr netmask;
+        olsr_prefix_to_netmask(&netmask, hna->net.prefix_len);
+        size += snprintf(&buf[size], bufsize-size,
+                         "<tr><td halign=\"middle\"><input type=\"checkbox\" name=\"del_hna%1$s*%2$s\" class=\"input_checkbox\"></td><td>%1$s</td><td>%2$s</td></tr>\n",
+                         olsr_ip_to_string(&hna->net.prefix),
+                         olsr_ip_to_string(&netmask));
+      }
+    } else {
+      struct local_hna_entry *hna;
+      for(hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+        size += snprintf(&buf[size], bufsize-size,
+                         "<tr><td halign=\"middle\"><input type=\"checkbox\" name=\"del_hna%1$s*%2$d\" class=\"input_checkbox\"></td><td>%1$s</td><td>%2$d</td></tr>\n",
+                         olsr_ip_to_string(&hna->net.prefix),
+                         hna->net.prefix_len);
+      }
     }
   }
   size += snprintf(&buf[size], bufsize-size, admin_frame_epilog);
index 75a75e1..1e2e417 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_httpinfo.c,v 1.81 2007/11/02 20:58:07 bernd67 Exp $
+ * $Id: olsrd_httpinfo.c,v 1.82 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 /*
@@ -843,15 +843,10 @@ static int build_config_body(char *buf, olsr_u32_t bufsize)
         size += snprintf(&buf[size], bufsize-size, "<td>LQ level: %d</td>\n", olsr_cnf->lq_level);
         size += snprintf(&buf[size], bufsize-size, "<td>LQ winsize: %d</td>\n", olsr_cnf->lq_wsize);
       }
-
     size += snprintf(&buf[size], bufsize-size, "</tr></table>\n");
 
     size += snprintf(&buf[size], bufsize-size, "<h2>Interfaces</h2>\n");
-
-
     size += snprintf(&buf[size], bufsize-size, "<table width=\"100%%\" border=\"0\">\n");
-
-
     for(ifs = olsr_cnf->interfaces; ifs; ifs = ifs->next)
       {
        struct interface *rifs = ifs->interf;
@@ -865,90 +860,69 @@ static int build_config_body(char *buf, olsr_u32_t bufsize)
        
        if(olsr_cnf->ip_version == AF_INET)
          {
-           size += snprintf(&buf[size], bufsize-size, "<tr><td>IP: %s</td>\n", 
-                           sockaddr_to_string(&rifs->int_addr));
-           size += snprintf(&buf[size], bufsize-size, "<td>MASK: %s</td>\n", 
-                           sockaddr_to_string(&rifs->int_netmask));
-           size += snprintf(&buf[size], bufsize-size, "<td>BCAST: %s</td></tr>\n",
-                           sockaddr_to_string(&rifs->int_broadaddr));
-           size += snprintf(&buf[size], bufsize-size, "<tr><td>MTU: %d</td>\n", rifs->int_mtu);
-           size += snprintf(&buf[size], bufsize-size, "<td>WLAN: %s</td>\n", rifs->is_wireless ? "Yes" : "No");
-           size += snprintf(&buf[size], bufsize-size, "<td>STATUS: UP</td></tr>\n");
+           size += snprintf(&buf[size], bufsize-size, "<tr><td>IP: %s</td>\n", sockaddr_to_string(&rifs->int_addr));
+           size += snprintf(&buf[size], bufsize-size, "<td>MASK: %s</td>\n", sockaddr_to_string(&rifs->int_netmask));
+           size += snprintf(&buf[size], bufsize-size, "<td>BCAST: %s</td></tr>\n", sockaddr_to_string(&rifs->int_broadaddr));
          }
        else
          {
            size += snprintf(&buf[size], bufsize-size, "<tr><td>IP: %s</td>\n", olsr_ip_to_string((union olsr_ip_addr *)&rifs->int6_addr.sin6_addr));
            size += snprintf(&buf[size], bufsize-size, "<td>MCAST: %s</td>\n", olsr_ip_to_string((union olsr_ip_addr *)&rifs->int6_multaddr.sin6_addr));
            size += snprintf(&buf[size], bufsize-size, "<td></td></tr>\n");
-           size += snprintf(&buf[size], bufsize-size, "<tr><td>MTU: %d</td>\n", rifs->int_mtu);
-           size += snprintf(&buf[size], bufsize-size, "<td>WLAN: %s</td>\n", rifs->is_wireless ? "Yes" : "No");
-           size += snprintf(&buf[size], bufsize-size, "<td>STATUS: UP</td></tr>\n");
          }         
+        size += snprintf(&buf[size], bufsize-size, "<tr><td>MTU: %d</td>\n", rifs->int_mtu);
+        size += snprintf(&buf[size], bufsize-size, "<td>WLAN: %s</td>\n", rifs->is_wireless ? "Yes" : "No");
+        size += snprintf(&buf[size], bufsize-size, "<td>STATUS: UP</td></tr>\n");
       }
-
     size += snprintf(&buf[size], bufsize-size, "</table>\n");
 
-    if(olsr_cnf->allow_no_interfaces)
-      size += snprintf(&buf[size], bufsize-size, "<em>Olsrd is configured to run even if no interfaces are available</em><br>\n");
-    else
-      size += snprintf(&buf[size], bufsize-size, "<em>Olsrd is configured to halt if no interfaces are available</em><br>\n");
+    size += snprintf(&buf[size], bufsize-size,
+                     "<em>Olsrd is configured to %s if no interfaces are available</em><br>\n",
+                     olsr_cnf->allow_no_interfaces ? "run even" : "halt");
 
     size += snprintf(&buf[size], bufsize-size, "<h2>Plugins</h2>\n");
-
     size += snprintf(&buf[size], bufsize-size, "<table width=\"100%%\" border=\"0\"><tr><th>Name</th><th>Parameters</th></tr>\n");
-
     for(pentry = olsr_cnf->plugins; pentry; pentry = pentry->next)
       {
-       size += snprintf(&buf[size], bufsize-size, "<tr><td>%s</td>\n", pentry->name);
-
-       size += snprintf(&buf[size], bufsize-size, "<td><select>\n");
-       size += snprintf(&buf[size], bufsize-size, "<option>KEY, VALUE</option>\n");
+       size += snprintf(&buf[size], bufsize-size,
+                         "<tr><td>%s</td>\n"
+                         "<td><select>\n"
+                         "<option>KEY, VALUE</option>\n",
+                         pentry->name);
 
        for(pparam = pentry->params; pparam; pparam = pparam->next)
          {
-           size += snprintf(&buf[size], bufsize-size, "<option>\"%s\", \"%s\"</option>\n",
-                           pparam->key,
-                           pparam->value);
+           size += snprintf(&buf[size], bufsize-size, "<option>\"%s\", \"%s\"</option>\n", pparam->key, pparam->value);
          }
        size += snprintf(&buf[size], bufsize-size, "</select></td></tr>\n");
 
       }
-
     size += snprintf(&buf[size], bufsize-size, "</table>\n");
 
     size += section_title(&buf[size], bufsize-size, "Announced HNA entries");
-
-    if((olsr_cnf->ip_version == AF_INET) && (olsr_cnf->hna4_entries))
-      {
-       struct hna4_entry *hna4;
-       
-       size += snprintf(&buf[size], bufsize-size,
-                         "<tr><th>Network</th><th>Netmask</th></tr>\n");
-       
-       for(hna4 = olsr_cnf->hna4_entries; hna4; hna4 = hna4->next)
-         {
-           size += snprintf(&buf[size], bufsize-size, "<tr><td>%s</td><td>%s</td></tr>\n", 
-                           olsr_ip_to_string(&hna4->net),
-                           olsr_ip_to_string(&hna4->netmask));
-         }
-      } 
-   else if((olsr_cnf->ip_version == AF_INET6) && (olsr_cnf->hna6_entries))
-      {
-       struct hna6_entry *hna6;
-       
-       size += snprintf(&buf[size], bufsize-size,
-                         "<tr><th>Network</th><th>Prefix length</th></tr>\n");
-       
-       for(hna6 = olsr_cnf->hna6_entries; hna6; hna6 = hna6->next)
-         {
-           size += snprintf(&buf[size], bufsize-size, "<tr><td>%s</td><td>%d</td></tr>\n", 
-                           olsr_ip_to_string(&hna6->net),
-                           hna6->prefix_len);
-         }
-       
+    if(olsr_cnf->hna_entries) {
+      struct local_hna_entry *hna;
+      if(olsr_cnf->ip_version == AF_INET) {
+       size += snprintf(&buf[size], bufsize-size, "<tr><th>Network</th><th>Netmask</th></tr>\n");
+       for(hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+            union olsr_ip_addr netmask;
+            olsr_prefix_to_netmask(&netmask, hna->net.prefix_len);
+           size += snprintf(&buf[size], bufsize-size,
+                             "<tr><td>%s</td><td>%s</td></tr>\n", 
+                           olsr_ip_to_string(&hna->net.prefix),
+                           olsr_ip_to_string(&netmask));
+        }
+      } else {
+       size += snprintf(&buf[size], bufsize-size, "<tr><th>Network</th><th>Prefix length</th></tr>\n");
+       for(hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+          size += snprintf(&buf[size], bufsize-size,
+                           "<tr><td>%s</td><td>%d</td></tr>\n", 
+                           olsr_ip_to_string(&hna->net.prefix),
+                           hna->net.prefix_len);
+        }
       }
+    }
     size += snprintf(&buf[size], bufsize-size, "</table>\n");
-
     return size;
 }
 
index f10eeb3..ef679d5 100644 (file)
@@ -31,7 +31,7 @@
  *
  */
 
-/* $Id: nameservice.c,v 1.33 2007/11/02 20:58:07 bernd67 Exp $ */
+/* $Id: nameservice.c,v 1.34 2007/11/05 15:32:55 bernd67 Exp $ */
 
 /*
  * Dynamic linked library for UniK OLSRd
@@ -1238,10 +1238,9 @@ free_name_entry_list(struct name_entry **list)
  * or inside a HNA which we have configured 
  */
 olsr_bool
-allowed_ip(union olsr_ip_addr *addr)
+allowed_ip(const union olsr_ip_addr *addr)
 {
-       struct hna4_entry *hna4;
-       struct hna6_entry *hna6;
+       struct local_hna_entry *hna;
        struct interface *iface;
        union olsr_ip_addr tmp_ip, tmp_msk;
        
@@ -1257,34 +1256,35 @@ allowed_ip(union olsr_ip_addr *addr)
        }
        
        if (olsr_cnf->ip_version == AF_INET) {
-               for (hna4 = olsr_cnf->hna4_entries; hna4; hna4 = hna4->next)
+               for (hna = olsr_cnf->hna_entries; hna; hna = hna->next)
                {
-                       OLSR_PRINTF(6, "HNA %s/%s\n", 
-                               olsr_ip_to_string(&hna4->net),
-                               olsr_ip_to_string(&hna4->netmask));
-       
-                       if ( hna4->netmask.v4 != 0 &&
-                           (addr->v4 & hna4->netmask.v4) == hna4->net.v4 ) {
+            union olsr_ip_addr netmask;
+                       OLSR_PRINTF(6, "HNA %s/%d\n", 
+                               olsr_ip_to_string(&hna->net.prefix),
+                               hna->net.prefix_len);
+                       if ( hna->net.prefix_len == 0 )
+                               continue;
+
+            olsr_prefix_to_netmask(&netmask, hna->net.prefix_len);
+                       if ((addr->v4 & netmask.v4) == hna->net.prefix.v4) {
                                OLSR_PRINTF(6, "MATCHED\n");
                                return OLSR_TRUE;
                        }
                }
        } else {
-               int i;
-
-               for (hna6 = olsr_cnf->hna6_entries; hna6; hna6 = hna6->next)
+               for (hna = olsr_cnf->hna_entries; hna; hna = hna->next)
                {
+                       int i;
                        OLSR_PRINTF(6, "HNA %s/%d\n", 
-                               olsr_ip_to_string(&hna6->net),
-                               hna6->prefix_len);
-                       if ( hna6->prefix_len == 0 )
+                               olsr_ip_to_string(&hna->net.prefix),
+                               hna->net.prefix_len);
+                       if ( hna->net.prefix_len == 0 )
                                continue;
-                       olsr_prefix_to_netmask(&tmp_msk, hna6->prefix_len);
+                       olsr_prefix_to_netmask(&tmp_msk, hna->net.prefix_len);
                        for (i = 0; i < 16; i++) {
-                               tmp_ip.v6.s6_addr[i] = addr->v6.s6_addr[i] &
-                                       tmp_msk.v6.s6_addr[i];
+                               tmp_ip.v6.s6_addr[i] = addr->v6.s6_addr[i] & tmp_msk.v6.s6_addr[i];
                        }
-                       if (COMP_IP(&tmp_ip, &hna6->net)) {
+                       if (COMP_IP(&tmp_ip, &hna->net)) {
                                OLSR_PRINTF(6, "MATCHED\n");
                                return OLSR_TRUE;
                        }
@@ -1298,7 +1298,7 @@ allowed_ip(union olsr_ip_addr *addr)
  * necessary to avaid names like "0.0.0.0 google.de\n etc"
  */
 olsr_bool
-is_name_wellformed(char *name) {
+is_name_wellformed(const char *name) {
        return regexec(&regex_t_name, name, 1, &regmatch_t_name, 0) == 0 ;
 }
 
@@ -1308,7 +1308,7 @@ is_name_wellformed(char *name) {
  * or ip whithin the service is allowed
  */
 olsr_bool
-allowed_service(char *service_line)
+allowed_service(const char *service_line)
 {
        /* the call of is_service_wellformed generates the submatches stored in regmatch_t_service
         * these are then used by allowed_hostname_or_ip_in_service
@@ -1323,7 +1323,7 @@ allowed_service(char *service_line)
 }
 
 olsr_bool
-allowed_hostname_or_ip_in_service(char *service_line, regmatch_t *hostname_or_ip_match) 
+allowed_hostname_or_ip_in_service(const char *service_line, const regmatch_t *hostname_or_ip_match) 
 {
        char *hostname_or_ip;
        union olsr_ip_addr olsr_ip;
@@ -1366,7 +1366,7 @@ allowed_hostname_or_ip_in_service(char *service_line, regmatch_t *hostname_or_ip
  * which is given in the regex regex_t_service
  */
 olsr_bool
-is_service_wellformed(char *service_line)
+is_service_wellformed(const char *service_line)
 {
        return regexec(&regex_t_service, service_line, pmatch_service, regmatch_t_service, 0) == 0;
 }
@@ -1375,7 +1375,7 @@ is_service_wellformed(char *service_line)
  * check if the latlot matches the syntax 
  */
 olsr_bool
-is_latlon_wellformed(char *latlon_line)
+is_latlon_wellformed(const char *latlon_line)
 {
        int hna = -1;
        float a = 0.0, b = 0.0;
@@ -1388,24 +1388,14 @@ is_latlon_wellformed(char *latlon_line)
  */
 olsr_bool get_isdefhna_latlon(void)
 {
-       olsr_bool ret = OLSR_FALSE;
-       if (AF_INET == olsr_cnf->ip_version)
-       {
-               struct hna4_entry *hna4;
-               for(hna4 = olsr_cnf->hna4_entries; hna4; hna4 = hna4->next)
-               {
-                       if (0 == hna4->netmask.v4) ret = OLSR_TRUE;
-               }
-       }
-       else
+    struct local_hna_entry *hna;
+    for(hna = olsr_cnf->hna_entries; hna; hna = hna->next)
        {
-               struct hna6_entry *hna6;
-               for(hna6 = olsr_cnf->hna6_entries; hna6; hna6 = hna6->next)
-               {
-                       if (0 == hna6->prefix_len) ret = OLSR_TRUE;
-               }
+               if (0 == hna->net.prefix_len) {
+            return OLSR_TRUE;
+        }
        }
-       return ret;
+       return OLSR_FALSE;
 }
 
 /**
index e72c974..25a4c5c 100644 (file)
@@ -29,7 +29,7 @@
  *
  */
 
-/* $Id: nameservice.h,v 1.14 2007/10/05 20:24:47 bernd67 Exp $ */
+/* $Id: nameservice.h,v 1.15 2007/11/05 15:32:55 bernd67 Exp $ */
  
 /*
  * Dynamic linked library for UniK OLSRd
@@ -138,7 +138,7 @@ void
 insert_new_name_in_list(union olsr_ip_addr *originator, struct db_entry **this_list, struct name *from_packet, olsr_bool *this_table_changed, double vtime);
 
 olsr_bool
-allowed_hostname_or_ip_in_service(char *service_line, regmatch_t *hostname_or_ip);
+allowed_hostname_or_ip_in_service(const char *service_line, const regmatch_t *hostname_or_ip);
 
 void
 update_name_entry(union olsr_ip_addr *, struct namemsg *, int, double);
@@ -159,22 +159,22 @@ void
 free_name_entry_list(struct name_entry **list);
 
 olsr_bool
-allowed_ip(union olsr_ip_addr *addr);
+allowed_ip(const union olsr_ip_addr *addr);
 
 olsr_bool
-allowed_service(char *service_line);
+allowed_service(const char *service_line);
 
 olsr_bool
-is_name_wellformed(char *service_line);
+is_name_wellformed(const char *service_line);
 
 olsr_bool
-is_service_wellformed(char *service_line);
+is_service_wellformed(const char *service_line);
 
 olsr_bool
-is_service_wellformed(char *service_line);
+is_service_wellformed(const char *service_line);
 
 olsr_bool
-is_latlon_wellformed(char *latlon_line);
+is_latlon_wellformed(const char *latlon_line);
 
 olsr_bool
 get_isdefhna_latlon(void);
index da853d0..5bda205 100644 (file)
@@ -40,7 +40,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_txtinfo.c,v 1.13 2007/11/02 20:58:07 bernd67 Exp $
+ * $Id: olsrd_txtinfo.c,v 1.14 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 /*
@@ -401,25 +401,29 @@ static void ipc_print_hna(void)
     olsr_u8_t index;
     struct hna_entry *tmp_hna;
     struct hna_net *tmp_net;
-    struct hna4_entry *hna4;
-    struct hna6_entry *hna6;
+    struct local_hna_entry *hna;
 
     size = 0;
 
     ipc_sendf("Table: HNA\nNetwork\tNetmask\tGateway\n");
 
     /* Announced HNA entries */
-    for(hna4 = olsr_cnf->hna4_entries; hna4; hna4 = hna4->next) {
-        ipc_sendf("%s\t%s\t%s\n",
-                  olsr_ip_to_string(&hna4->net),
-                  olsr_ip_to_string(&hna4->netmask),
-                  olsr_ip_to_string(&olsr_cnf->main_addr));
-    }
-    for(hna6 = olsr_cnf->hna6_entries; hna6; hna6 = hna6->next) {
-        ipc_sendf("%s\t%d\t%s\n",
-                  olsr_ip_to_string(&hna6->net),
-                  hna6->prefix_len,
-                  olsr_ip_to_string(&olsr_cnf->main_addr));
+    if (olsr_cnf->ip_version == AF_INET) {
+        for(hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+            union olsr_ip_addr netmask;
+            olsr_prefix_to_netmask(&netmask, hna->net.prefix_len);
+            ipc_sendf("%s\t%s\t%s\n",
+                      olsr_ip_to_string(&hna->net.prefix),
+                      olsr_ip_to_string(&netmask),
+                      olsr_ip_to_string(&olsr_cnf->main_addr));
+        }
+    } else {
+        for(hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+            ipc_sendf("%s\t%d\t%s\n",
+                      olsr_ip_to_string(&hna->net.prefix),
+                      hna->net.prefix_len,
+                      olsr_ip_to_string(&olsr_cnf->main_addr));
+        }
     }
 
     /* HNA entries */
index fc939db..10d3204 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: build_msg.c,v 1.36 2007/04/25 22:08:07 bernd67 Exp $
+ * $Id: build_msg.c,v 1.37 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -1040,7 +1040,7 @@ serialize_hna4(struct interface *ifp)
   /* preserve existing data in output buffer */
   union olsr_message *m;
   struct hnapair *pair;
-  struct hna4_entry *h = olsr_cnf->hna4_entries;
+  struct local_hna_entry *h = olsr_cnf->hna_entries;
 
   /* No hna nets */
   if((olsr_cnf->ip_version != AF_INET) || (!ifp) || h == NULL)
@@ -1073,6 +1073,7 @@ serialize_hna4(struct interface *ifp)
   
   while(h)
     {
+      union olsr_ip_addr ip_addr;
       if((curr_size + (2 * olsr_cnf->ipsize)) > remainsize)
        {
          /* Only add HNA message if it contains data */
@@ -1092,12 +1093,11 @@ serialize_hna4(struct interface *ifp)
          check_buffspace(curr_size + (2 * olsr_cnf->ipsize), remainsize, "HNA2");
        }
 #ifdef DEBUG
-      OLSR_PRINTF(BMSG_DBGLVL, "\tNet: %s/%s\n", 
-                 olsr_ip_to_string(&h->net),
-                 olsr_ip_to_string(&h->netmask));
+      OLSR_PRINTF(BMSG_DBGLVL, "\tNet: %s\n", olsr_ip_prefix_to_string(&h->net));
 #endif
-      COPY_IP(&pair->addr, &h->net);
-      COPY_IP(&pair->netmask, &h->netmask);
+      COPY_IP(&pair->addr, &h->net.prefix);
+      olsr_prefix_to_netmask(&ip_addr, h->net.prefix_len);
+      pair->addr = ip_addr.v4;
       pair++;
       curr_size += (2 * olsr_cnf->ipsize);
       h = h->next;
@@ -1130,7 +1130,7 @@ serialize_hna6(struct interface *ifp)
   union olsr_message *m;
   struct hnapair6 *pair6;
   union olsr_ip_addr tmp_netmask;
-  struct hna6_entry *h = olsr_cnf->hna6_entries;
+  struct local_hna_entry *h = olsr_cnf->hna_entries;
   
   /* No hna nets */
   if((olsr_cnf->ip_version != AF_INET6) || (!ifp) || h == NULL)
@@ -1182,12 +1182,10 @@ serialize_hna6(struct interface *ifp)
          check_buffspace(curr_size + (2 * olsr_cnf->ipsize), remainsize, "HNA2");
        }
 #ifdef DEBUG
-      OLSR_PRINTF(BMSG_DBGLVL, "\tNet: %s/%d\n", 
-                 olsr_ip_to_string(&h->net),
-                 h->prefix_len);
+      OLSR_PRINTF(BMSG_DBGLVL, "\tNet: %s\n", olsr_ip_prefix_to_string(&h->net));
 #endif
-      COPY_IP(&pair6->addr, &h->net);
-      olsr_prefix_to_netmask(&tmp_netmask, h->prefix_len);
+      COPY_IP(&pair6->addr, &h->net.prefix);
+      olsr_prefix_to_netmask(&tmp_netmask, h->net.prefix_len);
       COPY_IP(&pair6->netmask, &tmp_netmask);
       pair6++;
       curr_size += (2 * olsr_cnf->ipsize);
index 341e8d8..6d65033 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: cfgfile_gen.c,v 1.9 2007/10/15 21:01:17 bernd67 Exp $
+ * $Id: cfgfile_gen.c,v 1.10 2007/11/05 15:32:54 bernd67 Exp $
  */
 
 
 #include <arpa/inet.h>
 
 #include "olsrd_conf.h"
+#include "net_olsr.h"
 
 
 int
 olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
 {
-  struct hna4_entry        *h4 = cnf->hna4_entries;
-  struct hna6_entry        *h6 = cnf->hna6_entries;
+  struct local_hna_entry   *h  = cnf->hna_entries;
   struct olsr_if           *in = cnf->interfaces;
   struct plugin_entry      *pe = cnf->plugins;
   struct plugin_param      *pp;
@@ -83,35 +83,24 @@ olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
   fprintf(fd, "# Debug level(0-9)\n# If set to 0 the daemon runs in the background\n\nDebugLevel\t%d\n\n", cnf->debug_level);
 
   /* IP version */
-  if(cnf->ip_version == AF_INET6)
-    fprintf(fd, "# IP version to use (4 or 6)\n\nIpVersion\t6\n\n");
-  else
-    fprintf(fd, "# IP version to use (4 or 6)\n\nIpVersion\t4\n\n");
-
+  fprintf(fd, "# IP version to use (4 or 6)\n\nIpVersion\t%d\n\n", cnf->ip_version == AF_INET ? 4 : 6);
 
   /* HNA IPv4 */
-  fprintf(fd, "# HNA IPv4 routes\n# syntax: netaddr netmask\n\nHna4\n{\n");
-  while(h4)
+  fprintf(fd, "# HNA IPv%1$d routes\n# syntax: netaddr netmask\n\nHna1$d\n{\n", cnf->ip_version == AF_INET ? 4 : 6);
+  while(h)
     {
-      in4.s_addr = h4->net.v4;
-      fprintf(fd, "    %s ", inet_ntoa(in4));
-      in4.s_addr = h4->netmask.v4;
-      fprintf(fd, "%s\n", inet_ntoa(in4));
-      h4 = h4->next;
+      fprintf(fd, "    %s ", olsr_ip_to_string(&h->net.prefix));
+      if (cnf->ip_version == AF_INET) {
+          union olsr_ip_addr ip_addr;
+          olsr_prefix_to_netmask(&ip_addr, h->net.prefix_len);
+          fprintf(fd, "%s\n", olsr_ip_to_string(&ip_addr));
+      } else {
+          fprintf(fd, "%d\n", h->net.prefix_len);
+      }
+      h = h->next;
     }
   fprintf(fd, "}\n\n");
 
-
-  /* HNA IPv6 */
-  fprintf(fd, "# HNA IPv6 routes\n# syntax: netaddr prefix\n\nHna6\n{\n");
-  while(h6)
-    {
-      fprintf(fd, "    %s/%d\n", (char *)inet_ntop(AF_INET6, &h6->net.v6, ipv6_buf, sizeof(ipv6_buf)), h6->prefix_len);
-      h6 = h6->next;
-    }
-
-  fprintf(fd, "}\n\n");
-
   /* No interfaces */
   fprintf(fd, "# Should olsrd keep on running even if there are\n# no interfaces available? This is a good idea\n# for a PCMCIA/USB hotswap environment.\n# \"yes\" OR \"no\"\n\nAllowNoInt\t");
   if(cnf->allow_no_interfaces)
@@ -372,8 +361,7 @@ olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
 int
 olsrd_write_cnf_buf(struct olsrd_config *cnf, char *buf, olsr_u32_t bufsize)
 {
-  struct hna4_entry        *h4 = cnf->hna4_entries;
-  struct hna6_entry        *h6 = cnf->hna6_entries;
+  struct local_hna_entry   *h  = cnf->hna_entries;
   struct olsr_if           *in = cnf->interfaces;
   struct plugin_entry      *pe = cnf->plugins;
   struct plugin_param      *pp;
@@ -400,32 +388,22 @@ olsrd_write_cnf_buf(struct olsrd_config *cnf, char *buf, olsr_u32_t bufsize)
   WRITE_TO_BUF("# Debug level(0-9)\n# If set to 0 the daemon runs in the background\n\nDebugLevel\t%d\n\n", cnf->debug_level);
 
   /* IP version */
-  if(cnf->ip_version == AF_INET6)
-      WRITE_TO_BUF("# IP version to use (4 or 6)\n\nIpVersion\t6\n\n");
-  else
-      WRITE_TO_BUF("# IP version to use (4 or 6)\n\nIpVersion\t4\n\n");
+  WRITE_TO_BUF("# IP version to use (4 or 6)\n\nIpVersion\t%d\n\n", cnf->ip_version == AF_INET ? 4 : 6);
 
   /* HNA IPv4 */
-  WRITE_TO_BUF("# HNA IPv4 routes\n# syntax: netaddr netmask\n\nHna4\n{\n");
-  while(h4)
-    {
-      in4.s_addr = h4->net.v4;
-      WRITE_TO_BUF("    %s ", inet_ntoa(in4));
-      in4.s_addr = h4->netmask.v4;
-      WRITE_TO_BUF("%s\n", inet_ntoa(in4));
-      h4 = h4->next;
-    }
-  WRITE_TO_BUF("}\n\n");
-
-
-  /* HNA IPv6 */
-  WRITE_TO_BUF("# HNA IPv6 routes\n# syntax: netaddr prefix\n\nHna6\n{\n");
-  while(h6)
+  WRITE_TO_BUF("# HNA IPv%1$d routes\n# syntax: netaddr netmask\n\nHna%1$d\n{\n", cnf->ip_version == AF_INET ? 4 : 6);
+  while(h)
     {
-      WRITE_TO_BUF("    %s/%d\n", (char *)inet_ntop(AF_INET6, &h6->net.v6, ipv6_buf, sizeof(ipv6_buf)), h6->prefix_len);
-      h6 = h6->next;
+      WRITE_TO_BUF("    %s ", olsr_ip_to_string(&h->net.prefix));
+      if (cnf->ip_version == AF_INET) {
+          union olsr_ip_addr ip_addr;
+          olsr_prefix_to_netmask(&ip_addr, h->net.prefix_len);
+          WRITE_TO_BUF("%s\n", olsr_ip_to_string(&ip_addr));
+      } else {
+          WRITE_TO_BUF("%d\n", h->net.prefix_len);
+      }
+      h = h->next;
     }
-
   WRITE_TO_BUF("}\n\n");
 
   /* No interfaces */
index 4ff271f..570d3f6 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_conf.c,v 1.59 2007/11/03 23:21:27 bernd67 Exp $
+ * $Id: olsrd_conf.c,v 1.60 2007/11/05 15:32:54 bernd67 Exp $
  */
 
 
@@ -360,24 +360,16 @@ olsrd_sanity_check_cnf(struct olsrd_config *cnf)
 void
 olsrd_free_cnf(struct olsrd_config *cnf)
 {
-  struct hna4_entry        *h4d, *h4 = cnf->hna4_entries;
-  struct hna6_entry        *h6d, *h6 = cnf->hna6_entries;
+  struct local_hna_entry   *hd,   *h = cnf->hna_entries;
   struct olsr_if           *ind, *in = cnf->interfaces;
   struct plugin_entry      *ped, *pe = cnf->plugins;
   struct olsr_lq_mult      *mult, *next_mult;
   
-  while(h4)
+  while(h)
     {
-      h4d = h4;
-      h4 = h4->next;
-      free(h4d);
-    }
-
-  while(h6)
-    {
-      h6d = h6;
-      h6 = h6->next;
-      free(h6d);
+      hd = h;
+      h = h->next;
+      free(hd);
     }
 
   while(in)
@@ -521,8 +513,7 @@ get_default_if_config(void)
 void
 olsrd_print_cnf(struct olsrd_config *cnf)
 {
-  struct hna4_entry        *h4 = cnf->hna4_entries;
-  struct hna6_entry        *h6 = cnf->hna6_entries;
+  struct local_hna_entry   *h  = cnf->hna_entries;
   struct olsr_if           *in = cnf->interfaces;
   struct plugin_entry      *pe = cnf->plugins;
   struct ipc_host          *ih = cnf->ipc_hosts;
@@ -647,41 +638,29 @@ olsrd_print_cnf(struct olsrd_config *cnf)
     }
 
   /* Hysteresis */
-  if(cnf->use_hysteresis)
-    {
-      printf("Using hysteresis:\n");
-      printf("\tScaling      : %0.2f\n", cnf->hysteresis_param.scaling);
-      printf("\tThr high/low : %0.2f/%0.2f\n", cnf->hysteresis_param.thr_high, cnf->hysteresis_param.thr_low);
-    }
-  else
+  if(cnf->use_hysteresis) {
+    printf("Using hysteresis:\n");
+    printf("\tScaling      : %0.2f\n", cnf->hysteresis_param.scaling);
+    printf("\tThr high/low : %0.2f/%0.2f\n", cnf->hysteresis_param.thr_high, cnf->hysteresis_param.thr_low);
+  } else {
     printf("Not using hysteresis\n");
+  }
 
-  /* HNA IPv4 */
-  if(h4)
-    {
-
-      printf("HNA4 entries:\n");
-      while(h4)
-       {
-         in4.s_addr = h4->net.v4;
-         printf("\t%s/", inet_ntoa(in4));
-         in4.s_addr = h4->netmask.v4;
-         printf("%s\n", inet_ntoa(in4));
-
-         h4 = h4->next;
-       }
-    }
-
-  /* HNA IPv6 */
-  if(h6)
-    {
-      printf("HNA6 entries:\n");
-      while(h6)
-       {
-         printf("\t%s/%d\n", (char *)inet_ntop(AF_INET6, &h6->net.v6, ipv6_buf, sizeof(ipv6_buf)), h6->prefix_len);
-         h6 = h6->next;
-       }
+  /* HNA IPv4 and IPv6 */
+  if(h) {
+    printf("HNA%d entries:\n", cnf->ip_version == AF_INET ? 4 : 6);
+    while(h) {
+      printf("\t%s/", olsr_ip_to_string(&h->net.prefix));
+      if (cnf->ip_version == AF_INET) {
+        union olsr_ip_addr ip;
+        olsr_prefix_to_netmask(&ip, h->net.prefix_len);
+        printf("%s\n", olsr_ip_to_string(&ip));
+      } else {
+        printf("%d\n", h->net.prefix_len);
+      }
+      h = h->next;
     }
+  }
 }
 
 #if defined WIN32_STDIO_HACK
index a2bd386..7f7a7ac 100644 (file)
@@ -11,7 +11,7 @@
  *
  * * 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 
+ * * 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.
@@ -23,7 +23,7 @@
  * "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, 
+ * 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 
@@ -38,7 +38,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: oparse.y,v 1.35 2007/11/03 23:21:27 bernd67 Exp $
+ * $Id: oparse.y,v 1.36 2007/11/05 15:32:54 bernd67 Exp $
  */
 
 
@@ -697,8 +697,9 @@ iipversion:    TOK_IPVERSION TOK_INTEGER
 
 ihna4entry:     TOK_IP4_ADDR TOK_IP4_ADDR
 {
-  struct hna4_entry *h = malloc(sizeof(*h));
+  struct local_hna_entry *h = malloc(sizeof(*h));
   struct in_addr in;
+  union olsr_ip_addr ip_addr;
 
   PARSER_DEBUG_PRINTF("HNA IPv4 entry: %s/%s\n", $1->string, $2->string);
 
@@ -713,17 +714,20 @@ ihna4entry:     TOK_IP4_ADDR TOK_IP4_ADDR
       fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", $1->string);
       return -1;
     }
-  h->net.v4 = in.s_addr;
+  h->net.prefix.v4 = in.s_addr;
   if(inet_aton($2->string, &in) == 0)
     {
-      fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", $1->string);
+      fprintf(stderr, "ihna4entry: Failed converting IP netmask %s\n", $2->string);
       return -1;
     }
-  h->netmask.v4 = in.s_addr;
-  h->net.v4 &= h->netmask.v4;
+  ip_addr.v4 = in.s_addr;
+  h->net.prefix_len = olsr_netmask_to_prefix(&ip_addr);
+  /* Do we really want to following? */
+  h->net.prefix.v4 &= in.s_addr;
+
   /* Queue */
-  h->next = olsr_cnf->hna4_entries;
-  olsr_cnf->hna4_entries = h;
+  h->next = olsr_cnf->hna_entries;
+  olsr_cnf->hna_entries = h;
 
   free($1->string);
   free($1);
@@ -735,8 +739,7 @@ ihna4entry:     TOK_IP4_ADDR TOK_IP4_ADDR
 
 ihna6entry:     TOK_IP6_ADDR TOK_INTEGER
 {
-  struct hna6_entry *h = malloc(sizeof(*h));
-  struct in6_addr in6;
+  struct local_hna_entry *h = malloc(sizeof(*h));
 
   PARSER_DEBUG_PRINTF("HNA IPv6 entry: %s/%d\n", $1->string, $2->integer);
 
@@ -746,12 +749,11 @@ ihna6entry:     TOK_IP6_ADDR TOK_INTEGER
       YYABORT;
     }
 
-  if(inet_pton(AF_INET6, $1->string, &in6) < 0)
+  if(inet_pton(AF_INET6, $1->string, &h->net.prefix.v6) < 0)
     {
       fprintf(stderr, "ihna6entry: Failed converting IP address %s\n", $1->string);
       return -1;
     }
-  h->net.v6 = in6;
 
   if($2->integer > 128)
     {
@@ -759,10 +761,11 @@ ihna6entry:     TOK_IP6_ADDR TOK_INTEGER
       return -1;
     }
 
-  h->prefix_len = $2->integer;
+  h->net.prefix_len = $2->integer;
+
   /* Queue */
-  h->next = olsr_cnf->hna6_entries;
-  olsr_cnf->hna6_entries = h;
+  h->next = olsr_cnf->hna_entries;
+  olsr_cnf->hna_entries = h;
 
   free($1->string);
   free($1);
index ed65025..c3b026b 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: ipc_frontend.c,v 1.36 2007/10/13 12:31:04 bernd67 Exp $
+ * $Id: ipc_frontend.c,v 1.37 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 /*
@@ -408,21 +408,7 @@ ipc_send_net_info(int fd)
   net_msg->mids = (ifnet != NULL && ifnet->int_next != NULL) ? 1 : 0;
   
   /* HNAs */
-  if(olsr_cnf->ip_version == AF_INET6)
-    {
-      if(olsr_cnf->hna6_entries == NULL)
-       net_msg->hnas = 0;
-      else
-       net_msg->hnas = 1;
-    }
-
-  if(olsr_cnf->ip_version == AF_INET)
-    {
-      if(olsr_cnf->hna4_entries == NULL)
-       net_msg->hnas = 0;
-      else
-       net_msg->hnas = 1;
-    }
+  net_msg->hnas = olsr_cnf->hna_entries == NULL ? 0 : 1;
 
   /* Different values */
   /* Temporary fixes */
@@ -433,10 +419,7 @@ ipc_send_net_info(int fd)
   net_msg->neigh_hold = 0;//htons((olsr_u16_t)neighbor_hold_time);
   net_msg->topology_hold = 0;//htons((olsr_u16_t)topology_hold_time);
 
-  if(olsr_cnf->ip_version == AF_INET)
-    net_msg->ipv6 = 0;
-  else
-    net_msg->ipv6 = 1;
+  net_msg->ipv6 = olsr_cnf->ip_version == AF_INET ? 0 : 1;
  
   /* Main addr */
   COPY_IP(&net_msg->main_addr, &olsr_cnf->main_addr);
index 6e52e12..29366eb 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: local_hna_set.c,v 1.14 2007/10/15 20:58:33 bernd67 Exp $
+ * $Id: local_hna_set.c,v 1.15 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 #include "defs.h"
 void
 add_local_hna4_entry(const union olsr_ip_addr *net, const union olsr_ip_addr *mask)
 {
-  struct hna4_entry *new_entry;
-
-  new_entry = olsr_malloc(sizeof(struct hna4_entry), "Add local HNA entry 4");
+  struct local_hna_entry *new_entry = olsr_malloc(sizeof(struct local_hna_entry), "Add local HNA entry 4");
   
-  new_entry->net.v4 = net->v4;
-  new_entry->netmask.v4 = mask->v4;
+  new_entry->net.prefix.v4 = net->v4;
+  new_entry->net.prefix_len = olsr_netmask_to_prefix(mask);
 
   /* Queue */
-  new_entry->next = olsr_cnf->hna4_entries;
-  olsr_cnf->hna4_entries = new_entry;
+  new_entry->next = olsr_cnf->hna_entries;
+  olsr_cnf->hna_entries = new_entry;
 }
 
 
 void
 add_local_hna6_entry(const union olsr_ip_addr *net, const olsr_u16_t prefix_len)
 {
-  struct hna6_entry *new_entry;
-
-  new_entry = olsr_malloc(sizeof(struct hna6_entry), "Add local HNA entry 6");
+  struct local_hna_entry *new_entry = olsr_malloc(sizeof(struct local_hna_entry), "Add local HNA entry 6");
   
   memcpy(&new_entry->net, net, sizeof(struct in6_addr));
-  new_entry->prefix_len = prefix_len;
+  new_entry->net.prefix_len = prefix_len;
 
   /* Queue */
-  new_entry->next = olsr_cnf->hna6_entries;
-  olsr_cnf->hna6_entries = new_entry;
+  new_entry->next = olsr_cnf->hna_entries;
+  olsr_cnf->hna_entries = new_entry;
 }
 
 
 int
 remove_local_hna4_entry(const union olsr_ip_addr *net, const union olsr_ip_addr *mask)
 {
-  struct hna4_entry *h4 = olsr_cnf->hna4_entries, *h4prev = NULL;
+  struct local_hna_entry *h = olsr_cnf->hna_entries, *prev = NULL;
+  const olsr_u16_t prefix_len = olsr_netmask_to_prefix(mask);
 
-  while(h4)
+  while(h)
     {
-      if((net->v4 == h4->net.v4) && 
-        (mask->v4 == h4->netmask.v4))
+      if((net->v4 == h->net.prefix.v4) && 
+        (mask->v4 == prefix_len))
        {
          /* Dequeue */
-         if(h4prev == NULL)
-           olsr_cnf->hna4_entries = h4->next;
+         if(prev == NULL)
+           olsr_cnf->hna_entries = h->next;
          else
-           h4prev->next = h4->next;
+           prev->next = h->next;
 
-         free(h4);
+         free(h);
          return 1;
        }
-      h4prev = h4;
-      h4 = h4->next;
+      prev = h;
+      h = h->next;
     }
 
   return 0;
@@ -106,40 +103,41 @@ remove_local_hna4_entry(const union olsr_ip_addr *net, const union olsr_ip_addr
 int
 remove_local_hna6_entry(const union olsr_ip_addr *net, const olsr_u16_t prefix_len)
 {
-  struct hna6_entry *h6, *h6prev = NULL;
+  struct local_hna_entry *h = olsr_cnf->hna_entries, *prev = NULL;
 
-  for(h6 = olsr_cnf->hna6_entries; h6; h6 = h6->next)
+  while (h)
     {
-      if((memcmp(net, &h6->net, olsr_cnf->ipsize) == 0) && 
-        (prefix_len == h6->prefix_len))
+      if((memcmp(net, &h->net.prefix, olsr_cnf->ipsize) == 0) && 
+        (prefix_len == h->net.prefix_len))
        {
          /* Dequeue */
-         if(h6prev == NULL)
-           olsr_cnf->hna6_entries = h6->next;
+         if (prev == NULL)
+           olsr_cnf->hna_entries = h->next;
          else
-           h6prev->next = h6->next;
-
-         free(h6);
+           prev->next = h->next;
+         free(h);
          return 1;
        }
-      h6prev = h6;
+      prev = h;
+      h = h->next;
     }
   return 0;
 }
 
-struct hna4_entry *
+struct local_hna_entry *
 find_local_hna4_entry(const union olsr_ip_addr *net, const olsr_u32_t mask)
 {
-  struct hna4_entry *h4 = olsr_cnf->hna4_entries;
-
-  while(h4)
+  struct local_hna_entry *h = olsr_cnf->hna_entries;
+  const union olsr_ip_addr ip_addr = { .v4 = mask };
+  const olsr_u16_t prefix_len = olsr_netmask_to_prefix(&ip_addr);
+  while(h)
     {
-      if((net->v4 == h4->net.v4) && 
-        (mask == h4->netmask.v4))
+      if((net->v4 == h->net.prefix.v4) && 
+        (prefix_len == h->net.prefix_len))
        {
-         return h4;
+         return h;
        }
-      h4 = h4->next;
+      h = h->next;
     }
 
   return NULL;
@@ -147,19 +145,18 @@ find_local_hna4_entry(const union olsr_ip_addr *net, const olsr_u32_t mask)
 
 
 
-struct hna6_entry *
+struct local_hna_entry *
 find_local_hna6_entry(const union olsr_ip_addr *net, const olsr_u16_t prefix_len)
 {
-  struct hna6_entry *h6 = olsr_cnf->hna6_entries;
-
-  while(h6)
+  struct local_hna_entry *h = olsr_cnf->hna_entries;
+  while(h)
     {
-      if((memcmp(net, &h6->net, olsr_cnf->ipsize) == 0) && 
-        (prefix_len == h6->prefix_len))
+      if((memcmp(net, &h->net.prefix, olsr_cnf->ipsize) == 0) && 
+        (prefix_len == h->net.prefix_len))
        {
-         return h6;
+         return h;
        }
-      h6 = h6->next;
+      h = h->next;
     }
 
   return NULL;
@@ -173,10 +170,10 @@ check_inet_gw(void)
 {
   if(olsr_cnf->ip_version == AF_INET)
     {
-      struct hna4_entry *h4;
-      for(h4 = olsr_cnf->hna4_entries; h4; h4 = h4->next)
+      struct local_hna_entry *h;
+      for(h = olsr_cnf->hna_entries; h != NULL; h = h->next)
        {
-         if(h4->netmask.v4 == 0 && h4->net.v4 == 0)
+         if(h->net.prefix_len == 0 && h->net.prefix.v4 == 0)
            return 1;
        }
     }
index c3f0352..ae3dbfa 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: local_hna_set.h,v 1.11 2007/10/15 20:58:33 bernd67 Exp $
+ * $Id: local_hna_set.h,v 1.12 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 
@@ -58,10 +58,10 @@ remove_local_hna4_entry(const union olsr_ip_addr *, const union olsr_ip_addr *);
 int
 remove_local_hna6_entry(const union olsr_ip_addr *, const olsr_u16_t);
 
-struct hna4_entry *
+struct local_hna_entry *
 find_local_hna4_entry(const union olsr_ip_addr *net, const olsr_u32_t mask);
 
-struct hna6_entry *
+struct local_hna_entry *
 find_local_hna6_entry(const union olsr_ip_addr *net, const olsr_u16_t prefix_len);
 
 int
index 690478d..85e9c38 100644 (file)
@@ -38,7 +38,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_route.c,v 1.55 2007/10/20 15:16:32 bernd67 Exp $
+ * $Id: lq_route.c,v 1.56 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -133,7 +133,7 @@ olsr_spf_add_path_list (struct list_node *head,
   OLSR_PRINTF(1, "SPF: append path %s, cost %f, via %s\n",
               olsr_ip_to_string(&(vert->addr)),
               vert->path_etx,
-              olsr_ip_to_string(vert->next_hop ? &vert->next_hop->neighbor_iface_addr : NULL));
+              vert->next_hop ? olsr_ip_to_string(&vert->next_hop->neighbor_iface_addr) : "-");
 #endif
 
   list_add_before(head, &vert->path_list_node);
@@ -148,9 +148,7 @@ olsr_spf_add_path_list (struct list_node *head,
 static struct tc_entry *
 olsr_spf_extract_best (struct avl_tree *tree)
 {
-  struct avl_node *node;
-
-  node = avl_walk_first(tree);
+  struct avl_node *node = avl_walk_first(tree);
 
   return (node ? node->data :  NULL);
 }
@@ -163,7 +161,7 @@ char *olsr_etx_to_string(float etx)
   if (etx == INFINITE_ETX)
     return "INF";
 
-  snprintf(buff, 20, "%.6f", etx);
+  snprintf(buff, sizeof(buff), "%.6f", etx);
   return buff;
 }
 
index 4a07db6..344ab5f 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net_olsr.c,v 1.30 2007/09/16 21:20:16 bernd67 Exp $
+ * $Id: net_olsr.c,v 1.31 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 #include "net_olsr.h"
@@ -462,23 +462,23 @@ net_output(struct interface *ifp)
  * @returns 1 on success 0 on failure
  */
 int
-olsr_prefix_to_netmask(union olsr_ip_addr *adr, olsr_u16_t prefix)
+olsr_prefix_to_netmask(union olsr_ip_addr *adr, const olsr_u16_t prefix)
 {
-  int p, i;
+  int p;
+  olsr_u8_t *a;
 
-  if(adr == NULL)
+  if(adr == NULL) {
     return 0;
+  }
 
-  p = prefix;
-  i = 0;
-
-  memset(adr, 0, olsr_cnf->ipsize);
-
-  for(;p > 0; p -= 8)
-    {
-      adr->v6.s6_addr[i] = (p < 8) ? 0xff ^ (0xff >> p) : 0xff;
-      i++;
-    }
+  a = adr->v6.s6_addr;
+  for (p = prefix; p > 8; p -= 8) {
+    *a++ = 0xff;
+  }
+  *a++ = 0xff << p;
+  while (a < adr->v6.s6_addr+olsr_cnf->ipsize) {
+    *a++ = 0;
+  }
 
 #ifdef DEBUG
   OLSR_PRINTF(3, "Prefix %d = Netmask: %s\n", prefix, olsr_ip_to_string(adr));
@@ -501,24 +501,14 @@ olsr_netmask_to_prefix(const union olsr_ip_addr *adr)
 {
   olsr_u16_t prefix = 0;
   unsigned int i;
+  olsr_u8_t tmp;
 
-  prefix = 0;
-
-  for(i = 0; i < olsr_cnf->ipsize; i++)
-    {
-      if(adr->v6.s6_addr[i] == 0xff)
-       {
-         prefix += 8;
-       }
-      else
-       {
-          int tmp;
-         for(tmp = adr->v6.s6_addr[i];
-             tmp > 0;
-             tmp = (tmp << 1) & 0xff)
-           prefix++;
-       }
-    }
+  for (i = 0; i < olsr_cnf->ipsize && adr->v6.s6_addr[i] == 0xff; i++) {
+    prefix += 8;
+  }
+  for (tmp = adr->v6.s6_addr[i]; tmp > 0; tmp <<= 1) {
+    prefix++;
+  }
 
 #ifdef DEBUG
   OLSR_PRINTF(3, "Netmask: %s = Prefix %d\n", olsr_ip_to_string(adr), prefix);
@@ -561,7 +551,7 @@ ip_to_string(const olsr_u32_t *address)
 {
   struct in_addr in;
   in.s_addr=*address;
-  return(inet_ntoa(in));
+  return inet_ntoa(in);
   
 }
 
@@ -582,38 +572,58 @@ ip6_to_string(const struct in6_addr *addr6)
   return inet_ntop(AF_INET6, addr6, ipv6_buf, sizeof(ipv6_buf));
 }
 
-
 const char *
 olsr_ip_to_string(const union olsr_ip_addr *addr)
 {
   static int idx = 0;
-  static char buff[4][INET6_ADDRSTRLEN > INET_ADDRSTRLEN ? INET6_ADDRSTRLEN : INET_ADDRSTRLEN];
+  static char buff[4][MAX(INET6_ADDRSTRLEN,INET_ADDRSTRLEN)];
   const char *ret;
 
   if (!addr) {
       return "null";
   }
   
-  if(olsr_cnf->ip_version == AF_INET)
-    {
-#if 0
-      struct in_addr in;
-      in.s_addr = addr->v4;
-      ret = inet_ntop(AF_INET, &in, buff[idx], sizeof(buff[idx]));
-#else
-      ret = inet_ntop(AF_INET, &addr->v4, buff[idx], sizeof(buff[idx]));
-#endif
-    }
-  else
-    {
-      /* IPv6 */
-      ret = inet_ntop(AF_INET6, &addr->v6, buff[idx], sizeof(buff[idx]));
-    }
+  if(olsr_cnf->ip_version == AF_INET) {
+    ret = inet_ntop(AF_INET, &addr->v4, buff[idx], sizeof(buff[idx]));
+  } else {
+    /* IPv6 */
+    ret = inet_ntop(AF_INET6, &addr->v6, buff[idx], sizeof(buff[idx]));
+  }
   idx = (idx + 1) & 3;
 
   return ret;
 }
 
+const char *
+olsr_ip_prefix_to_string(const struct olsr_ip_prefix *prefix)
+{
+  /* We need for IPv6 an IP address + '/' + prefix and for IPv4 an IP address + '/' + a netmask */
+  static char buf[MAX(INET6_ADDRSTRLEN + 1 + 3, INET_ADDRSTRLEN + 1 + INET_ADDRSTRLEN)];
+  const char *rv;
+
+  if (prefix == NULL) {
+      return "null";
+  }
+  
+  if(olsr_cnf->ip_version == AF_INET) {
+    int len;
+    union olsr_ip_addr netmask;
+    rv = inet_ntop(AF_INET, &prefix->prefix.v4, buf, sizeof(buf));
+    len = strlen(buf);
+    buf[len++] = '/';
+    olsr_prefix_to_netmask(&netmask, prefix->prefix_len);
+    inet_ntop(AF_INET, &netmask.v4, buf+len, sizeof(buf)-len);
+  } else {
+    int len;
+    /* IPv6 */
+    rv = inet_ntop(AF_INET6, &prefix->prefix.v6, buf, sizeof(buf));
+    len = strlen(buf);
+    buf[len++] = '/';
+    snprintf(buf+len, sizeof(buf)-len, "/%d", prefix->prefix_len);
+  }
+  return rv;
+}
+
 
 void
 olsr_add_invalid_address(const union olsr_ip_addr *adr)
@@ -645,18 +655,16 @@ olsr_validate_address(const union olsr_ip_addr *adr)
 {
   const struct deny_address_entry *deny_entry = deny_entries;
 
-  while(deny_entry)
-    {
-      if(COMP_IP(adr, &deny_entry->addr))
-       {
-         OLSR_PRINTF(1, "Validation of address %s failed!\n",
-                     olsr_ip_to_string(adr));
-         return OLSR_FALSE;
-       }
-
-      deny_entry = deny_entry->next;
+  while (deny_entry) {
+    if (COMP_IP(adr, &deny_entry->addr)) {
+      OLSR_PRINTF(1, "Validation of address %s failed!\n",
+                  olsr_ip_to_string(adr));
+      return OLSR_FALSE;
     }
 
+    deny_entry = deny_entry->next;
+  }
+
   return OLSR_TRUE;
 }
 
index dc8ab02..8436c54 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net_olsr.h,v 1.13 2007/09/16 21:20:16 bernd67 Exp $
+ * $Id: net_olsr.h,v 1.14 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 
@@ -103,6 +103,9 @@ ip6_to_string(const struct in6_addr *);
 const char *
 olsr_ip_to_string(const union olsr_ip_addr *);
 
+const char *
+olsr_ip_prefix_to_string(const struct olsr_ip_prefix *prefix);
+
 int
 add_ptf(packet_transform_function);
 
index 9e934de..45a985c 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsr_cfg.h,v 1.36 2007/11/03 23:21:27 bernd67 Exp $
+ * $Id: olsr_cfg.h,v 1.37 2007/11/05 15:32:55 bernd67 Exp $
  */
 
 
@@ -146,18 +146,10 @@ struct olsr_if
   struct olsr_if           *next;
 };
 
-struct hna4_entry
+struct local_hna_entry
 {
-  union olsr_ip_addr       net;
-  union olsr_ip_addr       netmask;
-  struct hna4_entry        *next;
-};
-
-struct hna6_entry
-{
-  union olsr_ip_addr       net;
-  olsr_u16_t               prefix_len;
-  struct hna6_entry        *next;
+  struct olsr_ip_prefix    net;
+  struct local_hna_entry  *next;
 };
 
 struct hyst_param
@@ -224,8 +216,7 @@ struct olsrd_config
   olsr_u8_t                lq_dlimit;
   float                    lq_dinter;
   struct plugin_entry      *plugins;
-  struct hna4_entry        *hna4_entries;
-  struct hna6_entry        *hna6_entries;
+  struct local_hna_entry   *hna_entries;
   struct ipc_host          *ipc_hosts;
   struct ipc_net           *ipc_nets;
   struct olsr_if           *interfaces;