From: Chia-Yu Chang <[email protected]> No functional changes.
Co-developed-by: Ilpo Järvinen <[email protected]> Signed-off-by: Ilpo Järvinen <[email protected]> Signed-off-by: Chia-Yu Chang <[email protected]> --- include/linux/skbuff.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index e6bfe5d0c525..30a8dc4233ba 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -671,7 +671,13 @@ enum { /* This indicates the skb is from an untrusted source. */ SKB_GSO_DODGY = 1 << 1, - /* This indicates the tcp segment has CWR set. */ + /* For Tx, this indicates the first TCP segment has CWR set, and any + * subsequent segment in the same skb has CWR cleared. However, because + * the connection to which the segment belongs is not tracked to use + * RFC3168 or AccECN (RFC9768), and using RFC3168 ECN offload may clear + * ACE signal (CWR is one of it). Therefore, this cannot be used on Rx. + * Instead, SKB_GSO_TCP_ACCECN shall be used to avoid CWR corruption. + */ SKB_GSO_TCP_ECN = 1 << 2, __SKB_GSO_TCP_FIXEDID = 1 << 3, @@ -706,6 +712,14 @@ enum { SKB_GSO_FRAGLIST = 1 << 18, + /* For TX, this indicates the TCP segment uses the CWR flag as part of + * ACE signal, and the CWR flag is not modified in the skb. For RX, any + * CWR flagged segment must use SKB_GSO_TCP_ACCECN to ensure CWR flag + * is not cleared by any RFC3168 ECN offload, and thus keeping ACE + * signal of AccECN segments. This is particularly used for Rx of + * virtio_net driver in order to tell latter GSO Tx in a forwarding + * scenario that it is NOT ok to clean CWR flag from the 2nd segment. + */ SKB_GSO_TCP_ACCECN = 1 << 19, /* These indirectly map onto the same netdev feature. -- 2.34.1
