1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * NET Generic infrastructure for Network protocols. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Authors: Arnaldo Carvalho de Melo <acme@conectiva.com.br> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun #ifndef _TIMEWAIT_SOCK_H 8*4882a593Smuzhiyun #define _TIMEWAIT_SOCK_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <linux/slab.h> 11*4882a593Smuzhiyun #include <linux/bug.h> 12*4882a593Smuzhiyun #include <net/sock.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun struct timewait_sock_ops { 15*4882a593Smuzhiyun struct kmem_cache *twsk_slab; 16*4882a593Smuzhiyun char *twsk_slab_name; 17*4882a593Smuzhiyun unsigned int twsk_obj_size; 18*4882a593Smuzhiyun int (*twsk_unique)(struct sock *sk, 19*4882a593Smuzhiyun struct sock *sktw, void *twp); 20*4882a593Smuzhiyun void (*twsk_destructor)(struct sock *sk); 21*4882a593Smuzhiyun }; 22*4882a593Smuzhiyun twsk_unique(struct sock * sk,struct sock * sktw,void * twp)23*4882a593Smuzhiyunstatic inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp) 24*4882a593Smuzhiyun { 25*4882a593Smuzhiyun if (sk->sk_prot->twsk_prot->twsk_unique != NULL) 26*4882a593Smuzhiyun return sk->sk_prot->twsk_prot->twsk_unique(sk, sktw, twp); 27*4882a593Smuzhiyun return 0; 28*4882a593Smuzhiyun } 29*4882a593Smuzhiyun twsk_destructor(struct sock * sk)30*4882a593Smuzhiyunstatic inline void twsk_destructor(struct sock *sk) 31*4882a593Smuzhiyun { 32*4882a593Smuzhiyun if (sk->sk_prot->twsk_prot->twsk_destructor != NULL) 33*4882a593Smuzhiyun sk->sk_prot->twsk_prot->twsk_destructor(sk); 34*4882a593Smuzhiyun } 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #endif /* _TIMEWAIT_SOCK_H */ 37