mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-14 22:32:30 +01:00
d62c4607e8
These KPIs were added in dd0e6c383a
and through 15 years had zero use.
They slightly remind what IfAPI does for struct ifnet. But IfAPI does
that for the sake of large collection of NIC drivers not being aware of
struct ifnet. For the sockets it is unclear what could be a large
collection of externally written kernel modules that need extensively use
sockets and not be aware of their internals at the same time. This
isolation of a structure knowledge requires a lot of work, and just
throwing in a few KPIs isn't helpful.
Reviewed by: kib, olce, markj
Differential Revision: https://reviews.freebsd.org/D44311
143 lines
4.0 KiB
C
143 lines
4.0 KiB
C
/*-
|
|
* Copyright (c) 2015-2017 Patrick Kelsey
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef _TCP_FASTOPEN_H_
|
|
#define _TCP_FASTOPEN_H_
|
|
|
|
#ifdef _KERNEL
|
|
|
|
#include "opt_inet.h"
|
|
|
|
#define TCP_FASTOPEN_COOKIE_LEN 8 /* SipHash24 64-bit output */
|
|
|
|
#ifdef TCP_RFC7413
|
|
VNET_DECLARE(unsigned int, tcp_fastopen_client_enable);
|
|
#define V_tcp_fastopen_client_enable VNET(tcp_fastopen_client_enable)
|
|
|
|
VNET_DECLARE(unsigned int, tcp_fastopen_server_enable);
|
|
#define V_tcp_fastopen_server_enable VNET(tcp_fastopen_server_enable)
|
|
#else
|
|
#define V_tcp_fastopen_client_enable 0
|
|
#define V_tcp_fastopen_server_enable 0
|
|
#endif /* TCP_RFC7413 */
|
|
|
|
union tcp_fastopen_ip_addr {
|
|
struct in_addr v4;
|
|
struct in6_addr v6;
|
|
};
|
|
|
|
struct tcp_fastopen_ccache_entry {
|
|
TAILQ_ENTRY(tcp_fastopen_ccache_entry) cce_link;
|
|
union tcp_fastopen_ip_addr cce_client_ip; /* network byte order */
|
|
union tcp_fastopen_ip_addr cce_server_ip; /* network byte order */
|
|
uint16_t server_port; /* network byte order */
|
|
uint16_t server_mss; /* host byte order */
|
|
uint8_t af;
|
|
uint8_t cookie_len;
|
|
uint8_t cookie[TCP_FASTOPEN_MAX_COOKIE_LEN];
|
|
sbintime_t disable_time; /* non-zero value means path is disabled */
|
|
};
|
|
|
|
struct tcp_fastopen_ccache;
|
|
|
|
struct tcp_fastopen_ccache_bucket {
|
|
struct mtx ccb_mtx;
|
|
TAILQ_HEAD(bucket_entries, tcp_fastopen_ccache_entry) ccb_entries;
|
|
int ccb_num_entries;
|
|
struct tcp_fastopen_ccache *ccb_ccache;
|
|
};
|
|
|
|
struct tcp_fastopen_ccache {
|
|
uma_zone_t zone;
|
|
struct tcp_fastopen_ccache_bucket *base;
|
|
unsigned int bucket_limit;
|
|
unsigned int buckets;
|
|
unsigned int mask;
|
|
uint32_t secret;
|
|
};
|
|
|
|
struct tcpcb;
|
|
#ifdef TCP_RFC7413
|
|
void tcp_fastopen_init(void);
|
|
void tcp_fastopen_destroy(void);
|
|
unsigned int *tcp_fastopen_alloc_counter(void);
|
|
void tcp_fastopen_decrement_counter(unsigned int *);
|
|
int tcp_fastopen_check_cookie(struct in_conninfo *, uint8_t *, unsigned int,
|
|
uint64_t *);
|
|
void tcp_fastopen_connect(struct tcpcb *);
|
|
void tcp_fastopen_disable_path(struct tcpcb *);
|
|
void tcp_fastopen_update_cache(struct tcpcb *, uint16_t, uint8_t,
|
|
uint8_t *);
|
|
#else
|
|
static __inline void
|
|
tcp_fastopen_init(void)
|
|
{
|
|
}
|
|
|
|
static __inline void
|
|
tcp_fastopen_destroy(void)
|
|
{
|
|
}
|
|
|
|
static __inline unsigned int *
|
|
tcp_fastopen_alloc_counter(void)
|
|
{
|
|
return (NULL);
|
|
}
|
|
|
|
static __inline void
|
|
tcp_fastopen_decrement_counter(unsigned int *_counter)
|
|
{
|
|
}
|
|
|
|
static __inline int
|
|
tcp_fastopen_check_cookie(struct in_conninfo *_inc, uint8_t *_cookie,
|
|
unsigned int _len, uint64_t *_latest_cookie)
|
|
{
|
|
return (-1);
|
|
}
|
|
|
|
static __inline void
|
|
tcp_fastopen_connect(struct tcpcb *_tp)
|
|
{
|
|
}
|
|
|
|
static __inline void
|
|
tcp_fastopen_disable_path(struct tcpcb *_tp)
|
|
{
|
|
}
|
|
|
|
static __inline void
|
|
tcp_fastopen_update_cache(struct tcpcb *_tp, uint16_t _mss, uint8_t _cookie_len,
|
|
uint8_t *_cookie)
|
|
{
|
|
}
|
|
#endif /* TCP_RFC7413 */
|
|
|
|
#endif /* _KERNEL */
|
|
|
|
#endif /* _TCP_FASTOPEN_H_ */
|