Remove all float values from olsr_cnf
authorHenning Rogge <hrogge@googlemail.com>
Thu, 2 Jul 2009 19:36:28 +0000 (21:36 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Thu, 2 Jul 2009 19:36:28 +0000 (21:36 +0200)
convert olsr_cfg.c to caseinsensitive

33 files changed:
Makefile
lib/httpinfo/src/olsrd_httpinfo.c
lib/nameservice/src/nameservice.c
lib/nameservice/src/nameservice.h
src/build_msg.c
src/config/README [deleted file]
src/config/config-verify.c [deleted file]
src/config/local.mk [deleted file]
src/config/olsr_cfg_lib.c [deleted file]
src/config/olsr_cfg_lib.h [deleted file]
src/duplicate_set.c
src/duplicate_set.h
src/interfaces.c
src/interfaces.h
src/link_set.h
src/linux/link_layer.c [deleted file]
src/lq_packet.c
src/lq_packet.h
src/main.c
src/neighbor_table.h
src/olsr.c
src/olsr_cfg.c
src/olsr_cfg.h
src/olsr_cfg_gen.c
src/olsr_protocol.h
src/olsr_time.c [moved from src/mantissa.c with 87% similarity]
src/olsr_time.h [moved from src/mantissa.h with 89% similarity]
src/parser.c
src/routing_table.c
src/scheduler.c
src/scheduler.h
src/unix/ifnet.c
src/win32/ifnet.c

index 7767004..4a66fb4 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -67,9 +67,6 @@ endif
                set -e;for dir in $(STATIC_PLUGINS);do $(MAKECMD) -C lib/$$dir LIBDIR=$(LIBDIR);done
                $(CC) $(LDFLAGS) $(LDFLAGS_EXE) -o $@ $^ $(STATIC_PLUGIN_OBJS) $(LIBS)
 
-CONFDIR = src/config
-include $(CONFDIR)/local.mk
-
 show-ignored-warnings:
        CC="$(CC)" $(TOPDIR)/gcc-warnings $(ALL_WARNINGS) > /dev/null
 
@@ -186,9 +183,9 @@ $(foreach subdir,$(SUBDIRS), $(subdir)_install):
 txtinfoshell:
        $(MAKECMD) -C contrib/txtinfoshell
 
-build_all:     all libs txtinfoshell config-verify
-install_all:   install install_libs config-verify_install
-clean_all:     clean clean_libs config-verify_clean
+build_all:     all libs txtinfoshell
+install_all:   install install_libs
+clean_all:     clean clean_libs
 
 uberclean: clean_all
        -rm -f $(TAGFILE)
index f9fa756..900e735 100644 (file)
@@ -792,6 +792,7 @@ build_config_body(struct autobuf *abuf)
   const struct plugin_entry *pentry;
   const struct plugin_param *pparam;
   struct ipaddr_str mainaddrbuf;
+  struct time_txt tbuf;
 
   abuf_appendf(abuf, "Version: %s (built on %s on %s)\n<br>OS: %s\n<br>", olsrd_version, build_date, build_host, OS);
   {
@@ -839,10 +840,10 @@ build_config_body(struct autobuf *abuf)
 
   abuf_puts(abuf, "</tr>\n<tr>\n");
 
-  abuf_appendf(abuf, "<td>Pollrate: %0.2f</td>\n", conv_pollrate_to_secs(olsr_cnf->pollrate));
+  abuf_appendf(abuf, "<td>Pollrate: %s</td>\n", reltime_to_txt(&tbuf, olsr_cnf->pollrate));
   abuf_appendf(abuf, "<td>TC redundancy: %d</td>\n", olsr_cnf->tc_redundancy);
   abuf_appendf(abuf, "<td>MPR coverage: %d</td>\n", olsr_cnf->mpr_coverage);
-  abuf_appendf(abuf, "<td>NAT threshold: %f</td>\n", olsr_cnf->lq_nat_thresh);
+  abuf_appendf(abuf, "<td>NAT threshold: %s</td>\n", reltime_to_txt(&tbuf, olsr_cnf->lq_nat_thresh));
 
   abuf_puts(abuf, "</tr>\n<tr>\n");
 
index 3ef7774..681c992 100644 (file)
@@ -60,7 +60,7 @@
 #include "ipcalc.h"
 #include "net_olsr.h"
 #include "routing_table.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "scheduler.h"
 #include "parser.h"
 #include "duplicate_set.h"
index 0d44de4..95270fc 100644 (file)
@@ -59,7 +59,7 @@
 #include "nameservice_msg.h"
 #include "hashing.h"
 #include "mapwrite.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 
 #define PLUGIN_NAME    "OLSRD nameservice plugin"
 #define PLUGIN_VERSION "0.3"
index 5a8d7b8..69c1f86 100644 (file)
@@ -43,7 +43,7 @@
 #include "ipcalc.h"
 #include "olsr.h"
 #include "log.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "net_olsr.h"
 #include "olsr_ip_prefix_list.h"
 
diff --git a/src/config/README b/src/config/README
deleted file mode 100644 (file)
index c9c1115..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-The config-verify program has the following purpose:
-
-* Verify, that a stand-alone parser compiles
-* The program can be used for config-laundering
-* Compiles a DLL for loading with Win32-GUI (Switch)
-
-Please note, that you should not execute the compiled
-program as part of the makefiles, because this compilcates
-adaptions for cross-compiling very much.
diff --git a/src/config/config-verify.c b/src/config/config-verify.c
deleted file mode 100644 (file)
index 6560173..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * 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, 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
- *   distribution.
- * * 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
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "olsr.h"
-#include "olsr_cfg.h"
-#include "olsr_cfg_gen.h"
-
-/************ GLOBALS(begin) ***********/
-
-void *
-olsr_malloc(size_t size, const char *id)
-{
-  void *ptr = calloc(1, size);
-  if (ptr == NULL) {
-    fprintf(stderr, "error, no memory left for '%s'\n", id);
-    exit(1);
-  }
-  return ptr;
-}
-
-char *
-olsr_strdup(const char *s)
-{
-  char *ret = olsr_malloc(1 + strlen(s), "olsr_strdup");
-  strcpy(ret, s);
-  return ret;
-}
-
-char *
-olsr_strndup(const char *s, size_t n)
-{
-  size_t len = n < strlen(s) ? n : strlen(s);
-  char *ret = olsr_malloc(1 + len, "olsr_strndup");
-  strncpy(ret, s, len);
-  ret[len] = 0;
-  return ret;
-}
-
-/************ GLOBALS(end) ***********/
-
-int
-main(int argc, char *argv[])
-{
-  int i, ret = EXIT_SUCCESS;
-
-  for (i = 1; i < argc; i++) {
-    const char *sres;
-    struct olsr_config *cfg_tmp;
-    char cfg_msg[FILENAME_MAX + 256] = { 0 };
-    olsr_parse_cfg_result res = olsr_parse_cfg(0, NULL, argv[i], cfg_msg, &cfg_tmp);
-
-    switch (res) {
-    case CFG_ERROR:
-      sres = "ERROR";
-      break;
-    case CFG_WARN:
-      sres = "WARN";
-      break;
-    case CFG_EXIT:
-      sres = "EXIT";
-      break;
-    default:
-      sres = "OK";
-    }
-
-    fprintf(stderr, "Reading %s returns %s\n", argv[i], sres);
-
-    if (CFG_OK == res) {
-      struct autobuf abuf;
-
-      fprintf(stderr, "Verifying %s returns %s\n", argv[i], 0 <= olsr_sanity_check_cfg(cfg_tmp) ? "OK" : "ERROR");
-
-      abuf_init(&abuf, 0);
-      olsr_write_cnf_buf(&abuf, cfg_tmp, false);
-      fputs(abuf.buf, stdout);
-      abuf_free(&abuf);
-
-    } else {
-      fprintf(stderr, "Error message: %s\n", cfg_msg);
-      ret = EXIT_FAILURE;
-    }
-    olsr_free_cfg(cfg_tmp);
-  }
-  return ret;
-}
diff --git a/src/config/local.mk b/src/config/local.mk
deleted file mode 100644 (file)
index 8407f1b..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# The olsr.org Optimized Link-State Routing daemon(olsrd)
-# Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
-# All rights reserved.
-#
-# 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, 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
-#   distribution.
-# * 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
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# Visit http://www.olsr.org for more information.
-#
-# If you find this software useful feel free to make a donation
-# to the project. For more information see the website or contact
-# the copyright holders.
-#
-
-CONFSRCS += src/olsr_cfg.c
-CONFSRCS += src/olsr_cfg_gen.c
-CONFSRCS += src/olsr_ip_acl.c
-CONFSRCS += src/olsr_ip_prefix_list.c
-CONFSRCS += src/olsr_cfg_data.c
-CONFSRCS += src/ipcalc.c
-CONFSRCS += src/builddata.c
-CONFSRCS += src/common/autobuf.c
-CONFSRCS += src/common/string.c
-CONFSRCS += $(CONFDIR)/config-verify.c
-
-CONFOBJS += $(CONFSRCS:%.c=%.o)
-
-config-verify: $(CONFOBJS)
-       $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
-
-.PHONY: config-verify_clean config-verify_install
-
-config-verify_clean:
-       rm -f $(CONFOBJS)
-       rm -f config-verify
-
-config-verify_install:
-       # executable not to be installed
-       $(STRIP) config-verify
diff --git a/src/config/olsr_cfg_lib.c b/src/config/olsr_cfg_lib.c
deleted file mode 100644 (file)
index db1dbc5..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * 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, 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
- *   distribution.
- * * 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
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-#include "olsr_cfg_lib.h"
-
-int
-cfgparser_olsrd_write_cnf(const struct olsr_config *cnf, const char *fname)
-{
-  struct autobuf abuf;
-  FILE *fd = fopen(fname, "w");
-  if (fd == NULL) {
-    fprintf(stderr, "Could not open file %s for writing\n%s\n", fname, strerror(errno));
-    return -1;
-  }
-  printf("Writing config to file \"%s\".... ", fname);
-  abuf_init(&abuf, 0);
-  cfgparser_olsrd_write_cnf_buf(&abuf, cnf, false);
-  fputs(abuf.buf, fd);
-  abuf_free(&abuf);
-  fclose(fd);
-  printf("DONE\n");
-  return 1;
-}
-
-#ifdef WIN32
-
-struct ioinfo {
-  unsigned int handle;
-  unsigned char attr;
-  char buff;
-  int flag;
-  CRITICAL_SECTION lock;
-};
-
-void
-win32_stdio_hack(unsigned int handle)
-{
-  HMODULE lib;
-  struct ioinfo **info;
-
-  lib = LoadLibrary("msvcrt.dll");
-
-  info = (struct ioinfo **)GetProcAddress(lib, "__pioinfo");
-
-  // (*info)[1].handle = handle;
-  // (*info)[1].attr = 0x89; // FOPEN | FTEXT | FPIPE;
-
-  (*info)[2].handle = handle;
-  (*info)[2].attr = 0x89;
-
-  // stdout->_file = 1;
-  stderr->_file = 2;
-
-  // setbuf(stdout, NULL);
-  setbuf(stderr, NULL);
-}
-
-void *
-win32_olsrd_malloc(size_t size)
-{
-  return malloc(size);
-}
-
-void
-win32_olsrd_free(void *ptr)
-{
-  free(ptr);
-}
-
-#endif
-
-/*
- * Local Variables:
- * c-basic-offset: 2
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/src/config/olsr_cfg_lib.h b/src/config/olsr_cfg_lib.h
deleted file mode 100644 (file)
index 129e2e2..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * 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, 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
- *   distribution.
- * * 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
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-#ifndef _OLSR_CFG_LIB_H
-#define _OLSR_CFG_LIB_H
-
-#if defined __cplusplus
-extern "C" {
-#endif
-
-  int cfgparser_olsrd_write_cnf(const struct olsr_config *cnf, const char *fname);
-
-#ifdef WIN32
-  void win32_stdio_hack(unsigned int);
-  void *win32_olsrd_malloc(size_t size);
-  void win32_olsrd_free(void *ptr);
-#endif
-
-#if defined __cplusplus
-}
-#endif
-#endif                                 /* _OLSR_CFG_LIB_H */
-
-/*
- * Local Variables:
- * c-basic-offset: 2
- * indent-tabs-mode: nil
- * End:
- */
index 72fecc9..1079db0 100644 (file)
@@ -45,7 +45,7 @@
 #include "olsr.h"
 #include "mid_set.h"
 #include "scheduler.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "olsr_cookie.h"
 #include "olsr_logging.h"
 
index 973cf4f..bcddf56 100644 (file)
@@ -44,7 +44,7 @@
 
 #include "defs.h"
 #include "olsr.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "common/avl.h"
 
 #define DUPLICATE_CLEANUP_INTERVAL 30000
index 699eb21..beb1f95 100644 (file)
@@ -125,7 +125,7 @@ ifinit(void)
   }
 
   /* Kick a periodic timer for the network interface update function */
-  olsr_start_timer(olsr_cnf->nic_chgs_pollrate * MSEC_PER_SEC, 5,
+  olsr_start_timer(olsr_cnf->nic_chgs_pollrate, 5,
                    OLSR_TIMER_PERIODIC, &check_interface_updates, NULL, interface_poll_timer_cookie);
 
   return (!list_is_empty(&interface_head));
index a0215ad..71fb57a 100644 (file)
@@ -54,7 +54,7 @@
 
 #include "olsr_types.h"
 #include "olsr_cfg_data.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "common/list.h"
 #include "common/avl.h"
 
index 3cc9c83..7ff86cd 100644 (file)
@@ -49,7 +49,7 @@
 #include "lq_packet.h"
 #include "lq_plugin.h"
 #include "common/list.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 
 #define MID_ALIAS_HACK_VTIME  10.0
 
diff --git a/src/linux/link_layer.c b/src/linux/link_layer.c
deleted file mode 100644 (file)
index a85a15e..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * 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, 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
- *   distribution.
- * * 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
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-
-#if 0                           /* DEPRECATED - KEPT FOR REFERENCE */
-
-/* Ugly fix to make this compile on wireless extentions < 16 */
-#define _LINUX_ETHTOOL_H
-
-#include "../link_layer.h"
-#include "../olsr_protocol.h"
-#include "../scheduler.h"
-#include "../interfaces.h"
-#include <linux/wireless.h>
-#include <linux/icmp.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <net/if_arp.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-#include "olsr_protocol.h"
-
-void
-  init_link_layer_notification(void);
-
-void
-  poll_link_layer(void *);
-
-int
-  add_spy_node(union olsr_ip_addr *, char *);
-
-#define        MAXIPLEN        60
-#define        MAXICMPLEN      76
-
-float poll_int = 200;                  /* msec */
-
-int
-  iw_get_range_info(char *, struct iw_range *);
-
-int
-  clear_spy_list(char *);
-
-int
-  convert_ip_to_mac(union olsr_ip_addr *, struct sockaddr *, char *);
-
-void
-  send_ping(union olsr_ip_addr *);
-
-
-void
-init_link_layer_notification()
-{
-  struct interface *ifd;
-
-  OLSR_PRINTF(1, "Initializing link-layer notification...\n");
-
-
-  for (ifd = ifnet; ifd; ifd = ifd->int_next) {
-    if (ifd->is_wireless)
-      clear_spy_list(ifd->int_name);
-  }
-
-  olsr_start_timer(poll_int, 0, OLSR_TIMER_PERIODIC, &poll_link_layer, NULL, 0);
-
-  return;
-}
-
-int
-clear_spy_list(char *ifname)
-{
-  struct iwreq wrq;
-
-  /* Time to do send addresses to the driver */
-  wrq.u.data.pointer = NULL;    //(caddr_t) hw_address;
-  wrq.u.data.length = 0;
-  wrq.u.data.flags = 0;
-
-  /* Set device name */
-  strscpy(wrq.ifr_name, ifname, sizeof(wrq.ifr_name));
-
-  if (ioctl(olsr_cnf->ioctl_s, SIOCSIWSPY, &wrq) < 0) {
-    OLSR_PRINTF(1, "Could not clear spylist %s\n", strerror(errno));
-    return -1;
-  }
-
-  return 1;
-}
-
-
-
-int
-add_spy_node(union olsr_ip_addr *addr, char *interface)
-{
-  struct sockaddr new_node;
-  struct iwreq wrq;
-  int nbr;                             /* Number of valid addresses */
-  struct sockaddr hw_address[IW_MAX_SPY];
-  char buffer[(sizeof(struct iw_quality) + sizeof(struct sockaddr)) * IW_MAX_SPY];
-
-  OLSR_PRINTF(1, "Adding spynode!\n\n");
-
-  /* get all addresses already in the driver */
-
-  wrq.u.data.pointer = (caddr_t) buffer;
-  wrq.u.data.length = IW_MAX_SPY;
-  wrq.u.data.flags = 0;
-
-  strscpy(wrq.ifr_name, interface, sizeof(wrq.ifr_name));
-
-  if (ioctl(olsr_cnf->ioctl_s, SIOCGIWSPY, &wrq) < 0) {
-    OLSR_PRINTF(1, "Could not get old spylist %s\n", strerror(errno));
-    return 0;
-  }
-
-  /* Copy old addresses */
-  nbr = wrq.u.data.length;
-  memcpy(hw_address, buffer, nbr * sizeof(struct sockaddr));
-
-  OLSR_PRINTF(1, "Old addresses: %d\n\n", nbr);
-
-  /* Check upper limit */
-  if (nbr >= IW_MAX_SPY)
-    return 0;
-
-  /* Add new address if MAC exists in ARP cache */
-  if (convert_ip_to_mac(addr, &new_node, interface) > 0) {
-    memcpy(&hw_address[nbr], &new_node, sizeof(struct sockaddr));
-    nbr++;
-  } else
-    return 0;
-
-  /* Add all addresses */
-  wrq.u.data.pointer = (caddr_t) hw_address;
-  wrq.u.data.length = nbr;
-  wrq.u.data.flags = 0;
-
-  /* Set device name */
-  strscpy(wrq.ifr_name, interface, sizeof(wrq.ifr_name));
-
-  if (ioctl(olsr_cnf->ioctl_s, SIOCSIWSPY, &wrq) < 0) {
-    OLSR_PRINTF(1, "Could not clear spylist %s\n", strerror(errno));
-    return 0;
-  }
-
-
-  return 1;
-}
-
-
-int
-convert_ip_to_mac(union olsr_ip_addr *ip, struct sockaddr *mac, char *interface)
-{
-  struct arpreq arp_query;
-  struct sockaddr_in tmp_sockaddr;
-
-
-  memset(&arp_query, 0, sizeof(struct arpreq));
-
-  OLSR_PRINTF(1, "\nARP conversion for %s interface %s\n", olsr_ip_to_string(ip), interface);
-
-  tmp_sockaddr.sin_family = AF_INET;
-  tmp_sockaddr.sin_port = 0;
-
-  memcpy(&tmp_sockaddr.sin_addr, ip, olsr_cnf->ipsize);
-
-  /* Translate IP addresses to MAC addresses */
-  memcpy(&arp_query.arp_pa, &tmp_sockaddr, sizeof(struct sockaddr_in));
-  arp_query.arp_ha.sa_family = 0;
-  arp_query.arp_flags = 0;
-
-  strscpy(arp_query.arp_dev, interface, sizeof(arp_query.arp_dev));
-
-  if ((ioctl(olsr_cnf->ioctl_s, SIOCGARP, &arp_query) < 0) || !(arp_query.arp_flags & ATF_COM)) {       /* ATF_COM - hw addr valid */
-    OLSR_PRINTF(1, "Arp failed: (%s) - trying lookup\n", strerror(errno));
-
-    /* No address - create a thread that sends a PING */
-    send_ping(ip);
-
-    return -1;
-  }
-
-  OLSR_PRINTF(1, "Arp success!\n");
-
-  memcpy(mac, &arp_query.arp_ha, sizeof(struct sockaddr));
-
-  return 1;
-}
-
-
-
-/**
- *A thread that sends a ICMP echo "ping" packet
- *to a given destination to force the ARP cache
- *to be updated... kind of a kludge....
- *
- *@param _ip the IP address to ping
- */
-
-/* ONLY IPv4 FOR NOW!!! */
-
-void
-send_ping(union olsr_ip_addr *ip)
-{
-  int ping_s;
-  struct sockaddr dst;
-  struct sockaddr_in *dst_in;
-  char *packet;
-  struct icmphdr *icp;
-
-  dst_in = (struct sockaddr_in *)&dst;
-
-  dst_in->sin_family = AF_INET;
-  memcpy(&dst_in->sin_addr, ip, olsr_cnf->ipsize);
-
-  OLSR_PRINTF(1, "pinging %s\n\n", olsr_ip_to_string(ip));
-
-  if ((ping_s = socket(AF_INET, SOCK_RAW, PF_INET)) < 0) {
-    OLSR_PRINTF(1, "Could not create RAW socket for ping!\n%s\n", strerror(errno));
-    return;
-  }
-
-  /* Create packet */
-  packet = malloc(MAXIPLEN + MAXICMPLEN);
-
-
-  icp = (struct icmphdr *)packet;
-  icp->type = ICMP_ECHO;
-  icp->code = 0;
-  icp->checksum = 0;
-  icp->un.echo.sequence = 1;
-  icp->un.echo.id = getpid() & 0xFFFF;
-
-  if ((sendto(ping_s, packet, MAXIPLEN + MAXICMPLEN + 8, 0, &dst, sizeof(struct sockaddr))) != MAXIPLEN + MAXICMPLEN + 8) {
-    OLSR_PRINTF(1, "Error PING: %s\n", strerror(errno));
-  }
-
-  /* Nevermind the pong ;-) */
-
-  OLSR_PRINTF(1, "Ping complete...\n");
-  close(ping_s);
-
-  free(packet);
-
-  return;
-}
-
-void
-poll_link_layer(void *foo)
-{
-  struct iwreq wrq;
-  char buffer[(sizeof(struct iw_quality) + sizeof(struct sockaddr)) * IW_MAX_SPY];
-  struct sockaddr *hwa;
-  struct iw_quality *qual;
-  int n;
-  struct iw_range range;
-  int i, j;
-  int has_range = 0;
-  struct interface *iflist;
-
-  //OLSR_PRINTF(1, "Polling link-layer notification...\n");
-
-  for (iflist = ifnet; iflist != NULL; iflist = iflist->int_next) {
-    if (!iflist->is_wireless)
-      continue;
-
-    /* Collect stats */
-    wrq.u.data.pointer = (caddr_t) buffer;
-    wrq.u.data.length = IW_MAX_SPY;
-    wrq.u.data.flags = 0;
-
-    /* Set device name */
-    strscpy(wrq.ifr_name, iflist->int_name, sizeof(wrq.ifr_name));
-
-    /* Do the request */
-    if (ioctl(olsr_cnf->ioctl_s, SIOCGIWSPY, &wrq) < 0) {
-      OLSR_PRINTF(1, "%-8.16s  Interface doesn't support wireless statistic collection\n\n", iflist->int_name);
-      return;
-    }
-
-    /* Get range info if we can */
-    if (iw_get_range_info(iflist->int_name, &(range)) >= 0)
-      has_range = 1;
-
-    /* Number of addresses */
-    n = wrq.u.data.length;
-
-    /* The two lists */
-    hwa = (struct sockaddr *)buffer;
-    qual = (struct iw_quality *)(buffer + (sizeof(struct sockaddr) * n));
-
-    for (i = 0; i < n; i++) {
-      if (!(qual->updated & 0x7))
-        continue;
-
-      /* Print stats for each address */
-      OLSR_PRINTF(1, "MAC");
-      for (j = 0; j < 6; j++) {
-        OLSR_PRINTF(1, ":%02x", (hwa[i].sa_data[j] % 0xffffff00));
-      }
-      if (!has_range)
-        OLSR_PRINTF(1, " : Quality:%d  Signal level:%d dBm  Noise level:%d dBm",
-                    qual[i].qual, qual[i].level - 0x100, qual[i].noise - 0x100);
-      else
-        OLSR_PRINTF(1, " : Quality:%d/%d  Signal level:%d dBm  Noise level:%d dBm",
-                    qual[i].qual, range.max_qual.qual, qual[i].level - 0x100, qual[i].noise - 0x100);
-
-      OLSR_PRINTF(1, "\n");
-
-    }
-  }
-
-  //OLSR_PRINTF(1, "\n");
-  return;
-}
-
-
-
-
-
-/*
- * Get the range information out of the driver
- */
-int
-iw_get_range_info(char *ifname, struct iw_range *range)
-{
-  struct iwreq wrq;
-  char buffer[sizeof(struct iw_range) * 2];     /* Large enough */
-  union iw_range_raw *range_raw;
-
-  /* Cleanup */
-  bzero(buffer, sizeof(buffer));
-
-  wrq.u.data.pointer = (caddr_t) buffer;
-  wrq.u.data.length = sizeof(buffer);
-  wrq.u.data.flags = 0;
-
-  /* Set device name */
-  strscpy(wrq.ifr_name, ifname, sizeof(wrq.ifr_name));
-
-  if (ioctl(olsr_cnf->ioctl_s, SIOCGIWRANGE, &wrq) < 0) {
-    OLSR_PRINTF(1, "NO RANGE\n");
-    return -1;
-  }
-
-  /* Point to the buffer */
-  range_raw = (union iw_range_raw *)buffer;
-
-  memcpy((char *)range, buffer, sizeof(struct iw_range));
-
-  return 1;
-}
-
-
-#endif
-
-/*
- * Local Variables:
- * c-basic-offset: 2
- * indent-tabs-mode: nil
- * End:
- */
index dc97404..7d8aec6 100644 (file)
@@ -47,7 +47,7 @@
 #include "link_set.h"
 #include "neighbor_table.h"
 #include "mid_set.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "process_package.h"    // XXX - remove
 #include "olsr.h"
 #include "build_msg.h"
index b051af7..b46390f 100644 (file)
@@ -43,7 +43,7 @@
 #define _OLSR_LQ_PACKET_H
 
 #include "olsr_types.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "ipcalc.h"
 
 #define LQ_HELLO_MESSAGE      201
index 984e863..62a7370 100644 (file)
@@ -293,9 +293,11 @@ main(int argc, char *argv[])
       olsr_cnf->willingness_auto = 0;
       olsr_cnf->willingness = WILL_DEFAULT;
     } else {
+      struct time_txt tbuf;
       olsr_cnf->willingness = olsr_calculate_willingness();
 
-      OLSR_INFO(LOG_MAIN, "Willingness set to %d - next update in %.1f secs\n", olsr_cnf->willingness, olsr_cnf->will_int);
+      OLSR_INFO(LOG_MAIN, "Willingness set to %d - next update in %s secs\n",
+          olsr_cnf->willingness, reltime_to_txt(&tbuf, olsr_cnf->will_int));
     }
   }
 
index b7597e1..df30bff 100644 (file)
@@ -44,7 +44,7 @@
 #define _OLSR_NEIGH_TBL
 
 #include "defs.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "olsr_types.h"
 #include "common/avl.h"
 
index 8b8c095..f788587 100644 (file)
@@ -233,9 +233,9 @@ olsr_init_tables(void)
   olsr_init_hna_set();
 
   /* Start periodic SPF and RIB recalculation */
-  if (olsr_cnf->lq_dinter > 0.0) {
+  if (olsr_cnf->lq_dinter > 0) {
     periodic_spf_timer_cookie = olsr_alloc_cookie("Periodic SPF", OLSR_COOKIE_TYPE_TIMER);
-    olsr_start_timer((unsigned int)(olsr_cnf->lq_dinter * MSEC_PER_SEC), 5,
+    olsr_start_timer(olsr_cnf->lq_dinter, 5,
                      OLSR_TIMER_PERIODIC, &olsr_trigger_forced_update, NULL, periodic_spf_timer_cookie);
   }
 }
@@ -422,7 +422,7 @@ olsr_init_willingness(void)
     olsr_update_willingness(NULL);
 
     willingness_timer_cookie = olsr_alloc_cookie("Update Willingness", OLSR_COOKIE_TYPE_TIMER);
-    olsr_start_timer((unsigned int)olsr_cnf->will_int * MSEC_PER_SEC, 5,
+    olsr_start_timer(olsr_cnf->will_int, 5,
                      OLSR_TIMER_PERIODIC, &olsr_update_willingness, NULL, willingness_timer_cookie);
   }
 }
index 8ec7fab..b4931e1 100644 (file)
@@ -50,6 +50,7 @@
 #include "olsr_ip_prefix_list.h"
 #include "olsr_protocol.h"
 #include "common/string.h"
+#include "olsr_time.h"
 
 #include <unistd.h>
 #include <string.h>
@@ -324,7 +325,7 @@ queue_if(const char *name, struct olsr_config *cfg)
 
   /* check if the interface already exists */
   for (new_if = cfg->if_configs; new_if != NULL; new_if = new_if->next) {
-    if (0 == strcmp(new_if->name, name)) {
+    if (0 == strcasecmp(new_if->name, name)) {
       fprintf(stderr, "Duplicate interfaces defined... not adding %s\n", name);
       return NULL;
     }
@@ -448,17 +449,17 @@ parse_cfg_interface(char *argstr, struct olsr_config *rcfg, char *rmsg)
             parse_tok_free(tok);
             return CFG_ERROR;
           }
-          if (0 == strcmp("Mode", p_next[0])) {
+          if (0 == strcasecmp("Mode", p_next[0])) {
             if (0 == strcasecmp("Ether", p_next[1])) {
               new_if->cnf->mode = IF_MODE_ETHER;
             } else {
               new_if->cnf->mode = IF_MODE_MESH;
             }
             PARSER_DEBUG_PRINTF("\tMode: %s\n", INTERFACE_MODE_NAMES[new_if->cnf->mode]);
-          } else if (0 == strcmp("AutoDetectChanges", p_next[0])) {
-            new_if->cnf->autodetect_chg = (0 == strcmp("yes", p_next[1]));
+          } else if (0 == strcasecmp("AutoDetectChanges", p_next[0])) {
+            new_if->cnf->autodetect_chg = (0 == strcasecmp("yes", p_next[1]));
             PARSER_DEBUG_PRINTF("\tAutodetect changes: %d\n", new_if->cnf->autodetect_chg);
-          } else if (0 == strcmp("Ip4Broadcast", p_next[0])) {
+          } else if (0 == strcasecmp("Ip4Broadcast", p_next[0])) {
             union olsr_ip_addr ipaddr;
             if (inet_pton(AF_INET, p_next[1], &ipaddr) <= 0) {
               sprintf(rmsg, "Failed converting IP address %s\n", p_next[1]);
@@ -468,18 +469,18 @@ parse_cfg_interface(char *argstr, struct olsr_config *rcfg, char *rmsg)
             }
             new_if->cnf->ipv4_broadcast = ipaddr;
             PARSER_DEBUG_PRINTF("\tIPv4 broadcast: %s\n", ip4_to_string(&buf, new_if->cnf->ipv4_broadcast.v4));
-          } else if (0 == strcmp("Ip6AddrType", p_next[0])) {
-            if (0 == strcmp("site-local", p_next[1])) {
+          } else if (0 == strcasecmp("Ip6AddrType", p_next[0])) {
+            if (0 == strcasecmp("site-local", p_next[1])) {
               new_if->cnf->ipv6_addrtype = OLSR_IP6T_SITELOCAL;
-            } else if (0 == strcmp("unique-local", p_next[1])) {
+            } else if (0 == strcasecmp("unique-local", p_next[1])) {
               new_if->cnf->ipv6_addrtype = OLSR_IP6T_UNIQUELOCAL;
-            } else if (0 == strcmp("global", p_next[1])) {
+            } else if (0 == strcasecmp("global", p_next[1])) {
               new_if->cnf->ipv6_addrtype = OLSR_IP6T_GLOBAL;
             } else {
               new_if->cnf->ipv6_addrtype = OLSR_IP6T_AUTO;
             }
             PARSER_DEBUG_PRINTF("\tIPv6 addrtype: %d\n", new_if->cnf->ipv6_addrtype);
-          } else if (0 == strcmp("Ip6MulticastSite", p_next[0])) {
+          } else if (0 == strcasecmp("Ip6MulticastSite", p_next[0])) {
             union olsr_ip_addr ipaddr;
             if (inet_pton(AF_INET6, p_next[1], &ipaddr) <= 0) {
               sprintf(rmsg, "Failed converting IP address %s\n", p_next[1]);
@@ -489,7 +490,7 @@ parse_cfg_interface(char *argstr, struct olsr_config *rcfg, char *rmsg)
             }
             new_if->cnf->ipv6_multi_site = ipaddr;
             PARSER_DEBUG_PRINTF("\tIPv6 site-local multicast: %s\n", ip6_to_string(&buf, &new_if->cnf->ipv6_multi_site.v6));
-          } else if (0 == strcmp("Ip6MulticastGlobal", p_next[0])) {
+          } else if (0 == strcasecmp("Ip6MulticastGlobal", p_next[0])) {
             union olsr_ip_addr ipaddr;
             if (inet_pton(AF_INET6, p_next[1], &ipaddr) <= 0) {
               sprintf(rmsg, "Failed converting IP address %s\n", p_next[1]);
@@ -499,42 +500,34 @@ parse_cfg_interface(char *argstr, struct olsr_config *rcfg, char *rmsg)
             }
             new_if->cnf->ipv6_multi_glbl = ipaddr;
             PARSER_DEBUG_PRINTF("\tIPv6 global multicast: %s\n", ip6_to_string(&buf, &new_if->cnf->ipv6_multi_glbl.v6));
-          } else if (0 == strcmp("HelloInterval", p_next[0])) {
-            new_if->cnf->hello_params.emission_interval = 0;
-            sscanf(p_next[1], "%f", &new_if->cnf->hello_params.emission_interval);
-            PARSER_DEBUG_PRINTF("\tHELLO interval: %0.2f\n", new_if->cnf->hello_params.emission_interval);
-          } else if (0 == strcmp("HelloValidityTime", p_next[0])) {
-            new_if->cnf->hello_params.validity_time = 0;
-            sscanf(p_next[1], "%f", &new_if->cnf->hello_params.validity_time);
-            PARSER_DEBUG_PRINTF("\tHELLO validity: %0.2f\n", new_if->cnf->hello_params.validity_time);
-          } else if (0 == strcmp("TcInterval", p_next[0])) {
-            new_if->cnf->tc_params.emission_interval = 0;
-            sscanf(p_next[1], "%f", &new_if->cnf->tc_params.emission_interval);
-            PARSER_DEBUG_PRINTF("\tTC interval: %0.2f\n", new_if->cnf->tc_params.emission_interval);
-          } else if (0 == strcmp("TcValidityTime", p_next[0])) {
-            new_if->cnf->tc_params.validity_time = 0;
-            sscanf(p_next[1], "%f", &new_if->cnf->tc_params.validity_time);
-            PARSER_DEBUG_PRINTF("\tTC validity: %0.2f\n", new_if->cnf->tc_params.validity_time);
-          } else if (0 == strcmp("MidInterval", p_next[0])) {
-            new_if->cnf->mid_params.emission_interval = 0;
-            sscanf(p_next[1], "%f", &new_if->cnf->mid_params.emission_interval);
-            PARSER_DEBUG_PRINTF("\tMID interval: %0.2f\n", new_if->cnf->mid_params.emission_interval);
-          } else if (0 == strcmp("MidValidityTime", p_next[0])) {
-            new_if->cnf->mid_params.validity_time = 0;
-            sscanf(p_next[1], "%f", &new_if->cnf->mid_params.validity_time);
-            PARSER_DEBUG_PRINTF("\tMID validity: %0.2f\n", new_if->cnf->mid_params.validity_time);
-          } else if (0 == strcmp("HnaInterval", p_next[0])) {
-            new_if->cnf->hna_params.emission_interval = 0;
-            sscanf(p_next[1], "%f", &new_if->cnf->hna_params.emission_interval);
-            PARSER_DEBUG_PRINTF("\tHNA interval: %0.2f\n", new_if->cnf->hna_params.emission_interval);
-          } else if (0 == strcmp("HnaValidityTime", p_next[0])) {
-            new_if->cnf->hna_params.validity_time = 0;
-            sscanf(p_next[1], "%f", &new_if->cnf->hna_params.validity_time);
-            PARSER_DEBUG_PRINTF("\tHNA validity: %0.2f\n", new_if->cnf->hna_params.validity_time);
-          } else if (0 == strcmp("Weight", p_next[0])) {
+          } else if (0 == strcasecmp("HelloInterval", p_next[0])) {
+            new_if->cnf->hello_params.emission_interval = txt_to_reltime(p_next[1]);
+            PARSER_DEBUG_PRINTF("\tHELLO interval1: %u ms\n", new_if->cnf->hello_params.emission_interval);
+          } else if (0 == strcasecmp("HelloValidityTime", p_next[0])) {
+            new_if->cnf->hello_params.validity_time = txt_to_reltime(p_next[1]);
+            PARSER_DEBUG_PRINTF("\tHELLO validity: %u ms\n", new_if->cnf->hello_params.validity_time);
+          } else if (0 == strcasecmp("Tcinterval", p_next[0])) {
+            new_if->cnf->tc_params.emission_interval = txt_to_reltime(p_next[1]);
+            PARSER_DEBUG_PRINTF("\tTC interval1: %u ms\n", new_if->cnf->tc_params.emission_interval);
+          } else if (0 == strcasecmp("TcValidityTime", p_next[0])) {
+            new_if->cnf->tc_params.validity_time = txt_to_reltime(p_next[1]);
+            PARSER_DEBUG_PRINTF("\tTC validity: %u ms\n", new_if->cnf->tc_params.validity_time);
+          } else if (0 == strcasecmp("Midinterval", p_next[0])) {
+            new_if->cnf->mid_params.emission_interval = txt_to_reltime(p_next[1]);
+            PARSER_DEBUG_PRINTF("\tMID interval1: %u ms\n", new_if->cnf->mid_params.emission_interval);
+          } else if (0 == strcasecmp("MidValidityTime", p_next[0])) {
+            new_if->cnf->mid_params.validity_time = txt_to_reltime(p_next[1]);
+            PARSER_DEBUG_PRINTF("\tMID validity: %u ms\n", new_if->cnf->mid_params.validity_time);
+          } else if (0 == strcasecmp("Hnainterval", p_next[0])) {
+            new_if->cnf->hna_params.emission_interval = txt_to_reltime(p_next[1]);
+            PARSER_DEBUG_PRINTF("\tHNA interval1: %u ms\n", new_if->cnf->hna_params.emission_interval);
+          } else if (0 == strcasecmp("HnaValidityTime", p_next[0])) {
+            new_if->cnf->hna_params.validity_time = txt_to_reltime(p_next[1]);
+            PARSER_DEBUG_PRINTF("\tHNA validity: %u ms\n", new_if->cnf->hna_params.validity_time);
+          } else if (0 == strcasecmp("Weight", p_next[0])) {
             new_if->cnf->weight.fixed = true;
             PARSER_DEBUG_PRINTF("\tFixed willingness: %d\n", new_if->cnf->weight.value);
-          } else if (0 == strcmp("LinkQualityMult", p_next[0])) {
+          } else if (0 == strcasecmp("LinkQualityMult", p_next[0])) {
             float f;
             struct olsr_lq_mult *mult = olsr_malloc(sizeof(*mult), "lqmult");
             if (!p_next[2]) {
@@ -544,7 +537,7 @@ parse_cfg_interface(char *argstr, struct olsr_config *rcfg, char *rmsg)
               return CFG_ERROR;
             }
             memset(&mult->addr, 0, sizeof(mult->addr));
-            if (0 != strcmp("default", p_next[1])) {
+            if (0 != strcasecmp("default", p_next[1])) {
               if (inet_pton(rcfg->ip_version, p_next[1], &mult->addr) <= 0) {
                 sprintf(rmsg, "Failed converting IP address %s\n", p_next[1]);
                 parse_tok_free(tok_next);
@@ -607,7 +600,7 @@ parse_cfg_ipc(char *argstr, struct olsr_config *rcfg, char *rmsg)
         parse_tok_free(tok);
         return CFG_ERROR;
       }
-      if (0 == strcmp("Host", p[0])) {
+      if (0 == strcasecmp("Host", p[0])) {
         union olsr_ip_addr ipaddr;
         if (inet_pton(rcfg->ip_version, p[1], &ipaddr) <= 0) {
           sprintf(rmsg, "Failed converting IP address %s\n", p[0]);
@@ -617,7 +610,7 @@ parse_cfg_ipc(char *argstr, struct olsr_config *rcfg, char *rmsg)
 
         ip_acl_add(&rcfg->ipc_nets, &ipaddr, 8 * rcfg->ipsize, false);
         PARSER_DEBUG_PRINTF("\tIPC host: %s\n", ip_to_string(rcfg->ip_version, &buf, &ipaddr));
-      } else if (0 == strcmp("Net", p[0])) {
+      } else if (0 == strcasecmp("Net", p[0])) {
         union olsr_ip_addr ipaddr;
         if (!p[2]) {
           sprintf(rmsg, "Odd args in %s\n", nxt);
@@ -697,7 +690,7 @@ parse_cfg_loadplugin(char *argstr, struct olsr_config *rcfg, char *rmsg)
         char **p_next = tok_next;
         while (p_next[0]) {
           struct plugin_param *pp = olsr_malloc(sizeof(*pp), "plparam");
-          if (0 != strcmp("PlParam", p_next[0]) || !p_next[1] || !p_next[2]) {
+          if (0 != strcasecmp("PlParam", p_next[0]) || !p_next[1] || !p_next[2]) {
             sprintf(rmsg, "Odd args in %s\n", nxt);
             parse_tok_free(tok_next);
             parse_tok_free(tok);
@@ -866,11 +859,11 @@ parse_cfg_option(const int optint, char *argstr, const int line, struct olsr_con
     PARSER_DEBUG_PRINTF("no_fork set to %d\n", rcfg->no_fork);
     break;
   case 'A':                    /* AllowNoInt (yes/no) */
-    rcfg->allow_no_interfaces = (0 == strcmp("yes", argstr));
+    rcfg->allow_no_interfaces = (0 == strcasecmp("yes", argstr));
     PARSER_DEBUG_PRINTF("Noint set to %d\n", rcfg->allow_no_interfaces);
     break;
   case 'C':                    /* ClearScreen (yes/no) */
-    rcfg->clear_screen = (0 == strcmp("yes", argstr));
+    rcfg->clear_screen = (0 == strcasecmp("yes", argstr));
     PARSER_DEBUG_PRINTF("Clear screen %s\n", rcfg->clear_screen ? "enabled" : "disabled");
     break;
   case 'd':                    /* DebugLevel (i) */
@@ -880,11 +873,11 @@ parse_cfg_option(const int optint, char *argstr, const int line, struct olsr_con
     {
       char **tok;
       if (NULL != (tok = parse_tok(argstr, NULL))) {
-        if (strcmp(*tok, CFG_FIBM_FLAT) == 0) {
+        if (strcasecmp(*tok, CFG_FIBM_FLAT) == 0) {
           rcfg->fib_metric = FIBM_FLAT;
-        } else if (strcmp(*tok, CFG_FIBM_CORRECT) == 0) {
+        } else if (strcasecmp(*tok, CFG_FIBM_CORRECT) == 0) {
           rcfg->fib_metric = FIBM_CORRECT;
-        } else if (strcmp(*tok, CFG_FIBM_APPROX) == 0) {
+        } else if (strcasecmp(*tok, CFG_FIBM_APPROX) == 0) {
           rcfg->fib_metric = FIBM_APPROX;
         } else {
           sprintf(rmsg, "FIBMetric must be \"%s\", \"%s\", or \"%s\"!\n", CFG_FIBM_FLAT, CFG_FIBM_CORRECT, CFG_FIBM_APPROX);
@@ -929,11 +922,13 @@ parse_cfg_option(const int optint, char *argstr, const int line, struct olsr_con
     break;
   case 'J':                    /* LinkQualityDijkstraLimit (i,f) */
     {
-      int arg = -1;
-      sscanf(argstr, "%d %f", &arg, &rcfg->lq_dinter);
-      if (0 <= arg && arg < (1 << (8 * sizeof(rcfg->lq_dlimit))))
-        rcfg->lq_dlimit = arg;
-      PARSER_DEBUG_PRINTF("Link quality dijkstra limit %d, %0.2f\n", rcfg->lq_dlimit, rcfg->lq_dinter);
+      int limit = -1;
+      char t[10] = {0};
+      sscanf(argstr, "%d %10s", &limit, t);
+      if (0 <= limit && limit < (1 << (8 * sizeof(rcfg->lq_dlimit))))
+        rcfg->lq_dlimit = limit;
+      rcfg->lq_dinter = txt_to_reltime(t);
+      PARSER_DEBUG_PRINTF("Link quality dijkstra limit %d, %u ms\n", rcfg->lq_dlimit, rcfg->lq_dinter);
     }
     break;
   case 'E':                    /* LinkQualityFishEye (i) */
@@ -958,20 +953,21 @@ parse_cfg_option(const int optint, char *argstr, const int line, struct olsr_con
     }
     break;
   case 'N':                    /* NatThreshold (f) */
-    sscanf(argstr, "%f", &rcfg->lq_nat_thresh);
-    PARSER_DEBUG_PRINTF("NAT threshold %0.2f\n", rcfg->lq_nat_thresh);
+    {
+      struct time_txt tbuf;
+
+      rcfg->lq_nat_thresh = txt_to_reltime(argstr);
+      PARSER_DEBUG_PRINTF("NAT threshold %s\n", reltime_to_txt(&tbuf, rcfg->lq_nat_thresh));
+    }
     break;
   case 'Y':                    /* NicChgsPollInt (f) */
-    sscanf(argstr, "%f", &rcfg->nic_chgs_pollrate);
-    PARSER_DEBUG_PRINTF("NIC Changes Pollrate %0.2f\n", rcfg->nic_chgs_pollrate);
+    rcfg->nic_chgs_pollrate = txt_to_reltime(argstr);
+    PARSER_DEBUG_PRINTF("NIC Changes Pollrate %u ms\n", rcfg->nic_chgs_pollrate);
     break;
   case 'T':                    /* Pollrate (f) */
     {
-      float arg = -1;
-      sscanf(argstr, "%f", &arg);
-      if (0 <= arg)
-        rcfg->pollrate = conv_pollrate_to_microsecs(arg);
-      PARSER_DEBUG_PRINTF("Pollrate %u\n", rcfg->pollrate);
+      rcfg->pollrate = txt_to_reltime(argstr);
+      PARSER_DEBUG_PRINTF("Pollrate %u ms\n", rcfg->pollrate);
     }
     break;
   case 'q':                    /* RtProto (i) */
@@ -1052,7 +1048,7 @@ parse_cfg_option(const int optint, char *argstr, const int line, struct olsr_con
     break;
 
   case 's':                    /* SourceIpMode (string) */
-    rcfg->source_ip_mode = (0 == strcmp("yes", argstr)) ? 1 : 0;
+    rcfg->source_ip_mode = (0 == strcasecmp("yes", argstr)) ? 1 : 0;
     PARSER_DEBUG_PRINTF("Source IP mode %s\n", rcfg->source_ip_mode ? "enabled" : "disabled");
     break;
   case 'o':                    /* Originator Address (ip) */
@@ -1249,10 +1245,10 @@ olsr_parse_cfg(int argc, char *argv[], const char *file, char *rmsg, struct olsr
   /* Copy argv array for safe free'ing later on */
   while (opt_argc < argc) {
     const char *p = argv[opt_argc];
-    if (0 == strcmp(p, "-nofork"))
+    if (0 == strcasecmp(p, "-nofork"))
       p = "-n";
 #ifdef WIN32
-    else if (0 == strcmp(p, "-int"))
+    else if (0 == strcasecmp(p, "-int"))
       p = "-l";
 #endif
     opt_argv[opt_argc] = olsr_strdup(p);
@@ -1345,7 +1341,7 @@ olsr_parse_cfg(int argc, char *argv[], const char *file, char *rmsg, struct olsr
       }
       if (optarg == NULL) {
         printf("Use '--help=log'for help about the available logging sources\n");
-      } else if (strcmp(optarg, "log") == 0) {
+      } else if (strcasecmp(optarg, "log") == 0) {
         int i;
 
         printf("Log sources for --log_debug, --log_info, --log_warn and --log_error:\n");
@@ -1412,6 +1408,7 @@ olsr_sanity_check_cfg(struct olsr_config *cfg)
 {
   struct olsr_if_config *in = cfg->if_configs;
   struct olsr_if_options *io;
+  struct time_txt tbuf;
 
   /* IP version */
   if (cfg->ip_version != AF_INET && cfg->ip_version != AF_INET6) {
@@ -1432,14 +1429,14 @@ olsr_sanity_check_cfg(struct olsr_config *cfg)
   }
 
   /* Check Link quality dijkstra limit */
-  if (cfg->lq_dinter < conv_pollrate_to_secs(cfg->pollrate) && cfg->lq_dlimit != 255) {
+  if (cfg->lq_dinter < cfg->pollrate && cfg->lq_dlimit != 255) {
     fprintf(stderr, "Link quality dijkstra limit must be higher than pollrate\n");
     return -1;
   }
 
   /* NIC Changes Pollrate */
   if (cfg->nic_chgs_pollrate < MIN_NICCHGPOLLRT || cfg->nic_chgs_pollrate > MAX_NICCHGPOLLRT) {
-    fprintf(stderr, "NIC Changes Pollrate %0.2f is not allowed\n", cfg->nic_chgs_pollrate);
+    fprintf(stderr, "NIC Changes Pollrate %u ms is not allowed\n", cfg->nic_chgs_pollrate);
     return -1;
   }
 
@@ -1456,8 +1453,8 @@ olsr_sanity_check_cfg(struct olsr_config *cfg)
   }
 
   /* NAT threshold value */
-  if (cfg->lq_nat_thresh < 0.1 || cfg->lq_nat_thresh > 1.0) {
-    fprintf(stderr, "NAT threshold %f is not allowed\n", cfg->lq_nat_thresh);
+  if (cfg->lq_nat_thresh < 100 || cfg->lq_nat_thresh > 1000) {
+    fprintf(stderr, "NAT threshold %s is not allowed\n", reltime_to_txt(&tbuf, cfg->lq_nat_thresh));
     return -1;
   }
 
@@ -1494,33 +1491,38 @@ olsr_sanity_check_cfg(struct olsr_config *cfg)
 
     /* HELLO interval */
 
-    if (io->hello_params.emission_interval < conv_pollrate_to_secs(cfg->pollrate) ||
+    if (io->hello_params.emission_interval < cfg->pollrate ||
         io->hello_params.emission_interval > io->hello_params.validity_time) {
-      fprintf(stderr, "Bad HELLO parameters! (em: %0.2f, vt: %0.2f)\n", io->hello_params.emission_interval,
-              io->hello_params.validity_time);
+      fprintf(stderr, "Bad HELLO parameters! (em: %u ms, vt: %u ms)\n",
+          io->hello_params.emission_interval,
+          io->hello_params.validity_time);
       return -1;
     }
 
     /* TC interval */
-    if (io->tc_params.emission_interval < conv_pollrate_to_secs(cfg->pollrate) ||
+    if (io->tc_params.emission_interval < cfg->pollrate ||
         io->tc_params.emission_interval > io->tc_params.validity_time) {
-      fprintf(stderr, "Bad TC parameters! (em: %0.2f, vt: %0.2f)\n", io->tc_params.emission_interval, io->tc_params.validity_time);
+      fprintf(stderr, "Bad TC parameters! (em: %u ms, vt: %u ms)\n",
+          io->tc_params.emission_interval,
+          io->tc_params.validity_time);
       return -1;
     }
 
     /* MID interval */
-    if (io->mid_params.emission_interval < conv_pollrate_to_secs(cfg->pollrate) ||
+    if (io->mid_params.emission_interval < cfg->pollrate ||
         io->mid_params.emission_interval > io->mid_params.validity_time) {
-      fprintf(stderr, "Bad MID parameters! (em: %0.2f, vt: %0.2f)\n", io->mid_params.emission_interval,
-              io->mid_params.validity_time);
+      fprintf(stderr, "Bad MID parameters! (em: %u ms, vt: %u ms)\n",
+          io->mid_params.emission_interval,
+          io->mid_params.validity_time);
       return -1;
     }
 
     /* HNA interval */
-    if (io->hna_params.emission_interval < conv_pollrate_to_secs(cfg->pollrate) ||
+    if (io->hna_params.emission_interval < cfg->pollrate ||
         io->hna_params.emission_interval > io->hna_params.validity_time) {
-      fprintf(stderr, "Bad HNA parameters! (em: %0.2f, vt: %0.2f)\n", io->hna_params.emission_interval,
-              io->hna_params.validity_time);
+      fprintf(stderr, "Bad HNA parameters! (em: %u ms, vt: %u ms)\n",
+          io->hna_params.emission_interval,
+          io->hna_params.validity_time);
       return -1;
     }
 
@@ -1641,7 +1643,7 @@ olsr_get_default_cfg(void)
   ip_acl_init(&cfg->ipc_nets);
   assert(cfg->if_configs == NULL);
 
-  cfg->pollrate = conv_pollrate_to_microsecs(DEF_POLLRATE);
+  cfg->pollrate = DEF_POLLRATE;
   cfg->nic_chgs_pollrate = DEF_NICCHGPOLLRT;
   cfg->lq_nat_thresh = DEF_LQ_NAT_THRESH;
   cfg->tc_redundancy = TC_REDUNDANCY;
index 1298f7a..090c0f6 100644 (file)
@@ -43,8 +43,8 @@
 #define _OLSRD_CFG_H
 
 /* Default values not declared in olsr_protocol.h */
-#define DEF_POLLRATE           0.05
-#define DEF_NICCHGPOLLRT       2.5
+#define DEF_POLLRATE           50
+#define DEF_NICCHGPOLLRT       2500
 #define DEF_WILL_AUTO          true
 #define DEF_ALLOW_NO_INTS      true
 #define DEF_TOS                16
@@ -55,8 +55,8 @@
 #define DEF_LQ_ALWAYS_SEND_TC  true
 #define DEF_LQ_FISH            0
 #define DEF_LQ_DIJK_LIMIT      255
-#define DEF_LQ_DIJK_INTER      0.0
-#define DEF_LQ_NAT_THRESH      1.0
+#define DEF_LQ_DIJK_INTER      0
+#define DEF_LQ_NAT_THRESH      1000
 #define DEF_LQ_AGING           0.1
 #define DEF_CLEAR_SCREEN       false
 #define DEF_HTTPPORT           8080
 
 #define MIN_INTERVAL        0.01
 
-#define MAX_POLLRATE        10.0
-#define MIN_POLLRATE        0.01
-#define MAX_NICCHGPOLLRT    100.0
-#define MIN_NICCHGPOLLRT    1.0
+#define MAX_POLLRATE        10000
+#define MIN_POLLRATE        10
+#define MAX_NICCHGPOLLRT    100000
+#define MIN_NICCHGPOLLRT    1000
 #define MAX_DEBUGLVL        3
 #define MIN_DEBUGLVL        -2
 #define MAX_TOS             16
 #include "olsr_cfg_data.h"
 
 struct olsr_msg_params {
-  float emission_interval;
-  float validity_time;
+  olsr_reltime emission_interval;
+  olsr_reltime validity_time;
 };
 
 struct olsr_lq_mult {
@@ -202,13 +202,13 @@ struct olsr_config {
   struct ip_acl ipc_nets;              /* List of allowed IPC peer IPs */
   struct olsr_if_config *if_configs;   /* List of devices to be used by olsrd */
 
-  uint32_t pollrate;                   /* Main loop poll rate, in microseconds */
-  float nic_chgs_pollrate;             /* Interface poll rate */
-  float lq_nat_thresh;                 /* Link quality NAT threshold, 1.0 == unused */
+  olsr_reltime pollrate;               /* Main loop poll rate, in milliseconds */
+  olsr_reltime nic_chgs_pollrate;      /* Interface poll rate */
+  uint32_t lq_nat_thresh;              /* Link quality NAT threshold, 1000 == unused */
   uint8_t tc_redundancy;               /* TC anncoument mode, 0=only MPR, 1=MPR+MPRS, 2=All sym neighs */
   uint8_t mpr_coverage;                /* How many additional MPRs should be selected */
   uint8_t lq_fish;                     /* 0==Fisheye off, 1=Fisheye on */
-  float lq_dinter;                     /* Dijkstra Calculation interval */
+  olsr_reltime lq_dinter;              /* Dijkstra Calculation interval */
   uint8_t lq_dlimit;                   /* Dijkstra Calculation limit */
   uint8_t willingness;                 /* Manual Configured Willingness value */
 
@@ -227,7 +227,7 @@ struct olsr_config {
    */
 
   union olsr_ip_addr router_id;        /* Main address of this node */
-  float will_int;                      /* Willingness update interval if willingness_auto */
+  olsr_reltime will_int;                      /* Willingness update interval if willingness_auto */
   int exit_value;                      /* Global return value for process termination */
 
   int ioctl_s;                         /* Socket used for ioctl calls */
@@ -261,20 +261,6 @@ struct olsr_config *olsr_get_default_cfg(void);
 int olsr_sanity_check_cfg(struct olsr_config *cfg);
 void olsr_free_cfg(struct olsr_config *cfg);
 
-/*
- * Check pollrate function
- */
-static inline float
-conv_pollrate_to_secs(uint32_t p)
-{
-  return p / (float)1000000.0;
-}
-static inline uint32_t
-conv_pollrate_to_microsecs(float p)
-{
-  return (uint32_t) (p * 1000000);
-}
-
 #endif /* _OLSRD_CFG_H */
 
 /*
index 6624b83..bce0935 100644 (file)
 #include "olsr_protocol.h"
 #include "ipcalc.h"
 #include "olsr_ip_prefix_list.h"
+#include "olsr_time.h"
 
 #include <errno.h>
 
 static INLINE void
-append_float(struct autobuf *abuf, const char *name, float val, float deflt, bool first)
+append_reltime(struct autobuf *abuf, const char *name, olsr_reltime val, olsr_reltime deflt, bool first)
 {
+  struct time_txt buf;
+
   if (val != deflt) {
-    abuf_appendf(abuf, "    %s\t%0.2f\n", name, val);
+    abuf_appendf(abuf, "    %s\t%s\n", name, reltime_to_txt(&buf, val));
   } else if (first) {
-    abuf_appendf(abuf, "    #%s\t%0.2f\n", name, val);
+    abuf_appendf(abuf, "    #%s\t%s\n", name, reltime_to_txt(&buf, val));
   }
 }
 
@@ -60,6 +63,7 @@ void
 olsr_write_cnf_buf(struct autobuf *abuf, struct olsr_config *cnf, bool write_more_comments)
 {
   char ipv6_buf[INET6_ADDRSTRLEN];     /* buffer for IPv6 inet_ntop */
+  struct time_txt tbuf;
   const char *s;
 
   abuf_appendf(abuf, "#\n" "# Generated config file for %s\n" "#\n\n", olsrd_version);
@@ -129,11 +133,13 @@ olsr_write_cnf_buf(struct autobuf *abuf, struct olsr_config *cnf, bool write_mor
 
   /* Pollrate */
   abuf_appendf(abuf, "# Polling rate in seconds(float).\n"
-               "# Auto uses default value 0.05 sec\n" "Pollrate\t%0.2f\n", conv_pollrate_to_secs(cnf->pollrate));
+               "# Auto uses default value 0.05 sec\n" "Pollrate\t%s\n",
+               reltime_to_txt(&tbuf, cnf->pollrate));
 
   /* NIC Changes Pollrate */
   abuf_appendf(abuf, "# Interval to poll network interfaces for configuration\n"
-               "# changes. Defaults to 2.5 seconds\n" "NicChgsPollInt\t%0.2f\n", cnf->nic_chgs_pollrate);
+               "# changes. Defaults to 2.5 seconds\n" "NicChgsPollInt\t%s\n",
+               reltime_to_txt(&tbuf, cnf->nic_chgs_pollrate));
 
   /* TC redundancy */
   abuf_appendf(abuf, "# TC redundancy\n"
@@ -153,7 +159,7 @@ olsr_write_cnf_buf(struct autobuf *abuf, struct olsr_config *cnf, bool write_mor
   abuf_appendf(abuf, "# Fish Eye algorithm\n"
                "# 0 = do not use fish eye\n" "# 1 = use fish eye\n" "LinkQualityFishEye\t%d\n\n", cnf->lq_fish);
 
-  abuf_appendf(abuf, "# NAT threshold\n" "NatThreshold\t%f\n\n", cnf->lq_nat_thresh);
+  abuf_appendf(abuf, "# NAT threshold\n" "NatThreshold\t%s\n\n", reltime_to_txt(&tbuf, cnf->lq_nat_thresh));
 
   abuf_appendf(abuf, "# Clear screen when printing debug output?\n" "ClearScreen\t%s\n\n", cnf->clear_screen ? "yes" : "no");
 
@@ -238,13 +244,13 @@ olsr_write_cnf_buf(struct autobuf *abuf, struct olsr_config *cnf, bool write_mor
         abuf_appendf(abuf, "    # Emission and validity intervals.\n"
                      "    # If not defined, RFC proposed values will\n" "    # in most cases be used.\n");
       }
-      append_float(abuf, "HelloInterval", in->cnf->hello_params.emission_interval, HELLO_INTERVAL, first);
-      append_float(abuf, "HelloValidityTime", in->cnf->hello_params.validity_time, NEIGHB_HOLD_TIME, first);
-      append_float(abuf, "TcInterval", in->cnf->tc_params.emission_interval, TC_INTERVAL, first);
-      append_float(abuf, "TcValidityTime", in->cnf->tc_params.validity_time, TOP_HOLD_TIME, first);
-      append_float(abuf, "MidValidityTime", in->cnf->mid_params.validity_time, MID_HOLD_TIME, first);
-      append_float(abuf, "HnaInterval", in->cnf->hna_params.emission_interval, HNA_INTERVAL, first);
-      append_float(abuf, "HnaValidityTime", in->cnf->hna_params.validity_time, HNA_HOLD_TIME, first);
+      append_reltime(abuf, "HelloInterval", in->cnf->hello_params.emission_interval, HELLO_INTERVAL, first);
+      append_reltime(abuf, "HelloValidityTime", in->cnf->hello_params.validity_time, NEIGHB_HOLD_TIME, first);
+      append_reltime(abuf, "TcInterval", in->cnf->tc_params.emission_interval, TC_INTERVAL, first);
+      append_reltime(abuf, "TcValidityTime", in->cnf->tc_params.validity_time, TOP_HOLD_TIME, first);
+      append_reltime(abuf, "MidValidityTime", in->cnf->mid_params.validity_time, MID_HOLD_TIME, first);
+      append_reltime(abuf, "HnaInterval", in->cnf->hna_params.emission_interval, HNA_INTERVAL, first);
+      append_reltime(abuf, "HnaValidityTime", in->cnf->hna_params.validity_time, HNA_HOLD_TIME, first);
       if (in->cnf->lq_mult == NULL) {
         if (first) {
           abuf_appendf(abuf, "    #LinkQualityMult\tdefault 1.0\n");
index b7adf0e..ff514c2 100644 (file)
@@ -70,9 +70,9 @@
  *Emission Intervals
  */
 
-#define HELLO_INTERVAL        2
-#define REFRESH_INTERVAL      2
-#define TC_INTERVAL           5
+#define HELLO_INTERVAL        2000
+#define REFRESH_INTERVAL      2000
+#define TC_INTERVAL           5000
 #define MID_INTERVAL          TC_INTERVAL
 #define HNA_INTERVAL          TC_INTERVAL
 
@@ -89,7 +89,7 @@
 
 #define NEIGHB_HOLD_TIME      3 * REFRESH_INTERVAL
 #define TOP_HOLD_TIME         3 * TC_INTERVAL
-#define DUP_HOLD_TIME         30
+#define DUP_HOLD_TIME         30000
 #define MID_HOLD_TIME         3 * MID_INTERVAL
 #define HNA_HOLD_TIME         3 * HNA_INTERVAL
 
similarity index 87%
rename from src/mantissa.c
rename to src/olsr_time.c
index 44266c0..9507afc 100644 (file)
  *
  */
 
-#include "mantissa.h"
 #include <assert.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "olsr_time.h"
 
 /**
  *Function that converts a double to a mantissa/exponent
@@ -139,6 +143,34 @@ me_to_reltime(const uint8_t me)
   return ((16 + a) * 1000) >> (8 - b);
 }
 
+char *
+reltime_to_txt(struct time_txt *buffer, olsr_reltime t) {
+  sprintf(buffer->buf, "%u.%03u", t/1000, t%1000);
+  return buffer->buf;
+}
+
+uint32_t
+txt_to_reltime(char *txt) {
+  uint32_t t1 = 0,t2 = 0;
+  char *fraction;
+
+  fraction = strchr(txt, '.');
+  if (fraction != NULL) {
+    *fraction++ = 0;
+
+    if (strlen(fraction) > 3) {
+      fraction[3] = 0;
+    }
+
+    t2 = strtoul(fraction, NULL, 10);
+  }
+  t1 = strtoul(txt, NULL, 10);
+  if (t1 > UINT32_MAX / MSEC_PER_SEC) {
+    t1 = UINT32_MAX / MSEC_PER_SEC;
+  }
+  return t1*MSEC_PER_SEC + t2;
+}
+
 /*
  * Local Variables:
  * c-basic-offset: 2
similarity index 89%
rename from src/mantissa.h
rename to src/olsr_time.h
index db3722e..a09b48f 100644 (file)
 #include "defs.h"
 #include "olsr_types.h"
 
+/* Some defs for juggling with timers */
+#define MSEC_PER_SEC 1000
+#define USEC_PER_SEC 1000000
+#define NSEC_PER_USEC 1000
+#define USEC_PER_MSEC 1000
+
 /* olsr_reltime is a relative timestamp measured in microseconds */
 typedef uint32_t olsr_reltime;
 
+struct time_txt {
+  char buf[16];
+};
+
 /**
  * Macro for converting a mantissa/exponent 8bit value back
  * to an integer (measured in microseconds) as described in RFC3626:
@@ -66,6 +76,11 @@ olsr_reltime EXPORT(me_to_reltime) (const uint8_t);
 
 uint8_t EXPORT(reltime_to_me) (const olsr_reltime);
 
+char *EXPORT(reltime_to_txt)(struct time_txt *buffer, olsr_reltime t);
+
+olsr_reltime EXPORT(txt_to_reltime)(char *txt);
+
+
 #endif
 
 /*
index a90e882..7d512b2 100644 (file)
@@ -43,7 +43,7 @@
 #include "ipcalc.h"
 #include "defs.h"
 #include "process_package.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "duplicate_set.h"
 #include "mid_set.h"
 #include "olsr.h"
index b6243b8..1daa9e6 100644 (file)
@@ -52,6 +52,7 @@
 #include "net_olsr.h"
 #include "olsr_logging.h"
 
+#include <limits.h>
 #include <assert.h>
 
 /* Cookies */
@@ -493,10 +494,22 @@ olsr_cmp_rtp(const struct rt_path *rtp1, const struct rt_path *rtp2, const struc
 {
   olsr_linkcost etx1 = rtp1->rtp_metric.cost;
   olsr_linkcost etx2 = rtp2->rtp_metric.cost;
-  if (inetgw == rtp1)
-    etx1 *= olsr_cnf->lq_nat_thresh;
-  if (inetgw == rtp2)
-    etx2 *= olsr_cnf->lq_nat_thresh;
+  if (inetgw == rtp1) {
+    if (etx1 < INT32_MAX/1000) {
+      etx1 = (etx1 * olsr_cnf->lq_nat_thresh) / 1000;
+    }
+    else {
+      etx1 = (etx1 / 1000) * olsr_cnf->lq_nat_thresh;
+    }
+  }
+  if (inetgw == rtp2) {
+    if (etx2 < INT32_MAX/1000) {
+      etx2 = (etx2 * olsr_cnf->lq_nat_thresh) / 1000;
+    }
+    else {
+      etx2 = (etx2 / 1000) * olsr_cnf->lq_nat_thresh;
+    }
+  }
 
   /* etx comes first */
   if (etx1 < etx2) {
index bbe7a74..6dad677 100644 (file)
@@ -446,7 +446,7 @@ handle_fds(uint32_t next_interval)
 void
 olsr_scheduler(void)
 {
-  OLSR_INFO(LOG_SCHEDULER, "Scheduler started - polling every %u microseconds\n", olsr_cnf->pollrate);
+  OLSR_INFO(LOG_SCHEDULER, "Scheduler started - polling every %u ms\n", olsr_cnf->pollrate);
 
   /* Main scheduler loop */
   while (app_state == STATE_RUNNING) {
@@ -457,7 +457,7 @@ olsr_scheduler(void)
      * to avoid any undesired side effects if the system clock changes.
      */
     now_times = olsr_times();
-    next_interval = GET_TIMESTAMP(olsr_cnf->pollrate / USEC_PER_MSEC);
+    next_interval = GET_TIMESTAMP(olsr_cnf->pollrate);
 
     /* Read incoming data */
     poll_sockets();
index c32f8d3..f0da787 100644 (file)
@@ -43,6 +43,7 @@
 #ifndef _OLSR_SCHEDULER
 #define _OLSR_SCHEDULER
 
+#include "olsr_time.h"
 #include "common/list.h"
 
 #include "olsr_types.h"
 #define TIMER_WHEEL_SLOTS 1024
 #define TIMER_WHEEL_MASK (TIMER_WHEEL_SLOTS - 1)
 
-/* Some defs for juggling with timers */
-#define MSEC_PER_SEC 1000
-#define USEC_PER_SEC 1000000
-#define NSEC_PER_USEC 1000
-#define USEC_PER_MSEC 1000
-
 typedef void (*timer_cb_func) (void *); /* callback function */
 
 /*
index d8de62a..162a6cd 100644 (file)
@@ -54,7 +54,7 @@
 #include "parser.h"
 #include "scheduler.h"
 #include "generate_msg.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "lq_packet.h"
 #include "log.h"
 #include "link_set.h"
@@ -590,23 +590,23 @@ chk_if_up(struct olsr_if_config *iface)
    * Register functions for periodic message generation
    */
   ifp->hello_gen_timer =
-    olsr_start_timer(iface->cnf->hello_params.emission_interval * MSEC_PER_SEC,
+    olsr_start_timer(iface->cnf->hello_params.emission_interval,
                      HELLO_JITTER, OLSR_TIMER_PERIODIC, &olsr_output_lq_hello, ifp, hello_gen_timer_cookie);
   ifp->tc_gen_timer =
-    olsr_start_timer(iface->cnf->tc_params.emission_interval * MSEC_PER_SEC,
+    olsr_start_timer(iface->cnf->tc_params.emission_interval,
                      TC_JITTER, OLSR_TIMER_PERIODIC, &olsr_output_lq_tc, ifp, tc_gen_timer_cookie);
   ifp->mid_gen_timer =
-    olsr_start_timer(iface->cnf->mid_params.emission_interval * MSEC_PER_SEC,
+    olsr_start_timer(iface->cnf->mid_params.emission_interval,
                      MID_JITTER, OLSR_TIMER_PERIODIC, &generate_mid, ifp, mid_gen_timer_cookie);
   ifp->hna_gen_timer =
-    olsr_start_timer(iface->cnf->hna_params.emission_interval * MSEC_PER_SEC,
+    olsr_start_timer(iface->cnf->hna_params.emission_interval,
                      HNA_JITTER, OLSR_TIMER_PERIODIC, &generate_hna, ifp, hna_gen_timer_cookie);
 
-  ifp->hello_etime = (olsr_reltime) (iface->cnf->hello_params.emission_interval * MSEC_PER_SEC);
-  ifp->valtimes.hello = reltime_to_me(iface->cnf->hello_params.validity_time * MSEC_PER_SEC);
-  ifp->valtimes.tc = reltime_to_me(iface->cnf->tc_params.validity_time * MSEC_PER_SEC);
-  ifp->valtimes.mid = reltime_to_me(iface->cnf->mid_params.validity_time * MSEC_PER_SEC);
-  ifp->valtimes.hna = reltime_to_me(iface->cnf->hna_params.validity_time * MSEC_PER_SEC);
+  ifp->hello_etime = iface->cnf->hello_params.emission_interval;
+  ifp->valtimes.hello = reltime_to_me(iface->cnf->hello_params.validity_time);
+  ifp->valtimes.tc = reltime_to_me(iface->cnf->tc_params.validity_time);
+  ifp->valtimes.mid = reltime_to_me(iface->cnf->mid_params.validity_time);
+  ifp->valtimes.hna = reltime_to_me(iface->cnf->hna_params.validity_time);
 
   ifp->mode = iface->cnf->mode;
 
index a25170b..f77ff9a 100644 (file)
@@ -49,7 +49,7 @@
 #include "ifnet.h"
 #include "generate_msg.h"
 #include "scheduler.h"
-#include "mantissa.h"
+#include "olsr_time.h"
 #include "lq_packet.h"
 #include "net_olsr.h"
 #include "common/string.h"
@@ -738,23 +738,23 @@ chk_if_up(struct olsr_if_config *IntConf)
    * Register functions for periodic message generation
    */
   New->hello_gen_timer =
-    olsr_start_timer(IntConf->cnf->hello_params.emission_interval * MSEC_PER_SEC,
+    olsr_start_timer(IntConf->cnf->hello_params.emission_interval,
                      HELLO_JITTER, OLSR_TIMER_PERIODIC, &olsr_output_lq_hello, New, hello_gen_timer_cookie->ci_id);
   New->tc_gen_timer =
-    olsr_start_timer(IntConf->cnf->tc_params.emission_interval * MSEC_PER_SEC,
+    olsr_start_timer(IntConf->cnf->tc_params.emission_interval,
                      TC_JITTER, OLSR_TIMER_PERIODIC, &olsr_output_lq_tc, New, tc_gen_timer_cookie->ci_id);
   New->mid_gen_timer =
-    olsr_start_timer(IntConf->cnf->mid_params.emission_interval * MSEC_PER_SEC,
+    olsr_start_timer(IntConf->cnf->mid_params.emission_interval,
                      MID_JITTER, OLSR_TIMER_PERIODIC, &generate_mid, New, mid_gen_timer_cookie->ci_id);
   New->hna_gen_timer =
-    olsr_start_timer(IntConf->cnf->hna_params.emission_interval * MSEC_PER_SEC,
+    olsr_start_timer(IntConf->cnf->hna_params.emission_interval,
                      HNA_JITTER, OLSR_TIMER_PERIODIC, &generate_hna, New, hna_gen_timer_cookie->ci_id);
 
-  New->hello_etime = (olsr_reltime) (IntConf->cnf->hello_params.emission_interval * MSEC_PER_SEC);
-  New->valtimes.hello = reltime_to_me(IntConf->cnf->hello_params.validity_time * MSEC_PER_SEC);
-  New->valtimes.tc = reltime_to_me(IntConf->cnf->tc_params.validity_time * MSEC_PER_SEC);
-  New->valtimes.mid = reltime_to_me(IntConf->cnf->mid_params.validity_time * MSEC_PER_SEC);
-  New->valtimes.hna = reltime_to_me(IntConf->cnf->hna_params.validity_time * MSEC_PER_SEC);
+  New->hello_etime = (olsr_reltime) (IntConf->cnf->hello_params.emission_interval);
+  New->valtimes.hello = reltime_to_me(IntConf->cnf->hello_params.validity_time);
+  New->valtimes.tc = reltime_to_me(IntConf->cnf->tc_params.validity_time);
+  New->valtimes.mid = reltime_to_me(IntConf->cnf->mid_params.validity_time);
+  New->valtimes.hna = reltime_to_me(IntConf->cnf->hna_params.validity_time);
 
   New->mode = IntConf->cnf->mode;