conf: lock_file is derived config.
authorFerry Huberts <ferry.huberts@pelagic.nl>
Fri, 19 Jun 2015 12:03:02 +0000 (14:03 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Fri, 19 Jun 2015 16:28:47 +0000 (18:28 +0200)
Hi!

We're running two OLSRd instances on our routers (one IPv4, one IPv6).
0.9.x breaks with that setup since there seems to be a bug that causes
the default lockfile name always set to be "olsrd-ipv4.lock".

This bug seems to have been introduced in
http://www.olsr.org/git/?p=olsrd.git;a=commitdiff;h=089c78e208dcb0802ce93f47554a502ab8b77be5

olsrd_get_default_lockfile()
http://www.olsr.org/git/?p=olsrd.git;a=blob;f=src/cfgparser/olsrd_conf.c;h=30e2829cfd1be2717fc25639a9cbdb0da5fea466;hb=089c78e208dcb0802ce93f47554a502ab8b77be5#l976
always sees cnf->ip_version==AF_INET, as that's the default that was
just set in line 932.

Reported-by: Malte <freifunk@antenne.yagii.de>
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
src/cfgparser/olsrd_conf.c
src/cfgparser/olsrd_conf.h
src/main.c

index 6365d48..0c2c44d 100644 (file)
@@ -974,7 +974,7 @@ set_default_cnf(struct olsrd_config *cnf, char * configuration_file)
   cnf->exit_value = EXIT_SUCCESS;
   cnf->max_tc_vtime = 0.0;
   cnf->ioctl_s = 0;
-  cnf->lock_file = olsrd_get_default_lockfile(cnf);
+  cnf->lock_file = NULL; /* derived config */
   cnf->use_niit = DEF_USE_NIIT;
   cnf->niit4to6_if_index = 0;
   cnf->niit6to4_if_index = 0;
@@ -1334,6 +1334,12 @@ ip_prefix_list_find(struct ip_prefix_list *list, const union olsr_ip_addr *net,
   return NULL;
 }
 
+void set_derived_cnf(struct olsrd_config * cnf) {
+  if (!cnf->lock_file) {
+    cnf->lock_file = olsrd_get_default_lockfile(cnf);
+  }
+}
+
 /**
  * @param cnf the olsrd configuration
  * @param ip_version the ip version
index 9f9c6a0..c1b6de5 100644 (file)
@@ -61,6 +61,8 @@ struct conf_token {
 
 void set_default_cnf(struct olsrd_config *, char * configuration_file);
 
+void set_derived_cnf(struct olsrd_config * olsr_cnf);
+
 char * olsrd_get_default_lockfile(struct olsrd_config *cnf);
 
 #endif /* _OLSRD_CONF_H */
index 38bd295..309cc59 100644 (file)
@@ -45,6 +45,7 @@
 #include <assert.h>
 #include <fcntl.h>
 
+#include "cfgparser/olsrd_conf.h"
 #include "ipcalc.h"
 #include "defs.h"
 #include "builddata.h"
@@ -440,6 +441,12 @@ int main(int argc, char *argv[]) {
     olsr_exit(__func__, EXIT_FAILURE);
   }
 
+  /*
+   * Setup derived configuration
+   */
+
+  set_derived_cnf(olsr_cnf);
+
   /*
    * Establish file lock to prevent multiple instances
    */