af_packet: pass checksum validation status to the user
Introduce TP_STATUS_CSUM_VALID tp_status flag to tell the af_packet user that at least the transport header checksum has been already validated. For now, the flag may be set for incoming packets only. Signed-off-by: Alexander Drozdov <al.drozdov@gmail.com> Cc: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
68c2e5de36
commit
682f048bd4
@@ -1924,6 +1924,10 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL)
|
||||
status |= TP_STATUS_CSUMNOTREADY;
|
||||
else if (skb->pkt_type != PACKET_OUTGOING &&
|
||||
(skb->ip_summed == CHECKSUM_COMPLETE ||
|
||||
skb_csum_unnecessary(skb)))
|
||||
status |= TP_STATUS_CSUM_VALID;
|
||||
|
||||
if (snaplen > res)
|
||||
snaplen = res;
|
||||
@@ -3031,6 +3035,11 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
|
||||
aux.tp_status = TP_STATUS_USER;
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL)
|
||||
aux.tp_status |= TP_STATUS_CSUMNOTREADY;
|
||||
else if (skb->pkt_type != PACKET_OUTGOING &&
|
||||
(skb->ip_summed == CHECKSUM_COMPLETE ||
|
||||
skb_csum_unnecessary(skb)))
|
||||
aux.tp_status |= TP_STATUS_CSUM_VALID;
|
||||
|
||||
aux.tp_len = origlen;
|
||||
aux.tp_snaplen = skb->len;
|
||||
aux.tp_mac = 0;
|
||||
|
Reference in New Issue
Block a user