More fixes for /proc network configuration
authorHenning Rogge <hrogge@googlemail.com>
Sun, 14 Feb 2010 11:49:26 +0000 (12:49 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 14 Feb 2010 11:49:26 +0000 (12:49 +0100)
src/linux/net.c
src/main.c

index 8767df5..e6c0c28 100644 (file)
@@ -124,14 +124,16 @@ static int writeToProc(const char *file, char *old, char value) {
     return -1;
   }
 
-  if (lseek(fd, SEEK_SET, 0) == -1) {
-    OLSR_PRINTF(0, "Error, cannot rewind proc entry %s: %s (%d)\n", file, strerror(errno), errno);
-    return -1;
-  }
+  if (rv != value) {
+    if (lseek(fd, SEEK_SET, 0) == -1) {
+      OLSR_PRINTF(0, "Error, cannot rewind proc entry %s: %s (%d)\n", file, strerror(errno), errno);
+      return -1;
+    }
 
-  if (write(fd, &value, 1) != 1) {
-    OLSR_PRINTF(0, "Error, cannot write proc entry %s: %s (%d)\n", file, strerror(errno), errno);
-    return -1;
+    if (write(fd, &value, 1) != 1) {
+      OLSR_PRINTF(0, "Error, cannot write proc entry %s: %s (%d)\n", file, strerror(errno), errno);
+      return -1;
+    }
   }
 
   if (close(fd) != 0) {
@@ -142,7 +144,7 @@ static int writeToProc(const char *file, char *old, char value) {
   if (old) {
     *old = rv;
   }
-  olsr_syslog(OLSR_LOG_INFO, "Writing '%c' to %s", value, file);
+  olsr_syslog(OLSR_LOG_INFO, "Writing '%c' (was %c) to %s", value, rv, file);
   return 0;
 }
 
@@ -168,7 +170,7 @@ static bool is_at_least_linuxkernel_2_6_31(void) {
 void
 net_os_set_global_ifoptions(void) {
 
-  if (writeToProc(olsr_cnf->ip_version == AF_INET ? PROC_IPFORWARD_V4 : PROC_IPFORWARD_V6, &orig_fwd_state, '0')) {
+  if (writeToProc(olsr_cnf->ip_version == AF_INET ? PROC_IPFORWARD_V4 : PROC_IPFORWARD_V6, &orig_fwd_state, '1')) {
     OLSR_PRINTF(1, "Warning, could not enable IP forwarding!\n"
         "you should manually ensure that IP forwarding is enabled!\n\n");
     olsr_startup_sleep(3);
index 341b007..1b57beb 100644 (file)
@@ -754,6 +754,14 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
   /* delete all routes */
   olsr_delete_all_kernel_routes();
 
+  /* send second shutdown message burst */
+  olsr_shutdown_messages();
+
+  /* now try to cleanup the rest of the mess */
+  olsr_delete_all_tc_entries();
+
+  olsr_delete_all_mid_entries();
+
 #ifdef LINUX_NETLINK_ROUTING
   /* trigger gateway selection */
   if (olsr_cnf->smart_gw_active) {
@@ -771,14 +779,6 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
   }
 #endif
 
-  /* send second shutdown message burst */
-  olsr_shutdown_messages();
-
-  /* now try to cleanup the rest of the mess */
-  olsr_delete_all_tc_entries();
-
-  olsr_delete_all_mid_entries();
-
   olsr_destroy_parser();
 
   OLSR_PRINTF(1, "Closing sockets...\n");