Another fat commit:
authorBernd Petrovitsch <bernd@firmix.at>
Thu, 8 Nov 2007 22:47:43 +0000 (22:47 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Thu, 8 Nov 2007 22:47:43 +0000 (22:47 +0000)
The main target was:
- Fixed the misleading definition of "v4" in "struct olsr_ip_addr" fom
  "olsr_u32_t" (in network-byteorder!) to "struct in_addr". Lots of
  temporary variables to call inet_ntoa()/inet_ptoa() vanished .....
- declare "int_addr", "int_netmask" and "int_broadaddr" in "struct interface"
  as "struct sockaddr_in" since it is that what we actually want there (and
  it is similar to the IPv6 code).

To get that thoroughly via compiler errors, we get:
- We have now ip4_to_string(), ip6_to_string() and olsr_ip_to_string()
  to print a "struct in_addr", "struct in6_addr" and "union olsr_ip_addr"
  into a string buffer.

Alas, this also annoyed me since ages:
- cleanup: olsr_ip_to_string() and similar non-reentrant functions now must
  get a target buffer. To ease that, there is the "struct ipaddr_str"
  which is large enough for all of them (read: for an IPv6 address). This
  also removes the cyclic buffer there.
  All of these function return a "const char *" which can be directly used
  for printf(3) and friends.

And some cleanups:
- const'ified more functions
- converted the source to UTF-8.
- "struct sig_msg" uses an olsr_u8_t for a byte array (and not "char")
- force the few inline function to always be inlined.
- #ifdef the body of the olsr_print_hna_set() and olsr_print_neighbor_table()
  if nothing is done
- use "inline_avl_comp_ipv4()" in "avl_comp_ipv4()"
- clean up the routes on more signals. Basically we want to do this on all
  signals which terminate the program.
- killed a superflous global buffer in src/main.c

This version was breing since weeks and running for severa day in Vienna's
FunkFeuer net without any noticably problem!

Please report anything that broke!

74 files changed:
CHANGELOG
lib/bmf/src/Address.c
lib/bmf/src/Bmf.c
lib/bmf/src/NetworkInterfaces.c
lib/dot_draw/src/olsrd_dot_draw.c
lib/dot_draw/src/olsrd_plugin.c
lib/dyn_gw/src/olsrd_dyn_gw.c
lib/dyn_gw_plain/src/olsrd_dyn_gw_plain.c
lib/httpinfo/src/admin_interface.c
lib/httpinfo/src/olsrd_httpinfo.c
lib/httpinfo/src/olsrd_plugin.c
lib/nameservice/src/nameservice.c
lib/pgraph/src/olsrd_pgraph.c
lib/quagga/src/olsrd_plugin.c
lib/quagga/src/quagga.c
lib/secure/src/olsrd_secure.c
lib/secure/src/secure_messages.h
lib/tas/src/plugin.c
lib/txtinfo/src/olsrd_plugin.c
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/defs.h
src/duplicate_set.c
src/generate_msg.c
src/hna_set.c
src/hysteresis.c
src/interfaces.c
src/interfaces.h
src/ipc_frontend.c
src/ipc_frontend.h
src/link_set.c
src/linux/apm.c
src/linux/kernel_routes.c
src/linux/net.c
src/local_hna_set.c
src/lq_avl.c
src/lq_avl.h
src/lq_packet.c
src/lq_route.c
src/main.c
src/mid_set.c
src/mid_set.h
src/mpr.c
src/mpr_selector_set.c
src/neighbor_table.c
src/net_olsr.c
src/net_olsr.h
src/olsr.c
src/olsr_protocol.h
src/olsr_switch/main.c
src/olsr_switch/olsr_host_switch.h
src/olsr_types.h
src/packet.c
src/parser.c
src/parser.h
src/plugin_util.c
src/print_packet.c
src/process_package.c
src/process_package.h
src/process_routes.c
src/rebuild_packet.c
src/rebuild_packet.h
src/routing_table.c
src/routing_table.h
src/scheduler.c
src/tc_set.c
src/tc_set.h
src/two_hop_neighbor_table.c
src/two_hop_neighbor_table.h
src/unix/ifnet.c
src/win32/ifnet.c

index 0c7f2b8..65bdeef 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,5 @@
 This file states changes as of version 0.2.4:
-$Id: CHANGELOG,v 1.111 2007/11/05 15:34:37 bernd67 Exp $
+$Id: CHANGELOG,v 1.112 2007/11/08 22:47:39 bernd67 Exp $
 
 0.5.5 ---------------------------------------------------------------------
 
@@ -52,6 +52,48 @@ PATCHES and CLEANUPS by Bernd Petrovitsch <bernd@firmix.at>
   Also merged the "hna4" and "hna6" pointer in "struct olsr_config" -
   look at the global "olsr_cnf->ip_version".
 - added a olsr_ip_prefix_to_string() function
+- .h file cleanup: def.h does not longer include net_olsr.h because it 
+  doesn't needs it.
+- more type safety: the macros COPY_IP() and COMP_IP are gone and replaced
+  with "=" or similar "normal" C operations. There are also now the inline
+  functions ip4cmp() and ip4equal() to work on "struct in_addr", ip6cmp()
+  and ip6equal() to work on "struct in6_addr" and ipcmp() and ip6equal()
+  to work on "union olsr_ip_addr".
+  Most (or even more precise: almost all) uses of COPY_IP() and COMP_IP()
+  are in "if (olsr_cnf->ip_version) { ... } else { ... }" anyway to
+  there is no reson to copy an IPv4 address effectively with
+  "memcpy(&dst, &src, 4)" or compare with memcmp(&a, &b, 4)" wher the
+  always "4" is stored in a variable inhibiting compiler optimization.
+  There is also the deprecated function genipcopy() mimicking the old
+  typeless COPY_IP() macro for the last few places where a cleanup is
+  needed anyways.
+  There also lots of old macros left over (commented out of course) until
+  we are confident that everything works. And then I will kill them too.
+- Fixed the misleading definition of "v4" in "struct olsr_ip_addr" fom
+  "olsr_u32_t" (in network-byteorder!) to "struct in_addr". Lots of
+  temporary variables to call inet_ntoa()/inet_ptoa() vanished .....
+- We have now ip4_to_string(), ip6_to_string() and olsr_ip_to_string()
+  to print a "struct in_addr", "struct in6_addr" and "union olsr_ip_addr"
+  into a string buffer.
+- cleanup: olsr_ip_to_string() and similar non-reentrant functions now must
+  get a target buffer. To ease that, there is the "struct ipaddr_str"
+  which is large enough for all of them (read: for an IPv6 address). This
+  also removes the cyclic buffer there.
+  All of these function return a "const char *" which can be directly used
+  for printf(3) and friends.
+- const'ified more functions
+- converted the source to UTF-8.
+- "struct sig_msg" uses an olsr_u8_t for a byte array (and not "char")
+- force the few inline function to always be inlined.
+- #ifdef the body of the olsr_print_hna_set() and olsr_print_neighbor_table()
+  if nothing is done
+- declare "int_addr", "int_netmask" and "int_broadaddr" in "struct interface"
+  as "struct sockaddr_in" since it is that what we actually want there (and
+  it is similar to the IPv6 code).
+- use "inline_avl_comp_ipv4()" in "avl_comp_ipv4()"
+- clean up the routes on more signals. Basically we want to do this on all
+  signals which terminate the program.
+- killed a superflous global buffer in src/main.c
 
 0.5.4 ---------------------------------------------------------------------
 
index 1f0ce0b..b9a0b5b 100644 (file)
@@ -46,7 +46,7 @@
 #include <netinet/udp.h> /* struct udphdr */
 
 /* OLSRD includes */
-#include "defs.h" /* COMP_IP */
+#include "defs.h" /* ipequal */
 
 /* Plugin includes */
 #include "Bmf.h" /* BMF_ENCAP_PORT */
@@ -97,7 +97,7 @@ int IsMulticast(union olsr_ip_addr* ipAddress)
 {
   assert(ipAddress != NULL);
 
-  return (ntohl(ipAddress->v4) & 0xF0000000) == 0xE0000000;
+  return (ntohl(ipAddress->v4.s_addr) & 0xF0000000) == 0xE0000000;
 }
 
 /* -------------------------------------------------------------------------
index f2d08e5..f1eb565 100644 (file)
@@ -62,6 +62,7 @@
 #include "mid_set.h" /* mid_lookup_main_addr() */
 #include "mpr_selector_set.h" /* olsr_lookup_mprs_set() */
 #include "link_set.h" /* get_best_link_to_neighbor() */
+#include "net_olsr.h" /* ipequal */
 
 /* BMF includes */
 #include "NetworkInterfaces.h" /* TBmfInterface, CreateBmfNetworkInterfaces(), CloseBmfNetworkInterfaces() */
@@ -177,7 +178,8 @@ static void EncapsulateAndForwardPacket(
   forwardTo.sin_port = htons(BMF_ENCAP_PORT);
 
   /* Start by filling in the local broadcast address */
-  COPY_IP(&forwardTo.sin_addr.s_addr, &intf->broadAddr);
+  //COPY_IP(&forwardTo.sin_addr.s_addr, &intf->broadAddr);
+  forwardTo.sin_addr = intf->broadAddr.v4;
 
   /* - If the BMF mechanism is BM_UNICAST_PROMISCUOUS, always send just one
    *   packet (to the best neighbor).
@@ -199,7 +201,8 @@ static void EncapsulateAndForwardPacket(
   {
     if (BmfMechanism == BM_UNICAST_PROMISCUOUS || nPossibleNeighbors <= 2)
     {
-      COPY_IP(&forwardTo.sin_addr.s_addr, &bestNeighborLinks.links[i]->neighbor_iface_addr);
+      //COPY_IP(&forwardTo.sin_addr.s_addr, &bestNeighborLinks.links[i]->neighbor_iface_addr);
+      forwardTo.sin_addr = bestNeighborLinks.links[i]->neighbor_iface_addr.v4;
     }
 
     /* Forward the BMF packet via the encapsulation socket */
@@ -262,14 +265,17 @@ static void BmfPacketCaptured(
   struct ip* ipHeader; /* The IP header inside the captured IP packet */
   u_int32_t crc32;
   struct TEncapHeader* encapHdr;
-
+#ifndef NODEBUG
+  struct ipaddr_str srcBuf, dstBuf;
+#endif
   ipHeader = GetIpHeader(encapsulationUdpData);
 
-  COPY_IP(&dst, &ipHeader->ip_dst);
+  //COPY_IP(&dst, &ipHeader->ip_dst);
+  dst.v4 = ipHeader->ip_dst;
 
   /* Only forward multicast packets. If configured, also forward local broadcast packets */
   if (IsMulticast(&dst) ||
-      (EnableLocalBroadcast != 0 && COMP_IP(&dst, &intf->broadAddr)))
+      (EnableLocalBroadcast != 0 && ipequal(&dst, &intf->broadAddr)))
   {
     /* continue */
   }
@@ -296,7 +302,9 @@ static void BmfPacketCaptured(
   /* Retrieve the length of the captured packet */
   ipPacketLen = GetIpTotalLength(ipPacket);
 
-  COPY_IP(&src, &ipHeader->ip_src);
+  //COPY_IP(&src, &ipHeader->ip_src);
+  src.v4 = ipHeader->ip_src;
+
   OLSR_PRINTF(
     8,
     "%s: %s pkt of %ld bytes captured on %s interface \"%s\": %s->%s\n",
@@ -305,8 +313,8 @@ static void BmfPacketCaptured(
     (long)ipPacketLen,
     isFromOlsrIntf ? "OLSR" : "non-OLSR",
     intf->ifName,
-    olsr_ip_to_string(&src),
-    olsr_ip_to_string(&dst));
+    olsr_ip_to_string(&srcBuf, &src),
+    olsr_ip_to_string(&dstBuf, &dst));
 
   /* Lookup main address of source in the MID table of OLSR */
   origIp = MainAddressOf(&src);
@@ -403,12 +411,15 @@ static void BmfPacketCaptured(
       {
         /* Case 1.1 */
         {
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+#endif
           OLSR_PRINTF(
             8,
             "%s: --> not encap-forwarding on \"%s\": I am not selected as MPR by neighbor %s\n",
             PLUGIN_NAME_SHORT,
             walker->ifName,
-            olsr_ip_to_string(&src));
+            olsr_ip_to_string(&buf, &src));
         }    
       }
       else if (sllPkttype == PACKET_OUTGOING && intf == walker)
@@ -577,7 +588,9 @@ static void BmfEncapsulationPacketReceived(
   struct TEncapHeader* encapsulationHdr;
   u_int16_t encapsulationUdpDataLen;
   struct TBmfInterface* walker;
-
+#ifndef NODEBUG
+  struct ipaddr_str mcSrcBuf, mcDstBuf, forwardedByBuf, forwardedToBuf;
+#endif
   /* Are we talking to ourselves? */
   if (if_ifwithaddr(forwardedBy) != NULL)
   {
@@ -595,8 +608,10 @@ static void BmfEncapsulationPacketReceived(
   ipPacketLen = GetIpTotalLength(ipPacket);
   ipHeader = GetIpHeader(encapsulationUdpData);
 
-  COPY_IP(&mcSrc, &ipHeader->ip_src);
-  COPY_IP(&mcDst, &ipHeader->ip_dst);
+  //COPY_IP(&mcSrc, &ipHeader->ip_src);
+  mcSrc.v4 = ipHeader->ip_src;
+  //COPY_IP(&mcDst, &ipHeader->ip_dst);
+  mcDst.v4 = ipHeader->ip_dst;
 
   /* Increase counter */
   intf->nBmfPacketsRx++;
@@ -608,10 +623,10 @@ static void BmfEncapsulationPacketReceived(
     PLUGIN_NAME_SHORT,
     (long)ipPacketLen,
     intf->ifName,
-    olsr_ip_to_string(&mcSrc),
-    olsr_ip_to_string(&mcDst),
-    olsr_ip_to_string(forwardedBy),
-    forwardedTo != NULL ? olsr_ip_to_string(forwardedTo) : "me");
+    olsr_ip_to_string(&mcSrcBuf, &mcSrc),
+    olsr_ip_to_string(&mcDstBuf, &mcDst),
+    olsr_ip_to_string(&forwardedByBuf, forwardedBy),
+    forwardedTo != NULL ? olsr_ip_to_string(&forwardedToBuf, forwardedTo) : "me");
 
   /* Get encapsulation header */
   encapsulationHdr = (struct TEncapHeader*) encapsulationUdpData;
@@ -653,7 +668,7 @@ static void BmfEncapsulationPacketReceived(
     /* If the encapsulated IP packet is a local broadcast packet,
      * update its destination address to match the subnet of the EtherTunTap
      * interface */
-    broadAddr.v4 = htonl(EtherTunTapIpBroadcast);
+    broadAddr.v4.s_addr = htonl(EtherTunTapIpBroadcast);
     CheckAndUpdateLocalBroadcast(ipPacket, &broadAddr);
 
     bufferToWrite = ipPacket;
@@ -780,7 +795,8 @@ static void BmfEncapsulationPacketReceived(
 
       /* Compose destination of encapsulation packet.
        * Start by filling in the local broadcast address. */
-      COPY_IP(&forwardTo.sin_addr.s_addr, &walker->broadAddr);
+      //COPY_IP(&forwardTo.sin_addr.s_addr, &walker->broadAddr);
+      forwardTo.sin_addr = walker->broadAddr.v4;
 
       /* - If the BMF mechanism is BM_UNICAST_PROMISCUOUS, always send just one
        *   packet (to the best neighbor). Other neighbors listen promiscuously.
@@ -804,7 +820,8 @@ static void BmfEncapsulationPacketReceived(
         {
           /* For unicast, overwrite the local broadcast address which was filled in
            * above */
-          COPY_IP(&forwardTo.sin_addr.s_addr, &bestNeighborLinks.links[i]->neighbor_iface_addr);
+          //COPY_IP(&forwardTo.sin_addr.s_addr, &bestNeighborLinks.links[i]->neighbor_iface_addr);
+          forwardTo.sin_addr = bestNeighborLinks.links[i]->neighbor_iface_addr.v4;
         }
 
         /* Forward the BMF packet via the encapsulation socket */
@@ -838,6 +855,9 @@ static void BmfEncapsulationPacketReceived(
 
     else /* walker->olsrIntf != NULL && !iAmMpr */
     {
+#ifndef NODEBUG
+      struct ipaddr_str buf;
+#endif
       /* 'walker' is an OLSR interface, but I am not selected as MPR. In that
        * case, don't forward. */
       OLSR_PRINTF(
@@ -845,7 +865,7 @@ static void BmfEncapsulationPacketReceived(
         "%s: --> not forwarding on \"%s\": I am not selected as MPR by %s\n",
         PLUGIN_NAME_SHORT,
         walker->ifName,
-        olsr_ip_to_string(forwardedBy));
+        olsr_ip_to_string(&buf, forwardedBy));
     } /* else */
   } /* for */
 } /* BmfEncapsulationPacketReceived */
@@ -872,16 +892,20 @@ static void BmfTunPacketCaptured(unsigned char* encapsulationUdpData)
   struct ip* ipHeader;
   u_int32_t crc32;
   struct TEncapHeader* encapHdr;
-
+#ifndef NODEBUG
+  struct ipaddr_str srcIpBuf, dstIpBuf;
+#endif
   ipPacket = GetIpPacket(encapsulationUdpData);
   ipPacketLen = GetIpTotalLength(ipPacket);
   ipHeader = GetIpHeader(encapsulationUdpData);
 
   /* Only forward multicast packets. If configured, also forward local broadcast packets */
-  COPY_IP(&dstIp, &ipHeader->ip_dst);
-  broadAddr.v4 = htonl(EtherTunTapIpBroadcast);
+  //COPY_IP(&dstIp, &ipHeader->ip_dst);
+  dstIp.v4 = ipHeader->ip_dst;
+
+  broadAddr.v4.s_addr = htonl(EtherTunTapIpBroadcast);
   if (IsMulticast(&dstIp) ||
-      (EnableLocalBroadcast != 0 && COMP_IP(&dstIp, &broadAddr)))
+      (EnableLocalBroadcast != 0 && ipequal(&dstIp, &broadAddr)))
   {
     /* continue */
   }
@@ -890,15 +914,17 @@ static void BmfTunPacketCaptured(unsigned char* encapsulationUdpData)
     return;
   }
 
-  COPY_IP(&srcIp, &ipHeader->ip_src);
+  //COPY_IP(&srcIp, &ipHeader->ip_src);
+  srcIp.v4 = ipHeader->ip_src;
+
   OLSR_PRINTF(
     8,
     "%s: outgoing pkt of %ld bytes captured on tuntap interface \"%s\": %s->%s\n",
     PLUGIN_NAME_SHORT,
     (long)ipPacketLen,
     EtherTunTapIfName,
-    olsr_ip_to_string(&srcIp),
-    olsr_ip_to_string(&dstIp));
+    olsr_ip_to_string(&srcIpBuf, &srcIp),
+    olsr_ip_to_string(&dstIpBuf, &dstIp));
 
   /* Calculate packet fingerprint */
   crc32 = PacketCrc32(ipPacket, ipPacketLen);
@@ -1173,8 +1199,10 @@ static void DoBmf(void)
           continue; /* for */
         }
 
-        COPY_IP(&forwardedBy, &ipHeader->ip_src);
-        COPY_IP(&forwardedTo, &ipHeader->ip_dst);
+        //COPY_IP(&forwardedBy, &ipHeader->ip_src);
+        forwardedBy.v4 = ipHeader->ip_src;
+        //COPY_IP(&forwardedTo, &ipHeader->ip_dst);
+        forwardedTo.v4 = ipHeader->ip_dst;
         BmfEncapsulationPacketReceived(
           walker,
           &forwardedBy,
@@ -1215,7 +1243,8 @@ static void DoBmf(void)
           continue; /* for */
         } /* if (nBytes < 0) */
 
-        COPY_IP(&forwardedBy, &from.sin_addr.s_addr);
+        //COPY_IP(&forwardedBy, &from.sin_addr.s_addr);
+        forwardedBy.v4 = from.sin_addr;
 
         /* Check if the number of received bytes is large enough for a minimal BMF
          * encapsulation packet, at least:
@@ -1226,12 +1255,13 @@ static void DoBmf(void)
           sizeof(struct ip);
         if (nBytes < minimumLength)
         {
+          struct ipaddr_str buf;
           olsr_printf(
             1,
             "%s: received a too short encapsulation packet (%d bytes) from %s on \"%s\"\n",
             PLUGIN_NAME,
             nBytes,
-            olsr_ip_to_string(&forwardedBy),
+            olsr_ip_to_string(&buf, &forwardedBy),
             walker->ifName);
 
           continue; /* for */
index 32e1c5a..d96449b 100644 (file)
@@ -63,6 +63,7 @@
 #include "link_set.h" /* get_link_set() */
 #include "lq_route.h" /* MIN_LINK_QUALITY */
 #include "tc_set.h" /* olsr_lookup_tc_entry(), olsr_tc_lookup_dst() */
+#include "net_olsr.h" /* ipequal */
 
 /* Plugin includes */
 #include "Packet.h" /* IFHWADDRLEN */
@@ -437,10 +438,13 @@ void GetBestTwoNeighbors(
     /* TODO: get_link_set() is not thread-safe! */
     for (walker = get_link_set(); walker != NULL; walker = walker->next) 
     {
+#ifndef NODEBUG
+      struct ipaddr_str buf;
+#endif
       union olsr_ip_addr* neighborMainIp;
 
       /* Consider only links from the specified interface */
-      if (! COMP_IP(&intf->intAddr, &walker->local_iface_addr))
+      if (! ipequal(&intf->intAddr, &walker->local_iface_addr))
       {
         continue; /* for */
       }
@@ -450,43 +454,52 @@ void GetBestTwoNeighbors(
         "%s: ----> Considering forwarding pkt on \"%s\" to %s\n",
         PLUGIN_NAME_SHORT,
         intf->ifName,
-        olsr_ip_to_string(&walker->neighbor_iface_addr));
+        olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
 
       neighborMainIp = MainAddressOf(&walker->neighbor_iface_addr);
 
       /* Consider only neighbors with an IP address that differs from the
        * passed IP addresses (if passed). Rely on short-circuit boolean evaluation. */
-      if (source != NULL && COMP_IP(neighborMainIp, MainAddressOf(source)))
+      if (source != NULL && ipequal(neighborMainIp, MainAddressOf(source)))
       {
+#ifndef NODEBUG
+        struct ipaddr_str buf;
+#endif
         OLSR_PRINTF(
           9,
           "%s: ----> Not forwarding to %s: is source of pkt\n",
           PLUGIN_NAME_SHORT,
-          olsr_ip_to_string(&walker->neighbor_iface_addr));
+          olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
 
         continue; /* for */
       }
 
       /* Rely on short-circuit boolean evaluation */
-      if (forwardedBy != NULL && COMP_IP(neighborMainIp, MainAddressOf(forwardedBy)))
+      if (forwardedBy != NULL && ipequal(neighborMainIp, MainAddressOf(forwardedBy)))
       {
+#ifndef NODEBUG
+        struct ipaddr_str buf;
+#endif
         OLSR_PRINTF(
           9,
           "%s: ----> Not forwarding to %s: is the node that forwarded the pkt\n",
           PLUGIN_NAME_SHORT,
-          olsr_ip_to_string(&walker->neighbor_iface_addr));
+          olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
 
         continue; /* for */
       }
 
       /* Rely on short-circuit boolean evaluation */
-      if (forwardedTo != NULL && COMP_IP(neighborMainIp, MainAddressOf(forwardedTo)))
+      if (forwardedTo != NULL && ipequal(neighborMainIp, MainAddressOf(forwardedTo)))
       {
+#ifndef NODEBUG
+        struct ipaddr_str buf;
+#endif
         OLSR_PRINTF(
           9,
           "%s: ----> Not forwarding to %s: is the node to which the pkt was forwarded\n",
           PLUGIN_NAME_SHORT,
-          olsr_ip_to_string(&walker->neighbor_iface_addr));
+          olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
 
         continue; /* for */
       }
@@ -537,7 +550,7 @@ void GetBestTwoNeighbors(
       struct tc_entry* tcLastHop;
 
       /* Consider only links from the specified interface */
-      if (! COMP_IP(&intf->intAddr, &walker->local_iface_addr))
+      if (! ipequal(&intf->intAddr, &walker->local_iface_addr))
       {
         continue; /* for */
       }
@@ -553,7 +566,7 @@ void GetBestTwoNeighbors(
 
       /* Consider only neighbors with an IP address that differs from the
        * passed IP addresses (if passed). Rely on short-circuit boolean evaluation. */
-      if (source != NULL && COMP_IP(neighborMainIp, MainAddressOf(source)))
+      if (source != NULL && ipequal(neighborMainIp, MainAddressOf(source)))
       {
         OLSR_PRINTF(
           9,
@@ -565,7 +578,7 @@ void GetBestTwoNeighbors(
       }
 
       /* Rely on short-circuit boolean evaluation */
-      if (forwardedBy != NULL && COMP_IP(neighborMainIp, MainAddressOf(forwardedBy)))
+      if (forwardedBy != NULL && ipequal(neighborMainIp, MainAddressOf(forwardedBy)))
       {
         OLSR_PRINTF(
           9,
@@ -577,7 +590,7 @@ void GetBestTwoNeighbors(
       }
 
       /* Rely on short-circuit boolean evaluation */
-      if (forwardedTo != NULL && COMP_IP(neighborMainIp, MainAddressOf(forwardedTo)))
+      if (forwardedTo != NULL && ipequal(neighborMainIp, MainAddressOf(forwardedTo)))
       {
         OLSR_PRINTF(
           9,
@@ -724,13 +737,16 @@ void GetBestTwoNeighbors(
     /* TODO: get_link_set() is not thread-safe! */
     for (walker = get_link_set(); walker != NULL; walker = walker->next) 
     {
+#ifndef NODEBUG
+      struct ipaddr_str buf;
+#endif
       union olsr_ip_addr* neighborMainIp;
       struct link_entry* bestLinkToNeighbor;
       struct tc_entry* tcLastHop;
       float currEtx;
  
       /* Consider only links from the specified interface */
-      if (! COMP_IP(&intf->intAddr, &walker->local_iface_addr))
+      if (! ipequal(&intf->intAddr, &walker->local_iface_addr))
       {
         continue; /* for */
       }
@@ -740,43 +756,43 @@ void GetBestTwoNeighbors(
         "%s: ----> Considering forwarding pkt on \"%s\" to %s\n",
         PLUGIN_NAME_SHORT,
         intf->ifName,
-        olsr_ip_to_string(&walker->neighbor_iface_addr));
+        olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
 
       neighborMainIp = MainAddressOf(&walker->neighbor_iface_addr);
 
       /* Consider only neighbors with an IP address that differs from the
        * passed IP addresses (if passed). Rely on short-circuit boolean evaluation. */
-      if (source != NULL && COMP_IP(neighborMainIp, MainAddressOf(source)))
+      if (source != NULL && ipequal(neighborMainIp, MainAddressOf(source)))
       {
         OLSR_PRINTF(
           9,
           "%s: ----> Not forwarding to %s: is source of pkt\n",
           PLUGIN_NAME_SHORT,
-          olsr_ip_to_string(&walker->neighbor_iface_addr));
+          olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
 
         continue; /* for */
       }
 
       /* Rely on short-circuit boolean evaluation */
-      if (forwardedBy != NULL && COMP_IP(neighborMainIp, MainAddressOf(forwardedBy)))
+      if (forwardedBy != NULL && ipequal(neighborMainIp, MainAddressOf(forwardedBy)))
       {
         OLSR_PRINTF(
           9,
           "%s: ----> Not forwarding to %s: is the node that forwarded the pkt\n",
           PLUGIN_NAME_SHORT,
-          olsr_ip_to_string(&walker->neighbor_iface_addr));
+          olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
 
         continue; /* for */
       }
 
       /* Rely on short-circuit boolean evaluation */
-      if (forwardedTo != NULL && COMP_IP(neighborMainIp, MainAddressOf(forwardedTo)))
+      if (forwardedTo != NULL && ipequal(neighborMainIp, MainAddressOf(forwardedTo)))
       {
         OLSR_PRINTF(
           9,
           "%s: ----> Not forwarding to %s: is the node to which the pkt was forwarded\n",
           PLUGIN_NAME_SHORT,
-          olsr_ip_to_string(&walker->neighbor_iface_addr));
+          olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
 
         continue; /* for */
       }
@@ -794,7 +810,7 @@ void GetBestTwoNeighbors(
           9,
           "%s: ----> Not forwarding to %s: link is timing out\n",
           PLUGIN_NAME_SHORT,
-          olsr_ip_to_string(&walker->neighbor_iface_addr));
+          olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
 
         continue; /* for */
       }
@@ -804,7 +820,7 @@ void GetBestTwoNeighbors(
         9,
         "%s: ----> Forwarding pkt to %s will cost ETX %5.2f\n",
         PLUGIN_NAME_SHORT,
-        olsr_ip_to_string(&walker->neighbor_iface_addr),
+        olsr_ip_to_string(&buf, &walker->neighbor_iface_addr),
         currEtx);
 
       /* If the candidate neighbor is best reached via another interface, then skip 
@@ -817,38 +833,46 @@ void GetBestTwoNeighbors(
       {
         if (bestLinkToNeighbor == NULL)
         {
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+#endif
           OLSR_PRINTF(
             9,
             "%s: ----> Not forwarding to %s: no link found\n",
             PLUGIN_NAME_SHORT,
-            olsr_ip_to_string(&walker->neighbor_iface_addr));
+            olsr_ip_to_string(&buf, &walker->neighbor_iface_addr));
         }
         else
         {
+#ifndef NODEBUG
           struct interface* bestIntf = if_ifwithaddr(&bestLinkToNeighbor->local_iface_addr);
-
+          struct ipaddr_str buf;
+#endif
           OLSR_PRINTF(
             9,
             "%s: ----> Not forwarding to %s: \"%s\" gives a better link to this neighbor, costing %5.2f\n",
             PLUGIN_NAME_SHORT,
-            olsr_ip_to_string(&walker->neighbor_iface_addr),
+            olsr_ip_to_string(&buf, &walker->neighbor_iface_addr),
             bestIntf->int_name,
             CalcEtx(
               bestLinkToNeighbor->loss_link_quality,
               bestLinkToNeighbor->neigh_link_quality));
         }
-
+        
         continue; /* for */
       }
 
       if (forwardedBy != NULL)
       {
+#ifndef NODEBUG
+        struct ipaddr_str forwardedByBuf, niaBuf;
+#endif
         OLSR_PRINTF(
           9,
           "%s: ----> 2-hop path from %s via me to %s will cost ETX %5.2f\n",
           PLUGIN_NAME_SHORT,
-          olsr_ip_to_string(forwardedBy),
-          olsr_ip_to_string(&walker->neighbor_iface_addr),
+          olsr_ip_to_string(&forwardedByBuf, forwardedBy),
+          olsr_ip_to_string(&niaBuf, &walker->neighbor_iface_addr),
           previousLinkEtx + currEtx);
       }
 
@@ -875,13 +899,17 @@ void GetBestTwoNeighbors(
 
             if (previousLinkEtx + currEtx > tcEtx)
             {
+#ifndef NODEBUG
+              struct ipaddr_str neighbor_iface_buf, forw_buf;
+              olsr_ip_to_string(&neighbor_iface_buf, &walker->neighbor_iface_addr);
+#endif
               OLSR_PRINTF(
                 9,
                 "%s: ----> Not forwarding to %s: I am not an MPR between %s and %s, direct link costs %5.2f\n",
                 PLUGIN_NAME_SHORT,
-                olsr_ip_to_string(&walker->neighbor_iface_addr),
-                olsr_ip_to_string(forwardedBy),
-                olsr_ip_to_string(&walker->neighbor_iface_addr),
+                neighbor_iface_buf.buf,
+                olsr_ip_to_string(&forw_buf, forwardedBy),
+                neighbor_iface_buf.buf,
                 tcEtx);
 
               continue; /* for */
@@ -921,6 +949,9 @@ void GetBestTwoNeighbors(
   }
   else
   {
+#ifndef NODEBUG
+    struct ipaddr_str buf;
+#endif
     OLSR_PRINTF(
       9,
       "%s: ----> Best neighbor%s to forward to on \"%s\": ",
@@ -931,14 +962,14 @@ void GetBestTwoNeighbors(
     OLSR_PRINTF(
       9,
       "%s",
-      olsr_ip_to_string(&result->links[0]->neighbor_iface_addr));
+      olsr_ip_to_string(&buf, &result->links[0]->neighbor_iface_addr));
 
     if (result->links[1] != NULL)
     {
       OLSR_PRINTF(
         9,
         ", %s",
-        olsr_ip_to_string(&result->links[1]->neighbor_iface_addr));
+        olsr_ip_to_string(&buf, &result->links[1]->neighbor_iface_addr));
     } /* if */
 
     OLSR_PRINTF(9, "\n");
@@ -1237,7 +1268,7 @@ static int CreateLocalEtherTunTap(void)
 
       if (bmfIf->olsrIntf != NULL)
       {
-        EtherTunTapIp = ntohl(bmfIf->intAddr.v4);
+        EtherTunTapIp = ntohl(bmfIf->intAddr.v4.s_addr);
         EtherTunTapIpBroadcast = EtherTunTapIp;
       }
     }
@@ -1326,8 +1357,8 @@ static int CreateLocalEtherTunTap(void)
     union olsr_ip_addr temp_net;
     union olsr_ip_addr temp_netmask;
 
-    temp_net.v4 = htonl(EtherTunTapIp);
-    temp_netmask.v4 = htonl(0xFFFFFFFF);
+    temp_net.v4.s_addr = htonl(EtherTunTapIp);
+    temp_netmask.v4.s_addr = htonl(0xFFFFFFFF);
     add_local_hna4_entry(&temp_net, &temp_netmask);
   }
 
@@ -1439,8 +1470,10 @@ static int CreateInterface(
     /* For an OLSR-interface, copy the interface address and broadcast
      * address from the OLSR interface object. Downcast to correct sockaddr
      * subtype. */
-    COPY_IP(&newIf->intAddr, &((struct sockaddr_in *)&olsrIntf->int_addr)->sin_addr.s_addr);
-    COPY_IP(&newIf->broadAddr, &((struct sockaddr_in *)&olsrIntf->int_broadaddr)->sin_addr.s_addr);
+    //COPY_IP(&newIf->intAddr, &((struct sockaddr_in *)&olsrIntf->int_addr)->sin_addr.s_addr);
+    newIf->intAddr.v4 = ((struct sockaddr_in *)&olsrIntf->int_addr)->sin_addr;
+    //COPY_IP(&newIf->broadAddr, &((struct sockaddr_in *)&olsrIntf->int_broadaddr)->sin_addr.s_addr);
+    newIf->broadAddr.v4 = ((struct sockaddr_in *)&olsrIntf->int_broadaddr)->sin_addr;
   }
   else
   {
@@ -1452,12 +1485,13 @@ static int CreateInterface(
     {
       BmfPError("ioctl(SIOCGIFADDR) error for interface \"%s\"", ifName);
 
-      newIf->intAddr.v4 = inet_addr("0.0.0.0");
+      newIf->intAddr.v4.s_addr = inet_addr("0.0.0.0");
          }
          else
          {
       /* Downcast to correct sockaddr subtype */
-      COPY_IP(&newIf->intAddr, &((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr);
+      //COPY_IP(&newIf->intAddr, &((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr);
+      newIf->intAddr.v4 = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
     }
 
     /* For a non-OLSR interface, retrieve the IP broadcast address ourselves */
@@ -1468,12 +1502,13 @@ static int CreateInterface(
     {
       BmfPError("ioctl(SIOCGIFBRDADDR) error for interface \"%s\"", ifName);
 
-      newIf->broadAddr.v4 = inet_addr("0.0.0.0");
+      newIf->broadAddr.v4.s_addr = inet_addr("0.0.0.0");
          }
          else
          {
       /* Downcast to correct sockaddr subtype */
-      COPY_IP(&newIf->broadAddr, &((struct sockaddr_in *)&ifr.ifr_broadaddr)->sin_addr.s_addr);
+      //COPY_IP(&newIf->broadAddr, &((struct sockaddr_in *)&ifr.ifr_broadaddr)->sin_addr.s_addr);
+      newIf->broadAddr.v4 = ((struct sockaddr_in *)&ifr.ifr_broadaddr)->sin_addr;
     }
   }
 
@@ -1589,7 +1624,8 @@ int CreateBmfNetworkInterfaces(struct interface* skipThisIntf)
     }
 
     /* ...find the OLSR interface structure, if any */
-    COPY_IP(&ipAddr, &((struct sockaddr_in*)&ifr->ifr_addr)->sin_addr.s_addr);
+    //COPY_IP(&ipAddr, &((struct sockaddr_in*)&ifr->ifr_addr)->sin_addr.s_addr);
+    ipAddr.v4 =  ((struct sockaddr_in*)&ifr->ifr_addr)->sin_addr;
     olsrIntf = if_ifwithaddr(&ipAddr);
 
     if (skipThisIntf != NULL && olsrIntf == skipThisIntf)
@@ -1831,7 +1867,8 @@ void CheckAndUpdateLocalBroadcast(unsigned char* ipPacket, union olsr_ip_addr* b
   assert(ipPacket != NULL && broadAddr != NULL);
 
   iph = (struct iphdr*) ipPacket;
-  COPY_IP(&destIp, &iph->daddr);
+  //COPY_IP(&destIp, &iph->daddr);
+  destIp.v4.s_addr = iph->daddr;
   if (! IsMulticast(&destIp))
   {
     u_int32_t origDaddr, newDaddr;
@@ -1839,7 +1876,8 @@ void CheckAndUpdateLocalBroadcast(unsigned char* ipPacket, union olsr_ip_addr* b
 
     origDaddr = ntohl(iph->daddr);
 
-    COPY_IP(&iph->daddr, broadAddr);
+    //COPY_IP(&iph->daddr, broadAddr);
+    iph->daddr = broadAddr->v4.s_addr;
     newDaddr = ntohl(iph->daddr);
 
     /* Re-calculate IP header checksum for new destination */
index ba9d8c0..050ba4f 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.30 2007/11/05 15:32:55 bernd67 Exp $
+ * $Id: olsrd_dot_draw.c,v 1.31 2007/11/08 22:47:39 bernd67 Exp $
  */
 
 /*
@@ -67,6 +67,7 @@
 #include "mid_set.h"
 #include "link_set.h"
 #include "socket_parser.h"
+#include "net_olsr.h"
 
 #include "olsrd_dot_draw.h"
 #include "olsrd_plugin.h"
@@ -153,16 +154,14 @@ static void
 ipc_print_neigh_link(const struct neighbor_entry *neighbor)
 {
   char buf[256];
-  const char* adr;
+  struct ipaddr_str strbuf;
   double etx = 0.0;
   char* style = "solid";
   struct link_entry* link;
-  adr = olsr_ip_to_string(&olsr_cnf->main_addr);
-  sprintf( buf, "\"%s\" -> ", adr );
+
+  sprintf( buf, "\"%s\" -> ", olsr_ip_to_string(&strbuf, &olsr_cnf->main_addr));
   ipc_send_str(buf);
   
-  adr = olsr_ip_to_string(&neighbor->neighbor_main_addr);
-  
   if (neighbor->status == 0) { // non SYM
        style = "dashed";
   }
@@ -173,11 +172,11 @@ ipc_print_neigh_link(const struct neighbor_entry *neighbor)
       }
   }
     
-  sprintf( buf, "\"%s\"[label=\"%.2f\", style=%s];\n", adr, etx, style );
+  sprintf( buf, "\"%s\"[label=\"%.2f\", style=%s];\n", olsr_ip_to_string(&strbuf, &neighbor->neighbor_main_addr), etx, style );
   ipc_send_str(buf);
   
-   if (neighbor->is_mpr) {
-       sprintf( buf, "\"%s\"[shape=box];\n", adr );
+  if (neighbor->is_mpr) {
+       sprintf( buf, "\"%s\"[shape=box];\n", buf);
        ipc_send_str(buf);
   }
 }
@@ -267,7 +266,7 @@ ipc_action(int fd __attribute__((unused)))
     }
   else
     {
-      if(ntohl(pin.sin_addr.s_addr) != ntohl(ipc_accept_ip.v4))
+        if(!ip4equal(&pin.sin_addr, &ipc_accept_ip.v4))
        {
          olsr_printf(0, "Front end-connection from foreign host (%s) not allowed!\n", inet_ntoa(pin.sin_addr));
          close(ipc_connection);
@@ -292,7 +291,7 @@ pcf_event(int changes_neighborhood,
          int changes_hna)
 {
   int res;
-  olsr_u8_t index;
+  int index;
   struct neighbor_entry *neighbor_table_tmp;
   struct tc_entry *tc;
   struct tc_edge_entry *tc_edge;
@@ -307,8 +306,7 @@ pcf_event(int changes_neighborhood,
 
       /* Neighbors */
       for(index=0;index<HASHSIZE;index++)
-       {
-         
+       {         
          for(neighbor_table_tmp = neighbortable[index].next;
              neighbor_table_tmp != &neighbortable[index];
              neighbor_table_tmp = neighbor_table_tmp->next)
@@ -347,7 +345,7 @@ pcf_event(int changes_neighborhood,
               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;
+              hna_msk.v4 = netmask.v4.s_addr;
               ipc_print_net(&olsr_cnf->interfaces->interf->ip_addr,
                             &hna->net.prefix,
                             &hna_msk);
@@ -370,21 +368,22 @@ pcf_event(int changes_neighborhood,
     }
 
 
-  if(!ipc_socket_up)
+  if (!ipc_socket_up) {
     plugin_ipc_init();
-
+  }
   return res;
 }
 
 static void
 ipc_print_tc_link(const struct tc_entry *entry, const struct tc_edge_entry *dst_entry)
 {
-  char buf[256];
+  char buf[512];
+  struct ipaddr_str strbuf1, strbuf2;
 
-  sprintf( buf, "\"%s\" -> ", olsr_ip_to_string(&entry->addr));
-  ipc_send_str(buf);
-  
-  sprintf( buf, "\"%s\"[label=\"%.2f\"];\n", olsr_ip_to_string(&dst_entry->T_dest_addr), olsr_calc_tc_etx(dst_entry));
+  sprintf( buf, "\"%s\" -> \"%s\"[label=\"%.2f\"];\n",
+           olsr_ip_to_string(&strbuf1, &entry->addr),
+           olsr_ip_to_string(&strbuf2, &dst_entry->T_dest_addr),
+           olsr_calc_tc_etx(dst_entry));
   ipc_send_str(buf);
 }
 
@@ -392,26 +391,19 @@ ipc_print_tc_link(const struct tc_entry *entry, const struct tc_edge_entry *dst_
 static void
 ipc_print_net(const union olsr_ip_addr *gw, const union olsr_ip_addr *net, const union hna_netmask *mask)
 {
-  const char *adr;
-
-  adr = olsr_ip_to_string(gw);
-  ipc_send_str("\"");
-  ipc_send_str(adr);
-  ipc_send_str("\" -> \"");
-  adr = olsr_ip_to_string(net);
-  ipc_send_str(adr);
-  ipc_send_str("/");
-  adr = olsr_netmask_to_string(mask);
-  ipc_send_str(adr);
-  ipc_send_str("\"[label=\"HNA\"];\n");
-  ipc_send_str("\"");
-  adr = olsr_ip_to_string(net);
-  ipc_send_str(adr);
-  ipc_send_str("/");
-  adr = olsr_netmask_to_string(mask);
-  ipc_send_str(adr);
-  ipc_send_str("\"");
-  ipc_send_str("[shape=diamond];\n");
+  char buf[512];
+  struct ipaddr_str gwbuf, netbuf;
+
+  sprintf( buf, "\"%s\" -> \"%s/%s\"[label=\"HNA\"];\n",
+           olsr_ip_to_string(&gwbuf, gw),
+           olsr_ip_to_string(&netbuf, net),
+           olsr_netmask_to_string(mask));
+  ipc_send_str(buf);
+
+  sprintf( buf,"\"%s/%s\"[shape=diamond];\n",
+           olsr_ip_to_string(&netbuf, net),
+           olsr_netmask_to_string(mask));
+  ipc_send_str(buf);
 }
 
 static int
index f025b1a..2c50d3a 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_plugin.c,v 1.17 2007/07/23 12:58:38 bernd67 Exp $
+ * $Id: olsrd_plugin.c,v 1.18 2007/11/08 22:47:39 bernd67 Exp $
  */
 
 /*
@@ -77,7 +77,7 @@ static void my_init(void)
 
     /* defaults for parameters */
     ipc_port = 2004;
-    ipc_accept_ip.v4 = htonl(INADDR_LOOPBACK);
+    ipc_accept_ip.v4.s_addr = htonl(INADDR_LOOPBACK);
 }
 
 
index b81a2af..67c354d 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_dyn_gw.c,v 1.23 2007/09/17 21:57:05 bernd67 Exp $
+ * $Id: olsrd_dyn_gw.c,v 1.24 2007/11/08 22:47:39 bernd67 Exp $
  */
 
 /*
@@ -165,8 +165,8 @@ static int set_plugin_ping(const char *value, void *data __attribute__((unused))
     if (the_hna_list == NULL){
         union olsr_ip_addr temp_net;
         union olsr_ip_addr temp_netmask;
-        temp_net.v4 = INET_NET;
-        temp_netmask.v4 = INET_PREFIX;
+        temp_net.v4.s_addr = INET_NET;
+        temp_netmask.v4.s_addr = INET_PREFIX;
         the_hna_list = add_to_hna_list(the_hna_list, &temp_net, &temp_netmask);
         if (the_hna_list == NULL) {
             return 1;
@@ -364,10 +364,10 @@ check_gw(union olsr_ip_addr *net, union olsr_ip_addr *mask, struct ping_list *th
 
         if( (iflags & RTF_UP) &&
             (metric == 0) &&
-            (netmask == mask->v4) && 
-            (dest_addr == net->v4))
+            (netmask == mask->v4.s_addr) && 
+            (dest_addr == net->v4.s_addr))
           {
-            if ( ((mask->v4==INET_PREFIX)&&(net->v4==INET_NET))&&(!(iflags & RTF_GATEWAY)))
+            if ( ((mask->v4.s_addr == INET_PREFIX)&&(net->v4.s_addr == INET_NET))&&(!(iflags & RTF_GATEWAY)))
               {
                 fclose(fp);  
                 return retval;
@@ -388,7 +388,7 @@ check_gw(union olsr_ip_addr *net, union olsr_ip_addr *mask, struct ping_list *th
 
     fclose(fp);      
     if(retval == 0){
-      olsr_printf(1, "HNA[%08x/%08x] is invalid\n", net->v4,mask->v4);
+      olsr_printf(1, "HNA[%08x/%08x] is invalid\n", net->v4.s_addr, mask->v4.s_addr);
     }  
     return retval;
 }
index 21364be..0ff9a5f 100644 (file)
@@ -83,8 +83,8 @@ olsrd_plugin_init(void)
 {
   printf("OLSRD dyn_gw_plain plugin by Sven-Ola\n");
   
-  gw_net.v4 = INET_NET;
-  gw_netmask.v4 = INET_PREFIX;
+  gw_net.v4.s_addr = INET_NET;
+  gw_netmask.v4.s_addr = INET_PREFIX;
 
   has_inet_gateway = 0;
   
@@ -147,8 +147,8 @@ check_gw(union olsr_ip_addr *net, union olsr_ip_addr *mask)
        if(//(iflags & RTF_GATEWAY) &&
           (iflags & RTF_UP) &&
           (metric == 0) &&
-          (netmask == mask->v4) && 
-          (dest_addr == net->v4))
+          (netmask == mask->v4.s_addr) && 
+          (dest_addr == net->v4.s_addr))
          {
             olsr_printf(DEBUGLEV, "INTERNET GATEWAY VIA %s detected in routing table.\n", iface);
             retval=1;
index 96f16a9..fd52db2 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.11 2007/11/05 15:32:55 bernd67 Exp $
+ * $Id: admin_interface.c,v 1.12 2007/11/08 22:47:40 bernd67 Exp $
  */
 
 /*
@@ -51,6 +51,7 @@
 #include "admin_html.h"
 #include "admin_interface.h"
 #include "local_hna_set.h" /* add_local_hna4_entry() */
+#include "net_olsr.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -123,21 +124,22 @@ build_admin_body(char *buf, olsr_u32_t bufsize __attribute__((unused)))
   if(olsr_cnf->hna_entries) {
     if(olsr_cnf->ip_version == AF_INET) {
       struct local_hna_entry *hna;
-      
+      struct ipaddr_str netbuf, maskbuf;
       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));
+                         olsr_ip_to_string(&netbuf, &hna->net.prefix),
+                         olsr_ip_to_string(&maskbuf, &netmask));
       }
     } else {
       struct local_hna_entry *hna;
       for(hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+        struct ipaddr_str netbuf;
         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),
+                         olsr_ip_to_string(&netbuf, &hna->net.prefix),
                          hna->net.prefix_len);
       }
     }
index 1e2e417..f81a40a 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.82 2007/11/05 15:32:55 bernd67 Exp $
+ * $Id: olsrd_httpinfo.c,v 1.83 2007/11/08 22:47:40 bernd67 Exp $
  */
 
 /*
@@ -161,7 +161,7 @@ static int build_cfgfile_body(char *, olsr_u32_t);
 static int check_allowed_ip(const struct allowed_net * const allowed_nets, const union olsr_ip_addr * const addr);
 
 static int build_ip_txt(char *buf, const olsr_u32_t bufsize, const olsr_bool want_link,
-                        const union olsr_ip_addr * const ipaddr, const int prefix_len);
+                        const char * const ipaddrstr, const int prefix_len);
 
 static int build_ipaddr_link(char *buf, const olsr_u32_t bufsize, const olsr_bool want_link,
                              const union olsr_ip_addr * const ipaddr,
@@ -234,11 +234,10 @@ olsrd_plugin_init(void)
   /* set up HTTP socket */
   http_socket = get_http_socket(http_port != 0 ? http_port :  DEFAULT_TCP_PORT);
 
-  if(http_socket < 0)
-    {
-      fprintf(stderr, "(HTTPINFO) could not initialize HTTP socket\n");
-      exit(0);
-    }
+  if (http_socket < 0) {
+    fprintf(stderr, "(HTTPINFO) could not initialize HTTP socket\n");
+    exit(0);
+  }
 
   /* Register socket */
   add_olsr_socket(http_socket, &parse_http_request);
@@ -251,23 +250,19 @@ get_http_socket(int port)
 {
   struct sockaddr_in sin;
   olsr_u32_t yes = 1;
-  int s;
 
   /* Init ipc socket */
-  if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) 
-    {
-      olsr_printf(1, "(HTTPINFO)socket %s\n", strerror(errno));
-      return -1;
-    }
-
-  if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&yes, sizeof(yes)) < 0) 
-    {
-      olsr_printf(1, "(HTTPINFO)SO_REUSEADDR failed %s\n", strerror(errno));
-      close(s);
-      return -1;
-    }
-
+  int s = socket(AF_INET, SOCK_STREAM, 0);
+  if (s == -1) {
+    olsr_printf(1, "(HTTPINFO)socket %s\n", strerror(errno));
+    return -1;
+  }
 
+  if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&yes, sizeof(yes)) < 0) {
+    olsr_printf(1, "(HTTPINFO)SO_REUSEADDR failed %s\n", strerror(errno));
+    close(s);
+    return -1;
+  }
 
   /* Bind the socket */
   
@@ -278,20 +273,18 @@ get_http_socket(int port)
   sin.sin_port = htons(port);
   
   /* bind the socket to the port number */
-  if (bind(s, (struct sockaddr *) &sin, sizeof(sin)) == -1) 
-    {
-      olsr_printf(1, "(HTTPINFO) bind failed %s\n", strerror(errno));
-      close(s);
-      return -1;
-    }
+  if (bind(s, (struct sockaddr *) &sin, sizeof(sin)) == -1) {
+    olsr_printf(1, "(HTTPINFO) bind failed %s\n", strerror(errno));
+    close(s);
+    return -1;
+  }
       
   /* show that we are willing to listen */
-  if (listen(s, 1) == -1) 
-    {
-      olsr_printf(1, "(HTTPINFO) listen failed %s\n", strerror(errno));
-      close(s);
-      return -1;
-    }
+  if (listen(s, 1) == -1) {
+    olsr_printf(1, "(HTTPINFO) listen failed %s\n", strerror(errno));
+    close(s);
+    return -1;
+  }
 
   return s;
 }
@@ -309,216 +302,191 @@ parse_http_request(int fd)
   char req_type[11];
   char filename[251];
   char http_version[11];
-  int c = 0, r = 1, size = 0;
+  unsigned int c = 0;
+  int r = 1, size = 0;
 
-  if(curr_clients >= MAX_CLIENTS)
+  if (curr_clients >= MAX_CLIENTS) {
     return;
-
+  }
   curr_clients++;
 
   addrlen = sizeof(struct sockaddr_in);
-  if ((client_sockets[curr_clients] = accept(fd, (struct sockaddr *)  &pin, &addrlen)) == -1)
-    {
-      olsr_printf(1, "(HTTPINFO) accept: %s\n", strerror(errno));
-      goto close_connection;
-    }
+  if ((client_sockets[curr_clients] = accept(fd, (struct sockaddr *)  &pin, &addrlen)) == -1) {
+    olsr_printf(1, "(HTTPINFO) accept: %s\n", strerror(errno));
+    goto close_connection;
+  }
 
-  if(!check_allowed_ip(allowed_nets, (union olsr_ip_addr *)&pin.sin_addr.s_addr))
-    {
-      olsr_printf(1, "HTTP request from non-allowed host %s!\n", 
-                 olsr_ip_to_string((union olsr_ip_addr *)&pin.sin_addr.s_addr));
-      close(client_sockets[curr_clients]);
-    }
+  if (!check_allowed_ip(allowed_nets, (union olsr_ip_addr *)&pin.sin_addr.s_addr)) {
+    struct ipaddr_str strbuf;
+    olsr_printf(0, "HTTP request from non-allowed host %s!\n", 
+                olsr_ip_to_string(&strbuf, (union olsr_ip_addr *)&pin.sin_addr.s_addr));
+    close(client_sockets[curr_clients]);
+  }
 
   addr = inet_ntoa(pin.sin_addr);
 
+  memset(req, 0, sizeof(req));
+  memset(body, 0, sizeof(body));
 
-  memset(req, 0, MAX_HTTPREQ_SIZE);
-  memset(body, 0, 1024*10);
-
-  while((r = recv(client_sockets[curr_clients], &req[c], 1, 0)) > 0 && (c < (MAX_HTTPREQ_SIZE-1)))
-    {
+  while ((r = recv(client_sockets[curr_clients], &req[c], 1, 0)) > 0 && (c < sizeof(req)-1)) {
       c++;
 
-      if((c > 3 && !strcmp(&req[c-4], "\r\n\r\n")) ||
+      if ((c > 3 && !strcmp(&req[c-4], "\r\n\r\n")) ||
         (c > 1 && !strcmp(&req[c-2], "\n\n")))
-       break;
-    }
+          break;
+  }
   
-  if(r < 0)
-    {
-      olsr_printf(1, "(HTTPINFO) Failed to recieve data from client!\n");
-      stats.err_hits++;
-      goto close_connection;
-    }
+  if (r < 0) {
+    olsr_printf(1, "(HTTPINFO) Failed to recieve data from client!\n");
+    stats.err_hits++;
+    goto close_connection;
+  }
   
   /* Get the request */
-  if(sscanf(req, "%10s %250s %10s\n", req_type, filename, http_version) != 3)
-    {
-      /* Try without HTTP version */
-      if(sscanf(req, "%10s %250s\n", req_type, filename) != 2)
-       {
-         olsr_printf(1, "(HTTPINFO) Error parsing request %s!\n", req);
-         stats.err_hits++;
-         goto close_connection;
-       }
+  if (sscanf(req, "%10s %250s %10s\n", req_type, filename, http_version) != 3) {
+    /* Try without HTTP version */
+    if (sscanf(req, "%10s %250s\n", req_type, filename) != 2) {
+      olsr_printf(1, "(HTTPINFO) Error parsing request %s!\n", req);
+      stats.err_hits++;
+      goto close_connection;
     }
-  
-  
+  }
+
   olsr_printf(1, "Request: %s\nfile: %s\nVersion: %s\n\n", req_type, filename, http_version);
 
-  if(!strcmp(req_type, "POST"))
-    {
+  if (!strcmp(req_type, "POST")) {
 #ifdef ADMIN_INTERFACE
-      int i = 0;
-      while(dynamic_files[i].filename)
-       {
-         printf("POST checking %s\n", dynamic_files[i].filename);
-         if(FILENREQ_MATCH(filename, dynamic_files[i].filename))
-           {
-             olsr_u32_t param_size;
+    int i = 0;
+    while (dynamic_files[i].filename) {
+        printf("POST checking %s\n", dynamic_files[i].filename);
+        if (FILENREQ_MATCH(filename, dynamic_files[i].filename)) {
+            olsr_u32_t param_size;
 
-             stats.ok_hits++;
+            stats.ok_hits++;
 
-             param_size = recv(client_sockets[curr_clients], req, MAX_HTTPREQ_SIZE-1, 0);
+            param_size = recv(client_sockets[curr_clients], req, sizeof(req)-1, 0);
 
-             req[param_size] = '\0';
-             printf("Dynamic read %d bytes\n", param_size);
+            req[param_size] = '\0';
+            printf("Dynamic read %d bytes\n", param_size);
              
-             //memcpy(body, dynamic_files[i].data, static_bin_files[i].data_size);
-             size += dynamic_files[i].process_data_cb(req, param_size, &body[size], sizeof(body)-size);
-             c = build_http_header(HTTP_OK, OLSR_TRUE, size, req, MAX_HTTPREQ_SIZE);  
-             goto send_http_data;
-           }
-         i++;
-       }
-#endif
-      /* We only support GET */
-      strcpy(body, HTTP_400_MSG);
-      stats.ill_hits++;
-      c = build_http_header(HTTP_BAD_REQ, OLSR_TRUE, strlen(body), req, MAX_HTTPREQ_SIZE);
+            //memcpy(body, dynamic_files[i].data, static_bin_files[i].data_size);
+            size += dynamic_files[i].process_data_cb(req, param_size, &body[size], sizeof(body)-size);
+            c = build_http_header(HTTP_OK, OLSR_TRUE, size, req, sizeof(req));  
+            goto send_http_data;
+        }
+        i++;
     }
-  else if(!strcmp(req_type, "GET"))
-    {
-      int i = 0;
-      int y = 0;
-
-      while(static_bin_files[i].filename)
-       {
-         if(FILENREQ_MATCH(filename, static_bin_files[i].filename))
+#endif
+    /* We only support GET */
+    strcpy(body, HTTP_400_MSG);
+    stats.ill_hits++;
+    c = build_http_header(HTTP_BAD_REQ, OLSR_TRUE, strlen(body), req, sizeof(req));
+  } else if (!strcmp(req_type, "GET")) {
+    int i = 0;
+    int y = 0;
+
+    while (static_bin_files[i].filename)       {
+        if (FILENREQ_MATCH(filename, static_bin_files[i].filename)) {
            break;
-         i++;
-       }
+        }
+        i++;
+    }
       
-      if(static_bin_files[i].filename)
-       {
-         stats.ok_hits++;
-         memcpy(body, static_bin_files[i].data, static_bin_files[i].data_size);
-         size = static_bin_files[i].data_size;
-         c = build_http_header(HTTP_OK, OLSR_FALSE, size, req, MAX_HTTPREQ_SIZE);  
-         goto send_http_data;
-       }
-
-      i = 0;
+    if (static_bin_files[i].filename) {
+      stats.ok_hits++;
+      memcpy(body, static_bin_files[i].data, static_bin_files[i].data_size);
+      size = static_bin_files[i].data_size;
+      c = build_http_header(HTTP_OK, OLSR_FALSE, size, req, sizeof(req));  
+      goto send_http_data;
+    }
 
-      while(static_txt_files[i].filename)
-       {
-         if(FILENREQ_MATCH(filename, static_txt_files[i].filename))
-           break;
-         i++;
-       }
+    i = 0;
+    while (static_txt_files[i].filename)       {
+      if (FILENREQ_MATCH(filename, static_txt_files[i].filename)) {
+        break;
+      }
+      i++;
+    }
       
-      if(static_txt_files[i].filename)
-       {
-         stats.ok_hits++;
-         y = 0;
-         while(static_txt_files[i].data[y])
-           {
-             size += snprintf(&body[size], sizeof(body)-size, static_txt_files[i].data[y]);
-             y++;
-           }
-
-         c = build_http_header(HTTP_OK, OLSR_FALSE, size, req, MAX_HTTPREQ_SIZE);  
-         goto send_http_data;
-       }
-
-      i = 0;
+    if (static_txt_files[i].filename) {
+      stats.ok_hits++;
+      y = 0;
+      while (static_txt_files[i].data[y]) {
+        size += snprintf(&body[size], sizeof(body)-size, static_txt_files[i].data[y]);
+        y++;
+      }
+      c = build_http_header(HTTP_OK, OLSR_FALSE, size, req, sizeof(req));  
+      goto send_http_data;
+    }
 
-      if(strlen(filename) > 1)
-       {
-         while(tab_entries[i].filename)
-           {
-             if(FILENREQ_MATCH(filename, tab_entries[i].filename))
-               break;
-             i++;
-           }
-       }
+    i = 0;
+    if (strlen(filename) > 1) {
+      while (tab_entries[i].filename) {
+        if (FILENREQ_MATCH(filename, tab_entries[i].filename)) {
+          break;
+        }
+        i++;
+      }
+    }
 
-      if(tab_entries[i].filename)
-       {
+    if (tab_entries[i].filename) {
 #ifdef NETDIRECT
-         c = build_http_header(HTTP_OK, OLSR_TRUE, size, req, MAX_HTTPREQ_SIZE);
-         r = send(client_sockets[curr_clients], req, c, 0);   
-         if(r < 0)
-           {
-             olsr_printf(1, "(HTTPINFO) Failed sending data to client!\n");
-             goto close_connection;
-           }
-         netsprintf_error = 0;
-         netsprintf_direct = 1;
+      c = build_http_header(HTTP_OK, OLSR_TRUE, size, req, sizeof(req));
+      r = send(client_sockets[curr_clients], req, c, 0);   
+      if (r < 0) {
+        olsr_printf(1, "(HTTPINFO) Failed sending data to client!\n");
+        goto close_connection;
+      }
+      netsprintf_error = 0;
+      netsprintf_direct = 1;
 #endif
-          size += snprintf(&body[size], sizeof(body)-size, "%s", http_ok_head);
+      size += snprintf(&body[size], sizeof(body)-size, "%s", http_ok_head);
          
-         size += build_tabs(&body[size], sizeof(body)-size, i);
-         size += build_frame(&body[size], 
-                             sizeof(body)-size, 
-                             "Current Routes", 
-                             "routes", 
-                             FRAMEWIDTH, 
-                             tab_entries[i].build_body_cb);
+      size += build_tabs(&body[size], sizeof(body)-size, i);
+      size += build_frame(&body[size], 
+                          sizeof(body)-size, 
+                          "Current Routes", 
+                          "routes", 
+                          FRAMEWIDTH, 
+                          tab_entries[i].build_body_cb);
          
-         stats.ok_hits++;
+      stats.ok_hits++;
 
-          size += snprintf(&body[size], sizeof(body)-size, http_ok_tail);
+      size += snprintf(&body[size], sizeof(body)-size, http_ok_tail);
          
 #ifdef NETDIRECT
-         netsprintf_direct = 1;
-         goto close_connection;
+      netsprintf_direct = 1;
+      goto close_connection;
 #else
-         c = build_http_header(HTTP_OK, OLSR_TRUE, size, req, MAX_HTTPREQ_SIZE);
-         
-         goto send_http_data;
+      c = build_http_header(HTTP_OK, OLSR_TRUE, size, req, sizeof(req));
+      goto send_http_data;
 #endif
-       }
+    }
       
       
-      stats.ill_hits++;
-      strcpy(body, HTTP_404_MSG);
-      c = build_http_header(HTTP_BAD_FILE, OLSR_TRUE, strlen(body), req, MAX_HTTPREQ_SIZE);
-    }
-  else
-    {
-      /* We only support GET */
-      strcpy(body, HTTP_400_MSG);
-      stats.ill_hits++;
-      c = build_http_header(HTTP_BAD_REQ, OLSR_TRUE, strlen(body), req, MAX_HTTPREQ_SIZE);
-    }
+    stats.ill_hits++;
+    strcpy(body, HTTP_404_MSG);
+    c = build_http_header(HTTP_BAD_FILE, OLSR_TRUE, strlen(body), req, sizeof(req));
+  } else {
+    /* We only support GET */
+    strcpy(body, HTTP_400_MSG);
+    stats.ill_hits++;
+    c = build_http_header(HTTP_BAD_REQ, OLSR_TRUE, strlen(body), req, sizeof(req));
+  }
 
  send_http_data:
   
   r = writen(client_sockets[curr_clients], req, c);   
-  if(r < 0)
-    {
+  if (r < 0) {
       olsr_printf(1, "(HTTPINFO) Failed sending data to client!\n");
       goto close_connection;
-    }
+  }
 
   r = writen(client_sockets[curr_clients], body, size);
-  if(r < 0)
-    {
+  if (r < 0) {
       olsr_printf(1, "(HTTPINFO) Failed sending data to client!\n");
       goto close_connection;
-    }
+  }
 
  close_connection:
   close(client_sockets[curr_clients]);
@@ -539,10 +507,10 @@ build_http_header(http_header_type type,
   int size;
 
   switch(type) {
-  case(HTTP_BAD_REQ):
+  case HTTP_BAD_REQ:
       h = HTTP_400;
       break;
-  case(HTTP_BAD_FILE):
+  case HTTP_BAD_FILE:
       h = HTTP_404;
       break;
   default:
@@ -566,7 +534,7 @@ build_http_header(http_header_type type,
   size += snprintf(&buf[size], bufsize-size, "Content-type: text/%s\r\n", is_html ? "html" : "plain");
 
   /* Content length */
-  if(msgsize > 0) {
+  if (msgsize > 0) {
       size += snprintf(&buf[size], bufsize-size, "Content-length: %i\r\n", msgsize);
   }
 
@@ -575,7 +543,7 @@ build_http_header(http_header_type type,
    */
   size += snprintf(&buf[size], bufsize-size, "Cache-Control: no-cache\r\n");
 
-  if(!is_html) {
+  if (!is_html) {
     size += snprintf(&buf[size], bufsize-size, "Accept-Ranges: bytes\r\n");
   }
   /* End header */
@@ -593,10 +561,10 @@ static int build_tabs(char *buf, const olsr_u32_t bufsize, int active)
   int size = 0, tabs = 0;
 
   size += snprintf(&buf[size], bufsize-size, html_tabs_prolog);
-  for(tabs = 0; tab_entries[tabs].tab_label; tabs++) {
-    if(!tab_entries[tabs].display_tab)
+  for (tabs = 0; tab_entries[tabs].tab_label; tabs++) {
+    if (!tab_entries[tabs].display_tab) {
       continue;
-
+    }
     size += snprintf(&buf[size], bufsize-size, 
                      "<li><a href=\"%s\"%s>%s</a></li>\n",
                      tab_entries[tabs].filename, 
@@ -614,8 +582,9 @@ static int build_tabs(char *buf, const olsr_u32_t bufsize, int active)
 void
 olsr_plugin_exit(void)
 {
-  if(http_socket)
+  if (http_socket) {
     close(http_socket);
+  }
 }
 
 
@@ -642,32 +611,27 @@ static int build_frame(char *buf,
 
 static int fmt_href(char *buf,
                     const olsr_u32_t bufsize,
-                    const union olsr_ip_addr * const ipaddr)
+                    const char * const ipaddr)
 {
-  return snprintf(buf, bufsize,
-                  "<a href=\"http://%s:%d/all\">",
-                  olsr_ip_to_string(ipaddr),
-                  http_port);
-
+  return snprintf(buf, bufsize, "<a href=\"http://%s:%d/all\">", ipaddr, http_port);
 }
 
 static int build_ip_txt(char *buf,
                         const olsr_u32_t bufsize,
                         const olsr_bool print_link,
-                        const union olsr_ip_addr * const ipaddr,
+                        const char * const ipaddrstr,
                         const int prefix_len)
 {
   int size = 0;
-  if (print_link) { /* Print the link only if there is no prefix_len */
-    size += fmt_href(&buf[size], bufsize-size, ipaddr);
+
+  if (print_link) {
+    size += fmt_href(&buf[size], bufsize-size, ipaddrstr);
   }
 
+  size += snprintf(&buf[size], bufsize-size, "%s", ipaddrstr);
   /* print ip address or ip prefix ? */
-  if (prefix_len == -1) {
-      size += snprintf(&buf[size], bufsize-size, "%s", olsr_ip_to_string(ipaddr));
-  } else {
-      size += snprintf(&buf[size], bufsize-size, "%s/%d", olsr_ip_to_string(ipaddr),
-                       prefix_len);
+  if (prefix_len != -1) {
+      size += snprintf(&buf[size], bufsize-size, "/%d", prefix_len);
   }
   
   if (print_link) { /* Print the link only if there is no prefix_len */
@@ -682,22 +646,25 @@ static int build_ipaddr_link(char *buf, const olsr_u32_t bufsize,
                              const int prefix_len)
 {
   int size = 0;
+  struct ipaddr_str ipaddrstr;
   const struct hostent * const hp =
 #ifndef WIN32
       resolve_ip_addresses ? gethostbyaddr(ipaddr, olsr_cnf->ipsize, olsr_cnf->ip_version) :
 #endif
       NULL;
+  /* Print the link only if there is no prefix_len */
   const int print_link = want_link && (prefix_len == -1 || prefix_len == olsr_cnf->maxplen);
+  olsr_ip_to_string(&ipaddrstr, ipaddr);
 
   size += snprintf(&buf[size], bufsize-size, "<td>");
-  size += build_ip_txt(&buf[size], bufsize-size, print_link, ipaddr, prefix_len);
+  size += build_ip_txt(&buf[size], bufsize-size, print_link, ipaddrstr.buf, prefix_len);
   size += snprintf(&buf[size], bufsize-size, "</td>");
 
   if (resolve_ip_addresses) {
     if (hp) {
       size += snprintf(&buf[size], bufsize-size, "<td>(");
       if (print_link) {
-        size += fmt_href(&buf[size], bufsize-size, ipaddr);
+        size += fmt_href(&buf[size], bufsize-size, ipaddrstr.buf);
       }
       size += snprintf(&buf[size], bufsize-size, "%s", hp->h_name);
       if (print_link) {
@@ -721,16 +688,20 @@ static int build_route(char *buf, olsr_u32_t bufsize, const struct rt_entry * rt
   int size = 0;
 
   size += snprintf(&buf[size], bufsize-size, "<tr>");
-  size += build_ipaddr_with_link(&buf[size], bufsize-size, &rt->rt_dst.prefix,
+  size += build_ipaddr_with_link(&buf[size], bufsize-size,
+                                 &rt->rt_dst.prefix,
                                  rt->rt_dst.prefix_len);
   size += build_ipaddr_with_link(&buf[size], bufsize-size,
                                  &rt->rt_best->rtp_nexthop.gateway, -1);
 
-  size += snprintf(&buf[size], bufsize-size, "<td align=\"center\">%d</td>",
+  size += snprintf(&buf[size], bufsize-size,
+                   "<td align=\"center\">%d</td>",
                    rt->rt_best->rtp_metric.hops);
-  size += snprintf(&buf[size], bufsize-size, "<td align=\"center\">%.3f</td>",
-                     rt->rt_best->rtp_metric.etx);
-  size += snprintf(&buf[size], bufsize-size, "<td align=\"center\">%s</td></tr>\n",
+  size += snprintf(&buf[size], bufsize-size,
+                   "<td align=\"center\">%.3f</td>",
+                   rt->rt_best->rtp_metric.etx);
+  size += snprintf(&buf[size], bufsize-size,
+                   "<td align=\"center\">%s</td></tr>\n",
                    if_ifwithindex_name(rt->rt_best->rtp_nexthop.iif_index));
   return size;
 }
@@ -757,16 +728,17 @@ static int build_routes_body(char *buf, olsr_u32_t bufsize)
 static int build_config_body(char *buf, olsr_u32_t bufsize)
 {
     int size = 0;
-    struct olsr_if *ifs;
-    struct plugin_entry *pentry;
-    struct plugin_param *pparam;
+    const struct olsr_if *ifs;
+    const struct plugin_entry *pentry;
+    const struct plugin_param *pparam;
+    struct ipaddr_str mainaddrbuf;
 
     size += snprintf(&buf[size], bufsize-size, "Version: %s (built on %s on %s)\n<br>", olsrd_version, build_date, build_host);
     size += snprintf(&buf[size], bufsize-size, "OS: %s\n<br>", OS);
 
     { 
-      time_t currtime = time(NULL);
-      int rc = strftime(&buf[size], bufsize-size, "System time: <em>%a, %d %b %Y %H:%M:%S</em><br>", localtime(&currtime));
+      const time_t currtime = time(NULL);
+      const int rc = strftime(&buf[size], bufsize-size, "System time: <em>%a, %d %b %Y %H:%M:%S</em><br>", localtime(&currtime));
       if (rc > 0) {
         size += rc;
       }
@@ -800,7 +772,7 @@ static int build_config_body(char *buf, olsr_u32_t bufsize)
 
     size += snprintf(&buf[size], bufsize-size, "<table width=\"100%%\" border=\"0\">\n<tr>");
 
-    size += snprintf(&buf[size], bufsize-size, "<td>Main address: <strong>%s</strong></td>\n", olsr_ip_to_string(&olsr_cnf->main_addr));
+    size += snprintf(&buf[size], bufsize-size, "<td>Main address: <strong>%s</strong></td>\n", olsr_ip_to_string(&mainaddrbuf, &olsr_cnf->main_addr));
     
     size += snprintf(&buf[size], bufsize-size, "<td>IP version: %d</td>\n", olsr_cnf->ip_version == AF_INET ? 4 : 6);
 
@@ -838,42 +810,56 @@ static int build_config_body(char *buf, olsr_u32_t bufsize)
     size += snprintf(&buf[size], bufsize-size, "</tr>\n<tr>\n");
 
     size += snprintf(&buf[size], bufsize-size, "<td>LQ extension: %s</td>\n", olsr_cnf->lq_level ? "Enabled" : "Disabled");
-    if (olsr_cnf->lq_level)
-      {
-        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);
-      }
+    if (olsr_cnf->lq_level) {
+      size += snprintf(&buf[size], bufsize-size,
+                       "<td>LQ level: %d</td>\n"
+                       "<td>LQ winsize: %d</td>\n",
+                       olsr_cnf->lq_level,
+                       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;
+    for (ifs = olsr_cnf->interfaces; ifs != NULL; ifs = ifs->next) {
+       const struct interface * const rifs = ifs->interf;
+       size += snprintf(&buf[size], bufsize-size, "<tr><th colspan=\"3\">%s</th>\n", ifs->name);
+       if (!rifs) {
+         size += snprintf(&buf[size], bufsize-size, "<tr><td colspan=\"3\">Status: DOWN</td></tr>\n");
+          continue;
+        }
 
-       size += snprintf(&buf[size], bufsize-size, "<tr><th colspan=3>%s</th>\n", ifs->name);
-       if(!rifs)
-         {
-           size += snprintf(&buf[size], bufsize-size, "<tr><td colspan=3>Status: DOWN</td></tr>\n");
-           continue;
-         }
-       
-       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));
-         }
-       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");
-      }
+       if (olsr_cnf->ip_version == AF_INET) {
+          struct ipaddr_str addrbuf, maskbuf, bcastbuf;
+         size += snprintf(&buf[size], bufsize-size,
+                           "<tr>\n"
+                           "<td>IP: %s</td>\n"
+                           "<td>MASK: %s</td>\n"
+                           "<td>BCAST: %s</td>\n"
+                           "</tr>\n",
+                           ip4_to_string(&addrbuf, rifs->int_addr.sin_addr),
+                           ip4_to_string(&maskbuf, rifs->int_netmask.sin_addr),
+                           ip4_to_string(&bcastbuf, rifs->int_broadaddr.sin_addr));
+       } else {
+          struct ipaddr_str addrbuf, maskbuf;
+         size += snprintf(&buf[size], bufsize-size,
+                           "<tr>\n"
+                           "<td>IP: %s</td>\n"
+                           "<td>MCAST: %s</td>\n"
+                           "<td></td>\n"
+                           "</tr>\n",
+                           ip6_to_string(&addrbuf, &rifs->int6_addr.sin6_addr),
+                           ip6_to_string(&maskbuf, &rifs->int6_multaddr.sin6_addr));
+        }          
+        size += snprintf(&buf[size], bufsize-size,
+                         "<tr>\n"
+                         "<td>MTU: %d</td>\n"
+                         "<td>WLAN: %s</td>\n"
+                         "<td>STATUS: UP</td>\n"
+                         "</tr>\n",
+                         rifs->int_mtu,
+                         rifs->is_wireless ? "Yes" : "No");
+    }
     size += snprintf(&buf[size], bufsize-size, "</table>\n");
 
     size += snprintf(&buf[size], bufsize-size,
@@ -882,7 +868,7 @@ static int build_config_body(char *buf, olsr_u32_t bufsize)
 
     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)
+    for (pentry = olsr_cnf->plugins; pentry; pentry = pentry->next)
       {
        size += snprintf(&buf[size], bufsize-size,
                          "<tr><td>%s</td>\n"
@@ -890,7 +876,7 @@ static int build_config_body(char *buf, olsr_u32_t bufsize)
                          "<option>KEY, VALUE</option>\n",
                          pentry->name);
 
-       for(pparam = pentry->params; pparam; pparam = pparam->next)
+       for (pparam = pentry->params; pparam; pparam = pparam->next)
          {
            size += snprintf(&buf[size], bufsize-size, "<option>\"%s\", \"%s\"</option>\n", pparam->key, pparam->value);
          }
@@ -900,24 +886,26 @@ static int build_config_body(char *buf, olsr_u32_t bufsize)
     size += snprintf(&buf[size], bufsize-size, "</table>\n");
 
     size += section_title(&buf[size], bufsize-size, "Announced HNA entries");
-    if(olsr_cnf->hna_entries) {
+    if (olsr_cnf->hna_entries) {
       struct local_hna_entry *hna;
-      if(olsr_cnf->ip_version == AF_INET) {
+      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));
+       for (hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+          union olsr_ip_addr netmask;
+          struct ipaddr_str netbuf, maskbuf;
+          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(&netbuf, &hna->net.prefix),
+                           olsr_ip_to_string(&maskbuf, &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) {
+       for (hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+          struct ipaddr_str netbuf;
           size += snprintf(&buf[size], bufsize-size,
                            "<tr><td>%s</td><td>%d</td></tr>\n", 
-                           olsr_ip_to_string(&hna->net.prefix),
+                           olsr_ip_to_string(&netbuf, &hna->net.prefix),
                            hna->net.prefix_len);
         }
       }
@@ -931,44 +919,40 @@ static int build_config_body(char *buf, olsr_u32_t bufsize)
 static int build_neigh_body(char *buf, olsr_u32_t bufsize)
 {
   struct neighbor_entry *neigh;
-  struct neighbor_2_list_entry *list_2;
   struct link_entry *link = NULL;
-  int size = 0, index, thop_cnt;
+  int size = 0, idx;
 
   size += section_title(&buf[size], bufsize-size, "Links");
 
   size += snprintf(&buf[size], bufsize-size,
                    "<tr><th>Local IP</th><th>Remote IP</th><th>Hysteresis</th>\n");
   if (olsr_cnf->lq_level > 0) {
-    size += snprintf(&buf[size], bufsize-size, "<th align=\"right\">LinkQuality</th><th>lost</th><th>total</th><th align=\"right\">NLQ</th><th align=\"right\">ETX</th>\n");
+    size += snprintf(&buf[size], bufsize-size,
+                     "<th align=\"right\">LinkQuality</th><th>lost</th><th>total</th><th align=\"right\">NLQ</th><th align=\"right\">ETX</th>\n");
   }
   size += snprintf(&buf[size], bufsize-size, "</tr>\n");
 
-  /* Link set */
-  link = link_set;
-    while(link)
-      {
-        size += snprintf(&buf[size], bufsize-size, "<tr>");
-        size += build_ipaddr_with_link(&buf[size], bufsize, &link->local_iface_addr, -1);
-        size += build_ipaddr_with_link(&buf[size], bufsize, &link->neighbor_iface_addr, -1);
-       size += snprintf(&buf[size], bufsize-size, "<td align=\"right\">%0.2f</td>", link->L_link_quality);
-        if (olsr_cnf->lq_level > 0) {
-           size += snprintf(&buf[size], bufsize-size,
-                             "<td align=\"right\">%0.2f</td>"
-                             "<td>%d</td>"
-                             "<td>%d</td>"
-                             "<td align=\"right\">%0.2f</td>"
-                             "<td align=\"right\">%0.2f</td></tr>\n",
-                             link->loss_link_quality,
-                             link->lost_packets, 
-                             link->total_packets,
-                             link->neigh_link_quality, 
-                             olsr_calc_link_etx(link));
-        }
-       size += snprintf(&buf[size], bufsize-size, "</tr>\n");
-
-       link = link->next;
-      }
+  /* Link set */  
+  for (link = link_set; link != NULL; link = link->next) {
+    size += snprintf(&buf[size], bufsize-size, "<tr>");
+    size += build_ipaddr_with_link(&buf[size], bufsize, &link->local_iface_addr, -1);
+    size += build_ipaddr_with_link(&buf[size], bufsize, &link->neighbor_iface_addr, -1);
+    size += snprintf(&buf[size], bufsize-size, "<td align=\"right\">%0.2f</td>", link->L_link_quality);
+    if (olsr_cnf->lq_level > 0) {
+      size += snprintf(&buf[size], bufsize-size,
+                       "<td align=\"right\">%0.2f</td>"
+                       "<td>%d</td>"
+                       "<td>%d</td>"
+                       "<td align=\"right\">%0.2f</td>"
+                       "<td align=\"right\">%0.2f</td></tr>\n",
+                       link->loss_link_quality,
+                       link->lost_packets, 
+                       link->total_packets,
+                       link->neigh_link_quality, 
+                       olsr_calc_link_etx(link));
+    }
+    size += snprintf(&buf[size], bufsize-size, "</tr>\n");
+  }
 
   size += snprintf(&buf[size], bufsize-size, "</table>\n");
 
@@ -976,42 +960,35 @@ static int build_neigh_body(char *buf, olsr_u32_t bufsize)
   size += snprintf(&buf[size], bufsize-size, 
                    "<tr><th>IP address</th><th align=\"center\">SYM</th><th align=\"center\">MPR</th><th align=\"center\">MPRS</th><th align=\"center\">Willingness</th><th>2 Hop Neighbors</th></tr>\n");
   /* Neighbors */
-  for(index=0;index<HASHSIZE;index++)
-    {
-      for(neigh = neighbortable[index].next;
-         neigh != &neighbortable[index];
-         neigh = neigh->next)
-       {
-          size += snprintf(&buf[size], bufsize-size, "<tr>");
-          size += build_ipaddr_with_link(&buf[size], bufsize, &neigh->neighbor_main_addr, -1);
-         size += snprintf(&buf[size], bufsize-size, 
-                         "<td align=\"center\">%s</td>"
-                         "<td align=\"center\">%s</td>"
-                         "<td align=\"center\">%s</td>"
-                         "<td align=\"center\">%d</td>", 
-                         (neigh->status == SYM) ? "YES" : "NO",
-                         neigh->is_mpr ? "YES" : "NO",
-                         olsr_lookup_mprs_set(&neigh->neighbor_main_addr) ? "YES" : "NO",
-                         neigh->willingness);
-
-         size += snprintf(&buf[size], bufsize-size, "<td><select>\n"
-                                                     "<option>IP ADDRESS</option>\n");
-
-         thop_cnt = 0;
-         for(list_2 = neigh->neighbor_2_list.next;
-             list_2 != &neigh->neighbor_2_list;
-             list_2 = list_2->next)
-           {
-              size += snprintf(&buf[size], bufsize-size, "<option>%s</option>\n", olsr_ip_to_string(&list_2->neighbor_2->neighbor_2_addr));
-             thop_cnt ++;
-           }
-         size += snprintf(&buf[size], bufsize-size, "</select> (%d)</td></tr>\n", thop_cnt);
-
-       }
+  for (idx = 0; idx < HASHSIZE; idx++) {
+    for (neigh = neighbortable[idx].next; neigh != &neighbortable[idx]; neigh = neigh->next) {
+      struct neighbor_2_list_entry *list_2;
+      int thop_cnt;
+      size += snprintf(&buf[size], bufsize-size, "<tr>");
+      size += build_ipaddr_with_link(&buf[size], bufsize, &neigh->neighbor_main_addr, -1);
+      size += snprintf(&buf[size], bufsize-size, 
+                       "<td align=\"center\">%s</td>"
+                       "<td align=\"center\">%s</td>"
+                       "<td align=\"center\">%s</td>"
+                       "<td align=\"center\">%d</td>", 
+                       (neigh->status == SYM) ? "YES" : "NO",
+                       neigh->is_mpr ? "YES" : "NO",
+                       olsr_lookup_mprs_set(&neigh->neighbor_main_addr) ? "YES" : "NO",
+                       neigh->willingness);
+
+      size += snprintf(&buf[size], bufsize-size, "<td><select>\n"
+                       "<option>IP ADDRESS</option>\n");
+
+      thop_cnt = 0;
+      for (list_2 = neigh->neighbor_2_list.next; list_2 != &neigh->neighbor_2_list; list_2 = list_2->next) {
+        struct ipaddr_str strbuf;
+        size += snprintf(&buf[size], bufsize-size, "<option>%s</option>\n", olsr_ip_to_string(&strbuf, &list_2->neighbor_2->neighbor_2_addr));
+        thop_cnt++;
+      }
+      size += snprintf(&buf[size], bufsize-size, "</select> (%d)</td></tr>\n", thop_cnt);
     }
-
+  }
   size += snprintf(&buf[size], bufsize-size, "</table>\n");
-
   return size;
 }
 
@@ -1056,36 +1033,31 @@ static int build_topo_body(char *buf, olsr_u32_t bufsize)
 static int build_mid_body(char *buf, olsr_u32_t bufsize)
 {
   int size = 0;
-  olsr_u8_t index;
+  int idx;
 
   size += section_title(&buf[size], bufsize-size, "MID Entries");
   size += snprintf(&buf[size], bufsize-size,
                    "<tr><th>Main Address</th><th>Aliases</th></tr>\n");
   
   /* MID */  
-  for(index = 0;index < HASHSIZE; index++)
-    {
-      struct mid_entry *entry = mid_set[index].next;
-      while(entry != &mid_set[index])
-       {
-          int mid_cnt;
-          struct mid_address *alias;
-          size += snprintf(&buf[size], bufsize-size, "<tr>");
-          size += build_ipaddr_with_link(&buf[size], bufsize, &entry->main_addr, -1);
-         size += snprintf(&buf[size], bufsize-size, "<td><select>\n<option>IP ADDRESS</option>\n");
-
-         alias = entry->aliases;
-         mid_cnt = 0;
-         while(alias)
-           {
-             size += snprintf(&buf[size], bufsize-size, "<option>%s</option>\n", olsr_ip_to_string(&alias->alias));
-             mid_cnt++;
-             alias = alias->next_alias;
-           }
-         size += snprintf(&buf[size], bufsize-size, "</select> (%d)</td></tr>\n", mid_cnt);
-         entry = entry->next;
-       }
+  for (idx = 0; idx < HASHSIZE; idx++) {
+    struct mid_entry *entry;
+    for (entry = mid_set[idx].next; entry != &mid_set[idx]; entry = entry->next) {
+      int mid_cnt;
+      struct mid_address *alias;
+      size += snprintf(&buf[size], bufsize-size, "<tr>");
+      size += build_ipaddr_with_link(&buf[size], bufsize, &entry->main_addr, -1);
+      size += snprintf(&buf[size], bufsize-size, "<td><select>\n<option>IP ADDRESS</option>\n");
+      
+      mid_cnt = 0;
+      for (alias = entry->aliases; alias != NULL; alias = alias->next_alias) {
+        struct ipaddr_str strbuf;
+        size += snprintf(&buf[size], bufsize-size, "<option>%s</option>\n", olsr_ip_to_string(&strbuf, &alias->alias));
+        mid_cnt++;
+      }
+      size += snprintf(&buf[size], bufsize-size, "</select> (%d)</td></tr>\n", mid_cnt);
     }
+  }
 
   size += snprintf(&buf[size], bufsize-size, "</table>\n");
   return size;
@@ -1126,7 +1098,7 @@ static int build_cfgfile_body(char *buf, olsr_u32_t bufsize)
 {
   int size = 0, i = 0;
 
-  while(cfgfile_body[i] && strcmp(cfgfile_body[i], "<!-- CFGFILE -->")) {
+  while (cfgfile_body[i] && strcmp(cfgfile_body[i], "<!-- CFGFILE -->")) {
       size += snprintf(&buf[size], bufsize-size, cfgfile_body[i]);
       i++;
   }
@@ -1144,12 +1116,12 @@ static int build_cfgfile_body(char *buf, olsr_u32_t bufsize)
   size += olsrd_write_cnf_buf(olsr_cnf, &buf[size], bufsize-size);
 #endif
   
-  if(size < 0) {
+  if (size < 0) {
     size = snprintf(buf, size, "ERROR GENERATING CONFIGFILE!\n");
   }
 
   i++;
-  while(cfgfile_body[i]) {
+  while (cfgfile_body[i]) {
       size += snprintf(&buf[size], bufsize-size, cfgfile_body[i]);
       i++;
   }
@@ -1163,7 +1135,7 @@ static int check_allowed_ip(const struct allowed_net * const allowed_nets, const
 {
     const struct allowed_net *alln;
     for (alln = allowed_nets; alln != NULL; alln = alln->next) {
-        if((addr->v4 & alln->mask.v4) == (alln->net.v4 & alln->mask.v4)) {
+        if ((addr->v4.s_addr & alln->mask.v4.s_addr) == (alln->net.v4.s_addr & alln->mask.v4.s_addr)) {
             return 1;
         }
     }
index 2f0452d..9d376c4 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_plugin.c,v 1.20 2007/09/17 21:57:05 bernd67 Exp $
+ * $Id: olsrd_plugin.c,v 1.21 2007/11/08 22:47:40 bernd67 Exp $
  */
 
 /*
@@ -117,24 +117,19 @@ void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params,
 
 static int insert_plugin_ipnet(const char *sz_net, const char *sz_mask, struct allowed_net **allowed_nets)
 {
-    struct in_addr net, mask;
     struct allowed_net *an;
 
-    if(inet_aton(sz_net, &net) == 0) {
-       return 1;
-    }
-    if(inet_aton(sz_mask, &mask) == 0) {
-       return 1;
-    }
-
     an = olsr_malloc(sizeof(*an), __func__);
     if (an == NULL) {
         fprintf(stderr, "(HTTPINFO) register param net out of memory!\n");
         exit(0);
     }
 
-    an->net.v4  = net.s_addr;
-    an->mask.v4 = mask.s_addr;
+    if(inet_aton(sz_net, &an->net.v4) == 0 || 
+       inet_aton(sz_mask, &an->mask.v4) == 0) {
+        free(an);
+       return 1;
+    }
     an->next = *allowed_nets;
     *allowed_nets = an;
     return 0;
index ef679d5..81411a8 100644 (file)
@@ -31,7 +31,7 @@
  *
  */
 
-/* $Id: nameservice.c,v 1.34 2007/11/05 15:32:55 bernd67 Exp $ */
+/* $Id: nameservice.c,v 1.35 2007/11/08 22:47:40 bernd67 Exp $ */
 
 /*
  * Dynamic linked library for UniK OLSRd
@@ -169,18 +169,18 @@ static int set_nameservice_server(const char *value, void *data, set_plugin_para
        if (0 == strlen(value))
        {
                *v = add_name_to_list(*v, "", addon.ui, NULL);
-                OLSR_PRINTF(1, "%s got %s (main address)\n", "Got", value);
+               OLSR_PRINTF(1, "%s got %s (main address)\n", "Got", value);
                return 0;
        }
        else if (0 < inet_pton(olsr_cnf->ip_version, value, &ip))
        {
                *v = add_name_to_list(*v, "", addon.ui, &ip);
-                OLSR_PRINTF(1, "%s got %s\n", "Got", value);
+               OLSR_PRINTF(1, "%s got %s\n", "Got", value);
                return 0;
        }
        else
        {
-                OLSR_PRINTF(0, "Illegal IP address \"%s\"", value);
+               OLSR_PRINTF(0, "Illegal IP address \"%s\"", value);
        }
        return 1;
 }
@@ -191,12 +191,12 @@ static int set_nameservice_name(const char *value, void *data, set_plugin_parame
        if (0 < strlen(value))
        {
                *v = add_name_to_list(*v, (char*)value, addon.ui, NULL);
-                OLSR_PRINTF(1, "%s got %s (main address)\n", "Got", value);
+               OLSR_PRINTF(1, "%s got %s (main address)\n", "Got", value);
                return 0;
        }
        else
        {
-                OLSR_PRINTF(0, "Illegal name \"%s\"", value);
+               OLSR_PRINTF(0, "Illegal name \"%s\"", value);
        }
        return 1;
 }
@@ -209,30 +209,30 @@ static int set_nameservice_host(const char *value, void *data, set_plugin_parame
        {
                // the IP is validated later
                *v = add_name_to_list(*v, (char*)value, NAME_HOST, &ip);
-                OLSR_PRINTF(1, "%s: %s got %s\n", "Got", addon.pc, value);
+               OLSR_PRINTF(1, "%s: %s got %s\n", "Got", addon.pc, value);
                return 0;
        }
        else
        {
-                OLSR_PRINTF(0, "%s: Illegal IP address \"%s\"", addon.pc, value);
+               OLSR_PRINTF(0, "%s: Illegal IP address \"%s\"", addon.pc, value);
        }
        return 1;
 }
 
 static int set_nameservice_float(const char *value, void *data, set_plugin_parameter_addon addon __attribute__((unused)))
 {
-    const float thefloat = atof(value);
-    if (data != NULL)
-    {
-        float *v = data;
-        *v = thefloat;
-        OLSR_PRINTF(1, "%s float %f\n", "Got", thefloat);
-    }
-    else
-    {
-        OLSR_PRINTF(0, "%s float %f\n", "Ignored", thefloat);
-    }
-    return 0;
+       const float thefloat = atof(value);
+       if (data != NULL)
+       {
+               float *v = data;
+               *v = thefloat;
+               OLSR_PRINTF(1, "%s float %f\n", "Got", thefloat);
+       }
+       else
+       {
+               OLSR_PRINTF(0, "%s float %f\n", "Ignored", thefloat);
+       }
+       return 0;
 }
 
 static const struct olsrd_plugin_parameters plugin_parameters[] = {
@@ -255,8 +255,8 @@ static const struct olsrd_plugin_parameters plugin_parameters[] = {
 
 void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
 {
-    *params = plugin_parameters;
-    *size = sizeof(plugin_parameters)/sizeof(*plugin_parameters);
+       *params = plugin_parameters;
+       *size = sizeof(plugin_parameters)/sizeof(*plugin_parameters);
 }
 
 
@@ -362,7 +362,7 @@ name_init(void)
                }
        }
        for (name = my_forwarders; name != NULL; name = name->next) {
-               if (name->ip.v4 == 0) {
+               if (name->ip.v4.s_addr == 0) {
                        OLSR_PRINTF(2, "NAME PLUGIN: insert main addr for name %s \n", name->name);
                        memcpy(&name->ip, &olsr_cnf->main_addr, olsr_cnf->ipsize);
                }
@@ -408,7 +408,10 @@ remove_nonvalid_names_from_list(struct name_entry *my_list, int type)
        }
 
        if ( !valid  ) {
-               OLSR_PRINTF(1, "NAME PLUGIN: invalid or malformed parameter %s (%s), fix your config!\n", my_list->name, olsr_ip_to_string(&my_list->ip));
+#ifndef NODEBUG
+               struct ipaddr_str strbuf;
+#endif
+               OLSR_PRINTF(1, "NAME PLUGIN: invalid or malformed parameter %s (%s), fix your config!\n", my_list->name, olsr_ip_to_string(&strbuf, &my_list->ip));
                next = my_list->next;
                free(my_list->name);
                my_list->name = NULL;
@@ -416,7 +419,10 @@ remove_nonvalid_names_from_list(struct name_entry *my_list, int type)
                my_list = NULL;
                return remove_nonvalid_names_from_list(next, type);
        } else {
-               OLSR_PRINTF(2, "NAME PLUGIN: validate parameter %s (%s) -> OK\n", my_list->name, olsr_ip_to_string(&my_list->ip));
+#ifndef NODEBUG
+               struct ipaddr_str strbuf;
+#endif
+               OLSR_PRINTF(2, "NAME PLUGIN: validate parameter %s (%s) -> OK\n", my_list->name, olsr_ip_to_string(&strbuf, &my_list->ip));
                my_list->next = remove_nonvalid_names_from_list(my_list->next, type);
                return my_list;
        }
@@ -523,12 +529,15 @@ timeout_old_names(struct db_entry **this_list, olsr_bool *this_table_changed)
                        /* check if the entry for this ip is timed out */
                        if (olsr_timed_out(&(*tmp)->timer))
                        {
+#ifndef NODEBUG
+                               struct ipaddr_str strbuf;
+#endif
                                to_delete = *tmp;
                                /* update the pointer in the linked list */
                                *tmp = (*tmp)->next;
                                
                                OLSR_PRINTF(2, "NAME PLUGIN: %s timed out... deleting\n", 
-                                       olsr_ip_to_string(&to_delete->originator));
+                                       olsr_ip_to_string(&strbuf, &to_delete->originator));
        
                                /* Delete */
                                free_name_entry_list(&to_delete->names);
@@ -548,9 +557,9 @@ timeout_old_names(struct db_entry **this_list, olsr_bool *this_table_changed)
 void
 olsr_event(void *foo __attribute__((unused)))
 {
-    /* send buffer: huge */
-    char buffer[10240];
-    union olsr_message *message = (union olsr_message *)buffer;
+       /* send buffer: huge */
+       char buffer[10240];
+       union olsr_message *message = (union olsr_message *)buffer;
        struct interface *ifn;
        int namesize;
 
@@ -643,7 +652,10 @@ olsr_parser(union olsr_message *m, struct interface *in_if, union olsr_ip_addr *
        /* Check that the neighbor this message was received from is symmetric. 
        If not - back off*/
        if(check_neighbor_link(ipaddr) != SYM_LINK) {
-               OLSR_PRINTF(3, "NAME PLUGIN: Received msg from NON SYM neighbor %s\n", olsr_ip_to_string(ipaddr));
+#ifndef NODEBUG
+               struct ipaddr_str strbuf;
+#endif
+               OLSR_PRINTF(3, "NAME PLUGIN: Received msg from NON SYM neighbor %s\n", olsr_ip_to_string(&strbuf, ipaddr));
                return;
        }
 
@@ -742,8 +754,11 @@ create_packet(struct name* to, struct name_entry *from)
 {
        char *pos = (char*) to;
        int k;
+#ifndef NODEBUG
+       struct ipaddr_str strbuf;
+#endif
        OLSR_PRINTF(3, "NAME PLUGIN: Announcing name %s (%s) %d\n", 
-               from->name, olsr_ip_to_string(&from->ip), from->len);
+               from->name, olsr_ip_to_string(&strbuf, &from->ip), from->len);
        to->type = htons(from->type);
        to->len = htons(from->len);
        memcpy(&to->ip, &from->ip, olsr_cnf->ipsize);
@@ -761,6 +776,9 @@ create_packet(struct name* to, struct name_entry *from)
 void
 decap_namemsg(struct name *from_packet, struct name_entry **to, olsr_bool *this_table_changed )
 {
+#ifndef NODEBUG
+       struct ipaddr_str strbuf;
+#endif
        struct name_entry *tmp;
        struct name_entry *already_saved_name_entries;
        char *name = (char*)from_packet + sizeof(struct name);
@@ -771,8 +789,8 @@ decap_namemsg(struct name *from_packet, struct name_entry **to, olsr_bool *this_
 
        //XXX: should I check the from_packet->ip here? If so, why not also check the ip fro HOST and SERVICE?
        if( (type_of_from_packet==NAME_HOST && !is_name_wellformed(name)) ||
-           (type_of_from_packet==NAME_SERVICE && !is_service_wellformed(name)) ||
-           (type_of_from_packet==NAME_LATLON && !is_latlon_wellformed(name)))
+               (type_of_from_packet==NAME_SERVICE && !is_service_wellformed(name)) ||
+               (type_of_from_packet==NAME_LATLON && !is_latlon_wellformed(name)))
        {
                OLSR_PRINTF(4, "NAME PLUGIN: invalid name [%s] received, skipping.\n", name );
                return;
@@ -792,36 +810,36 @@ decap_namemsg(struct name *from_packet, struct name_entry **to, olsr_bool *this_
        {
                if ( (type_of_from_packet==NAME_HOST || type_of_from_packet==NAME_SERVICE) && strncmp(already_saved_name_entries->name, name, len_of_name) == 0 ) {
                        OLSR_PRINTF(4, "NAME PLUGIN: received name or service entry %s (%s) already in hash table\n",
-                               name, olsr_ip_to_string(&already_saved_name_entries->ip));
+                               name, olsr_ip_to_string(&strbuf, &already_saved_name_entries->ip));
                        return;
-               } else if (type_of_from_packet==NAME_FORWARDER && COMP_IP(&already_saved_name_entries->ip, &from_packet->ip) ) {
+               } else if (type_of_from_packet==NAME_FORWARDER && ipequal(&already_saved_name_entries->ip, &from_packet->ip) ) {
                        OLSR_PRINTF(4, "NAME PLUGIN: received forwarder entry %s (%s) already in hash table\n",
-                               name, olsr_ip_to_string(&already_saved_name_entries->ip));
+                               name, olsr_ip_to_string(&strbuf, &already_saved_name_entries->ip));
                        return;
                } else if (type_of_from_packet==NAME_LATLON ) {
                        if (0 != strncmp(already_saved_name_entries->name, name, len_of_name))
                        {
                                OLSR_PRINTF(4, "NAME PLUGIN: updating name %s -> %s (%s)\n",
                                        already_saved_name_entries->name, name,
-                                       olsr_ip_to_string(&already_saved_name_entries->ip));
+                                       olsr_ip_to_string(&strbuf, &already_saved_name_entries->ip));
                                free(already_saved_name_entries->name);
                                already_saved_name_entries->name = olsr_malloc(len_of_name + 1, "upd name_entry name");
                                strncpy(already_saved_name_entries->name, name, len_of_name);
                                *this_table_changed = OLSR_TRUE;
                        }
-                       if (!COMP_IP(&already_saved_name_entries->ip, &from_packet->ip))
+                       if (!ipequal(&already_saved_name_entries->ip, &from_packet->ip))
                        {
                                OLSR_PRINTF(4, "NAME PLUGIN: updating ip %s -> %s (%s)\n",
-                                       olsr_ip_to_string(&already_saved_name_entries->ip),
-                                       olsr_ip_to_string(&from_packet->ip),
-                                       olsr_ip_to_string(&already_saved_name_entries->ip));
+                                       olsr_ip_to_string(&strbuf, &already_saved_name_entries->ip),
+                                       olsr_ip_to_string(&strbuf, &from_packet->ip),
+                                       olsr_ip_to_string(&strbuf, &already_saved_name_entries->ip));
                                memcpy(&already_saved_name_entries->ip, &from_packet->ip, olsr_cnf->ipsize);
                                *this_table_changed = OLSR_TRUE;
                        }
                        if (!*this_table_changed)
                        {
                                OLSR_PRINTF(4, "NAME PLUGIN: received latlon entry %s (%s) already in hash table\n",
-                                       name, olsr_ip_to_string(&already_saved_name_entries->ip));
+                                       name, olsr_ip_to_string(&strbuf, &already_saved_name_entries->ip));
                        }
                        return;
                }
@@ -837,7 +855,7 @@ decap_namemsg(struct name *from_packet, struct name_entry **to, olsr_bool *this_
        tmp->name[tmp->len] = '\0';
 
        OLSR_PRINTF(3, "\nNAME PLUGIN: create new name/service/forwarder entry %s (%s) [len=%d] [type=%d] in linked list\n", 
-               tmp->name, olsr_ip_to_string(&tmp->ip), tmp->len, tmp->type);
+               tmp->name, olsr_ip_to_string(&strbuf, &tmp->ip), tmp->len, tmp->type);
 
        *this_table_changed = OLSR_TRUE;
 
@@ -854,12 +872,15 @@ decap_namemsg(struct name *from_packet, struct name_entry **to, olsr_bool *this_
 void
 update_name_entry(union olsr_ip_addr *originator, struct namemsg *msg, int msg_size, double vtime)
 {
+#ifndef NODEBUG
+       struct ipaddr_str strbuf;
+#endif
        char *pos, *end_pos;
        struct name *from_packet; 
        int i;
 
        OLSR_PRINTF(3, "NAME PLUGIN: Received Message from %s\n", 
-               olsr_ip_to_string(originator));
+                               olsr_ip_to_string(&strbuf, originator));
        
        if (ntohs(msg->version) != NAME_PROTOCOL_VERSION) {
                OLSR_PRINTF(3, "NAME PLUGIN: ignoring wrong version %d\n", msg->version);
@@ -888,7 +909,7 @@ update_name_entry(union olsr_ip_addr *originator, struct namemsg *msg, int msg_s
                                insert_new_name_in_list(originator, latlon_list, from_packet, &latlon_table_changed, vtime);
                                break;
                        default:
-                               OLSR_PRINTF(3, "NAME PLUGIN: Received Message of unknown type [%d] from (%s)\n", from_packet->type, olsr_ip_to_string(originator));
+                               OLSR_PRINTF(3, "NAME PLUGIN: Received Message of unknown type [%d] from (%s)\n", from_packet->type, olsr_ip_to_string(&strbuf, originator));
                                break;
                }
 
@@ -896,7 +917,7 @@ update_name_entry(union olsr_ip_addr *originator, struct namemsg *msg, int msg_s
                pos += 1 + (( ntohs(from_packet->len) - 1) | 3);
        }
        if (i!=0)
-               OLSR_PRINTF(4, "NAME PLUGIN: Lost %d entries in received packet due to length inconsistency (%s)\n", i, olsr_ip_to_string(originator));
+               OLSR_PRINTF(4, "NAME PLUGIN: Lost %d entries in received packet due to length inconsistency (%s)\n", i, olsr_ip_to_string(&strbuf, originator));
 }
 
 
@@ -918,8 +939,11 @@ insert_new_name_in_list(union olsr_ip_addr *originator, struct db_entry **this_l
        for (entry = this_list[hash]; entry != NULL; entry = entry->next)
        {
                if (memcmp(originator, &entry->originator, olsr_cnf->ipsize) == 0) {
+#ifndef NODEBUG
+                       struct ipaddr_str strbuf;
+#endif
                        // found
-                       OLSR_PRINTF(4, "NAME PLUGIN: found entry for (%s) in its hash table\n", olsr_ip_to_string(originator));
+                       OLSR_PRINTF(4, "NAME PLUGIN: found entry for (%s) in its hash table\n", olsr_ip_to_string(&strbuf, originator));
 
                        //delegate to function for parsing the packet and linking it to entry->names
                        decap_namemsg(from_packet, &entry->names, this_table_changed);
@@ -931,7 +955,10 @@ insert_new_name_in_list(union olsr_ip_addr *originator, struct db_entry **this_l
        }
        if (! entry_found)
        {
-               OLSR_PRINTF(3, "NAME PLUGIN: create new db entry for ip (%s) in hash table\n", olsr_ip_to_string(originator));
+#ifndef NODEBUG
+               struct ipaddr_str strbuf;
+#endif
+               OLSR_PRINTF(3, "NAME PLUGIN: create new db entry for ip (%s) in hash table\n", olsr_ip_to_string(&strbuf, originator));
 
                /* insert a new entry */
                entry = olsr_malloc(sizeof(struct db_entry), "new db_entry");
@@ -997,7 +1024,8 @@ write_hosts_file(void)
        
        // write own names
        for (name = my_names; name != NULL; name = name->next) {
-               fprintf(hosts, "%s\t%s%s\t# myself\n", olsr_ip_to_string(&name->ip), name->name, my_suffix );
+               struct ipaddr_str strbuf;
+               fprintf(hosts, "%s\t%s%s\t# myself\n", olsr_ip_to_string(&strbuf, &name->ip), name->name, my_suffix );
        }
        
        // write received names
@@ -1007,11 +1035,12 @@ write_hosts_file(void)
                {
                        for (name = entry->names; name != NULL; name = name->next) 
                        {
-                               OLSR_PRINTF(6, "%s\t%s%s", olsr_ip_to_string(&name->ip), name->name, my_suffix);
-                               OLSR_PRINTF(6, "\t#%s\n", olsr_ip_to_string(&entry->originator));
+                               struct ipaddr_str strbuf;
+                               OLSR_PRINTF(6, "%s\t%s%s", olsr_ip_to_string(&strbuf, &name->ip), name->name, my_suffix);
+                               OLSR_PRINTF(6, "\t#%s\n", olsr_ip_to_string(&strbuf, &entry->originator));
 
-                               fprintf(hosts, "%s\t%s%s", olsr_ip_to_string(&name->ip), name->name, my_suffix);
-                               fprintf(hosts, "\t# %s\n", olsr_ip_to_string(&entry->originator));
+                               fprintf(hosts, "%s\t%s%s", olsr_ip_to_string(&strbuf, &name->ip), name->name, my_suffix);
+                               fprintf(hosts, "\t# %s\n", olsr_ip_to_string(&strbuf, &entry->originator));
                        }
                }
        }
@@ -1070,11 +1099,12 @@ write_services_file(void)
                {
                        for (name = entry->names; name != NULL; name = name->next) 
                        {
+                               struct ipaddr_str strbuf;
                                OLSR_PRINTF(6, "%s\t",  name->name);
-                               OLSR_PRINTF(6, "\t#%s\n", olsr_ip_to_string(&entry->originator));
+                               OLSR_PRINTF(6, "\t#%s\n", olsr_ip_to_string(&strbuf, &entry->originator));
 
                                fprintf(services_file, "%s\t", name->name );
-                               fprintf(services_file, "\t#%s\n", olsr_ip_to_string(&entry->originator));
+                               fprintf(services_file, "\t#%s\n", olsr_ip_to_string(&strbuf, &entry->originator));
                        }
                }
        }
@@ -1096,33 +1126,35 @@ write_services_file(void)
 static void
 select_best_nameserver(struct rt_entry **rt)
 {
-    int nameserver_idx;
-    struct rt_entry *rt1, *rt2;
-
-    for (nameserver_idx = 0;
-         nameserver_idx < NAMESERVER_COUNT;
-         nameserver_idx++) {
-
-        rt1 = rt[nameserver_idx];
-        rt2 = rt[nameserver_idx+1];
-
-        /*
-         * compare the next two pointers in the array.
-         * if the second pointer is NULL then percolate it up.
-         */
-        if (!rt2 || olsr_cmp_rt(rt1, rt2)) {
-
-            /*
-             * first is better, swap the pointers.
-             */
-            OLSR_PRINTF(6, "NAME PLUGIN: nameserver %s, etx %.3f\n",
-                        olsr_ip_to_string(&rt1->rt_dst.prefix),
-                        rt1->rt_best->rtp_metric.etx);
-
-            rt[nameserver_idx] = rt2;
-            rt[nameserver_idx+1] = rt1;
-        }
-    }
+       int nameserver_idx;
+       struct rt_entry *rt1, *rt2;
+
+       for (nameserver_idx = 0;
+                nameserver_idx < NAMESERVER_COUNT;
+                nameserver_idx++) {
+
+               rt1 = rt[nameserver_idx];
+               rt2 = rt[nameserver_idx+1];
+
+               /*
+                * compare the next two pointers in the array.
+                * if the second pointer is NULL then percolate it up.
+                */
+               if (!rt2 || olsr_cmp_rt(rt1, rt2)) {
+#ifndef NODEBUG
+                       struct ipaddr_str strbuf;
+#endif
+                       /*
+                        * first is better, swap the pointers.
+                        */
+                       OLSR_PRINTF(6, "NAME PLUGIN: nameserver %s, etx %.3f\n",
+                                               olsr_ip_to_string(&strbuf, &rt1->rt_dst.prefix),
+                                               rt1->rt_best->rtp_metric.etx);
+
+                       rt[nameserver_idx] = rt2;
+                       rt[nameserver_idx+1] = rt1;
+               }
+       }
 }
 
 /**
@@ -1136,7 +1168,7 @@ write_resolv_file(void)
        struct name_entry *name;
        struct db_entry *entry;
        struct rt_entry *route;
-    static struct rt_entry *nameserver_routes[NAMESERVER_COUNT+1];
+       static struct rt_entry *nameserver_routes[NAMESERVER_COUNT+1];
        FILE* resolv;
        int i=0;
        time_t currtime;
@@ -1144,8 +1176,8 @@ write_resolv_file(void)
        if (!forwarder_table_changed || my_forwarders != NULL || my_resolv_file[0] == '\0')
                return;
 
-    /* clear the array of 3+1 nameserver routes */
-    memset(nameserver_routes, 0, sizeof(nameserver_routes));
+       /* clear the array of 3+1 nameserver routes */
+       memset(nameserver_routes, 0, sizeof(nameserver_routes));
 
        for (hash = 0; hash < HASHSIZE; hash++) 
        {
@@ -1153,29 +1185,31 @@ write_resolv_file(void)
                {
                        for (name = entry->names; name != NULL; name = name->next) 
                        {
-
+#ifndef NODEBUG
+                               struct ipaddr_str strbuf;
+#endif
                                route = olsr_lookup_routing_table(&name->ip);
 
-                OLSR_PRINTF(6, "NAME PLUGIN: check route for nameserver %s %s",
-                                                       olsr_ip_to_string(&name->ip),
-                            route ? "suceeded" : "failed");
+                               OLSR_PRINTF(6, "NAME PLUGIN: check route for nameserver %s %s",
+                                                       olsr_ip_to_string(&strbuf, &name->ip),
+                                                       route ? "suceeded" : "failed");
 
                                if (route==NULL) // it's possible that route is not present yet
                                        continue;
 
-                /* enqueue it on the head of list */
-                *nameserver_routes = route;
-                OLSR_PRINTF(6, "NAME PLUGIN: found nameserver %s, etx %.3f",
-                                                       olsr_ip_to_string(&name->ip),
-                            route->rt_best->rtp_metric.etx);
+                               /* enqueue it on the head of list */
+                               *nameserver_routes = route;
+                               OLSR_PRINTF(6, "NAME PLUGIN: found nameserver %s, etx %.3f",
+                                                       olsr_ip_to_string(&strbuf, &name->ip),
+                                                       route->rt_best->rtp_metric.etx);
 
-                /* find the closet one */
-                select_best_nameserver(nameserver_routes);
+                               /* find the closet one */
+                               select_best_nameserver(nameserver_routes);
                        }
                }
        }
 
-    /* if there is no best route we are done */
+       /* if there is no best route we are done */
        if (nameserver_routes[NAMESERVER_COUNT]==NULL)
                return;
                 
@@ -1190,19 +1224,20 @@ write_resolv_file(void)
        fprintf(resolv, "### do not edit\n\n");
 
        for (i = NAMESERVER_COUNT; i >= 0; i--) {
+               struct ipaddr_str strbuf;
 
-        route = nameserver_routes[i];
+               route = nameserver_routes[i];
 
-        OLSR_PRINTF(2, "NAME PLUGIN: nameserver_routes #%d %p\n", i, route);
+               OLSR_PRINTF(2, "NAME PLUGIN: nameserver_routes #%d %p\n", i, route);
 
-        if (!route) {
-            continue;
-        }
+               if (!route) {
+                       continue;
+               }
 
                OLSR_PRINTF(2, "NAME PLUGIN: nameserver %s\n",
-                    olsr_ip_to_string(&route->rt_dst.prefix));
+                                       olsr_ip_to_string(&strbuf, &route->rt_dst.prefix));
                fprintf(resolv, "nameserver %s\n",
-                olsr_ip_to_string(&route->rt_dst.prefix));
+                               olsr_ip_to_string(&strbuf, &route->rt_dst.prefix));
        }
        if (time(&currtime)) {
                fprintf(resolv, "\n### written by olsrd at %s", ctime(&currtime));
@@ -1243,48 +1278,50 @@ allowed_ip(const union olsr_ip_addr *addr)
        struct local_hna_entry *hna;
        struct interface *iface;
        union olsr_ip_addr tmp_ip, tmp_msk;
+#ifndef NODEBUG
+       struct ipaddr_str strbuf;
+#endif
        
-       OLSR_PRINTF(6, "checking %s\n", olsr_ip_to_string(addr));
+       OLSR_PRINTF(6, "checking %s\n", olsr_ip_to_string(&strbuf, addr));
        
        for(iface = ifnet; iface; iface = iface->int_next)
        {
-               OLSR_PRINTF(6, "interface %s\n", olsr_ip_to_string(&iface->ip_addr));
-               if (COMP_IP(&iface->ip_addr, addr)) {
+               OLSR_PRINTF(6, "interface %s\n", olsr_ip_to_string(&strbuf, &iface->ip_addr));
+               if (ipequal(&iface->ip_addr, addr)) {
                        OLSR_PRINTF(6, "MATCHED\n");
                        return OLSR_TRUE;
                }
        }
        
        if (olsr_cnf->ip_version == AF_INET) {
-               for (hna = olsr_cnf->hna_entries; hna; hna = hna->next)
-               {
-            union olsr_ip_addr netmask;
+               for (hna = olsr_cnf->hna_entries; hna != NULL; hna = hna->next) {
+                       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 )
+                                               olsr_ip_to_string(&strbuf, &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_prefix_to_netmask(&netmask, hna->net.prefix_len);
+                       if ((addr->v4.s_addr & netmask.v4.s_addr) == hna->net.prefix.v4.s_addr) {
                                OLSR_PRINTF(6, "MATCHED\n");
                                return OLSR_TRUE;
                        }
                }
        } else {
-               for (hna = olsr_cnf->hna_entries; hna; hna = hna->next)
+               for (hna = olsr_cnf->hna_entries; hna != NULL; hna = hna->next)
                {
-                       int i;
+                       unsigned int i;
                        OLSR_PRINTF(6, "HNA %s/%d\n", 
-                               olsr_ip_to_string(&hna->net.prefix),
+                               olsr_ip_to_string(&strbuf, &hna->net.prefix),
                                hna->net.prefix_len);
                        if ( hna->net.prefix_len == 0 )
                                continue;
                        olsr_prefix_to_netmask(&tmp_msk, hna->net.prefix_len);
-                       for (i = 0; i < 16; i++) {
+                       for (i = 0; i < sizeof(tmp_ip.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, &hna->net)) {
+                       if (ipequal(&tmp_ip, &hna->net.prefix)) {
                                OLSR_PRINTF(6, "MATCHED\n");
                                return OLSR_TRUE;
                        }
@@ -1346,7 +1383,10 @@ allowed_hostname_or_ip_in_service(const char *service_line, const regmatch_t *ho
        //ip in service-line is allowed 
        if (inet_pton(olsr_cnf->ip_version, hostname_or_ip, &olsr_ip) > 0) {
                if (allowed_ip(&olsr_ip)) {
-                       OLSR_PRINTF(2, "NAME PLUGIN: ip %s in service %s is OK\n", olsr_ip_to_string(&olsr_ip), service_line);
+#ifndef NODEBUG
+                       struct ipaddr_str strbuf;
+#endif
+                       OLSR_PRINTF(2, "NAME PLUGIN: ip %s in service %s is OK\n", olsr_ip_to_string(&strbuf, &olsr_ip), service_line);
                        free(hostname_or_ip);
                        hostname_or_ip = NULL;
                        return OLSR_TRUE;
@@ -1388,12 +1428,11 @@ is_latlon_wellformed(const char *latlon_line)
  */
 olsr_bool get_isdefhna_latlon(void)
 {
-    struct local_hna_entry *hna;
-    for(hna = olsr_cnf->hna_entries; hna; hna = hna->next)
-       {
-               if (0 == hna->net.prefix_len) {
-            return OLSR_TRUE;
-        }
+       struct local_hna_entry *hna;
+       for (hna = olsr_cnf->hna_entries; hna != NULL; hna = hna->next){
+               if (hna->net.prefix_len == 0) {
+                       return OLSR_TRUE;
+               }
        }
        return OLSR_FALSE;
 }
@@ -1407,9 +1446,9 @@ void lookup_defhna_latlon(union olsr_ip_addr *ip)
        struct rt_entry* rt_hna;
        memset(ip, 0, sizeof(ip));
        memset(&dest, 0, sizeof(dest));
-       if (NULL != (rt_hna = olsr_lookup_routing_table(&dest)))
-       {
-               COPY_IP(ip, &rt_hna->rt_best->rtp_nexthop.gateway);
+       if (NULL != (rt_hna = olsr_lookup_routing_table(&dest))) {
+               //COPY_IP(ip, &rt_hna->rt_best->rtp_nexthop.gateway);
+               *ip = rt_hna->rt_best->rtp_nexthop.gateway;
        }
 }
 
@@ -1428,7 +1467,7 @@ lookup_name_latlon(union olsr_ip_addr *ip)
                {
                        for (name = entry->names; name != NULL; name = name->next) 
                        {
-                               if (COMP_IP(&name->ip, ip)) return name->name;
+                               if (ipequal(&name->ip, ip)) return name->name;
                        }
                }
        }
@@ -1445,12 +1484,13 @@ write_latlon_file(void)
        FILE* js;
        struct olsr_if *ifs;
        union olsr_ip_addr ip;
-    struct tc_entry *tc;
-    struct tc_edge_entry *tc_edge;
+       struct ipaddr_str strbuf;
+       struct tc_entry *tc;
+       struct tc_edge_entry *tc_edge;
 
        if (!my_names || !latlon_table_changed) {
-        return;
-    }
+               return;
+       }
        OLSR_PRINTF(2, "NAME PLUGIN: writing latlon file\n");
 
        js = fopen( my_latlon_file, "w" );
@@ -1466,45 +1506,47 @@ write_latlon_file(void)
                {
                        if (olsr_cnf->ip_version == AF_INET)
                        {
+                               struct ipaddr_str strbuf;
                                /*
                                 * Didn't find a good sample to grab a simple
                                 * olsr_ip_addr from a given interface. Sven-Ola
                                 */
-                               const char* p = olsr_ip_to_string(&olsr_cnf->main_addr);
-                               const char* q = sockaddr_to_string(&ifs->interf->int_addr);
+                               const char* p = olsr_ip_to_string(&strbuf, &olsr_cnf->main_addr);
+                               const char* q = ip4_to_string(&strbuf, ifs->interf->int_addr.sin_addr);
                                if (0 != strcmp(p, q))
                                {
                                        fprintf(js, "Mid('%s','%s');\n", p, q);
                                }
                        }
-                       else if (!(COMP_IP(&olsr_cnf->main_addr, (union olsr_ip_addr *)&ifs->interf->int6_addr.sin6_addr)))
+                       else if (!(ipequal(&olsr_cnf->main_addr, (union olsr_ip_addr *)&ifs->interf->int6_addr.sin6_addr)))
                        {
+                               struct ipaddr_str strbuf;
                                fprintf(js, "Mid('%s','%s');\n",
-                                       olsr_ip_to_string(&olsr_cnf->main_addr),
-                                       olsr_ip_to_string((union olsr_ip_addr *)&ifs->interf->int6_addr.sin6_addr));
+                                       olsr_ip_to_string(&strbuf, &olsr_cnf->main_addr),
+                                       olsr_ip_to_string(&strbuf, (union olsr_ip_addr *)&ifs->interf->int6_addr.sin6_addr));
                        }
                }
        }
 
        for (hash = 0; hash < HASHSIZE; hash++) 
        {
-               struct mid_entry *entry = mid_set[hash].next;
-               while(entry != &mid_set[hash])
-               {
-                       struct mid_address *alias = entry->aliases;
+               struct mid_entry *entry = mid_set[hash].next;
+               while(entry != &mid_set[hash])
+               {
+                       struct mid_address *alias = entry->aliases;
                        while(alias)
                        {
                                fprintf(js, "Mid('%s','%s');\n",
-                                       olsr_ip_to_string(&entry->main_addr),
-                                       olsr_ip_to_string(&alias->alias));
+                                               olsr_ip_to_string(&strbuf, &entry->main_addr),
+                                               olsr_ip_to_string(&strbuf, &alias->alias));
                                alias = alias->next_alias;
                        }
                        entry = entry->next;
-               }
+               }
        }
        lookup_defhna_latlon(&ip);
-       fprintf(js, "Self('%s',%f,%f,%d,'%s','%s');\n", olsr_ip_to_string(&olsr_cnf->main_addr),
-               my_lat, my_lon, get_isdefhna_latlon(), olsr_ip_to_string(&ip), my_names->name);
+       fprintf(js, "Self('%s',%f,%f,%d,'%s','%s');\n", olsr_ip_to_string(&strbuf, &olsr_cnf->main_addr),
+                       my_lat, my_lon, get_isdefhna_latlon(), olsr_ip_to_string(&strbuf, &ip), my_names->name);
        for (hash = 0; hash < HASHSIZE; hash++) 
        {
                struct db_entry *entry;
@@ -1514,25 +1556,24 @@ write_latlon_file(void)
                        for (name = entry->names; name != NULL; name = name->next) 
                        {
                                fprintf(js, "Node('%s',%s,'%s','%s');\n",
-                                       olsr_ip_to_string(&entry->originator),
-                                       name->name, olsr_ip_to_string(&name->ip),
+                                       olsr_ip_to_string(&strbuf, &entry->originator),
+                                       name->name, olsr_ip_to_string(&strbuf, &name->ip),
                                        lookup_name_latlon(&entry->originator));
                        }
                }
        }
 
-    OLSR_FOR_ALL_TC_ENTRIES(tc) {
-        OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge) {
-
-            fprintf(js, "Link('%s','%s',%f,%f,%f);\n", 
-                                       olsr_ip_to_string(&tc_edge->T_dest_addr),
-                                       olsr_ip_to_string(&tc->addr), 
+       OLSR_FOR_ALL_TC_ENTRIES(tc) {
+               OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge) {
+                       struct ipaddr_str dstbuf, addrbuf;
+                       fprintf(js, "Link('%s','%s',%f,%f,%f);\n", 
+                                       olsr_ip_to_string(&dstbuf, &tc_edge->T_dest_addr),
+                                       olsr_ip_to_string(&addrbuf, &tc->addr), 
                                        tc_edge->link_quality,
                                        tc_edge->inverse_link_quality,
-                    olsr_calc_tc_etx(tc_edge));
-
-        } OLSR_FOR_ALL_TC_EDGE_ENTRIES_END(tc, tc_edge);
-    } OLSR_FOR_ALL_TC_ENTRIES_END(tc);
+                                       olsr_calc_tc_etx(tc_edge));
+               } OLSR_FOR_ALL_TC_EDGE_ENTRIES_END(tc, tc_edge);
+       } OLSR_FOR_ALL_TC_ENTRIES_END(tc);
 
        fclose(js);
        latlon_table_changed = OLSR_FALSE;
@@ -1542,6 +1583,7 @@ write_latlon_file(void)
  * Local Variables:
  * mode: c
  * c-indent-tabs-mode: t
+ * indent-tabs-mode: t
  * c-basic-offset: 4
  * tab-width: 4
  * End:
index fb17284..8aebdc0 100755 (executable)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_pgraph.c,v 1.9 2007/11/02 20:58:07 bernd67 Exp $
+ * $Id: olsrd_pgraph.c,v 1.10 2007/11/08 22:47:40 bernd67 Exp $
  */
 
 /*
@@ -48,6 +48,7 @@
 #include "socket_parser.h"
 #include "olsrd_plugin.h"
 #include "plugin_util.h"
+#include "net_olsr.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -98,7 +99,7 @@ my_init(void)
   /* defaults for parameters */
   ipc_port = 2004;
   if (olsr_cnf->ip_version == AF_INET) {
-    ipc_accept_ip.v4 = htonl(INADDR_LOOPBACK);
+    ipc_accept_ip.v4.s_addr = htonl(INADDR_LOOPBACK);
   } else {
     ipc_accept_ip.v6 = in6addr_loopback;
   }
@@ -162,15 +163,15 @@ static void ipc_print_neigh_link(struct neighbor_entry *neighbor)
 {
   char buf[256];
   int len;
-  const char* main_adr;
-  const char* adr;
+  struct ipaddr_str main_adr, adr;
 //  double etx=0.0;
 //  char* style = "solid";
 //  struct link_entry* link;
 
-  main_adr = olsr_ip_to_string(&olsr_cnf->main_addr);
-  adr = olsr_ip_to_string(&neighbor->neighbor_main_addr);
-  len = sprintf( buf, "add link %s %s\n", main_adr, adr );
+  len = sprintf(buf,
+                "add link %s %s\n",
+                olsr_ip_to_string(&main_adr, &olsr_cnf->main_addr),
+                olsr_ip_to_string(&adr, &neighbor->neighbor_main_addr));
   ipc_send(buf, len);
   
 //  if (neighbor->status == 0) { // non SYM
@@ -291,6 +292,7 @@ static void ipc_action(int fd __attribute__((unused)))
     }
   else
     {
+      struct ipaddr_str main_addr;
       addr = inet_ntoa(pin.sin_addr);
 /*
       if(ntohl(pin.sin_addr.s_addr) != ntohl(ipc_accept_ip.s_addr))
@@ -303,7 +305,7 @@ static void ipc_action(int fd __attribute__((unused)))
        {
 */
          olsr_printf(1, "(DOT DRAW)IPC: Connection from %s\n",addr);
-          len = sprintf(buf, "add node %s\n", olsr_ip_to_string(&olsr_cnf->main_addr));
+          len = sprintf(buf, "add node %s\n", olsr_ip_to_string(&main_addr, &olsr_cnf->main_addr));
          ipc_send(buf, len);
          pcf_event(1, 1, 1);
 //     }
@@ -403,13 +405,12 @@ static void ipc_print_tc_link(struct tc_entry *entry, struct tc_edge_entry *dst_
 {
   char buf[256];
   int len;
-  const char* main_adr;
-  const char* adr;
+  struct ipaddr_str main_adr, adr;
 //  double etx = olsr_calc_tc_etx(dst_entry);
 
-  main_adr = olsr_ip_to_string(&entry->addr);
-  adr = olsr_ip_to_string(&dst_entry->T_dest_addr);
-  len = sprintf( buf, "add link %s %s\n", main_adr, adr );
+  len = sprintf( buf, "add link %s %s\n",
+                 olsr_ip_to_string(&main_adr, &entry->addr),
+                 olsr_ip_to_string(&adr, &dst_entry->T_dest_addr));
   ipc_send(buf, len);
 }
 
@@ -476,7 +477,7 @@ static struct link_entry *olsr_neighbor_best_link(union olsr_ip_addr *main)
   {
     // check whether it's a link to the requested neighbor and
     // whether the link's quality is better than what we have
-    if(COMP_IP(main, &walker->neighbor->neighbor_main_addr))
+    if(ipequal(main, &walker->neighbor->neighbor_main_addr))
     {
       curr = walker->loss_link_quality * walker->neigh_link_quality;
 
index bc9a2ee..8857679 100644 (file)
@@ -25,6 +25,7 @@
 #include "defs.h"
 #include "quagga.h"
 #include "kernel_routes.h"
+#include "net_olsr.h"
 
 #define PLUGIN_NAME    "OLSRD quagga plugin"
 #define PLUGIN_VERSION "0.2.2"
index 3b513b4..c698f75 100644 (file)
@@ -690,8 +690,8 @@ int add_hna4_route (struct ipv4_route r) {
   dump_ipv4_route(r, "add_hna4_route");
 #endif
 
-  mask.v4 = prefixlentomask(r.prefixlen);
-  net.v4 = r.prefix;
+  mask.v4.s_addr = prefixlentomask(r.prefixlen);
+  net.v4.s_addr = r.prefix;
 
   add_local_hna4_entry(&net, &mask);
   free_ipv4_route(r);
@@ -706,8 +706,8 @@ int delete_hna4_route (struct ipv4_route r) {
   dump_ipv4_route(r, "delete_hna4_route");
 #endif
 
-  mask.v4 = prefixlentomask(r.prefixlen);
-  net.v4 = r.prefix;
+  mask.v4.s_addr = prefixlentomask(r.prefixlen);
+  net.v4.s_addr = r.prefix;
 
   remove_local_hna4_entry(&net, &mask) ? 0 : -1;
   free_ipv4_route(r);
@@ -744,9 +744,9 @@ int zebra_add_olsr_v4_route (struct rt_entry *r) {
   route.type = ZEBRA_ROUTE_OLSR; // OLSR
   route.message = ZAPI_MESSAGE_METRIC;
   route.flags = zebra.flags;
-  route.prefixlen =(r->rt_dst.prefix_len);
-  route.prefix = r->rt_dst.prefix.v4;
-  if ((r->rt_best->rtp_nexthop.gateway.v4 == r->rt_dst.prefix.v4 && 
+  route.prefixlen = r->rt_dst.prefix_len;
+  route.prefix = r->rt_dst.prefix.v4.s_addr;
+  if ((r->rt_best->rtp_nexthop.gateway.v4.s_addr == r->rt_dst.prefix.v4.s_addr && 
        route.prefixlen == 32)) {
     route.message |= ZAPI_MESSAGE_IFINDEX | ZAPI_MESSAGE_NEXTHOP;
     route.ind_num = 1;
@@ -767,7 +767,7 @@ int zebra_add_olsr_v4_route (struct rt_entry *r) {
                                   sizeof route.nexthops->payload), 
                                   "zebra_add_olsr_v4_route");
     route.nexthops->type = ZEBRA_NEXTHOP_IPV4;
-    route.nexthops->payload.v4 = r->rt_best->rtp_nexthop.gateway.v4;
+    route.nexthops->payload.v4 = r->rt_best->rtp_nexthop.gateway.v4.s_addr;
   }
 
   route.metric = r->rt_best->rtp_metric.hops;
@@ -791,8 +791,8 @@ int zebra_del_olsr_v4_route (struct rt_entry *r) {
   route.message = ZAPI_MESSAGE_METRIC;
   route.flags = zebra.flags;
   route.prefixlen = r->rt_dst.prefix_len;
-  route.prefix = r->rt_dst.prefix.v4;
-  if ((r->rt_best->rtp_nexthop.gateway.v4 == r->rt_dst.prefix.v4 && 
+  route.prefix = r->rt_dst.prefix.v4.s_addr;
+  if ((r->rt_best->rtp_nexthop.gateway.v4.s_addr == r->rt_dst.prefix.v4.s_addr && 
        route.prefixlen == 32)){
     route.message |= ZAPI_MESSAGE_IFINDEX;
     route.ind_num = 1;
@@ -813,7 +813,7 @@ int zebra_del_olsr_v4_route (struct rt_entry *r) {
                                   sizeof route.nexthops->payload), 
                                  "zebra_add_olsr_v4_route");
     route.nexthops->type = ZEBRA_NEXTHOP_IPV4;
-    route.nexthops->payload.v4 = r->rt_best->rtp_nexthop.gateway.v4;
+    route.nexthops->payload.v4 = r->rt_best->rtp_nexthop.gateway.v4.s_addr;
   }
   route.metric = r->rt_best->rtp_metric.hops;
   route.metric = htonl (route.metric);
index 50e8091..cd90096 100644 (file)
@@ -33,7 +33,7 @@
  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  * POSSIBILITY OF SUCH DAMAGE.
  *
- * $Id: olsrd_secure.c,v 1.28 2007/10/20 15:16:32 bernd67 Exp $
+ * $Id: olsrd_secure.c,v 1.29 2007/11/08 22:47:40 bernd67 Exp $
  */
 
 
@@ -58,6 +58,7 @@
 #include "socket_parser.h"
 #include "parser.h"
 #include "scheduler.h"
+#include "net_olsr.h"
 
 #ifdef USE_OPENSSL
 /* OpenSSL stuff */
@@ -150,12 +151,12 @@ static int check_auth(char *, int *);
 static int ipc_send(char *, int);
 #endif
 static int add_signature(olsr_u8_t *, int*);
-static int validate_packet(char *, int*);
+static int validate_packet(const char *, int*);
 static void packet_parser(int);
 static void timeout_timestamps(void*);
 static int check_timestamp(union olsr_ip_addr *, time_t);
 static struct stamp *lookup_timestamp_entry(union olsr_ip_addr *);
-static int read_key_from_file(char *);
+static int read_key_from_file(const char *);
 
 /**
  *Do initialization here
@@ -307,6 +308,7 @@ packet_parser(int fd)
 
   for (;;) 
     {
+      struct ipaddr_str buf;
       fromlen = sizeof(struct sockaddr_storage);
 
       cc = recvfrom(fd, (void *)&inbuf, sizeof (inbuf), 0, (struct sockaddr *)&from, &fromlen);
@@ -350,8 +352,9 @@ packet_parser(int fd)
 
       if((olsr_in_if = if_ifwithsock(fd)) == NULL)
        {
+          struct ipaddr_str buf;
          olsr_printf(1, "[ENC]Could not find input interface for message from %s size %d\n",
-                     olsr_ip_to_string(&from_addr),
+                     olsr_ip_to_string(&buf, &from_addr),
                      cc);
          return ;
        }
@@ -367,12 +370,12 @@ packet_parser(int fd)
 
       if(!validate_packet(inbuf.buf, &cc))
        {
-         olsr_printf(1, "[ENC]Rejecting packet from %s\n", olsr_ip_to_string((union olsr_ip_addr *)&((struct sockaddr_in *)&from)->sin_addr.s_addr));
+         olsr_printf(1, "[ENC]Rejecting packet from %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&((struct sockaddr_in *)&from)->sin_addr.s_addr));
          return;
        }
 
 
-      olsr_printf(1, "[ENC]Packet from %s OK size %d\n", olsr_ip_to_string((union olsr_ip_addr *)&((struct sockaddr_in *)&from)->sin_addr.s_addr), cc);
+      olsr_printf(1, "[ENC]Packet from %s OK size %d\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&((struct sockaddr_in *)&from)->sin_addr.s_addr), cc);
 
 
       /* Fix OLSR packet header */
@@ -451,7 +454,7 @@ add_signature(olsr_u8_t *pck, int *size)
 #ifdef DEBUG
   unsigned int i;
   int j;
-  char *sigmsg;                                                                                        
+  const olsr_u8_t *sigmsg;                                                                                        
 #endif
   
   olsr_printf(2, "[ENC]Adding signature for packet size %d\n", *size);
@@ -480,7 +483,7 @@ add_signature(olsr_u8_t *pck, int *size)
   olsr_printf(3, "[ENC]timestamp: %ld\n", now.tv_sec);
   
   /* Set the new size */
-  *size = *size + sizeof(struct s_olsrmsg);
+  *size += sizeof(struct s_olsrmsg);
   
   {
   olsr_u8_t checksum_cache[512 + KEYLENGTH];
@@ -498,11 +501,11 @@ add_signature(olsr_u8_t *pck, int *size)
   olsr_printf(1, "Signature message:\n");
 
   j = 0;
-  sigmsg = (char *)msg;
+  sigmsg = (olsr_u8_t *)msg;
 
   for(i = 0; i < sizeof(struct s_olsrmsg); i++)
     {
-      olsr_printf(1, "  %3i", (u_char) sigmsg[i]);
+      olsr_printf(1, "  %3i", sigmsg[i]);
       j++;
       if(j == 4)
        {
@@ -519,8 +522,8 @@ add_signature(olsr_u8_t *pck, int *size)
 
 
 
-int
-validate_packet(char *pck, int *size)
+static int
+validate_packet(const char *pck, int *size)
 {
   int packetsize;
   olsr_u8_t sha1_hash[SIGNATURE_SIZE];
@@ -530,7 +533,7 @@ validate_packet(char *pck, int *size)
 #ifdef DEBUG
   unsigned int i;
   int j;
-  olsr_u8_t *sigmsg;
+  const olsr_u8_t *sigmsg;
 #endif
 
   /* Find size - signature message */
@@ -547,11 +550,11 @@ validate_packet(char *pck, int *size)
   olsr_printf(1, "Input message:\n");
   
   j = 0;
-  sigmsg = (olsr_u8_t *)sig;
+  sigmsg = (const olsr_u8_t *)sig;
 
   for(i = 0; i < sizeof(struct s_olsrmsg); i++)
     {
-      olsr_printf(1, "  %3i", (u_char) sigmsg[i]);
+      olsr_printf(1, "  %3i", sigmsg[i]);
       j++;
       if(j == 4)
        {
@@ -563,7 +566,7 @@ validate_packet(char *pck, int *size)
 
   /* Sanity check first */
   if((sig->olsr_msgtype != MESSAGE_TYPE) || 
-     (sig->olsr_vtime) ||
+     (sig->olsr_vtime != 0) ||
      (sig->olsr_msgsize != ntohs(sizeof(struct s_olsrmsg))) ||
      (sig->ttl != 1) ||
      (sig->hopcnt != 0))
@@ -588,8 +591,6 @@ validate_packet(char *pck, int *size)
     default:
       olsr_printf(1, "[ENC]Unsupported sceme: %d enc: %d!\n", sig->sig.type, sig->sig.algorithm);
       return 0;
-      break;
-
     }
   //olsr_printf(1, "Packet sane...\n");
 
@@ -610,11 +611,11 @@ validate_packet(char *pck, int *size)
 #ifdef DEBUG
   olsr_printf(1, "Recevied hash:\n");
   
-  sigmsg = (olsr_u8_t *)sig->sig.signature;
+  sigmsg = (const olsr_u8_t *)sig->sig.signature;
 
   for(i = 0; i < SIGNATURE_SIZE; i++)
     {
-      olsr_printf(1, " %3i", (u_char) sigmsg[i]);
+      olsr_printf(1, " %3i", sigmsg[i]);
     }
   olsr_printf(1, "\n");
 
@@ -624,7 +625,7 @@ validate_packet(char *pck, int *size)
 
   for(i = 0; i < SIGNATURE_SIZE; i++)
     {
-      olsr_printf(1, " %3i", (u_char) sigmsg[i]);
+      olsr_printf(1, " %3i", sigmsg[i]);
     }
   olsr_printf(1, "\n");
 #endif
@@ -640,8 +641,9 @@ validate_packet(char *pck, int *size)
 
   if(!check_timestamp((union olsr_ip_addr *)&sig->originator, rec_time))
     {
+      struct ipaddr_str buf;
       olsr_printf(1, "[ENC]Timestamp missmatch in packet from %s!\n",
-                 olsr_ip_to_string((union olsr_ip_addr *)&sig->originator));
+                 olsr_ip_to_string(&buf, (union olsr_ip_addr *)&sig->originator));
       return 0;
     }
 
@@ -714,6 +716,7 @@ send_challenge(union olsr_ip_addr *new_host)
   struct challengemsg cmsg;
   struct stamp *entry;
   olsr_u32_t challenge, hash;
+  struct ipaddr_str buf;
 
   olsr_printf(1, "[ENC]Building CHALLENGE message\n");
 
@@ -752,7 +755,7 @@ send_challenge(union olsr_ip_addr *new_host)
           cmsg.signature);
   }
   olsr_printf(3, "[ENC]Sending timestamp request to %s challenge 0x%x\n", 
-             olsr_ip_to_string(new_host),
+             olsr_ip_to_string(&buf, new_host),
              challenge);
 
   /* Add to buffer */
@@ -792,11 +795,12 @@ parse_cres(char *in_msg)
   struct c_respmsg *msg;
   olsr_u8_t sha1_hash[SIGNATURE_SIZE];
   struct stamp *entry;
+  struct ipaddr_str buf;
 
   msg = (struct c_respmsg *)in_msg;
 
   olsr_printf(1, "[ENC]Challenge-response message received\n");
-  olsr_printf(3, "[ENC]To: %s\n", olsr_ip_to_string((union olsr_ip_addr *)&msg->destination));
+  olsr_printf(3, "[ENC]To: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->destination));
 
   if(if_ifwithaddr((union olsr_ip_addr *)&msg->destination) == NULL)
     {
@@ -834,8 +838,9 @@ parse_cres(char *in_msg)
   /* Now to check the digest from the emitted challenge */
   if((entry = lookup_timestamp_entry((union olsr_ip_addr *)&msg->originator)) == NULL)
     {
+      struct ipaddr_str buf;
       olsr_printf(1, "[ENC]Received challenge-response from non-registered node %s!\n",
-                 olsr_ip_to_string((union olsr_ip_addr *)&msg->originator));
+                 olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->originator));
       return 0;
     }
 
@@ -857,8 +862,9 @@ parse_cres(char *in_msg)
 
   if(memcmp(msg->res_sig, sha1_hash, SIGNATURE_SIZE) != 0)
     {
+      struct ipaddr_str buf;
       olsr_printf(1, "[ENC]Error in challenge signature from %s!\n",
-                 olsr_ip_to_string((union olsr_ip_addr *)&msg->originator));
+                 olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->originator));
       
       return 0;
     }
@@ -876,7 +882,7 @@ parse_cres(char *in_msg)
   entry->valtime = GET_TIMESTAMP(TIMESTAMP_HOLD_TIME * 1000);
 
   olsr_printf(1, "[ENC]%s registered with diff %d!\n",
-             olsr_ip_to_string((union olsr_ip_addr *)&msg->originator),
+             olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->originator),
              entry->diff);
 
   /* Send response-response */
@@ -894,11 +900,12 @@ parse_rres(char *in_msg)
   struct r_respmsg *msg;
   olsr_u8_t sha1_hash[SIGNATURE_SIZE];
   struct stamp *entry;
+  struct ipaddr_str buf;
 
   msg = (struct r_respmsg *)in_msg;
 
   olsr_printf(1, "[ENC]Response-response message received\n");
-  olsr_printf(3, "[ENC]To: %s\n", olsr_ip_to_string((union olsr_ip_addr *)&msg->destination));
+  olsr_printf(3, "[ENC]To: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->destination));
 
   if(if_ifwithaddr((union olsr_ip_addr *)&msg->destination) == NULL)
     {
@@ -934,8 +941,9 @@ parse_rres(char *in_msg)
   /* Now to check the digest from the emitted challenge */
   if((entry = lookup_timestamp_entry((union olsr_ip_addr *)&msg->originator)) == NULL)
     {
+      struct ipaddr_str buf;
       olsr_printf(1, "[ENC]Received response-response from non-registered node %s!\n",
-                 olsr_ip_to_string((union olsr_ip_addr *)&msg->originator));
+                 olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->originator));
       return 0;
     }
 
@@ -957,8 +965,9 @@ parse_rres(char *in_msg)
 
   if(memcmp(msg->res_sig, sha1_hash, SIGNATURE_SIZE) != 0)
     {
+      struct ipaddr_str buf;
       olsr_printf(1, "[ENC]Error in response signature from %s!\n",
-                 olsr_ip_to_string((union olsr_ip_addr *)&msg->originator));
+                 olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->originator));
       
       return 0;
     }
@@ -976,7 +985,7 @@ parse_rres(char *in_msg)
   entry->valtime = GET_TIMESTAMP(TIMESTAMP_HOLD_TIME * 1000);
 
   olsr_printf(1, "[ENC]%s registered with diff %d!\n",
-             olsr_ip_to_string((union olsr_ip_addr *)&msg->originator),
+             olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->originator),
              entry->diff);
 
   return 1;
@@ -990,11 +999,12 @@ parse_challenge(char *in_msg)
   olsr_u8_t sha1_hash[SIGNATURE_SIZE];
   struct stamp *entry;
   olsr_u32_t hash;
-
+  struct ipaddr_str buf;
+          
   msg = (struct challengemsg *)in_msg;
 
   olsr_printf(1, "[ENC]Challenge message received\n");
-  olsr_printf(3, "[ENC]To: %s\n", olsr_ip_to_string((union olsr_ip_addr *)&msg->destination));
+  olsr_printf(3, "[ENC]To: %s\n", olsr_ip_to_string(&buf, (union olsr_ip_addr *)&msg->destination));
 
   if(if_ifwithaddr((union olsr_ip_addr *)&msg->destination) == NULL)
     {
@@ -1087,6 +1097,7 @@ send_cres(union olsr_ip_addr *to, union olsr_ip_addr *from, olsr_u32_t chal_in,
 {
   struct c_respmsg crmsg;
   olsr_u32_t challenge;
+  struct ipaddr_str buf;
 
   olsr_printf(1, "[ENC]Building CRESPONSE message\n");
 
@@ -1147,7 +1158,7 @@ send_cres(union olsr_ip_addr *to, union olsr_ip_addr *from, olsr_u32_t chal_in,
   }
 
   olsr_printf(3, "[ENC]Sending challenge response to %s challenge 0x%x\n", 
-             olsr_ip_to_string(to),
+             olsr_ip_to_string(&buf, to),
              challenge);
 
   /* Add to buffer */
@@ -1172,6 +1183,7 @@ static int
 send_rres(union olsr_ip_addr *to, union olsr_ip_addr *from, olsr_u32_t chal_in)
 {
   struct r_respmsg rrmsg;
+  struct ipaddr_str buf;
 
   olsr_printf(1, "[ENC]Building RRESPONSE message\n");
 
@@ -1225,7 +1237,7 @@ send_rres(union olsr_ip_addr *to, union olsr_ip_addr *from, olsr_u32_t chal_in)
   }
 
   olsr_printf(3, "[ENC]Sending response response to %s\n", 
-             olsr_ip_to_string(to));
+             olsr_ip_to_string(&buf, to));
 
   /* add to buffer */
   net_outbuffer_push(olsr_in_if, &rrmsg, sizeof(struct r_respmsg));
@@ -1243,6 +1255,7 @@ lookup_timestamp_entry(union olsr_ip_addr *adr)
 {
   olsr_u32_t hash;
   struct stamp *entry;
+  struct ipaddr_str buf;
 
   hash = olsr_hashing(adr);
 
@@ -1252,12 +1265,12 @@ lookup_timestamp_entry(union olsr_ip_addr *adr)
     {
       if(memcmp(&entry->addr, adr, olsr_cnf->ipsize) == 0)
        {
-         olsr_printf(3, "[ENC]Match for %s\n", olsr_ip_to_string(adr));
+         olsr_printf(3, "[ENC]Match for %s\n", olsr_ip_to_string(&buf, adr));
          return entry;
        }
     }
 
-  olsr_printf(1, "[ENC]No match for %s\n", olsr_ip_to_string(adr));
+  olsr_printf(1, "[ENC]No match for %s\n", olsr_ip_to_string(&buf, adr));
 
   return NULL;
 }
@@ -1286,11 +1299,12 @@ timeout_timestamps(void* foo __attribute__((unused)))
          /*Check if the entry is timed out*/
          if((TIMED_OUT(tmp_list->valtime)) && (TIMED_OUT(tmp_list->conftime)))
            {
+              struct ipaddr_str buf;
              entry_to_delete = tmp_list;
              tmp_list = tmp_list->next;
 
              olsr_printf(1, "[ENC]timestamp info for %s timed out.. deleting it\n", 
-                         olsr_ip_to_string(&entry_to_delete->addr));
+                         olsr_ip_to_string(&buf, &entry_to_delete->addr));
 
              /*Delete it*/
              entry_to_delete->next->prev = entry_to_delete->prev;
@@ -1309,7 +1323,7 @@ timeout_timestamps(void* foo __attribute__((unused)))
 
 
 static int
-read_key_from_file(char *file)
+read_key_from_file(const char *file)
 {
   FILE *kf;
   size_t keylen;
index 5440d2e..20fa8c6 100644 (file)
@@ -33,7 +33,7 @@
  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  * POSSIBILITY OF SUCH DAMAGE.
  *
- * $Id: secure_messages.h,v 1.3 2007/07/15 21:47:17 bernd67 Exp $
+ * $Id: secure_messages.h,v 1.4 2007/11/08 22:47:40 bernd67 Exp $
  */
 
 
@@ -88,7 +88,7 @@ struct sig_msg
   olsr_u16_t    reserved;
 
   time_t        timestamp;
-  char          signature[SIGSIZE];
+  olsr_u8_t     signature[SIGSIZE];
 };
 
 /*
index e72b6a0..2badf05 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: plugin.c,v 1.14 2007/11/02 20:58:07 bernd67 Exp $
+ * $Id: plugin.c,v 1.15 2007/11/08 22:47:40 bernd67 Exp $
  */
 
 #include <string.h>
@@ -51,6 +51,7 @@
 #include "glua.h"
 #include "glua_ext.h"
 #include "olsrd_plugin.h"
+#include "net_olsr.h"
 
 #include <defs.h>
 #include <olsr.h>
index aee2979..7bdc308 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_plugin.c,v 1.3 2007/07/15 17:41:33 bernd67 Exp $
+ * $Id: olsrd_plugin.c,v 1.4 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 /*
@@ -81,7 +81,7 @@ static void my_init(void)
     /* defaults for parameters */
     ipc_port = 2006;
     if (olsr_cnf->ip_version == AF_INET) {
-        ipc_accept_ip.v4 = htonl(INADDR_LOOPBACK);
+        ipc_accept_ip.v4.s_addr = htonl(INADDR_LOOPBACK);
     } else {
         ipc_accept_ip.v6 = in6addr_loopback;
     }
index 5bda205..702a94d 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.14 2007/11/05 15:32:55 bernd67 Exp $
+ * $Id: olsrd_txtinfo.c,v 1.15 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 /*
@@ -75,6 +75,7 @@
 #include "mid_set.h"
 #include "link_set.h"
 #include "socket_parser.h"
+#include "net_olsr.h"
 
 #include "olsrd_txtinfo.h"
 #include "olsrd_plugin.h"
@@ -249,7 +250,7 @@ static void ipc_action(int fd)
         if (inet_ntop(olsr_cnf->ip_version, &sin4->sin_addr, addr,
            INET6_ADDRSTRLEN) == NULL)
              addr[0] = '\0';
-        if (!COMP_IP(&sin4->sin_addr, &ipc_accept_ip.v4)) {
+        if (!ip4equal(&sin4->sin_addr, &ipc_accept_ip.v4)) {
             olsr_printf(1, "(TXTINFO) From host(%s) not allowed!\n", addr);
             close(ipc_connection);
             return;
@@ -260,8 +261,8 @@ static void ipc_action(int fd)
            INET6_ADDRSTRLEN) == NULL)
              addr[0] = '\0';
        /* Use in6addr_any (::) in olsr.conf to allow anybody. */
-        if (!COMP_IP(&in6addr_any, &ipc_accept_ip.v6) &&
-           !COMP_IP(&sin6->sin6_addr, &ipc_accept_ip.v6)) {
+        if (!ip6equal(&in6addr_any, &ipc_accept_ip.v6) &&
+           !ip6equal(&sin6->sin6_addr, &ipc_accept_ip.v6)) {
             olsr_printf(1, "(TXTINFO) From host(%s) not allowed!\n", addr);
             close(ipc_connection);
             return;
@@ -296,6 +297,7 @@ static void ipc_action(int fd)
 
 static void ipc_print_neigh_link(void)
 {
+    struct ipaddr_str buf;
     struct neighbor_entry *neigh;
     struct neighbor_2_list_entry *list_2;
     struct link_entry *link = NULL;
@@ -307,8 +309,8 @@ static void ipc_print_neigh_link(void)
     link = link_set;
     while(link)        {
        ipc_sendf( "%s\t%s\t%0.2f\t%0.2f\t%d\t%d\t%0.2f\t%0.2f\t\n",
-                   olsr_ip_to_string(&link->local_iface_addr),
-                   olsr_ip_to_string(&link->neighbor_iface_addr),
+                   olsr_ip_to_string(&buf, &link->local_iface_addr),
+                   olsr_ip_to_string(&buf, &link->neighbor_iface_addr),
                    link->L_link_quality, 
                    link->loss_link_quality,
                    link->lost_packets, 
@@ -325,7 +327,7 @@ static void ipc_print_neigh_link(void)
             neigh != &neighbortable[index];
             neigh = neigh->next) {
             ipc_sendf("%s\t%s\t%s\t%s\t%d\t", 
-                      olsr_ip_to_string(&neigh->neighbor_main_addr),
+                      olsr_ip_to_string(&buf, &neigh->neighbor_main_addr),
                       (neigh->status == SYM) ? "YES" : "NO",
                       neigh->is_mpr ? "YES" : "NO",
                       olsr_lookup_mprs_set(&neigh->neighbor_main_addr) ? "YES" : "NO",
@@ -336,7 +338,7 @@ static void ipc_print_neigh_link(void)
                 list_2 != &neigh->neighbor_2_list;
                 list_2 = list_2->next)
                 {
-                    //size += sprintf(&buf[size], "<option>%s</option>\n", olsr_ip_to_string(&list_2->neighbor_2->neighbor_2_addr));
+                    //size += sprintf(&buf[size], "<option>%s</option>\n", olsr_ip_to_string(&buf, &list_2->neighbor_2->neighbor_2_addr));
                     thop_cnt ++;
                 }
             ipc_sendf("%d\n", thop_cnt);
@@ -347,6 +349,7 @@ static void ipc_print_neigh_link(void)
 
 static void ipc_print_routes(void)
 {
+    struct ipaddr_str buf;
     struct rt_entry *rt;
     struct avl_node *rt_tree_node;
 
@@ -360,13 +363,12 @@ static void ipc_print_routes(void)
         rt = rt_tree_node->data;
 
         ipc_sendf( "%s/%d\t%s\t%d\t%.3f\t%s\t\n",
-                   olsr_ip_to_string(&rt->rt_dst.prefix),
+                   olsr_ip_to_string(&buf, &rt->rt_dst.prefix),
                    rt->rt_dst.prefix_len,
-                   olsr_ip_to_string(&rt->rt_best->rtp_nexthop.gateway),
+                   olsr_ip_to_string(&buf, &rt->rt_best->rtp_nexthop.gateway),
                    rt->rt_best->rtp_metric.hops,
                    rt->rt_best->rtp_metric.etx,
                    if_ifwithindex_name(rt->rt_best->rtp_nexthop.iif_index));
-
     }
     ipc_sendf("\n");
 
@@ -375,16 +377,17 @@ static void ipc_print_routes(void)
 static void ipc_print_topology(void)
 {
     struct tc_entry *tc;
-    struct tc_edge_entry *tc_edge;
-
+    
     ipc_sendf("Table: Topology\nDestination IP\tLast hop IP\tLQ\tILQ\tETX\n");
 
     /* Topology */  
     OLSR_FOR_ALL_TC_ENTRIES(tc) {
+        struct tc_edge_entry *tc_edge;
         OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge) {
+            struct ipaddr_str dstbuf, addrbuf;
             ipc_sendf( "%s\t%s\t%0.2f\t%0.2f\t%0.2f\n", 
-                       olsr_ip_to_string(&tc_edge->T_dest_addr),
-                       olsr_ip_to_string(&tc->addr), 
+                       olsr_ip_to_string(&dstbuf, &tc_edge->T_dest_addr),
+                       olsr_ip_to_string(&addrbuf, &tc->addr), 
                        tc_edge->link_quality,
                        tc_edge->inverse_link_quality,
                        olsr_calc_tc_etx(tc_edge));
@@ -398,9 +401,7 @@ static void ipc_print_topology(void)
 static void ipc_print_hna(void)
 {
     int size;
-    olsr_u8_t index;
-    struct hna_entry *tmp_hna;
-    struct hna_net *tmp_net;
+    int index;
     struct local_hna_entry *hna;
 
     size = 0;
@@ -409,51 +410,51 @@ static void ipc_print_hna(void)
 
     /* Announced HNA entries */
     if (olsr_cnf->ip_version == AF_INET) {
-        for(hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+        for(hna = olsr_cnf->hna_entries; hna != NULL; hna = hna->next) {
+            struct ipaddr_str addrbuf, maskbuf, mainaddrbuf;
             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));
+                      olsr_ip_to_string(&addrbuf, &hna->net.prefix),
+                      olsr_ip_to_string(&maskbuf, &netmask),
+                      olsr_ip_to_string(&mainaddrbuf, &olsr_cnf->main_addr));
         }
     } else {
-        for(hna = olsr_cnf->hna_entries; hna; hna = hna->next) {
+        for(hna = olsr_cnf->hna_entries; hna != NULL; hna = hna->next) {
+            struct ipaddr_str addrbuf, mainaddrbuf;
             ipc_sendf("%s\t%d\t%s\n",
-                      olsr_ip_to_string(&hna->net.prefix),
+                      olsr_ip_to_string(&addrbuf, &hna->net.prefix),
                       hna->net.prefix_len,
-                      olsr_ip_to_string(&olsr_cnf->main_addr));
+                      olsr_ip_to_string(&mainaddrbuf, &olsr_cnf->main_addr));
         }
     }
 
     /* HNA entries */
     for(index = 0; index < HASHSIZE; index++) {
-        tmp_hna = hna_set[index].next;
+        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) {
-               if (AF_INET == olsr_cnf->ip_version) {
+            struct hna_net *tmp_net;
+            for (tmp_net = tmp_hna->networks.next; tmp_net != &tmp_hna->networks; tmp_net = tmp_net->next) {
+               if (olsr_cnf->ip_version == AF_INET) {
+                    struct ipaddr_str addrbuf, maskbuf, mainaddrbuf;
+                    const union olsr_ip_addr netmask = { .v4 = { .s_addr = tmp_net->A_netmask.v4 } };
                     ipc_sendf("%s\t%s\t%s\n",
-                              olsr_ip_to_string(&tmp_net->A_network_addr),
-                              olsr_ip_to_string((union olsr_ip_addr *)&tmp_net->A_netmask.v4),
-                              olsr_ip_to_string(&tmp_hna->A_gateway_addr));
+                              olsr_ip_to_string(&addrbuf, &tmp_net->A_network_addr),
+                              olsr_ip_to_string(&maskbuf, &netmask),
+                              olsr_ip_to_string(&mainaddrbuf, &tmp_hna->A_gateway_addr));
                } else {
+                    struct ipaddr_str addrbuf, mainaddrbuf;
                     ipc_sendf("%s\t%d\t%s\n",
-                              olsr_ip_to_string(&tmp_net->A_network_addr),
+                              olsr_ip_to_string(&addrbuf, &tmp_net->A_network_addr),
                               tmp_net->A_netmask.v6,
-                              olsr_ip_to_string(&tmp_hna->A_gateway_addr));
+                              olsr_ip_to_string(&mainaddrbuf, &tmp_hna->A_gateway_addr));
                }
-                tmp_net = tmp_net->next;
-           }
-             
-            tmp_hna = tmp_hna->next;
+           }            
        }
     }
     ipc_sendf("\n");
-
 }
 
 static void ipc_print_mid(void)
@@ -470,14 +471,15 @@ static void ipc_print_mid(void)
         entry = mid_set[index].next;
         
         while( entry != &mid_set[index] ) {
-            ipc_sendf( olsr_ip_to_string( &entry->main_addr ) );
+            struct ipaddr_str buf;
+            ipc_sendf( olsr_ip_to_string(&buf,  &entry->main_addr ) );
             alias = entry->aliases;
             is_first = 1;
 
             while( alias ) {
                 ipc_sendf( "%s%s",
                            ( is_first ? "\t" : ";" ),
-                           olsr_ip_to_string( &alias->alias )
+                           olsr_ip_to_string(&buf,  &alias->alias )
                            );
 
                 alias = alias->next_alias;
index 10d3204..a98dd02 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.37 2007/11/05 15:32:55 bernd67 Exp $
+ * $Id: build_msg.c,v 1.38 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -45,6 +45,7 @@
 #include "build_msg.h"
 #include "local_hna_set.h"
 #include "mantissa.h"
+#include "net_olsr.h"
 
 #define BMSG_DBGLVL 5
 
@@ -297,7 +298,8 @@ serialize_hello4(struct hello_message *message, struct interface *ifp)
   m->v4.hopcnt = 0;
   m->v4.olsr_msgtype = HELLO_MESSAGE;
   /* Set source(main) addr */
-  COPY_IP(&m->v4.originator, &olsr_cnf->main_addr);
+  //COPY_IP(&m->v4.originator, &olsr_cnf->main_addr);
+  m->v4.originator = olsr_cnf->main_addr.v4.s_addr;
 
   m->v4.olsr_vtime = ifp->valtimes.hello;
 
@@ -319,6 +321,9 @@ serialize_hello4(struct hello_message *message, struct interface *ifp)
       /* Link statuses */
       for(j = 0; j <= MAX_LINK; j++)
        {
+#if !defined(NODEBUG) && defined(DEBUG)
+          struct ipaddr_str buf;
+#endif
 
          /* HYSTERESIS - Not adding neighbors with link type HIDE */
          
@@ -334,9 +339,9 @@ serialize_hello4(struct hello_message *message, struct interface *ifp)
                continue;
 
 #ifdef DEBUG
-             OLSR_PRINTF(BMSG_DBGLVL, "\t%s - ", olsr_ip_to_string(&nb->address));
+             OLSR_PRINTF(BMSG_DBGLVL, "\t%s - ", olsr_ip_to_string(&buf, &nb->address));
              OLSR_PRINTF(BMSG_DBGLVL, "L:%d N:%d\n", j, i);
-#endif           
+#endif
              /*
               * If there is not enough room left 
               * for the data in the outputbuffer
@@ -390,7 +395,8 @@ serialize_hello4(struct hello_message *message, struct interface *ifp)
                  curr_size += 4; /* HELLO type section header */
                }
              
-             COPY_IP(haddr, &nb->address);
+             //COPY_IP(haddr, &nb->address);
+             *haddr = nb->address;
              
              /* Point to next address */
              haddr = (union olsr_ip_addr *)&haddr->v6.s6_addr[4];
@@ -468,7 +474,8 @@ serialize_hello6(struct hello_message *message, struct interface *ifp)
   m->v6.ttl = message->ttl;
   m->v6.hopcnt = 0;
   /* Set source(main) addr */
-  COPY_IP(&m->v6.originator, &olsr_cnf->main_addr);
+  //COPY_IP(&m->v6.originator, &olsr_cnf->main_addr);
+  m->v6.originator = olsr_cnf->main_addr.v6;
   m->v6.olsr_msgtype = HELLO_MESSAGE;
 
   m->v6.olsr_vtime = ifp->valtimes.hello;
@@ -487,6 +494,9 @@ serialize_hello6(struct hello_message *message, struct interface *ifp)
     {
       for(j = 0; j <= MAX_LINK; j++)
        {
+#if !defined(NODEBUG) && defined(DEBUG)
+          struct ipaddr_str buf;
+#endif
          first_entry = OLSR_TRUE;
                  
          /*
@@ -498,9 +508,9 @@ serialize_hello6(struct hello_message *message, struct interface *ifp)
                continue;
 
 #ifdef DEBUG
-             OLSR_PRINTF(BMSG_DBGLVL, "\t%s - ", olsr_ip_to_string(&nb->address));
+             OLSR_PRINTF(BMSG_DBGLVL, "\t%s - ", olsr_ip_to_string(&buf, &nb->address));
              OLSR_PRINTF(BMSG_DBGLVL, "L:%d N:%d\n", j, i);
-#endif           
+#endif
 
 
              /*
@@ -555,7 +565,8 @@ serialize_hello6(struct hello_message *message, struct interface *ifp)
                  curr_size += 4; /* HELLO type section header */
                }
                  
-             COPY_IP(haddr, &nb->address);
+             //COPY_IP(haddr, &nb->address);
+             *haddr = nb->address;
                  
              /* Point to next address */
              haddr++;
@@ -599,7 +610,9 @@ serialize_hello6(struct hello_message *message, struct interface *ifp)
 static olsr_bool
 serialize_tc4(struct tc_message *message, struct interface *ifp)           
 {
-
+#if !defined(NODEBUG) && defined(DEBUG)
+  struct ipaddr_str buf;
+#endif
   olsr_u16_t remainsize, curr_size;
   struct tc_mpr_addr *mprs;
   union olsr_message *m;
@@ -633,7 +646,8 @@ serialize_tc4(struct tc_message *message, struct interface *ifp)
   m->v4.olsr_msgtype = TC_MESSAGE;
   m->v4.hopcnt = message->hop_count;
   m->v4.ttl = message->ttl;
-  COPY_IP(&m->v4.originator, &message->originator);
+  //COPY_IP(&m->v4.originator, &message->originator);
+  m->v4.originator = message->originator.v4.s_addr;
 
   /* Fill TC header */
   tc->ansn = htons(message->ansn);
@@ -674,10 +688,10 @@ serialize_tc4(struct tc_message *message, struct interface *ifp)
       found = OLSR_TRUE;
 #ifdef DEBUG
          OLSR_PRINTF(BMSG_DBGLVL, "\t%s\n", 
-                     olsr_ip_to_string(&mprs->address));
+                     olsr_ip_to_string(&buf, &mprs->address));
 #endif 
-      COPY_IP(&mprsaddr->addr, &mprs->address);
-
+      //COPY_IP(&mprsaddr->addr, &mprs->address);
+      mprsaddr->addr = mprs->address.v4.s_addr;
       curr_size += olsr_cnf->ipsize;
       mprsaddr++;
     }
@@ -725,7 +739,9 @@ serialize_tc4(struct tc_message *message, struct interface *ifp)
 static olsr_bool
 serialize_tc6(struct tc_message *message, struct interface *ifp)           
 {
-
+#if !defined(NODEBUG) && defined(DEBUG)
+  struct ipaddr_str buf;
+#endif
   olsr_u16_t remainsize, curr_size;
   struct tc_mpr_addr *mprs;
   union olsr_message *m;
@@ -758,7 +774,8 @@ serialize_tc6(struct tc_message *message, struct interface *ifp)
   m->v6.olsr_msgtype = TC_MESSAGE;
   m->v6.hopcnt = message->hop_count;
   m->v6.ttl = message->ttl;
-  COPY_IP(&m->v6.originator, &message->originator);
+  //COPY_IP(&m->v6.originator, &message->originator);
+  m->v6.originator = message->originator.v6;
 
   /* Fill TC header */
   tc6->ansn = htons(message->ansn);
@@ -795,9 +812,10 @@ serialize_tc6(struct tc_message *message, struct interface *ifp)
       found = OLSR_TRUE;
 #ifdef DEBUG
          OLSR_PRINTF(BMSG_DBGLVL, "\t%s\n", 
-                     olsr_ip_to_string(&mprs->address));
+                     olsr_ip_to_string(&buf, &mprs->address));
 #endif
-      COPY_IP(&mprsaddr6->addr, &mprs->address);
+      //COPY_IP(&mprsaddr6->addr, &mprs->address);
+      mprsaddr6->addr = mprs->address.v6;
       curr_size += olsr_cnf->ipsize;
 
       mprsaddr6++;
@@ -871,7 +889,8 @@ serialize_mid4(struct interface *ifp)
   m->v4.hopcnt = 0;
   m->v4.ttl = MAX_TTL;
   /* Set main(first) address */
-  COPY_IP(&m->v4.originator, &olsr_cnf->main_addr);
+  //COPY_IP(&m->v4.originator, &olsr_cnf->main_addr);
+  m->v4.originator = olsr_cnf->main_addr.v4.s_addr;
   m->v4.olsr_msgtype = MID_MESSAGE;
   m->v4.olsr_vtime = ifp->valtimes.mid;
  
@@ -880,8 +899,11 @@ serialize_mid4(struct interface *ifp)
   /* Don't add the main address... it's already there */
   for(ifs = ifnet; ifs != NULL; ifs = ifs->int_next)
     {
-      if(!COMP_IP(&olsr_cnf->main_addr, &ifs->ip_addr))
+      if(!ipequal(&olsr_cnf->main_addr, &ifs->ip_addr))
        {
+#if !defined(NODEBUG) && defined(DEBUG)
+          struct ipaddr_str buf;
+#endif
 
          if((curr_size + olsr_cnf->ipsize) > remainsize)
            {
@@ -905,11 +927,12 @@ serialize_mid4(struct interface *ifp)
            }
 #ifdef DEBUG
          OLSR_PRINTF(BMSG_DBGLVL, "\t%s(%s)\n", 
-                     olsr_ip_to_string(&ifs->ip_addr), 
+                     olsr_ip_to_string(&buf, &ifs->ip_addr), 
                      ifs->int_name);
 #endif
          
-         COPY_IP(&addrs->addr, &ifs->ip_addr);
+         //COPY_IP(&addrs->addr, &ifs->ip_addr);
+          addrs->addr = ifs->ip_addr.v4.s_addr;
          addrs++;
          curr_size += olsr_cnf->ipsize;
        }
@@ -972,16 +995,19 @@ serialize_mid6(struct interface *ifp)
   m->v6.olsr_msgtype = MID_MESSAGE;
   m->v6.olsr_vtime = ifp->valtimes.mid;
   /* Set main(first) address */
-  COPY_IP(&m->v6.originator, &olsr_cnf->main_addr);
-   
+  //COPY_IP(&m->v6.originator, &olsr_cnf->main_addr);
+  m->v6.originator = olsr_cnf->main_addr.v6;
 
   addrs6 = m->v6.message.mid.mid_addr;
 
   /* Don't add the main address... it's already there */
   for(ifs = ifnet; ifs != NULL; ifs = ifs->int_next)
     {
-      if(!COMP_IP(&olsr_cnf->main_addr, &ifs->ip_addr))
+      if(!ipequal(&olsr_cnf->main_addr, &ifs->ip_addr))
        {
+#if !defined(NODEBUG) && defined(DEBUG)
+          struct ipaddr_str buf;
+#endif
          if((curr_size + olsr_cnf->ipsize) > remainsize)
            {
              /* Only add MID message if it contains data */
@@ -1004,11 +1030,12 @@ serialize_mid6(struct interface *ifp)
            }
 #ifdef DEBUG
                  OLSR_PRINTF(BMSG_DBGLVL, "\t%s(%s)\n", 
-                             olsr_ip_to_string(&ifs->ip_addr), 
+                             olsr_ip_to_string(&buf, &ifs->ip_addr), 
                              ifs->int_name);
 #endif
 
-         COPY_IP(&addrs6->addr, &ifs->ip_addr);
+          //COPY_IP(&addrs6->addr, &ifs->ip_addr);
+          addrs6->addr = ifs->ip_addr.v6;
          addrs6++;
          curr_size += olsr_cnf->ipsize;
        }
@@ -1062,7 +1089,8 @@ serialize_hna4(struct interface *ifp)
   
   
   /* Fill header */
-  COPY_IP(&m->v4.originator, &olsr_cnf->main_addr);
+  //COPY_IP(&m->v4.originator, &olsr_cnf->main_addr);
+  m->v4.originator = olsr_cnf->main_addr.v4.s_addr;
   m->v4.hopcnt = 0;
   m->v4.ttl = MAX_TTL;
   m->v4.olsr_msgtype = HNA_MESSAGE;
@@ -1095,9 +1123,11 @@ serialize_hna4(struct interface *ifp)
 #ifdef DEBUG
       OLSR_PRINTF(BMSG_DBGLVL, "\tNet: %s\n", olsr_ip_prefix_to_string(&h->net));
 #endif
-      COPY_IP(&pair->addr, &h->net.prefix);
+      //COPY_IP(&pair->addr, &h->net);
+      pair->addr = h->net.prefix.v4.s_addr;
+      //COPY_IP(&pair->netmask, &h->netmask);
       olsr_prefix_to_netmask(&ip_addr, h->net.prefix_len);
-      pair->addr = ip_addr.v4;
+      pair->netmask = ip_addr.v4.s_addr;
       pair++;
       curr_size += (2 * olsr_cnf->ipsize);
       h = h->next;
@@ -1113,9 +1143,6 @@ serialize_hna4(struct interface *ifp)
 }
 
 
-
-
-
 /**
  *IP version 6
  *
@@ -1152,7 +1179,8 @@ serialize_hna6(struct interface *ifp)
   m = (union olsr_message *)msg_buffer;   
 
   /* Fill header */
-  COPY_IP(&m->v6.originator, &olsr_cnf->main_addr);
+  //COPY_IP(&m->v6.originator, &olsr_cnf->main_addr);
+  m->v6.originator = olsr_cnf->main_addr.v6;
   m->v6.hopcnt = 0;
   m->v6.ttl = MAX_TTL;
   m->v6.olsr_msgtype = HNA_MESSAGE;
@@ -1184,9 +1212,11 @@ serialize_hna6(struct interface *ifp)
 #ifdef DEBUG
       OLSR_PRINTF(BMSG_DBGLVL, "\tNet: %s\n", olsr_ip_prefix_to_string(&h->net));
 #endif
-      COPY_IP(&pair6->addr, &h->net.prefix);
+      //COPY_IP(&pair6->addr, &h->net);
+      pair6->addr = h->net.prefix.v6;
+      //COPY_IP(&pair6->netmask, &tmp_netmask);
       olsr_prefix_to_netmask(&tmp_netmask, h->net.prefix_len);
-      COPY_IP(&pair6->netmask, &tmp_netmask);
+      pair6->netmask = tmp_netmask.v6;
       pair6++;
       curr_size += (2 * olsr_cnf->ipsize);
       h = h->next;
index 6d65033..c93d3a5 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.10 2007/11/05 15:32:54 bernd67 Exp $
+ * $Id: cfgfile_gen.c,v 1.11 2007/11/08 22:47:42 bernd67 Exp $
  */
 
 
@@ -63,7 +63,6 @@ olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
   struct olsr_lq_mult      *mult;
 
   char ipv6_buf[100];             /* buffer for IPv6 inet_htop */
-  struct in_addr in4;
 
   FILE *fd;
 
@@ -87,18 +86,18 @@ olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
 
   /* HNA IPv4 */
   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)
-    {
-      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;
+  while(h) {
+    struct ipaddr_str buf;
+    fprintf(fd, "    %s ", olsr_ip_to_string(&buf, &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(&buf, &ip_addr));
+    } else {
+      fprintf(fd, "%d\n", h->net.prefix_len);
     }
+    h = h->next;
+  }
   fprintf(fd, "}\n\n");
 
   /* No interfaces */
@@ -130,16 +129,13 @@ olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
 
   while(ih)
     {
-      in4.s_addr = ih->host.v4;
-      fprintf(fd, "   Host          %s\n", inet_ntoa(in4));
+      fprintf(fd, "   Host          %s\n", inet_ntoa(ih->host.v4));
       ih = ih->next;
     }
   while(ie)
     {
-      in4.s_addr = ie->net.v4;
-      fprintf(fd, "   Net           %s ", inet_ntoa(in4));
-      in4.s_addr = ie->mask.v4;
-      fprintf(fd, "%s\n", inet_ntoa(in4));
+      fprintf(fd, "   Net           %s ", inet_ntoa(ie->net.v4));
+      fprintf(fd, "%s\n", inet_ntoa(ie->mask.v4));
       ie = ie->next;
     }
 
@@ -231,10 +227,9 @@ olsrd_write_cnf(struct olsrd_config *cnf, const char *fname)
          fprintf(fd, "    # IPv4 broadcast address to use. The\n    # one usefull example would be 255.255.255.255\n    # If not defined the broadcastaddress\n    # every card is configured with is used\n\n");
 
 
-         if(in->cnf->ipv4_broadcast.v4)
+         if(in->cnf->ipv4_broadcast.v4.s_addr)
            {
-             in4.s_addr = in->cnf->ipv4_broadcast.v4;
-             fprintf(fd, "    Ip4Broadcast\t %s\n\n", inet_ntoa(in4));
+             fprintf(fd, "    Ip4Broadcast\t %s\n\n", inet_ntoa(in->cnf->ipv4_broadcast.v4));
            }
          else
            {
@@ -372,15 +367,13 @@ olsrd_write_cnf_buf(struct olsrd_config *cnf, char *buf, olsr_u32_t bufsize)
   int size = 0;
 
   char ipv6_buf[100];             /* buffer for IPv6 inet_htop */
-  struct in_addr in4;
 
 #if 0
   printf("\n\n\n\nolsrd_write_cnf_buf bufsize  %d\n\n\n\n\n", bufsize);
 #endif
-  if(buf == NULL || bufsize < MAX_LINESIZE)
-    {
+  if (buf == NULL || bufsize < MAX_LINESIZE) {
       return -1;
-    }
+  }
 
   WRITE_TO_BUF("#\n# Configuration file for olsr.org olsrd\n# automatically generated by olsrd-cnf %s\n#\n\n\n", PARSER_VERSION);
 
@@ -390,20 +383,20 @@ olsrd_write_cnf_buf(struct olsrd_config *cnf, char *buf, olsr_u32_t bufsize)
   /* IP version */
   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 */
+  /* HNA IPv4 and IPv6 */
   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 ", 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;
+  while(h) {
+    struct ipaddr_str strbuf;
+    WRITE_TO_BUF("    %s ", olsr_ip_to_string(&strbuf, &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(&strbuf, &ip_addr));
+    } else {
+      WRITE_TO_BUF("%d\n", h->net.prefix_len);
     }
+    h = h->next;
+  }
   WRITE_TO_BUF("}\n\n");
 
   /* No interfaces */
@@ -435,16 +428,13 @@ olsrd_write_cnf_buf(struct olsrd_config *cnf, char *buf, olsr_u32_t bufsize)
 
   while(ih)
     {
-      in4.s_addr = ih->host.v4;
-      WRITE_TO_BUF("   Host          %s\n", inet_ntoa(in4));
+      WRITE_TO_BUF("   Host          %s\n", inet_ntoa(ih->host.v4));
       ih = ih->next;
     }
   while(ie)
     {
-      in4.s_addr = ie->net.v4;
-      WRITE_TO_BUF("   Net           %s ", inet_ntoa(in4));
-      in4.s_addr = ie->mask.v4;
-      WRITE_TO_BUF("%s\n", inet_ntoa(in4));
+      WRITE_TO_BUF("   Net           %s ", inet_ntoa(ie->net.v4));
+      WRITE_TO_BUF("%s\n", inet_ntoa(ie->mask.v4));
       ie = ie->next;
     }
 
@@ -532,10 +522,9 @@ olsrd_write_cnf_buf(struct olsrd_config *cnf, char *buf, olsr_u32_t bufsize)
             WRITE_TO_BUF("    # IPv4 broadcast address to use. The\n    # one usefull example would be 255.255.255.255\n    # If not defined the broadcastaddress\n    # every card is configured with is used\n\n");
 
 
-         if(in->cnf->ipv4_broadcast.v4)
+         if(in->cnf->ipv4_broadcast.v4.s_addr)
            {
-             in4.s_addr = in->cnf->ipv4_broadcast.v4;
-             WRITE_TO_BUF("    Ip4Broadcast\t %s\n", inet_ntoa(in4));
+             WRITE_TO_BUF("    Ip4Broadcast\t %s\n", inet_ntoa(in->cnf->ipv4_broadcast.v4));
            }
          else
            {
index 570d3f6..a49b1e3 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.60 2007/11/05 15:32:54 bernd67 Exp $
+ * $Id: olsrd_conf.c,v 1.61 2007/11/08 22:47:42 bernd67 Exp $
  */
 
 
@@ -52,6 +52,7 @@
 #include "olsrd_conf.h"
 #include "olsr_cfg.h"
 #include "defs.h"
+#include "net_olsr.h"
 
 
 extern FILE *yyin;
@@ -520,7 +521,6 @@ olsrd_print_cnf(struct olsrd_config *cnf)
   struct ipc_net           *ie = cnf->ipc_nets;
   struct olsr_lq_mult      *mult;
   char ipv6_buf[100];             /* buffer for IPv6 inet_htop */
-  struct in_addr in4;
 
   printf(" *** olsrd configuration ***\n");
 
@@ -544,17 +544,14 @@ olsrd_print_cnf(struct olsrd_config *cnf)
 
   while(ih)
     {
-      in4.s_addr = ih->host.v4;
-      printf("\tHost %s\n", inet_ntoa(in4));
+      printf("\tHost %s\n", inet_ntoa(ih->host.v4));
       ih = ih->next;
     }
   
   while(ie)
     {
-      in4.s_addr = ie->net.v4;
-      printf("\tNet %s/", inet_ntoa(in4));
-      in4.s_addr = ie->mask.v4;
-      printf("%s\n", inet_ntoa(in4));
+      printf("\tNet %s/", inet_ntoa(ie->net.v4));
+      printf("%s\n", inet_ntoa(ie->mask.v4));
       ie = ie->next;
     }
 
@@ -585,10 +582,9 @@ olsrd_print_cnf(struct olsrd_config *cnf)
        {
          printf(" dev: \"%s\"\n", in->name);
          
-         if(in->cnf->ipv4_broadcast.v4)
+         if(in->cnf->ipv4_broadcast.v4.s_addr)
            {
-             in4.s_addr = in->cnf->ipv4_broadcast.v4;
-             printf("\tIPv4 broadcast           : %s\n", inet_ntoa(in4));
+             printf("\tIPv4 broadcast           : %s\n", inet_ntoa(in->cnf->ipv4_broadcast.v4));
            }
          else
            {
@@ -599,8 +595,8 @@ olsrd_print_cnf(struct olsrd_config *cnf)
          
          //union olsr_ip_addr       ipv6_multi_site;
          //union olsr_ip_addr       ipv6_multi_glbl;
-         printf("\tIPv6 multicast site/glbl : %s", (char *)inet_ntop(AF_INET6, &in->cnf->ipv6_multi_site.v6, ipv6_buf, sizeof(ipv6_buf)));
-         printf("/%s\n", (char *)inet_ntop(AF_INET6, &in->cnf->ipv6_multi_glbl.v6, ipv6_buf, sizeof(ipv6_buf)));
+         printf("\tIPv6 multicast site/glbl : %s", inet_ntop(AF_INET6, &in->cnf->ipv6_multi_site.v6, ipv6_buf, sizeof(ipv6_buf)));
+         printf("/%s\n", inet_ntop(AF_INET6, &in->cnf->ipv6_multi_glbl.v6, ipv6_buf, sizeof(ipv6_buf)));
          
          printf("\tHELLO emission/validity  : %0.2f/%0.2f\n", in->cnf->hello_params.emission_interval, in->cnf->hello_params.validity_time);
          printf("\tTC emission/validity     : %0.2f/%0.2f\n", in->cnf->tc_params.emission_interval, in->cnf->tc_params.validity_time);
@@ -609,11 +605,7 @@ olsrd_print_cnf(struct olsrd_config *cnf)
          
           for (mult = in->cnf->lq_mult; mult != NULL; mult = mult->next)
           {
-            inet_ntop(cnf->ip_version, &mult->addr, ipv6_buf,
-                      sizeof (ipv6_buf));
-
-            printf("\tLinkQualityMult          : %s %0.2f\n",
-                   ipv6_buf, mult->val);
+            printf("\tLinkQualityMult          : %s %0.2f\n", inet_ntop(cnf->ip_version, &mult->addr, ipv6_buf, sizeof (ipv6_buf)), mult->val);
           }
 
           printf("\tAutodetetc changes       : %s\n", in->cnf->autodetect_chg ? "yes" : "no");
@@ -646,19 +638,45 @@ olsrd_print_cnf(struct olsrd_config *cnf)
     printf("Not using hysteresis\n");
   }
 
+#if 0
+  /* HNA IPv4 */
+  if(h4)
+    {
+
+      printf("HNA4 entries:\n");
+      while(h4)
+       {
+         printf("\t%s/", inet_ntoa(h4->net.v4));
+         printf("%s\n", inet_ntoa(h4->netmask.v4));
+         h4 = h4->next;
+       }
+    }
+
+  /* HNA IPv6 */
+  if(h6)
+    {
+      printf("HNA6 entries:\n");
+      while(h6)
+       {
+         printf("\t%s/%d\n", inet_ntop(AF_INET6, &h6->net.v6, ipv6_buf, sizeof(ipv6_buf)), h6->prefix_len);
+         h6 = h6->next;
+       }
+#else
   /* 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));
+      struct ipaddr_str buf;
+      printf("\t%s/", olsr_ip_to_string(&buf, &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));
+        printf("%s\n", olsr_ip_to_string(&buf, &ip));
       } else {
         printf("%d\n", h->net.prefix_len);
       }
       h = h->next;
+#endif
     }
   }
 }
index 7f7a7ac..efbba6a 100644 (file)
@@ -38,7 +38,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: oparse.y,v 1.36 2007/11/05 15:32:54 bernd67 Exp $
+ * $Id: oparse.y,v 1.37 2007/11/08 22:47:42 bernd67 Exp $
  */
 
 
@@ -53,6 +53,7 @@
 
 #include "olsrd_conf.h"
 #include "../defs.h"
+#include "../net_olsr.h"
 
 #define PARSER_DEBUG 0
 
@@ -85,7 +86,7 @@ static int lq_mult_helper(YYSTYPE ip_addr_arg, YYSTYPE mult_arg)
 
   memset(&addr, 0, sizeof(addr));
 
-  if(ip_addr_arg != NULL &&
+  if (ip_addr_arg != NULL &&
      inet_pton(olsr_cnf->ip_version, ip_addr_arg->string, &addr) < 0) {
     fprintf(stderr, "Cannot parse IP address %s.\n", ip_addr_arg->string);
     return -1;
@@ -300,19 +301,15 @@ imaxipc: TOK_MAXIPC TOK_INTEGER
 
 ipchost: TOK_HOSTLABEL TOK_IP4_ADDR
 {
-  struct in_addr in;
-  struct ipc_host *ipch;
+  struct ipc_host *ipch = malloc(sizeof(struct ipc_host));
 
   PARSER_DEBUG_PRINTF("\tIPC host: %s\n", $2->string);
   
-  if(inet_aton($2->string, &in) == 0)
-    {
-      fprintf(stderr, "Failed converting IP address IPC %s\n", $2->string);
-      return -1;
-    }
-
-  ipch = malloc(sizeof(*ipch));
-  ipch->host.v4 = in.s_addr;
+  if (inet_aton($2->string, &ipch->host.v4) == 0) {
+    fprintf(stderr, "Failed converting IP address IPC %s\n", $2->string);
+    free(ipch);
+    return -1;
+  }
 
   ipch->next = olsr_cnf->ipc_hosts;
   olsr_cnf->ipc_hosts = ipch;
@@ -325,26 +322,20 @@ ipchost: TOK_HOSTLABEL TOK_IP4_ADDR
 
 ipcnet: TOK_NETLABEL TOK_IP4_ADDR TOK_IP4_ADDR
 {
-  struct in_addr in1, in2;
-  struct ipc_net *ipcn;
-
+  struct ipc_net *ipcn = malloc(sizeof(struct ipc_net));
   PARSER_DEBUG_PRINTF("\tIPC net: %s/%s\n", $2->string, $3->string);
   
-  if(inet_aton($2->string, &in1) == 0)
-    {
-      fprintf(stderr, "Failed converting IP net IPC %s\n", $2->string);
-      return -1;
-    }
-
-  if(inet_aton($3->string, &in2) == 0)
-    {
-      fprintf(stderr, "Failed converting IP mask IPC %s\n", $3->string);
-      return -1;
-    }
+  if (inet_aton($2->string, &ipcn->net.v4) == 0) {
+    fprintf(stderr, "Failed converting IP net IPC %s\n", $2->string);
+    free(ipcn);
+    return -1;
+  }
 
-  ipcn = malloc(sizeof(*ipcn));
-  ipcn->net.v4 = in1.s_addr;
-  ipcn->mask.v4 = in2.s_addr;
+  if (inet_aton($3->string, &ipcn->mask.v4) == 0) {
+    fprintf(stderr, "Failed converting IP mask IPC %s\n", $3->string);
+    free(ipcn);
+    return -1;
+  }
 
   ipcn->next = olsr_cnf->ipc_nets;
   olsr_cnf->ipc_nets = ipcn;
@@ -364,14 +355,13 @@ iifweight:       TOK_IFWEIGHT TOK_INTEGER
 
   PARSER_DEBUG_PRINTF("Fixed willingness: %d\n", $2->integer);
 
-  while(ifcnt)
-    {
-      ifs->cnf->weight.value = $2->integer;
-      ifs->cnf->weight.fixed = OLSR_TRUE;
+  while (ifcnt) {
+    ifs->cnf->weight.value = $2->integer;
+    ifs->cnf->weight.fixed = OLSR_TRUE;
 
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2);
 }
@@ -385,19 +375,17 @@ isetip4br: TOK_IP4BROADCAST TOK_IP4_ADDR
 
   PARSER_DEBUG_PRINTF("\tIPv4 broadcast: %s\n", $2->string);
 
-  if(inet_aton($2->string, &in) == 0)
-    {
-      fprintf(stderr, "isetip4br: Failed converting IP address %s\n", $2->string);
-      return -1;
-    }
+  if (inet_aton($2->string, &in) == 0) {
+    fprintf(stderr, "isetip4br: Failed converting IP address %s\n", $2->string);
+    return -1;
+  }
 
-  while(ifcnt)
-    {
-      ifs->cnf->ipv4_broadcast.v4 = in.s_addr;
+  while (ifcnt) {
+    ifs->cnf->ipv4_broadcast.v4 = in;
 
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2->string);
   free($2);
@@ -409,26 +397,21 @@ isetip6addrt: TOK_IP6ADDRTYPE TOK_IP6TYPE
   int ifcnt = ifs_in_curr_cfg;
   struct olsr_if *ifs = olsr_cnf->interfaces;
 
-  if($2->boolean)
-    {
-      while(ifcnt)
-       {
-         ifs->cnf->ipv6_addrtype = IPV6_ADDR_SITELOCAL;
+  if ($2->boolean) {
+    while (ifcnt) {
+      ifs->cnf->ipv6_addrtype = IPV6_ADDR_SITELOCAL;
          
-         ifs = ifs->next;
-         ifcnt--;
-       }
+      ifs = ifs->next;
+      ifcnt--;
     }
-  else
-    {
-      while(ifcnt)
-       {
-         ifs->cnf->ipv6_addrtype = 0;
+  } else {
+    while (ifcnt) {
+      ifs->cnf->ipv6_addrtype = 0;
          
-         ifs = ifs->next;
-         ifcnt--;
-       }
+      ifs = ifs->next;
+      ifcnt--;
     }
+  }
 
   free($2);
 }
@@ -442,20 +425,17 @@ isetip6mults: TOK_IP6MULTISITE TOK_IP6_ADDR
 
   PARSER_DEBUG_PRINTF("\tIPv6 site-local multicast: %s\n", $2->string);
 
-  if(inet_pton(AF_INET6, $2->string, &in6) < 0)
-    {
-      fprintf(stderr, "isetip6mults: Failed converting IP address %s\n", $2->string);
-      return -1;
-    }
+  if (inet_pton(AF_INET6, $2->string, &in6) < 0) {
+    fprintf(stderr, "isetip6mults: Failed converting IP address %s\n", $2->string);
+    return -1;
+  }
 
-  while(ifcnt)
-    {
-      ifs->cnf->ipv6_multi_site.v6 = in6;
+  while (ifcnt) {
+    ifs->cnf->ipv6_multi_site.v6 = in6;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
-
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2->string);
   free($2);
@@ -471,20 +451,18 @@ isetip6multg: TOK_IP6MULTIGLOBAL TOK_IP6_ADDR
 
   PARSER_DEBUG_PRINTF("\tIPv6 global multicast: %s\n", $2->string);
 
-  if(inet_pton(AF_INET6, $2->string, &in6) < 0)
-    {
-      fprintf(stderr, "isetip6multg: Failed converting IP address %s\n", $2->string);
-      return -1;
-    }
+  if (inet_pton(AF_INET6, $2->string, &in6) < 0) {
+    fprintf(stderr, "isetip6multg: Failed converting IP address %s\n", $2->string);
+    return -1;
+  }
 
-  while(ifcnt)
-    {
-      memcpy(&ifs->cnf->ipv6_multi_glbl.v6, &in6, sizeof(struct in6_addr));
+  while (ifcnt) {
+    //memcpy(&ifs->cnf->ipv6_multi_glbl.v6, &in6, sizeof(struct in6_addr));
+    ifs->cnf->ipv6_multi_glbl.v6 = in6;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
-
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2->string);
   free($2);
@@ -497,13 +475,12 @@ isethelloint: TOK_HELLOINT TOK_FLOAT
 
   PARSER_DEBUG_PRINTF("\tHELLO interval: %0.2f\n", $2->floating);
 
-  while(ifcnt)
-    {
-      ifs->cnf->hello_params.emission_interval = $2->floating;
+  while (ifcnt) {
+    ifs->cnf->hello_params.emission_interval = $2->floating;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2);
 }
@@ -515,13 +492,12 @@ isethelloval: TOK_HELLOVAL TOK_FLOAT
 
   PARSER_DEBUG_PRINTF("\tHELLO validity: %0.2f\n", $2->floating);
 
-  while(ifcnt)
-    {
-      ifs->cnf->hello_params.validity_time = $2->floating;
+  while (ifcnt) {
+    ifs->cnf->hello_params.validity_time = $2->floating;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2);
 }
@@ -533,13 +509,12 @@ isettcint: TOK_TCINT TOK_FLOAT
 
   PARSER_DEBUG_PRINTF("\tTC interval: %0.2f\n", $2->floating);
 
-  while(ifcnt)
-    {
-      ifs->cnf->tc_params.emission_interval = $2->floating;
+  while (ifcnt) {
+    ifs->cnf->tc_params.emission_interval = $2->floating;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
   free($2);
 }
 ;
@@ -549,13 +524,12 @@ isettcval: TOK_TCVAL TOK_FLOAT
   struct olsr_if *ifs = olsr_cnf->interfaces;
   
   PARSER_DEBUG_PRINTF("\tTC validity: %0.2f\n", $2->floating);
-  while(ifcnt)
-    {
-      ifs->cnf->tc_params.validity_time = $2->floating;
+  while (ifcnt) {
+    ifs->cnf->tc_params.validity_time = $2->floating;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2);
 }
@@ -567,13 +541,12 @@ isetmidint: TOK_MIDINT TOK_FLOAT
 
 
   PARSER_DEBUG_PRINTF("\tMID interval: %0.2f\n", $2->floating);
-  while(ifcnt)
-    {
-      ifs->cnf->mid_params.emission_interval = $2->floating;
+  while (ifcnt) {
+    ifs->cnf->mid_params.emission_interval = $2->floating;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2);
 }
@@ -584,13 +557,12 @@ isetmidval: TOK_MIDVAL TOK_FLOAT
   struct olsr_if *ifs = olsr_cnf->interfaces;
 
   PARSER_DEBUG_PRINTF("\tMID validity: %0.2f\n", $2->floating);
-  while(ifcnt)
-    {
-      ifs->cnf->mid_params.validity_time = $2->floating;
+  while (ifcnt) {
+    ifs->cnf->mid_params.validity_time = $2->floating;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2);
 }
@@ -601,13 +573,12 @@ isethnaint: TOK_HNAINT TOK_FLOAT
   struct olsr_if *ifs = olsr_cnf->interfaces;
   
   PARSER_DEBUG_PRINTF("\tHNA interval: %0.2f\n", $2->floating);
-  while(ifcnt)
-    {
-      ifs->cnf->hna_params.emission_interval = $2->floating;
+  while (ifcnt) {
+    ifs->cnf->hna_params.emission_interval = $2->floating;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2);
 }
@@ -618,13 +589,12 @@ isethnaval: TOK_HNAVAL TOK_FLOAT
   struct olsr_if *ifs = olsr_cnf->interfaces;
 
   PARSER_DEBUG_PRINTF("\tHNA validity: %0.2f\n", $2->floating);
-  while(ifcnt)
-    {
-      ifs->cnf->hna_params.validity_time = $2->floating;
+  while (ifcnt) {
+    ifs->cnf->hna_params.validity_time = $2->floating;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2);
 }
@@ -635,13 +605,12 @@ isetautodetchg: TOK_AUTODETCHG TOK_BOOLEAN
   struct olsr_if *ifs = olsr_cnf->interfaces;
 
   PARSER_DEBUG_PRINTF("\tAutodetect changes: %s\n", $2->boolean ? "YES" : "NO");
-  while(ifcnt)
-    {
-      ifs->cnf->autodetect_chg = $2->boolean;
+  while (ifcnt) {
+    ifs->cnf->autodetect_chg = $2->boolean;
       
-      ifs = ifs->next;
-      ifcnt--;
-    }
+    ifs = ifs->next;
+    ifcnt--;
+  }
 
   free($2);
 }
@@ -649,27 +618,28 @@ isetautodetchg: TOK_AUTODETCHG TOK_BOOLEAN
 
 isetlqmult: TOK_LQ_MULT TOK_DEFAULT TOK_FLOAT
 {
-  if (lq_mult_helper($2, $3) < 0)
+  if (lq_mult_helper($2, $3) < 0) {
     YYABORT;
+  }
 }
 
           | TOK_LQ_MULT TOK_IP4_ADDR TOK_FLOAT
 {
-  if (lq_mult_helper($2, $3) < 0)
+  if (lq_mult_helper($2, $3) < 0) {
     YYABORT;
+  }
 }
 
           | TOK_LQ_MULT TOK_IP6_ADDR TOK_FLOAT
 {
-  if (lq_mult_helper($2, $3) < 0)
+  if (lq_mult_helper($2, $3) < 0) {
     YYABORT;
+  }
 }
-
-          ;
+;
 
 idebug:       TOK_DEBUGLEVEL TOK_INTEGER
 {
-
   olsr_cnf->debug_level = $2->integer;
   PARSER_DEBUG_PRINTF("Debug level: %d\n", olsr_cnf->debug_level);
   free($2);
@@ -679,15 +649,14 @@ idebug:       TOK_DEBUGLEVEL TOK_INTEGER
 
 iipversion:    TOK_IPVERSION TOK_INTEGER
 {
-  if($2->integer == 4)
+  if ($2->integer == 4) {
     olsr_cnf->ip_version = AF_INET;
-  else if($2->integer == 6)
+  } else if ($2->integer == 6) {
     olsr_cnf->ip_version = AF_INET6;
-  else
-    {
-      fprintf(stderr, "IPversion must be 4 or 6!\n");
-      YYABORT;
-    }
+  } else {
+    fprintf(stderr, "IPversion must be 4 or 6!\n");
+    YYABORT;
+  }
 
   PARSER_DEBUG_PRINTF("IpVersion: %d\n", $2->integer);
   free($2);
@@ -698,32 +667,27 @@ iipversion:    TOK_IPVERSION TOK_INTEGER
 ihna4entry:     TOK_IP4_ADDR TOK_IP4_ADDR
 {
   struct local_hna_entry *h = malloc(sizeof(*h));
-  struct in_addr in;
-  union olsr_ip_addr ip_addr;
+  union olsr_ip_addr netmask;
 
   PARSER_DEBUG_PRINTF("HNA IPv4 entry: %s/%s\n", $1->string, $2->string);
 
-  if(h == NULL)
-    {
-      fprintf(stderr, "Out of memory(HNA4)\n");
-      YYABORT;
-    }
+  if (h == NULL) {
+    fprintf(stderr, "Out of memory(HNA4)\n");
+    YYABORT;
+  }
 
-  if(inet_aton($1->string, &in) == 0)
-    {
-      fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", $1->string);
-      return -1;
-    }
-  h->net.prefix.v4 = in.s_addr;
-  if(inet_aton($2->string, &in) == 0)
-    {
-      fprintf(stderr, "ihna4entry: Failed converting IP netmask %s\n", $2->string);
-      return -1;
-    }
-  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;
+  if (inet_aton($1->string, &h->net.prefix.v4) == 0) {
+    fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", $1->string);
+    free(h);
+    return -1;
+  }
+  if (inet_aton($2->string, &netmask.v4) == 0) {
+    fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", $1->string);
+    free(h);
+    return -1;
+  }
+  h->net.prefix_len = olsr_netmask_to_prefix(&netmask);
+  h->net.prefix.v4.s_addr &= netmask.v4.s_addr;
 
   /* Queue */
   h->next = olsr_cnf->hna_entries;
@@ -743,11 +707,10 @@ ihna6entry:     TOK_IP6_ADDR TOK_INTEGER
 
   PARSER_DEBUG_PRINTF("HNA IPv6 entry: %s/%d\n", $1->string, $2->integer);
 
-  if(h == NULL)
-    {
-      fprintf(stderr, "Out of memory(HNA6)\n");
-      YYABORT;
-    }
+  if (h == NULL) {
+    fprintf(stderr, "Out of memory(HNA6)\n");
+    YYABORT;
+  }
 
   if(inet_pton(AF_INET6, $1->string, &h->net.prefix.v6) < 0)
     {
@@ -755,11 +718,11 @@ ihna6entry:     TOK_IP6_ADDR TOK_INTEGER
       return -1;
     }
 
-  if($2->integer > 128)
-    {
-      fprintf(stderr, "ihna6entry: Illegal IPv6 prefix length %d\n", $2->integer);
-      return -1;
-    }
+  if ($2->integer > 128) {
+    fprintf(stderr, "ihna6entry: Illegal IPv6 prefix length %d\n", $2->integer);
+    free(h);
+    return -1;
+  }
 
   h->net.prefix_len = $2->integer;
 
@@ -785,28 +748,24 @@ ifnick: TOK_STRING
 {
   struct olsr_if *in = malloc(sizeof(*in));
   
-  if(in == NULL)
-    {
-      fprintf(stderr, "Out of memory(ADD IF)\n");
-      YYABORT;
-    }
+  if (in == NULL) {
+    fprintf(stderr, "Out of memory(ADD IF)\n");
+    YYABORT;
+  }
 
   in->cnf = get_default_if_config();
 
-  if(in->cnf == NULL)
-    {
-      fprintf(stderr, "Out of memory(ADD IFRULE)\n");
-      YYABORT;
-    }
+  if (in->cnf == NULL) {
+    fprintf(stderr, "Out of memory(ADD IFRULE)\n");
+    YYABORT;
+  }
 
   in->name = $1->string;
 
   /* Queue */
   in->next = olsr_cnf->interfaces;
   olsr_cnf->interfaces = in;
-
   ifs_in_curr_cfg++;
-
   free($1);
 }
 ;
@@ -814,9 +773,7 @@ ifnick: TOK_STRING
 bnoint: TOK_NOINT TOK_BOOLEAN
 {
   PARSER_DEBUG_PRINTF("Noint set to %d\n", $2->boolean);
-
   olsr_cnf->allow_no_interfaces = $2->boolean;
-
   free($2);
 }
 ;
@@ -825,7 +782,6 @@ atos: TOK_TOS TOK_INTEGER
 {
   PARSER_DEBUG_PRINTF("TOS: %d\n", $2->integer);
   olsr_cnf->tos = $2->integer;
-
   free($2);
 
 }
@@ -833,45 +789,29 @@ atos: TOK_TOS TOK_INTEGER
 
 arttable: TOK_RTTABLE TOK_INTEGER
 {
-  if(PARSER_DEBUG) printf("RtTable: %d\n", $2->integer);
+  PARSER_DEBUG_PRINTF("RtTable: %d\n", $2->integer);
   olsr_cnf->rttable = $2->integer;
-
   free($2);
-
 }
 ;
 
 awillingness: TOK_WILLINGNESS TOK_INTEGER
 {
-  olsr_cnf->willingness_auto = OLSR_FALSE;
-
   PARSER_DEBUG_PRINTF("Willingness: %d\n", $2->integer);
+  olsr_cnf->willingness_auto = OLSR_FALSE;
   olsr_cnf->willingness = $2->integer;
-
   free($2);
-
 }
 ;
 
-
-
 busehyst: TOK_USEHYST TOK_BOOLEAN
 {
   olsr_cnf->use_hysteresis = $2->boolean;
-  if(olsr_cnf->use_hysteresis)
-    {
-      PARSER_DEBUG_PRINTF("Hysteresis enabled\n");
-    }
-  else
-    {
-      PARSER_DEBUG_PRINTF("Hysteresis disabled\n");
-    }
+  PARSER_DEBUG_PRINTF("Hysteresis %s\n", olsr_cnf->use_hysteresis ? "enabled" : "disabled");
   free($2);
-
 }
 ;
 
-
 fhystscale: TOK_HYSTSCALE TOK_FLOAT
 {
   olsr_cnf->hysteresis_param.scaling = $2->floating;
@@ -880,7 +820,6 @@ fhystscale: TOK_HYSTSCALE TOK_FLOAT
 }
 ;
 
-
 fhystupper: TOK_HYSTUPPER TOK_FLOAT
 {
   olsr_cnf->hysteresis_param.thr_high = $2->floating;
@@ -889,7 +828,6 @@ fhystupper: TOK_HYSTUPPER TOK_FLOAT
 }
 ;
 
-
 fhystlower: TOK_HYSTLOWER TOK_FLOAT
 {
   olsr_cnf->hysteresis_param.thr_low = $2->floating;
@@ -902,7 +840,6 @@ fpollrate: TOK_POLLRATE TOK_FLOAT
 {
   PARSER_DEBUG_PRINTF("Pollrate %0.2f\n", $2->floating);
   olsr_cnf->pollrate = $2->floating;
-
   free($2);
 }
 ;
@@ -911,7 +848,6 @@ fnicchgspollrt: TOK_NICCHGSPOLLRT TOK_FLOAT
 {
   PARSER_DEBUG_PRINTF("NIC Changes Pollrate %0.2f\n", $2->floating);
   olsr_cnf->nic_chgs_pollrate = $2->floating;
-
   free($2);
 }
 ;
@@ -967,10 +903,8 @@ alq_wsize: TOK_LQ_WSIZE TOK_INTEGER
 
 bclear_screen: TOK_CLEAR_SCREEN TOK_BOOLEAN
 {
-  olsr_cnf->clear_screen = $2->boolean;
-
   PARSER_DEBUG_PRINTF("Clear screen %s\n", olsr_cnf->clear_screen ? "enabled" : "disabled");
-
+  olsr_cnf->clear_screen = $2->boolean;
   free($2);
 }
 ;
@@ -979,14 +913,12 @@ plblock: TOK_PLUGIN TOK_STRING
 {
   struct plugin_entry *pe = malloc(sizeof(*pe));
   
-  if(pe == NULL)
-    {
-      fprintf(stderr, "Out of memory(ADD PL)\n");
-      YYABORT;
-    }
+  if (pe == NULL) {
+    fprintf(stderr, "Out of memory(ADD PL)\n");
+    YYABORT;
+  }
 
   pe->name = $2->string;
-
   pe->params = NULL;
   
   PARSER_DEBUG_PRINTF("Plugin: %s\n", $2->string);
@@ -1003,11 +935,10 @@ plparam: TOK_PLPARAM TOK_STRING TOK_STRING
 {
   struct plugin_param *pp = malloc(sizeof(*pp));
   
-  if(pp == NULL)
-    {
-      fprintf(stderr, "Out of memory(ADD PP)\n");
-      YYABORT;
-    }
+  if (pp == NULL) {
+    fprintf(stderr, "Out of memory(ADD PP)\n");
+    YYABORT;
+  }
   
   PARSER_DEBUG_PRINTF("Plugin param key:\"%s\" val: \"%s\"\n", $2->string, $3->string);
   
index f39e58b..b7e3e65 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: defs.h,v 1.65 2007/10/20 21:07:24 bernd67 Exp $
+ * $Id: defs.h,v 1.66 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 
@@ -56,7 +56,6 @@
 #include <time.h>
 
 #include "olsr_protocol.h"
-#include "net_olsr.h" /* IPaddr -> string conversions is used by everyone */
 #include "olsr_cfg.h"
 
 extern const char olsrd_version[];
@@ -87,7 +86,7 @@ extern FILE *debug_handle;
 #ifdef NODEBUG
 #define OLSR_PRINTF(lvl, format, args...) do { } while(0)
 #else
-#define OLSR_PRINTF(lvl, format, args...) do {                  \
+#define OLSR_PRINTF(lvl, format, args...) do {                    \
     if((olsr_cnf->debug_level >= (lvl)) && debug_handle)          \
       fprintf(debug_handle, (format), ##args);                    \
   } while (0)
index 42f281e..0bdd508 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: duplicate_set.c,v 1.18 2007/11/08 15:34:11 bernd67 Exp $
+ * $Id: duplicate_set.c,v 1.19 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 
@@ -45,6 +45,7 @@
 #include "duplicate_set.h"
 #include "scheduler.h"
 #include "olsr.h"
+#include "net_olsr.h"
 
 /* The duplicate table */
 static struct dup_entry dup_set[HASHSIZE];
@@ -96,7 +97,8 @@ olsr_add_dup_entry(const union olsr_ip_addr *originator, const olsr_u16_t seqno)
   new_dup_entry = olsr_malloc(sizeof(struct dup_entry), "New dup entry");
 
   /* Address */
-  COPY_IP(&new_dup_entry->addr, originator);
+  //COPY_IP(&new_dup_entry->addr, originator);
+  new_dup_entry->addr = *originator;
   /* Seqno */
   new_dup_entry->seqno = seqno;
   /* Set timer */
@@ -136,7 +138,7 @@ olsr_check_dup_table_proc(const union olsr_ip_addr *originator, const olsr_u16_t
       tmp_dup_table != &dup_set[hash];
       tmp_dup_table = tmp_dup_table->next)
     {
-      if(COMP_IP(&tmp_dup_table->addr, originator) &&
+      if(ipequal(&tmp_dup_table->addr, originator) &&
         (tmp_dup_table->seqno == seqno))
        {
          return 0;
@@ -167,7 +169,7 @@ olsr_check_dup_table_fwd(const union olsr_ip_addr *originator,
       tmp_dup_table != &dup_set[hash];
       tmp_dup_table = tmp_dup_table->next)
     {
-      if(COMP_IP(&tmp_dup_table->addr, originator) &&
+      if(ipequal(&tmp_dup_table->addr, originator) &&
         (tmp_dup_table->seqno == seqno))
        {
          struct dup_iface *tmp_dup_iface;
@@ -178,7 +180,7 @@ olsr_check_dup_table_fwd(const union olsr_ip_addr *originator,
          tmp_dup_iface = tmp_dup_table->ifaces;
          while(tmp_dup_iface)
            {
-             if(COMP_IP(&tmp_dup_iface->addr, int_addr))
+             if(ipequal(&tmp_dup_iface->addr, int_addr))
                return 0;
              
              tmp_dup_iface = tmp_dup_iface->next;
@@ -235,8 +237,11 @@ olsr_time_out_duplicate_table(void *foo __attribute__((unused)))
            {
              struct dup_entry *entry_to_delete = tmp_dup_table;
 #ifdef DEBUG
+#ifndef NODEBUG
+              struct ipaddr_str buf;
+#endif
              OLSR_PRINTF(5, "DUP TIMEOUT[%s] s: %d\n", 
-                         olsr_ip_to_string(&tmp_dup_table->addr),
+                         olsr_ip_to_string(&buf, &tmp_dup_table->addr),
                          tmp_dup_table->seqno);
 #endif
              tmp_dup_table = tmp_dup_table->next;
@@ -269,7 +274,7 @@ olsr_update_dup_entry(const union olsr_ip_addr *originator,
       tmp_dup_table != &dup_set[hash];
       tmp_dup_table = tmp_dup_table->next)
     {
-      if(COMP_IP(&tmp_dup_table->addr, originator) &&
+      if(ipequal(&tmp_dup_table->addr, originator) &&
         (tmp_dup_table->seqno == seqno))
        {
          break;
@@ -285,7 +290,8 @@ olsr_update_dup_entry(const union olsr_ip_addr *originator,
   
   new_iface = olsr_malloc(sizeof(struct dup_iface), "New dup iface");
 
-  COPY_IP(&new_iface->addr, iface);
+  //COPY_IP(&new_iface->addr, iface);
+  new_iface->addr = *iface;
   new_iface->next = tmp_dup_table->ifaces;
   tmp_dup_table->ifaces = new_iface;
   
@@ -299,6 +305,9 @@ int
 olsr_set_dup_forward(const union olsr_ip_addr *originator, 
                     const olsr_u16_t seqno)
 {
+#if !defined(NODEBUG) && defined(DEBUG)
+  struct ipaddr_str buf;
+#endif
   olsr_u32_t hash;
   struct dup_entry *tmp_dup_table;
 
@@ -310,7 +319,7 @@ olsr_set_dup_forward(const union olsr_ip_addr *originator,
       tmp_dup_table != &dup_set[hash];
       tmp_dup_table = tmp_dup_table->next)
     {
-      if(COMP_IP(&tmp_dup_table->addr, originator) &&
+      if(ipequal(&tmp_dup_table->addr, originator) &&
         (tmp_dup_table->seqno == seqno))
        {
          break;
@@ -322,7 +331,7 @@ olsr_set_dup_forward(const union olsr_ip_addr *originator,
     return 0;
   
 #ifdef DEBUG
-  OLSR_PRINTF(3, "Setting DUP %s/%d forwarded\n", olsr_ip_to_string(&tmp_dup_table->addr), seqno);
+  OLSR_PRINTF(3, "Setting DUP %s/%d forwarded\n", olsr_ip_to_string(&buf, &tmp_dup_table->addr), seqno);
 #endif
 
   /* Set forwarded */
@@ -348,8 +357,9 @@ olsr_print_duplicate_table(void)
       //printf("Timeout %d %d\n", i, j);
       while(tmp_dup_table != &dup_set[i])
        {
-         printf("[%s] s: %d\n", 
-                olsr_ip_to_string(&tmp_dup_table->addr),
+          struct ipaddr_str buf;
+          printf("[%s] s: %d\n", 
+                olsr_ip_to_string(&buf, &tmp_dup_table->addr),
                 tmp_dup_table->seqno);
          tmp_dup_table = tmp_dup_table->next;
        }
index e19896c..4f6785b 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: generate_msg.c,v 1.25 2007/04/20 13:46:04 bernd67 Exp $
+ * $Id: generate_msg.c,v 1.26 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include "generate_msg.h"
@@ -56,6 +56,7 @@
 #include "neighbor_table.h"
 #include "link_set.h"
 #include "two_hop_neighbor_table.h"
+#include "net_olsr.h"
 
 
 static char pulsedata[] = {'\\', '|', '/', '-'};
index 82e2200..5760e44 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: hna_set.c,v 1.23 2007/10/21 20:37:58 bernd67 Exp $
+ * $Id: hna_set.c,v 1.24 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include "defs.h"
 #include "olsr.h"
 #include "scheduler.h"
+#include "net_olsr.h"
 
 
 struct hna_entry hna_set[HASHSIZE];
@@ -111,7 +112,7 @@ olsr_lookup_hna_net(const struct hna_net *nets, const union olsr_ip_addr *net, c
       tmp_net != nets;
       tmp_net = tmp_net->next)
     { 
-      if(COMP_IP(&tmp_net->A_network_addr, net) &&
+      if(ipequal(&tmp_net->A_network_addr, net) &&
         (memcmp(&tmp_net->A_netmask, mask, netmask_size) == 0))
        return tmp_net;
     }
@@ -141,7 +142,7 @@ olsr_lookup_hna_gw(const union olsr_ip_addr *gw)
       tmp_hna != &hna_set[hash];
       tmp_hna = tmp_hna->next)
     {
-      if(COMP_IP(&tmp_hna->A_gateway_addr, gw))
+      if(ipequal(&tmp_hna->A_gateway_addr, gw))
        return tmp_hna;
     }
   
@@ -167,7 +168,8 @@ olsr_add_hna_entry(const union olsr_ip_addr *addr)
   new_entry = olsr_malloc(sizeof(struct hna_entry), "New HNA entry");
 
   /* Fill struct */
-  COPY_IP(&new_entry->A_gateway_addr, addr);
+  //COPY_IP(&new_entry->A_gateway_addr, addr);
+  new_entry->A_gateway_addr = *addr;
 
   /* Link nets */
   new_entry->networks.next = &new_entry->networks;
@@ -204,8 +206,10 @@ olsr_add_hna_net(struct hna_entry *hna_gw, const union olsr_ip_addr *net, const
   struct hna_net *new_net = olsr_malloc(sizeof(struct hna_net), "Add HNA net");
   
   /* Fill struct */
-  COPY_IP(&new_net->A_network_addr, net);
-  memcpy(&new_net->A_netmask, mask, netmask_size);
+  //COPY_IP(&new_net->A_network_addr, net);
+  new_net->A_network_addr = *net;
+  //memcpy(&new_net->A_netmask, mask, netmask_size);
+  new_net->A_netmask = *mask;
 
   /* Queue */
   hna_gw->networks.next->prev = new_net;
@@ -322,6 +326,8 @@ olsr_time_out_hna_set(void *foo __attribute__((unused)))
 void
 olsr_print_hna_set(void)
 {
+#ifdef NODEBUG
+  /* The whole function doesn't do anything else. */
   int idx;
 
   OLSR_PRINTF(1, "\n--- %02d:%02d:%02d.%02d ------------------------------------------------- HNA SET\n\n",
@@ -348,14 +354,22 @@ olsr_print_hna_set(void)
            {
              if(olsr_cnf->ip_version == AF_INET)
                {
-                 OLSR_PRINTF(1, "%-15s ", olsr_ip_to_string(&tmp_net->A_network_addr));
-                 OLSR_PRINTF(1, "%-15s ", olsr_ip_to_string((union olsr_ip_addr *)&tmp_net->A_netmask.v4));
-                 OLSR_PRINTF(1, "%-15s\n", olsr_ip_to_string(&tmp_hna->A_gateway_addr));
+#ifndef NODEBUG
+                  struct ipaddr_str buf;
+#endif
+                  struct in_addr a;
+                 OLSR_PRINTF(1, "%-15s ", olsr_ip_to_string(&buf, &tmp_net->A_network_addr));
+                  a.s_addr = tmp_net->A_netmask.v4; /* Ugly! */
+                 OLSR_PRINTF(1, "%-15s ", ip4_to_string(&buf, a));
+                 OLSR_PRINTF(1, "%-15s\n", olsr_ip_to_string(&buf, &tmp_hna->A_gateway_addr));
                }
              else
                {
-                 OLSR_PRINTF(1, "%-27s/%d", olsr_ip_to_string(&tmp_net->A_network_addr), tmp_net->A_netmask.v6);
-                 OLSR_PRINTF(1, "%s\n", olsr_ip_to_string(&tmp_hna->A_gateway_addr));
+#ifndef NODEBUG
+                  struct ipaddr_str buf;
+#endif
+                 OLSR_PRINTF(1, "%-27s/%d", olsr_ip_to_string(&buf, &tmp_net->A_network_addr), tmp_net->A_netmask.v6);
+                 OLSR_PRINTF(1, "%s\n", olsr_ip_to_string(&buf, &tmp_hna->A_gateway_addr));
                }
 
              tmp_net = tmp_net->next;
@@ -363,7 +377,7 @@ olsr_print_hna_set(void)
          tmp_hna = tmp_hna->next;
        }
     }
-
+#endif
 }
 
 /*
index a868156..9c02d83 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: hysteresis.c,v 1.21 2007/08/02 22:07:19 bernd67 Exp $
+ * $Id: hysteresis.c,v 1.22 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 
@@ -46,6 +46,7 @@
 #include "hysteresis.h"
 #include "defs.h"
 #include "olsr.h"
+#include "net_olsr.h"
 
 #define hscaling olsr_cnf->hysteresis_param.scaling
 #define hhigh    olsr_cnf->hysteresis_param.thr_high
@@ -77,8 +78,11 @@ olsr_process_hysteresis(struct link_entry *entry)
     {
       if(entry->L_link_pending == 1)
        {
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+#endif
          OLSR_PRINTF(1, "HYST[%s] link set to NOT pending!\n", 
-                     olsr_ip_to_string(&entry->neighbor_iface_addr));
+                     olsr_ip_to_string(&buf, &entry->neighbor_iface_addr));
          changes_neighborhood = OLSR_TRUE;
        }
 
@@ -98,8 +102,11 @@ olsr_process_hysteresis(struct link_entry *entry)
     {
       if(entry->L_link_pending == 0)
        {
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+#endif
          OLSR_PRINTF(1, "HYST[%s] link set to pending!\n", 
-                     olsr_ip_to_string(&entry->neighbor_iface_addr));
+                     olsr_ip_to_string(&buf, &entry->neighbor_iface_addr));
          changes_neighborhood = OLSR_TRUE;
        }
       
@@ -147,9 +154,10 @@ olsr_process_hysteresis(struct link_entry *entry)
 void
 olsr_update_hysteresis_hello(struct link_entry *entry, double htime)
 {
-#ifdef DEBUG
-  OLSR_PRINTF(3, "HYST[%s]: HELLO update vtime %f\n", olsr_ip_to_string(&entry->neighbor_iface_addr), htime*1.5);
+#ifndef NODEBUG
+  struct ipaddr_str buf;
 #endif
+  OLSR_PRINTF(3, "HYST[%s]: HELLO update vtime %f\n", olsr_ip_to_string(&buf, &entry->neighbor_iface_addr), htime*1.5);
   /* hello timeout = current time + hint time */
   /* SET TIMER TO 1.5 TIMES THE INTERVAL */
   /* Update timer */
@@ -166,12 +174,15 @@ update_hysteresis_incoming(union olsr_ip_addr *remote, struct interface *local,
 {
   struct link_entry *lnk = lookup_link_entry(remote, NULL, local);
 
-  /* Calculate new quality */      
+  /* Calculate new quality */
   if(lnk != NULL)
     {
+#if !defined(NODEBUG) && defined(DEBUG)
+      struct ipaddr_str buf;
+#endif
       lnk->L_link_quality = olsr_hyst_calc_stability(lnk->L_link_quality);
 #ifdef DEBUG
-      OLSR_PRINTF(3, "HYST[%s]: %0.3f\n", olsr_ip_to_string(remote), lnk->L_link_quality);
+      OLSR_PRINTF(3, "HYST[%s]: %0.3f\n", olsr_ip_to_string(&buf, remote), lnk->L_link_quality);
 #endif
 
       /* 
@@ -188,7 +199,7 @@ update_hysteresis_incoming(union olsr_ip_addr *remote, struct interface *local,
              lnk->L_link_quality = olsr_hyst_calc_instability(lnk->L_link_quality);
 #ifdef DEBUG
              OLSR_PRINTF(5, "HYST[%s] PACKET LOSS! %0.3f\n",
-                         olsr_ip_to_string(remote), lnk->L_link_quality);
+                         olsr_ip_to_string(&buf, remote), lnk->L_link_quality);
 #endif
              if(lnk->L_link_quality < olsr_cnf->hysteresis_param.thr_low)
                break;
index 8a892af..5e3cdec 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: interfaces.c,v 1.35 2007/10/13 12:09:11 bernd67 Exp $
+ * $Id: interfaces.c,v 1.36 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -44,6 +44,7 @@
 #include "ifnet.h"
 #include "scheduler.h"
 #include "olsr.h"
+#include "net_olsr.h"
 
 static olsr_u32_t if_property_id;
 
@@ -226,7 +227,7 @@ run_ifchg_cbs(struct interface *ifp, int flag)
  */
 
 struct interface *
-if_ifwithaddr(const union olsr_ip_addr * const addr)
+if_ifwithaddr(const union olsr_ip_addr *addr)
 {
   struct interface *ifp;
 
@@ -241,7 +242,7 @@ if_ifwithaddr(const union olsr_ip_addr * const addr)
          //printf("Checking: %s == ", inet_ntoa(((struct sockaddr_in *)&ifp->int_addr)->sin_addr));
          //printf("%s\n", olsr_ip_to_string(addr));
 
-         if (COMP_IP(&((struct sockaddr_in *)&ifp->int_addr)->sin_addr, addr))
+         if (((struct sockaddr_in *)&ifp->int_addr)->sin_addr.s_addr == addr->v4.s_addr)
              return ifp;
        }
       else
@@ -249,7 +250,7 @@ if_ifwithaddr(const union olsr_ip_addr * const addr)
          /* IPv6 */
          //printf("Checking %s ", olsr_ip_to_string((union olsr_ip_addr *)&ifp->int6_addr.sin6_addr));
          //printf("== %s\n", olsr_ip_to_string((union olsr_ip_addr *)&((struct sockaddr_in6 *)addr)->sin6_addr));
-         if (COMP_IP(&ifp->int6_addr.sin6_addr, addr))
+          if (ip6equal(&ifp->int6_addr.sin6_addr, &addr->v6))
            return ifp;
        }
     }
index f6febce..043c707 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: interfaces.h,v 1.43 2007/10/13 12:09:11 bernd67 Exp $
+ * $Id: interfaces.h,v 1.44 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 
@@ -121,14 +121,14 @@ struct olsr_netbuf
 
 /**
  *A struct containing all necessary information about each
- *interface participating in the OLSD routing
+ *interface participating in the OLSRD routing
  */
 struct interface 
 {
   /* IP version 4 */
-  struct       sockaddr int_addr;              /* address */
-  struct       sockaddr int_netmask;           /* netmask */
-  struct       sockaddr int_broadaddr;         /* broadcast address */
+  struct       sockaddr_in int_addr;           /* address */
+  struct       sockaddr_in int_netmask;                /* netmask */
+  struct       sockaddr_in int_broadaddr;         /* broadcast address */
   /* IP version 6 */
   struct        sockaddr_in6 int6_addr;         /* Address */
   struct        sockaddr_in6 int6_multaddr;     /* Multicast */
index c3b026b..7eed2d7 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.37 2007/11/05 15:32:55 bernd67 Exp $
+ * $Id: ipc_frontend.c,v 1.38 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 /*
@@ -53,6 +53,7 @@
 #include "parser.h"
 #include "socket_parser.h"
 #include "local_hna_set.h"
+#include "net_olsr.h"
 
 #ifdef WIN32
 #define close(x) closesocket(x)
@@ -176,18 +177,18 @@ ipc_accept(int fd)
 }
 
 olsr_bool
-ipc_check_allowed_ip(union olsr_ip_addr *addr)
+ipc_check_allowed_ip(const union olsr_ip_addr *addr)
 {
   struct ipc_host *ipch = olsr_cnf->ipc_hosts;
   struct ipc_net *ipcn = olsr_cnf->ipc_nets;
 
-  if(addr->v4 == ntohl(INADDR_LOOPBACK))
+  if(addr->v4.s_addr == ntohl(INADDR_LOOPBACK))
     return OLSR_TRUE;
 
   /* check hosts */
   while(ipch)
     {
-      if(addr->v4 == ipch->host.v4)
+        if(ipequal(addr, &ipch->host))
        return OLSR_TRUE;
       ipch = ipch->next;
     }
@@ -195,7 +196,7 @@ ipc_check_allowed_ip(union olsr_ip_addr *addr)
   /* check nets */
   while(ipcn)
     {
-      if((addr->v4 & ipcn->mask.v4) == (ipcn->net.v4 & ipcn->mask.v4))
+      if((addr->v4.s_addr & ipcn->mask.v4.s_addr) == (ipcn->net.v4.s_addr & ipcn->mask.v4.s_addr))
        return OLSR_TRUE;
       ipcn = ipcn->next;
     }
@@ -217,7 +218,7 @@ ipc_input(int sock __attribute__((unused)))
   union 
   {
     char       buf[MAXPACKETSIZE+1];
-    struct     olsr olsr;
+    struct olsr        olsr;
   } inbuf;
 
 
@@ -270,8 +271,11 @@ frontend_msgparser(union olsr_message *msg, struct interface *in_if __attribute_
  *@return negative on error
  */
 int
-ipc_route_send_rtentry(union olsr_ip_addr *dst, union olsr_ip_addr *gw,
-                       int met, int add, const char *int_name)
+ipc_route_send_rtentry(union olsr_ip_addr *dst,
+                       union olsr_ip_addr *gw,
+                       int met,
+                       int add,
+                       const char *int_name)
 {
   struct ipcmsg packet;
   char *tmp;
@@ -287,13 +291,15 @@ ipc_route_send_rtentry(union olsr_ip_addr *dst, union olsr_ip_addr *gw,
   packet.size = htons(IPC_PACK_SIZE);
   packet.msgtype = ROUTE_IPC;
 
-  COPY_IP(&packet.target_addr, dst);
+  //COPY_IP(&packet.target_addr, dst);
+  packet.target_addr = *dst;
 
   packet.add = add;
   if(add && gw)
     {
       packet.metric = met;
-      COPY_IP(&packet.gateway_addr, gw);
+      //COPY_IP(&packet.gateway_addr, gw);
+      packet.gateway_addr = *gw;
     }
 
   if(int_name != NULL)
@@ -351,12 +357,14 @@ ipc_send_all_routes(int fd)
     packet.size = htons(IPC_PACK_SIZE);
     packet.msgtype = ROUTE_IPC;
          
-    COPY_IP(&packet.target_addr, &rt->rt_dst.prefix);
-         
+    //COPY_IP(&packet.target_addr, &rt->rt_dst.prefix);
+    packet.target_addr = rt->rt_dst.prefix;
+
     packet.add = 1;
     packet.metric = (olsr_u8_t)(rt->rt_best->rtp_metric.hops);
 
-    COPY_IP(&packet.gateway_addr, &rt->rt_nexthop.gateway);
+    //COPY_IP(&packet.gateway_addr, &rt->rt_nexthop.gateway);
+    packet.gateway_addr = rt->rt_nexthop.gateway;
 
     memcpy(&packet.device[0], if_ifwithindex_name(rt->rt_nexthop.iif_index), 4);
 
@@ -422,8 +430,8 @@ ipc_send_net_info(int fd)
   net_msg->ipv6 = olsr_cnf->ip_version == AF_INET ? 0 : 1;
  
   /* Main addr */
-  COPY_IP(&net_msg->main_addr, &olsr_cnf->main_addr);
-
+  //COPY_IP(&net_msg->main_addr, &olsr_cnf->main_addr);
+  net_msg->main_addr = olsr_cnf->main_addr;
 
   /*
   printf("\t");
index 4ceef59..8a80d11 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: ipc_frontend.h,v 1.15 2007/10/13 12:31:04 bernd67 Exp $
+ * $Id: ipc_frontend.h,v 1.16 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 /*
@@ -99,7 +99,7 @@ struct ipc_net_msg
 
 
 olsr_bool
-ipc_check_allowed_ip(union olsr_ip_addr *);
+ipc_check_allowed_ip(const union olsr_ip_addr *);
 
 void
 ipc_accept(int);
index 15fca85..e8b424b 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: link_set.c,v 1.76 2007/11/02 20:58:06 bernd67 Exp $
+ * $Id: link_set.c,v 1.77 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 
@@ -53,6 +53,7 @@
 #include "olsr.h"
 #include "scheduler.h"
 #include "lq_route.h"
+#include "net_olsr.h"
 
 
 static clock_t hold_time_neighbor;
@@ -144,8 +145,9 @@ lookup_link_status(const struct link_entry *entry)
       */
       if(entry->L_link_pending == 1)
        {
-#ifdef DEBUG
-         OLSR_PRINTF(3, "HYST[%s]: Setting to HIDE\n", olsr_ip_to_string(&entry->neighbor_iface_addr));
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+         OLSR_PRINTF(3, "HYST[%s]: Setting to HIDE\n", olsr_ip_to_string(&buf, &entry->neighbor_iface_addr));
 #endif
          return HIDE_LINK;
        }
@@ -261,7 +263,7 @@ get_best_link_to_neighbor(const union olsr_ip_addr *remote)
   {
     // if this is not a link to the neighour in question, skip
 
-    if (!COMP_IP(&walker->neighbor->neighbor_main_addr, main_addr))
+    if (!ipequal(&walker->neighbor->neighbor_main_addr, main_addr))
       continue;
 
     // handle the non-LQ, RFC-compliant case
@@ -283,7 +285,7 @@ get_best_link_to_neighbor(const union olsr_ip_addr *remote)
       if ((tmp_if->int_metric < curr_metric) ||
           // use the requested remote interface address as a tie-breaker
           ((tmp_if->int_metric == curr_metric) && 
-           COMP_IP(&walker->local_iface_addr, remote)))
+           ipequal(&walker->local_iface_addr, remote)))
       {
         // memorize the interface's metric
 
@@ -314,7 +316,7 @@ get_best_link_to_neighbor(const union olsr_ip_addr *remote)
              
       if((tmp_lq > curr_lq) ||
          // use the requested remote interface address as a tie-breaker
-         ((tmp_lq == curr_lq) && COMP_IP(&walker->local_iface_addr, remote)))
+         ((tmp_lq == curr_lq) && ipequal(&walker->local_iface_addr, remote)))
       {
         // memorize the link quality
 
@@ -367,8 +369,8 @@ static void set_loss_link_multiplier(struct link_entry *entry)
     // use the default multiplier only if there isn't any entry that
     // has a matching IP address
 
-    if ((COMP_IP(&mult->addr, &null_addr) && val < 0.0) ||
-        COMP_IP(&mult->addr, &entry->neighbor_iface_addr))
+    if ((ipequal(&mult->addr, &null_addr) && val < 0.0) ||
+        ipequal(&mult->addr, &entry->neighbor_iface_addr))
       val = mult->val;
   }
 
@@ -402,7 +404,7 @@ del_if_link_entries(const union olsr_ip_addr *int_addr)
   while(tmp_link_set)
     {
 
-      if(COMP_IP(int_addr, &tmp_link_set->local_iface_addr))
+      if(ipequal(int_addr, &tmp_link_set->local_iface_addr))
         {
           if(last_link_entry != NULL)
             {
@@ -477,7 +479,12 @@ add_link_entry(const union olsr_ip_addr *local,
    */
 
 #ifdef DEBUG
-  OLSR_PRINTF(1, "Adding %s=>%s to link set\n", olsr_ip_to_string(local), olsr_ip_to_string(remote));
+  {
+#ifndef NODEBUG
+    struct ipaddr_str localbuf, rembuf;
+#endif
+    OLSR_PRINTF(1, "Adding %s=>%s to link set\n", olsr_ip_to_string(&localbuf, local), olsr_ip_to_string(&rembuf, remote));
+  }
 #endif
 
   /* a new tuple is created with... */
@@ -499,9 +506,11 @@ add_link_entry(const union olsr_ip_addr *local,
    * which received the HELLO message
    */
   //printf("\tLocal IF: %s\n", olsr_ip_to_string(local));
-  COPY_IP(&new_link->local_iface_addr, local);
+  //COPY_IP(&new_link->local_iface_addr, local);
+  new_link->local_iface_addr = *local;
   /* L_neighbor_iface_addr = Source Address */
-  COPY_IP(&new_link->neighbor_iface_addr, remote);
+  //COPY_IP(&new_link->neighbor_iface_addr, remote);
+  new_link->neighbor_iface_addr = *remote;
 
   /* L_SYM_time            = current time - 1 (expired) */
   new_link->SYM_time = now_times - 1;
@@ -563,12 +572,16 @@ add_link_entry(const union olsr_ip_addr *local,
    */
 
   /* Neighbor MUST exist! */
-  if(NULL == (neighbor = olsr_lookup_neighbor_table(remote_main)))
+  neighbor = olsr_lookup_neighbor_table(remote_main);
+  if(neighbor == NULL)
     {
-      neighbor = olsr_insert_neighbor_table(remote_main);
 #ifdef DEBUG
-      OLSR_PRINTF(3, "ADDING NEW NEIGHBOR ENTRY %s FROM LINK SET\n", olsr_ip_to_string(remote_main));
+#ifndef NODEBUG
+      struct ipaddr_str buf;
+#endif
+      OLSR_PRINTF(3, "ADDING NEW NEIGHBOR ENTRY %s FROM LINK SET\n", olsr_ip_to_string(&buf, remote_main));
 #endif
+      neighbor = olsr_insert_neighbor_table(remote_main);
     }
 
   /* Copy the main address - make sure this is done every time
@@ -585,7 +598,7 @@ add_link_entry(const union olsr_ip_addr *local,
 
   new_link->neighbor = neighbor;
 
-  if(!COMP_IP(remote, remote_main))
+  if(!ipequal(remote, remote_main))
     {
       /* Add MID alias if not already registered */
       /* This is kind of sketchy... and not specified
@@ -625,7 +638,7 @@ check_neighbor_link(const union olsr_ip_addr *int_addr)
 
   while(tmp_link_set)
     {
-      if(COMP_IP(int_addr, &tmp_link_set->neighbor_iface_addr))
+      if(ipequal(int_addr, &tmp_link_set->neighbor_iface_addr))
        return lookup_link_status(tmp_link_set);
       tmp_link_set = tmp_link_set->next;
     }
@@ -651,13 +664,13 @@ lookup_link_entry(const union olsr_ip_addr *remote, const union olsr_ip_addr *re
 
   while(tmp_link_set)
     {
-      if(COMP_IP(remote, &tmp_link_set->neighbor_iface_addr) &&
+      if(ipequal(remote, &tmp_link_set->neighbor_iface_addr) &&
         (tmp_link_set->if_name
           ? !strcmp(tmp_link_set->if_name, local->int_name)
-          : COMP_IP(&local->ip_addr, &tmp_link_set->local_iface_addr)
+          : ipequal(&local->ip_addr, &tmp_link_set->local_iface_addr)
           ) &&
          /* check the remote-main address only if there is one given */
-         (remote_main == NULL || COMP_IP(remote_main, &tmp_link_set->neighbor->neighbor_main_addr))
+         (remote_main == NULL || ipequal(remote_main, &tmp_link_set->neighbor->neighbor_main_addr))
          )
        return tmp_link_set;
       tmp_link_set = tmp_link_set->next;
@@ -810,7 +823,7 @@ check_link_status(const struct hello_message *message, const struct interface *i
        * Note: If a neigh has 2 cards we can reach, the neigh
        * will send a Hello with the same IP mentined twice
        */
-      if(COMP_IP(&neighbors->address, &in_if->ip_addr))
+      if(ipequal(&neighbors->address, &in_if->ip_addr))
         {
          //printf("ok");
          ret = neighbors->link;
@@ -922,8 +935,11 @@ olsr_time_out_hysteresis(void)
     {
       if(TIMED_OUT(tmp_link_set->hello_timeout))
        {
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+#endif
          tmp_link_set->L_link_quality = olsr_hyst_calc_instability(tmp_link_set->L_link_quality);
-         OLSR_PRINTF(1, "HYST[%s] HELLO timeout %0.3f\n", olsr_ip_to_string(&tmp_link_set->neighbor_iface_addr), tmp_link_set->L_link_quality);
+         OLSR_PRINTF(1, "HYST[%s] HELLO timeout %0.3f\n", olsr_ip_to_string(&buf, &tmp_link_set->neighbor_iface_addr), tmp_link_set->L_link_quality);
          /* Update hello_timeout - NO SLACK THIS TIME */
          tmp_link_set->hello_timeout = GET_TIMESTAMP(tmp_link_set->last_htime*1000);
          /* Recalculate status */
@@ -953,7 +969,7 @@ void olsr_print_link_set(void)
   struct link_entry *walker;
   const int addrsize = olsr_cnf->ip_version == AF_INET ? 15 : 39;
 
-  OLSR_PRINTF(1, "\n--- %02d:%02d:%02d.%02d ---------------------------------------------------- LINKS\n\n",
+  OLSR_PRINTF(0, "\n--- %02d:%02d:%02d.%02d ---------------------------------------------------- LINKS\n\n",
               nowtm->tm_hour,
               nowtm->tm_min,
               nowtm->tm_sec,
@@ -962,6 +978,7 @@ void olsr_print_link_set(void)
 
   for (walker = link_set; walker != NULL; walker = walker->next)
   {
+    struct ipaddr_str buf;
     float etx;
 
     if (walker->loss_link_quality < MIN_LINK_QUALITY || walker->neigh_link_quality < MIN_LINK_QUALITY)
@@ -970,7 +987,7 @@ void olsr_print_link_set(void)
       etx = 1.0 / (walker->loss_link_quality * walker->neigh_link_quality);
 
     OLSR_PRINTF(1, "%-*s  %5.3f  %5.3f  %-3d    %-3d    %5.3f  %.2f\n",
-                addrsize, olsr_ip_to_string(&walker->neighbor_iface_addr),
+                addrsize, olsr_ip_to_string(&buf, &walker->neighbor_iface_addr),
                 walker->L_link_quality,
                 walker->loss_link_quality,
                walker->lost_packets,
index a44b4be..4d3e29f 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: apm.c,v 1.19 2007/10/24 13:44:26 bernd67 Exp $
+ * $Id: apm.c,v 1.20 2007/11/08 22:47:42 bernd67 Exp $
  */
 
 /*
@@ -140,7 +140,7 @@ apm_init(void)
 
 
 void
-apm_printinfo(struct olsr_apm_info *ainfo)
+apm_printinfo(struct olsr_apm_info *ainfo __attribute__((unused)))
 {
   OLSR_PRINTF(5, "APM info:\n\tAC status %d\n\tBattery percentage %d%%\n\tBattery time left %d mins\n\n",
              ainfo->ac_line_status,
@@ -152,15 +152,11 @@ apm_printinfo(struct olsr_apm_info *ainfo)
 int
 apm_read(struct olsr_apm_info *ainfo)
 {
-  switch(method)
-    {
-    case(USE_APM):
-      return apm_read_apm(ainfo);
-    case(USE_ACPI):
-      return apm_read_acpi(ainfo);
-    default:
-      break;
-    }
+  switch(method) {
+  case USE_APM:  return apm_read_apm(ainfo);
+  case USE_ACPI: return apm_read_acpi(ainfo);
+  default:       break;
+  }
   return 0;
 }
 
index 7b3c58c..356d675 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: kernel_routes.c,v 1.29 2007/10/13 12:31:04 bernd67 Exp $
+ * $Id: kernel_routes.c,v 1.30 2007/11/08 22:47:42 bernd67 Exp $
  */
 
 #include "kernel_routes.h"
@@ -104,7 +104,7 @@ static int olsr_netlink_route(struct rt_entry *rt, olsr_u8_t family, olsr_u8_t r
 
        if (AF_INET == family)
        {
-               if (rt->rt_dst.prefix.v4 != nexthop->gateway.v4)
+               if (rt->rt_dst.prefix.v4.s_addr != nexthop->gateway.v4.s_addr)
                {
                        olsr_netlink_addreq(&req, RTA_GATEWAY, &nexthop->gateway.v4, sizeof(nexthop->gateway.v4));
                        req.r.rtm_scope = RT_SCOPE_UNIVERSE;
@@ -190,16 +190,15 @@ olsr_ioctl_add_route(struct rt_entry *rt)
   ((struct sockaddr_in*)&kernel_route.rt_gateway)->sin_family = AF_INET;
   ((struct sockaddr_in*)&kernel_route.rt_genmask)->sin_family = AF_INET;
 
-  ((struct sockaddr_in *)&kernel_route.rt_dst)->sin_addr.s_addr =
-    rt->rt_dst.prefix.v4;
+  ((struct sockaddr_in *)&kernel_route.rt_dst)->sin_addr = rt->rt_dst.prefix.v4;
 
   if (!olsr_prefix_to_netmask(&mask, rt->rt_dst.prefix_len)) {
     return -1;
   }
-  ((struct sockaddr_in *)&kernel_route.rt_genmask)->sin_addr.s_addr = mask.v4;
+  ((struct sockaddr_in *)&kernel_route.rt_genmask)->sin_addr = mask.v4;
 
-  if (rt->rt_dst.prefix.v4 != rt->rt_best->rtp_nexthop.gateway.v4) {
-    ((struct sockaddr_in *)&kernel_route.rt_gateway)->sin_addr.s_addr =
+  if (rt->rt_dst.prefix.v4.s_addr != rt->rt_best->rtp_nexthop.gateway.v4.s_addr) {
+    ((struct sockaddr_in *)&kernel_route.rt_gateway)->sin_addr =
       rt->rt_best->rtp_nexthop.gateway.v4;
   }
 
@@ -213,7 +212,7 @@ olsr_ioctl_add_route(struct rt_entry *rt)
 
   /* delete existing default route before ? */
   if((olsr_cnf->del_gws) &&
-     (rt->rt_dst.prefix.v4 == INADDR_ANY) &&
+     (rt->rt_dst.prefix.v4.s_addr == INADDR_ANY) &&
      (rt->rt_dst.prefix_len == INADDR_ANY)) {
     delete_all_inet_gws();
     olsr_cnf->del_gws = OLSR_FALSE;
@@ -263,10 +262,12 @@ olsr_ioctl_add_route6(struct rt_entry *rt)
 
   memset(&kernel_route, 0, sizeof(struct in6_rtmsg));
 
-  COPY_IP(&kernel_route.rtmsg_dst, &rt->rt_dst.prefix);
+  //COPY_IP(&kernel_route.rtmsg_dst, &rt->rt_dst.prefix);
+  kernel_route.rtmsg_dst     = rt->rt_dst.prefix.v6;
   kernel_route.rtmsg_dst_len = rt->rt_dst.prefix_len;
 
-  COPY_IP(&kernel_route.rtmsg_gateway, &rt->rt_best->rtp_nexthop.gateway);
+  //COPY_IP(&kernel_route.rtmsg_gateway, &rt->rt_best->rtp_nexthop.gateway);
+  kernel_route.rtmsg_gateway = rt->rt_best->rtp_nexthop.gateway.v6;
 
   kernel_route.rtmsg_flags = olsr_rt_flags(rt);
   kernel_route.rtmsg_metric = RT_METRIC_DEFAULT;
@@ -320,18 +321,16 @@ olsr_ioctl_del_route(struct rt_entry *rt)
   ((struct sockaddr_in*)&kernel_route.rt_gateway)->sin_family = AF_INET;
   ((struct sockaddr_in*)&kernel_route.rt_genmask)->sin_family = AF_INET;
 
-  ((struct sockaddr_in *)&kernel_route.rt_dst)->sin_addr.s_addr =
-    rt->rt_dst.prefix.v4;
+  ((struct sockaddr_in *)&kernel_route.rt_dst)->sin_addr = rt->rt_dst.prefix.v4;
 
-  if (rt->rt_dst.prefix.v4 != rt->rt_nexthop.gateway.v4) {
-    ((struct sockaddr_in *)&kernel_route.rt_gateway)->sin_addr.s_addr =
-      rt->rt_nexthop.gateway.v4;
+  if (rt->rt_dst.prefix.v4.s_addr != rt->rt_nexthop.gateway.v4.s_addr) {
+    ((struct sockaddr_in *)&kernel_route.rt_gateway)->sin_addr = rt->rt_nexthop.gateway.v4;
   }
 
   if (!olsr_prefix_to_netmask(&mask, rt->rt_dst.prefix_len)) {
     return -1;
   } else {
-    ((struct sockaddr_in *)&kernel_route.rt_genmask)->sin_addr.s_addr = mask.v4;
+    ((struct sockaddr_in *)&kernel_route.rt_genmask)->sin_addr = mask.v4;
   }
 
   kernel_route.rt_flags = olsr_rt_flags(rt);
@@ -384,10 +383,13 @@ olsr_ioctl_del_route6(struct rt_entry *rt)
 #if !LINUX_POLICY_ROUTING
   memset(&kernel_route,0,sizeof(struct in6_rtmsg));
 
-  COPY_IP(&kernel_route.rtmsg_dst, &rt->rt_dst.prefix);
+
+  //COPY_IP(&kernel_route.rtmsg_dst, &rt->rt_dst.prefix);
+  kernel_route.rtmsg_dst     = rt->rt_dst.prefix.v6;
   kernel_route.rtmsg_dst_len = rt->rt_dst.prefix_len;
 
-  COPY_IP(&kernel_route.rtmsg_gateway, &rt->rt_best->rtp_nexthop.gateway);
+  //COPY_IP(&kernel_route.rtmsg_gateway, &rt->rt_best->rtp_nexthop.gateway);
+  kernel_route.rtmsg_gateway = rt->rt_best->rtp_nexthop.gateway.v6;
 
   kernel_route.rtmsg_flags = olsr_rt_flags(rt);
   kernel_route.rtmsg_metric = RT_METRIC_DEFAULT;
index 91f82f8..67c6f06 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net.c,v 1.34 2007/04/25 22:08:18 bernd67 Exp $
+ * $Id: net.c,v 1.35 2007/11/08 22:47:42 bernd67 Exp $
  */
 
 
@@ -48,6 +48,7 @@
 #include "../defs.h"
 #include "../net_os.h"
 #include "../parser.h"
+#include "../net_olsr.h"
 
 
 /*
@@ -558,14 +559,16 @@ int
 join_mcast(struct interface *ifs, int sock)
 {
   /* See linux/in6.h */
-
+#ifndef NODEBUG
+  struct ipaddr_str buf;
+#endif
   struct ipv6_mreq mcastreq;
 
-  COPY_IP(&mcastreq.ipv6mr_multiaddr, &ifs->int6_multaddr.sin6_addr);
+  mcastreq.ipv6mr_multiaddr = ifs->int6_multaddr.sin6_addr;
   mcastreq.ipv6mr_interface = ifs->if_index;
 
 #if !defined __FreeBSD__ && !defined __MacOSX__ && !defined __NetBSD__
-  OLSR_PRINTF(3, "Interface %s joining multicast %s...",       ifs->int_name, olsr_ip_to_string((union olsr_ip_addr *)&ifs->int6_multaddr.sin6_addr));
+  OLSR_PRINTF(3, "Interface %s joining multicast %s...", ifs->int_name, ip6_to_string(&buf, &ifs->int6_multaddr.sin6_addr));
   /* Send multicast */
   if(setsockopt(sock, 
                IPPROTO_IPV6, 
index 29366eb..405f606 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: local_hna_set.c,v 1.15 2007/11/05 15:32:55 bernd67 Exp $
+ * $Id: local_hna_set.c,v 1.16 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include "defs.h"
 #include "local_hna_set.h"
 #include "olsr.h"
+#include "net_olsr.h"
 
 void
 add_local_hna4_entry(const union olsr_ip_addr *net, const union olsr_ip_addr *mask)
@@ -79,8 +80,8 @@ remove_local_hna4_entry(const union olsr_ip_addr *net, const union olsr_ip_addr
 
   while(h)
     {
-      if((net->v4 == h->net.prefix.v4) && 
-        (mask->v4 == prefix_len))
+      if((net->v4.s_addr == h->net.prefix.v4.s_addr) && 
+        (mask->v4.s_addr == prefix_len))
        {
          /* Dequeue */
          if(prev == NULL)
@@ -128,11 +129,11 @@ struct local_hna_entry *
 find_local_hna4_entry(const union olsr_ip_addr *net, const olsr_u32_t mask)
 {
   struct local_hna_entry *h = olsr_cnf->hna_entries;
-  const union olsr_ip_addr ip_addr = { .v4 = mask };
+  const union olsr_ip_addr ip_addr = { .v4 = { .s_addr = mask } };
   const olsr_u16_t prefix_len = olsr_netmask_to_prefix(&ip_addr);
   while(h)
     {
-      if((net->v4 == h->net.prefix.v4) && 
+      if((net->v4.s_addr == h->net.prefix.v4.s_addr) && 
         (prefix_len == h->net.prefix_len))
        {
          return h;
@@ -173,7 +174,7 @@ check_inet_gw(void)
       struct local_hna_entry *h;
       for(h = olsr_cnf->hna_entries; h != NULL; h = h->next)
        {
-         if(h->net.prefix_len == 0 && h->net.prefix.v4 == 0)
+         if(h->net.prefix_len == 0 && h->net.prefix.v4.s_addr == 0)
            return 1;
        }
     }
index 21894f0..74e279d 100755 (executable)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_avl.c,v 1.13 2007/09/05 16:30:50 bernd67 Exp $
+ * $Id: lq_avl.c,v 1.14 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include <stddef.h>
  * if avl_comp_default is set to zero, a fast
  * inline ipv4 comparison will be executed.
  */
-int (*avl_comp_default)(void *, void *) = NULL;
-int (*avl_comp_prefix_default)(void *, void *);
+int (*avl_comp_default)(const void *, const void *) = NULL;
+int (*avl_comp_prefix_default)(const void *, const void *);
 
-int avl_comp_ipv4(void *ip1, void *ip2)
+int avl_comp_ipv4(const void *ip1, const void *ip2)
 {
-    return(*(unsigned int *)ip1 == *(unsigned int *)ip2 ? 0 : \
-           *(unsigned int *)ip1 < *(unsigned int *)ip2 ? -1 : +1);
+  return inline_avl_comp_ipv4(ip1, ip2);
 }
 
-int avl_comp_ipv6(void *ip1, void *ip2)
+int avl_comp_ipv6(const void *ip1, const void *ip2)
 {
   return memcmp(ip1, ip2, 16);
 }
 
-void avl_init(struct avl_tree *tree, int (*comp)(void *, void *))
+void avl_init(struct avl_tree *tree, int (*comp)(const void *, const void *))
 {
   tree->root = NULL;
   tree->first = NULL;
@@ -78,9 +77,9 @@ void avl_init(struct avl_tree *tree, int (*comp)(void *, void *))
   tree->comp = comp;
 }
 
-static struct avl_node *avl_find_rec_ipv4(struct avl_node *node, void *key)
+static struct avl_node *avl_find_rec_ipv4(struct avl_node *node, const void *key)
 {
-  if (*(unsigned int *)key < *(unsigned int *)node->key)
+  if (*(const unsigned int *)key < *(const unsigned int *)node->key)
   {
     if (node->left != NULL)
       return avl_find_rec_ipv4(node->left, key);
@@ -95,8 +94,8 @@ static struct avl_node *avl_find_rec_ipv4(struct avl_node *node, void *key)
   return node;
 }
 
-static struct avl_node *avl_find_rec(struct avl_node *node, void *key,
-                                     int (*comp)(void *, void *))
+static struct avl_node *avl_find_rec(struct avl_node *node, const void *key,
+                                     int (*comp)(const void *, const void *))
 {
   int diff;
 
@@ -124,7 +123,7 @@ static struct avl_node *avl_find_rec(struct avl_node *node, void *key,
   return node;
 }
 
-struct avl_node *avl_find(struct avl_tree *tree, void *key)
+struct avl_node *avl_find(struct avl_tree *tree, const void *key)
 {
   struct avl_node *node;
 
index ffc6d8c..a73a257 100755 (executable)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_avl.h,v 1.11 2007/09/25 13:47:36 bernd67 Exp $
+ * $Id: lq_avl.h,v 1.12 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #ifndef _LQ_AVL_H
@@ -62,14 +62,14 @@ struct avl_tree
   struct avl_node *first;
   struct avl_node *last;
   unsigned int count;
-  int (*comp)(void *, void *);
+  int (*comp)(const void *, const void *);
 };
 
 #define AVL_DUP    1
 #define AVL_DUP_NO 0
 
-void avl_init(struct avl_tree *, int (*)(void *, void *));
-struct avl_node *avl_find(struct avl_tree *, void *);
+void avl_init(struct avl_tree *, int (*)(const void *, const void *));
+struct avl_node *avl_find(struct avl_tree *, const void *);
 int avl_insert(struct avl_tree *, struct avl_node *, int);
 void avl_delete(struct avl_tree *, struct avl_node *);
 struct avl_node *avl_walk_first(struct avl_tree *);
@@ -77,10 +77,10 @@ struct avl_node *avl_walk_last(struct avl_tree *);
 struct avl_node *avl_walk_next(struct avl_node *);
 struct avl_node *avl_walk_prev(struct avl_node *);
 
-extern int (*avl_comp_default)(void *, void *);
-extern int (*avl_comp_prefix_default)(void *, void *);
-extern int avl_comp_ipv4(void *, void *);
-extern int avl_comp_ipv6(void *, void *);
+extern int (*avl_comp_default)(const void *, const void *);
+extern int (*avl_comp_prefix_default)(const void *, const void *);
+extern int avl_comp_ipv4(const void *, const void *);
+extern int avl_comp_ipv6(const void *, const void *);
 
 #define inline_avl_comp_ipv4(ip1, ip2) \
   (*(unsigned int *)(ip1) == *(unsigned int *)(ip2) ? 0 :       \
index a484f69..6e892ad 100644 (file)
@@ -38,7 +38,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_packet.c,v 1.28 2007/08/29 23:08:54 bernd67 Exp $
+ * $Id: lq_packet.c,v 1.29 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include "olsr_protocol.h"
 #include "hysteresis.h"
 #include "olsr.h"
 #include "build_msg.h"
+#include "net_olsr.h"
 
 
 olsr_bool lq_tc_pending = OLSR_FALSE;
 
 static unsigned char msg_buffer[MAXMESSAGESIZE - OLSR_HEADERSIZE];
 
-static inline void        pkt_get_u8(const olsr_u8_t **p, olsr_u8_t  *var)         { *var =       *(olsr_u8_t *)(*p);   *p += sizeof(olsr_u8_t); }
-static inline void       pkt_get_u16(const olsr_u8_t **p, olsr_u16_t *var)         { *var = ntohs(*(olsr_u16_t *)(*p)); *p += sizeof(olsr_u16_t); }
-static inline void       pkt_get_u32(const olsr_u8_t **p, olsr_u32_t *var)         { *var = ntohl(*(olsr_u32_t *)(p));  *p += sizeof(olsr_u32_t); }
-static inline void        pkt_get_s8(const olsr_u8_t **p, olsr_8_t  *var)          { *var =       *(olsr_8_t *)(*p);    *p += sizeof(olsr_8_t); }
-static inline void       pkt_get_s16(const olsr_u8_t **p, olsr_16_t *var)          { *var = ntohs(*(olsr_16_t *)(*p));  *p += sizeof(olsr_16_t); }
-static inline void       pkt_get_s32(const olsr_u8_t **p, olsr_32_t *var)          { *var = ntohl(*(olsr_32_t *)(*p));  *p += sizeof(olsr_32_t); }
-static inline void    pkt_get_double(const olsr_u8_t **p, double *var)             { *var = me_to_double(**p);          *p += sizeof(olsr_u8_t); }
-static inline void pkt_get_ipaddress(const olsr_u8_t **p, union olsr_ip_addr *var) { COPY_IP(var, *p);                  *p += olsr_cnf->ipsize; }
-static inline void        pkt_get_lq(const olsr_u8_t **p, double *var)             { *var = (double)**p / 255.0;        *p += sizeof(olsr_u8_t); }
-
-static inline void        pkt_ignore_u8(const olsr_u8_t **p) { *p += sizeof(olsr_u8_t); }
-static inline void       pkt_ignore_u16(const olsr_u8_t **p) { *p += sizeof(olsr_u16_t); }
-static inline void       pkt_ignore_u32(const olsr_u8_t **p) { *p += sizeof(olsr_u32_t); }
-static inline void        pkt_ignore_s8(const olsr_u8_t **p) { *p += sizeof(olsr_8_t); }
-static inline void       pkt_ignore_s16(const olsr_u8_t **p) { *p += sizeof(olsr_16_t); }
-static inline void       pkt_ignore_s32(const olsr_u8_t **p) { *p += sizeof(olsr_32_t); }
-static inline void pkt_ignore_ipaddress(const olsr_u8_t **p) { *p += olsr_cnf->ipsize; }
-
-static inline void        pkt_put_u8(olsr_u8_t **p, const olsr_u8_t  var)         { *(olsr_u8_t *)(*p)  = var;        *p += sizeof(olsr_u8_t); }
-static inline void       pkt_put_u16(olsr_u8_t **p, const olsr_u16_t var)         { *(olsr_u16_t *)(*p) = htons(var); *p += sizeof(olsr_u16_t); }
-static inline void       pkt_put_u32(olsr_u8_t **p, const olsr_u32_t var)         { *(olsr_u32_t *)(*p) = htonl(var); *p += sizeof(olsr_u32_t); }
-static inline void        pkt_put_s8(olsr_u8_t **p, const olsr_8_t  var)          { *(olsr_8_t *)(*p)   = var;        *p += sizeof(olsr_8_t); }
-static inline void       pkt_put_s16(olsr_u8_t **p, const olsr_16_t var)          { *(olsr_16_t *)(*p)  = htons(var); *p += sizeof(olsr_16_t); }
-static inline void       pkt_put_s32(olsr_u8_t **p, const olsr_32_t var)          { *(olsr_32_t *)(*p)  = htonl(var); *p += sizeof(olsr_32_t); }
-static inline void    pkt_put_double(olsr_u8_t **p, const double var)             { **p = double_to_me(var);          *p += sizeof(olsr_u8_t); }
-static inline void pkt_put_ipaddress(olsr_u8_t **p, const union olsr_ip_addr var) { COPY_IP(*p, &var);                *p += olsr_cnf->ipsize; }
-static inline void        pkt_put_lq(olsr_u8_t **p, const double var)             { **p  = var * 255.0;               *p += sizeof(olsr_u8_t); }
+static INLINE void        pkt_get_u8(const olsr_u8_t **p, olsr_u8_t  *var)         { *var =       *(olsr_u8_t *)(*p);   *p += sizeof(olsr_u8_t); }
+static INLINE void       pkt_get_u16(const olsr_u8_t **p, olsr_u16_t *var)         { *var = ntohs(*(olsr_u16_t *)(*p)); *p += sizeof(olsr_u16_t); }
+static INLINE void       pkt_get_u32(const olsr_u8_t **p, olsr_u32_t *var)         { *var = ntohl(*(olsr_u32_t *)(p));  *p += sizeof(olsr_u32_t); }
+static INLINE void        pkt_get_s8(const olsr_u8_t **p, olsr_8_t  *var)          { *var =       *(olsr_8_t *)(*p);    *p += sizeof(olsr_8_t); }
+static INLINE void       pkt_get_s16(const olsr_u8_t **p, olsr_16_t *var)          { *var = ntohs(*(olsr_16_t *)(*p));  *p += sizeof(olsr_16_t); }
+static INLINE void       pkt_get_s32(const olsr_u8_t **p, olsr_32_t *var)          { *var = ntohl(*(olsr_32_t *)(*p));  *p += sizeof(olsr_32_t); }
+static INLINE void    pkt_get_double(const olsr_u8_t **p, double *var)             { *var = me_to_double(**p);          *p += sizeof(olsr_u8_t); }
+static INLINE void pkt_get_ipaddress(const olsr_u8_t **p, union olsr_ip_addr *var) { memcpy(var, *p, olsr_cnf->ipsize); *p += olsr_cnf->ipsize; }
+static INLINE void        pkt_get_lq(const olsr_u8_t **p, double *var)             { *var = (double)**p / 255.0;        *p += sizeof(olsr_u8_t); }
+
+static INLINE void        pkt_ignore_u8(const olsr_u8_t **p) { *p += sizeof(olsr_u8_t); }
+static INLINE void       pkt_ignore_u16(const olsr_u8_t **p) { *p += sizeof(olsr_u16_t); }
+static INLINE void       pkt_ignore_u32(const olsr_u8_t **p) { *p += sizeof(olsr_u32_t); }
+static INLINE void        pkt_ignore_s8(const olsr_u8_t **p) { *p += sizeof(olsr_8_t); }
+static INLINE void       pkt_ignore_s16(const olsr_u8_t **p) { *p += sizeof(olsr_16_t); }
+static INLINE void       pkt_ignore_s32(const olsr_u8_t **p) { *p += sizeof(olsr_32_t); }
+static INLINE void pkt_ignore_ipaddress(const olsr_u8_t **p) { *p += olsr_cnf->ipsize; }
+
+static INLINE void        pkt_put_u8(olsr_u8_t **p, const olsr_u8_t  var)         { *(olsr_u8_t *)(*p)  = var;        *p += sizeof(olsr_u8_t); }
+static INLINE void       pkt_put_u16(olsr_u8_t **p, const olsr_u16_t var)         { *(olsr_u16_t *)(*p) = htons(var); *p += sizeof(olsr_u16_t); }
+static INLINE void       pkt_put_u32(olsr_u8_t **p, const olsr_u32_t var)         { *(olsr_u32_t *)(*p) = htonl(var); *p += sizeof(olsr_u32_t); }
+static INLINE void        pkt_put_s8(olsr_u8_t **p, const olsr_8_t  var)          { *(olsr_8_t *)(*p)   = var;        *p += sizeof(olsr_8_t); }
+static INLINE void       pkt_put_s16(olsr_u8_t **p, const olsr_16_t var)          { *(olsr_16_t *)(*p)  = htons(var); *p += sizeof(olsr_16_t); }
+static INLINE void       pkt_put_s32(olsr_u8_t **p, const olsr_32_t var)          { *(olsr_32_t *)(*p)  = htonl(var); *p += sizeof(olsr_32_t); }
+static INLINE void    pkt_put_double(olsr_u8_t **p, const double var)             { **p = double_to_me(var);          *p += sizeof(olsr_u8_t); }
+static INLINE void pkt_put_ipaddress(olsr_u8_t **p, const union olsr_ip_addr var) { memcpy(*p, &var, olsr_cnf->ipsize); *p += olsr_cnf->ipsize; }
+static INLINE void        pkt_put_lq(olsr_u8_t **p, const double var)             { **p  = var * 255.0;               *p += sizeof(olsr_u8_t); }
 
 
 
@@ -102,7 +103,8 @@ create_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
   lq_hello->comm.vtime = me_to_double(outif->valtimes.hello);
   lq_hello->comm.size = 0;
 
-  COPY_IP(&lq_hello->comm.orig, &olsr_cnf->main_addr);
+  //COPY_IP(&lq_hello->comm.orig, &olsr_cnf->main_addr);
+  lq_hello->comm.orig = olsr_cnf->main_addr;
 
   lq_hello->comm.ttl = 1;
   lq_hello->comm.hops = 0;
@@ -121,7 +123,7 @@ create_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
       struct lq_hello_neighbor *neigh = olsr_malloc(sizeof (struct lq_hello_neighbor), "Build LQ_HELLO");
 
       // a) this neighbor interface IS NOT visible via the output interface
-      if(!COMP_IP(&walker->local_iface_addr, &outif->ip_addr))
+      if(!ipequal(&walker->local_iface_addr, &outif->ip_addr))
         neigh->link_type = UNSPEC_LINK;
       
       // b) this neighbor interface IS visible via the output interface
@@ -147,7 +149,8 @@ create_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
   
       // set the entry's neighbour interface address
 
-      COPY_IP(&neigh->addr, &walker->neighbor_iface_addr);
+      //COPY_IP(&neigh->addr, &walker->neighbor_iface_addr);
+      neigh->addr = walker->neighbor_iface_addr;
       
       // queue the neighbour entry
 
@@ -189,7 +192,8 @@ create_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
   lq_tc->comm.vtime = me_to_double(outif->valtimes.tc);
   lq_tc->comm.size = 0;
 
-  COPY_IP(&lq_tc->comm.orig, &olsr_cnf->main_addr);
+  //COPY_IP(&lq_tc->comm.orig, &olsr_cnf->main_addr);
+  lq_tc->comm.orig = olsr_cnf->main_addr;
 
   if (olsr_cnf->lq_fish > 0)
   {
@@ -211,7 +215,8 @@ create_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
   lq_tc->comm.hops = 0;
   lq_tc->comm.seqno = get_msg_seqno();
 
-  COPY_IP(&lq_tc->from, &olsr_cnf->main_addr);
+  //COPY_IP(&lq_tc->from, &olsr_cnf->main_addr);
+  lq_tc->from = olsr_cnf->main_addr;
 
   lq_tc->ansn = get_local_ansn();
 
@@ -248,7 +253,8 @@ create_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
 
           // set the entry's main address
 
-          COPY_IP(&neigh->address, &walker->neighbor_main_addr);
+          //COPY_IP(&neigh->address, &walker->neighbor_main_addr);
+          neigh->address = walker->neighbor_main_addr;
 
           // set the entry's link quality
           lnk = get_best_link_to_neighbor(&neigh->address);
@@ -299,7 +305,7 @@ static void serialize_common(struct olsr_common *comm)
       olsr_head_v4->vtime = double_to_me(comm->vtime);
       olsr_head_v4->size = htons(comm->size);
 
-      COPY_IP(&olsr_head_v4->orig, &comm->orig);
+      olsr_head_v4->orig = comm->orig.v4.s_addr;
 
       olsr_head_v4->ttl = comm->ttl;
       olsr_head_v4->hops = comm->hops;
@@ -314,7 +320,7 @@ static void serialize_common(struct olsr_common *comm)
       olsr_head_v6->vtime = double_to_me(comm->vtime);
       olsr_head_v6->size = htons(comm->size);
 
-      COPY_IP(&olsr_head_v6->orig, &comm->orig);
+      memcpy(&olsr_head_v6->orig, &comm->orig.v6.s6_addr, sizeof(olsr_head_v6->orig));
 
       olsr_head_v6->ttl = comm->ttl;
       olsr_head_v6->hops = comm->hops;
@@ -445,7 +451,7 @@ serialize_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
 
               // add the current neighbor's IP address
 
-              COPY_IP(buff + size, &neigh->addr);
+              genipcopy(buff + size, &neigh->addr);
               size += olsr_cnf->ipsize;
 
               // add the corresponding link quality
@@ -555,7 +561,7 @@ serialize_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
         }
 
       // add the current neighbor's IP address
-      COPY_IP(buff + size, &neigh->address);
+      genipcopy(buff + size, &neigh->address);
       size += olsr_cnf->ipsize;
 
       // add the corresponding link quality
@@ -669,7 +675,8 @@ deserialize_lq_tc(struct tc_message *tc,
     if (!olsr_validate_address(addr)) {
         return 1;
     }
-    COPY_IP(&tc->source_addr, addr);
+    //COPY_IP(&tc->source_addr, addr);
+    tc->source_addr = *addr;
 
     pkt_get_u8(&curr, &tc->ttl);
     pkt_get_u8(&curr, &tc->hop_count);
index 85e9c38..543df52 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.56 2007/11/05 15:32:55 bernd67 Exp $
+ * $Id: lq_route.c,v 1.57 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -53,6 +53,7 @@
 #include "lq_list.h"
 #include "lq_avl.h"
 #include "lq_route.h"
+#include "net_olsr.h"
 
 /*
  * avl_comp_etx
@@ -64,7 +65,7 @@
  * after compiler optimization.
  */
 static int
-avl_comp_etx (void *etx1, void *etx2)
+avl_comp_etx (const void *etx1, const void *etx2)
 {       
   if (*(float *)etx1 < *(float *)etx2) {
     return -1;
@@ -86,12 +87,15 @@ static void
 olsr_spf_add_cand_tree (struct avl_tree *tree,
                         struct tc_entry *vert)
 {
+#if !defined(NODEBUG) && defined(DEBUG)
+  struct ipaddr_str buf;
+#endif
   vert->cand_tree_node.key = &vert->path_etx;
   vert->cand_tree_node.data = vert;
 
 #ifdef DEBUG
   OLSR_PRINTF(1, "SPF: insert candidate %s, cost %f\n",
-              olsr_ip_to_string(&(vert->addr)),
+              olsr_ip_to_string(&buf, &vert->addr),
               vert->path_etx);
 #endif
 
@@ -109,8 +113,11 @@ olsr_spf_del_cand_tree (struct avl_tree *tree,
 {
 
 #ifdef DEBUG
+#ifndef NODEBUG
+  struct ipaddr_str buf;
+#endif
   OLSR_PRINTF(1, "SPF: delete candidate %s, cost %f\n",
-              olsr_ip_to_string(&(vert->addr)),
+              olsr_ip_to_string(&buf, &vert->addr),
               vert->path_etx);
 #endif
 
@@ -127,13 +134,16 @@ olsr_spf_add_path_list (struct list_node *head,
                         int *path_count,
                         struct tc_entry *vert)
 {
+#if !defined(NODEBUG) && defined(DEBUG)
+  struct ipaddr_str pathbuf, nbuf;
+#endif
   vert->path_list_node.data = vert;
 
 #ifdef DEBUG
   OLSR_PRINTF(1, "SPF: append path %s, cost %f, via %s\n",
-              olsr_ip_to_string(&(vert->addr)),
+              olsr_ip_to_string(&pathbuf, &vert->addr),
               vert->path_etx,
-              vert->next_hop ? olsr_ip_to_string(&vert->next_hop->neighbor_iface_addr) : "-");
+              vert->next_hop ? olsr_ip_to_string(&nbuf, &vert->next_hop->neighbor_iface_addr) : "-");
 #endif
 
   list_add_before(head, &vert->path_list_node);
@@ -176,14 +186,15 @@ char *olsr_etx_to_string(float etx)
 static void
 olsr_spf_relax (struct avl_tree *cand_tree, struct tc_entry *vert)
 {
-  struct tc_entry *new_vert;
-  struct tc_edge_entry *tc_edge;
   struct avl_node *edge_node;
   float new_etx;
 
 #ifdef DEBUG
+#ifndef NODEBUG
+  struct ipaddr_str buf, nbuf;
+#endif
   OLSR_PRINTF(1, "SPF: exploring node %s, cost %f\n",
-              olsr_ip_to_string(&vert->addr),
+              olsr_ip_to_string(&buf, &vert->addr),
               vert->path_etx);
 #endif
 
@@ -193,8 +204,8 @@ olsr_spf_relax (struct avl_tree *cand_tree, struct tc_entry *vert)
   for (edge_node = avl_walk_first(&vert->edge_tree);
        edge_node;
        edge_node = avl_walk_next(edge_node)) {
-
-    tc_edge = edge_node->data;
+    struct tc_entry *new_vert;
+    struct tc_edge_entry *tc_edge = edge_node->data;
 
     /*
      * We are not interested in dead-end or dying edges.
@@ -202,7 +213,7 @@ olsr_spf_relax (struct avl_tree *cand_tree, struct tc_entry *vert)
     if (!tc_edge->edge_inv || (tc_edge->flags & OLSR_TC_EDGE_DOWN)) {
 #ifdef DEBUG
       OLSR_PRINTF(1, "SPF:   ignoring edge %s\n",
-                  olsr_ip_to_string(&tc_edge->T_dest_addr));
+                  olsr_ip_to_string(&buf, &tc_edge->T_dest_addr));
       if (tc_edge->flags & OLSR_TC_EDGE_DOWN) {
         OLSR_PRINTF(1, "SPF:     edge down\n");
       }
@@ -221,7 +232,7 @@ olsr_spf_relax (struct avl_tree *cand_tree, struct tc_entry *vert)
 
 #ifdef DEBUG
       OLSR_PRINTF(1, "SPF:   exploring edge %s, cost %s\n",
-                  olsr_ip_to_string(&(tc_edge->T_dest_addr)),
+                  olsr_ip_to_string(&buf, &tc_edge->T_dest_addr),
                   olsr_etx_to_string(new_etx));
 #endif
 
@@ -230,6 +241,7 @@ olsr_spf_relax (struct avl_tree *cand_tree, struct tc_entry *vert)
        * destination node, then we've found a better path to this node.
        */
     new_vert = tc_edge->edge_inv->tc;
+
     if (new_etx < new_vert->path_etx) {
 
       /* if this node has been on the candidate tree delete it */
@@ -249,11 +261,10 @@ olsr_spf_relax (struct avl_tree *cand_tree, struct tc_entry *vert)
 
 #ifdef DEBUG
       OLSR_PRINTF(1, "SPF:   better path to %s, cost %s -> %s, via %s, hops %u\n",
-                  olsr_ip_to_string(&new_vert->addr),
+                  olsr_ip_to_string(&buf, &new_vert->addr),
                   olsr_etx_to_string(new_vert->path_etx),
                   olsr_etx_to_string(new_etx),
-                  olsr_ip_to_string(vert->next_hop ?
-                                    &vert->next_hop->neighbor_iface_addr : NULL),
+                  vert->next_hop ? olsr_ip_to_string(&nbuf, &vert->next_hop->neighbor_iface_addr) : "<none>",
                   new_vert->hops);
 #endif
 
@@ -409,7 +420,10 @@ olsr_calculate_routing_table (void)
     link = vert->next_hop;
 
     if (!link) {
-      OLSR_PRINTF(2, "%s no next-hop\n", olsr_ip_to_string(&vert->addr));
+#ifndef NODEBUG
+      struct ipaddr_str buf;
+#endif
+      OLSR_PRINTF(2, "%s no next-hop\n", olsr_ip_to_string(&buf, &vert->addr));
       continue;
     }
 
index 5e041e2..39877e0 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: main.c,v 1.101 2007/11/03 23:21:27 bernd67 Exp $
+ * $Id: main.c,v 1.102 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include <unistd.h>
@@ -54,6 +54,7 @@
 #include "apm.h"
 #include "net_os.h"
 #include "build_msg.h"
+#include "net_olsr.h"
 
 #if LINUX_POLICY_ROUTING
 #include <linux/types.h>
@@ -109,7 +110,9 @@ main(int argc, char *argv[])
   struct if_config_options *default_ifcnf;
   char conf_file_name[FILENAME_MAX];
   struct tms tms_buf;
-
+#ifndef NODEBUG
+  struct ipaddr_str buf;
+#endif
 #ifdef WIN32
   WSADATA WsaData;
   int len;
@@ -148,11 +151,9 @@ main(int argc, char *argv[])
   olsr_openlog("olsrd");
 
   /* Get initial timestep */
-  nowtm = NULL;
-  while (nowtm == NULL)
-    {
-      nowtm = localtime((time_t *)&now.tv_sec);
-    }
+  do {
+    nowtm = localtime(&now.tv_sec);
+  } while (nowtm == NULL);
     
   printf("\n *** %s ***\n Build date: %s on %s\n http://www.olsr.org\n\n", 
         olsrd_version, 
@@ -397,7 +398,7 @@ main(int argc, char *argv[])
   /* Load plugins */
   olsr_load_plugins();
 
-  OLSR_PRINTF(1, "Main address: %s\n\n", olsr_ip_to_string(&olsr_cnf->main_addr));
+  OLSR_PRINTF(1, "Main address: %s\n\n", olsr_ip_to_string(&buf, &olsr_cnf->main_addr));
 
   /* Start syslog entry */
   olsr_syslog(OLSR_LOG_INFO, "%s successfully started", olsrd_version);
@@ -413,8 +414,12 @@ main(int argc, char *argv[])
 #endif
 #else
   signal(SIGHUP, olsr_reconfigure);  
-  signal(SIGINT, olsr_shutdown);  
-  signal(SIGTERM, olsr_shutdown);  
+  signal(SIGINT,  olsr_shutdown);
+  signal(SIGQUIT, olsr_shutdown);
+  signal(SIGILL,  olsr_shutdown);
+  signal(SIGABRT, olsr_shutdown);
+  signal(SIGSEGV, olsr_shutdown);
+  signal(SIGTERM, olsr_shutdown);
   signal(SIGPIPE, SIG_IGN);
 #endif
 
@@ -466,7 +471,7 @@ int __stdcall
 SignalHandler(unsigned long signal)
 #else
 static void
-olsr_shutdown(int signal)
+olsr_shutdown(int signal __attribute__((unused)))
 #endif
 {
   struct interface *ifn;
index 07aaffc..f852d29 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: mid_set.c,v 1.22 2007/09/17 22:24:22 bernd67 Exp $
+ * $Id: mid_set.c,v 1.23 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -47,6 +47,7 @@
 #include "neighbor_table.h"
 #include "link_set.h"
 #include "packet.h" /* struct mid_alias */
+#include "net_olsr.h"
 
 
 struct mid_entry mid_set[HASHSIZE];
@@ -111,13 +112,13 @@ insert_mid_tuple(const union olsr_ip_addr *m_addr, struct mid_address *alias, fl
       tmp != &mid_set[hash];
       tmp = tmp->next)
     {
-      if(COMP_IP(&tmp->main_addr, m_addr))
+      if(ipequal(&tmp->main_addr, m_addr))
        break;
      }
 
   /* Check if alias is already registered with m_addr */
   registered_m_addr = mid_lookup_main_addr(&alias->alias);
-  if (registered_m_addr != NULL && COMP_IP(registered_m_addr, m_addr))
+  if (registered_m_addr != NULL && ipequal(registered_m_addr, m_addr))
     {
       /* Alias is already registered with main address. Nothing to do here. */
       return;
@@ -141,7 +142,8 @@ insert_mid_tuple(const union olsr_ip_addr *m_addr, struct mid_address *alias, fl
       tmp->aliases = alias;
       alias->main_entry = tmp;
       QUEUE_ELEM(reverse_mid_set[alias_hash], alias);
-      COPY_IP(&tmp->main_addr, m_addr);
+      //COPY_IP(&tmp->main_addr, m_addr);
+      tmp->main_addr = *m_addr;
       tmp->ass_timer = GET_TIMESTAMP(vtime*1000);
       /* Queue */
       QUEUE_ELEM(mid_set[hash], tmp);
@@ -167,8 +169,11 @@ insert_mid_tuple(const union olsr_ip_addr *m_addr, struct mid_address *alias, fl
       /* Delete possible 2 hop neighbor */
       if((tmp_2_neighbor = olsr_lookup_two_hop_neighbor_table_mid(&tmp_adr->alias)) != NULL)
        {
-         OLSR_PRINTF(1, "Deleting 2 hop node from MID: %s to ", olsr_ip_to_string(&tmp_adr->alias));
-         OLSR_PRINTF(1, "%s\n", olsr_ip_to_string(m_addr));
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+#endif
+         OLSR_PRINTF(1, "Deleting 2 hop node from MID: %s to ", olsr_ip_to_string(&buf, &tmp_adr->alias));
+         OLSR_PRINTF(1, "%s\n", olsr_ip_to_string(&buf, m_addr));
 
          olsr_delete_two_hop_neighbor_table(tmp_2_neighbor);
 
@@ -180,8 +185,11 @@ insert_mid_tuple(const union olsr_ip_addr *m_addr, struct mid_address *alias, fl
         && ((real_neigh = olsr_lookup_neighbor_table_alias(m_addr)) != NULL))
 
        {
-         OLSR_PRINTF(1, "[MID]Deleting bogus neighbor entry %s real ", olsr_ip_to_string(&tmp_adr->alias));
-         OLSR_PRINTF(1, "%s\n", olsr_ip_to_string(m_addr));
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+#endif
+         OLSR_PRINTF(1, "[MID]Deleting bogus neighbor entry %s real ", olsr_ip_to_string(&buf, &tmp_adr->alias));
+         OLSR_PRINTF(1, "%s\n", olsr_ip_to_string(&buf, m_addr));
 
          replace_neighbor_link_set(tmp_neigh, real_neigh);
 
@@ -214,17 +222,19 @@ insert_mid_tuple(const union olsr_ip_addr *m_addr, struct mid_address *alias, fl
 void
 insert_mid_alias(const union olsr_ip_addr *main_add, const union olsr_ip_addr *alias, float vtime)
 {
-  struct mid_address *adr;
   struct neighbor_entry *ne_old, *ne_new;
   struct mid_entry *me_old;
   int ne_ref_rp_count;
-
-  adr = olsr_malloc(sizeof(struct mid_address), "Insert MID alias");
+#ifndef NODEBUG
+  struct ipaddr_str buf;
+#endif
+  struct mid_address *adr = olsr_malloc(sizeof(struct mid_address), "Insert MID alias");
   
-  OLSR_PRINTF(1, "Inserting alias %s for ", olsr_ip_to_string(alias));
-  OLSR_PRINTF(1, "%s\n", olsr_ip_to_string(main_add));
+  OLSR_PRINTF(1, "Inserting alias %s for ", olsr_ip_to_string(&buf, alias));
+  OLSR_PRINTF(1, "%s\n", olsr_ip_to_string(&buf, main_add));
 
-  COPY_IP(&adr->alias, alias);
+  //COPY_IP(&adr->alias, alias);
+  adr->alias = *alias;
   adr->next_alias = NULL;
   
   // If we have an entry for this alias in neighbortable, we better adjust it's
@@ -232,7 +242,7 @@ insert_mid_alias(const union olsr_ip_addr *main_add, const union olsr_ip_addr *a
   // neighbortable and link_set will be created by way of this mid entry.
   ne_old = olsr_lookup_neighbor_table_alias(alias);
   if (ne_old != NULL) {
-     OLSR_PRINTF(2, "Remote main address change detected. Mangling neighbortable to replace %s with %s.\n", olsr_ip_to_string(alias), olsr_ip_to_string(main_add));
+     OLSR_PRINTF(2, "Remote main address change detected. Mangling neighbortable to replace %s with %s.\n", olsr_ip_to_string(&buf, alias), olsr_ip_to_string(&buf, main_add));
      olsr_delete_neighbor_table(alias);
      ne_new = olsr_insert_neighbor_table(main_add);
      // adjust pointers to neighbortable-entry in link_set
@@ -280,7 +290,7 @@ mid_lookup_main_addr(const union olsr_ip_addr *adr)
       tmp_list != &reverse_mid_set[hash];
       tmp_list = tmp_list->next)
        {
-         if(COMP_IP(&tmp_list->alias, adr))
+         if(ipequal(&tmp_list->alias, adr))
            return &tmp_list->main_entry->main_addr;
        }
   return NULL;
@@ -307,7 +317,7 @@ mid_lookup_entry_bymain(const union olsr_ip_addr *adr)
       tmp_list != &mid_set[hash];
       tmp_list = tmp_list->next)
     {
-      if(COMP_IP(&tmp_list->main_addr, adr))
+      if(ipequal(&tmp_list->main_addr, adr))
        return tmp_list;
     }
   return NULL;
@@ -338,10 +348,13 @@ mid_lookup_aliases(const union olsr_ip_addr *adr)
 int
 olsr_update_mid_table(const union olsr_ip_addr *adr, float vtime)
 {
-  struct mid_entry *tmp_list = mid_set;
   olsr_u32_t hash;
+#ifndef NODEBUG
+  struct ipaddr_str buf;
+#endif
+  struct mid_entry *tmp_list = mid_set;
 
-  OLSR_PRINTF(3, "MID: update %s\n", olsr_ip_to_string(adr));
+  OLSR_PRINTF(3, "MID: update %s\n", olsr_ip_to_string(&buf, adr));
   hash = olsr_hashing(adr);
 
   /* Check all registered nodes...*/
@@ -350,9 +363,9 @@ olsr_update_mid_table(const union olsr_ip_addr *adr, float vtime)
       tmp_list = tmp_list->next)
     {
       /*find match*/
-      if(COMP_IP(&tmp_list->main_addr, adr))
+      if(ipequal(&tmp_list->main_addr, adr))
        {
-         // printf("MID: Updating timer for node %s\n", olsr_ip_to_string(&tmp_list->main_addr));
+         // printf("MID: Updating timer for node %s\n", olsr_ip_to_string(&buf, &tmp_list->main_addr));
          tmp_list->ass_timer = GET_TIMESTAMP(vtime*1000);
 
          return 1;
@@ -386,7 +399,7 @@ olsr_prune_aliases(const union olsr_ip_addr *m_addr, struct mid_alias *declared_
       entry != &mid_set[hash];
       entry = entry->next)
     {
-      if(COMP_IP(&entry->main_addr, m_addr))
+      if(ipequal(&entry->main_addr, m_addr))
        break;
     }
   if(entry == &mid_set[hash])
@@ -407,16 +420,19 @@ olsr_prune_aliases(const union olsr_ip_addr *m_addr, struct mid_alias *declared_
 
       /* Go through the list of declared aliases to find the matching current alias */
       while(declared_aliases != 0 &&
-            ! COMP_IP(&current_alias->alias, &declared_aliases->alias_addr))
+            ! ipequal(&current_alias->alias, &declared_aliases->alias_addr))
         {
           declared_aliases = declared_aliases->next;
         }
 
       if (declared_aliases == NULL)
         {
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+#endif
           /* Current alias not found in list of declared aliases: free current alias */
-          OLSR_PRINTF(1, "MID remove: (%s, ", olsr_ip_to_string(&entry->main_addr));
-            OLSR_PRINTF(1, "%s)\n", olsr_ip_to_string(&current_alias->alias));
+          OLSR_PRINTF(1, "MID remove: (%s, ", olsr_ip_to_string(&buf, &entry->main_addr));
+            OLSR_PRINTF(1, "%s)\n", olsr_ip_to_string(&buf, &current_alias->alias));
 
           /* Update linked list as seen by 'entry' */
           if (previous_alias != NULL)
@@ -467,11 +483,14 @@ olsr_time_out_mid_set(void *foo __attribute__((unused)))
          /*Check if the entry is timed out*/
          if(TIMED_OUT(tmp_list->ass_timer))
            {
+#if !defined(NODEBUG) && defined(DEBUG)
+              struct ipaddr_str buf;
+#endif
              struct mid_entry *entry_to_delete = tmp_list;
              tmp_list = tmp_list->next;
 #ifdef DEBUG
              OLSR_PRINTF(1, "MID info for %s timed out.. deleting it\n",
-                         olsr_ip_to_string(&entry_to_delete->main_addr));
+                         olsr_ip_to_string(&buf, &entry_to_delete->main_addr));
 #endif
              /*Delete it*/
              mid_delete_node(entry_to_delete);
@@ -532,11 +551,13 @@ olsr_print_mid_set(void)
       for(tmp_list = mid_set[idx].next; tmp_list != &mid_set[idx]; tmp_list = tmp_list->next)
        {
          struct mid_address *tmp_addr;
-          
-         OLSR_PRINTF(1, "%s: ", olsr_ip_to_string(&tmp_list->main_addr));
+#ifndef NODEBUG
+          struct ipaddr_str buf;
+#endif          
+         OLSR_PRINTF(1, "%s: ", olsr_ip_to_string(&buf, &tmp_list->main_addr));
           for(tmp_addr = tmp_list->aliases;tmp_addr;tmp_addr = tmp_addr->next_alias)
            {
-             OLSR_PRINTF(1, " %s ", olsr_ip_to_string(&tmp_addr->alias));
+             OLSR_PRINTF(1, " %s ", olsr_ip_to_string(&buf, &tmp_addr->alias));
            }
          OLSR_PRINTF(1, "\n");
        }
index 5ffe72a..7bcb2f5 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: mid_set.h,v 1.15 2007/08/02 21:50:22 bernd67 Exp $
+ * $Id: mid_set.h,v 1.16 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 
@@ -44,6 +44,7 @@
 #define _OLSR_MID
 
 #include "olsr_types.h"
+#include "hashing.h"
 
 
 struct mid_address
index e1ddc2d..3a4b8d6 100644 (file)
--- a/src/mpr.c
+++ b/src/mpr.c
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: mpr.c,v 1.19 2007/10/21 20:53:13 bernd67 Exp $
+ * $Id: mpr.c,v 1.20 2007/11/08 22:47:41 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -45,6 +45,7 @@
 #include "olsr.h"
 #include "neighbor_table.h"
 #include "scheduler.h"
+#include "net_olsr.h"
 
 /* Begin:
  * Prototypes for internal functions 
@@ -121,7 +122,7 @@ olsr_find_2_hop_neighbors_with_1_link(int willingness)
          if((dup_neighbor != NULL) && (dup_neighbor->status != NOT_SYM))
            {
              
-             //OLSR_PRINTF(1, "(1)Skipping 2h neighbor %s - already 1hop\n", olsr_ip_to_string(&two_hop_neighbor->neighbor_2_addr));
+             //OLSR_PRINTF(1, "(1)Skipping 2h neighbor %s - already 1hop\n", olsr_ip_to_string(&buf, &two_hop_neighbor->neighbor_2_addr));
 
              continue;
            }
@@ -133,7