tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

relay_config.h (7511B)


      1 /* Copyright (c) 2001 Matej Pfajfar.
      2 * Copyright (c) 2001-2004, Roger Dingledine.
      3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
      4 * Copyright (c) 2007-2021, The Tor Project, Inc. */
      5 /* See LICENSE for licensing information */
      6 
      7 /**
      8 * @file relay_config.h
      9 * @brief Header for feature/relay/relay_config.c
     10 **/
     11 
     12 #ifndef TOR_FEATURE_RELAY_RELAY_CONFIG_H
     13 #define TOR_FEATURE_RELAY_RELAY_CONFIG_H
     14 
     15 struct or_options_t;
     16 
     17 #ifdef HAVE_MODULE_RELAY
     18 
     19 #include "lib/cc/torint.h"
     20 #include "lib/testsupport/testsupport.h"
     21 
     22 struct smartlist_t;
     23 
     24 int options_validate_relay_mode(const struct or_options_t *old_options,
     25                                struct or_options_t *options,
     26                                char **msg);
     27 
     28 MOCK_DECL(const char*, relay_get_dirportfrontpage, (void));
     29 void relay_config_free_all(void);
     30 
     31 uint32_t relay_get_effective_bwrate(const struct or_options_t *options);
     32 uint32_t relay_get_effective_bwburst(const struct or_options_t *options);
     33 
     34 void port_warn_nonlocal_ext_orports(const struct smartlist_t *ports,
     35                               const char *portname);
     36 
     37 int port_parse_ports_relay(struct or_options_t *options,
     38                      char **msg,
     39                      struct smartlist_t *ports_out,
     40                      int *have_low_ports_out);
     41 void port_update_port_set_relay(struct or_options_t *options,
     42                           const struct smartlist_t *ports);
     43 
     44 int options_validate_relay_os(const struct or_options_t *old_options,
     45                              struct or_options_t *options,
     46                              char **msg);
     47 
     48 int options_validate_relay_info(const struct or_options_t *old_options,
     49                                struct or_options_t *options,
     50                                char **msg);
     51 
     52 int options_validate_publish_server(const struct or_options_t *old_options,
     53                                    struct or_options_t *options,
     54                                    char **msg);
     55 
     56 int options_validate_relay_padding(const struct or_options_t *old_options,
     57                                   struct or_options_t *options,
     58                                   char **msg);
     59 
     60 int options_validate_relay_bandwidth(const struct or_options_t *old_options,
     61                                     struct or_options_t *options,
     62                                     char **msg);
     63 
     64 int options_validate_relay_accounting(const struct or_options_t *old_options,
     65                                      struct or_options_t *options,
     66                                      char **msg);
     67 
     68 int options_validate_relay_testing(const struct or_options_t *old_options,
     69                                   struct or_options_t *options,
     70                                   char **msg);
     71 
     72 int options_act_relay(const struct or_options_t *old_options);
     73 int options_act_relay_accounting(const struct or_options_t *old_options);
     74 int options_act_relay_bandwidth(const struct or_options_t *old_options);
     75 int options_act_bridge_stats(const struct or_options_t *old_options);
     76 
     77 int options_act_relay_stats(const struct or_options_t *old_options,
     78                            bool *print_notice_out);
     79 void options_act_relay_stats_msg(void);
     80 
     81 int options_act_relay_desc(const struct or_options_t *old_options);
     82 int options_act_relay_dos(const struct or_options_t *old_options);
     83 int options_act_relay_dir(const struct or_options_t *old_options);
     84 
     85 #ifdef RELAY_CONFIG_PRIVATE
     86 
     87 STATIC void remove_duplicate_orports(struct smartlist_t *ports);
     88 STATIC int check_bridge_distribution_setting(const char *bd);
     89 STATIC int have_enough_mem_for_dircache(const struct or_options_t *options,
     90                                        size_t total_mem, char **msg);
     91 #ifdef TOR_UNIT_TESTS
     92 
     93 struct port_cfg_t;
     94 STATIC const char *describe_relay_port(const struct port_cfg_t *port);
     95 
     96 #endif /* defined(TOR_UNIT_TESTS) */
     97 
     98 #endif /* defined(RELAY_CONFIG_PRIVATE) */
     99 
    100 #else /* !defined(HAVE_MODULE_RELAY) */
    101 
    102 #include "lib/cc/compat_compiler.h"
    103 
    104 /** When tor is compiled with the relay module disabled, it can't be
    105 * configured as a relay or bridge.
    106 *
    107 * Always sets ClientOnly to 1.
    108 *
    109 * Returns -1 and sets msg to a newly allocated string, if ORPort, DirPort,
    110 * DirCache, or BridgeRelay are set in options. Otherwise returns 0. */
    111 static inline int
    112 options_validate_relay_mode(const struct or_options_t *old_options,
    113                            struct or_options_t *options,
    114                            char **msg)
    115 {
    116  (void)old_options;
    117 
    118  /* Only check the primary options for now, #29211 will disable more
    119   * options. These ORPort and DirPort checks are too strict, and will
    120   * reject valid configs that disable ports, like "ORPort 0". */
    121  if (options->DirCache ||
    122      options->BridgeRelay ||
    123      options->ORPort_lines ||
    124      options->DirPort_lines) {
    125    /* REJECT() this configuration */
    126    *msg = tor_strdup("This tor was built with relay mode disabled. "
    127                      "It can not be configured with an ORPort, a DirPort, "
    128                      "DirCache 1, or BridgeRelay 1.");
    129    return -1;
    130  }
    131 
    132  return 0;
    133 }
    134 
    135 static inline int
    136 port_parse_ports_relay(or_options_t *options,
    137                       char **msg,
    138                       smartlist_t *ports_out,
    139                       int *have_low_ports_out)
    140 {
    141  (void)options;
    142  (void)msg;
    143  (void)ports_out;
    144  if (*have_low_ports_out < 0)
    145    *have_low_ports_out = 0;
    146  return 0;
    147 }
    148 
    149 #define relay_get_dirportfrontpage() \
    150  (NULL)
    151 #define relay_config_free_all() \
    152  STMT_BEGIN STMT_END
    153 
    154 #define relay_get_effective_bwrate(options) \
    155  (((void)(options)),0)
    156 #define relay_get_effective_bwburst(options) \
    157  (((void)(options)),0)
    158 
    159 #define port_warn_nonlocal_ext_orports(ports, portname) \
    160  (((void)(ports)),((void)(portname)))
    161 
    162 #define port_update_port_set_relay(options, ports) \
    163  (((void)(options)),((void)(ports)))
    164 
    165 #define options_validate_relay_os(old_options, options, msg) \
    166  (((void)(old_options)),((void)(options)),((void)(msg)),0)
    167 #define options_validate_relay_info(old_options, options, msg) \
    168  (((void)(old_options)),((void)(options)),((void)(msg)),0)
    169 #define options_validate_publish_server(old_options, options, msg) \
    170  (((void)(old_options)),((void)(options)),((void)(msg)),0)
    171 #define options_validate_relay_padding(old_options, options, msg) \
    172  (((void)(old_options)),((void)(options)),((void)(msg)),0)
    173 #define options_validate_relay_bandwidth(old_options, options, msg) \
    174  (((void)(old_options)),((void)(options)),((void)(msg)),0)
    175 #define options_validate_relay_accounting(old_options, options, msg) \
    176  (((void)(old_options)),((void)(options)),((void)(msg)),0)
    177 #define options_validate_relay_testing(old_options, options, msg) \
    178  (((void)(old_options)),((void)(options)),((void)(msg)),0)
    179 
    180 #define options_act_relay(old_options) \
    181  (((void)(old_options)),0)
    182 #define options_act_relay_accounting(old_options) \
    183  (((void)(old_options)),0)
    184 #define options_act_relay_bandwidth(old_options) \
    185  (((void)(old_options)),0)
    186 #define options_act_bridge_stats(old_options) \
    187  (((void)(old_options)),0)
    188 
    189 #define options_act_relay_stats(old_options, print_notice_out) \
    190  (((void)(old_options)),((void)(print_notice_out)),0)
    191 #define options_act_relay_stats_msg() \
    192  STMT_BEGIN STMT_END
    193 
    194 #define options_act_relay_desc(old_options) \
    195  (((void)(old_options)),0)
    196 #define options_act_relay_dos(old_options) \
    197  (((void)(old_options)),0)
    198 #define options_act_relay_dir(old_options) \
    199  (((void)(old_options)),0)
    200 
    201 #endif /* defined(HAVE_MODULE_RELAY) */
    202 
    203 #endif /* !defined(TOR_FEATURE_RELAY_RELAY_CONFIG_H) */