|
8 | 8 | #define DEFINE_RST_REASON(FN, FNe) \ |
9 | 9 | FN(NOT_SPECIFIED) \ |
10 | 10 | FN(NO_SOCKET) \ |
| 11 | + FN(TCP_INVALID_ACK_SEQUENCE) \ |
| 12 | + FN(TCP_RFC7323_PAWS) \ |
| 13 | + FN(TCP_TOO_OLD_ACK) \ |
| 14 | + FN(TCP_ACK_UNSENT_DATA) \ |
| 15 | + FN(TCP_FLAGS) \ |
| 16 | + FN(TCP_OLD_ACK) \ |
| 17 | + FN(TCP_ABORT_ON_DATA) \ |
| 18 | + FN(TCP_TIMEWAIT_SOCKET) \ |
| 19 | + FN(INVALID_SYN) \ |
11 | 20 | FN(MPTCP_RST_EUNSPEC) \ |
12 | 21 | FN(MPTCP_RST_EMPTCP) \ |
13 | 22 | FN(MPTCP_RST_ERESOURCE) \ |
@@ -37,6 +46,44 @@ enum sk_rst_reason { |
37 | 46 | SK_RST_REASON_NOT_SPECIFIED, |
38 | 47 | /** @SK_RST_REASON_NO_SOCKET: no valid socket that can be used */ |
39 | 48 | SK_RST_REASON_NO_SOCKET, |
| 49 | + /** |
| 50 | + * @SK_RST_REASON_TCP_INVALID_ACK_SEQUENCE: Not acceptable ACK SEQ |
| 51 | + * field because ack sequence is not in the window between snd_una |
| 52 | + * and snd_nxt |
| 53 | + */ |
| 54 | + SK_RST_REASON_TCP_INVALID_ACK_SEQUENCE, |
| 55 | + /** |
| 56 | + * @SK_RST_REASON_TCP_RFC7323_PAWS: PAWS check, corresponding to |
| 57 | + * LINUX_MIB_PAWSESTABREJECTED, LINUX_MIB_PAWSACTIVEREJECTED |
| 58 | + */ |
| 59 | + SK_RST_REASON_TCP_RFC7323_PAWS, |
| 60 | + /** @SK_RST_REASON_TCP_TOO_OLD_ACK: TCP ACK is too old */ |
| 61 | + SK_RST_REASON_TCP_TOO_OLD_ACK, |
| 62 | + /** |
| 63 | + * @SK_RST_REASON_TCP_ACK_UNSENT_DATA: TCP ACK for data we haven't |
| 64 | + * sent yet |
| 65 | + */ |
| 66 | + SK_RST_REASON_TCP_ACK_UNSENT_DATA, |
| 67 | + /** @SK_RST_REASON_TCP_FLAGS: TCP flags invalid */ |
| 68 | + SK_RST_REASON_TCP_FLAGS, |
| 69 | + /** @SK_RST_REASON_TCP_OLD_ACK: TCP ACK is old, but in window */ |
| 70 | + SK_RST_REASON_TCP_OLD_ACK, |
| 71 | + /** |
| 72 | + * @SK_RST_REASON_TCP_ABORT_ON_DATA: abort on data |
| 73 | + * corresponding to LINUX_MIB_TCPABORTONDATA |
| 74 | + */ |
| 75 | + SK_RST_REASON_TCP_ABORT_ON_DATA, |
| 76 | + |
| 77 | + /* Here start with the independent reasons */ |
| 78 | + /** @SK_RST_REASON_TCP_TIMEWAIT_SOCKET: happen on the timewait socket */ |
| 79 | + SK_RST_REASON_TCP_TIMEWAIT_SOCKET, |
| 80 | + /** |
| 81 | + * @SK_RST_REASON_INVALID_SYN: receive bad syn packet |
| 82 | + * RFC 793 says if the state is not CLOSED/LISTEN/SYN-SENT then |
| 83 | + * "fourth, check the SYN bit,...If the SYN is in the window it is |
| 84 | + * an error, send a reset" |
| 85 | + */ |
| 86 | + SK_RST_REASON_INVALID_SYN, |
40 | 87 |
|
41 | 88 | /* Copy from include/uapi/linux/mptcp.h. |
42 | 89 | * These reset fields will not be changed since they adhere to |
@@ -113,6 +160,20 @@ sk_rst_convert_drop_reason(enum skb_drop_reason reason) |
113 | 160 | return SK_RST_REASON_NOT_SPECIFIED; |
114 | 161 | case SKB_DROP_REASON_NO_SOCKET: |
115 | 162 | return SK_RST_REASON_NO_SOCKET; |
| 163 | + case SKB_DROP_REASON_TCP_INVALID_ACK_SEQUENCE: |
| 164 | + return SK_RST_REASON_TCP_INVALID_ACK_SEQUENCE; |
| 165 | + case SKB_DROP_REASON_TCP_RFC7323_PAWS: |
| 166 | + return SK_RST_REASON_TCP_RFC7323_PAWS; |
| 167 | + case SKB_DROP_REASON_TCP_TOO_OLD_ACK: |
| 168 | + return SK_RST_REASON_TCP_TOO_OLD_ACK; |
| 169 | + case SKB_DROP_REASON_TCP_ACK_UNSENT_DATA: |
| 170 | + return SK_RST_REASON_TCP_ACK_UNSENT_DATA; |
| 171 | + case SKB_DROP_REASON_TCP_FLAGS: |
| 172 | + return SK_RST_REASON_TCP_FLAGS; |
| 173 | + case SKB_DROP_REASON_TCP_OLD_ACK: |
| 174 | + return SK_RST_REASON_TCP_OLD_ACK; |
| 175 | + case SKB_DROP_REASON_TCP_ABORT_ON_DATA: |
| 176 | + return SK_RST_REASON_TCP_ABORT_ON_DATA; |
116 | 177 | default: |
117 | 178 | /* If we don't have our own corresponding reason */ |
118 | 179 | return SK_RST_REASON_NOT_SPECIFIED; |
|
0 commit comments