summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
f1af580)
This is necessary to permit multiple addresses of multiple address
families. We (arbitrarily) set the default limit to 3.
Abolish the MAX_MOBILE_PEERS_MAX constant and size the peer addresses
array by MAX_PEER_ADDRS directly.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
their contact addresses might both change at once. [false]
mobile-peers-max (integer): Maximum number of peer port/addr pairs we
remember and send to. Must be at least 1 and no more than 5. [3]
their contact addresses might both change at once. [false]
mobile-peers-max (integer): Maximum number of peer port/addr pairs we
remember and send to. Must be at least 1 and no more than 5. [3]
+ static-peers-max (integer): Maximum number of peer port/addr pairs
+ we can try for a static site. Must be at least 1 and no more
+ than 5. [3]
mobile-peer-expiry (integer): For "mobile" peers only, the length
of time (in seconds) for which we will keep sending to multiple
address/ports from which we have not seen incoming traffic. [120]
mobile-peer-expiry (integer): For "mobile" peers only, the length
of time (in seconds) for which we will keep sending to multiple
address/ports from which we have not seen incoming traffic. [120]
#define DEFAULT_MOBILE_PEER_EXPIRY (2*60) /* [s] */
#define DEFAULT_MOBILE_PEERS_MAX 3 /* send at most this many copies (default) */
#define DEFAULT_MOBILE_PEER_EXPIRY (2*60) /* [s] */
#define DEFAULT_MOBILE_PEERS_MAX 3 /* send at most this many copies (default) */
+#define DEFAULT_STATIC_PEERS_MAX 3 /* retain at most this many peer addresses */
/* Each site can be in one of several possible states. */
/* Each site can be in one of several possible states. */
-#define MAX_MOBILE_PEERS_MAX MAX_PEER_ADDRS /* send at most this many copies */
-
typedef struct {
struct timeval last;
struct comm_addr addr;
typedef struct {
struct timeval last;
struct comm_addr addr;
/* configuration information */
/* runtime information */
int npeers;
/* configuration information */
/* runtime information */
int npeers;
- transport_peer peers[MAX_MOBILE_PEERS_MAX];
+ transport_peer peers[MAX_PEER_ADDRS];
} transport_peers;
/* Basic operations on transport peer address sets */
} transport_peers;
/* Basic operations on transport peer address sets */
st->mobile_peer_expiry= dict_read_number(
dict,"mobile-peer-expiry",False,"site",loc,DEFAULT_MOBILE_PEER_EXPIRY);
st->mobile_peer_expiry= dict_read_number(
dict,"mobile-peer-expiry",False,"site",loc,DEFAULT_MOBILE_PEER_EXPIRY);
- st->transport_peers_max= !st->peer_mobile ? 1 : dict_read_number(
- dict,"mobile-peers-max",False,"site",loc,DEFAULT_MOBILE_PEERS_MAX);
+ const char *peerskey= st->peer_mobile
+ ? "mobile-peers-max" : "static-peers-max";
+ st->transport_peers_max= dict_read_number(
+ dict,peerskey,False,"site",loc,DEFAULT_MOBILE_PEERS_MAX);
if (st->transport_peers_max<1 ||
if (st->transport_peers_max<1 ||
- st->transport_peers_max>=MAX_MOBILE_PEERS_MAX) {
- cfgfatal(loc,"site","mobile-peers-max must be in range 1.."
- STRING(MAX_MOBILE_PEERS_MAX) "\n");
+ st->transport_peers_max>=MAX_PEER_ADDRS) {
+ cfgfatal(loc,"site", "%s must be in range 1.."
+ STRING(MAX_PEER_ADDRS) "\n", peerskey);
}
if (st->key_lifetime < DEFAULT(KEY_RENEGOTIATE_GAP)*2)
}
if (st->key_lifetime < DEFAULT(KEY_RENEGOTIATE_GAP)*2)
incoming_packet_addr ? " incoming packet address;" : "",
st->peers.npeers);
incoming_packet_addr ? " incoming packet address;" : "",
st->peers.npeers);
- /* Non-mobile peers have st->peers.npeers==0 or ==1, since they
- * have transport_peers_max==1. The effect is that this code
- * always uses the configured address if supplied, or otherwise
- * the address of the incoming PROD, or the existing data peer if
- * one exists; this is as desired. */
+ /* Non-mobile peers try addresses until one is plausible. The
+ * effect is that this code always tries first the configured
+ * address if supplied, or otherwise the address of the incoming
+ * PROD, or finally the existing data peer if one exists; this is
+ * as desired. */
transport_peers_copy(st,&st->setup_peers,&st->peers);
transport_peers_expire(st,&st->setup_peers);
transport_peers_copy(st,&st->setup_peers,&st->peers);
transport_peers_expire(st,&st->setup_peers);
int slot;
transport_peers_expire(st, peers);
unsigned failed=0; /* bitmask */
int slot;
transport_peers_expire(st, peers);
unsigned failed=0; /* bitmask */
- assert(MAX_MOBILE_PEERS_MAX < sizeof(unsigned)*CHAR_BIT);
+ assert(MAX_PEER_ADDRS < sizeof(unsigned)*CHAR_BIT);
int nfailed=0;
for (slot=0; slot<peers->npeers; slot++) {
int nfailed=0;
for (slot=0; slot<peers->npeers; slot++) {