Ver código fonte

Move net.inet.ip.random_id code to lib/net/

Nick Mathewson 5 anos atrás
pai
commit
701eaef980
3 arquivos alterados com 31 adições e 20 exclusões
  1. 1 20
      src/app/config/config.c
  2. 29 0
      src/lib/net/socket.c
  3. 1 0
      src/lib/net/socket.h

+ 1 - 20
src/app/config/config.c

@@ -157,10 +157,6 @@
 #include "core/or/connection_st.h"
 #include "core/or/port_cfg_st.h"
 
-#ifdef __FreeBSD__
-#include <sys/sysctl.h>
-#endif
-
 #ifdef HAVE_SYSTEMD
 #   if defined(__COVERITY__) && !defined(__INCLUDE_LEVEL__)
 /* Systemd's use of gcc's __INCLUDE_LEVEL__ extension macro appears to confuse
@@ -3386,22 +3382,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
   if (ContactInfo && !string_is_utf8(ContactInfo, strlen(ContactInfo)))
     REJECT("ContactInfo config option must be UTF-8.");
 
-#ifdef __FreeBSD__
-  if (server_mode(options)) {
-    int random_id_state;
-    size_t state_size = sizeof(random_id_state);
-
-    if (sysctlbyname("net.inet.ip.random_id", &random_id_state,
-        &state_size, NULL, 0)) {
-      log_warn(LD_CONFIG,
-          "Failed to figure out if IP ids are randomized.");
-    } else if (random_id_state == 0) {
-      log_warn(LD_CONFIG, "Looks like IP ids are not randomized. "
-          "Please consider setting the net.inet.ip.random_id sysctl, "
-          "so your relay makes it harder to figure out how busy it is.");
-    }
-  }
-#endif
+  check_network_configuration(server_mode(options));
 
   /* Special case on first boot if no Log options are given. */
   if (!options->Logs && !options->RunAsDaemon && !from_setconf) {

+ 29 - 0
src/lib/net/socket.c

@@ -31,6 +31,9 @@
 #endif
 #include <stddef.h>
 #include <string.h>
+#ifdef __FreeBSD__
+#include <sys/sysctl.h>
+#endif
 
 /** Called before we make any calls to network-related functions.
  * (Some operating systems require their network libraries to be
@@ -60,6 +63,32 @@ network_init(void)
   return 0;
 }
 
+/**
+ * Warn the user if any system network parameters should be changed.
+ */
+void
+check_network_configuration(bool server_mode)
+{
+#ifdef __FreeBSD__
+  if (server_mode) {
+    int random_id_state;
+    size_t state_size = sizeof(random_id_state);
+
+    if (sysctlbyname("net.inet.ip.random_id", &random_id_state,
+                     &state_size, NULL, 0)) {
+      log_warn(LD_CONFIG,
+               "Failed to figure out if IP ids are randomized.");
+    } else if (random_id_state == 0) {
+      log_warn(LD_CONFIG, "Looks like IP ids are not randomized. "
+               "Please consider setting the net.inet.ip.random_id sysctl, "
+               "so your relay makes it harder to figure out how busy it is.");
+    }
+  }
+#else
+  (void) server_mode;
+#endif
+}
+
 /* When set_max_file_sockets() is called, update this with the max file
  * descriptor value so we can use it to check the limit when opening a new
  * socket. Default value is what Debian sets as the default hard limit. */

+ 1 - 0
src/lib/net/socket.h

@@ -54,6 +54,7 @@ int tor_addr_from_getsockname(struct tor_addr_t *addr_out, tor_socket_t sock);
 int set_socket_nonblocking(tor_socket_t socket);
 int tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2]);
 int network_init(void);
+void check_network_configuration(bool server_mode);
 
 int get_max_sockets(void);
 void set_max_sockets(int);