diff options
Diffstat (limited to 'tcp.h')
-rw-r--r-- | tcp.h | 45 |
1 files changed, 32 insertions, 13 deletions
@@ -3,9 +3,12 @@ #define TCP_TIMER_INTERVAL 20 /* ms */ +#define TCP_MAX_CONNS (128 * 1024) +#define TCP_MAX_SOCKS (TCP_MAX_CONNS + USHRT_MAX * 2) + struct ctx; -void tcp_sock_handler(struct ctx *c, int s, uint32_t events, char *pkt_buf, +void tcp_sock_handler(struct ctx *c, union epoll_ref ref, uint32_t events, struct timespec *now); int tcp_tap_handler(struct ctx *c, int af, void *addr, struct tap_msg *msg, int count, struct timespec *now); @@ -13,24 +16,40 @@ int tcp_sock_init(struct ctx *c); void tcp_timer(struct ctx *c, struct timespec *ts); /** + * union tcp_epoll_ref - epoll reference portion for TCP connections + * @listen: Set if this file descriptor is a listening socket + * @splice: Set if descriptor is associated to a spliced connection + * @v6: Set for IPv6 sockets or connections + * @index: Index of connection in table, or port for bound sockets + * @u32: Opaque u32 value of reference + */ +union tcp_epoll_ref { + struct { + uint32_t listen:1, + splice:1, + v6:1, + index:20; + }; + uint32_t u32; +}; + +/** * struct tcp_ctx - Execution context for TCP routines * @hash_secret: 128-bit secret for hash functions, ISN and hash table - * @fd_min: Lowest file descriptor number for TCP ever used - * @fd_max: Highest file descriptor number for TCP ever used - * @fd_listen_min: Lowest file descriptor number for listening sockets - * @fd_listen_max: Highest file descriptor number for listening sockets - * @fd_conn_min: Lowest file descriptor number for connected sockets - * @fd_conn_max: Highest file descriptor number for connected sockets + * @tap_conn_count: Count of tap connections in connection table + * @splice_conn_count: Count of spliced connections in connection table + * @port_to_tap: Ports bound host/init-side, packets to guest/tap + * @port_to_init: Ports bound namespace-side, spliced to init + * @port_to_ns: Ports bound init-side, spliced to namespace * @timer_run: Timestamp of most recent timer run */ struct tcp_ctx { uint64_t hash_secret[2]; - int fd_min; - int fd_max; - int fd_listen_min; - int fd_listen_max; - int fd_conn_min; - int fd_conn_max; + int tap_conn_count; + int splice_conn_count; + uint8_t port_to_tap [USHRT_MAX / 8]; + uint8_t port_to_init [USHRT_MAX / 8]; + uint8_t port_to_ns [USHRT_MAX / 8]; struct timespec timer_run; }; |