X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet.h;h=29839a29ee13b1b0e370031dd69b843186723c10;hp=df43197940ad51bcbeda9e55b26ef8122e64bab1;hb=116ba3b3da73fb857cf75b5c92c6aacd70d94dd9;hpb=2ac7be0d51a112108dc6c2b1c6f46da022f72f40 diff --git a/src/net.h b/src/net.h index df431979..29839a29 100644 --- a/src/net.h +++ b/src/net.h @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: net.h,v 1.9.4.42 2002/02/26 22:47:51 guus Exp $ + $Id: net.h,v 1.9.4.50 2002/06/08 12:57:09 guus Exp $ */ #ifndef __TINC_NET_H__ @@ -28,21 +28,34 @@ #include #include +#ifdef HAVE_STDINT_H + #include +#endif + #include "config.h" -#define MTU 1514 /* 1500 bytes payload + 14 bytes ethernet header */ -#define MAXSIZE 1600 /* MTU + header (seqno) and trailer (CBC padding and HMAC) */ +#ifdef ENABLE_JUMBOGRAMS + #define MTU 9014 /* 9000 bytes payload + 14 bytes ethernet header */ + #define MAXSIZE 9100 /* MTU + header (seqno) and trailer (CBC padding and HMAC) */ + #define MAXBUFSIZE 9100 /* Must support TCP packets of length 9000. */ +#else + #define MTU 1514 /* 1500 bytes payload + 14 bytes ethernet header */ + #define MAXSIZE 1600 /* MTU + header (seqno) and trailer (CBC padding and HMAC) */ + #define MAXBUFSIZE 2100 /* Quite large but needed for support of keys up to 8192 bits. */ +#endif + +#define MAXSOCKETS 128 /* Overkill... */ -#define MAXBUFSIZE 2048 /* Probably way too much, but it must fit every possible request. */ +#define MAXQUEUELENGTH 8 /* Maximum number of packats in a single queue */ typedef struct mac_t { - unsigned char x[6]; + uint8_t x[6]; } mac_t; typedef struct ipv4_t { - unsigned char x[4]; + uint8_t x[4]; } ipv4_t; typedef struct ip_mask_t { @@ -52,7 +65,7 @@ typedef struct ip_mask_t { typedef struct ipv6_t { - unsigned short x[8]; + uint16_t x[8]; } ipv6_t; typedef unsigned short port_t; @@ -73,8 +86,9 @@ typedef union { typedef struct vpn_packet_t { length_t len; /* the actual number of bytes in the `data' field */ - unsigned int seqno; /* 32 bits sequence number (network byte order of course) */ - unsigned char data[MAXSIZE]; + int priority; /* priority or TOS */ + uint32_t seqno; /* 32 bits sequence number (network byte order of course) */ + uint8_t data[MAXSIZE]; } vpn_packet_t; typedef struct queue_element_t { @@ -96,6 +110,12 @@ typedef struct outgoing_t { struct addrinfo *aip; } outgoing_t; +typedef struct listen_socket_t { + int tcp; + int udp; + sockaddr_t sa; +} listen_socket_t; + extern int maxtimeout; extern int seconds_till_retry; extern int addressfamily; @@ -105,19 +125,20 @@ extern char *status_text[]; #include "connection.h" /* Yes, very strange placement indeed, but otherwise the typedefs get all tangled up */ -extern int tcp_socket; -extern int udp_socket; +extern listen_socket_t listen_socket[MAXSOCKETS]; +extern int listen_sockets; extern int keyexpires; extern int keylifetime; extern int do_prune; extern int do_purge; extern char *myport; +extern time_t now; extern void retry_outgoing(outgoing_t *); -extern void handle_incoming_vpn_data(void); +extern void handle_incoming_vpn_data(int); extern void finish_connecting(connection_t *); extern void do_outgoing_connection(connection_t *); -extern int handle_new_meta_connection(void); +extern int handle_new_meta_connection(int); extern int setup_listen_socket(sockaddr_t *); extern int setup_vpn_in_socket(sockaddr_t *); extern void send_packet(struct node_t *, vpn_packet_t *);