Merge branch 'master' into scheduler_cleanup
authorHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Thu, 17 Feb 2011 07:39:41 +0000 (08:39 +0100)
committerHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Thu, 17 Feb 2011 07:39:41 +0000 (08:39 +0100)
1  2 
src/main.c
src/olsr.c
src/tc_set.c

diff --combined src/main.c
@@@ -50,8 -50,7 +50,8 @@@
  #include "common/avl_olsr_comp.h"
  #include "olsr.h"
  #include "ipcalc.h"
 -#include "scheduler.h"
 +#include "olsr_timer.h"
 +#include "olsr_socket.h"
  #include "parser.h"
  #include "plugin_loader.h"
  #include "os_apm.h"
@@@ -95,7 -94,7 +95,7 @@@ static void signal_reconfigure(int)
  /* Global stuff externed in olsr_cfg.h */
  struct olsr_config *olsr_cnf;          /* The global configuration */
  
volatile enum app_state app_state = STATE_INIT;
+ enum app_state app_state = STATE_INIT;
  
  static char copyright_string[] __attribute__ ((unused)) =
    "The olsr.org Optimized Link-State Routing daemon(olsrd) Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org) All rights reserved.";
  static char pulsedata[] = "\\|/-";
  static uint8_t pulse_state = 0;
  
 -static struct timer_entry *hna_gen_timer;
 -static struct timer_entry *mid_gen_timer;
 -static struct timer_entry *tc_gen_timer;
 +static struct olsr_timer_entry *hna_gen_timer;
 +static struct olsr_timer_entry *mid_gen_timer;
 +static struct olsr_timer_entry *tc_gen_timer;
  
  static void
  generate_stdout_pulse(void *foo __attribute__ ((unused)))
@@@ -243,30 -242,47 +243,48 @@@ main(int argc, char *argv[]
    olsr_memcookie_init();
  
    /* Initialize timers and scheduler part */
 -  olsr_init_timers();
 +  olsr_timer_init();
 +  olsr_socket_init();
  
    /* initialize callback system */
    olsr_callback_init();
  
    /* generate global timers */
 -  pulse_timer_info = olsr_alloc_timerinfo("Stdout pulse", &generate_stdout_pulse, true);
 -  tc_gen_timer_info = olsr_alloc_timerinfo("TC generation", &olsr_output_lq_tc, true);
 -  mid_gen_timer_info = olsr_alloc_timerinfo("MID generation", &generate_mid, true);
 -  hna_gen_timer_info = olsr_alloc_timerinfo("HNA generation", &generate_hna, true);
 +  pulse_timer_info = olsr_timer_add("Stdout pulse", &generate_stdout_pulse, true);
 +  tc_gen_timer_info = olsr_timer_add("TC generation", &olsr_output_lq_tc, true);
 +  mid_gen_timer_info = olsr_timer_add("MID generation", &generate_mid, true);
 +  hna_gen_timer_info = olsr_timer_add("HNA generation", &generate_hna, true);
  
    /* initialize plugin system */
    olsr_init_pluginsystem();
    olsr_plugins_init(true);
  
-   /* initialisation of different tables to be used. */
-   olsr_init_tables();
+   /* Initialize link set */
+   olsr_init_link_set();
+   /* Initialize duplicate table */
+   olsr_init_duplicate_set();
+   /* Initialize neighbor table */
+   olsr_init_neighbor_table();
+   /* Initialize routing table */
+   olsr_init_routing_table();
+   /* Initialize topology */
+   olsr_init_tc();
+   /* Initialize MID set */
+   olsr_init_mid_set();
+   /* Initialize HNA set */
+   olsr_init_hna_set();
  
    /* enable lq-plugins */
    olsr_plugins_enable(PLUGIN_TYPE_LQ, true);
  
    /* initialize built in server services */
 -  olsr_com_init(true);
 +  olsr_com_init();
  
    /* Initialize net */
    init_net();
  
  #if !defined WINCE
    if (olsr_cnf->log_target_stderr > 0 && isatty(STDOUT_FILENO)) {
 -    olsr_start_timer(STDOUT_PULSE_INT, 0, NULL, pulse_timer_info);
 +    olsr_timer_start(STDOUT_PULSE_INT, 0, NULL, pulse_timer_info);
    }
  #endif
  
    link_changes = false;
  
    tc_gen_timer =
 -    olsr_start_timer(olsr_cnf->tc_params.emission_interval, TC_JITTER, NULL, tc_gen_timer_info);
 +    olsr_timer_start(olsr_cnf->tc_params.emission_interval, TC_JITTER, NULL, tc_gen_timer_info);
    mid_gen_timer =
 -    olsr_start_timer(olsr_cnf->mid_params.emission_interval, MID_JITTER, NULL, mid_gen_timer_info);
 +    olsr_timer_start(olsr_cnf->mid_params.emission_interval, MID_JITTER, NULL, mid_gen_timer_info);
    hna_gen_timer =
 -    olsr_start_timer(olsr_cnf->hna_params.emission_interval, HNA_JITTER, NULL, hna_gen_timer_info);
 +    olsr_timer_start(olsr_cnf->hna_params.emission_interval, HNA_JITTER, NULL, hna_gen_timer_info);
  
    /* enable default plugins */
    olsr_plugins_enable(PLUGIN_TYPE_DEFAULT, true);
  
    /* Starting scheduler */
    app_state = STATE_RUNNING;
 -  olsr_scheduler();
 +  olsr_timer_scheduler();
  
 -  olsr_stop_timer(tc_gen_timer);
 +  olsr_timer_stop(tc_gen_timer);
    tc_gen_timer = NULL;
  
 -  olsr_stop_timer(mid_gen_timer);
 +  olsr_timer_stop(mid_gen_timer);
    mid_gen_timer = NULL;
  
 -  olsr_stop_timer(hna_gen_timer);
 +  olsr_timer_stop(hna_gen_timer);
    hna_gen_timer = NULL;
  
    exitcode = olsr_cnf->exit_value;
@@@ -580,10 -596,10 +598,10 @@@ olsr_shutdown(void
  #endif
  
    /* Close and delete all sockets */
 -  olsr_flush_sockets();
 +  olsr_socket_cleanup();
  
    /* Stop and delete all timers. */
 -  olsr_flush_timers();
 +  olsr_timer_cleanup();
  
    /* Remove parser hooks */
    olsr_deinit_parser();
diff --combined src/olsr.c
@@@ -51,8 -51,7 +51,8 @@@
  #include "mid_set.h"
  #include "lq_mpr.h"
  #include "olsr_spf.h"
 -#include "scheduler.h"
 +#include "olsr_timer.h"
 +#include "olsr_socket.h"
  #include "neighbor_table.h"
  #include "lq_packet.h"
  #include "common/avl.h"
  #include <stdlib.h>
  
  static void olsr_update_willingness(void *);
- static void olsr_trigger_forced_update(void *);
  
- bool changes_topology;
- bool changes_neighborhood;
- bool changes_hna;
- bool changes_force;
- /**
-  * Process changes functions
-  */
- struct pcf {
-   int (*function) (int, int, int);
-   struct pcf *next;
- };
- static struct pcf *pcf_list;
+ bool changes_topology = false;
+ bool changes_neighborhood = false;
+ bool changes_hna = false;
+ bool changes_force = false;
  
  static uint16_t message_seqno;
  
@@@ -109,23 -96,6 +97,6 @@@ get_msg_seqno(void
    return message_seqno++;
  }
  
- void
- register_pcf(int (*f) (int, int, int))
- {
-   struct pcf *new_pcf;
-   OLSR_DEBUG(LOG_MAIN, "Registering pcf function\n");
-   new_pcf = olsr_malloc(sizeof(struct pcf), "New PCF");
-   new_pcf->function = f;
-   new_pcf->next = pcf_list;
-   pcf_list = new_pcf;
- }
  /**
   *Process changes in neighborhood or/and topology.
   *Re-calculates the neighborhood/topology if there
  void
  olsr_process_changes(void)
  {
-   struct pcf *tmp_pc_list;
-   /* Check for changes in topology */
-   if (link_changes) {
-     increase_local_ansn_number();
-     OLSR_DEBUG(LOG_MAIN, "ANSN UPDATED %d\n\n", get_local_ansn_number());
-     link_changes = false;
-   }
    if (changes_neighborhood)
      OLSR_DEBUG(LOG_MAIN, "CHANGES IN NEIGHBORHOOD\n");
    if (changes_topology)
    if (changes_hna)
      OLSR_DEBUG(LOG_MAIN, "CHANGES IN HNA\n");
  
-   if (!changes_force && 0 >= olsr_cnf->lq_dlimit)
-     return;
    if (!changes_neighborhood && !changes_topology && !changes_hna)
      return;
  
    olsr_print_duplicate_table();
    olsr_print_hna_set();
  
-   for (tmp_pc_list = pcf_list; tmp_pc_list != NULL; tmp_pc_list = tmp_pc_list->next) {
-     tmp_pc_list->function(changes_neighborhood, changes_topology, changes_hna);
-   }
    changes_neighborhood = false;
    changes_topology = false;
    changes_hna = false;
    changes_force = false;
  }
  
- /*
-  * Callback for the periodic route calculation.
-  */
- static void
- olsr_trigger_forced_update(void *unused __attribute__ ((unused)))
- {
-   changes_force = true;
-   changes_neighborhood = true;
-   changes_topology = true;
-   changes_hna = true;
-   olsr_process_changes();
- }
- /**
-  *Initialize all the tables used(neighbor,
-  *topology, MID,  HNA, MPR, dup).
-  *Also initalizes other variables
-  */
- void
- olsr_init_tables(void)
- {
-   /* Some cookies for stats keeping */
-   static struct olsr_timer_info *periodic_spf_timer_info = NULL;
-   changes_topology = false;
-   changes_neighborhood = false;
-   changes_hna = false;
-   /* Initialize link set */
-   olsr_init_link_set();
-   /* Initialize duplicate table */
-   olsr_init_duplicate_set();
-   /* Initialize neighbor table */
-   olsr_init_neighbor_table();
-   /* Initialize routing table */
-   olsr_init_routing_table();
-   /* Initialize topology */
-   olsr_init_tc();
-   /* Initialize MID set */
-   olsr_init_mid_set();
-   /* Initialize HNA set */
-   olsr_init_hna_set();
-   /* Start periodic SPF and RIB recalculation */
-   if (olsr_cnf->lq_dinter > 0) {
-     periodic_spf_timer_info = olsr_timer_add("Periodic SPF", &olsr_trigger_forced_update, true);
-     olsr_timer_start(olsr_cnf->lq_dinter, 5,
-                      NULL, periodic_spf_timer_info);
-   }
- }
  /**
   * Shared code to write the message header
   */
- uint8_t *olsr_put_msg_hdr(uint8_t **curr, struct olsr_message *msg)
+ uint8_t *
+ olsr_put_msg_hdr(uint8_t **curr, struct olsr_message *msg)
  {
    uint8_t *sizeptr;
  
    return sizeptr;
  }
  
- /**
-  *Check if a message is to be forwarded and forward
-  *it if necessary.
-  *
-  *@param m the OLSR message recieved
-  *
-  *@returns positive if forwarded
-  */
- int
- olsr_forward_message(struct olsr_message *msg, uint8_t *binary, struct interface *in_if, union olsr_ip_addr *from_addr)
- {
-   union olsr_ip_addr *src;
-   struct nbr_entry *neighbor;
-   struct interface *ifn, *iterator;
-   uint8_t *tmp;
- #if !defined REMOVE_LOG_DEBUG
-   struct ipaddr_str buf;
- #endif
-   /* Lookup sender address */
-   src = olsr_lookup_main_addr_by_alias(from_addr);
-   if (!src)
-     src = from_addr;
-   neighbor = olsr_lookup_nbr_entry(src, true);
-   if (!neighbor) {
-     OLSR_DEBUG(LOG_PACKET_PARSING, "Not forwarding message type %d because no nbr entry found for %s\n",
-         msg->type, olsr_ip_to_string(&buf, src));
-     return 0;
-   }
-   if (!neighbor->is_sym) {
-     OLSR_DEBUG(LOG_PACKET_PARSING, "Not forwarding message type %d because received by non-symmetric neighbor %s\n",
-         msg->type, olsr_ip_to_string(&buf, src));
-     return 0;
-   }
-   /* Check MPR */
-   if (neighbor->mprs_count == 0) {
-     OLSR_DEBUG(LOG_PACKET_PARSING, "Not forwarding message type %d because we are no MPR for %s\n",
-         msg->type, olsr_ip_to_string(&buf, src));
-     /* don't forward packages if not a MPR */
-     return 0;
-   }
-   /* check if we already forwarded this message */
-   if (olsr_is_duplicate_message(msg, true, NULL)) {
-     OLSR_DEBUG(LOG_PACKET_PARSING, "Not forwarding message type %d from %s because we already forwarded it.\n",
-         msg->type, olsr_ip_to_string(&buf, src));
-     return 0;                   /* it's a duplicate, forget about it */
-   }
-   /* Treat TTL hopcnt */
-   msg->hopcnt++;
-   msg->ttl--;
-   tmp = binary;
-   olsr_put_msg_hdr(&tmp, msg);
-   if (msg->ttl == 0) {
-     OLSR_DEBUG(LOG_PACKET_PARSING, "Not forwarding message type %d from %s because TTL is 0.\n",
-         msg->type, olsr_ip_to_string(&buf, src));
-     return 0;                   /* TTL 0, forget about it */
-   }
-   OLSR_DEBUG(LOG_PACKET_PARSING, "Forwarding message type %d from %s.\n",
-       msg->type, olsr_ip_to_string(&buf, src));
-   /* looping trough interfaces */
-   OLSR_FOR_ALL_INTERFACES(ifn, iterator) {
-     if (net_output_pending(ifn)) {
-       /* dont forward to incoming interface if interface is mode ether */
-       if (in_if->mode == IF_MODE_ETHER && ifn == in_if)
-         continue;
-       /*
-        * Check if message is to big to be piggybacked
-        */
-       if (net_outbuffer_push(ifn, binary, msg->size) != msg->size) {
-         /* Send */
-         net_output(ifn);
-         /* Buffer message */
-         set_buffer_timer(ifn);
-         if (net_outbuffer_push(ifn, binary, msg->size) != msg->size) {
-           OLSR_WARN(LOG_NETWORKING, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msg->size);
-         }
-       }
-     } else {
-       /* No forwarding pending */
-       set_buffer_timer(ifn);
-       if (net_outbuffer_push(ifn, binary, msg->size) != msg->size) {
-         OLSR_WARN(LOG_NETWORKING, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msg->size);
-       }
-     }
-   }
-   return 1;
- }
  static void
  olsr_update_willingness(void *foo __attribute__ ((unused)))
  {
@@@ -392,8 -190,8 +191,8 @@@ olsr_init_willingness(void
      /* Run it first and then periodic. */
      olsr_update_willingness(NULL);
  
 -    willingness_timer_info = olsr_alloc_timerinfo("Update Willingness", &olsr_update_willingness, true);
 -    olsr_start_timer(olsr_cnf->will_int, 5, NULL, willingness_timer_info);
 +    willingness_timer_info = olsr_timer_add("Update Willingness", &olsr_update_willingness, true);
 +    olsr_timer_start(olsr_cnf->will_int, 5, NULL, willingness_timer_info);
    }
  }
  
@@@ -443,77 -241,6 +242,6 @@@ olsr_calculate_willingness(void
        olsr_cnf->willingness, olsr_milli_to_txt(&tbuf, olsr_cnf->will_int));
  }
  
- const char *
- olsr_msgtype_to_string(uint8_t msgtype)
- {
-   static char type[20];
-   switch (msgtype) {
-   case (HELLO_MESSAGE):
-     return "HELLO";
-   case (TC_MESSAGE):
-     return "TC";
-   case (MID_MESSAGE):
-     return "MID";
-   case (HNA_MESSAGE):
-     return "HNA";
-   case (LQ_HELLO_MESSAGE):
-     return ("LQ-HELLO");
-   case (LQ_TC_MESSAGE):
-     return ("LQ-TC");
-   default:
-     break;
-   }
-   snprintf(type, sizeof(type), "UNKNOWN(%d)", msgtype);
-   return type;
- }
- const char *
- olsr_link_to_string(uint8_t linktype)
- {
-   static char type[20];
-   switch (linktype) {
-   case (UNSPEC_LINK):
-     return "UNSPEC";
-   case (ASYM_LINK):
-     return "ASYM";
-   case (SYM_LINK):
-     return "SYM";
-   case (LOST_LINK):
-     return "LOST";
-   default:
-     break;
-   }
-   snprintf(type, sizeof(type), "UNKNOWN(%d)", linktype);
-   return type;
- }
- const char *
- olsr_status_to_string(uint8_t status)
- {
-   static char type[20];
-   switch (status) {
-   case (NOT_NEIGH):
-     return "NOT NEIGH";
-   case (SYM_NEIGH):
-     return "NEIGHBOR";
-   case (MPR_NEIGH):
-     return "MPR";
-   default:
-     break;
-   }
-   snprintf(type, sizeof(type), "UNKNOWN(%d)", status);
-   return type;
- }
  /**
   *Termination function to be called whenever a error occures
   *that requires the daemon to terminate
diff --combined src/tc_set.c
@@@ -139,8 -139,8 +139,8 @@@ olsr_init_tc(void
    /*
     * Get some cookies for getting stats to ease troubleshooting.
     */
 -  tc_edge_gc_timer_info = olsr_alloc_timerinfo("TC edge GC", olsr_expire_tc_edge_gc, false);
 -  tc_validity_timer_info = olsr_alloc_timerinfo("TC validity", &olsr_expire_tc_entry, false);
 +  tc_edge_gc_timer_info = olsr_timer_add("TC edge GC", olsr_expire_tc_edge_gc, false);
 +  tc_validity_timer_info = olsr_timer_add("TC validity", &olsr_expire_tc_entry, false);
  
    tc_mem_cookie = olsr_memcookie_add("tc_entry", sizeof(struct tc_entry));
  }
@@@ -230,10 -230,10 +230,10 @@@ olsr_delete_tc_entry(struct tc_entry *t
    }
  
    /* Stop running timers */
 -  olsr_stop_timer(tc->validity_timer);
 +  olsr_timer_stop(tc->validity_timer);
    tc->validity_timer = NULL;
  
 -  olsr_stop_timer(tc->edge_gc_timer);
 +  olsr_timer_stop(tc->edge_gc_timer);
    tc->edge_gc_timer = NULL;
  
    /* still virtual edges left, node has to stay in database */
@@@ -482,7 -482,7 +482,7 @@@ olsr_delete_tc_edge_entry(struct tc_edg
  
    if (was_real && tc_inv != tc_myself && tc_inv->virtual) {
      /* mark tc_entry to be gone in one ms */
 -    olsr_set_timer(&tc_inv->validity_timer, 1, 0, tc, tc_validity_timer_info);
 +    olsr_timer_set(&tc_inv->validity_timer, 1, 0, tc, tc_validity_timer_info);
    }
  }
  
@@@ -606,10 -606,8 +606,8 @@@ olsr_tc_update_edge(struct tc_entry *tc
       * Update the etx.
       */
      tc_edge->cost = olsr_calc_tc_cost(tc_edge);
-     if (tc->msg_hops <= olsr_cnf->lq_dlimit) {
-       edge_change = 1;
-       OLSR_DEBUG(LOG_TC, "TC:   chg edge entry %s\n", olsr_tc_edge_to_string(tc_edge));
-     }
+     edge_change = 1;
+     OLSR_DEBUG(LOG_TC, "TC:   chg edge entry %s\n", olsr_tc_edge_to_string(tc_edge));
    }
  
    /* set edge and tc as non-virtual */
@@@ -646,10 -644,8 +644,10 @@@ olsr_print_tc_table(void
    struct tc_entry *tc, *tc_iterator;
    const int ipwidth = olsr_cnf->ip_version == AF_INET ? 15 : 30;
    static char NONE[] = "-";
 +  struct timeval_buf timebuf;
  
 -  OLSR_INFO(LOG_TC, "\n--- %s ------------------------------------------------- TOPOLOGY\n\n", olsr_wallclock_string());
 +  OLSR_INFO(LOG_TC, "\n--- %s ------------------------------------------------- TOPOLOGY\n\n",
 +      olsr_timer_getWallclockString(&timebuf));
    OLSR_INFO_NH(LOG_TC, "%-*s %-*s %-7s      %8s %12s %5s\n", ipwidth,
                 "Source IP addr", ipwidth, "Dest IP addr", "", olsr_get_linklabel(0), "vtime", "ansn");
  
      char *vtime = NONE;
  
      if (tc->validity_timer) {
 -      olsr_milli_to_txt(&tbuf, olsr_getTimeDue(tc->validity_timer->timer_clock));
 +      olsr_milli_to_txt(&tbuf, olsr_timer_getRelative(tc->validity_timer->timer_clock));
        vtime = tbuf.buf;
      }
  
@@@ -833,7 -829,7 +831,7 @@@ olsr_input_tc(struct olsr_message * msg
     * Set or change the expiration timer accordingly.
     */
    assert(msg);
 -  olsr_set_timer(&tc->validity_timer, msg->vtime,
 +  olsr_timer_set(&tc->validity_timer, msg->vtime,
                   OLSR_TC_VTIME_JITTER, tc, tc_validity_timer_info);
  
    if (borderSet) {
       * Kick the the edge garbage collection timer. In the meantime hopefully
       * all edges belonging to a multipart neighbor set will arrive.
       */
 -    olsr_set_timer(&tc->edge_gc_timer, OLSR_TC_EDGE_GC_TIME,
 +    olsr_timer_set(&tc->edge_gc_timer, OLSR_TC_EDGE_GC_TIME,
                     OLSR_TC_EDGE_GC_JITTER, tc, tc_edge_gc_timer_info);
    }
  }