113 lines
4.2 KiB
C
113 lines
4.2 KiB
C
/*
|
|
* Copyright (c) 2018, Sam Kumar <samkumar@cs.berkeley.edu>
|
|
* Copyright (c) 2018, University of California, Berkeley
|
|
* 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.
|
|
* 3. Neither the name of the copyright holder nor the
|
|
* names of its contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
|
|
*/
|
|
|
|
/*
|
|
* samkumar: I created this file to store many of the constants shared by the
|
|
* various files in the FreeBSD protocol logic. The original variables were
|
|
* often virtualized ("V_"-prefixed) variables. I've changed the definitions to
|
|
* be enumerations rather than globals, to save some memory. These variables
|
|
* often serve to enable, disable, or configure certain TCP-related features.
|
|
*/
|
|
|
|
#ifndef TCPLP_TCP_CONST_H_
|
|
#define TCPLP_TCP_CONST_H_
|
|
|
|
#include "../tcplp.h"
|
|
|
|
#include "tcp_var.h"
|
|
#include "tcp_timer.h"
|
|
|
|
/*
|
|
* samkumar: these are TCPlp-specific constants that I added. They were not
|
|
* present in the FreeBSD-derived code.
|
|
*/
|
|
|
|
#define FRAMES_PER_SEG 5
|
|
#define FRAMECAP_6LOWPAN (122 - 11 - 5)
|
|
#define IP6HDR_SIZE (2 + 1 + 1 + 16 + 16) // IPHC header (2) + Next header (1) + Hop count (1) + Dest. addr (16) + Src. addr (16)
|
|
#define MSS_6LOWPAN ((FRAMES_PER_SEG * FRAMECAP_6LOWPAN) - IP6HDR_SIZE - sizeof(struct tcphdr))
|
|
|
|
/*
|
|
* samkumar: The remaining constants were present in the original FreeBSD code,
|
|
* but I set their values.
|
|
*/
|
|
|
|
#define hz 1000 // number of ticks per second, assuming millisecond ticks
|
|
|
|
enum tcp_input_consts {
|
|
tcp_keepcnt = TCPTV_KEEPCNT,
|
|
tcp_fast_finwait2_recycle = 0,
|
|
tcprexmtthresh = 3,
|
|
V_drop_synfin = 0,
|
|
V_tcp_do_ecn = 1,
|
|
V_tcp_ecn_maxretries = 3,
|
|
V_tcp_do_rfc3042 = 1,
|
|
V_path_mtu_discovery = 0,
|
|
V_tcp_delack_enabled = 1,
|
|
V_tcp_initcwnd_segments = 0,
|
|
V_tcp_do_rfc3390 = 0,
|
|
V_tcp_abc_l_var = 2 // this is what was in the original tcp_input.c
|
|
};
|
|
|
|
enum tcp_subr_consts {
|
|
tcp_delacktime = TCPTV_DELACK,
|
|
tcp_keepinit = TCPTV_KEEP_INIT,
|
|
tcp_keepidle = TCPTV_KEEP_IDLE,
|
|
tcp_keepintvl = TCPTV_KEEPINTVL,
|
|
tcp_maxpersistidle = TCPTV_KEEP_IDLE,
|
|
tcp_msl = TCPTV_MSL,
|
|
tcp_rexmit_slop = TCPTV_CPU_VAR,
|
|
tcp_finwait2_timeout = TCPTV_FINWAIT2_TIMEOUT,
|
|
|
|
V_tcp_do_rfc1323 = 1,
|
|
V_tcp_v6mssdflt = MSS_6LOWPAN,
|
|
/* Normally, this is used to prevent DoS attacks by sending tiny MSS values in the options. */
|
|
V_tcp_minmss = TCP_MAXOLEN + 1, // Must have enough space for TCP options, and one more byte for data. Default is 216.
|
|
V_tcp_do_sack = 1
|
|
};
|
|
|
|
enum tcp_timer_consts {
|
|
// V_tcp_v6pmtud_blackhole_mss = FRAMECAP_6LOWPAN - sizeof(struct ip6_hdr) - sizeof(struct tcphdr), // Doesn't matter unless blackhole_detect is 1.
|
|
tcp_rexmit_drop_options = 0, // drop options after a few retransmits
|
|
always_keepalive = 1,
|
|
};
|
|
|
|
/*
|
|
* Force a time value to be in a certain range.
|
|
*/
|
|
#define TCPT_RANGESET(tv, value, tvmin, tvmax) do { \
|
|
(tv) = (value) + tcp_rexmit_slop; \
|
|
if ((uint64_t)(tv) < (uint64_t)(tvmin)) \
|
|
(tv) = (tvmin); \
|
|
if ((uint64_t)(tv) > (uint64_t)(tvmax)) \
|
|
(tv) = (tvmax); \
|
|
} while(0)
|
|
|
|
#endif
|