Merged with duplicate set prototype
authorHenning Rogge <rogge@fgan.de>
Tue, 18 Nov 2008 20:08:41 +0000 (21:08 +0100)
committerHenning Rogge <rogge@fgan.de>
Tue, 18 Nov 2008 20:08:41 +0000 (21:08 +0100)
12 files changed:
lib/nameservice/src/nameservice.c
lib/tas/src/plugin.c
src/duplicate_set.c
src/duplicate_set.h
src/hna_set.c
src/ipc_frontend.c
src/mid_set.c
src/olsr.c
src/parser.c
src/parser.h
src/process_package.c
src/tc_set.c

index 9b2d266..59e1544 100644 (file)
@@ -5,28 +5,28 @@
  * Copyright (c) 2007, Sven-Ola <sven-ola@gmx.de>
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
  * are met:
  *
- * * Redistributions of source code must retain the above copyright notice, 
+ * * Redistributions of source code must retain the above copyright notice,
  *   this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice, 
- *   this list of conditions and the following disclaimer in the documentation 
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
  *   and/or other materials provided with the distribution.
- * * Neither the name of the UniK olsr daemon nor the names of its contributors 
- *   may be used to endorse or promote products derived from this software 
+ * * Neither the name of the UniK olsr daemon nor the names of its contributors
+ *   may be used to endorse or promote products derived from this software
  *   without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
- * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
@@ -128,10 +128,10 @@ static regmatch_t regmatch_t_service[10];
  * do initialization
  */
 void
-name_constructor(void) 
+name_constructor(void)
 {
        int i;
-       
+
 #ifdef WIN32
        int len;
 
@@ -143,7 +143,7 @@ name_constructor(void)
        if (my_hosts_file[len - 1] != '\\')
                strscat(my_hosts_file, "\\", sizeof(my_host_file));
        strscat(my_hosts_file, "hosts_olsr", sizeof(my_host_file));
-       
+
        len = strlen(my_services_file);
        if (my_services_file[len - 1] != '\\')
                strscat(my_services_file, "\\", sizeof(my_services_file));
@@ -166,7 +166,7 @@ name_constructor(void)
        latlon_in_file[0] = '\0';
        my_name_change_script[0] = '\0';
        my_services_change_script[0] = '\0';
-       
+
        /* init the lists heads */
        for(i = 0; i < HASHSIZE; i++) {
                list_head_init(&name_list[i]);
@@ -174,7 +174,7 @@ name_constructor(void)
                list_head_init(&service_list[i]);
                list_head_init(&latlon_list[i]);
        }
-       
+
        msg_gen_timer_cookie = olsr_alloc_cookie("Nameservice: message gen", OLSR_COOKIE_TYPE_TIMER);
        write_file_timer_cookie = olsr_alloc_cookie("Nameservice: write file", OLSR_COOKIE_TYPE_TIMER);
        db_timer_cookie = olsr_alloc_cookie("Nameservice: DB", OLSR_COOKIE_TYPE_TIMER);
@@ -285,15 +285,15 @@ void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params,
  * queue the name/forwarder/service given in value
  * to the front of my_list
  */
-struct name_entry* 
-add_name_to_list(struct name_entry *my_list, const char *value, int type, const union olsr_ip_addr *ip) 
+struct name_entry*
+add_name_to_list(struct name_entry *my_list, const char *value, int type, const union olsr_ip_addr *ip)
 {
        struct name_entry *tmp = olsr_malloc(sizeof(struct name_entry), "new name_entry add_name_to_list");
        tmp->name = strndup( value, MAX_NAME );
        tmp->len = strlen( tmp->name );
        tmp->type = type;
        // all IPs with value 0 will be set to main_addr later
-       if (ip==NULL) 
+       if (ip==NULL)
                memset(&tmp->ip, 0, sizeof(tmp->ip));
        else
                tmp->ip = *ip;
@@ -305,10 +305,10 @@ add_name_to_list(struct name_entry *my_list, const char *value, int type, const
 /**
  * last initialization
  *
- * we have to do this here because some things like main_addr 
+ * we have to do this here because some things like main_addr
  * or the dns suffix (for validation) are not known before
  *
- * this is beause of the order in which the plugin is initialized 
+ * this is beause of the order in which the plugin is initialized
  * by the plugin loader:
  *   - first the parameters are sent
  *   - then register_olsr_data() from olsrd_plugin.c is called
@@ -332,7 +332,7 @@ name_init(void)
        //compile the regex from the string
        if ((ret = regcomp(&regex_t_name, regex_name , REG_EXTENDED)) != 0)
        {
-               /* #2: call regerror() if regcomp failed 
+               /* #2: call regerror() if regcomp failed
                 * commented out, because only for debuggin needed
                 *
                int errmsgsz = regerror(ret, &regex_t_name, NULL, 0);
@@ -358,7 +358,7 @@ name_init(void)
        /* #1: call regcomp() to compile the regex */
        if ((ret = regcomp(&regex_t_service, regex_service , REG_EXTENDED )) != 0)
        {
-               /* #2: call regerror() if regcomp failed 
+               /* #2: call regerror() if regcomp failed
                 * commented out, because only for debuggin needed
                 *
                int errmsgsz = regerror(ret, &regex_t_service, NULL, 0);
@@ -397,7 +397,7 @@ name_init(void)
 
 
        /* register functions with olsrd */
-       olsr_parser_add_function(&olsr_parser, PARSER_TYPE, 1);
+       olsr_parser_add_function(&olsr_parser, PARSER_TYPE);
 
        /* periodic message generation */
        msg_gen_timer = olsr_start_timer(my_interval * MSEC_PER_SEC, EMISSION_JITTER,
@@ -411,17 +411,17 @@ name_init(void)
 
 
 struct name_entry*
-remove_nonvalid_names_from_list(struct name_entry *my_list, int type) 
+remove_nonvalid_names_from_list(struct name_entry *my_list, int type)
 {
        struct name_entry *next = my_list;
        olsr_bool valid = OLSR_FALSE;
        if (my_list == NULL) {
                return NULL;
-       } 
+       }
 
        switch (type) {
                case NAME_HOST:
-                       valid = is_name_wellformed(my_list->name) && allowed_ip(&my_list->ip); 
+                       valid = is_name_wellformed(my_list->name) && allowed_ip(&my_list->ip);
                        break;
                case NAME_FORWARDER:
                        valid = allowed_ip(&my_list->ip);
@@ -462,7 +462,7 @@ void
 name_destructor(void)
 {
        OLSR_PRINTF(2, "NAME PLUGIN: exit. cleaning up...\n");
-       
+
        free_name_entry_list(&my_names);
        free_name_entry_list(&my_services);
        free_name_entry_list(&my_forwarders);
@@ -483,14 +483,14 @@ name_destructor(void)
 }
 
 /* free all list entries */
-void 
-free_all_list_entries(struct list_node *this_db_list) 
+void
+free_all_list_entries(struct list_node *this_db_list)
 {
        struct db_entry *db;
        struct list_node *list_head, *list_node, *list_node_next;
 
        int i;
-       
+
        for (i = 0; i < HASHSIZE; i++) {
 
                list_head = &this_db_list[i];
@@ -548,13 +548,13 @@ void
 olsr_namesvc_delete_db_entry(struct db_entry *db)
 {
        struct ipaddr_str strbuf;
-       OLSR_PRINTF(2, "NAME PLUGIN: %s timed out... deleting\n", 
+       OLSR_PRINTF(2, "NAME PLUGIN: %s timed out... deleting\n",
                                olsr_ip_to_string(&strbuf, &db->originator));
 
        olsr_start_write_file_timer();
        olsr_stop_timer(db->db_timer); /* stop timer if running */
        db->db_timer = NULL;
-       
+
        /* Delete */
        free_name_entry_list(&db->names);
        list_remove(&db->db_list);
@@ -613,12 +613,12 @@ olsr_namesvc_gen(void *foo __attribute__((unused)))
 
                namesize = encap_namemsg((struct namemsg*)&message->v6.message);
                namesize = namesize + sizeof(struct olsrmsg6);
-               
+
                message->v6.olsr_msgsize = htons(namesize);
        }
 
        /* looping trough interfaces */
-       for (ifn = ifnet; ifn ; ifn = ifn->int_next) 
+       for (ifn = ifnet; ifn ; ifn = ifn->int_next)
        {
                OLSR_PRINTF(3, "NAME PLUGIN: Generating packet - [%s]\n", ifn->int_name);
 
@@ -655,7 +655,7 @@ olsr_parser(union olsr_message *m,
                memcpy(&originator, &m->v6.originator, olsr_cnf->ipsize);
                seqno = ntohs(m->v6.seqno);
        }
-               
+
        /* Fetch the message based on IP version */
        if(olsr_cnf->ip_version == AF_INET) {
                vtime = me_to_reltime(m->v4.olsr_vtime);
@@ -668,12 +668,12 @@ olsr_parser(union olsr_message *m,
                namemessage = (struct namemsg*)&m->v6.message;
        }
 
-       /* Check if message originated from this node. 
+       /* Check if message originated from this node.
        If so - back off */
        if(ipequal(&originator, &olsr_cnf->main_addr))
                return;
 
-       /* Check that the neighbor this message was received from is symmetric. 
+       /* Check that the neighbor this message was received from is symmetric.
        If not - back off*/
        if(check_neighbor_link(ipaddr) != SYM_LINK) {
                struct ipaddr_str strbuf;
@@ -682,14 +682,10 @@ olsr_parser(union olsr_message *m,
        }
 
        update_name_entry(&originator, namemessage, size, vtime);
-
-       /* Forward the message if nessecary
-       * default_fwd does all the work for us! */
-       olsr_forward_message(m, ipaddr);
 }
 
 /**
- * Encapsulate a name message into a packet. 
+ * Encapsulate a name message into a packet.
  *
  * It assumed that there is enough space in the buffer to do this!
  *
@@ -764,13 +760,13 @@ encap_namemsg(struct namemsg* msg)
  *
  * return the length of the name packet
  */
-char*  
+char*
 create_packet(struct name* to, struct name_entry *from)
 {
        char *pos = (char*) to;
        int k;
        struct ipaddr_str strbuf;
-       OLSR_PRINTF(3, "NAME PLUGIN: Announcing name %s (%s) %d\n", 
+       OLSR_PRINTF(3, "NAME PLUGIN: Announcing name %s (%s) %d\n",
                from->name, olsr_ip_to_string(&strbuf, &from->ip), from->len);
        to->type = htons(from->type);
        to->len = htons(from->len);
@@ -815,7 +811,7 @@ decap_namemsg(struct name *from_packet, struct name_entry **to, olsr_bool *this_
                return;
        }
 
-       // don't insert the received entry again, if it has already been inserted in the hash table. 
+       // don't insert the received entry again, if it has already been inserted in the hash table.
        // Instead only the validity time is set in insert_new_name_in_list function, which calls this one
        for (already_saved_name_entries = (*to); already_saved_name_entries != NULL ; already_saved_name_entries = already_saved_name_entries->next)
        {
@@ -861,15 +857,15 @@ decap_namemsg(struct name *from_packet, struct name_entry **to, olsr_bool *this_
                }
        }
 
-       //if not yet known entry 
-       tmp = olsr_malloc(sizeof(struct name_entry), "new name_entry");         
+       //if not yet known entry
+       tmp = olsr_malloc(sizeof(struct name_entry), "new name_entry");
        tmp->type = ntohs(from_packet->type);
        tmp->len = len_of_name > MAX_NAME ? MAX_NAME : ntohs(from_packet->len);
        tmp->name = olsr_malloc(tmp->len + 1, "new name_entry name");
        tmp->ip = from_packet->ip;
        strscpy(tmp->name, name, tmp->len + 1);
 
-       OLSR_PRINTF(3, "\nNAME PLUGIN: create new name/service/forwarder entry %s (%s) [len=%d] [type=%d] in linked list\n", 
+       OLSR_PRINTF(3, "\nNAME PLUGIN: create new name/service/forwarder entry %s (%s) [len=%d] [type=%d] in linked list\n",
                tmp->name, olsr_ip_to_string(&strbuf, &tmp->ip), tmp->len, tmp->type);
 
        *this_table_changed = OLSR_TRUE;
@@ -890,37 +886,37 @@ update_name_entry(union olsr_ip_addr *originator, struct namemsg *msg, int msg_s
 {
        struct ipaddr_str strbuf;
        char *pos, *end_pos;
-       struct name *from_packet; 
+       struct name *from_packet;
        int i;
 
-       OLSR_PRINTF(3, "NAME PLUGIN: Received Message from %s\n", 
+       OLSR_PRINTF(3, "NAME PLUGIN: Received Message from %s\n",
                                olsr_ip_to_string(&strbuf, originator));
-       
+
        if (ntohs(msg->version) != NAME_PROTOCOL_VERSION) {
                OLSR_PRINTF(3, "NAME PLUGIN: ignoring wrong version %d\n", msg->version);
                return;
        }
-       
+
        /* now add the names from the message */
        pos = (char*)msg + sizeof(struct namemsg);
-       end_pos = pos + msg_size - sizeof(struct name*); // at least one struct name has to be left     
+       end_pos = pos + msg_size - sizeof(struct name*); // at least one struct name has to be left
 
-       for (i=ntohs(msg->nr_names); i > 0 && pos<end_pos; i--) 
+       for (i=ntohs(msg->nr_names); i > 0 && pos<end_pos; i--)
        {
                from_packet = (struct name*)pos;
-               
+
                switch (ntohs(from_packet->type)) {
-                       case NAME_HOST: 
+                       case NAME_HOST:
                                insert_new_name_in_list(originator, name_list, from_packet,
-                                                                               &name_table_changed, vtime); 
+                                                                               &name_table_changed, vtime);
                                break;
                        case NAME_FORWARDER:
                                insert_new_name_in_list(originator, forwarder_list, from_packet,
-                                                                               &forwarder_table_changed, vtime); 
+                                                                               &forwarder_table_changed, vtime);
                                break;
                        case NAME_SERVICE:
                                insert_new_name_in_list(originator, service_list, from_packet,
-                                                                               &service_table_changed, vtime); 
+                                                                               &service_table_changed, vtime);
                                break;
                        case NAME_LATLON:
                                insert_new_name_in_list(originator, latlon_list, from_packet,
@@ -1002,7 +998,7 @@ insert_new_name_in_list(union olsr_ip_addr *originator,
 
                /* insert to the list */
                list_add_before(&this_list[hash], &entry->db_list);
-               
+
                //delegate to function for parsing the packet and linking it to entry->names
                decap_namemsg(from_packet, &entry->names, this_table_changed);
        }
@@ -1040,12 +1036,12 @@ send_sighup_to_pidfile(char * pid_file){
        ipid = strtol(line, &endptr, 0);
        if (endptr==line) {
                OLSR_PRINTF(2, "NAME PLUGIN: invalid pid at file %s\n", pid_file);
-               return; 
+               return;
        }
 
        result=kill(ipid, SIGHUP);
        if (result==0){
-               OLSR_PRINTF(2, "NAME PLUGIN: SIGHUP sent to pid %i\n", ipid);   
+               OLSR_PRINTF(2, "NAME PLUGIN: SIGHUP sent to pid %i\n", ipid);
        } else {
                OLSR_PRINTF(2, "NAME PLUGIN: failed to send SIGHUP to pid %i\n", ipid);
        }
@@ -1083,13 +1079,13 @@ write_hosts_file(void)
                OLSR_PRINTF(2, "NAME PLUGIN: cant write hosts file\n");
                return;
        }
-       
+
        fprintf(hosts, "### this /etc/hosts file is overwritten regularly by olsrd\n");
        fprintf(hosts, "### do not edit\n\n");
 
        fprintf(hosts, "127.0.0.1\tlocalhost\n");
        fprintf(hosts, "::1\t\tlocalhost\n\n");
-       
+
        // copy content from additional hosts filename
        if (my_add_hosts[0] != '\0') {
                add_hosts = fopen( my_add_hosts, "r" );
@@ -1101,16 +1097,16 @@ write_hosts_file(void)
                        while ((c = getc(add_hosts)) != EOF)
                                putc(c, hosts);
                }
-               fclose(add_hosts);              
+               fclose(add_hosts);
                fprintf(hosts, "\n### olsr names ###\n\n");
        }
-       
+
        // write own names
        for (name = my_names; name != NULL; name = name->next) {
                struct ipaddr_str strbuf;
                fprintf(hosts, "%s\t%s%s\t# myself\n", olsr_ip_to_string(&strbuf, &name->ip), name->name, my_suffix );
        }
-       
+
        // write received names
        for (hash = 0; hash < HASHSIZE; hash++) {
                list_head = &name_list[hash];
@@ -1172,7 +1168,7 @@ write_hosts_file(void)
        if (time(&currtime)) {
                fprintf(hosts, "\n### written by olsrd at %s", ctime(&currtime));
        }
-         
+
        fclose(hosts);
 
 #ifndef WIN32
@@ -1222,16 +1218,16 @@ write_services_file(void)
                OLSR_PRINTF(2, "NAME PLUGIN: cant write services_file file\n");
                return;
        }
-       
+
        fprintf(services_file, "### this file is overwritten regularly by olsrd\n");
        fprintf(services_file, "### do not edit\n\n");
 
-       
+
        // write own services
        for (name = my_services; name != NULL; name = name->next) {
                fprintf(services_file, "%s\t# my own service\n", name->name);
        }
-       
+
        // write received services
        for (hash = 0; hash < HASHSIZE; hash++) {
                list_head = &service_list[hash];
@@ -1256,10 +1252,10 @@ write_services_file(void)
        if (time(&currtime)) {
                fprintf(services_file, "\n### written by olsrd at %s", ctime(&currtime));
        }
-         
+
        fclose(services_file);
        service_table_changed = OLSR_FALSE;
-       
+
        // Executes my_services_change_script after writing the services file
        if (my_services_change_script[0] != '\0') {
                if(system(my_services_change_script) != -1) {
@@ -1371,7 +1367,7 @@ write_resolv_file(void)
        /* if there is no best route we are done */
        if (nameserver_routes[NAMESERVER_COUNT]==NULL)
                return;
-                
+
        /* write to file */
        OLSR_PRINTF(2, "NAME PLUGIN: try to write to resolv file\n");
        resolv = fopen( my_resolv_file, "w" );
@@ -1409,8 +1405,8 @@ write_resolv_file(void)
 /**
  * completely free a list of name_entries
  */
-void 
-free_name_entry_list(struct name_entry **list) 
+void
+free_name_entry_list(struct name_entry **list)
 {
        struct name_entry **tmp = list;
        struct name_entry *to_delete;
@@ -1446,9 +1442,9 @@ free_name_entry_list(struct name_entry **list)
 
 /**
  * we only allow names for IP addresses which we are
- * responsible for: 
+ * responsible for:
  * so the IP must either be from one of the interfaces
- * or inside a HNA which we have configured 
+ * or inside a HNA which we have configured
  */
 olsr_bool
 allowed_ip(const union olsr_ip_addr *addr)
@@ -1458,9 +1454,9 @@ allowed_ip(const union olsr_ip_addr *addr)
        union olsr_ip_addr tmp_ip, tmp_msk;
        struct ipaddr_str strbuf;
        struct ipprefix_str prefixstr;
-       
+
        OLSR_PRINTF(6, "checking %s\n", olsr_ip_to_string(&strbuf, addr));
-       
+
        for(iface = ifnet; iface; iface = iface->int_next)
        {
                OLSR_PRINTF(6, "interface %s\n", olsr_ip_to_string(&strbuf, &iface->ip_addr));
@@ -1469,11 +1465,11 @@ allowed_ip(const union olsr_ip_addr *addr)
                        return OLSR_TRUE;
                }
        }
-       
+
        if (olsr_cnf->ip_version == AF_INET) {
                for (hna = olsr_cnf->hna_entries; hna != NULL; hna = hna->next) {
                        union olsr_ip_addr netmask;
-                       OLSR_PRINTF(6, "HNA %s\n", 
+                       OLSR_PRINTF(6, "HNA %s\n",
                                                olsr_ip_prefix_to_string(&prefixstr, &hna->net));
                        if (hna->net.prefix_len == 0) {
                                continue;
@@ -1488,7 +1484,7 @@ allowed_ip(const union olsr_ip_addr *addr)
                for (hna = olsr_cnf->hna_entries; hna != NULL; hna = hna->next)
                {
                        unsigned int i;
-                       OLSR_PRINTF(6, "HNA %s\n", 
+                       OLSR_PRINTF(6, "HNA %s\n",
                                olsr_ip_prefix_to_string(&prefixstr, &hna->net));
                        if ( hna->net.prefix_len == 0 )
                                continue;
@@ -1505,7 +1501,7 @@ allowed_ip(const union olsr_ip_addr *addr)
        return OLSR_FALSE;
 }
 
-/** check if name has the right syntax, i.e. it must adhere to a special regex 
+/** check if name has the right syntax, i.e. it must adhere to a special regex
  * stored in regex_t_name
  * necessary to avaid names like "0.0.0.0 google.de\n etc"
  */
@@ -1516,7 +1512,7 @@ is_name_wellformed(const char *name) {
 
 
 /**
- * check if the service is in the right syntax and also that the hostname 
+ * check if the service is in the right syntax and also that the hostname
  * or ip whithin the service is allowed
  */
 olsr_bool
@@ -1529,20 +1525,20 @@ allowed_service(const char *service_line)
                return OLSR_FALSE;
        } else if (!allowed_hostname_or_ip_in_service(service_line, &(regmatch_t_service[1]))) {
                return OLSR_FALSE;
-       } 
+       }
 
        return OLSR_TRUE;
 }
 
 olsr_bool
-allowed_hostname_or_ip_in_service(const char *service_line, const regmatch_t *hostname_or_ip_match) 
+allowed_hostname_or_ip_in_service(const char *service_line, const regmatch_t *hostname_or_ip_match)
 {
        char *hostname_or_ip;
        union olsr_ip_addr olsr_ip;
        struct name_entry *name;
        if (hostname_or_ip_match->rm_so < 0 || hostname_or_ip_match->rm_eo < 0) {
                return OLSR_FALSE;
-       } 
+       }
 
        hostname_or_ip = strndup(&service_line[hostname_or_ip_match->rm_so], hostname_or_ip_match->rm_eo - hostname_or_ip_match->rm_so);
        //hostname is one of the names, that I announce (i.e. one that i am allowed to announce)
@@ -1555,7 +1551,7 @@ allowed_hostname_or_ip_in_service(const char *service_line, const regmatch_t *ho
                }
        }
 
-       //ip in service-line is allowed 
+       //ip in service-line is allowed
        if (inet_pton(olsr_cnf->ip_version, hostname_or_ip, &olsr_ip) > 0) {
                if (allowed_ip(&olsr_ip)) {
                        struct ipaddr_str strbuf;
@@ -1574,8 +1570,8 @@ allowed_hostname_or_ip_in_service(const char *service_line, const regmatch_t *ho
 }
 
 /**
- * check if the service matches the syntax 
- * of "protocol://host:port/path|tcp_or_udp|a short description", 
+ * check if the service matches the syntax
+ * of "protocol://host:port/path|tcp_or_udp|a short description",
  * which is given in the regex regex_t_service
  */
 olsr_bool
@@ -1585,7 +1581,7 @@ is_service_wellformed(const char *service_line)
 }
 
 /**
- * check if the latlot matches the syntax 
+ * check if the latlot matches the syntax
  */
 olsr_bool
 is_latlon_wellformed(const char *latlon_line)
@@ -1662,9 +1658,9 @@ void
 write_latlon_file(void)
 {
   FILE* fmap;
-  
+
   if (!my_names || !latlon_table_changed) return;
-  
+
   OLSR_PRINTF(2, "NAME PLUGIN: writing latlon file\n");
 
   if (NULL == (fmap = fopen(my_latlon_file, "w"))) {
@@ -1672,7 +1668,7 @@ write_latlon_file(void)
     return;
   }
   fprintf(fmap, "/* This file is overwritten regularly by olsrd */\n");
-  mapwrite_work(fmap);  
+  mapwrite_work(fmap);
   fclose(fmap);
   latlon_table_changed = OLSR_FALSE;
 }
index e2b9297..75397f0 100644 (file)
@@ -4,31 +4,31 @@
  * Copyright (c) 2004, Thomas Lopatic (thomas@olsr.org)
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
  * are met:
  *
- * * Redistributions of source code must retain the above copyright 
+ * * Redistributions of source code must retain the above copyright
  *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright 
- *   notice, this list of conditions and the following disclaimer in 
- *   the documentation and/or other materials provided with the 
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
  *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its 
- *   contributors may be used to endorse or promote products derived 
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
  *   from this software without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * Visit http://www.olsr.org for more information.
@@ -103,7 +103,7 @@ int iterLinkTabNext(char *buff, int len)
 {
   struct list_node *link_node;
   struct lqtextbuffer lqbuffer;
-  
+
   if (iterLinkTab == NULL)
     return -1;
 
@@ -142,7 +142,7 @@ int iterNeighTabNext(char *buff, int len)
   int res;
   int i;
   struct neighbor_2_list_entry *neigh2;
-  
+
   if (iterNeighTab == NULL)
     return -1;
 
@@ -188,7 +188,7 @@ int iterNeighTabNext(char *buff, int len)
   if (iterNeighTab == &neighTab[iterIndex])
   {
     iterNeighTab = NULL;
-    
+
     while (++iterIndex < HASHSIZE)
       if (neighTab[iterIndex].next != &neighTab[iterIndex])
       {
@@ -270,7 +270,7 @@ int iterTcTabNext(char *buff, int len)
   int i;
   struct tc_edge_entry *tc_edge;
   struct lqtextbuffer lqbuffer;
-  
+
   if (iterTcTab == NULL)
     return -1;
 
@@ -300,7 +300,7 @@ int iterTcTabNext(char *buff, int len)
 
     i++;
   } OLSR_FOR_ALL_TC_EDGE_ENTRIES_END(iterTcTab, tc_edge);
-  
+
   strcpy(buff, "]~");
 
   iterTcTab = tas_getnext_tc_entry(iterTcTab);
@@ -311,7 +311,7 @@ int iterTcTabNext(char *buff, int len)
 void iterTcTabInit(void)
 {
   struct avl_node *node;
-  
+
   avl_init(&tc_tree, avl_comp_default);
 
   node = avl_walk_first(&tc_tree);
@@ -372,8 +372,6 @@ static void parserFunc(union olsr_message *msg,
     }
 
     httpAddTasMessage(service, string, rawIpAddrToString(orig, olsr_cnf->ipsize));
-
-  olsr_forward_message(msg, neighIntAddr);
 }
 
 void sendMessage(const char *service, const char *string)
@@ -457,11 +455,11 @@ int olsrd_plugin_init(void)
   service_timer_cookie  = olsr_alloc_cookie("Tas: service", OLSR_COOKIE_TYPE_TIMER);
 
   httpInit();
-  
+
   olsr_start_timer(OLSR_TAS_SERVICE_INT, 0, OLSR_TIMER_PERIODIC,
                    &serviceFunc, NULL, service_timer_cookie->ci_id);
 
-  olsr_parser_add_function(parserFunc, MESSAGE_TYPE, 1);
+  olsr_parser_add_function(parserFunc, MESSAGE_TYPE);
 
   return 0;
 }
index ff14cb5..76403eb 100644 (file)
@@ -94,6 +94,8 @@ olsr_create_duplicate_entry(void *ip, olsr_u16_t seqnr)
     entry->seqnr = seqnr;
     entry->too_low_counter = 0;
     entry->avl.key = &entry->ip;
+    entry->forwardedArray = 0;
+    entry->processedArray = 0;
   }
   return entry;
 }
@@ -112,14 +114,15 @@ olsr_cleanup_duplicate_entry(void __attribute__ ((unused)) * unused)
 }
 
 int
-olsr_shall_process_message(void *ip, olsr_u16_t seqnr)
+olsr_message_is_duplicate(void *ip, olsr_u16_t seqnr, bool forwarding)
 {
   struct dup_entry *entry;
   int diff;
   void *mainIp;
   clock_t valid_until;
-
+  u_int32_t *array;
   struct ipaddr_str buf;
+
   // get main address
   mainIp = olsr_lookup_main_addr_by_alias(ip);
   if (mainIp == NULL) {
@@ -135,7 +138,7 @@ olsr_shall_process_message(void *ip, olsr_u16_t seqnr)
       avl_insert(&duplicate_set, &entry->avl, 0);
       entry->valid_until = valid_until;
     }
-    return 1;                  // okay, we process this package
+    return false;                      // okay, we process this package
   }
 
   diff = (int)seqnr - (int)(entry->seqnr);
@@ -149,6 +152,7 @@ olsr_shall_process_message(void *ip, olsr_u16_t seqnr)
     diff -= (1 << 16);
   }
 
+  array = forwarding ? &entry->forwardedArray : &entry->processedArray;
   if (diff < -31) {
     entry->too_low_counter++;
 
@@ -156,37 +160,36 @@ olsr_shall_process_message(void *ip, olsr_u16_t seqnr)
     if (entry->too_low_counter > 16) {
       entry->too_low_counter = 0;
       entry->seqnr = seqnr;
-      entry->array = 1;
-      return 1;
+      *array = 1;
+      return false; /* start with a new sequence number, so NO duplicate */
     }
     OLSR_PRINTF(9, "blocked %x from %s\n", seqnr,
                olsr_ip_to_string(&buf, mainIp));
-    return 0;
+    return true; /* duplicate ! */
   }
 
   entry->too_low_counter = 0;
   if (diff <= 0) {
     olsr_u32_t bitmask = 1 << ((olsr_u32_t) (-diff));
 
-    if ((entry->array & bitmask) != 0) {
+    if (((*array) & bitmask) != 0) {
       OLSR_PRINTF(9, "blocked %x (diff=%d,mask=%08x) from %s\n", seqnr, diff,
-                 entry->array, olsr_ip_to_string(&buf, mainIp));
-      return 0;
+          *array, olsr_ip_to_string(&buf, mainIp));
+      return true; /* duplicate ! */
     }
-    entry->array |= bitmask;
-    OLSR_PRINTF(9, "processed %x from %s\n", seqnr,
-               olsr_ip_to_string(&buf, mainIp));
-    return 1;
+    *array |= bitmask;
+    OLSR_PRINTF(9, "processed %x from %s\n", seqnr, olsr_ip_to_string(&buf, mainIp));
+    return false; /* no duplicate */
   } else if (diff < 32) {
-    entry->array <<= (olsr_u32_t) diff;
+    *array <<= (olsr_u32_t) diff;
   } else {
-    entry->array = 0;
+    *array = 0;
   }
-  entry->array |= 1;
+  *array |= 1;
   entry->seqnr = seqnr;
   OLSR_PRINTF(9, "processed %x from %s\n", seqnr,
              olsr_ip_to_string(&buf, mainIp));
-  return 1;
+  return false; /* no duplicate */
 }
 
 void
@@ -208,7 +211,7 @@ olsr_print_duplicate_table(void)
                ipwidth, olsr_ip_to_string(&addrbuf,
                                           (union olsr_ip_addr *)(entry->avl.
                                                                  key)),
-               entry->array, olsr_clock_string(entry->valid_until));
+               entry->processedArray, olsr_clock_string(entry->valid_until));
   } OLSR_FOR_ALL_DUP_ENTRIES_END(entry);
 #endif
 }
index 168708c..6c278f7 100644 (file)
@@ -56,7 +56,7 @@ struct dup_entry {
   union olsr_ip_addr ip;
   olsr_u16_t seqnr;
   olsr_u16_t too_low_counter;
-  olsr_u32_t array;
+  olsr_u32_t processedArray, forwardedArray;
   clock_t valid_until;
 };
 
@@ -64,7 +64,7 @@ AVLNODE2STRUCT(duptree2dupentry, struct dup_entry, avl);
 
 void olsr_init_duplicate_set(void);
 struct dup_entry *olsr_create_duplicate_entry(void *ip, olsr_u16_t seqnr);
-int olsr_shall_process_message(void *ip, olsr_u16_t seqnr);
+int olsr_message_is_duplicate(void *ip, olsr_u16_t seqnr, bool forwarding);
 void olsr_print_duplicate_table(void);
 
 #define OLSR_FOR_ALL_DUP_ENTRIES(dup) \
index 82272bb..dc7358c 100644 (file)
@@ -3,31 +3,31 @@
  * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
  * are met:
  *
- * * Redistributions of source code must retain the above copyright 
+ * * Redistributions of source code must retain the above copyright
  *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright 
- *   notice, this list of conditions and the following disclaimer in 
- *   the documentation and/or other materials provided with the 
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
  *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its 
- *   contributors may be used to endorse or promote products derived 
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
  *   from this software without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * Visit http://www.olsr.org for more information.
@@ -95,7 +95,7 @@ olsr_add_hna_net(struct tc_entry *tc, const struct olsr_ip_prefix *prefix)
 {
   /* Add the net */
   struct hna_net *new_net = olsr_cookie_malloc(hna_net_mem_cookie);
-  
+
   /* Fill struct */
   new_net->hna_prefix = *prefix;
 
@@ -114,7 +114,7 @@ olsr_add_hna_net(struct tc_entry *tc, const struct olsr_ip_prefix *prefix)
 
 /**
  * Delete a single HNA network.
- * 
+ *
  * @param hna_net the hna_net to delete.
  */
 static void
@@ -152,7 +152,7 @@ olsr_expire_hna_net_entry(void *context)
   struct ipaddr_str buf;
   struct ipprefix_str prefixstr;
 
-  OLSR_PRINTF(5, "HNA: timeout %s via hna-gw %s\n", 
+  OLSR_PRINTF(5, "HNA: timeout %s via hna-gw %s\n",
               olsr_ip_prefix_to_string(&prefixstr, &hna_net->hna_prefix),
               olsr_ip_to_string(&buf, &hna_net->hna_tc->addr));
 #endif
@@ -165,7 +165,7 @@ olsr_expire_hna_net_entry(void *context)
 /**
  * Update a HNA entry. If it does not exist it
  * is created.
- * This is the only function that should be called 
+ * This is the only function that should be called
  * from outside concerning creation of HNA entries.
  *
  *@param gw address of the gateway
@@ -307,8 +307,6 @@ olsr_input_hna(union olsr_message *msg,
       olsr_update_hna_entry(&msg_hdr.originator, &prefix, msg_hdr.vtime);
     }
   }
-
-  olsr_forward_message(msg, from_addr);
 }
 
 /*
index 3bd0749..1080865 100644 (file)
@@ -3,31 +3,31 @@
  * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
  * are met:
  *
- * * Redistributions of source code must retain the above copyright 
+ * * Redistributions of source code must retain the above copyright
  *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright 
- *   notice, this list of conditions and the following disclaimer in 
- *   the documentation and/or other materials provided with the 
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
  *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its 
- *   contributors may be used to endorse or promote products derived 
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
  *   from this software without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * Visit http://www.olsr.org for more information.
@@ -60,7 +60,7 @@
 #ifdef WIN32
 #define close(x) closesocket(x)
 #define perror(x) WinSockPError(x)
-void 
+void
 WinSockPError(const char *);
 #endif
 
@@ -136,7 +136,7 @@ ipc_init(void)
   int yes;
 
   /* Add parser function */
-  olsr_parser_add_function(&frontend_msgparser, PROMISCUOUS, 0);
+  olsr_parser_add_function(&frontend_msgparser, PROMISCUOUS);
 
   /* get an internet domain socket */
   ipc_sock = socket(AF_INET, SOCK_STREAM, 0);
@@ -192,7 +192,7 @@ ipc_check_allowed_ip(const union olsr_ip_addr *addr)
 
   /* check nets */
   for (ipcn = olsr_cnf->ipc_nets; ipcn != NULL; ipcn = ipcn->next) {
-    if (ip_in_net(addr, &ipcn->net)) { 
+    if (ip_in_net(addr, &ipcn->net)) {
       return OLSR_TRUE;
     }
   }
@@ -204,7 +204,7 @@ static void
 ipc_accept(int fd, void *data __attribute__((unused)), unsigned int flags __attribute__((unused)))
 {
   struct sockaddr_in pin;
-  char *addr;  
+  char *addr;
   socklen_t addrlen = sizeof (struct sockaddr_in);
 
   ipc_conn = accept(fd, (struct sockaddr *)&pin, &addrlen);
@@ -328,10 +328,10 @@ ipc_route_send_rtentry(const union olsr_ip_addr *dst,
       x++;
       printf(" %03i", (u_char) tmp[i]);
     }
-  
+
   printf("\n");
   */
-  
+
   if (send(ipc_conn, (void *)&packet, IPC_PACK_SIZE, MSG_NOSIGNAL) < 0) { // MSG_NOSIGNAL to avoid sigpipe
     OLSR_PRINTF(1, "(RT_ENTRY)IPC connection lost!\n");
     CLOSE(ipc_conn);
@@ -358,7 +358,7 @@ ipc_send_all_routes(int fd)
     memset(&packet, 0, sizeof(packet));
     packet.size = htons(IPC_PACK_SIZE);
     packet.msgtype = ROUTE_IPC;
-         
+
     packet.target_addr = rt->rt_dst.prefix;
 
     packet.add = 1;
@@ -394,18 +394,18 @@ ipc_send_net_info(int fd)
   struct ipc_net_msg net_msg;
 
   OLSR_PRINTF(1, "Sending net-info to front end...\n");
-  
+
   memset(&net_msg, 0, sizeof(net_msg));
-  
+
   /* Message size */
   net_msg.size = htons(sizeof(net_msg));
   /* Message type */
   net_msg.msgtype = NET_IPC;
-  
+
   /* MIDs */
   /* XXX fix IPC MIDcnt */
   net_msg.mids = (ifnet != NULL && ifnet->int_next != NULL) ? 1 : 0;
-  
+
   /* HNAs */
   net_msg.hnas = olsr_cnf->hna_entries == NULL ? 0 : 1;
 
@@ -419,7 +419,7 @@ ipc_send_net_info(int fd)
   net_msg.topology_hold = 0;//htons((olsr_u16_t)topology_hold_time);
 
   net_msg.ipv6 = olsr_cnf->ip_version == AF_INET ? 0 : 1;
+
   /* Main addr */
   net_msg.main_addr = olsr_cnf->main_addr;
 
@@ -436,7 +436,7 @@ ipc_send_net_info(int fd)
       x++;
       printf(" %03i", (u_char) msg[i]);
     }
-  
+
   printf("\n");
   */
 
index f4e6452..e0e6a30 100644 (file)
@@ -4,31 +4,31 @@
  * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
  * are met:
  *
- * * Redistributions of source code must retain the above copyright 
+ * * Redistributions of source code must retain the above copyright
  *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright 
- *   notice, this list of conditions and the following disclaimer in 
- *   the documentation and/or other materials provided with the 
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
  *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its 
- *   contributors may be used to endorse or promote products derived 
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
  *   from this software without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * Visit http://www.olsr.org for more information.
@@ -205,7 +205,7 @@ olsr_fixup_mid_main_addr (union olsr_ip_addr *main_addr,
     mid_old = olsr_lookup_mid_entry(alias_addr);
     if (mid_old) {
 
-      /* 
+      /*
        * We knew aliases to the previous main address.
        * Better forget about them now.
        */
@@ -383,7 +383,7 @@ olsr_lookup_main_addr_by_alias(const union olsr_ip_addr *adr)
 
 /**
  * Delete a single MID alias.
- * 
+ *
  * @param alias the alias to delete.
  */
 static void
@@ -555,8 +555,6 @@ olsr_input_mid(union olsr_message *msg,
    * Prune the aliases that did not get refreshed by this advertisment.
    */
   olsr_prune_mid_entries(&originator, msg_seq);
-
-  olsr_forward_message(msg, from_addr);
 }
 
 /*
index d94681d..870a643 100644 (file)
@@ -3,31 +3,31 @@
  * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
  * are met:
  *
- * * Redistributions of source code must retain the above copyright 
+ * * Redistributions of source code must retain the above copyright
  *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright 
- *   notice, this list of conditions and the following disclaimer in 
- *   the documentation and/or other materials provided with the 
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
  *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its 
- *   contributors may be used to endorse or promote products derived 
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
  *   from this software without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * Visit http://www.olsr.org for more information.
@@ -148,12 +148,12 @@ olsr_process_changes(void)
   if(changes_hna)
     OLSR_PRINTF(3, "CHANGES IN HNA\n");
 #endif
-  
+
   if(!changes_force &&
      2 <= olsr_cnf->lq_level &&
      0 >= olsr_cnf->lq_dlimit)
     return;
-    
+
   if(!changes_neighborhood &&
      !changes_topology &&
      !changes_hna)
@@ -177,13 +177,13 @@ olsr_process_changes(void)
   if (changes_neighborhood || changes_topology || changes_hna) {
     olsr_calculate_routing_table();
   }
-  
+
   if (olsr_cnf->debug_level > 0)
-    {      
-      if (olsr_cnf->debug_level > 2) 
+    {
+      if (olsr_cnf->debug_level > 2)
         {
           olsr_print_mid_set();
-         
+
           if (olsr_cnf->debug_level > 3)
             {
              if (olsr_cnf->debug_level > 8)
@@ -194,7 +194,7 @@ olsr_process_changes(void)
             }
         }
 
-#if 1     
+#if 1
       olsr_print_link_set();
       olsr_print_neighbor_table();
       olsr_print_two_hop_neighbor_table();
@@ -202,7 +202,7 @@ olsr_process_changes(void)
 #endif
     }
 
-  for(tmp_pc_list = pcf_list; 
+  for(tmp_pc_list = pcf_list;
       tmp_pc_list != NULL;
       tmp_pc_list = tmp_pc_list->next)
     {
@@ -227,7 +227,7 @@ olsr_trigger_forced_update(void *unused __attribute__((unused))) {
   changes_neighborhood = OLSR_TRUE;
   changes_topology = OLSR_TRUE;
   changes_hna = OLSR_TRUE;
-  
+
   olsr_process_changes();
 }
 
@@ -238,7 +238,7 @@ olsr_trigger_forced_update(void *unused __attribute__((unused))) {
  */
 void
 olsr_init_tables(void)
-{  
+{
   /* Some cookies for stats keeping */
   static struct olsr_cookie_info *periodic_spf_timer_cookie = NULL;
 
@@ -257,7 +257,7 @@ olsr_init_tables(void)
 
   /* Initialize lq plugin set */
   init_lq_handler_tree();
-  
+
   /* Initialize link set */
   olsr_init_link_set();
 
@@ -280,7 +280,7 @@ olsr_init_tables(void)
   olsr_init_mid_set();
 
   /* Initialize HNA set */
-  olsr_init_hna_set();  
+  olsr_init_hna_set();
 
   /* Initialize MPRS */
   olsr_init_mprs();
@@ -289,7 +289,7 @@ olsr_init_tables(void)
   /* Initialize Layer 1/2 database */
   olsr_initialize_layer12();
 #endif
-  
+
   /* Start periodic SPF and RIB recalculation */
   if (olsr_cnf->lq_dinter > 0.0) {
     periodic_spf_timer_cookie = olsr_alloc_cookie("Periodic SPF",
@@ -311,7 +311,7 @@ olsr_init_tables(void)
  *@returns positive if forwarded
  */
 int
-olsr_forward_message(union olsr_message *m, 
+olsr_forward_message(union olsr_message *m,
                     union olsr_ip_addr *from_addr)
 {
   union olsr_ip_addr *src;
@@ -326,11 +326,11 @@ olsr_forward_message(union olsr_message *m,
    */
   if (AF_INET == olsr_cnf->ip_version)
   {
-    if (2 > m->v4.ttl || 255 < (int)m->v4.hopcnt + (int)m->v4.ttl) return 0;
+    if (m->v4.ttl < 2 || 255 < (int)m->v4.hopcnt + (int)m->v4.ttl) return 0;
   }
   else
   {
-    if (2 > m->v6.ttl || 255 < (int)m->v6.hopcnt + (int)m->v6.ttl) return 0;
+    if (m->v6.ttl < 2|| 255 < (int)m->v6.hopcnt + (int)m->v6.ttl) return 0;
   }
 
   /* Lookup sender address */
@@ -355,26 +355,39 @@ olsr_forward_message(union olsr_message *m,
       return 0;
     }
 
+  /* check if we already forwarded this message */
+  if (AF_INET == olsr_cnf->ip_version)
+  {
+    if (olsr_message_is_duplicate(from_addr, m->v4.seqno, true)) {
+      return 0; /* it's a duplicate, forget about it */
+    }
+  }
+  else {
+    if (olsr_message_is_duplicate(from_addr, m->v6.seqno, true)) {
+      return 0; /* it's a duplicate, forget about it */
+    }
+  }
+
   /* Treat TTL hopcnt */
   if(olsr_cnf->ip_version == AF_INET)
     {
       /* IPv4 */
       m->v4.hopcnt++;
-      m->v4.ttl--; 
+      m->v4.ttl--;
     }
   else
     {
       /* IPv6 */
       m->v6.hopcnt++;
-      m->v6.ttl--; 
+      m->v6.ttl--;
     }
 
   /* Update packet data */
   msgsize = ntohs(m->v4.olsr_msgsize);
 
   /* looping trough interfaces */
-  for (ifn = ifnet; ifn ; ifn = ifn->int_next) 
-    { 
+  for (ifn = ifnet; ifn ; ifn = ifn->int_next)
+    {
       if(net_output_pending(ifn))
        {
          /*
@@ -386,7 +399,7 @@ olsr_forward_message(union olsr_message *m,
              net_output(ifn);
              /* Buffer message */
              set_buffer_timer(ifn);
-             
+
              if(net_outbuffer_push(ifn, m, msgsize) != msgsize)
                {
                  OLSR_PRINTF(1, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msgsize);
@@ -398,7 +411,7 @@ olsr_forward_message(union olsr_message *m,
        {
          /* No forwarding pending */
          set_buffer_timer(ifn);
-         
+
          if(net_outbuffer_push(ifn, m, msgsize) != msgsize)
            {
              OLSR_PRINTF(1, "Received message to big to be forwarded in %s(%d bytes)!", ifn->int_name, msgsize);
@@ -448,7 +461,7 @@ olsr_expire_buffer_timer(void *context)
  */
 void
 set_buffer_timer(struct interface *ifn)
-{      
+{
 
   /*
    * Bail if there is already a timer running.
@@ -527,7 +540,7 @@ olsr_calculate_willingness(void)
   if(ainfo.ac_line_status == OLSR_AC_POWERED)
     return 6;
 
-  /* If battery powered 
+  /* If battery powered
    *
    * juice > 78% will: 3
    * 78% > juice > 26% will: 2
index 054580a..d571231 100644 (file)
@@ -98,17 +98,16 @@ void olsr_init_parser(void)
   olsr_init_package_process();
 }
 
-void olsr_parser_add_function(parse_function *function, olsr_u32_t type, int forwarding)
+void olsr_parser_add_function(parse_function *function, olsr_u32_t type)
 {
   struct parse_function_entry *new_entry;
-  
+
   OLSR_PRINTF(3, "Parser: registering event for type %d\n", type);
 
   new_entry = olsr_malloc(sizeof(*new_entry), "Register parse function");
 
   new_entry->function = function;
   new_entry->type = type;
-  new_entry->caller_forwarding = forwarding;
 
   /* Queue */
   new_entry->next = parse_functions;
@@ -117,14 +116,14 @@ void olsr_parser_add_function(parse_function *function, olsr_u32_t type, int for
   OLSR_PRINTF(3, "Register parse function: Added function for type %d\n", type);
 }
 
-int olsr_parser_remove_function(parse_function *function, olsr_u32_t type, int forwarding)
+int olsr_parser_remove_function(parse_function *function, olsr_u32_t type)
 {
   struct parse_function_entry *entry, *prev;
 
   for (entry = parse_functions, prev = NULL;
        entry != NULL;
        prev = entry, entry = entry->next) {
-    if ((entry->function == function) && (entry->type == type) && (entry->caller_forwarding == forwarding)) {
+    if ((entry->function == function) && (entry->type == type)) {
       if (entry == parse_functions) {
         parse_functions = entry->next;
       } else {
@@ -252,6 +251,7 @@ static void parse_packet(struct olsr *olsr, int size, struct interface *in_if, u
   int processed;
   struct parse_function_entry *entry;
   struct packetparser_function_entry *packetparser;
+  bool isDuplicate;
   int count = size - ((char *)m - (char *)olsr);
 
   if (count < MIN_PACKET_SIZE(olsr_cnf->ip_version)) {
@@ -300,7 +300,7 @@ static void parse_packet(struct olsr *olsr, int size, struct interface *in_if, u
     if (count < 0) {
       struct ipaddr_str buf;
       OLSR_PRINTF(1, "packet length error in  packet received from %s!",
-                 olsr_ip_to_string(&buf, from_addr));
+                  olsr_ip_to_string(&buf, from_addr));
 
       olsr_syslog(OLSR_LOG_ERR, " packet length error in  packet received from %s!",
       olsr_ip_to_string(&buf, from_addr));
@@ -323,8 +323,8 @@ static void parse_packet(struct olsr *olsr, int size, struct interface *in_if, u
       if (m->v4.ttl <= 0 && olsr_cnf->lq_fish == 0) {
         struct ipaddr_str buf;
         OLSR_PRINTF(2, "Dropping packet type %d from neigh %s with TTL 0\n",
-                   m->v4.olsr_msgtype,
-                   olsr_ip_to_string(&buf, from_addr));
+                    m->v4.olsr_msgtype,
+                    olsr_ip_to_string(&buf, from_addr));
         continue;
       }
     } else {
@@ -332,8 +332,8 @@ static void parse_packet(struct olsr *olsr, int size, struct interface *in_if, u
       if (m->v6.ttl <= 0 && olsr_cnf->lq_fish == 0) {
         struct ipaddr_str buf;
         OLSR_PRINTF(2, "Dropping packet type %d from %s with TTL 0\n",
-                   m->v4.olsr_msgtype,
-                   olsr_ip_to_string(&buf, from_addr));
+                    m->v4.olsr_msgtype,
+                    olsr_ip_to_string(&buf, from_addr));
         continue;
       }
     }
@@ -353,62 +353,56 @@ static void parse_packet(struct olsr *olsr, int size, struct interface *in_if, u
 #ifdef DEBUG
       struct ipaddr_str buf;
       OLSR_PRINTF(3, "Not processing message originating from %s!\n",
-                 olsr_ip_to_string(&buf,(union olsr_ip_addr *)&m->v4.originator));
+                  olsr_ip_to_string(&buf,(union olsr_ip_addr *)&m->v4.originator));
 #endif
       continue;
     }
 
     /* check for message duplicates */
+    isDuplicate = false;
     if (olsr_cnf->ip_version == AF_INET) {
       /* IPv4 */
-      if (olsr_shall_process_message(&m->v4.originator, ntohs(m->v4.seqno)) == 0) {
-        continue;
-      }
+      isDuplicate = olsr_message_is_duplicate(&m->v4.originator, ntohs(m->v4.seqno), false);
     } else {
       /* IPv6 */
-      if (olsr_shall_process_message(&m->v6.originator, ntohs(m->v6.seqno)) == 0) {
-        continue;
-      }
+      isDuplicate = olsr_message_is_duplicate(&m->v6.originator, ntohs(m->v6.seqno), false);
     }
 
     //printf("MESSAGETYPE: %d\n", m->v4.olsr_msgtype);
-    for (entry = parse_functions; entry != NULL; entry = entry->next) {
-      /* Should be the same for IPv4 and IPv6 */
-
-      /* Promiscuous or exact match */
-      if ((entry->type == PROMISCUOUS) || (entry->type == m->v4.olsr_msgtype)) {
-        entry->function(m, in_if, from_addr);
-        if (entry->caller_forwarding) {
+    if (!isDuplicate) {
+      processed = 0;
+      for (entry = parse_functions; entry != NULL; entry = entry->next) {
+        /* Should be the same for IPv4 and IPv6 */
+
+        /* Promiscuous or exact match */
+        if ((entry->type == PROMISCUOUS) || (entry->type == m->v4.olsr_msgtype)) {
+          entry->function(m, in_if, from_addr);
           processed = 1;
-       }
+        }
       }
     }
-
     /* UNKNOWN PACKETTYPE */
     if (processed == 0) {
       union olsr_ip_addr originator;
       //struct unknown_message unkpacket;
       struct ipaddr_str buf;
       if (olsr_cnf->ip_version == AF_INET) {
-       originator.v4.s_addr = m->v4.originator;
+        originator.v4.s_addr = m->v4.originator;
       } else {
-       originator.v6 = m->v6.originator;
+        originator.v6 = m->v6.originator;
       }
 
       OLSR_PRINTF(3, "Unknown type: %d, size %d, from %s\n",
-                 m->v4.olsr_msgtype,
-                 size,
-                 olsr_ip_to_string(&buf, &originator));
-
-      /* Forward message */
-      if (!ipequal(&originator, &olsr_cnf->main_addr)) {
-        /* Forward */
-        olsr_forward_message(m, from_addr);
-      }
+                  m->v4.olsr_msgtype,
+                  size,
+                  olsr_ip_to_string(&buf, &originator));
 
       /* Cancel loop here, otherwise olsrd just hangs forever at this point */
       break;
     }
+
+    /* now call function to check for forwarding */
+    olsr_forward_message(m, from_addr);
   } /* for olsr_msg */
 }
 
@@ -464,13 +458,13 @@ olsr_input(int fd, void *data __attribute__((unused)), unsigned int flags __attr
     if (olsr_cnf->ip_version == AF_INET) {
       /* IPv4 sender address */
       if (fromlen != sizeof(struct sockaddr_in)) {
-       break;
+        break;
       }
       from_addr.v4 = ((struct sockaddr_in *)&from)->sin_addr;
     } else {
       /* IPv6 sender address */
       if (fromlen != sizeof(struct sockaddr_in6)) {
-       break;
+        break;
       }
       from_addr.v6 = ((struct sockaddr_in6 *)&from)->sin6_addr;
     }
@@ -483,11 +477,11 @@ olsr_input(int fd, void *data __attribute__((unused)), unsigned int flags __attr
     if (olsr_in_if == NULL) {
       struct ipaddr_str buf;
       OLSR_PRINTF(1, "Could not find input interface for message from %s size %d\n",
-                 olsr_ip_to_string(&buf, &from_addr),
-                 cc);
+                  olsr_ip_to_string(&buf, &from_addr),
+                  cc);
       olsr_syslog(OLSR_LOG_ERR, "Could not find input interface for message from %s size %d\n",
-                 olsr_ip_to_string(&buf, &from_addr),
-                 cc);
+                  olsr_ip_to_string(&buf, &from_addr),
+                  cc);
       return;
     }
 
@@ -576,11 +570,11 @@ void olsr_input_hostemu(int fd, void *data __attribute__((unused)), unsigned int
   if (olsr_in_if == NULL) {
     struct ipaddr_str buf;
     OLSR_PRINTF(1, "Could not find input interface for message from %s size %d\n",
-               olsr_ip_to_string(&buf, &from_addr),
-               cc);
+                olsr_ip_to_string(&buf, &from_addr),
+                cc);
     olsr_syslog(OLSR_LOG_ERR, "Could not find input interface for message from %s size %d\n",
-               olsr_ip_to_string(&buf, &from_addr),
-               cc);
+                olsr_ip_to_string(&buf, &from_addr),
+                cc);
     return;
   }
 
index d2c077e..c23237b 100644 (file)
@@ -3,31 +3,31 @@
  * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
  * are met:
  *
- * * Redistributions of source code must retain the above copyright 
+ * * Redistributions of source code must retain the above copyright
  *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright 
- *   notice, this list of conditions and the following disclaimer in 
- *   the documentation and/or other materials provided with the 
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
  *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its 
- *   contributors may be used to endorse or promote products derived 
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
  *   from this software without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * Visit http://www.olsr.org for more information.
@@ -53,7 +53,6 @@ typedef void parse_function(union olsr_message *, struct interface *, union olsr
 
 struct parse_function_entry {
   olsr_u32_t type;       /* If set to PROMISCUOUS all messages will be received */
-  int caller_forwarding; /* If set to 0 this entry is not registered as forwarding packets */
   parse_function *function;
   struct parse_function_entry *next;
 };
@@ -78,17 +77,17 @@ parser_set_disp_pack_in(olsr_bool);
 void
 olsr_init_parser(void);
 
-void 
+void
 olsr_input(int, void *, unsigned int);
 
 void
 olsr_input_hostemu(int, void *, unsigned int);
 
 void
-olsr_parser_add_function(parse_function, olsr_u32_t, int);
+olsr_parser_add_function(parse_function, olsr_u32_t);
 
 int
-olsr_parser_remove_function(parse_function, olsr_u32_t, int);
+olsr_parser_remove_function(parse_function, olsr_u32_t);
 
 void
 olsr_preprocessor_add_function(preprocessor_function);
index 0190d7f..4275739 100644 (file)
@@ -312,12 +312,12 @@ lookup_mpr_status(const struct hello_message *message,
 void
 olsr_init_package_process(void)
 {
-  olsr_parser_add_function(&olsr_input_hello, HELLO_MESSAGE, 1);
-  olsr_parser_add_function(&olsr_input_hello, LQ_HELLO_MESSAGE, 1);
-  olsr_parser_add_function(&olsr_input_tc, TC_MESSAGE, 1);
-  olsr_parser_add_function(&olsr_input_tc, LQ_TC_MESSAGE, 1);
-  olsr_parser_add_function(&olsr_input_mid, MID_MESSAGE, 1);
-  olsr_parser_add_function(&olsr_input_hna, HNA_MESSAGE, 1);
+  olsr_parser_add_function(&olsr_input_hello, HELLO_MESSAGE);
+  olsr_parser_add_function(&olsr_input_hello, LQ_HELLO_MESSAGE);
+  olsr_parser_add_function(&olsr_input_tc, TC_MESSAGE);
+  olsr_parser_add_function(&olsr_input_tc, LQ_TC_MESSAGE);
+  olsr_parser_add_function(&olsr_input_mid, MID_MESSAGE);
+  olsr_parser_add_function(&olsr_input_hna, HNA_MESSAGE);
 }
 
 static int
index 0f0015c..af43316 100644 (file)
@@ -5,31 +5,31 @@
  * LSDB rewrite (c) 2007, Hannes Gredler (hannes@gredler.at)
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
  * are met:
  *
- * * Redistributions of source code must retain the above copyright 
+ * * Redistributions of source code must retain the above copyright
  *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright 
- *   notice, this list of conditions and the following disclaimer in 
- *   the documentation and/or other materials provided with the 
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
  *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its 
- *   contributors may be used to endorse or promote products derived 
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
  *   from this software without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * Visit http://www.olsr.org for more information.
@@ -361,7 +361,7 @@ olsr_expire_tc_edge_gc(void *context)
  * If the edge does not have a minimum acceptable link quality
  * set the etx cost to infinity such that it gets ignored during
  * SPF calculation.
- * 
+ *
  * @return 1 if the change of the etx value was relevant
  */
 olsr_bool
@@ -688,7 +688,7 @@ olsr_print_tc_table(void)
  * @param pointer to lower border ip
  * @param upper border flag
  * @param pointer to upper border ip
- * @result 1 if lower/upper border ip have been set 
+ * @result 1 if lower/upper border ip have been set
  */
 static int
 olsr_calculate_tc_border(olsr_u8_t lower_border,
@@ -738,7 +738,7 @@ olsr_calculate_tc_border(olsr_u8_t lower_border,
  * If the message is interesting enough, update our edges for it,
  * trigger SPF and finally flood it to all our 2way neighbors.
  *
- * The order for extracting data off the message does matter, 
+ * The order for extracting data off the message does matter,
  * as every call to pkt_get increases the packet offset and
  * hence the spot we are looking at.
  */
@@ -906,11 +906,6 @@ olsr_input_tc(union olsr_message *msg,
                   OLSR_TC_EDGE_GC_JITTER, OLSR_TIMER_ONESHOT,
                   &olsr_expire_tc_edge_gc, tc, tc_edge_gc_timer_cookie->ci_id);
   }
-
-  /*
-   * Last, flood the message to our other neighbors.
-   */
-  olsr_forward_message(msg, from_addr);
 }
 
 /*