mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-01 10:45:49 +00:00
packet: add TP_STATUS_GSO_TCP for tp_status
Introduce TP_STATUS_GSO_TCP tp_status flag to tell the af_packet user that this is a TCP GSO packet. When parsing IPv4 BIG TCP packets in tcpdump/libpcap, it can use tp_len as the IPv4 packet len when this flag is set, as iph tot_len is set to 0 for IPv4 BIG TCP packets. Signed-off-by: Xin Long <lucien.xin@gmail.com> Reviewed-by: David Ahern <dsahern@kernel.org> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
50e6fb5c6e
commit
8e08bb75b6
@ -115,6 +115,7 @@ struct tpacket_auxdata {
|
||||
#define TP_STATUS_BLK_TMO (1 << 5)
|
||||
#define TP_STATUS_VLAN_TPID_VALID (1 << 6) /* auxdata has valid tp_vlan_tpid */
|
||||
#define TP_STATUS_CSUM_VALID (1 << 7)
|
||||
#define TP_STATUS_GSO_TCP (1 << 8)
|
||||
|
||||
/* Tx ring - header status */
|
||||
#define TP_STATUS_AVAILABLE 0
|
||||
|
@ -2296,6 +2296,8 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
|
||||
else if (skb->pkt_type != PACKET_OUTGOING &&
|
||||
skb_csum_unnecessary(skb))
|
||||
status |= TP_STATUS_CSUM_VALID;
|
||||
if (skb_is_gso(skb) && skb_is_gso_tcp(skb))
|
||||
status |= TP_STATUS_GSO_TCP;
|
||||
|
||||
if (snaplen > res)
|
||||
snaplen = res;
|
||||
@ -3522,6 +3524,8 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
|
||||
else if (skb->pkt_type != PACKET_OUTGOING &&
|
||||
skb_csum_unnecessary(skb))
|
||||
aux.tp_status |= TP_STATUS_CSUM_VALID;
|
||||
if (skb_is_gso(skb) && skb_is_gso_tcp(skb))
|
||||
aux.tp_status |= TP_STATUS_GSO_TCP;
|
||||
|
||||
aux.tp_len = origlen;
|
||||
aux.tp_snaplen = skb->len;
|
||||
|
Loading…
Reference in New Issue
Block a user