Cleanup in use of extern variables. Rather trivial changes, but a lot of them
authorAndreas Tonnesen <andreto@olsr.org>
Sat, 7 Jan 2006 08:16:26 +0000 (08:16 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Sat, 7 Jan 2006 08:16:26 +0000 (08:16 +0000)
37 files changed:
src/bsd/kernel_routes.c
src/bsd/net.c
src/build_msg.c
src/build_msg.h
src/cfgparser/olsrd_conf.c
src/defs.c
src/defs.h
src/generate_msg.c
src/interfaces.c
src/interfaces.h
src/ipc_frontend.c
src/link_set.c
src/linux/kernel_routes.c
src/linux/net.c
src/local_hna_set.c
src/lq_mpr.c
src/lq_packet.c
src/lq_route.c
src/main.c
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_cfg.h
src/olsr_protocol.h
src/packet.c
src/parser.c
src/parser.h
src/print_packet.c
src/process_package.c
src/scheduler.c
src/scheduler.h
src/tc_set.c
src/unix/ifnet.c
src/win32/ifnet.c

index 7a0e80b..7c48196 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: kernel_routes.c,v 1.6 2005/02/27 10:43:38 kattemat Exp $
+ * $Id: kernel_routes.c,v 1.7 2006/01/07 08:16:22 kattemat Exp $
  */
 
 
@@ -152,7 +152,7 @@ static int add_del_route(struct rt_entry *dest, int add)
 
   rtm->rtm_msglen = (unsigned short)(walker - buff);
 
-  len = write(rts, buff, rtm->rtm_msglen);
+  len = write(olsr_cnf->rts, buff, rtm->rtm_msglen);
 
   if (len < rtm->rtm_msglen)
     fprintf(stderr, "cannot write to routing socket: %s\n", strerror(errno));
index f121cfb..17a1a6b 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.26 2005/08/28 19:30:29 kattemat Exp $
+ * $Id: net.c,v 1.27 2006/01/07 08:16:22 kattemat Exp $
  */
 
 #include "defs.h"
@@ -719,7 +719,7 @@ check_wireless_interface(char *ifname)
   strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
   ifr.ifr_data = (caddr_t)&wreq;
 
-  return (ioctl(ioctl_s, SIOCGWAVELAN, &ifr) >= 0) ? 1 : 0;
+  return (ioctl(olsr_cnf->ioctl_s, SIOCGWAVELAN, &ifr) >= 0) ? 1 : 0;
 #else
   return 0;
 #endif
@@ -745,7 +745,7 @@ calculate_if_metric(char *ifname)
       memset(&ifm, 0, sizeof(ifm));
       strlcpy(ifm.ifm_name, ifname, sizeof(ifm.ifm_name));
 
-      if(ioctl(ioctl_s, SIOCGIFMEDIA, &ifm) < 0)
+      if(ioctl(olsr_cnf->ioctl_s, SIOCGIFMEDIA, &ifm) < 0)
        {
          OLSR_PRINTF(1, "Error SIOCGIFMEDIA(%s)\n", ifm.ifm_name)
          return WEIGHT_ETHERNET_DEFAULT;
index d3b02db..8f0c2d4 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.31 2005/11/10 19:35:12 kattemat Exp $
+ * $Id: build_msg.c,v 1.32 2006/01/07 08:16:19 kattemat Exp $
  */
 
 
@@ -66,6 +66,8 @@
 
 static olsr_u8_t msg_buffer[MAXMESSAGESIZE - OLSR_HEADERSIZE];
 
+static clock_t send_empty_tc; /* TC empty message sending */
+
 /* Prototypes for internal functions */
 
 /* IPv4 */
@@ -96,7 +98,25 @@ serialize_mid6(struct interface *);
 static olsr_bool
 serialize_hna6(struct interface *);
 
+/**
+ * Set the timer that controls the generation of
+ * empty TC messages
+ */
+void
+set_empty_tc_timer(clock_t empty_tc_new)
+{
+  send_empty_tc = empty_tc_new;
+}
 
+/**
+ * Get the timer that controls the generation of
+ * empty TC messages
+ */
+clock_t
+get_empty_tc_timer()
+{
+  return send_empty_tc;
+}
 
 /**
  * Generate HELLO packet with the contents of the parameter "message".
@@ -278,7 +298,7 @@ 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, &main_addr);
+  COPY_IP(&m->v4.originator, &olsr_cnf->main_addr);
 
   m->v4.olsr_vtime = ifp->valtimes.hello;
 
@@ -329,7 +349,7 @@ serialize_hello4(struct hello_message *message, struct interface *ifp)
               * a group, we must check for an extra
               * 4 bytes
               */
-             if((curr_size + ipsize + (first_entry ? 4 : 0)) > remainsize)
+             if((curr_size + olsr_cnf->ipsize + (first_entry ? 4 : 0)) > remainsize)
                {
                  /* Only send partial HELLO if it contains data */
                  if(curr_size > OLSR_HELLO_IPV4_HDRSIZE)
@@ -360,7 +380,7 @@ serialize_hello4(struct hello_message *message, struct interface *ifp)
                  remainsize = net_outbuffer_bytes_left(ifp);
                  
                  /* Sanity check */
-                 check_buffspace(curr_size + ipsize + 4, remainsize, "HELLO2");
+                 check_buffspace(curr_size + olsr_cnf->ipsize + 4, remainsize, "HELLO2");
                }
              
              if (first_entry)
@@ -375,7 +395,7 @@ serialize_hello4(struct hello_message *message, struct interface *ifp)
              
              /* Point to next address */
              haddr = (union olsr_ip_addr *)&haddr->v6.s6_addr[4];
-             curr_size += ipsize; /* IP address added */
+             curr_size += olsr_cnf->ipsize; /* IP address added */
 
              first_entry = OLSR_FALSE;
            }
@@ -438,7 +458,7 @@ serialize_hello6(struct hello_message *message, struct interface *ifp)
       net_output(ifp);
       remainsize = net_outbuffer_bytes_left(ifp);
     }
-  check_buffspace(curr_size + ipsize + 4, remainsize, "HELLO");
+  check_buffspace(curr_size + olsr_cnf->ipsize + 4, remainsize, "HELLO");
 
   h6 = &m->v6.message.hello;
   hinfo6 = h6->hell_info;
@@ -449,7 +469,7 @@ 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, &main_addr);
+  COPY_IP(&m->v6.originator, &olsr_cnf->main_addr);
   m->v6.olsr_msgtype = HELLO_MESSAGE;
 
   m->v6.olsr_vtime = ifp->valtimes.hello;
@@ -495,7 +515,7 @@ serialize_hello6(struct hello_message *message, struct interface *ifp)
               * a group, we must check for an extra
               * 4 bytes
               */
-             if((curr_size + ipsize + (first_entry ? 4 : 0)) > remainsize)
+             if((curr_size + olsr_cnf->ipsize + (first_entry ? 4 : 0)) > remainsize)
                {
                  /* Only send partial HELLO if it contains data */
                  if(curr_size > OLSR_HELLO_IPV6_HDRSIZE)
@@ -524,7 +544,7 @@ serialize_hello6(struct hello_message *message, struct interface *ifp)
                  /* Reset size and pointers */
                  remainsize = net_outbuffer_bytes_left(ifp);
 
-                 check_buffspace(curr_size + ipsize + 4, remainsize, "HELLO2");
+                 check_buffspace(curr_size + olsr_cnf->ipsize + 4, remainsize, "HELLO2");
                      
                }
 
@@ -540,7 +560,7 @@ serialize_hello6(struct hello_message *message, struct interface *ifp)
                  
              /* Point to next address */
              haddr++;
-             curr_size += ipsize; /* IP address added */ 
+             curr_size += olsr_cnf->ipsize; /* IP address added */ 
                  
              first_entry = OLSR_FALSE;
            }/* looping trough neighbors */
@@ -625,7 +645,7 @@ serialize_tc4(struct tc_message *message, struct interface *ifp)
   for (mprs = message->multipoint_relay_selector_address; mprs != NULL;mprs = mprs->next) 
     {
       /*If packet is to be chomped */
-      if((curr_size + ipsize) > remainsize)
+      if((curr_size + olsr_cnf->ipsize) > remainsize)
        {
 
          /* Only add TC message if it contains data */
@@ -649,7 +669,7 @@ serialize_tc4(struct tc_message *message, struct interface *ifp)
 
          net_output(ifp);
          remainsize = net_outbuffer_bytes_left(ifp);
-         check_buffspace(curr_size + ipsize, remainsize, "TC2");
+         check_buffspace(curr_size + olsr_cnf->ipsize, remainsize, "TC2");
 
        }
       found = OLSR_TRUE;
@@ -659,7 +679,7 @@ serialize_tc4(struct tc_message *message, struct interface *ifp)
 #endif 
       COPY_IP(&mprsaddr->addr, &mprs->address);
 
-      curr_size += ipsize;
+      curr_size += olsr_cnf->ipsize;
       mprsaddr++;
     }
 
@@ -751,7 +771,7 @@ serialize_tc6(struct tc_message *message, struct interface *ifp)
     {
            
       /*If packet is to be chomped */
-      if((curr_size + ipsize) > remainsize)
+      if((curr_size + olsr_cnf->ipsize) > remainsize)
        {
          /* Only add TC message if it contains data */
          if(curr_size > OLSR_TC_IPV6_HDRSIZE)
@@ -770,7 +790,7 @@ serialize_tc6(struct tc_message *message, struct interface *ifp)
            }
          net_output(ifp);
          remainsize = net_outbuffer_bytes_left(ifp);
-         check_buffspace(curr_size + ipsize, remainsize, "TC2");
+         check_buffspace(curr_size + olsr_cnf->ipsize, remainsize, "TC2");
 
        }
       found = OLSR_TRUE;
@@ -779,7 +799,7 @@ serialize_tc6(struct tc_message *message, struct interface *ifp)
                      olsr_ip_to_string(&mprs->address))
 #endif
       COPY_IP(&mprsaddr6->addr, &mprs->address);
-      curr_size += ipsize;
+      curr_size += olsr_cnf->ipsize;
 
       mprsaddr6++;
     }
@@ -852,7 +872,7 @@ serialize_mid4(struct interface *ifp)
   m->v4.hopcnt = 0;
   m->v4.ttl = MAX_TTL;
   /* Set main(first) address */
-  COPY_IP(&m->v4.originator, &main_addr);
+  COPY_IP(&m->v4.originator, &olsr_cnf->main_addr);
   m->v4.olsr_msgtype = MID_MESSAGE;
   m->v4.olsr_vtime = ifp->valtimes.mid;
  
@@ -861,10 +881,10 @@ 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(&main_addr, &ifs->ip_addr))
+      if(!COMP_IP(&olsr_cnf->main_addr, &ifs->ip_addr))
        {
 
-         if((curr_size + ipsize) > remainsize)
+         if((curr_size + olsr_cnf->ipsize) > remainsize)
            {
              /* Only add MID message if it contains data */
              if(curr_size > OLSR_MID_IPV4_HDRSIZE)
@@ -892,7 +912,7 @@ serialize_mid4(struct interface *ifp)
          
          COPY_IP(&addrs->addr, &ifs->ip_addr);
          addrs++;
-         curr_size += ipsize;
+         curr_size += olsr_cnf->ipsize;
        }
     }
 
@@ -942,7 +962,7 @@ serialize_mid6(struct interface *ifp)
       net_output(ifp);
       remainsize = net_outbuffer_bytes_left(ifp);
     }
-  check_buffspace(curr_size + ipsize, remainsize, "MID");
+  check_buffspace(curr_size + olsr_cnf->ipsize, remainsize, "MID");
 
   m = (union olsr_message *)msg_buffer;
     
@@ -952,7 +972,7 @@ 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, &main_addr);
+  COPY_IP(&m->v6.originator, &olsr_cnf->main_addr);
    
 
   addrs6 = m->v6.message.mid.mid_addr;
@@ -960,9 +980,9 @@ serialize_mid6(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(&main_addr, &ifs->ip_addr))
+      if(!COMP_IP(&olsr_cnf->main_addr, &ifs->ip_addr))
        {
-         if((curr_size + ipsize) > remainsize)
+         if((curr_size + olsr_cnf->ipsize) > remainsize)
            {
              /* Only add MID message if it contains data */
              if(curr_size > OLSR_MID_IPV6_HDRSIZE)
@@ -980,7 +1000,7 @@ serialize_mid6(struct interface *ifp)
                }
              net_output(ifp);
              remainsize = net_outbuffer_bytes_left(ifp);
-             check_buffspace(curr_size + ipsize, remainsize, "MID2");
+             check_buffspace(curr_size + olsr_cnf->ipsize, remainsize, "MID2");
            }
 #ifdef DEBUG
                  OLSR_PRINTF(BMSG_DBGLVL, "\t%s(%s)\n", 
@@ -990,7 +1010,7 @@ serialize_mid6(struct interface *ifp)
 
          COPY_IP(&addrs6->addr, &ifs->ip_addr);
          addrs6++;
-         curr_size += ipsize;
+         curr_size += olsr_cnf->ipsize;
        }
     }
 
@@ -1041,7 +1061,7 @@ serialize_hna4(struct interface *ifp)
   
   
   /* Fill header */
-  COPY_IP(&m->v4.originator, &main_addr);
+  COPY_IP(&m->v4.originator, &olsr_cnf->main_addr);
   m->v4.hopcnt = 0;
   m->v4.ttl = MAX_TTL;
   m->v4.olsr_msgtype = HNA_MESSAGE;
@@ -1052,7 +1072,7 @@ serialize_hna4(struct interface *ifp)
   
   while(h)
     {
-      if((curr_size + (2 * ipsize)) > remainsize)
+      if((curr_size + (2 * olsr_cnf->ipsize)) > remainsize)
        {
          /* Only add HNA message if it contains data */
          if(curr_size > OLSR_HNA_IPV4_HDRSIZE)
@@ -1068,7 +1088,7 @@ serialize_hna4(struct interface *ifp)
            }
          net_output(ifp);
          remainsize = net_outbuffer_bytes_left(ifp);
-         check_buffspace(curr_size + (2 * ipsize), remainsize, "HNA2");
+         check_buffspace(curr_size + (2 * olsr_cnf->ipsize), remainsize, "HNA2");
        }
 #ifdef DEBUG
       OLSR_PRINTF(BMSG_DBGLVL, "\tNet: %s/%s\n", 
@@ -1078,7 +1098,7 @@ serialize_hna4(struct interface *ifp)
       COPY_IP(&pair->addr, &h->net);
       COPY_IP(&pair->netmask, &h->netmask);
       pair++;
-      curr_size += (2 * ipsize);
+      curr_size += (2 * olsr_cnf->ipsize);
       h = h->next;
     }
 
@@ -1131,7 +1151,7 @@ serialize_hna6(struct interface *ifp)
   m = (union olsr_message *)msg_buffer;   
 
   /* Fill header */
-  COPY_IP(&m->v6.originator, &main_addr);
+  COPY_IP(&m->v6.originator, &olsr_cnf->main_addr);
   m->v6.hopcnt = 0;
   m->v6.ttl = MAX_TTL;
   m->v6.olsr_msgtype = HNA_MESSAGE;
@@ -1142,7 +1162,7 @@ serialize_hna6(struct interface *ifp)
 
   while(h)
     {
-      if((curr_size + (2 * ipsize)) > remainsize)
+      if((curr_size + (2 * olsr_cnf->ipsize)) > remainsize)
        {
          /* Only add HNA message if it contains data */
          if(curr_size > OLSR_HNA_IPV6_HDRSIZE)
@@ -1158,7 +1178,7 @@ serialize_hna6(struct interface *ifp)
            }
          net_output(ifp);
          remainsize = net_outbuffer_bytes_left(ifp);
-         check_buffspace(curr_size + (2 * ipsize), remainsize, "HNA2");
+         check_buffspace(curr_size + (2 * olsr_cnf->ipsize), remainsize, "HNA2");
        }
 #ifdef DEBUG
       OLSR_PRINTF(BMSG_DBGLVL, "\tNet: %s/%d\n", 
@@ -1169,7 +1189,7 @@ serialize_hna6(struct interface *ifp)
       olsr_prefix_to_netmask(&tmp_netmask, h->prefix_len);
       COPY_IP(&pair6->netmask, &tmp_netmask);
       pair6++;
-      curr_size += (2 * ipsize);
+      curr_size += (2 * olsr_cnf->ipsize);
       h = h->next;
     }
   
index 5f11310..eca2a20 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: build_msg.h,v 1.12 2005/02/02 19:59:18 kattemat Exp $
+ * $Id: build_msg.h,v 1.13 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #ifndef _BUILD_MSG_H
 
 #include "packet.h"
 #include "olsr_protocol.h"
+#include <time.h> /* For clock_t */
+
+void
+set_empty_tc_timer(clock_t);
+
+clock_t
+get_empty_tc_timer(void);
 
 olsr_bool
 queue_hello(struct hello_message *, struct interface *);
index 00d1839..b6cd1b6 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.46 2005/11/17 04:25:44 tlopatic Exp $
+ * $Id: olsrd_conf.c,v 1.47 2006/01/07 08:16:24 kattemat Exp $
  */
 
 
@@ -457,6 +457,14 @@ set_default_cnf(struct olsrd_config *cnf)
     cnf->lq_dinter = DEF_LQ_DIJK_INTER;
     cnf->lq_wsize = DEF_LQ_WSIZE;
     cnf->clear_screen = DEF_CLEAR_SCREEN;
+
+    cnf->del_gws = OLSR_FALSE;
+    cnf->will_int = 10 * HELLO_INTERVAL;
+    cnf->max_jitter = 0.0;
+    cnf->exit_value = EXIT_SUCCESS;
+    cnf->max_tc_vtime = 0.0;
+    cnf->ioctl_s = 0;
+    cnf->rts = 0;
 }
 
 
index 1a94007..382d9f7 100644 (file)
@@ -4,43 +4,8 @@ FILE *debug_handle;
 
 struct olsrd_config *olsr_cnf;
 
-olsr_u16_t system_tick_divider;
-
-int exit_value;
-
-
 /* Timer data */
 clock_t now_times;              /* current idea of times(2) reported uptime */
 struct timeval now;            /* current idea of time */
 struct tm *nowtm;              /* current idea of time (in tm) */
 
-olsr_bool disp_pack_in;         /* display incoming packet content? */
-olsr_bool disp_pack_out;        /* display outgoing packet content? */
-
-olsr_bool del_gws;
-
-float will_int;
-float max_jitter;
-
-size_t ipsize;
-
-union olsr_ip_addr main_addr;
-
-int olsr_udp_port;
-
-int ioctl_s;
-
-#if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
-int rts;
-#endif
-
-float max_tc_vtime;
-
-clock_t fwdtimer[MAX_IFS];     /* forwarding timer */
-
-int minsize;
-
-olsr_bool changes;                /* is set if changes occur in MPRS set */ 
-
-/* TC empty message sending */
-clock_t send_empty_tc;
index 4ddf369..b2f6f76 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.51 2006/01/04 15:51:19 kattemat Exp $
+ * $Id: defs.h,v 1.52 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -74,6 +74,7 @@
 #define UDP_IPV6_HDRSIZE        48
 #define MAX_IFS                 16
 
+#define MIN_PACKET_SIZE(ver)  (int)(sizeof(olsr_u8_t) * ((ver == AF_INET) ? 4 : 7))
 /* Debug helper macro */
 #ifdef DEBUG
 #define olsr_debug(lvl,format,args...) \
@@ -97,7 +98,7 @@ extern FILE *debug_handle;
 /* Provides a timestamp s1 milliseconds in the future
    according to system ticks returned by times(2) */
 #define GET_TIMESTAMP(s1) \
-        (now_times + ((s1) / system_tick_divider))
+        (now_times + ((s1) / olsr_cnf->system_tick_divider))
 
 #define TIMED_OUT(s1) \
         ((int)((s1) - now_times) < 0)
@@ -126,56 +127,11 @@ extern FILE *debug_handle;
 
 extern struct olsrd_config *olsr_cnf;
 
-/* Global tick resolution */
-extern olsr_u16_t system_tick_divider;
-
-extern int exit_value; /* Global return value for process termination */
-
-
 /* Timer data */
 extern clock_t now_times;              /* current idea of times(2) reported uptime */
 extern struct timeval now;             /* current idea of time */
 extern struct tm *nowtm;               /* current idea of time (in tm) */
 
-extern olsr_bool disp_pack_in;         /* display incoming packet content? */
-extern olsr_bool disp_pack_out;        /* display outgoing packet content? */
-
-extern olsr_bool del_gws;
-
-/*
- * Timer values
- */
-
-extern float will_int;
-extern float max_jitter;
-
-extern size_t ipsize;
-
-/* Main address of this node */
-extern union olsr_ip_addr main_addr;
-
-/* OLSR UPD port */
-extern int olsr_udp_port;
-
-/* The socket used for all ioctls */
-extern int ioctl_s;
-
-/* routing socket */
-#if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
-extern int rts;
-#endif
-
-extern float max_tc_vtime;
-
-extern clock_t fwdtimer[MAX_IFS];      /* forwarding timer */
-
-extern int minsize;
-
-extern olsr_bool changes;                /* is set if changes occur in MPRS set */ 
-
-/* TC empty message sending */
-extern clock_t send_empty_tc;
-
 /*
  *IPC functions
  *These are moved to a plugin soon
index a6bf76e..a1da5ab 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.23 2005/02/27 18:39:43 kattemat Exp $
+ * $Id: generate_msg.c,v 1.24 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "generate_msg.h"
@@ -86,7 +86,7 @@ generate_tc(void *p)
 
   olsr_build_tc_packet(&tcpacket);
 
-  if(queue_tc(&tcpacket, ifn) && TIMED_OUT(fwdtimer[ifn->if_nr]))
+  if(queue_tc(&tcpacket, ifn) && TIMED_OUT(ifn->fwdtimer))
     {
       set_buffer_timer(ifn);
     }
@@ -99,7 +99,7 @@ generate_mid(void *p)
 {
   struct interface *ifn = (struct interface *)p;
   
-  if(queue_mid(ifn) && TIMED_OUT(fwdtimer[ifn->if_nr]))
+  if(queue_mid(ifn) && TIMED_OUT(ifn->fwdtimer))
     {
       set_buffer_timer(ifn);
     }
@@ -113,7 +113,7 @@ generate_hna(void *p)
 {
   struct interface *ifn = (struct interface *)p;
   
-  if(queue_hna(ifn) && TIMED_OUT(fwdtimer[ifn->if_nr]))
+  if(queue_hna(ifn) && TIMED_OUT(ifn->fwdtimer))
     {
       set_buffer_timer(ifn);
     }
index bdd807e..ec4e0f7 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.27 2005/06/03 08:00:55 kattemat Exp $
+ * $Id: interfaces.c,v 1.28 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "defs.h"
@@ -89,7 +89,7 @@ ifinit()
       /* IP version 4 */
       memset(&addrsock, 0, sizeof (addrsock));
       addrsock.sin_family = AF_INET;
-      addrsock.sin_port = olsr_udp_port;
+      addrsock.sin_port = htons(OLSRPORT);
       (addrsock.sin_addr).s_addr = INADDR_ANY;
     }
   else
@@ -97,7 +97,7 @@ ifinit()
       /* IP version 6 */
       memset(&addrsock6, 0, sizeof (addrsock6));
       addrsock6.sin6_family = AF_INET6;
-      addrsock6.sin6_port = olsr_udp_port;
+      addrsock6.sin6_port = htons(OLSRPORT);
       //(addrsock6.sin6_addr).s_addr = IN6ADDR_ANY_INIT;
     }
 
index 2b9a1e6..0fbc1a4 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.31 2006/01/06 06:54:04 kattemat Exp $
+ * $Id: interfaces.h,v 1.32 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -45,6 +45,7 @@
 
 #include <sys/types.h>
 #include <sys/socket.h>
+#include <time.h>
 
 #include "olsr_types.h"
 
@@ -135,6 +136,8 @@ struct interface
   float         hello_etime;
   struct        vtimes valtimes;
 
+  clock_t       fwdtimer;                       /* Timeout for OLSR forwarding on this if */
+
   void          *libnet_ctx;                    /* libnet context(void to avoid dependency */
 
   struct        if_gen_property *gen_properties;/* Generic interface properties */
index 5520fcf..63c393c 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.27 2005/11/10 19:33:57 kattemat Exp $
+ * $Id: ipc_frontend.c,v 1.28 2006/01/07 08:16:20 kattemat Exp $
  */
 
 /*
@@ -497,7 +497,7 @@ ipc_send_net_info()
     net_msg->ipv6 = 1;
  
   /* Main addr */
-  COPY_IP(&net_msg->main_addr, &main_addr);
+  COPY_IP(&net_msg->main_addr, &olsr_cnf->main_addr);
 
 
   /*
index 38b18b5..4deb6b3 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.62 2005/11/17 04:25:44 tlopatic Exp $
+ * $Id: link_set.c,v 1.63 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -95,7 +95,7 @@ olsr_init_link_set()
 {
 
   /* Timers */
-  hold_time_neighbor = (NEIGHB_HOLD_TIME*1000) / system_tick_divider;
+  hold_time_neighbor = (NEIGHB_HOLD_TIME*1000) / olsr_cnf->system_tick_divider;
 
   olsr_register_timeout_function(&olsr_time_out_link_set);
   if(olsr_cnf->use_hysteresis)
@@ -981,7 +981,7 @@ static void update_packet_loss_worker(struct link_entry *entry, int lost)
       // XXX - we should check whether we actually
       // announce this neighbour
 
-      changes = OLSR_TRUE;
+      signal_link_changes(OLSR_TRUE);
     }
 }
 
index 4a48daa..4e03992 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: kernel_routes.c,v 1.18 2005/02/27 18:39:43 kattemat Exp $
+ * $Id: kernel_routes.c,v 1.19 2006/01/07 08:16:24 kattemat Exp $
  */
 
 
@@ -93,16 +93,12 @@ olsr_ioctl_add_route(struct rt_entry *destination)
   
   kernel_route.rt_metric = destination->rt_metric + 1;
 
-  /* 
-   * Thales Internet GW fix
-   */
-
-  if((del_gws) &&
+  if((olsr_cnf->del_gws) &&
      (destination->rt_dst.v4 == INADDR_ANY) &&
      (destination->rt_dst.v4 == INADDR_ANY))
     {
       delete_all_inet_gws();
-      del_gws = 0;
+      olsr_cnf->del_gws = OLSR_FALSE;
     }
 
   /*
@@ -128,7 +124,7 @@ olsr_ioctl_add_route(struct rt_entry *destination)
 
   //printf("\tiface: %s\n", kernel_route.rt_dev);    
   
-  tmp = ioctl(ioctl_s,SIOCADDRT,&kernel_route);
+  tmp = ioctl(olsr_cnf->ioctl_s,SIOCADDRT,&kernel_route);
   /*  kernel_route.rt_dev=*/
 
   /*
@@ -177,7 +173,7 @@ olsr_ioctl_add_route6(struct rt_entry *destination)
              destination->rt_metric + 1)
   
 
-  memset(&zeroaddr, 0, ipsize); /* Use for comparision */
+  memset(&zeroaddr, 0, olsr_cnf->ipsize); /* Use for comparision */
 
 
   memset(&kernel_route, 0, sizeof(struct in6_rtmsg));
@@ -189,7 +185,7 @@ olsr_ioctl_add_route6(struct rt_entry *destination)
   
   kernel_route.rtmsg_dst_len = destination->rt_mask.v6;
 
-  if(memcmp(&destination->rt_dst, &destination->rt_router, ipsize) != 0)
+  if(memcmp(&destination->rt_dst, &destination->rt_router, olsr_cnf->ipsize) != 0)
     {
       COPY_IP(&kernel_route.rtmsg_gateway, &destination->rt_router);
     }
@@ -208,11 +204,11 @@ olsr_ioctl_add_route6(struct rt_entry *destination)
   //OLSR_PRINTF(3, "Adding route to %s using gw ", olsr_ip_to_string((union olsr_ip_addr *)&kernel_route.rtmsg_dst))
   //OLSR_PRINTF(3, "%s\n", olsr_ip_to_string((union olsr_ip_addr *)&kernel_route.rtmsg_gateway))
 
-  if((tmp = ioctl(ioctl_s, SIOCADDRT, &kernel_route)) >= 0)
+  if((tmp = ioctl(olsr_cnf->ioctl_s, SIOCADDRT, &kernel_route)) >= 0)
     {
       if(olsr_cnf->open_ipc)
        {
-         if(memcmp(&destination->rt_router, &null_addr6, ipsize) != 0)
+         if(memcmp(&destination->rt_router, &null_addr6, olsr_cnf->ipsize) != 0)
            ipc_route_send_rtentry(&destination->rt_dst, 
                                   &destination->rt_router, 
                                   destination->rt_metric, 
@@ -274,7 +270,7 @@ olsr_ioctl_del_route(struct rt_entry *destination)
   //printf("\tiface: %s\n", kernel_route.rt_dev);    
   */
 
-  tmp = ioctl(ioctl_s, SIOCDELRT, &kernel_route);
+  tmp = ioctl(olsr_cnf->ioctl_s, SIOCDELRT, &kernel_route);
 
 
     /*
@@ -323,15 +319,15 @@ olsr_ioctl_del_route6(struct rt_entry *destination)
 
   kernel_route.rtmsg_dst_len = destination->rt_mask.v6;
 
-  memcpy(&kernel_route.rtmsg_dst, &destination->rt_dst, ipsize);
+  memcpy(&kernel_route.rtmsg_dst, &destination->rt_dst, olsr_cnf->ipsize);
 
-  memcpy(&kernel_route.rtmsg_gateway, &destination->rt_router, ipsize);
+  memcpy(&kernel_route.rtmsg_gateway, &destination->rt_router, olsr_cnf->ipsize);
 
   kernel_route.rtmsg_flags = destination->rt_flags;
   kernel_route.rtmsg_metric = destination->rt_metric;
 
 
-  tmp = ioctl(ioctl_s, SIOCDELRT,&kernel_route);
+  tmp = ioctl(olsr_cnf->ioctl_s, SIOCDELRT,&kernel_route);
 
 
     /*
@@ -406,7 +402,7 @@ delete_all_inet_gws()
       ((struct sockaddr_in *)&kernel_route.rt_gateway)->sin_addr.s_addr = INADDR_ANY;
       ((struct sockaddr_in *)&kernel_route.rt_gateway)->sin_family=AF_INET;
       
-      //memcpy(&kernel_route.rt_gateway, gw, ipsize);
+      //memcpy(&kernel_route.rt_gateway, gw, olsr_cnf->ipsize);
       
           
           
index 30f37dc..2d9c1eb 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.29 2005/09/17 20:48:50 kattemat Exp $
+ * $Id: net.c,v 1.30 2006/01/07 08:16:24 kattemat Exp $
  */
 
 
@@ -821,7 +821,7 @@ check_wireless_interface(char *ifname)
   memset(&ifr, 0, sizeof(ifr));
   strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
 
-  return (ioctl(ioctl_s, SIOCGIWNAME, &ifr) >= 0) ? 1 : 0;
+  return (ioctl(olsr_cnf->ioctl_s, SIOCGIWNAME, &ifr) >= 0) ? 1 : 0;
 }
 
 #if 0
@@ -874,7 +874,7 @@ calculate_if_metric(char *ifname)
       strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
       
       /* Get bit rate */
-      if(ioctl(ioctl_s, SIOCGIWRATE, &ifr) < 0)
+      if(ioctl(olsr_cnf->ioctl_s, SIOCGIWRATE, &ifr) < 0)
        {
          OLSR_PRINTF(1, "Not able to find rate for WLAN interface %s\n", ifname)
          return WEIGHT_WLAN_11MB;
@@ -897,7 +897,7 @@ calculate_if_metric(char *ifname)
       memset(&ifr, 0, sizeof(ifr));
       strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
 
-      if (ioctl(ioctl_s, SIOCGMIIPHY, &ifr) < 0) {
+      if (ioctl(olsr_cnf->ioctl_s, SIOCGMIIPHY, &ifr) < 0) {
        if (errno != ENODEV)
          OLSR_PRINTF(1, "SIOCGMIIPHY on '%s' failed: %s\n",
                      ifr.ifr_name, strerror(errno))
@@ -905,7 +905,7 @@ calculate_if_metric(char *ifname)
       }
 
       mii->reg_num = MII_BMCR;
-      if (ioctl(ioctl_s, SIOCGMIIREG, &ifr) < 0) {
+      if (ioctl(olsr_cnf->ioctl_s, SIOCGMIIREG, &ifr) < 0) {
        OLSR_PRINTF(1, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name,
                    strerror(errno))
        return WEIGHT_ETHERNET_DEFAULT;
@@ -947,14 +947,14 @@ is_if_link_up(char *ifname)
       memset(&ifr, 0, sizeof(ifr));
       strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
 
-      if (ioctl(ioctl_s, SIOCGMIIPHY, &ifr) < 0) {
+      if (ioctl(olsr_cnf->ioctl_s, SIOCGMIIPHY, &ifr) < 0) {
        if (errno != ENODEV)
          OLSR_PRINTF(1, "SIOCGMIIPHY on '%s' failed: %s\n",
                      ifr.ifr_name, strerror(errno))
        return WEIGHT_ETHERNET_DEFAULT;
       }
       mii->reg_num = MII_BMSR;
-      if (ioctl(ioctl_s, SIOCGMIIREG, &ifr) < 0) {
+      if (ioctl(olsr_cnf->ioctl_s, SIOCGMIIREG, &ifr) < 0) {
        OLSR_PRINTF(1, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name,
                    strerror(errno))
        return WEIGHT_ETHERNET_DEFAULT;
index b52cf8b..b99672d 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: local_hna_set.c,v 1.10 2005/02/27 18:39:43 kattemat Exp $
+ * $Id: local_hna_set.c,v 1.11 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "defs.h"
@@ -110,7 +110,7 @@ remove_local_hna6_entry(union olsr_ip_addr *net, olsr_u16_t prefix_len)
 
   while(h6)
     {
-      if((memcmp(net, &h6->net, ipsize) == 0) && 
+      if((memcmp(net, &h6->net, olsr_cnf->ipsize) == 0) && 
         (prefix_len == h6->prefix_len))
        {
          /* Dequeue */
index d5c83f7..a4dadd7 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_mpr.c,v 1.10 2005/11/29 18:37:58 kattemat Exp $
+ * $Id: lq_mpr.c,v 1.11 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "defs.h"
@@ -44,6 +44,7 @@
 #include "two_hop_neighbor_table.h"
 #include "link_set.h"
 #include "lq_mpr.h"
+#include "scheduler.h"
 
 void olsr_calculate_lq_mpr(void)
 {
@@ -176,5 +177,5 @@ void olsr_calculate_lq_mpr(void)
     }
 
   if (mpr_changes && olsr_cnf->tc_redundancy > 0)
-    changes = OLSR_TRUE;
+    signal_link_changes(OLSR_TRUE);
 }
index 01bf39d..711f0da 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_packet.c,v 1.19 2005/11/17 01:58:51 tlopatic Exp $
+ * $Id: lq_packet.c,v 1.20 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "olsr_protocol.h"
@@ -53,6 +53,7 @@
 #include "two_hop_neighbor_table.h"
 #include "hysteresis.h"
 #include "olsr.h"
+#include "build_msg.h"
 
 olsr_bool lq_tc_pending = OLSR_FALSE;
 
@@ -70,7 +71,7 @@ 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, &main_addr);
+  COPY_IP(&lq_hello->comm.orig, &olsr_cnf->main_addr);
 
   lq_hello->comm.ttl = 1;
   lq_hello->comm.hops = 0;
@@ -163,7 +164,7 @@ 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, &main_addr);
+  COPY_IP(&lq_tc->comm.orig, &olsr_cnf->main_addr);
 
   if (olsr_cnf->lq_fish > 0)
   {
@@ -181,7 +182,7 @@ 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, &main_addr);
+  COPY_IP(&lq_tc->from, &olsr_cnf->main_addr);
 
   lq_tc->ansn = get_local_ansn();
 
@@ -340,7 +341,7 @@ serialize_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
 
   // force signed comparison
 
-  if (rem < (int)(sizeof (struct lq_hello_info_header) + ipsize + 4))
+  if (rem < (int)(sizeof (struct lq_hello_info_header) + olsr_cnf->ipsize + 4))
   {
     net_output(outif);
 
@@ -370,7 +371,7 @@ serialize_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
               // we need space for an IP address plus link quality
               // information
 
-              req = ipsize + 4;
+              req = olsr_cnf->ipsize + 4;
 
               // no, we also need space for an info header, as this is the
               // first neighbor with the current neighor type and link type
@@ -425,7 +426,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);
-              size += ipsize;
+              size += olsr_cnf->ipsize;
 
               // add the corresponding link quality
 
@@ -500,7 +501,7 @@ serialize_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
 
   // force signed comparison
 
-  if (rem < (int)(ipsize + 4))
+  if (rem < (int)(olsr_cnf->ipsize + 4))
   {
     net_output(outif);
 
@@ -516,7 +517,7 @@ serialize_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
 
       // force signed comparison
 
-      if ((int)(size + ipsize + 4) > rem)
+      if ((int)(size + olsr_cnf->ipsize + 4) > rem)
         {
           // finalize the OLSR header
 
@@ -539,7 +540,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->main);
-      size += ipsize;
+      size += olsr_cnf->ipsize;
 
       // add the corresponding link quality
 
@@ -644,7 +645,7 @@ deserialize_lq_hello(struct lq_hello_message *lq_hello, void *ser)
                               "LQ_HELLO deserialization");
 
           COPY_IP(&neigh->addr, curr);
-          curr += ipsize;
+          curr += olsr_cnf->ipsize;
 
           neigh->link_quality = (double)*curr++ / 255.0;
           neigh->neigh_link_quality = (double)*curr++ / 255.0;
@@ -702,7 +703,7 @@ deserialize_lq_tc(struct lq_tc_message *lq_tc, void *ser,
                           "LQ_TC deserialization");
 
       COPY_IP(&neigh->main, curr);
-      curr += ipsize;
+      curr += olsr_cnf->ipsize;
 
       neigh->link_quality = (double)*curr++ / 255.0;
       neigh->neigh_link_quality = (double)*curr++ / 255.0;
@@ -764,7 +765,7 @@ olsr_output_lq_tc(void *para)
     {
       // initialize timer
 
-      send_empty_tc = GET_TIMESTAMP((max_tc_vtime * 3) * 1000);
+      set_empty_tc_timer(GET_TIMESTAMP((olsr_cnf->max_tc_vtime * 3) * 1000));
 
       prev_empty = 1;
 
@@ -775,14 +776,14 @@ olsr_output_lq_tc(void *para)
 
   // c) this is not the first empty message, send if timer hasn't fired
 
-  else if (!TIMED_OUT(send_empty_tc))
+  else if (!TIMED_OUT(get_empty_tc_timer()))
     serialize_lq_tc(&lq_tc, outif);
 
   // destroy internal format
 
   destroy_lq_tc(&lq_tc);
 
-  if(net_output_pending(outif) && TIMED_OUT(fwdtimer[outif->if_nr]))
+  if(net_output_pending(outif) && TIMED_OUT(outif->fwdtimer))
     set_buffer_timer(outif);
 }
 
index 077746b..ab0c311 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_route.c,v 1.40 2005/11/29 18:37:58 kattemat Exp $
+ * $Id: lq_route.c,v 1.41 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "defs.h"
@@ -74,7 +74,7 @@ struct dijk_vertex
 
 static int avl_comp_ipv6(void *ip1, void *ip2)
 {
-  return memcmp(ip1, ip2, ipsize);
+  return memcmp(ip1, ip2, olsr_cnf->ipsize);
 }
 
 static int avl_comp_ipv4(void *ip1, void *ip2)
@@ -205,7 +205,7 @@ static void create_vertex_list_rec(struct list *vertex_list,
 
   // add the vertex to the list, if it's not us
 
-  if ((*comp)(&main_addr, node->key) != 0)
+  if ((*comp)(&olsr_cnf->main_addr, node->key) != 0)
   {
     vert->node.data = vert;
     list_add_tail(vertex_list, &vert->node);
@@ -223,7 +223,7 @@ static void create_vertex_list(struct avl_tree *vertex_tree,
 
   // make ourselves the first vertex in the list
 
-  node = avl_find(vertex_tree, &main_addr);
+  node = avl_find(vertex_tree, &olsr_cnf->main_addr);
   vert = node->data;
 
   vert->node.data = vert;
@@ -370,7 +370,7 @@ void olsr_calculate_lq_routing_table(void)
 #endif
   struct interface *inter;
 
-  if (ipsize == 4)
+  if (olsr_cnf->ipsize == 4)
     avl_comp = avl_comp_ipv4;
 
   else
@@ -383,7 +383,7 @@ void olsr_calculate_lq_routing_table(void)
 
   // add ourselves to the vertex tree
 
-  add_vertex(&vertex_tree, &main_addr, 0.0);
+  add_vertex(&vertex_tree, &olsr_cnf->main_addr, 0.0);
 
   // add our neighbours
 
@@ -434,7 +434,7 @@ void olsr_calculate_lq_routing_table(void)
           {
             etx = 1.0 / (link->loss_link_quality2 * link->neigh_link_quality2);
 
-            add_edge(&vertex_tree, &neigh->neighbor_main_addr, &main_addr, etx);
+            add_edge(&vertex_tree, &neigh->neighbor_main_addr, &olsr_cnf->main_addr, etx);
           }
       }
 
index 405c71a..a2220dd 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: main.c,v 1.83 2005/09/29 05:53:34 kattemat Exp $
+ * $Id: main.c,v 1.84 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include <unistd.h>
@@ -54,6 +54,7 @@
 #include "socket_parser.h"
 #include "apm.h"
 #include "net_os.h"
+#include "build_msg.h"
 
 #ifdef WIN32
 #define close(x) closesocket(x)
@@ -76,9 +77,6 @@ olsr_reconfigure(int);
 static void
 print_usage(void);
 
-static void
-set_default_values(void);
-
 static int
 set_default_ifcnfs(struct olsr_if *, struct if_config_options *);
 
@@ -114,9 +112,6 @@ main(int argc, char *argv[])
   setbuf(stderr, NULL);
 
 #ifndef WIN32
-  /* Initialize tick resolution */
-  system_tick_divider = 1000/sysconf(_SC_CLK_TCK);
-
   /* Check if user is root */
   if(getuid() || getgid())
     {
@@ -124,8 +119,6 @@ main(int argc, char *argv[])
       exit(EXIT_FAILURE);
     }
 #else
-  system_tick_divider = 1;
-
   DisableIcmpRedirects();
 
   if (WSAStartup(0x0202, &WsaData))
@@ -141,9 +134,6 @@ main(int argc, char *argv[])
   /* Open syslog */
   olsr_openlog("olsrd");
 
-  /* Set default values */
-  set_default_values();
   /* Get initial timestep */
   nowtm = NULL;
   while (nowtm == NULL)
@@ -151,9 +141,6 @@ main(int argc, char *argv[])
       nowtm = localtime((time_t *)&now.tv_sec);
     }
     
-  /* The port to use for OLSR traffic */
-  olsr_udp_port = htons(OLSRPORT);
-    
   printf("\n *** %s ***\n Build date: %s\n http://www.olsr.org\n\n", 
         SOFTWARE_VERSION, 
         __DATE__);
@@ -219,6 +206,13 @@ main(int argc, char *argv[])
       exit(EXIT_FAILURE);
     }
 
+  /* Initialize tick resolution */
+#ifndef WIN32
+  olsr_cnf->system_tick_divider = 1000/sysconf(_SC_CLK_TCK);
+#else
+  olsr_cnf->system_tick_divider = 1;
+#endif
+
   /*
    * Process olsrd options.
    */
@@ -257,7 +251,7 @@ main(int argc, char *argv[])
   /*
    *socket for icotl calls
    */
-  if ((ioctl_s = socket(olsr_cnf->ip_version, SOCK_DGRAM, 0)) < 0) 
+  if ((olsr_cnf->ioctl_s = socket(olsr_cnf->ip_version, SOCK_DGRAM, 0)) < 0) 
 
     {
       olsr_syslog(OLSR_LOG_ERR, "ioctl socket: %m");
@@ -265,13 +259,16 @@ main(int argc, char *argv[])
     }
 
 #if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
-  if ((rts = socket(PF_ROUTE, SOCK_RAW, 0)) < 0)
+  if ((olsr_cnf->rts = socket(PF_ROUTE, SOCK_RAW, 0)) < 0)
     {
       olsr_syslog(OLSR_LOG_ERR, "routing socket: %m");
       olsr_exit(__func__, 0);
     }
 #endif
 
+  /* Init empty TC timer */
+  set_empty_tc_timer(GET_TIMESTAMP(0));
+
   /*
    *enable ip forwarding on host
    */
@@ -304,22 +301,20 @@ main(int argc, char *argv[])
        {
          olsr_cnf->willingness = olsr_calculate_willingness();
 
-         OLSR_PRINTF(1, "Willingness set to %d - next update in %.1f secs\n", olsr_cnf->willingness, will_int)
+         OLSR_PRINTF(1, "Willingness set to %d - next update in %.1f secs\n", olsr_cnf->willingness, olsr_cnf->will_int)
        }
     }
 
-  /* Set ipsize and minimum packetsize */
+  /* Set ipsize */
   if(olsr_cnf->ip_version == AF_INET6)
     {
       OLSR_PRINTF(1, "Using IP version 6\n")
-      ipsize = sizeof(struct in6_addr);
-      minsize = (int)sizeof(olsr_u8_t) * 7; /* Minimum packetsize IPv6 */
+      olsr_cnf->ipsize = sizeof(struct in6_addr);
     }
   else
     {
       OLSR_PRINTF(1, "Using IP version 4\n")
-      ipsize = sizeof(olsr_u32_t);
-      minsize = (int)sizeof(olsr_u8_t) * 4; /* Minimum packetsize IPv4 */
+      olsr_cnf->ipsize = sizeof(olsr_u32_t);
     }
 
   /* Initialize net */
@@ -374,7 +369,7 @@ main(int argc, char *argv[])
   /* Load plugins */
   olsr_load_plugins();
 
-  OLSR_PRINTF(1, "Main address: %s\n\n", olsr_ip_to_string(&main_addr))
+  OLSR_PRINTF(1, "Main address: %s\n\n", olsr_ip_to_string(&olsr_cnf->main_addr))
 
   /* Start syslog entry */
   olsr_syslog(OLSR_LOG_INFO, "%s successfully started", SOFTWARE_VERSION);
@@ -480,44 +475,20 @@ olsr_shutdown(int signal)
   restore_settings(olsr_cnf->ip_version);
 
   /* ioctl socket */
-  close(ioctl_s);
+  close(olsr_cnf->ioctl_s);
 
 #if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
   /* routing socket */
-  close(rts);
+  close(olsr_cnf->rts);
 #endif
 
   olsr_syslog(OLSR_LOG_INFO, "%s stopped", SOFTWARE_VERSION);
 
   OLSR_PRINTF(1, "\n <<<< %s - terminating >>>>\n           http://www.olsr.org\n", SOFTWARE_VERSION)
 
-  exit(exit_value);
-}
-
-
-
-
-
-/**
- *Sets the default values of variables at startup
- *
- */
-static void
-set_default_values()
-{
-  exit_value = EXIT_SUCCESS; 
-  /* If the application exits by signal it is concidered success,
-   * if not, exit_value is set by the function calling olsr_exit.
-   */
-
-  will_int = 10 * HELLO_INTERVAL; /* Willingness update interval */
-
-  /* Initialize empty TC timer */
-  send_empty_tc = GET_TIMESTAMP(0);
+  exit(olsr_cnf->exit_value);
 }
 
-
-
 /**
  * Print the command line usage
  */
@@ -740,7 +711,7 @@ olsr_process_arguments(int argc, char *argv[],
        */
       if (strcmp(*argv, "-dispin") == 0) 
        {
-         disp_pack_in = OLSR_TRUE;
+         parser_set_disp_pack_in(OLSR_TRUE);
          continue;
        }
 
@@ -749,7 +720,7 @@ olsr_process_arguments(int argc, char *argv[],
        */
       if (strcmp(*argv, "-dispout") == 0) 
        {
-         disp_pack_out = OLSR_TRUE;
+         net_set_disp_pack_out(OLSR_TRUE);
          continue;
        }
 
@@ -819,7 +790,7 @@ olsr_process_arguments(int argc, char *argv[],
        */
       if (strcmp(*argv, "-delgw") == 0) 
        {
-         del_gws = OLSR_TRUE;
+         olsr_cnf->del_gws = OLSR_TRUE;
          continue;
        }
 
index f9127d8..2e689be 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.14 2005/02/27 10:43:38 kattemat Exp $
+ * $Id: mpr.c,v 1.15 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "defs.h"
@@ -44,6 +44,7 @@
 #include "two_hop_neighbor_table.h"
 #include "olsr.h"
 #include "neighbor_table.h"
+#include "scheduler.h"
 
 /* Begin:
  * Prototypes for internal functions 
@@ -541,7 +542,7 @@ olsr_calculate_mpr()
     {
       OLSR_PRINTF(3, "CHANGES IN MPR SET\n")
       if(olsr_cnf->tc_redundancy > 0)
-       changes = OLSR_TRUE;
+       signal_link_changes(OLSR_TRUE);
     }
 
 }
index 9bbed1c..e540beb 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: mpr_selector_set.c,v 1.14 2005/12/16 08:21:59 kattemat Exp $
+ * $Id: mpr_selector_set.c,v 1.15 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -186,7 +186,7 @@ olsr_update_mprs_set(union olsr_ip_addr *addr, float vtime)
     {
       olsr_add_mpr_selector(addr, vtime);
       retval = 1;
-      changes = OLSR_TRUE;
+      signal_link_changes(OLSR_TRUE);
     }
   else
     {
@@ -226,7 +226,7 @@ olsr_time_out_mprs_set()
 
          /* Delete entry */
          free(mprs_to_delete);
-         changes = OLSR_TRUE;
+         signal_link_changes(OLSR_TRUE);
        }
       else
        mprs = mprs->next;
index 963ca5a..43a8ce8 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: neighbor_table.c,v 1.29 2005/11/29 18:37:58 kattemat Exp $
+ * $Id: neighbor_table.c,v 1.30 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -364,7 +364,7 @@ update_neighbor_status(struct neighbor_entry *entry, int link)
          changes_neighborhood = OLSR_TRUE;
          changes_topology = OLSR_TRUE;
          if(olsr_cnf->tc_redundancy > 1)
-           changes = OLSR_TRUE;
+           signal_link_changes(OLSR_TRUE);
        }
       entry->status = SYM;
     }
@@ -375,7 +375,7 @@ update_neighbor_status(struct neighbor_entry *entry, int link)
          changes_neighborhood = OLSR_TRUE;
          changes_topology = OLSR_TRUE;
          if(olsr_cnf->tc_redundancy > 1)
-           changes = OLSR_TRUE;
+           signal_link_changes(OLSR_TRUE);
        }
       /* else N_status is set to NOT_SYM */
       entry->status = NOT_SYM;
index db39690..5da4b25 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net_olsr.c,v 1.9 2006/01/06 07:21:04 kattemat Exp $
+ * $Id: net_olsr.c,v 1.10 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "net_olsr.h"
@@ -54,6 +54,9 @@
 
 extern olsr_bool lq_tc_pending;
 
+static olsr_bool disp_pack_out = OLSR_FALSE;
+
+
 #ifdef WIN32
 #define perror(x) WinSockPError(x)
 void
@@ -102,6 +105,13 @@ get_libnet_errbuf()
 }
 #endif
 
+
+void
+net_set_disp_pack_out(olsr_bool val)
+{
+  disp_pack_out = val;
+}
+
 void
 init_net()
 {
@@ -440,7 +450,7 @@ net_output(struct interface *ifp)
       sin = &dst;
 
       if (sin->sin_port == 0)
-       sin->sin_port = olsr_udp_port;
+       sin->sin_port = htons(OLSRPORT);
     }
   else
     {
@@ -595,7 +605,7 @@ olsr_prefix_to_netmask(union olsr_ip_addr *adr, olsr_u16_t prefix)
   p = prefix;
   i = 0;
 
-  memset(adr, 0, ipsize);
+  memset(adr, 0, olsr_cnf->ipsize);
 
   for(;p > 0; p -= 8)
     {
index 5c66a9a..6100db6 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net_olsr.h,v 1.2 2006/01/06 06:54:37 kattemat Exp $
+ * $Id: net_olsr.h,v 1.3 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -74,6 +74,9 @@ get_libnet_errbuf(void);
 #endif
 
 void
+net_set_disp_pack_out(olsr_bool);
+
+void
 init_net(void);
 
 int
index 0ce1a7e..ee7d9cd 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsr.c,v 1.47 2005/11/17 04:25:44 tlopatic Exp $
+ * $Id: olsr.c,v 1.48 2006/01/07 08:16:20 kattemat Exp $
  */
 
 /**
@@ -427,9 +427,9 @@ set_buffer_timer(struct interface *ifn)
       
   /* Set timer */
   jitter = (float) random()/RAND_MAX;
-  jitter *= max_jitter;
+  jitter *= olsr_cnf->max_jitter;
 
-  fwdtimer[ifn->if_nr] = GET_TIMESTAMP(jitter*1000);
+  ifn->fwdtimer = GET_TIMESTAMP(jitter*1000);
 
 }
 
@@ -440,7 +440,7 @@ olsr_init_willingness()
 {
   if(olsr_cnf->willingness_auto)
     olsr_register_scheduler_event(&olsr_update_willingness, 
-                                 NULL, will_int, will_int, NULL);
+                                 NULL, olsr_cnf->will_int, olsr_cnf->will_int, NULL);
 }
 
 void
@@ -584,7 +584,7 @@ olsr_exit(const char *msg, int val)
   OLSR_PRINTF(1, "OLSR EXIT: %s\n", msg)
   olsr_syslog(OLSR_LOG_ERR, "olsrd exit: %s\n", msg);
   fflush(stdout);
-  exit_value = val;
+  olsr_cnf->exit_value = val;
 
   raise(SIGTERM);
 }
index 48e3324..eefd46a 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsr_cfg.h,v 1.28 2006/01/04 19:05:03 kattemat Exp $
+ * $Id: olsr_cfg.h,v 1.29 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -219,6 +219,19 @@ struct olsrd_config
   struct ipc_net           *ipc_nets;
   struct olsr_if           *interfaces;
   olsr_u16_t               ifcnt;
+
+  /* Stuff set by olsrd */
+  size_t                   ipsize;               /* Size of address */
+  olsr_u16_t               system_tick_divider;  /* Tick resolution */
+  olsr_bool                del_gws;              /* Delete InternetGWs at startup */
+  union olsr_ip_addr       main_addr;            /* Main address of this node */
+  float                    will_int;
+  float                    max_jitter;
+  int                      exit_value; /* Global return value for process termination */
+  float                    max_tc_vtime;
+
+  int                      ioctl_s;              /* Socket used for ioctl calls */
+  int                      rts;                  /* Socket used for route changes on BSDs */
 };
 
 #if defined __cplusplus
index 9417d13..a124523 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsr_protocol.h,v 1.19 2005/10/11 14:55:55 kattemat Exp $
+ * $Id: olsr_protocol.h,v 1.20 2006/01/07 08:16:20 kattemat Exp $
  */
 
 /*
  * Macros for comparing and copying IP addresses
  */
 
-#define COMP_IP(ip1, ip2) (!memcmp(ip1, ip2, ipsize))
+#define COMP_IP(ip1, ip2) (!memcmp(ip1, ip2, olsr_cnf->ipsize))
 
-#define COPY_IP(to, from) memcpy(to, from, ipsize)
+#define COPY_IP(to, from) memcpy(to, from, olsr_cnf->ipsize)
 
 
 
index 5fdc286..f7c53aa 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: packet.c,v 1.20 2005/02/27 10:43:38 kattemat Exp $
+ * $Id: packet.c,v 1.21 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
 #include "mpr.h"
 #include "olsr.h"
 #include "neighbor_table.h"
+#include "build_msg.h"
 
 static olsr_bool sending_tc = OLSR_FALSE;
 
-
-
 /**
  *Free the memory allocated for a HELLO packet.
  *
@@ -113,7 +112,7 @@ olsr_build_hello_packet(struct hello_message *message, struct interface *outif)
   /* Set TTL */
 
   message->ttl = 1;  
-  COPY_IP(&message->source_addr, &main_addr);
+  COPY_IP(&message->source_addr, &olsr_cnf->main_addr);
 
 #ifdef DEBUG
       OLSR_PRINTF(5, "On link:\n")
@@ -355,8 +354,8 @@ olsr_build_tc_packet(struct tc_message *message)
   message->ttl = MAX_TTL;
   message->ansn = get_local_ansn();
 
-  COPY_IP(&message->originator, &main_addr);
-  COPY_IP(&message->source_addr, &main_addr);
+  COPY_IP(&message->originator, &olsr_cnf->main_addr);
+  COPY_IP(&message->source_addr, &olsr_cnf->main_addr);
   
 
   /* Loop trough all neighbors */  
@@ -430,7 +429,7 @@ olsr_build_tc_packet(struct tc_message *message)
        {
          /* Send empty TC */
          OLSR_PRINTF(3, "No more MPR selectors - will send empty TCs\n")
-         send_empty_tc = GET_TIMESTAMP((max_tc_vtime*3)*1000);
+         set_empty_tc_timer(GET_TIMESTAMP((olsr_cnf->max_tc_vtime*3)*1000));
 
          sending_tc = OLSR_FALSE;
        }
index f5c1b67..a9070b8 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: parser.c,v 1.29 2005/11/19 08:49:44 kattemat Exp $
+ * $Id: parser.c,v 1.30 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "parser.h"
@@ -65,6 +65,14 @@ struct parse_function_entry *parse_functions;
 
 static char inbuf[MAXMESSAGESIZE+1];
 
+static olsr_bool disp_pack_in = OLSR_FALSE;
+
+void
+parser_set_disp_pack_in(olsr_bool val)
+{
+  disp_pack_in = val;
+}
+
 /**
  *Initialize the parser. 
  *
@@ -160,7 +168,7 @@ parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip
 
   count = size - ((char *)m - (char *)olsr);
 
-  if (count < minsize)
+  if (count < MIN_PACKET_SIZE(olsr_cnf->ip_version))
     return;
 
   if (ntohs(olsr->olsr_packlen) != size)
@@ -215,7 +223,7 @@ parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip
     {
 
       processed = 0;      
-      if (count < minsize)
+      if (count < MIN_PACKET_SIZE(olsr_cnf->ip_version))
        break;
       
       if(olsr_cnf->ip_version == AF_INET)
@@ -270,7 +278,7 @@ parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip
        */
 
       /* Should be the same for IPv4 and IPv6 */
-      if(COMP_IP(&m->v4.originator, &main_addr))
+      if(COMP_IP(&m->v4.originator, &olsr_cnf->main_addr))
        {
 #ifdef DEBUG
          OLSR_PRINTF(3, "Not processing message originating from us!\n")
@@ -310,7 +318,7 @@ parse_packet(struct olsr *olsr, int size, struct interface *in_if, union olsr_ip
                      olsr_ip_to_string(&unkpacket.originator))
 
          /* Forward message */
-         if(!COMP_IP(&unkpacket.originator, &main_addr))
+         if(!COMP_IP(&unkpacket.originator, &olsr_cnf->main_addr))
            {         
              /* Forward */
              olsr_forward_message(m, 
@@ -440,7 +448,7 @@ olsr_input_hostemu(int fd)
   /* Host emulator receives IP address first to emulate
      direct link */
 
-  if((cc = recv(fd, from_addr.v6.s6_addr, ipsize, 0)) != (int)ipsize)
+  if((cc = recv(fd, from_addr.v6.s6_addr, olsr_cnf->ipsize, 0)) != (int)olsr_cnf->ipsize)
     {
       fprintf(stderr, "Error receiving host-client IP hook(%d) %s!\n", cc, strerror(errno));
       COPY_IP(&from_addr, &((struct olsr *)inbuf)->olsr_msg->originator);
index ba4520c..7d9f8ca 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: parser.h,v 1.10 2005/05/30 13:13:38 kattemat Exp $
+ * $Id: parser.h,v 1.11 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -60,6 +60,9 @@ struct parse_function_entry
 extern struct parse_function_entry *parse_functions;
 
 void
+parser_set_disp_pack_in(olsr_bool);
+
+void
 olsr_init_parser(void);
 
 void 
index b4ceecd..a8714fa 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: print_packet.c,v 1.8 2005/11/19 08:49:44 kattemat Exp $
+ * $Id: print_packet.c,v 1.9 2006/01/07 08:16:20 kattemat Exp $
  */
 
 #include "print_packet.h"
@@ -285,7 +285,7 @@ print_hellomsg_lq(FILE *handle, olsr_u8_t *data, olsr_16_t totsize)
               (char *)haddr < (char *)hinf + ntohs(hinf->size); 
               haddr = (union olsr_ip_addr *)&haddr->v6.s6_addr[8])
            {
-             olsr_u8_t *quality = (olsr_u8_t *)haddr + ipsize;
+             olsr_u8_t *quality = (olsr_u8_t *)haddr + olsr_cnf->ipsize;
              fprintf(handle, "    ++ %s\n", olsr_ip_to_string(haddr));
              fprintf(handle, "    ++ LQ = %d, RLQ = %d\n", quality[0], quality[1]);
            }
@@ -313,7 +313,7 @@ print_hellomsg_lq(FILE *handle, olsr_u8_t *data, olsr_16_t totsize)
               (char *)haddr < (char *)hinf6 + ntohs(hinf6->size) + 4; 
               haddr++)
            {
-             olsr_u8_t *quality = (olsr_u8_t *)haddr + ipsize;
+             olsr_u8_t *quality = (olsr_u8_t *)haddr + olsr_cnf->ipsize;
              fprintf(handle, "    ++ %s\n", olsr_ip_to_string(haddr));
              fprintf(handle, "    ++ LQ = %d, RLQ = %d\n", quality[0], quality[1]);
            }
@@ -335,12 +335,12 @@ print_tcmsg_lq(FILE *handle, olsr_u8_t *data, olsr_16_t totsize)
   while(remsize)
     {
       fprintf(handle, "    +Neighbor: %s\n", olsr_ip_to_string((union olsr_ip_addr *) data));
-      data += ipsize;
+      data += olsr_cnf->ipsize;
       fprintf(handle, "    +LQ: %d, ", *data);
       data += 1;
       fprintf(handle, "RLQ: %d\n", *data);
       data += 2;
-      remsize -= (ipsize + 4);
+      remsize -= (olsr_cnf->ipsize + 4);
     }
 
 }
@@ -359,9 +359,9 @@ print_tcmsg(FILE *handle, olsr_u8_t *data, olsr_16_t totsize)
   while(remsize)
     {
       fprintf(handle, "    +Neighbor: %s\n", olsr_ip_to_string((union olsr_ip_addr *) data));
-      data += ipsize;
+      data += olsr_cnf->ipsize;
 
-      remsize -= ipsize;
+      remsize -= olsr_cnf->ipsize;
     }
 
 }
@@ -375,11 +375,11 @@ print_hnamsg(FILE *handle, olsr_u8_t *data, olsr_16_t totsize)
   while(remsize)
     {
       fprintf(handle, "    +Network: %s\n", olsr_ip_to_string((union olsr_ip_addr *) data));
-      data += ipsize;
+      data += olsr_cnf->ipsize;
       fprintf(handle, "    +Netmask: %s\n", olsr_ip_to_string((union olsr_ip_addr *) data));
-      data += ipsize;
+      data += olsr_cnf->ipsize;
 
-      remsize -= (ipsize*2);
+      remsize -= (olsr_cnf->ipsize*2);
     }
 
 }
@@ -392,7 +392,7 @@ print_midmsg(FILE *handle, olsr_u8_t *data, olsr_16_t totsize)
   while(remsize)
     {
       fprintf(handle, "    +Alias: %s\n", olsr_ip_to_string((union olsr_ip_addr *) data));
-      data += ipsize;
-      remsize -= ipsize;
+      data += olsr_cnf->ipsize;
+      remsize -= olsr_cnf->ipsize;
     }
 }
index c2809de..d3e9c3c 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: process_package.c,v 1.36 2005/11/29 18:38:40 kattemat Exp $
+ * $Id: process_package.c,v 1.37 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -52,6 +52,7 @@
 #include "parser.h"
 #include "duplicate_set.h"
 #include "rebuild_packet.h"
+#include "scheduler.h"
 
 
 /**
@@ -142,7 +143,7 @@ olsr_hello_tap(struct hello_message *message, struct interface *in_if,
           // XXX - we should check whether we actually
           // announce this neighbour
 
-          changes = OLSR_TRUE;
+         signal_link_changes(OLSR_TRUE);
         }
     }
   
index 0e4b1d1..82dc765 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: scheduler.c,v 1.33 2005/12/29 22:34:37 kattemat Exp $
+ * $Id: scheduler.c,v 1.34 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -63,8 +63,16 @@ static float pollrate;
 static struct timeout_entry *timeout_functions;
 static struct event_entry *event_functions;
 
+static olsr_bool link_changes; /* is set if changes occur in MPRS set */ 
 
-static void trigger_dijkstra(void *dummy)
+void
+signal_link_changes(olsr_bool val)
+{
+  link_changes = val;
+}
+
+static void 
+trigger_dijkstra(void *dummy)
 {
   OLSR_PRINTF(3, "Triggering Dijkstra\n");
 
@@ -107,6 +115,8 @@ scheduler()
   /* Global buffer for times(2) calls */
   struct tms tms_buf;
  
+  link_changes = OLSR_FALSE;
+
   if(olsr_cnf->lq_level > 1 && olsr_cnf->lq_dinter > 0.0)
     olsr_register_scheduler_event(trigger_dijkstra, NULL, olsr_cnf->lq_dinter, 0, NULL);
 
@@ -117,7 +127,7 @@ scheduler()
   interval.tv_usec = interval_usec % 1000000;
 
   OLSR_PRINTF(1, "Scheduler started - polling every %0.2f seconds\n", pollrate)
-  OLSR_PRINTF(3, "Max jitter is %f\n\n", max_jitter)
+  OLSR_PRINTF(3, "Max jitter is %f\n\n", olsr_cnf->max_jitter)
 
   /* Main scheduler event loop */
   for(;;)
@@ -152,11 +162,11 @@ scheduler()
 
 
       /* Check for changes in topology */
-      if(changes)
+      if(link_changes)
         {
          OLSR_PRINTF(3, "ANSN UPDATED %d\n\n", get_local_ansn())
          increase_local_ansn();
-          changes = OLSR_FALSE;
+          link_changes = OLSR_FALSE;
        }
 
 
@@ -179,7 +189,7 @@ scheduler()
 
              /* Set jitter */
              entry->since_last = (float) random()/RAND_MAX;
-             entry->since_last *= max_jitter;
+             entry->since_last *= olsr_cnf->max_jitter;
              
              /* Reset trigger */
              if(entry->trigger != NULL)
@@ -197,7 +207,7 @@ scheduler()
       /* looping trough interfaces and emmittin pending data */
       for (ifn = ifnet; ifn ; ifn = ifn->int_next) 
        { 
-         if(net_output_pending(ifn) && TIMED_OUT(fwdtimer[ifn->if_nr])) 
+         if(net_output_pending(ifn) && TIMED_OUT(ifn->fwdtimer)) 
            net_output(ifn);
        }
 
@@ -205,8 +215,8 @@ scheduler()
       end_of_loop = times(&tms_buf);
 
       //printf("Tick diff: %d\n", end_of_loop - now_times);
-      time_used.tv_sec = ((end_of_loop - now_times) * system_tick_divider) / 1000;
-      time_used.tv_usec = ((end_of_loop - now_times) * system_tick_divider) % 1000;
+      time_used.tv_sec = ((end_of_loop - now_times) * olsr_cnf->system_tick_divider) / 1000;
+      time_used.tv_usec = ((end_of_loop - now_times) * olsr_cnf->system_tick_divider) % 1000;
 
       //printf("Time used: %d.%04d\n", time_used.tv_sec, time_used.tv_usec);
 
index 1bd5df5..9f5432a 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: scheduler.h,v 1.11 2005/03/06 19:33:35 kattemat Exp $
+ * $Id: scheduler.h,v 1.12 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -68,6 +68,9 @@ struct event_entry
   struct event_entry *next;
 };
 
+void
+signal_link_changes(olsr_bool);
+
 int
 olsr_register_timeout_function(void (*)(void));
 
index bf86251..d034382 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: tc_set.c,v 1.23 2005/11/17 04:25:44 tlopatic Exp $
+ * $Id: tc_set.c,v 1.24 2006/01/07 08:16:20 kattemat Exp $
  */
 
 
@@ -59,8 +59,6 @@ olsr_init_tc()
 {
   int index;
  
-  changes = OLSR_FALSE;
-
   OLSR_PRINTF(5, "TC: init topo\n")
 
   olsr_register_timeout_function(&olsr_time_out_tc_set);
index 690f046..cb3aaae 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: ifnet.c,v 1.32 2006/01/06 06:54:04 kattemat Exp $
+ * $Id: ifnet.c,v 1.33 2006/01/07 08:16:24 kattemat Exp $
  */
 
 
@@ -82,7 +82,7 @@ set_flag(char *ifname, short flag)
   strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
 
   /* Get flags */
-  if (ioctl(ioctl_s, SIOCGIFFLAGS, &ifr) < 0) 
+  if (ioctl(olsr_cnf->ioctl_s, SIOCGIFFLAGS, &ifr) < 0) 
     {
       fprintf(stderr,"ioctl (get interface flags)");
       return -1;
@@ -97,7 +97,7 @@ set_flag(char *ifname, short flag)
       /* Add UP */
       ifr.ifr_flags |= (IFF_UP | IFF_RUNNING);
       /* Set flags + UP */
-      if(ioctl(ioctl_s, SIOCSIFFLAGS, &ifr) < 0)
+      if(ioctl(olsr_cnf->ioctl_s, SIOCSIFFLAGS, &ifr) < 0)
        {
          fprintf(stderr, "ERROR(%s): %s\n", ifr.ifr_name, strerror(errno));
          return -1;
@@ -173,7 +173,7 @@ chk_if_changed(struct olsr_if *iface)
 
 
   /* Get flags (and check if interface exists) */
-  if (ioctl(ioctl_s, SIOCGIFFLAGS, &ifr) < 0) 
+  if (ioctl(olsr_cnf->ioctl_s, SIOCGIFFLAGS, &ifr) < 0) 
     {
       OLSR_PRINTF(3, "No such interface: %s\n", iface->name)
       goto remove_interface;
@@ -224,7 +224,7 @@ chk_if_changed(struct olsr_if *iface)
     ifp->int_metric = calculate_if_metric(ifr.ifr_name);
 
   /* Get MTU */
-  if (ioctl(ioctl_s, SIOCGIFMTU, &ifr) < 0)
+  if (ioctl(olsr_cnf->ioctl_s, SIOCGIFMTU, &ifr) < 0)
     ifp->int_mtu = 0;
   else
     {
@@ -267,22 +267,22 @@ chk_if_changed(struct olsr_if *iface)
       OLSR_PRINTF(3, "\tAddress: %s\n", ip6_to_string(&tmp_saddr6.sin6_addr))
 #endif
 
-      if(memcmp(&tmp_saddr6.sin6_addr, &ifp->int6_addr.sin6_addr, ipsize) != 0)
+      if(memcmp(&tmp_saddr6.sin6_addr, &ifp->int6_addr.sin6_addr, olsr_cnf->ipsize) != 0)
        {
          OLSR_PRINTF(1, "New IP address for %s:\n", ifr.ifr_name)
          OLSR_PRINTF(1, "\tOld: %s\n", ip6_to_string(&ifp->int6_addr.sin6_addr))
          OLSR_PRINTF(1, "\tNew: %s\n", ip6_to_string(&tmp_saddr6.sin6_addr))
 
          /* Check main addr */
-         if(memcmp(&main_addr, &tmp_saddr6.sin6_addr, ipsize) == 0)
+         if(memcmp(&olsr_cnf->main_addr, &tmp_saddr6.sin6_addr, olsr_cnf->ipsize) == 0)
            {
              /* Update main addr */
-             memcpy(&main_addr, &tmp_saddr6.sin6_addr, ipsize);
+             memcpy(&olsr_cnf->main_addr, &tmp_saddr6.sin6_addr, olsr_cnf->ipsize);
            }
 
          /* Update address */
-         memcpy(&ifp->int6_addr.sin6_addr, &tmp_saddr6.sin6_addr, ipsize);
-         memcpy(&ifp->ip_addr, &tmp_saddr6.sin6_addr, ipsize);
+         memcpy(&ifp->int6_addr.sin6_addr, &tmp_saddr6.sin6_addr, olsr_cnf->ipsize);
+         memcpy(&ifp->ip_addr, &tmp_saddr6.sin6_addr, olsr_cnf->ipsize);
 
          run_ifchg_cbs(ifp, IFCHG_IF_UPDATE);
 
@@ -295,7 +295,7 @@ chk_if_changed(struct olsr_if *iface)
   /* IP version 4 */
     {
       /* Check interface address (IPv4)*/
-      if(ioctl(ioctl_s, SIOCGIFADDR, &ifr) < 0) 
+      if(ioctl(olsr_cnf->ioctl_s, SIOCGIFADDR, &ifr) < 0) 
        {
          OLSR_PRINTF(1, "\tCould not get address of interface - removing it\n")
          goto remove_interface;
@@ -307,34 +307,34 @@ chk_if_changed(struct olsr_if *iface)
 
       if(memcmp(&((struct sockaddr_in *)&ifp->int_addr)->sin_addr.s_addr,
                &((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr, 
-               ipsize) != 0)
+               olsr_cnf->ipsize) != 0)
        {
          /* New address */
          OLSR_PRINTF(1, "IPv4 address changed for %s\n", ifr.ifr_name)
          OLSR_PRINTF(1, "\tOld:%s\n", sockaddr_to_string(&ifp->int_addr))
          OLSR_PRINTF(1, "\tNew:%s\n", sockaddr_to_string(&ifr.ifr_addr))
          
-         if(memcmp(&main_addr, 
+         if(memcmp(&olsr_cnf->main_addr, 
                    &((struct sockaddr_in *)&ifp->int_addr)->sin_addr.s_addr, 
-                   ipsize) == 0)
+                   olsr_cnf->ipsize) == 0)
            {
              OLSR_PRINTF(1, "New main address: %s\n", sockaddr_to_string(&ifr.ifr_addr))
              olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", sockaddr_to_string(&ifr.ifr_addr));
-             memcpy(&main_addr, 
+             memcpy(&olsr_cnf->main_addr, 
                     &((struct sockaddr_in *)&ifp->int_addr)->sin_addr.s_addr, 
-                    ipsize);
+                    olsr_cnf->ipsize);
            }
 
          ifp->int_addr = ifr.ifr_addr;
          memcpy(&ifp->ip_addr, 
                 &((struct sockaddr_in *)&ifp->int_addr)->sin_addr.s_addr, 
-                ipsize);
+                olsr_cnf->ipsize);
 
          if_changes = 1;
        }
 
       /* Check netmask */
-      if (ioctl(ioctl_s, SIOCGIFNETMASK, &ifr) < 0) 
+      if (ioctl(olsr_cnf->ioctl_s, SIOCGIFNETMASK, &ifr) < 0) 
        {
          olsr_syslog(OLSR_LOG_ERR, "%s: ioctl (get broadaddr)", ifr.ifr_name);
          goto remove_interface;
@@ -346,7 +346,7 @@ chk_if_changed(struct olsr_if *iface)
 
       if(memcmp(&((struct sockaddr_in *)&ifp->int_netmask)->sin_addr.s_addr,
                &((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr.s_addr, 
-               ipsize) != 0)
+               olsr_cnf->ipsize) != 0)
        {
          /* New address */
          OLSR_PRINTF(1, "IPv4 netmask changed for %s\n", ifr.ifr_name)
@@ -361,7 +361,7 @@ chk_if_changed(struct olsr_if *iface)
       if(!iface->cnf->ipv4_broadcast.v4)
        {
          /* Check broadcast address */      
-         if (ioctl(ioctl_s, SIOCGIFBRDADDR, &ifr) < 0) 
+         if (ioctl(olsr_cnf->ioctl_s, SIOCGIFBRDADDR, &ifr) < 0) 
            {
              olsr_syslog(OLSR_LOG_ERR, "%s: ioctl (get broadaddr)", ifr.ifr_name);
              goto remove_interface;
@@ -373,7 +373,7 @@ chk_if_changed(struct olsr_if *iface)
          
          if(memcmp(&((struct sockaddr_in *)&ifp->int_broadaddr)->sin_addr.s_addr,
                    &((struct sockaddr_in *)&ifr.ifr_broadaddr)->sin_addr.s_addr, 
-                   ipsize) != 0)
+                   olsr_cnf->ipsize) != 0)
            {
              
              /* New address */
@@ -422,19 +422,19 @@ chk_if_changed(struct olsr_if *iface)
   net_remove_buffer(ifp);
 
   /* Check main addr */
-  if(COMP_IP(&main_addr, &ifp->ip_addr))
+  if(COMP_IP(&olsr_cnf->main_addr, &ifp->ip_addr))
     {
       if(ifnet == NULL)
        {
          /* No more interfaces */
-         memset(&main_addr, 0, ipsize);
+         memset(&olsr_cnf->main_addr, 0, olsr_cnf->ipsize);
          OLSR_PRINTF(1, "No more interfaces...\n")
        }
       else
        {
-         COPY_IP(&main_addr, &ifnet->ip_addr);
-         OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&main_addr))
-         olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", olsr_ip_to_string(&main_addr));
+         COPY_IP(&olsr_cnf->main_addr, &ifnet->ip_addr);
+         OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&olsr_cnf->main_addr))
+         olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", olsr_ip_to_string(&olsr_cnf->main_addr));
        }
     }
 
@@ -501,7 +501,7 @@ chk_if_changed(struct olsr_if *iface)
     {
       OLSR_PRINTF(1, "No more active interfaces - exiting.\n")
       olsr_syslog(OLSR_LOG_INFO, "No more active interfaces - exiting.\n");
-      exit_value = EXIT_FAILURE;
+      olsr_cnf->exit_value = EXIT_FAILURE;
       kill(getpid(), SIGINT);
     }
 
@@ -547,12 +547,12 @@ add_hemu_if(struct olsr_if *iface)
   ifp->int_next = ifnet;
   ifnet = ifp;
 
-  memset(&null_addr, 0, ipsize);
-  if(COMP_IP(&null_addr, &main_addr))
+  memset(&null_addr, 0, olsr_cnf->ipsize);
+  if(COMP_IP(&null_addr, &olsr_cnf->main_addr))
     {
-      COPY_IP(&main_addr, &iface->hemu_ip);
-      OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&main_addr))
-       olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", olsr_ip_to_string(&main_addr));
+      COPY_IP(&olsr_cnf->main_addr, &iface->hemu_ip);
+      OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&olsr_cnf->main_addr))
+       olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", olsr_ip_to_string(&olsr_cnf->main_addr));
     }
 
   /* setting the interfaces number*/
@@ -579,7 +579,7 @@ add_hemu_if(struct olsr_if *iface)
      /* IP version 4 */
       ifp->ip_addr.v4 = iface->hemu_ip.v4;
 
-      memcpy(&((struct sockaddr_in *)&ifp->int_addr)->sin_addr, &iface->hemu_ip, ipsize);
+      memcpy(&((struct sockaddr_in *)&ifp->int_addr)->sin_addr, &iface->hemu_ip, olsr_cnf->ipsize);
       
       /*
        *We create one socket for each interface and bind
@@ -593,7 +593,7 @@ add_hemu_if(struct olsr_if *iface)
        {
          fprintf(stderr, "Could not initialize socket... exiting!\n\n");
          olsr_syslog(OLSR_LOG_ERR, "Could not initialize socket... exiting!\n\n");
-         exit_value = EXIT_FAILURE;
+         olsr_cnf->exit_value = EXIT_FAILURE;
          kill(getpid(), SIGINT);
        }
 
@@ -601,7 +601,7 @@ add_hemu_if(struct olsr_if *iface)
   else
     {
       /* IP version 6 */
-      memcpy(&ifp->ip_addr, &iface->hemu_ip, ipsize);
+      memcpy(&ifp->ip_addr, &iface->hemu_ip, olsr_cnf->ipsize);
 
 #if 0      
       /*
@@ -618,7 +618,7 @@ add_hemu_if(struct olsr_if *iface)
        {
          fprintf(stderr, "Could not initialize socket... exiting!\n\n");
          olsr_syslog(OLSR_LOG_ERR, "Could not initialize socket... exiting!\n\n");
-         exit_value = EXIT_FAILURE;
+         olsr_cnf->exit_value = EXIT_FAILURE;
          kill(getpid(), SIGINT);
        }
       
@@ -626,13 +626,13 @@ add_hemu_if(struct olsr_if *iface)
     }
 
   /* Send IP as first 4/16 bytes on socket */
-  memcpy(addr, iface->hemu_ip.v6.s6_addr, ipsize);
+  memcpy(addr, iface->hemu_ip.v6.s6_addr, olsr_cnf->ipsize);
   addr[0] = htonl(addr[0]);
   addr[1] = htonl(addr[1]);
   addr[2] = htonl(addr[2]);
   addr[3] = htonl(addr[3]);
 
-  if(send(ifp->olsr_socket, addr , ipsize, 0) != (int)ipsize)
+  if(send(ifp->olsr_socket, addr , olsr_cnf->ipsize, 0) != (int)olsr_cnf->ipsize)
     {
       fprintf(stderr, "Error sending IP!");
     }  
@@ -682,12 +682,13 @@ add_hemu_if(struct olsr_if *iface)
 
   /* Recalculate max jitter */
 
-  if((max_jitter == 0) || ((iface->cnf->hello_params.emission_interval / 4) < max_jitter))
-    max_jitter = iface->cnf->hello_params.emission_interval / 4;
+  if((olsr_cnf->max_jitter == 0) || 
+     ((iface->cnf->hello_params.emission_interval / 4) < olsr_cnf->max_jitter))
+    olsr_cnf->max_jitter = iface->cnf->hello_params.emission_interval / 4;
 
   /* Recalculate max topology hold time */
-  if(max_tc_vtime < iface->cnf->tc_params.emission_interval)
-    max_tc_vtime = iface->cnf->tc_params.emission_interval;
+  if(olsr_cnf->max_tc_vtime < iface->cnf->tc_params.emission_interval)
+    olsr_cnf->max_tc_vtime = iface->cnf->tc_params.emission_interval;
 
   ifp->hello_etime = iface->cnf->hello_params.emission_interval;
   ifp->valtimes.hello = double_to_me(iface->cnf->hello_params.validity_time);
@@ -726,7 +727,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
   OLSR_PRINTF(debuglvl, "Checking %s:\n", ifr.ifr_name)
 
   /* Get flags (and check if interface exists) */
-  if (ioctl(ioctl_s, SIOCGIFFLAGS, &ifr) < 0) 
+  if (ioctl(olsr_cnf->ioctl_s, SIOCGIFFLAGS, &ifr) < 0) 
     {
       OLSR_PRINTF(debuglvl, "\tNo such interface!\n")
       return 0;
@@ -792,7 +793,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
       /* Set address family */
       ifs.int6_multaddr.sin6_family = AF_INET6;
       /* Set port */
-      ifs.int6_multaddr.sin6_port = olsr_udp_port;
+      ifs.int6_multaddr.sin6_port = htons(OLSRPORT);
       
       OLSR_PRINTF(debuglvl, "\tMulticast: %s\n", ip6_to_string(&ifs.int6_multaddr.sin6_addr))
       
@@ -801,7 +802,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
   else
     {
       /* Get interface address (IPv4)*/
-      if(ioctl(ioctl_s, SIOCGIFADDR, &ifr) < 0) 
+      if(ioctl(olsr_cnf->ioctl_s, SIOCGIFADDR, &ifr) < 0) 
        {
          OLSR_PRINTF(debuglvl, "\tCould not get address of interface - skipping it\n")
          return 0;
@@ -811,7 +812,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
       
       /* Find netmask */
       
-      if (ioctl(ioctl_s, SIOCGIFNETMASK, &ifr) < 0) 
+      if (ioctl(olsr_cnf->ioctl_s, SIOCGIFNETMASK, &ifr) < 0) 
        {
          olsr_syslog(OLSR_LOG_ERR, "%s: ioctl (get netmask)", ifr.ifr_name);
          return 0;
@@ -831,7 +832,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
       else
        {
          /* Autodetect */
-         if (ioctl(ioctl_s, SIOCGIFBRDADDR, &ifr) < 0) 
+         if (ioctl(olsr_cnf->ioctl_s, SIOCGIFBRDADDR, &ifr) < 0) 
            {
              olsr_syslog(OLSR_LOG_ERR, "%s: ioctl (get broadaddr)", ifr.ifr_name);
              return 0;
@@ -866,7 +867,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
 
 
   /* Get MTU */
-  if (ioctl(ioctl_s, SIOCGIFMTU, &ifr) < 0)
+  if (ioctl(olsr_cnf->ioctl_s, SIOCGIFMTU, &ifr) < 0)
     ifs.int_mtu = OLSR_DEFAULT_MTU;
   else
     ifs.int_mtu = ifr.ifr_mtu;
@@ -924,7 +925,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
        {
          fprintf(stderr, "Could not initialize socket... exiting!\n\n");
          olsr_syslog(OLSR_LOG_ERR, "Could not initialize socket... exiting!\n\n");
-         exit_value = EXIT_FAILURE;
+         olsr_cnf->exit_value = EXIT_FAILURE;
          kill(getpid(), SIGINT);
        }
 
@@ -935,7 +936,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
        {
          fprintf(stderr, "Could not initialize libnet... exiting!\n\n");
          olsr_syslog(OLSR_LOG_ERR, "Could not initialize libnet... exiting!\n\n");
-         exit_value = EXIT_FAILURE;
+         olsr_cnf->exit_value = EXIT_FAILURE;
          kill(getpid(), SIGINT);
        }
 #else
@@ -945,7 +946,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
   else
     {
       /* IP version 6 */
-      memcpy(&ifp->ip_addr, &ifp->int6_addr.sin6_addr, ipsize);
+      memcpy(&ifp->ip_addr, &ifp->int6_addr.sin6_addr, olsr_cnf->ipsize);
 
       
       /*
@@ -962,7 +963,7 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
        {
          fprintf(stderr, "Could not initialize socket... exiting!\n\n");
          olsr_syslog(OLSR_LOG_ERR, "Could not initialize socket... exiting!\n\n");
-         exit_value = EXIT_FAILURE;
+         olsr_cnf->exit_value = EXIT_FAILURE;
          kill(getpid(), SIGINT);
        }
       
@@ -994,12 +995,12 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
   /*
    * Set main address if this is the only interface
    */
-  memset(&null_addr, 0, ipsize);
-  if(COMP_IP(&null_addr, &main_addr))
+  memset(&null_addr, 0, olsr_cnf->ipsize);
+  if(COMP_IP(&null_addr, &olsr_cnf->main_addr))
     {
-      COPY_IP(&main_addr, &ifp->ip_addr);
-      OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&main_addr))
-      olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", olsr_ip_to_string(&main_addr));
+      COPY_IP(&olsr_cnf->main_addr, &ifp->ip_addr);
+      OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&olsr_cnf->main_addr))
+      olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", olsr_ip_to_string(&olsr_cnf->main_addr));
     }
   
   /*
@@ -1047,12 +1048,13 @@ chk_if_up(struct olsr_if *iface, int debuglvl)
 
   /* Recalculate max jitter */
 
-  if((max_jitter == 0) || ((iface->cnf->hello_params.emission_interval / 4) < max_jitter))
-    max_jitter = iface->cnf->hello_params.emission_interval / 4;
+  if((olsr_cnf->max_jitter == 0) || 
+     ((iface->cnf->hello_params.emission_interval / 4) < olsr_cnf->max_jitter))
+    olsr_cnf->max_jitter = iface->cnf->hello_params.emission_interval / 4;
 
   /* Recalculate max topology hold time */
-  if(max_tc_vtime < iface->cnf->tc_params.emission_interval)
-    max_tc_vtime = iface->cnf->tc_params.emission_interval;
+  if(olsr_cnf->max_tc_vtime < iface->cnf->tc_params.emission_interval)
+    olsr_cnf->max_tc_vtime = iface->cnf->tc_params.emission_interval;
 
   ifp->hello_etime = iface->cnf->hello_params.emission_interval;
   ifp->valtimes.hello = double_to_me(iface->cnf->hello_params.validity_time);
index 2af4247..2035514 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: ifnet.c,v 1.29 2005/10/23 19:01:04 tlopatic Exp $
+ * $Id: ifnet.c,v 1.30 2006/01/07 08:16:26 kattemat Exp $
  */
 
 #include "interfaces.h"
@@ -376,18 +376,18 @@ void RemoveInterface(struct olsr_if *IntConf)
     Prev->int_next = Int->int_next;
   }
 
-  if(COMP_IP(&main_addr, &Int->ip_addr))
+  if(COMP_IP(&olsr_cnf->main_addr, &Int->ip_addr))
   {
     if(ifnet == NULL)
     {
-      memset(&main_addr, 0, ipsize);
+      memset(&olsr_cnf->main_addr, 0, olsr_cnf->ipsize);
       OLSR_PRINTF(1, "Removed last interface. Cleared main address.\n")
     }
 
     else
     {
-      COPY_IP(&main_addr, &ifnet->ip_addr);
-      OLSR_PRINTF(1, "New main address: %s.\n", olsr_ip_to_string(&main_addr))
+      COPY_IP(&olsr_cnf->main_addr, &ifnet->ip_addr);
+      OLSR_PRINTF(1, "New main address: %s.\n", olsr_ip_to_string(&olsr_cnf->main_addr))
     }
   }
 
@@ -435,7 +435,7 @@ void RemoveInterface(struct olsr_if *IntConf)
   if (ifnet == NULL && !olsr_cnf->allow_no_interfaces)
   {
     OLSR_PRINTF(1, "No more active interfaces - exiting.\n")
-    exit_value = EXIT_FAILURE;
+    olsr_cnf->exit_value = EXIT_FAILURE;
     CallSignalHandler();
   }
 }
@@ -473,11 +473,11 @@ int add_hemu_if(struct olsr_if *iface)
   ifp->int_next = ifnet;
   ifnet = ifp;
 
-  memset(&null_addr, 0, ipsize);
-  if(COMP_IP(&null_addr, &main_addr))
+  memset(&null_addr, 0, olsr_cnf->ipsize);
+  if(COMP_IP(&null_addr, &olsr_cnf->main_addr))
     {
-      COPY_IP(&main_addr, &iface->hemu_ip);
-      OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&main_addr))
+      COPY_IP(&olsr_cnf->main_addr, &iface->hemu_ip);
+      OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&olsr_cnf->main_addr))
     }
 
   /* setting the interfaces number*/
@@ -505,7 +505,7 @@ int add_hemu_if(struct olsr_if *iface)
      /* IP version 4 */
       ifp->ip_addr.v4 = iface->hemu_ip.v4;
 
-      memcpy(&((struct sockaddr_in *)&ifp->int_addr)->sin_addr, &iface->hemu_ip, ipsize);
+      memcpy(&((struct sockaddr_in *)&ifp->int_addr)->sin_addr, &iface->hemu_ip, olsr_cnf->ipsize);
       
       /*
        *We create one socket for each interface and bind
@@ -525,7 +525,7 @@ int add_hemu_if(struct olsr_if *iface)
   else
     {
       /* IP version 6 */
-      memcpy(&ifp->ip_addr, &iface->hemu_ip, ipsize);
+      memcpy(&ifp->ip_addr, &iface->hemu_ip, olsr_cnf->ipsize);
 
 #if 0      
       /*
@@ -548,13 +548,13 @@ int add_hemu_if(struct olsr_if *iface)
     }
 
   /* Send IP as first 4/16 bytes on socket */
-  memcpy(addr, iface->hemu_ip.v6.s6_addr, ipsize);
+  memcpy(addr, iface->hemu_ip.v6.s6_addr, olsr_cnf->ipsize);
   addr[0] = htonl(addr[0]);
   addr[1] = htonl(addr[1]);
   addr[2] = htonl(addr[2]);
   addr[3] = htonl(addr[3]);
 
-  if(send(ifp->olsr_socket, (char *)addr, ipsize, 0) != (int)ipsize)
+  if(send(ifp->olsr_socket, (char *)addr, olsr_cnf->ipsize, 0) != (int)olsr_cnf->ipsize)
     {
       fprintf(stderr, "Error sending IP!");
     }  
@@ -604,12 +604,13 @@ int add_hemu_if(struct olsr_if *iface)
 
   /* Recalculate max jitter */
 
-  if((max_jitter == 0) || ((iface->cnf->hello_params.emission_interval / 4) < max_jitter))
-    max_jitter = iface->cnf->hello_params.emission_interval / 4;
+  if((olsr_cnf->max_jitter == 0) || 
+     ((iface->cnf->hello_params.emission_interval / 4) < olsr_cnf->max_jitter))
+    olsr_cnf->max_jitter = iface->cnf->hello_params.emission_interval / 4;
 
   /* Recalculate max topology hold time */
-  if(max_tc_vtime < iface->cnf->tc_params.emission_interval)
-    max_tc_vtime = iface->cnf->tc_params.emission_interval;
+  if(olsr_cnf->max_tc_vtime < iface->cnf->tc_params.emission_interval)
+    olsr_cnf->max_tc_vtime = iface->cnf->tc_params.emission_interval;
 
   ifp->hello_etime = iface->cnf->hello_params.emission_interval;
   ifp->valtimes.hello = double_to_me(iface->cnf->hello_params.validity_time);
@@ -703,11 +704,11 @@ int chk_if_changed(struct olsr_if *IntConf)
     AddrIn->sin_port = 0;
     AddrIn->sin_addr.s_addr = NewVal.v4;
 
-    if (main_addr.v4 == OldVal.v4)
+    if (olsr_cnf->main_addr.v4 == OldVal.v4)
     {
       OLSR_PRINTF(1, "\tMain address change.\n")
 
-      main_addr.v4 = NewVal.v4;
+      olsr_cnf->main_addr.v4 = NewVal.v4;
     }
 
     Res = 1;
@@ -878,12 +879,12 @@ int chk_if_up(struct olsr_if *IntConf, int DebugLevel)
   IntConf->interf = New;
   IntConf->configured = 1;
 
-  memset(&NullAddr, 0, ipsize);
+  memset(&NullAddr, 0, olsr_cnf->ipsize);
   
-  if(COMP_IP(&NullAddr, &main_addr))
+  if(COMP_IP(&NullAddr, &olsr_cnf->main_addr))
   {
-    COPY_IP(&main_addr, &New->ip_addr);
-    OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&main_addr))
+    COPY_IP(&olsr_cnf->main_addr, &New->ip_addr);
+    OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&olsr_cnf->main_addr))
   }
 
   net_add_buffer(New);
@@ -918,12 +919,12 @@ int chk_if_up(struct olsr_if *IntConf, int DebugLevel)
                                 IntConf->cnf->hna_params.emission_interval,
                                 0, NULL);
 
-  if(max_jitter == 0 ||
-     IntConf->cnf->hello_params.emission_interval / 4 < max_jitter)
-    max_jitter = IntConf->cnf->hello_params.emission_interval / 4;
+  if(olsr_cnf->max_jitter == 0 ||
+     IntConf->cnf->hello_params.emission_interval / 4 < olsr_cnf->max_jitter)
+    olsr_cnf->max_jitter = IntConf->cnf->hello_params.emission_interval / 4;
 
-  if(max_tc_vtime < IntConf->cnf->tc_params.emission_interval)
-    max_tc_vtime = IntConf->cnf->tc_params.emission_interval;
+  if(olsr_cnf->max_tc_vtime < IntConf->cnf->tc_params.emission_interval)
+    olsr_cnf->max_tc_vtime = IntConf->cnf->tc_params.emission_interval;
 
   New->hello_etime = IntConf->cnf->hello_params.emission_interval;