]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/netinet/tcp_hostcache.h
Implement pci_enable_msi() and pci_disable_msi() in the LinuxKPI.
[FreeBSD/FreeBSD.git] / sys / netinet / tcp_hostcache.h
1 /*-
2  * SPDX-License-Identifier: BSD-3-Clause
3  *
4  * Copyright (c) 2002 Andre Oppermann, Internet Business Solutions AG
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. The name of the author may not be used to endorse or promote
16  *    products derived from this software without specific prior written
17  *    permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  * $FreeBSD$
32  */
33
34 /*
35  * Many thanks to jlemon for basic structure of tcp_syncache which is being
36  * followed here.
37  */
38
39 #ifndef _NETINET_TCP_HOSTCACHE_H_
40 #define _NETINET_TCP_HOSTCACHE_H_
41
42 TAILQ_HEAD(hc_qhead, hc_metrics);
43
44 struct hc_head {
45         struct hc_qhead hch_bucket;
46         u_int           hch_length;
47         struct mtx      hch_mtx;
48 };
49
50 struct hc_metrics {
51         /* housekeeping */
52         TAILQ_ENTRY(hc_metrics) rmx_q;
53         struct          hc_head *rmx_head; /* head of bucket tail queue */
54         struct          in_addr ip4;    /* IP address */
55         struct          in6_addr ip6;   /* IP6 address */
56         uint32_t        ip6_zoneid;     /* IPv6 scope zone id */
57         /* endpoint specific values for tcp */
58         uint32_t        rmx_mtu;        /* MTU for this path */
59         uint32_t        rmx_ssthresh;   /* outbound gateway buffer limit */
60         uint32_t        rmx_rtt;        /* estimated round trip time */
61         uint32_t        rmx_rttvar;     /* estimated rtt variance */
62         uint32_t        rmx_cwnd;       /* congestion window */
63         uint32_t        rmx_sendpipe;   /* outbound delay-bandwidth product */
64         uint32_t        rmx_recvpipe;   /* inbound delay-bandwidth product */
65         /* TCP hostcache internal data */
66         int             rmx_expire;     /* lifetime for object */
67         u_long          rmx_hits;       /* number of hits */
68         u_long          rmx_updates;    /* number of updates */
69 };
70
71 struct tcp_hostcache {
72         struct  hc_head *hashbase;
73         uma_zone_t zone;
74         u_int   hashsize;
75         u_int   hashmask;
76         u_int   bucket_limit;
77         u_int   cache_count;
78         u_int   cache_limit;
79         int     expire;
80         int     prune;
81         int     purgeall;
82 };
83
84 #endif /* !_NETINET_TCP_HOSTCACHE_H_*/