+ u_int32_t tcps_sack_recovery_episode; /* SACK recovery episodes */
+ u_int32_t tcps_sack_rexmits; /* SACK rexmit segments */
+ u_int32_t tcps_sack_rexmit_bytes; /* SACK rexmit bytes */
+ u_int32_t tcps_sack_rcv_blocks; /* SACK blocks (options) received */
+ u_int32_t tcps_sack_send_blocks; /* SACK blocks (options) sent */
+ u_int32_t tcps_sack_sboverflow; /* SACK sendblock overflow */
+
+ u_int32_t tcps_bg_rcvtotal; /* total background packets received */
+ u_int32_t tcps_rxtfindrop; /* drop conn after retransmitting FIN */
+ u_int32_t tcps_fcholdpacket; /* packets withheld because of flow control */
+
+ /* LRO related stats */
+ u_int32_t tcps_coalesced_pack; /* number of coalesced packets */
+ u_int32_t tcps_flowtbl_full; /* times flow table was full */
+ u_int32_t tcps_flowtbl_collision; /* collisions in flow tbl */
+ u_int32_t tcps_lro_twopack; /* 2 packets coalesced */
+ u_int32_t tcps_lro_multpack; /* 3 or 4 pkts coalesced */
+ u_int32_t tcps_lro_largepack; /* 5 or more pkts coalesced */
+
+ u_int32_t tcps_limited_txt; /* Limited transmit used */
+ u_int32_t tcps_early_rexmt; /* Early retransmit used */
+ u_int32_t tcps_sack_ackadv; /* Cumulative ack advanced along with sack */
+
+ /* Checksum related stats */
+ u_int32_t tcps_rcv_swcsum; /* tcp swcksum (inbound), packets */
+ u_int32_t tcps_rcv_swcsum_bytes; /* tcp swcksum (inbound), bytes */
+ u_int32_t tcps_rcv6_swcsum; /* tcp6 swcksum (inbound), packets */
+ u_int32_t tcps_rcv6_swcsum_bytes; /* tcp6 swcksum (inbound), bytes */
+ u_int32_t tcps_snd_swcsum; /* tcp swcksum (outbound), packets */
+ u_int32_t tcps_snd_swcsum_bytes; /* tcp swcksum (outbound), bytes */
+ u_int32_t tcps_snd6_swcsum; /* tcp6 swcksum (outbound), packets */
+ u_int32_t tcps_snd6_swcsum_bytes; /* tcp6 swcksum (outbound), bytes */
+ u_int32_t tcps_msg_unopkts; /* unordered packet on TCP msg stream */
+ u_int32_t tcps_msg_unoappendfail; /* failed to append unordered pkt */
+ u_int32_t tcps_msg_sndwaithipri; /* send is waiting for high priority data */
+
+ /* MPTCP Related stats */
+ u_int32_t tcps_invalid_mpcap; /* Invalid MPTCP capable opts */
+ u_int32_t tcps_invalid_joins; /* Invalid MPTCP joins */
+ u_int32_t tcps_mpcap_fallback; /* TCP fallback in primary */
+ u_int32_t tcps_join_fallback; /* No MPTCP in secondary */
+ u_int32_t tcps_estab_fallback; /* DSS option dropped */
+ u_int32_t tcps_invalid_opt; /* Catchall error stat */
+ u_int32_t tcps_mp_outofwin; /* Packet lies outside the
+ * shared recv window */
+ u_int32_t tcps_mp_reducedwin; /* Reduced subflow window */
+ u_int32_t tcps_mp_badcsum; /* Bad DSS csum */
+ u_int32_t tcps_mp_oodata; /* Out of order data */
+ u_int32_t tcps_mp_switches; /* number of subflow switch */
+ u_int32_t tcps_mp_rcvtotal; /* number of rcvd packets */
+ u_int32_t tcps_mp_rcvbytes; /* number of bytes received */
+ u_int32_t tcps_mp_sndpacks; /* number of data packs sent */
+ u_int32_t tcps_mp_sndbytes; /* number of bytes sent */
+ u_int32_t tcps_join_rxmts; /* join ack retransmits */
+ u_int32_t tcps_tailloss_rto; /* RTO due to tail loss */
+ u_int32_t tcps_reordered_pkts; /* packets reorderd */
+ u_int32_t tcps_recovered_pkts; /* recovered after loss */
+ u_int32_t tcps_pto; /* probe timeout */
+ u_int32_t tcps_rto_after_pto; /* RTO after a probe */
+ u_int32_t tcps_tlp_recovery; /* TLP induced fast recovery */
+ u_int32_t tcps_tlp_recoverlastpkt; /* TLP recoverd last pkt */
+ u_int32_t tcps_ecn_client_success; /* client-side connection negotiated ECN */
+ u_int32_t tcps_ecn_recv_ece; /* ECE received, sent CWR */
+ u_int32_t tcps_ecn_sent_ece; /* Sent ECE notification */
+ u_int32_t tcps_detect_reordering; /* Detect pkt reordering */
+ u_int32_t tcps_delay_recovery; /* Delay fast recovery */
+ u_int32_t tcps_avoid_rxmt; /* Retransmission was avoided */
+ u_int32_t tcps_unnecessary_rxmt; /* Retransmission was not needed */
+ u_int32_t tcps_nostretchack; /* disabled stretch ack algorithm on a connection */
+ u_int32_t tcps_rescue_rxmt; /* SACK rescue retransmit */
+ u_int32_t tcps_pto_in_recovery; /* rescue retransmit in fast recovery */
+ u_int32_t tcps_pmtudbh_reverted; /* PMTU Blackhole detection, segment size reverted */
+
+ /* DSACK related statistics */
+ u_int32_t tcps_dsack_disable; /* DSACK disabled due to n/w duplication */
+ u_int32_t tcps_dsack_ackloss; /* ignore DSACK due to ack loss */
+ u_int32_t tcps_dsack_badrexmt; /* DSACK based bad rexmt recovery */
+ u_int32_t tcps_dsack_sent; /* Sent DSACK notification */
+ u_int32_t tcps_dsack_recvd; /* Received a valid DSACK option */
+ u_int32_t tcps_dsack_recvd_old; /* Received an out of window DSACK option */
+
+ /* MPTCP Subflow selection stats */
+ u_int32_t tcps_mp_sel_symtomsd; /* By symptomsd */
+ u_int32_t tcps_mp_sel_rtt; /* By RTT comparison */
+ u_int32_t tcps_mp_sel_rto; /* By RTO comparison */
+ u_int32_t tcps_mp_sel_peer; /* By peer's output pattern */
+ u_int32_t tcps_mp_num_probes; /* Number of probes sent */
+ u_int32_t tcps_mp_verdowngrade; /* MPTCP version downgrade */
+ u_int32_t tcps_drop_after_sleep; /* drop after long AP sleep */
+ u_int32_t tcps_probe_if; /* probe packets after interface availability */
+ u_int32_t tcps_probe_if_conflict; /* Can't send probe packets for interface */
+
+ u_int32_t tcps_ecn_client_setup; /* Attempted ECN setup from client side */
+ u_int32_t tcps_ecn_server_setup; /* Attempted ECN setup from server side */
+ u_int32_t tcps_ecn_server_success; /* server-side connection negotiated ECN */
+ u_int32_t tcps_ecn_lost_synack; /* Lost SYN-ACK with ECN setup */
+ u_int32_t tcps_ecn_lost_syn; /* Lost SYN with ECN setup */
+ u_int32_t tcps_ecn_not_supported; /* Server did not support ECN setup */
+ u_int32_t tcps_ecn_recv_ce; /* Received CE from the network */
+ u_int32_t tcps_ecn_conn_recv_ce; /* Number of connections received CE atleast once */
+ u_int32_t tcps_ecn_conn_recv_ece; /* Number of connections received ECE atleast once */
+ u_int32_t tcps_ecn_conn_plnoce; /* Number of connections that received no CE and sufferred packet loss */
+ u_int32_t tcps_ecn_conn_pl_ce; /* Number of connections that received CE and sufferred packet loss */
+ u_int32_t tcps_ecn_conn_nopl_ce; /* Number of connections that received CE and sufferred no packet loss */
+ u_int32_t tcps_ecn_fallback_synloss; /* Number of times we did fall back due to SYN-Loss */
+ u_int32_t tcps_ecn_fallback_reorder; /* Number of times we fallback because we detected the PAWS-issue */
+ u_int32_t tcps_ecn_fallback_ce; /* Number of times we fallback because we received too many CEs */
+
+ /* TFO-related statistics */
+ u_int32_t tcps_tfo_syn_data_rcv; /* Received a SYN+data with valid cookie */
+ u_int32_t tcps_tfo_cookie_req_rcv;/* Received a TFO cookie-request */
+ u_int32_t tcps_tfo_cookie_sent; /* Offered a TFO-cookie to the client */
+ u_int32_t tcps_tfo_cookie_invalid;/* Received an invalid TFO-cookie */
+ u_int32_t tcps_tfo_cookie_req; /* Cookie requested with the SYN */
+ u_int32_t tcps_tfo_cookie_rcv; /* Cookie received in a SYN/ACK */
+ u_int32_t tcps_tfo_syn_data_sent; /* SYN+data+cookie sent */
+ u_int32_t tcps_tfo_syn_data_acked;/* SYN+data has been acknowledged */
+ u_int32_t tcps_tfo_syn_loss; /* SYN+TFO has been lost and we fallback */
+ u_int32_t tcps_tfo_blackhole; /* TFO got blackholed by a middlebox. */
+ u_int32_t tcps_tfo_cookie_wrong; /* TFO-cookie we sent was wrong */
+ u_int32_t tcps_tfo_no_cookie_rcv; /* We asked for a cookie but didn't get one */
+ u_int32_t tcps_tfo_heuristics_disable; /* TFO got disabled due to heuristics */
+ u_int32_t tcps_tfo_sndblackhole; /* TFO got blackholed in the sending direction */
+ u_int32_t tcps_mss_to_default; /* Change MSS to default using link status report */
+ u_int32_t tcps_mss_to_medium; /* Change MSS to medium using link status report */
+ u_int32_t tcps_mss_to_low; /* Change MSS to low using link status report */
+ u_int32_t tcps_ecn_fallback_droprst; /* ECN fallback caused by connection drop due to RST */
+ u_int32_t tcps_ecn_fallback_droprxmt; /* ECN fallback due to drop after multiple retransmits */
+ u_int32_t tcps_ecn_fallback_synrst; /* ECN fallback due to rst after syn */
+
+ u_int32_t tcps_mptcp_rcvmemdrop; /* MPTCP packets dropped for lack of memory */
+ u_int32_t tcps_mptcp_rcvduppack; /* MPTCP duplicate-only packets received */
+ u_int32_t tcps_mptcp_rcvpackafterwin; /* MPTCP packets with data after window */
+
+ /* TCP timer statistics */
+ u_int32_t tcps_timer_drift_le_1_ms; /* Timer drift less or equal to 1 ms */
+ u_int32_t tcps_timer_drift_le_10_ms; /* Timer drift less or equal to 10 ms */
+ u_int32_t tcps_timer_drift_le_20_ms; /* Timer drift less or equal to 20 ms */
+ u_int32_t tcps_timer_drift_le_50_ms; /* Timer drift less or equal to 50 ms */
+ u_int32_t tcps_timer_drift_le_100_ms; /* Timer drift less or equal to 100 ms */
+ u_int32_t tcps_timer_drift_le_200_ms; /* Timer drift less or equal to 200 ms */
+ u_int32_t tcps_timer_drift_le_500_ms; /* Timer drift less or equal to 500 ms */
+ u_int32_t tcps_timer_drift_le_1000_ms; /* Timer drift less or equal to 1000 ms */
+ u_int32_t tcps_timer_drift_gt_1000_ms; /* Timer drift greater than 1000 ms */
+
+ u_int32_t tcps_mptcp_handover_attempt; /* Total number of MPTCP-attempts using handover mode */
+ u_int32_t tcps_mptcp_interactive_attempt; /* Total number of MPTCP-attempts using interactive mode */
+ u_int32_t tcps_mptcp_aggregate_attempt; /* Total number of MPTCP-attempts using aggregate mode */
+ u_int32_t tcps_mptcp_fp_handover_attempt; /* Same as previous three but only for first-party apps */
+ u_int32_t tcps_mptcp_fp_interactive_attempt;
+ u_int32_t tcps_mptcp_fp_aggregate_attempt;
+ u_int32_t tcps_mptcp_heuristic_fallback; /* Total number of MPTCP-connections that fell back due to heuristics */
+ u_int32_t tcps_mptcp_fp_heuristic_fallback; /* Same as previous but for first-party apps */
+ u_int32_t tcps_mptcp_handover_success_wifi; /* Total number of successfull handover-mode connections that *started* on WiFi */
+ u_int32_t tcps_mptcp_handover_success_cell; /* Total number of successfull handover-mode connections that *started* on Cell */
+ u_int32_t tcps_mptcp_interactive_success; /* Total number of interactive-mode connections that negotiated MPTCP */
+ u_int32_t tcps_mptcp_aggregate_success; /* Same as previous but for aggregate */
+ u_int32_t tcps_mptcp_fp_handover_success_wifi; /* Same as previous four, but for first-party apps */
+ u_int32_t tcps_mptcp_fp_handover_success_cell;
+ u_int32_t tcps_mptcp_fp_interactive_success;
+ u_int32_t tcps_mptcp_fp_aggregate_success;
+ u_int32_t tcps_mptcp_handover_cell_from_wifi; /* Total number of connections that use cell in handover-mode (coming from WiFi) */
+ u_int32_t tcps_mptcp_handover_wifi_from_cell; /* Total number of connections that use WiFi in handover-mode (coming from cell) */
+ u_int32_t tcps_mptcp_interactive_cell_from_wifi; /* Total number of connections that use cell in interactive mode (coming from WiFi) */
+ u_int64_t tcps_mptcp_handover_cell_bytes; /* Total number of bytes sent on cell in handover-mode (on new subflows, ignoring initial one) */
+ u_int64_t tcps_mptcp_interactive_cell_bytes; /* Same as previous but for interactive */
+ u_int64_t tcps_mptcp_aggregate_cell_bytes;
+ u_int64_t tcps_mptcp_handover_all_bytes; /* Total number of bytes sent in handover */
+ u_int64_t tcps_mptcp_interactive_all_bytes;
+ u_int64_t tcps_mptcp_aggregate_all_bytes;
+ u_int32_t tcps_mptcp_back_to_wifi; /* Total number of connections that succeed to move traffic away from cell (when starting on cell) */
+ u_int32_t tcps_mptcp_wifi_proxy; /* Total number of new subflows that fell back to regular TCP on cell */
+ u_int32_t tcps_mptcp_cell_proxy; /* Total number of new subflows that fell back to regular TCP on WiFi */
+
+ /* TCP offload statistics */
+ u_int32_t tcps_ka_offload_drops; /* Keep alive drops for timeout reported by firmware */
+
+ u_int32_t tcps_mptcp_triggered_cell; /* Total number of times an MPTCP-connection triggered cell bringup */
+};
+