1 --- a/lib/httpinfo/src/olsrd_httpinfo.c
2 +++ b/lib/httpinfo/src/olsrd_httpinfo.c
7 + struct allowed_net *a, *next;
8 if (http_socket >= 0) {
12 + for (a = allowed_nets; a != NULL; a = next) {
20 --- a/src/interfaces.h
21 +++ b/src/interfaces.h
23 extern struct interface *ifnet;
26 +void olsr_delete_interfaces(void);
28 void run_ifchg_cbs(struct interface *, int);
30 --- a/src/linux/kernel_routes.c
31 +++ b/src/linux/kernel_routes.c
33 OLSR_PRINTF(1,"could not create rtnetlink socket! %d",sock);
36 + memset(&addr, 0, sizeof(addr));
38 addr.nl_family = AF_NETLINK;
39 addr.nl_pid = 0; //kernel will assign appropiate number instead of pid (which is already used by primaray rtnetlink socket to add/delete routes)
40 addr.nl_groups = rtnl_mgrp;
45 #include "build_msg.h"
49 #if LINUX_POLICY_ROUTING
50 #include <linux/types.h>
54 struct interface *ifn;
57 OLSR_PRINTF(1, "Received signal %d - shutting down\n", (int)signo);
61 olsr_delete_all_kernel_routes();
63 + olsr_delete_all_tc_entries();
65 + olsr_delete_all_mid_entries();
67 + olsr_destroy_parser();
69 OLSR_PRINTF(1, "Closing sockets...\n");
71 /* front-end IPC socket */
74 #endif /* SVEN_OLA_UNBLOAT */
77 for (ifn = ifnet; ifn; ifn = ifn->int_next)
78 close(ifn->olsr_socket);
83 /* Free cookies and memory pools attached. */
84 + OLSR_PRINTF(0, "Free all memory...\n");
85 olsr_delete_all_cookies();
87 olsr_syslog(OLSR_LOG_INFO, "%s stopped", olsrd_version);
89 OLSR_PRINTF(1, "\n <<<< %s - terminating >>>>\n http://www.olsr.org\n", olsrd_version);
91 - exit(olsr_cnf->exit_value);
92 + exit_value = olsr_cnf->exit_value;
102 * the copyright holders.
113 +void olsr_delete_all_mid_entries(void) {
116 + for (hash = 0; hash < HASHSIZE; hash++) {
117 + while (mid_set[hash].next != &mid_set[hash]) {
118 + olsr_delete_mid_entry(mid_set[hash].next);
123 * Wrapper for the timer callback.
125 @@ -124,10 +134,10 @@
127 * @param m_addr the main address of the node
128 * @param alias the alias address to insert
130 + * @return false if mid_address is unnecessary, true otherwise
135 insert_mid_tuple(union olsr_ip_addr *m_addr, struct mid_address *alias, olsr_reltime vtime)
137 struct mid_entry *tmp;
139 /* Check if alias is already registered with m_addr */
140 registered_m_addr = mid_lookup_main_addr(&alias->alias);
141 if (registered_m_addr != NULL && ipequal(registered_m_addr, m_addr)) {
143 /* Alias is already registered with main address. Nothing to do here. */
151 tmp_adr = tmp_adr->next_alias;
161 - insert_mid_tuple(main_add, adr, vtime);
162 + if (!insert_mid_tuple(main_add, adr, vtime)) {
167 *Recalculate topology
173 int olsr_init_mid_set(void);
174 -void insert_mid_tuple(union olsr_ip_addr *, struct mid_address *, olsr_reltime);
175 +void olsr_delete_all_mid_entries(void);
176 void insert_mid_alias(union olsr_ip_addr *, const union olsr_ip_addr *, olsr_reltime);
177 union olsr_ip_addr *mid_lookup_main_addr(const union olsr_ip_addr *);
178 struct mid_address *mid_lookup_aliases(const union olsr_ip_addr *);
185 +olsr_destroy_parser(void) {
186 + struct parse_function_entry *pe, *pe_next;
187 + struct preprocessor_function_entry *ppe, *ppe_next;
188 + struct packetparser_function_entry *pae, *pae_next;
190 + for (pe = parse_functions; pe; pe = pe_next) {
191 + pe_next = pe->next;
194 + for (ppe = preprocessor_functions; ppe; ppe = ppe_next) {
195 + ppe_next = ppe->next;
198 + for (pae = packetparser_functions; pae; pae = pae_next) {
199 + pae_next = pae->next;
205 olsr_parser_add_function(parse_function * function, uint32_t type)
207 struct parse_function_entry *new_entry;
212 void olsr_init_parser(void);
214 +void olsr_destroy_parser(void);
216 void olsr_input(int);
218 void olsr_input_hostemu(int);
219 --- a/src/scheduler.c
220 +++ b/src/scheduler.c
228 #include "scheduler.h"
233 tc_myself = olsr_add_tc_entry(&olsr_cnf->main_addr);
236 +void olsr_delete_all_tc_entries(void) {
237 + struct tc_entry *tc;
239 + OLSR_FOR_ALL_TC_ENTRIES(tc) {
240 + olsr_delete_tc_entry(tc);
241 + } OLSR_FOR_ALL_TC_ENTRIES_END(tc)
245 * The main ip address has changed.
250 extern struct tc_entry *tc_myself;
252 void olsr_init_tc(void);
253 +void olsr_delete_all_tc_entries(void);
254 void olsr_change_myself_tc(void);
255 void olsr_print_tc_table(void);
256 void olsr_time_out_tc_set(void);