mirror of
https://github.com/ntop/n2n.git
synced 2024-04-21 16:31:34 +00:00
Update REGISTER_SUPER_ACK handling on edge (#478)
This commit is contained in:
+6
-4
@@ -199,11 +199,13 @@ struct peer_info {
|
||||
n2n_ip_subnet_t dev_addr;
|
||||
n2n_desc_t dev_desc;
|
||||
n2n_sock_t sock;
|
||||
n2n_cookie_t last_cookie;
|
||||
int timeout;
|
||||
uint8_t purgeable;
|
||||
time_t last_seen;
|
||||
time_t last_p2p;
|
||||
time_t last_sent_query;
|
||||
time_t ping_time;
|
||||
uint64_t last_valid_time_stamp;
|
||||
char *ip_addr;
|
||||
|
||||
@@ -271,7 +273,7 @@ typedef struct n2n_tuntap_priv_config {
|
||||
|
||||
|
||||
typedef struct n2n_edge_conf {
|
||||
n2n_sn_name_t sn_ip_array[N2N_EDGE_NUM_SUPERNODES];
|
||||
struct peer_info *supernodes; /**< List of supernodes */
|
||||
n2n_route_t *routes; /**< Networks to route through n2n */
|
||||
n2n_community_t community_name; /**< The community. 16 full octets. */
|
||||
n2n_desc_t dev_desc; /**< The device description (hint) */
|
||||
@@ -309,12 +311,11 @@ struct n2n_edge {
|
||||
n2n_edge_conf_t conf;
|
||||
|
||||
/* Status */
|
||||
uint8_t sn_idx; /**< Currently active supernode. */
|
||||
struct peer_info *curr_sn; /**< Currently active supernode. */
|
||||
uint8_t sn_wait; /**< Whether we are waiting for a supernode response. */
|
||||
size_t sup_attempts; /**< Number of remaining attempts to this supernode. */
|
||||
tuntap_dev device; /**< All about the TUNTAP device */
|
||||
n2n_trans_op_t transop; /**< The transop to use when encoding */
|
||||
n2n_cookie_t last_cookie; /**< Cookie sent in last REGISTER_SUPER. */
|
||||
n2n_route_t *sn_route_to_clean; /**< Supernode route to clean */
|
||||
n2n_edge_callbacks_t cb; /**< API callbacks */
|
||||
void *user_data; /**< Can hold user data */
|
||||
@@ -339,6 +340,7 @@ struct n2n_edge {
|
||||
time_t last_register_req; /**< Check if time to re-register with super*/
|
||||
time_t last_p2p; /**< Last time p2p traffic was received. */
|
||||
time_t last_sup; /**< Last time a packet arrived from supernode. */
|
||||
time_t last_sweep; /**< Last time a sweep was performed. */
|
||||
time_t start_time; /**< For calculating uptime */
|
||||
|
||||
|
||||
@@ -503,7 +505,7 @@ int comm_init(struct sn_community *comm, char *cmn);
|
||||
int sn_init(n2n_sn_t *sss);
|
||||
void sn_term(n2n_sn_t *sss);
|
||||
int supernode2sock(n2n_sock_t * sn, const n2n_sn_name_t addrIn);
|
||||
struct peer_info* add_sn_to_federation_by_mac_or_sock(n2n_sn_t *sss, n2n_sock_t *sock, n2n_mac_t *mac);
|
||||
struct peer_info* add_sn_to_list_by_mac_or_sock(struct peer_info **sn_list, n2n_sock_t *sock, n2n_mac_t *mac, int *skip_add);
|
||||
int run_sn_loop(n2n_sn_t *sss, int *keep_running);
|
||||
int assign_one_ip_subnet(n2n_sn_t *sss, struct sn_community *comm);
|
||||
const char* compression_str(uint8_t cmpr);
|
||||
|
||||
+15
-8
@@ -30,25 +30,29 @@
|
||||
#define MSG_TYPE_MAX_TYPE 10
|
||||
|
||||
/* Max available space to add supernodes' informations (sockets and MACs) in REGISTER_SUPER_ACK
|
||||
* Field sizes of REGISTER_SUPER_ACK as used in encode/decode fucntions in src/wire.c */
|
||||
* Field sizes of REGISTER_SUPER_ACK as used in encode/decode fucntions in src/wire.c
|
||||
* REVISIT: replace 255 by DEFAULT_MTU as soon as header encryption allows for longer packets to be encrypted. */
|
||||
#define MAX_AVAILABLE_SPACE_FOR_ENTRIES \
|
||||
DEFAULT_MTU-(1+1+2+sizeof(n2n_common_t)+sizeof(n2n_cookie_t)+sizeof(n2n_mac_t)+1+2+4+1+sizeof(n2n_sock_t)+1) \
|
||||
(255-(1+1+2+sizeof(n2n_common_t)+sizeof(n2n_cookie_t)+sizeof(n2n_mac_t)+1+2+4+1+sizeof(n2n_sock_t)+1)) \
|
||||
|
||||
/* Space needed to store socket and MAC address of a supernode */
|
||||
#define ENTRY_SIZE sizeof(n2n_sock_t)+sizeof(n2n_mac_t)
|
||||
#define ENTRY_SIZE (sizeof(n2n_sock_t)+sizeof(n2n_mac_t))
|
||||
|
||||
#define PURGE_REGISTRATION_FREQUENCY 30
|
||||
#define RE_REG_AND_PURGE_FREQUENCY 10
|
||||
#define REGISTRATION_TIMEOUT 60
|
||||
#define PURGE_FEDERATION_NODE_INTERVAL 90
|
||||
|
||||
#define SOCKET_TIMEOUT_INTERVAL_SECS 10
|
||||
#define REGISTER_SUPER_INTERVAL_DFL 20 /* sec, usually UDP NAT entries in a firewall expire after 30 seconds */
|
||||
#define ALLOWED_TIME 20 /* sec, indicates supernodes that are proven to be alive */
|
||||
#define TEST_TIME (PURGE_FEDERATION_NODE_INTERVAL - ALLOWED_TIME)/2 /* sec, indicates supernodes with unsure status, must be tested to check if they are alive */
|
||||
#define MAX_PING_TIME 3000 /* millisec, indicates default value for ping_time field in peer_info structure */
|
||||
#define SWEEP_TIME 30 /* sec, indicates the value after which we have to sort the hash list of supernodes in edges */
|
||||
|
||||
#define IFACE_UPDATE_INTERVAL (30) /* sec. How long it usually takes to get an IP lease. */
|
||||
#define TRANSOP_TICK_INTERVAL (10) /* sec */
|
||||
|
||||
#define PURGE_REGISTRATION_FREQUENCY 30
|
||||
#define REGISTRATION_TIMEOUT 60
|
||||
#define PURGE_FEDERATION_NODE_INTERVAL 90
|
||||
|
||||
#define SORT_COMMUNITIES_INTERVAL 90 /* sec. until supernode sorts communities' hash list again */
|
||||
|
||||
#define ETH_FRAMESIZE 14
|
||||
@@ -83,7 +87,7 @@ enum federation{IS_NO_FEDERATION = 0,IS_FEDERATION = 1};
|
||||
#define COMMUNITY_PURGEABLE 1
|
||||
|
||||
/* (un)purgeable supernode indicator */
|
||||
enum sn_purge{SN_UNPURGEABLE = 0, SN_PURGEABLE = 1};
|
||||
enum sn_purge{SN_PURGEABLE = 0, SN_UNPURGEABLE = 1};
|
||||
|
||||
/* Header encryption indicators */
|
||||
#define HEADER_ENCRYPTION_UNKNOWN 0
|
||||
@@ -103,6 +107,9 @@ enum sn_purge{SN_UNPURGEABLE = 0, SN_PURGEABLE = 1};
|
||||
#define N2N_EDGE_MGMT_PORT 5644
|
||||
#define N2N_SN_MGMT_PORT 5645
|
||||
|
||||
/* flag used in add_sn_to_list_by_mac_or_sock */
|
||||
enum skip_add{NO_SKIP = 0, SKIP = 1, ADDED = 2};
|
||||
|
||||
#define N2N_NETMASK_STR_SIZE 16 /* dotted decimal 12 numbers + 3 dots */
|
||||
#define N2N_MACNAMSIZ 18 /* AA:BB:CC:DD:EE:FF + NULL*/
|
||||
#define N2N_IF_MODE_SIZE 16 /* static | dhcp */
|
||||
|
||||
@@ -186,6 +186,7 @@ typedef struct n2n_REGISTER_SUPER_NAK
|
||||
|
||||
typedef struct n2n_PEER_INFO {
|
||||
uint16_t aflags;
|
||||
n2n_mac_t srcMac;
|
||||
n2n_mac_t mac;
|
||||
n2n_sock_t sock;
|
||||
} n2n_PEER_INFO_t;
|
||||
@@ -195,6 +196,7 @@ typedef struct n2n_QUERY_PEER
|
||||
{
|
||||
n2n_mac_t srcMac;
|
||||
n2n_mac_t targetMac;
|
||||
uint8_t req_data; /* data we want the supernode to send back in the answer's payload (e.g. 0 = no payload, 1 = number of connected nodes ...) */
|
||||
} n2n_QUERY_PEER_t;
|
||||
|
||||
typedef struct n2n_buf n2n_buf_t;
|
||||
|
||||
Reference in New Issue
Block a user