Date: Thu, 5 Nov 2015 16:16:02 +0100 From: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com> To: Larry Baird <lab@gta.com>, <freebsd-xen@freebsd.org> Cc: <alans@spectralogic.com>, <johns@spectralogic.com>, <ken@FreeBSD.org> Subject: Re: Checksum forwarding issue on XEN Message-ID: <563B72B2.6060308@citrix.com> In-Reply-To: <20151103201250.GA92469@gta.com> References: <20151103201250.GA92469@gta.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Hello, Adding the persons that contributed that code in case they can shed some light. El 03/11/15 a les 21.12, Larry Baird ha escrit: > Has anybody made any progress on "Bug 188261 - [xen] FreeBSD DomU PVHVM > guests cannot 'route' traffic for other Xen PV guests on same Dom0 Host." > (https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=188261)? > > The code for checksum calculation in the function xnb_add_mbuf_cksum() looks > suspect. > > switch (iph->ip_p) { > case IPPROTO_TCP: > if (mbufc->m_pkthdr.csum_flags & CSUM_IP_VALID) { > size_t tcplen = ntohs(iph->ip_len) - sizeof(struct ip); > struct tcphdr *th = (struct tcphdr*)(iph + 1); > th->th_sum = in_pseudo(iph->ip_src.s_addr, > iph->ip_dst.s_addr, htons(IPPROTO_TCP + tcplen)); > th->th_sum = in_cksum_skip(mbufc, > sizeof(struct ether_header) + ntohs(iph->ip_len), > sizeof(struct ether_header) + (iph->ip_hl << 2)); > } > break; > case IPPROTO_UDP: > if (mbufc->m_pkthdr.csum_flags & CSUM_IP_VALID) { > size_t udplen = ntohs(iph->ip_len) - sizeof(struct ip); > struct udphdr *uh = (struct udphdr*)(iph + 1); > uh->uh_sum = in_pseudo(iph->ip_src.s_addr, > iph->ip_dst.s_addr, htons(IPPROTO_UDP + udplen)); > uh->uh_sum = in_cksum_skip(mbufc, > sizeof(struct ether_header) + ntohs(iph->ip_len), > sizeof(struct ether_header) + (iph->ip_hl << 2)); > } > break; > default: > break; > } > > > Both in_pseudo() and in_cksum_skip() set the same checksum. Does this > make since to anybody? The bug you are referring to affects FreeBSD when running as a guest using xen-netfront, but the code snipped above and the function referenced (xnb_add_mbuf_cksum) is only used on FreeBSD when running as a host (AKA Dom0) by xen-netback. TBH, I don't know that much about FreeBSD network subsystem to have an opinion, but it certainly looks weird. Patches are welcome :). Roger.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?563B72B2.6060308>