From: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
To: Tom Herbert <therbert@google.com>, netdev@vger.kernel.org
Cc: davem@davemloft.net, YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Subject: Re: [PATCH net-next 6/6] net: Implmement RFC 6936 (zero RX csums for UDP/IPv6)
Date: Tue, 08 Apr 2014 03:48:39 +0900 [thread overview]
Message-ID: <5342F307.6020407@linux-ipv6.org> (raw)
In-Reply-To: <alpine.DEB.2.02.1404041720560.21339@tomh.mtv.corp.google.com>
Tom Herbert wrote:
> RFC 6936 relaxes the requirement of RFC 2460 that UDP/IPv6 packets which
> are received with a zero UDP checksum value must be dropped. RFC 6936
> allow zero checksums to support tunnels over UDP.
>
> This patch adds a new socket option UDP_CHECK6_ZERO_OKAY whcih can be
> set on a UDP socket to indicate that a zero checksum is acceptable
> (e.g. the socket is for a tunnel). The ip6 checksum and UDP receive
> functions were updated accordingly to deal with this.
>
> Signed-off-by: Tom Herbert <therbert@google.com>
> ---
> include/linux/udp.h | 3 ++-
> include/uapi/linux/udp.h | 1 +
> net/ipv4/udp.c | 8 ++++++++
> net/ipv6/ip6_checksum.c | 19 ++++++++-----------
> net/ipv6/udp.c | 39 +++++++++++++++++++++++++++++++++++++--
> 5 files changed, 56 insertions(+), 14 deletions(-)
>
> diff --git a/include/linux/udp.h b/include/linux/udp.h
> index 42278bb..647ffc9 100644
> --- a/include/linux/udp.h
> +++ b/include/linux/udp.h
> @@ -779,6 +791,19 @@ static int __udp6_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
> dif = inet6_iif(skb);
> sk = udp_v6_mcast_next(net, sk, uh->dest, daddr, uh->source, saddr, dif);
> while (sk) {
> + if (!uh->check && !udp_sk(sk)->check6_zero_okay) {
> + /*
> + * If checksum in packet is zero and not all the
> + * sockets accept a zero checksum then declare
> + * a checksum error.
> + */
> + flush_stack(stack, count, skb, ~0);
> + count = 0;
> + udp6_csum_zero_error(skb);
> + UDP6_INC_STATS_BH(net, UDP_MIB_CSUMERRORS, proto == IPPROTO_UDPLITE);
> + UDP6_INC_STATS_BH(net, UDP_MIB_INERRORS, proto == IPPROTO_UDPLITE);
> + break;
> + }
> stack[count++] = sk;
> sk = udp_v6_mcast_next(net, sk_nulls_next(sk), uh->dest, daddr,
> uh->source, saddr, dif);
This seems wrong; packets with zero-checksum will not be delivered to
some sockets if some of sockets accept zero-checksums and others do not.
BTW, I have been thinking that we should introduce 4 options
(or bits) for IPv4/IPv6 checksumming for sender/receiver.
--yoshfuji
next prev parent reply other threads:[~2014-04-07 18:48 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-05 0:28 [PATCH net-next 6/6] net: Implmement RFC 6936 (zero RX csums for UDP/IPv6) Tom Herbert
2014-04-05 21:56 ` Tom Herbert
2014-04-07 17:16 ` David Miller
2014-04-07 17:25 ` Eric Dumazet
2014-04-07 20:44 ` Tom Herbert
2014-04-07 18:48 ` YOSHIFUJI Hideaki [this message]
2014-04-07 20:53 ` Tom Herbert
2014-04-08 1:17 ` YOSHIFUJI Hideaki
2014-04-08 15:47 ` Tom Herbert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5342F307.6020407@linux-ipv6.org \
--to=yoshfuji@linux-ipv6.org \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=therbert@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.