Date: Wed, 3 Feb 2010 04:58:08 +0000 (UTC) From: Lawrence Stewart <lstewart@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r203416 - in projects/tcp_cc_head/sys: conf modules/ertt net netinet Message-ID: <201002030458.o134w88Y082815@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: lstewart Date: Wed Feb 3 04:58:08 2010 New Revision: 203416 URL: http://svn.freebsd.org/changeset/base/203416 Log: Extremely rough proof of concept work to create a framework for allowing arbitrary helper functions to do "things" e.g. calculate a better RTT estimate (ertt = enhanced rtt) and store their data per TCP connection. Current approach using pfil is unsatisfactory, but wanted to commit it for posterity's sake. Added: projects/tcp_cc_head/sys/modules/ertt/ projects/tcp_cc_head/sys/modules/ertt/Makefile (contents, props changed) projects/tcp_cc_head/sys/netinet/ertt.c (contents, props changed) projects/tcp_cc_head/sys/netinet/tcp_helper.c (contents, props changed) projects/tcp_cc_head/sys/netinet/tcp_helper.h (contents, props changed) projects/tcp_cc_head/sys/netinet/tcp_helper_module.h (contents, props changed) Modified: projects/tcp_cc_head/sys/conf/files projects/tcp_cc_head/sys/net/pfil.h projects/tcp_cc_head/sys/netinet/tcp_input.c projects/tcp_cc_head/sys/netinet/tcp_subr.c projects/tcp_cc_head/sys/netinet/tcp_var.h Modified: projects/tcp_cc_head/sys/conf/files ============================================================================== --- projects/tcp_cc_head/sys/conf/files Wed Feb 3 04:09:36 2010 (r203415) +++ projects/tcp_cc_head/sys/conf/files Wed Feb 3 04:58:08 2010 (r203416) @@ -2485,6 +2485,7 @@ netinet/sctp_timer.c optional inet sctp netinet/sctp_usrreq.c optional inet sctp netinet/sctputil.c optional inet sctp netinet/tcp_debug.c optional tcpdebug +netinet/tcp_helper.c optional inet netinet/tcp_hostcache.c optional inet netinet/tcp_input.c optional inet netinet/tcp_lro.c optional inet Added: projects/tcp_cc_head/sys/modules/ertt/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/tcp_cc_head/sys/modules/ertt/Makefile Wed Feb 3 04:58:08 2010 (r203416) @@ -0,0 +1,10 @@ +# $FreeBSD$ + +.include <bsd.own.mk> + +.PATH: ${.CURDIR}/../../netinet +KMOD=hlpr_ertt +SRCS=ertt.c + +.include <bsd.kmod.mk> + Modified: projects/tcp_cc_head/sys/net/pfil.h ============================================================================== --- projects/tcp_cc_head/sys/net/pfil.h Wed Feb 3 04:09:36 2010 (r203415) +++ projects/tcp_cc_head/sys/net/pfil.h Wed Feb 3 04:58:08 2010 (r203416) @@ -63,6 +63,7 @@ typedef TAILQ_HEAD(pfil_list, packet_fil #define PFIL_TYPE_AF 1 /* key is AF_* type */ #define PFIL_TYPE_IFNET 2 /* key is ifnet pointer */ +#define PFIL_TYPE_TCP 3 /* see PFIL_TCP_* in netinet/tcp.h */ struct pfil_head { pfil_list_t ph_in; Added: projects/tcp_cc_head/sys/netinet/ertt.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/tcp_cc_head/sys/netinet/ertt.c Wed Feb 3 04:58:08 2010 (r203416) @@ -0,0 +1,119 @@ +/*- + * Copyright (c) 2009-2010 + * Swinburne University of Technology, Melbourne, Australia + * Copyright (c) 2010 Lawrence Stewart <lstewart@freebsd.org> + * All rights reserved. + * + * This software was developed at the Centre for Advanced Internet + * Architectures, Swinburne University, by David Hayes and Lawrence Stewart, + * made possible in part by a grant from the FreeBSD Foundation and + * Cisco University Research Program Fund at Community Foundation + * Silicon Valley. + * + * 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. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/kernel.h> +#include <sys/mbuf.h> +#include <sys/module.h> +#include <sys/socket.h> + +#include <net/if.h> +#include <net/pfil.h> + +#include <netinet/in.h> +#include <netinet/in_pcb.h> +#include <netinet/in_var.h> +#include <netinet/tcp_var.h> +#include <netinet/tcp_helper.h> +#include <netinet/tcp_helper_module.h> + +struct ertt { + int test; +}; + +int ertt_tcpest_hook(void *arg, struct mbuf **m, struct ifnet *ifp, int dir, + struct inpcb *inp); +int ertt_mod_init(void); +int ertt_mod_destroy(void); +int ertt_block_init(uintptr_t *block); +int ertt_block_destroy(uintptr_t *block); + +int +ertt_tcpest_hook(void *arg, struct mbuf **m, struct ifnet *ifp, int dir, struct inpcb *inp) +{ + struct ertt *e = (struct ertt *)(((struct tcpcb *)inp->inp_ppcb)->helper_data[0]); + //struct ertt *e = (struct ertt *)arg; + printf("In the hook with pkt: 0x%p, ertt->test = %d\n", *m, e->test++); + return (0); +} + + +int +ertt_mod_init(void) +{ + return pfil_add_hook(&ertt_tcpest_hook, NULL, PFIL_IN | PFIL_WAITOK, + pfil_head_get(PFIL_TYPE_TCP, PFIL_TCP_ESTABLISHED)); +} + +int +ertt_mod_destroy(void) +{ + return pfil_remove_hook(&ertt_tcpest_hook, NULL, PFIL_IN | PFIL_WAITOK, + pfil_head_get(PFIL_TYPE_TCP, PFIL_TCP_ESTABLISHED)); +} + +int +ertt_block_init(uintptr_t *block) +{ + *block = (uintptr_t)malloc(sizeof(struct ertt), M_HLPR, M_NOWAIT); + + ((struct ertt *)*block)->test = 5; + + printf("Malloced %ld bytes for ertt and set the value to %d\n", + sizeof(struct ertt), ((struct ertt *)*block)->test); + + return (0); +} + +int +ertt_block_destroy(uintptr_t *block) +{ + KASSERT(block != NULL, ("Block is NULL!")); + free((void *)*block, M_HLPR); + + return (0); +} + +struct helper ertt_helper = { + .mod_init = ertt_mod_init, + .mod_destroy = ertt_mod_destroy, + .block_init = ertt_block_init, + .block_destroy = ertt_block_destroy, + .flags = HLPR_NEEDS_DATABLOCK +}; + +DECLARE_HELPER(ertt, &ertt_helper); Added: projects/tcp_cc_head/sys/netinet/tcp_helper.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/tcp_cc_head/sys/netinet/tcp_helper.c Wed Feb 3 04:58:08 2010 (r203416) @@ -0,0 +1,161 @@ +/*- + * Copyright (c) 2010 Lawrence Stewart <lstewart@freebsd.org> + * All rights reserved. + * + * This software was developed at the Centre for Advanced Internet + * Architectures, Swinburne University, by Lawrence Stewart, + * made possible in part by a grant from the FreeBSD Foundation. + * + * 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. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/kernel.h> +#include <sys/malloc.h> +#include <sys/module.h> +#include <sys/queue.h> +#include <sys/systm.h> + +#include <netinet/tcp_helper.h> +#include <netinet/tcp_helper_module.h> + + +struct hlpr_head helpers = STAILQ_HEAD_INITIALIZER(helpers); +static int num_datablocks = 0; + + +int +init_datablocks(uintptr_t **array_head, int *nblocks) +{ + struct helper *h; + int i = 0; + + if(num_datablocks <= 0) + return (0); + + + *array_head = malloc(num_datablocks * sizeof(uintptr_t), M_HLPR, M_NOWAIT + | M_ZERO); + + printf("Malloced ptr %p for %d data blocks\n", *array_head, num_datablocks); + STAILQ_FOREACH(h, &helpers, entries) { + KASSERT(i < num_datablocks, ("Badness!\n")); + if (h->block_init != NULL) { + printf("Calling block_init(%p) for helper: %p\n", + (*array_head)+i, h); + h->block_init((*array_head)+i); + } + i++; + } + + *nblocks = num_datablocks; + + return (0); +} + +int +destroy_datablocks(uintptr_t **array_head, int nblocks) +{ + struct helper *h; + int i = 0; + //for (; nblocks >= 0; nblocks--) + // h->block_destroy(); + + STAILQ_FOREACH(h, &helpers, entries) { + if (h->block_destroy != NULL) { + printf("Calling block_destroy(%p) for helper: %p\n", + array_head[i], h); + h->block_destroy(array_head[i++]); + } + } + + return (0); +} + +int +register_helper(struct helper *h) +{ + /*for hooks in hlpr + register hlpr_callback for hook + + if !errorgt + h->dynamic_id = X + */ + printf("Register helper 0x%p\n", h); + + if (h->flags | HLPR_NEEDS_DATABLOCK) + num_datablocks++; + + STAILQ_INSERT_TAIL(&helpers, h, entries); + + return (0); +} + +int +deregister_helper(struct helper *h) +{ + printf("Deregister helper 0x%p\n", h); + + STAILQ_REMOVE(&helpers, h, helper, entries); + num_datablocks--; + return (0); +} + + + +/* + * Handles kld related events. Returns 0 on success, non-zero on failure. + */ +int +hlpr_modevent(module_t mod, int event_type, void *data) +{ + int error = 0; + struct helper *h = (struct helper *)data; + + switch(event_type) { + case MOD_LOAD: + if (h->mod_init != NULL) + error = h->mod_init(); + if (!error) + error = register_helper(h); + break; + + case MOD_QUIESCE: + error = deregister_helper(h); + if (!error && h->mod_destroy != NULL) + h->mod_destroy(); + break; + + case MOD_SHUTDOWN: + case MOD_UNLOAD: + break; + + default: + return EINVAL; + break; + } + + return (error); +} Added: projects/tcp_cc_head/sys/netinet/tcp_helper.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/tcp_cc_head/sys/netinet/tcp_helper.h Wed Feb 3 04:58:08 2010 (r203416) @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2010 Lawrence Stewart <lstewart@freebsd.org> + * All rights reserved. + * + * This software was developed at the Centre for Advanced Internet + * Architectures, Swinburne University, by Lawrence Stewart, + * made possible in part by a grant from the FreeBSD Foundation. + * + * 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. + * + * $FreeBSD$ + */ + +#ifndef _TCP_HELPER_H +#define _TCP_HELPER_H + + +struct helper { + /* Init global module state on kldload. */ + int (*mod_init) (void); + + /* Cleanup global module state on kldunload. */ + int (*mod_destroy) (void); + + int (*block_init) (uintptr_t *data); + int (*block_destroy) (uintptr_t *data); + + uint16_t flags; + + //STAILQ hooks; /* which hooks does this helper want to be called from */ + //STAILQ struct helper_data; + int dynamic_id; /* ID assigned by system to this hlpr's data in the + dynamic array */ + + + STAILQ_ENTRY(helper) entries; +}; + +/* Helper flags */ +#define HLPR_NEEDS_DATABLOCK 0x0001 + +extern STAILQ_HEAD(hlpr_head, helper) helpers; + +int init_datablocks(uintptr_t **array_head, int *nblocks); +int destroy_datablocks(uintptr_t **array_head, int nblocks); +int register_helper(struct helper *h); +int deregister_helper(struct helper *h); + +#endif /* _TCP_HELPER_H */ Added: projects/tcp_cc_head/sys/netinet/tcp_helper_module.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/tcp_cc_head/sys/netinet/tcp_helper_module.h Wed Feb 3 04:58:08 2010 (r203416) @@ -0,0 +1,51 @@ +/*- + * Copyright (c) 2010 Lawrence Stewart <lstewart@freebsd.org> + * All rights reserved. + * + * This software was developed at the Centre for Advanced Internet + * Architectures, Swinburne University, by Lawrence Stewart, + * made possible in part by a grant from the FreeBSD Foundation. + * + * 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. + * + * $FreeBSD$ + */ + +#ifndef _NETINET_TCP_HELPER_MODULE_H_ +#define _NETINET_TCP_HELPER_MODULE_H_ + +#define DECLARE_HELPER(hlprname, hlpr_data) \ + static moduledata_t hlpr_##hlprname = { \ + #hlprname, \ + hlpr_modevent, \ + hlpr_data \ + }; \ + DECLARE_MODULE(hlprname, hlpr_##hlprname, SI_SUB_PROTO_IFATTACHDOMAIN, \ + SI_ORDER_ANY) + +int hlpr_modevent(module_t mod, int type, void *data); + +MALLOC_DECLARE(M_HLPR); +MALLOC_DEFINE(M_HLPR, "helper data", "Blah"); + + +#endif Modified: projects/tcp_cc_head/sys/netinet/tcp_input.c ============================================================================== --- projects/tcp_cc_head/sys/netinet/tcp_input.c Wed Feb 3 04:09:36 2010 (r203415) +++ projects/tcp_cc_head/sys/netinet/tcp_input.c Wed Feb 3 04:58:08 2010 (r203416) @@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$"); #include <vm/uma.h> #include <net/if.h> +#include <net/pfil.h> #include <net/route.h> #include <net/vnet.h> @@ -2121,6 +2122,11 @@ tcp_do_segment(struct mbuf *m, struct tc ((to.to_flags & TOF_SACK) || !TAILQ_EMPTY(&tp->snd_holes))) tcp_sack_doack(tp, &to, th->th_ack); + + if (tp->nhelpers > 0 && PFIL_HOOKED(&V_tcpest_pfil_hook)) + pfil_run_hooks(&V_tcpest_pfil_hook, &m, NULL, PFIL_IN, + tp->t_inpcb); + if (SEQ_LEQ(th->th_ack, tp->snd_una)) { if (tlen == 0 && tiwin == tp->snd_wnd) { TCPSTAT_INC(tcps_rcvdupack); Modified: projects/tcp_cc_head/sys/netinet/tcp_subr.c ============================================================================== --- projects/tcp_cc_head/sys/netinet/tcp_subr.c Wed Feb 3 04:09:36 2010 (r203415) +++ projects/tcp_cc_head/sys/netinet/tcp_subr.c Wed Feb 3 04:58:08 2010 (r203416) @@ -62,6 +62,7 @@ __FBSDID("$FreeBSD$"); #include <net/route.h> #include <net/if.h> +#include <net/pfil.h> #include <net/vnet.h> #include <netinet/cc.h> @@ -84,6 +85,7 @@ __FBSDID("$FreeBSD$"); #endif #include <netinet/ip_icmp.h> #include <netinet/tcp_fsm.h> +#include <netinet/tcp_helper.h> #include <netinet/tcp_seq.h> #include <netinet/tcp_timer.h> #include <netinet/tcp_var.h> @@ -119,6 +121,7 @@ VNET_DEFINE(int, tcp_v6mssdflt); #endif VNET_DEFINE(int, tcp_minmss); VNET_DEFINE(int, tcp_do_rfc1323); +VNET_DEFINE(struct pfil_head, tcpest_pfil_hook); static VNET_DEFINE(int, icmp_may_rst); static VNET_DEFINE(int, tcp_isn_reseed_interval); @@ -376,6 +379,12 @@ tcp_init(void) V_tcp_inflight_rttthresh = TCPTV_INFLIGHT_RTTTHRESH; + V_tcpest_pfil_hook.ph_type = PFIL_TYPE_TCP; + V_tcpest_pfil_hook.ph_af = PFIL_TCP_ESTABLISHED; + + if(pfil_head_register(&V_tcpest_pfil_hook) != 0) + printf("%s: WARNING: unable to register pfil hook\n", __func__); + cc_init(); TUNABLE_INT_FETCH("net.inet.tcp.sack.enable", &V_tcp_do_sack); @@ -768,6 +777,11 @@ tcp_newtcpcb(struct inpcb *inp) return NULL; } + KASSERT(tp->helper_data == NULL, ("tp->hlpr_data NOT NULL!")); + init_datablocks(&tp->helper_data, &tp->nhelpers); + printf("tp->helper_data = %p, tp->nhelpers = %d\n", tp->helper_data, + tp->nhelpers); + #ifdef VIMAGE tp->t_vnet = inp->inp_vnet; #endif @@ -937,6 +951,8 @@ tcp_discardcb(struct tcpcb *tp) if (CC_ALGO(tp)->cb_destroy != NULL) CC_ALGO(tp)->cb_destroy(tp); + destroy_datablocks(&tp->helper_data, tp->nhelpers); + CC_ALGO(tp) = NULL; inp->inp_ppcb = NULL; tp->t_inpcb = NULL; Modified: projects/tcp_cc_head/sys/netinet/tcp_var.h ============================================================================== --- projects/tcp_cc_head/sys/netinet/tcp_var.h Wed Feb 3 04:09:36 2010 (r203415) +++ projects/tcp_cc_head/sys/netinet/tcp_var.h Wed Feb 3 04:58:08 2010 (r203416) @@ -44,9 +44,11 @@ VNET_DECLARE(int, tcp_do_rfc1323); VNET_DECLARE(int, tcp_reass_qsize); VNET_DECLARE(struct uma_zone *, tcp_reass_zone); +VNET_DECLARE(struct pfil_head, tcpest_pfil_hook); #define V_tcp_do_rfc1323 VNET(tcp_do_rfc1323) #define V_tcp_reass_qsize VNET(tcp_reass_qsize) #define V_tcp_reass_zone VNET(tcp_reass_zone) +#define V_tcpest_pfil_hook VNET(tcpest_pfil_hook) #endif /* _KERNEL */ @@ -204,6 +206,8 @@ struct tcpcb { uint64_t _pad[12]; /* 7 UTO, 5 TBD (1-2 CC/RTT?) */ struct cc_algo *cc_algo; /* the algorithm that will manage congestion control*/ void *cc_data; /* pointer to a struct containing data required for the cc algorithm in use */ + uintptr_t *helper_data; /* */ + int nhelpers; }; /* @@ -243,6 +247,12 @@ struct tcpcb { #define BYTES_ACKED(tp, th) (th->th_ack - tp->snd_una) /* + * TCP specific PFIL hook point identifiers + */ +#define PFIL_TCP_ALL 0 +#define PFIL_TCP_ESTABLISHED 1 + +/* * Flags for the t_oobflags field. */ #define TCPOOB_HAVEDATA 0x01
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002030458.o134w88Y082815>