Push timing functions into OS-dependent core (preparation for simulation core)
authorHenning Rogge <hrogge@googlemail.com>
Tue, 12 Oct 2010 18:58:10 +0000 (20:58 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Tue, 12 Oct 2010 18:58:10 +0000 (20:58 +0200)
21 files changed:
lib/httpinfo/src/olsrd_httpinfo.c
lib/httpinfo/src/olsrd_plugin.h
lib/nameservice/src/nameservice.h
lib/secure/src/olsrd_secure.c
lib/secure/src/secure_messages.h
src/main.c
src/olsr_logging.c
src/olsr_time.h
src/os_time.h [new file with mode: 0644]
src/routing_table.h
src/scheduler.c
src/unix/time.c [new file with mode: 0644]
src/win32/compat.c
src/win32/compat.h
src/win32/ifnet.c
src/win32/kernel_routes.c
src/win32/net.c
src/win32/sys/time.h
src/win32/sys/times.h [deleted file]
src/win32/time.c [new file with mode: 0644]
src/win32/unistd.h

index c2e5986..916935f 100644 (file)
@@ -59,6 +59,7 @@
 #include "common/string.h"
 #include "olsr_ip_prefix_list.h"
 #include "olsr_logging.h"
+#include "os_time.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -319,7 +320,7 @@ int
 olsrd_plugin_init(void)
 {
   /* Get start time */
-  gettimeofday(&start_time, NULL);
+  os_gettimeofday(&start_time, NULL);
 
   curr_clients = 0;
   /* set up HTTP socket */
@@ -804,7 +805,7 @@ build_config_body(struct autobuf *abuf)
   {
     struct timeval now, uptime;
     int hours, mins, days;
-    gettimeofday(&now, NULL);
+    os_gettimeofday(&now, NULL);
     timersub(&now, &start_time, &uptime);
 
     days = uptime.tv_sec / 86400;
index 07a9717..0e0c014 100644 (file)
 #include <sys/types.h>
 #include <netinet/in.h>
 #include <sys/socket.h>
-#include <sys/times.h>
 #include <arpa/inet.h>
-#include <sys/time.h>
-#include <time.h>
 
 #include "olsr_types.h"
 #include "plugin.h"
index f7b51a2..c3be6e4 100644 (file)
@@ -47,7 +47,6 @@
 #ifndef _NAMESERVICE_PLUGIN
 #define _NAMESERVICE_PLUGIN
 
-#include <sys/time.h>
 #include <regex.h>
 
 #include "olsr_types.h"
index 4d19432..22173f3 100644 (file)
@@ -64,6 +64,7 @@
 #include "net_olsr.h"
 #include "common/string.h"
 #include "olsr_logging.h"
+#include "os_time.h"
 
 #ifdef USE_OPENSSL
 
@@ -1108,7 +1109,7 @@ timeout_timestamps(void *foo __attribute__ ((unused)))
   int idx;
 
   /* Update our local timestamp */
-  gettimeofday(&now, NULL);
+  os_gettimeofday(&now, NULL);
 
   for (idx = 0; idx < HASHSIZE; idx++) {
     tmp_list = timestamps[idx].next;
index 89cc084..ca47fb9 100644 (file)
@@ -52,8 +52,6 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-#include <sys/time.h>
-#include <time.h>
 #include <stdio.h>
 
 #include "olsr_types.h"
index 7bc8fbf..c55553a 100644 (file)
@@ -64,6 +64,7 @@
 #include "olsr_logging.h"
 #include "os_net.h"
 #include "os_kernel_routes.h"
+#include "os_time.h"
 
 #if defined linux
 #include <linux/types.h>
@@ -343,7 +344,7 @@ main(int argc, char *argv[])
     if (olsr_cnf->allow_no_interfaces) {
       OLSR_INFO(LOG_MAIN,
                 "No interfaces detected! This might be intentional, but it also might mean that your configuration is fubar.\nI will continue after 5 seconds...\n");
-      sleep(5);
+      os_sleep(5);
     } else {
       OLSR_ERROR(LOG_MAIN, "No interfaces detected!\nBailing out!\n");
       olsr_exit(EXIT_FAILURE);
@@ -455,7 +456,7 @@ main(int argc, char *argv[])
       for (i = sysconf(_SC_OPEN_MAX); --i > STDERR_FILENO;) {
         close(i);
       }
-      sleep(1);
+      os_sleep(1);
       OLSR_INFO(LOG_MAIN, "Restarting %s\n", argv[0]);
       execv(argv[0], argv);
       /* if we reach this, the exev() failed */
index bdea58a..984dfb9 100644 (file)
 #include <stdio.h>
 #include <string.h>
 #include <time.h>
-#include <sys/time.h>
 
 #include "olsr_cfg.h"
 #include "olsr_cfg_data.h"
 #include "olsr_logging.h"
 #include "os_log.h"
+#include "os_time.h"
 
 struct log_handler_entry {
   void (*handler)
@@ -236,7 +236,7 @@ olsr_log(enum log_severity severity, enum log_source source, bool no_header, con
   va_start(ap, format);
 
   /* calculate local time */
-  gettimeofday(&timeval, NULL);
+  os_gettimeofday(&timeval, NULL);
 
   /* there is no localtime_r in win32 */
   tm_ptr = localtime((time_t *) & timeval.tv_sec);
index ccf0a41..194585d 100644 (file)
@@ -56,25 +56,10 @@ struct millitxt_buf {
   char buf[16];
 };
 
-/**
- * Macro for converting a mantissa/exponent 8bit value back
- * to an integer (measured in microseconds) as described in RFC3626:
- *
- * value = C*(1+a/16)*2^b [in seconds]
- *
- *  where a is the integer represented by the four highest bits of the
- *  field and b the integer represented by the four lowest bits of the
- *  field.
- *
- * me is the 8 bit mantissa/exponent value
- *
- */
 uint32_t EXPORT(me_to_reltime) (const uint8_t);
-
 uint8_t EXPORT(reltime_to_me) (const uint32_t);
 
 char *EXPORT(olsr_milli_to_txt)(struct millitxt_buf *buffer, uint32_t t);
-
 uint32_t EXPORT(olsr_txt_to_milli)(char *txt);
 
 
diff --git a/src/os_time.h b/src/os_time.h
new file mode 100644 (file)
index 0000000..5c6b6a0
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * os_time.h
+ *
+ *  Created on: Oct 12, 2010
+ *      Author: rogge
+ */
+
+#ifndef OS_TIME_H_
+#define OS_TIME_H_
+
+#include <sys/time.h>
+#include "defs.h"
+
+int EXPORT(os_gettimeofday)(struct timeval *TVal, void *TZone);
+void EXPORT(os_sleep)(unsigned int Sec);
+int EXPORT(os_nanosleep)(struct timespec *Req, struct timespec *Rem);
+
+#endif /* OS_TIME_H_ */
index cf39390..2126212 100644 (file)
@@ -43,7 +43,6 @@
 #define _OLSR_ROUTING_TABLE
 
 #include <sys/types.h>
-#include <sys/time.h>
 #include <sys/socket.h>
 #include <net/if.h>
 #include <net/route.h>
index 1187d78..2ee7973 100644 (file)
@@ -39,7 +39,6 @@
  *
  */
 
-#include <sys/times.h>
 #include <unistd.h>
 #include <assert.h>
 #include <stdlib.h>
@@ -51,6 +50,7 @@
 #include "olsr.h"
 #include "olsr_cookie.h"
 #include "os_net.h"
+#include "os_time.h"
 #include "olsr_logging.h"
 
 /* Timer data, global. Externed in scheduler.h */
@@ -88,7 +88,7 @@ olsr_times(void)
   struct timeval tv;
   uint32_t t;
 
-  if (gettimeofday(&tv, NULL) != 0) {
+  if (os_gettimeofday(&tv, NULL) != 0) {
     OLSR_ERROR(LOG_SCHEDULER, "OS clock is not working, have to shut down OLSR (%s)\n", strerror(errno));
     olsr_exit(1);
   }
@@ -547,7 +547,7 @@ olsr_init_timers(void)
   OLSR_INFO(LOG_SCHEDULER, "Initializing scheduler.\n");
 
   /* Grab initial timestamp */
-  if (gettimeofday(&first_tv, NULL)) {
+  if (os_gettimeofday(&first_tv, NULL)) {
     OLSR_ERROR(LOG_SCHEDULER, "OS clock is not working, have to shut down OLSR (%s)\n", strerror(errno));
     olsr_exit(1);
   }
@@ -761,7 +761,7 @@ olsr_wallclock_string(void)
   struct timeval now;
   int sec, usec;
 
-  gettimeofday(&now, NULL);
+  os_gettimeofday(&now, NULL);
 
   sec = (int)now.tv_sec + olsr_get_timezone();
   usec = (int)now.tv_usec;
diff --git a/src/unix/time.c b/src/unix/time.c
new file mode 100644 (file)
index 0000000..899f828
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * time.c
+ *
+ *  Created on: Oct 12, 2010
+ *      Author: rogge
+ */
+
+#include <unistd.h>
+#include <time.h>
+#include <sys/time.h>
+
+#include "os_time.h"
+
+/**
+ * Wrapper function for sleep()
+ * @param Sec
+ */
+void
+os_sleep(unsigned int Sec)
+{
+  sleep(Sec);
+}
+
+/**
+ * Wrapper function for nanosleep()
+ * @param Req
+ * @param Rem
+ * @return
+ */
+int
+os_nanosleep(struct timespec *Req, struct timespec *Rem) {
+  return nanosleep(Req, Rem);
+}
+
+/**
+ * Wrapper function for gettimeofday()
+ * @param TVal
+ * @param TZone
+ * @return
+ */
+int os_gettimeofday(struct timeval *TVal, void *TZone) {
+  return gettimeofday(TVal, TZone);
+}
index a1ebe66..2e3ab71 100644 (file)
@@ -58,7 +58,6 @@
 
 #include <unistd.h>
 #include <sys/time.h>
-#include <sys/times.h>
 #include <ctype.h>
 #include <dlfcn.h>
 #include <io.h>
 
 #include "defs.h"
 #include "common/string.h"
-
-void PError(char *Str);
-void WinSockPError(char *Str);
-
-void
-sleep(unsigned int Sec)
-{
-  Sleep(Sec * 1000);
-}
+#include "os_time.h"
 
 static unsigned int RandState;
 
@@ -99,52 +90,8 @@ getpid(void)
   return (int)h;
 }
 
-int
-nanosleep(struct timespec *Req, struct timespec *Rem)
-{
-  Sleep(Req->tv_sec * 1000 + Req->tv_nsec / 1000000);
-
-  Rem->tv_sec = 0;
-  Rem->tv_nsec = 0;
-
-  return 0;
-}
-
-int
-gettimeofday(struct timeval *TVal, void *TZone __attribute__ ((unused)))
-{
-  SYSTEMTIME SysTime;
-  FILETIME FileTime;
-  unsigned __int64 Ticks;
-
-  GetSystemTime(&SysTime);
-  SystemTimeToFileTime(&SysTime, &FileTime);
-
-  Ticks = ((__int64) FileTime.dwHighDateTime << 32) | (__int64) FileTime.dwLowDateTime;
-
-  Ticks -= 116444736000000000LL;
-
-  TVal->tv_sec = (unsigned int)(Ticks / 10000000);
-  TVal->tv_usec = (unsigned int)(Ticks % 10000000) / 10;
-  return 0;
-}
-
-long
-times(struct tms *Dummy __attribute__ ((unused)))
-{
-  return (long)GetTickCount();
-}
-
-int
-inet_aton(const char *AddrStr, struct in_addr *Addr)
-{
-  Addr->s_addr = inet_addr(AddrStr);
-
-  return 1;
-}
-
 char *
-StrError(unsigned int ErrNo)
+win32_strerror(unsigned int ErrNo)
 {
   static char Msg[1000];
 
@@ -163,20 +110,7 @@ StrError(unsigned int ErrNo)
   return Msg;
 }
 
-void
-PError(char *Str)
-{
-  fprintf(stderr, "ERROR - %s: %s", Str, StrError(GetLastError()));
-}
-
-void
-WinSockPError(char *Str)
-{
-  fprintf(stderr, "ERROR - %s: %s", Str, StrError(WSAGetLastError()));
-}
-
 // XXX - not thread-safe, which is okay for our purposes
-
 void *
 dlopen(const char *Name, int Flags __attribute__ ((unused)))
 {
@@ -213,7 +147,7 @@ dlsym(void *Handle, const char *Name)
 char *
 dlerror(void)
 {
-  return StrError(GetLastError());
+  return win32_strerror(GetLastError());
 }
 
 #define NS_INADDRSZ 4
index cca36e8..9a77c5f 100644 (file)
@@ -8,6 +8,6 @@
 #ifndef WIN32_IFNET_H_
 #define WIN32_IFNET_H_
 
-char *StrError(unsigned int ErrNo);
+char *win32_strerror(unsigned int ErrNo);
 
 #endif /* WIN32_IFNET_H_ */
index 326a404..4e226bb 100644 (file)
@@ -118,7 +118,7 @@ struct InterfaceInfo {
 };
 
 void WinSockPError(char *);
-char *StrError(unsigned int ErrNo);
+char *win32_strerror(unsigned int ErrNo);
 int GetIntInfo(struct InterfaceInfo *Info, char *Name);
 
 #define MAX_INTERFACES 100
@@ -260,7 +260,7 @@ GetIntInfo(struct InterfaceInfo *Info, char *Name)
   Res = GetIfTable(IfTable, &BuffLen, FALSE);
 
   if (Res != NO_ERROR) {
-    OLSR_WARN(LOG_NETWORKING, "GetIfTable() = %08lx, %s", Res, StrError(Res));
+    OLSR_WARN(LOG_NETWORKING, "GetIfTable() = %08lx, %s", Res, win32_strerror(Res));
     return -1;
   }
 
@@ -322,7 +322,7 @@ GetIntInfo(struct InterfaceInfo *Info, char *Name)
   Res = GetAdaptersInfo(AdInfo, &BuffLen);
 
   if (Res != NO_ERROR) {
-    OLSR_WARN(LOG_NETWORKING, "GetAdaptersInfo() = %08lx, %s", GetLastError(), StrError(Res));
+    OLSR_WARN(LOG_NETWORKING, "GetAdaptersInfo() = %08lx, %s", GetLastError(), win32_strerror(Res));
     return -1;
   }
 
@@ -385,7 +385,7 @@ ListInterfaces(void)
   }
 
   if (Res != NO_ERROR) {
-    OLSR_WARN(LOG_NETWORKING, "GetAdaptersInfo() = %08lx, %s", Res, StrError(Res));
+    OLSR_WARN(LOG_NETWORKING, "GetAdaptersInfo() = %08lx, %s", Res, win32_strerror(Res));
     return;
   }
   // TODO: change to new logging API ?
index b7520b1..ae13520 100644 (file)
@@ -54,7 +54,7 @@
 
 #include <errno.h>
 
-char *StrError(unsigned int ErrNo);
+char *win32_strerror(unsigned int ErrNo);
 
 /*
  * Insert a route in the kernel routing table
@@ -107,13 +107,13 @@ os_route_add_rtentry(const struct rt_entry *rt, int ip_version)
 
   if (Res != NO_ERROR) {
     if (Res != ERROR_NOT_FOUND)
-      OLSR_WARN(LOG_ROUTING, "SetIpForwardEntry() = %08lx, %s", Res, StrError(Res));
+      OLSR_WARN(LOG_ROUTING, "SetIpForwardEntry() = %08lx, %s", Res, win32_strerror(Res));
 
     Res = CreateIpForwardEntry(&Row);
   }
 
   if (Res != NO_ERROR) {
-    OLSR_WARN(LOG_ROUTING, "CreateIpForwardEntry() = %08lx, %s", Res, StrError(Res));
+    OLSR_WARN(LOG_ROUTING, "CreateIpForwardEntry() = %08lx, %s", Res, win32_strerror(Res));
 
     // XXX - report error in a different way
 
@@ -173,7 +173,7 @@ os_route_del_rtentry(const struct rt_entry *rt, int ip_version)
   Res = DeleteIpForwardEntry(&Row);
 
   if (Res != NO_ERROR) {
-    OLSR_WARN(LOG_NETWORKING, "DeleteIpForwardEntry() = %08lx, %s", Res, StrError(Res));
+    OLSR_WARN(LOG_NETWORKING, "DeleteIpForwardEntry() = %08lx, %s", Res, win32_strerror(Res));
 
     // XXX - report error in a different way
 
index 40d2ed3..3711a97 100644 (file)
@@ -77,7 +77,7 @@ os_socket_set_nonblocking(int fd)
   /* make the fd non-blocking */
   unsigned long flags = 1;
   if (ioctlsocket(fd, FIONBIO, &flags) != 0) {
-    OLSR_WARN(LOG_NETWORKING, "Cannot set the socket flags: %s", StrError(WSAGetLastError()));
+    OLSR_WARN(LOG_NETWORKING, "Cannot set the socket flags: %s", win32_strerror(WSAGetLastError()));
     return -1;
   }
   return 0;
index 016f057..3964c4a 100644 (file)
@@ -87,10 +87,6 @@ struct timespec {
 #include <time.h>
 #endif
 
-int nanosleep(struct timespec *Req, struct timespec *Rem);
-
-int gettimeofday(struct timeval *TVal, void *TZone);
-
 #endif
 
 /*
diff --git a/src/win32/sys/times.h b/src/win32/sys/times.h
deleted file mode 100644 (file)
index d2aa46f..0000000
+++ /dev/null
@@ -1,59 +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 !defined TL_SYS_TIMES_H_INCLUDED
-
-#define TL_SYS_TIMES_H_INCLUDED
-
-struct tms {
-  int dummy;
-};
-
-long times(struct tms *);
-
-#endif
-
-/*
- * Local Variables:
- * c-basic-offset: 2
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/src/win32/time.c b/src/win32/time.c
new file mode 100644 (file)
index 0000000..23790c5
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * time.c
+ *
+ *  Created on: Oct 12, 2010
+ *      Author: rogge
+ */
+
+#include <sys/time.h>
+
+#include "defs.h"
+#include "os_time.h"
+
+void
+os_sleep(unsigned int Sec)
+{
+  Sleep(Sec * 1000);
+}
+
+int
+os_nanosleep(struct timespec *Req, struct timespec *Rem)
+{
+  Sleep(Req->tv_sec * 1000 + Req->tv_nsec / 1000000);
+
+  Rem->tv_sec = 0;
+  Rem->tv_nsec = 0;
+
+  return 0;
+}
+
+int
+os_gettimeofday(struct timeval *TVal, void *TZone __attribute__ ((unused)))
+{
+  SYSTEMTIME SysTime;
+  FILETIME FileTime;
+  unsigned __int64 Ticks;
+
+  GetSystemTime(&SysTime);
+  SystemTimeToFileTime(&SysTime, &FileTime);
+
+  Ticks = ((__int64) FileTime.dwHighDateTime << 32) | (__int64) FileTime.dwLowDateTime;
+
+  Ticks -= 116444736000000000LL;
+
+  TVal->tv_sec = (unsigned int)(Ticks / 10000000);
+  TVal->tv_usec = (unsigned int)(Ticks % 10000000) / 10;
+  return 0;
+}
index 81a6f18..b0df46a 100644 (file)
 
 #define TL_UNISTD_H_INCLUDED
 
-void sleep(unsigned int Sec);
-
 void srandom(unsigned int Seed);
 unsigned int random(void);
 
-char *StrError(unsigned int ErrNo);
+char *win32_strerror(unsigned int ErrNo);
 
 int getpid(void);