TCP cc/window management fixes and debugging
[vpp.git] / src / vnet / tcp / tcp_debug.h
index 5a71694..0090e15 100644 (file)
@@ -31,6 +31,7 @@
   _(UNBIND, "unbind")                  \
   _(DELETE, "delete")                  \
   _(SYN_SENT, "SYN sent")              \
+  _(SYN_RTX, "SYN retransmit")         \
   _(FIN_SENT, "FIN sent")              \
   _(ACK_SENT, "ACK sent")              \
   _(DUPACK_SENT, "DUPACK sent")                \
@@ -50,6 +51,7 @@
   _(CC_PACK, "cc partial ack")         \
   _(SEG_INVALID, "invalid segment")    \
   _(ACK_RCV_ERR, "invalid ack")                \
+  _(RCV_WND_SHRUNK, "shrunk rcv_wnd")  \
 
 typedef enum _tcp_dbg
 {
@@ -159,35 +161,48 @@ typedef enum _tcp_dbg_evt
 {                                                                      \
   ELOG_TYPE_DECLARE (_e) =                                             \
   {                                                                    \
-    .format = "ack_prep: acked %u rcv_nxt %u rcv_wnd %u snd_nxt %u",   \
-    .format_args = "i4i4i4i4",                                         \
+    .format = "ack_tx: acked %u rcv_nxt %u rcv_wnd %u snd_nxt %u snd_wnd %u",\
+    .format_args = "i4i4i4i4i4",                                       \
   };                                                                   \
-  DECLARE_ETD(_tc, _e, 4);                                             \
+  DECLARE_ETD(_tc, _e, 5);                                             \
   ed->data[0] = _tc->rcv_nxt - _tc->rcv_las;                           \
   ed->data[1] = _tc->rcv_nxt - _tc->irs;                               \
   ed->data[2] = _tc->rcv_wnd;                                          \
   ed->data[3] = _tc->snd_nxt - _tc->iss;                               \
+  ed->data[4] = _tc->snd_wnd;                                          \
 }
 
 #define TCP_EVT_DUPACK_SENT_HANDLER(_tc, ...)                          \
 {                                                                      \
   ELOG_TYPE_DECLARE (_e) =                                             \
   {                                                                    \
-    .format = "dack_tx: rcv_nxt %u rcv_wnd %u snd_nxt %u av-wnd %u",   \
-    .format_args = "i4i4i4i4",                                         \
+    .format = "dack_tx: rcv_nxt %u rcv_wnd %u snd_nxt %u av_wnd %u snd_wnd %u",\
+    .format_args = "i4i4i4i4i4",                                       \
   };                                                                   \
-  DECLARE_ETD(_tc, _e, 4);                                             \
+  DECLARE_ETD(_tc, _e, 5);                                             \
   ed->data[0] = _tc->rcv_nxt - _tc->irs;                               \
   ed->data[1] = _tc->rcv_wnd;                                          \
   ed->data[2] = _tc->snd_nxt - _tc->iss;                               \
   ed->data[3] = tcp_available_wnd(_tc);                                        \
+  ed->data[4] = _tc->snd_wnd;                                          \
 }
 
 #define TCP_EVT_SYN_SENT_HANDLER(_tc, ...)                             \
 {                                                                      \
   ELOG_TYPE_DECLARE (_e) =                                             \
   {                                                                    \
-    .format = "SYNtx: iss %u",                                 \
+    .format = "SYNtx: iss %u",                                         \
+    .format_args = "i4",                                               \
+  };                                                                   \
+  DECLARE_ETD(_tc, _e, 1);                                             \
+  ed->data[0] = _tc->iss;                                              \
+}
+
+#define TCP_EVT_SYN_RTX_HANDLER(_tc, ...)                              \
+{                                                                      \
+  ELOG_TYPE_DECLARE (_e) =                                             \
+  {                                                                    \
+    .format = "SYNrtx: iss %u",                                                \
     .format_args = "i4",                                               \
   };                                                                   \
   DECLARE_ETD(_tc, _e, 1);                                             \
@@ -254,17 +269,17 @@ typedef enum _tcp_dbg_evt
   ed->data[1] = _tc->rcv_nxt - _tc->irs;                               \
 }
 
-#define TCP_EVT_ACK_RCVD_HANDLER(_tc, _ack, ...)                       \
+#define TCP_EVT_ACK_RCVD_HANDLER(_tc, ...)                             \
 {                                                                      \
   ELOG_TYPE_DECLARE (_e) =                                             \
   {                                                                    \
-    .format = "acked: %u snd_una %u ack %u cwnd %u inflight %u",       \
+    .format = "acked: %u snd_una %u snd_wnd %u cwnd %u inflight %u",   \
     .format_args = "i4i4i4i4i4",                                       \
   };                                                                   \
   DECLARE_ETD(_tc, _e, 5);                                             \
   ed->data[0] = _tc->bytes_acked;                                      \
   ed->data[1] = _tc->snd_una - _tc->iss;                               \
-  ed->data[2] = _ack - _tc->iss;                                       \
+  ed->data[2] = _tc->snd_wnd;                                          \
   ed->data[3] = _tc->cwnd;                                             \
   ed->data[4] = tcp_flight_size(_tc);                                  \
 }
@@ -273,14 +288,15 @@ typedef enum _tcp_dbg_evt
 {                                                                      \
   ELOG_TYPE_DECLARE (_e) =                                             \
   {                                                                    \
-    .format = "dack_rx: snd_una %u cwnd %u snd_wnd %u inflight %u",    \
-    .format_args = "i4i4i4i4",                                         \
+    .format = "dack_rx: snd_una %u cwnd %u snd_wnd %u flight %u rcv_wnd %u",\
+    .format_args = "i4i4i4i4i4",                                       \
   };                                                                   \
-  DECLARE_ETD(_tc, _e, 4);                                             \
+  DECLARE_ETD(_tc, _e, 5);                                             \
   ed->data[0] = _tc->snd_una - _tc->iss;                               \
   ed->data[1] = _tc->cwnd;                                             \
   ed->data[2] = _tc->snd_wnd;                                          \
   ed->data[3] = tcp_flight_size(_tc);                                  \
+  ed->data[4] = _tc->rcv_wnd;                                          \
 }
 
 #define TCP_EVT_PKTIZE_HANDLER(_tc, ...)                               \
@@ -302,7 +318,7 @@ typedef enum _tcp_dbg_evt
 {                                                                      \
   ELOG_TYPE_DECLARE (_e) =                                             \
   {                                                                    \
-    .format = "in: %s len %u written %d rcv_nxt %u free wnd %d",       \
+    .format = "in: %s len %u written %d rcv_nxt %u rcv_wnd(o) %d",     \
     .format_args = "t4i4i4i4i4",                                       \
     .n_enum_strings = 2,                                               \
     .enum_strings = {                                                  \
@@ -338,7 +354,7 @@ typedef enum _tcp_dbg_evt
     .enum_strings = {                                                  \
       "retransmit",                                                    \
       "delack",                                                        \
-      "BUG",                                                           \
+      "persist",                                                       \
       "keep",                                                          \
       "waitclose",                                                     \
       "retransmit syn",                                                \
@@ -354,7 +370,7 @@ typedef enum _tcp_dbg_evt
 {                                                                      \
   ELOG_TYPE_DECLARE (_e) =                                             \
   {                                                                    \
-    .format = "seg-inv: seq %u end %u rcv_las %u rcv_nxt %u wnd %u",   \
+    .format = "seg-inv: seq %u end %u rcv_las %u rcv_nxt %u rcv_wnd %u",\
     .format_args = "i4i4i4i4i4",                                       \
   };                                                                   \
   DECLARE_ETD(_tc, _e, 5);                                             \
@@ -445,6 +461,24 @@ typedef enum _tcp_dbg_evt
 #define TCP_EVT_CC_PACK_HANDLER(_tc, ...)
 #endif
 
+#define TCP_EVT_RCV_WND_SHRUNK_HANDLER(_tc, _obs, _av, ...)            \
+{                                                                      \
+if (_av > 0)                                                           \
+{                                                                      \
+  ELOG_TYPE_DECLARE (_e) =                                             \
+  {                                                                    \
+    .format = "huh?: rcv_wnd %u obsd %u av %u rcv_nxt %u rcv_las %u",  \
+    .format_args = "i4i4i4i4i4",                                       \
+  };                                                                   \
+  DECLARE_ETD(_tc, _e, 5);                                             \
+  ed->data[0] = _tc->rcv_wnd;                                          \
+  ed->data[1] = _obs;                                                  \
+  ed->data[2] = _av;                                                   \
+  ed->data[3] = _tc->rcv_nxt - _tc->irs;                               \
+  ed->data[4] = _tc->rcv_las - _tc->irs;                               \
+}                                                                      \
+}
+
 #if TCP_DBG_VERBOSE
 #define TCP_EVT_SND_WND_HANDLER(_tc, ...)                              \
 {                                                                      \