Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
VPP-659 TCP improvements
[vpp.git]
/
src
/
vnet
/
tcp
/
tcp.h
diff --git
a/src/vnet/tcp/tcp.h
b/src/vnet/tcp/tcp.h
index
22f00a6
..
3b3d8fc
100644
(file)
--- a/
src/vnet/tcp/tcp.h
+++ b/
src/vnet/tcp/tcp.h
@@
-30,7
+30,8
@@
#define TCP_MAX_OPTION_SPACE 40
#define TCP_DUPACK_THRESHOLD 3
#define TCP_MAX_OPTION_SPACE 40
#define TCP_DUPACK_THRESHOLD 3
-#define TCP_DEFAULT_RX_FIFO_SIZE 64 << 10
+#define TCP_MAX_RX_FIFO_SIZE 2 << 20
+#define TCP_IW_N_SEGMENTS 10
/** TCP FSM state definitions as per RFC793. */
#define foreach_tcp_fsm_state \
/** TCP FSM state definitions as per RFC793. */
#define foreach_tcp_fsm_state \
@@
-62,8
+63,8
@@
format_function_t format_tcp_state;
_(DELACK, "DELAYED ACK") \
_(PERSIST, "PERSIST") \
_(KEEP, "KEEP") \
_(DELACK, "DELAYED ACK") \
_(PERSIST, "PERSIST") \
_(KEEP, "KEEP") \
- _(
2MSL, "2MSL")
\
- _(RETRANSMIT_SYN, "RETRANSMIT
_
SYN") \
+ _(
WAITCLOSE, "WAIT CLOSE")
\
+ _(RETRANSMIT_SYN, "RETRANSMIT
SYN") \
_(ESTABLISH, "ESTABLISH")
typedef enum _tcp_timers
_(ESTABLISH, "ESTABLISH")
typedef enum _tcp_timers
@@
-88,6
+89,8
@@
extern timer_expiration_handler tcp_timer_retransmit_syn_handler;
#define TCP_DELACK_TIME 1 /* 0.1s */
#define TCP_ESTABLISH_TIME 750 /* 75s */
#define TCP_2MSL_TIME 300 /* 30s */
#define TCP_DELACK_TIME 1 /* 0.1s */
#define TCP_ESTABLISH_TIME 750 /* 75s */
#define TCP_2MSL_TIME 300 /* 30s */
+#define TCP_CLOSEWAIT_TIME 1 /* 0.1s */
+#define TCP_CLEANUP_TIME 5 /* 0.5s Time to wait before cleanup */
#define TCP_RTO_MAX 60 * THZ /* Min max RTO (60s) as per RFC6298 */
#define TCP_RTT_MAX 30 * THZ /* 30s (probably too much) */
#define TCP_RTO_MAX 60 * THZ /* Min max RTO (60s) as per RFC6298 */
#define TCP_RTT_MAX 30 * THZ /* 30s (probably too much) */
@@
-101,6
+104,7
@@
void tcp_update_time (f64 now, u32 thread_index);
_(DELACK, "Delay ACK") \
_(SNDACK, "Send ACK") \
_(BURSTACK, "Burst ACK set") \
_(DELACK, "Delay ACK") \
_(SNDACK, "Send ACK") \
_(BURSTACK, "Burst ACK set") \
+ _(FINSNT, "FIN sent") \
_(SENT_RCV_WND0, "Sent 0 receive window") \
_(RECOVERY, "Recovery on") \
_(FAST_RECOVERY, "Fast Recovery on")
_(SENT_RCV_WND0, "Sent 0 receive window") \
_(RECOVERY, "Recovery on") \
_(FAST_RECOVERY, "Fast Recovery on")
@@
-303,6
+307,9
@@
typedef struct _tcp_main
/* Congestion control algorithms registered */
tcp_cc_algorithm_t *cc_algos;
/* Congestion control algorithms registered */
tcp_cc_algorithm_t *cc_algos;
+ /* Flag that indicates if stack is on or off */
+ u8 is_enabled;
+
/* convenience */
vlib_main_t *vlib_main;
vnet_main_t *vnet_main;
/* convenience */
vlib_main_t *vlib_main;
vnet_main_t *vnet_main;
@@
-322,9
+329,13
@@
vnet_get_tcp_main ()
return &tcp_main;
}
return &tcp_main;
}
+clib_error_t *vnet_tcp_enable_disable (vlib_main_t * vm, u8 is_en);
+
always_inline tcp_connection_t *
tcp_connection_get (u32 conn_index, u32 thread_index)
{
always_inline tcp_connection_t *
tcp_connection_get (u32 conn_index, u32 thread_index)
{
+ if (pool_is_free_index (tcp_main.connections[thread_index], conn_index))
+ return 0;
return pool_elt_at_index (tcp_main.connections[thread_index], conn_index);
}
return pool_elt_at_index (tcp_main.connections[thread_index], conn_index);
}
@@
-341,6
+352,7
@@
tcp_connection_get_if_valid (u32 conn_index, u32 thread_index)
void tcp_connection_close (tcp_connection_t * tc);
void tcp_connection_cleanup (tcp_connection_t * tc);
void tcp_connection_del (tcp_connection_t * tc);
void tcp_connection_close (tcp_connection_t * tc);
void tcp_connection_cleanup (tcp_connection_t * tc);
void tcp_connection_del (tcp_connection_t * tc);
+void tcp_connection_reset (tcp_connection_t * tc);
always_inline tcp_connection_t *
tcp_listener_get (u32 tli)
always_inline tcp_connection_t *
tcp_listener_get (u32 tli)
@@
-355,7
+367,7
@@
tcp_half_open_connection_get (u32 conn_index)
}
void tcp_make_ack (tcp_connection_t * ts, vlib_buffer_t * b);
}
void tcp_make_ack (tcp_connection_t * ts, vlib_buffer_t * b);
-void tcp_make_fin
ack
(tcp_connection_t * tc, vlib_buffer_t * b);
+void tcp_make_fin (tcp_connection_t * tc, vlib_buffer_t * b);
void tcp_make_synack (tcp_connection_t * ts, vlib_buffer_t * b);
void tcp_send_reset (vlib_buffer_t * pkt, u8 is_ip4);
void tcp_send_syn (tcp_connection_t * tc);
void tcp_make_synack (tcp_connection_t * ts, vlib_buffer_t * b);
void tcp_send_reset (vlib_buffer_t * pkt, u8 is_ip4);
void tcp_send_syn (tcp_connection_t * tc);
@@
-461,7
+473,7
@@
tcp_timer_set (tcp_connection_t * tc, u8 timer_id, u32 interval)
}
always_inline void
}
always_inline void
-tcp_retransmit_timer_set (tcp_
main_t * tm, tcp_
connection_t * tc)
+tcp_retransmit_timer_set (tcp_connection_t * tc)
{
/* XXX Switch to faster TW */
tcp_timer_set (tc, TCP_TIMER_RETRANSMIT,
{
/* XXX Switch to faster TW */
tcp_timer_set (tc, TCP_TIMER_RETRANSMIT,
@@
-590,7
+602,6
@@
vlib_buffer_push_tcp_net_order (vlib_buffer_t * b, u16 sp, u16 dp, u32 seq,
/**
* Push TCP header to buffer
*
/**
* Push TCP header to buffer
*
- * @param vm - vlib_main
* @param b - buffer to write the header to
* @param sp_net - source port net order
* @param dp_net - destination port net order
* @param b - buffer to write the header to
* @param sp_net - source port net order
* @param dp_net - destination port net order