Print this page
OS-4018 lxbrand support TCP SO_REUSEPORT
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Cody Mello <cody.mello@joyent.com>

*** 404,413 **** --- 404,429 ---- uint32_t tlc_cnt; int64_t tlc_report_time; uint32_t tlc_drop; } tcp_listen_cnt_t; + /* + * Track tcp_t entities bound to the same port/address tuple via SO_REUSEPORT. + * - tcprg_lock: Protects the other fields + * - tcprg_size: Allocated size (in entries) of tcprg_members array + * - tcprg_count: Count of occupied tcprg_members slots + * - tcprg_active: Count of members which still have SO_REUSEPORT set + * - tcprg_members: Connections associated with address/port group + */ + typedef struct tcp_rg_s { + kmutex_t tcprg_lock; + unsigned int tcprg_size; + unsigned int tcprg_count; + unsigned int tcprg_active; + tcp_t **tcprg_members; + } tcp_rg_t; + #define TCP_TLC_REPORT_INTERVAL (30 * MINUTES) #define TCP_DECR_LISTEN_CNT(tcp) \ { \ ASSERT((tcp)->tcp_listen_cnt->tlc_cnt > 0); \
*** 647,656 **** --- 663,676 ---- extern void tcp_bind_hash_remove(tcp_t *); extern in_port_t tcp_bindi(tcp_t *, in_port_t, const in6_addr_t *, int, boolean_t, boolean_t, boolean_t); extern in_port_t tcp_update_next_port(in_port_t, const tcp_t *, boolean_t); + extern tcp_rg_t *tcp_rg_init(tcp_t *); + extern boolean_t tcp_rg_remove(tcp_rg_t *, tcp_t *); + extern void tcp_rg_destroy(tcp_rg_t *); + extern void tcp_rg_setactive(tcp_rg_t *, boolean_t); /* * Fusion related functions in tcp_fusion.c. */ extern void tcp_fuse(tcp_t *, uchar_t *, tcpha_t *);