From owner-freebsd-xen@freebsd.org Thu Nov 5 16:01:06 2015 Return-Path: Delivered-To: freebsd-xen@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8BB00A27E5A for ; Thu, 5 Nov 2015 16:01:06 +0000 (UTC) (envelope-from lab@gta.com) Received: from mailgate.gta.com (gb-ha.orl.gta.com [209.208.105.194]) by mx1.freebsd.org (Postfix) with ESMTP id 369E21A31 for ; Thu, 5 Nov 2015 16:01:05 +0000 (UTC) (envelope-from lab@gta.com) Received: (qmail 6792 invoked by uid 1000); 5 Nov 2015 16:00:57 -0000 Date: Thu, 5 Nov 2015 11:00:57 -0500 From: Larry Baird To: Roger Pau Monn?? Cc: freebsd-xen@freebsd.org, alans@spectralogic.com, johns@spectralogic.com, ken@FreeBSD.org Subject: Re: Checksum forwarding issue on XEN Message-ID: <20151105160057.GA2268@gta.com> References: <20151103201250.GA92469@gta.com> <563B72B2.6060308@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <563B72B2.6060308@citrix.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-BeenThere: freebsd-xen@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Discussion of the freebsd port to xen - implementation and usage List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Nov 2015 16:01:06 -0000 Roger, > 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 :). Xyper-V has a similar forward issue. I found they were misusing csum_flags and were always attempting to do checksum offloading if CSUM_IP_VALID was set. I have given them a patch that fixes the issue. I was hoping that Xen's issue was similar. I found the issue above by looking at all uses of csum_flags in sys/dev/xen. It is hard to tell what the correct fix is, without fulling understand the protocal used when communicating between backend and frontend of Xen. I am sure issue with XEN guest forwarding has to with checksum offloading. If I am not misinterpreting your comments, I can ignore code in netback and concentrate on code in netfront when trying to understand what is going wrong. Thank you for some insite, Larry -- ------------------------------------------------------------------------ Larry Baird Global Technology Associates, Inc. 1992-2012 | http://www.gta.com Celebrating Twenty Years of Software Innovation | Orlando, FL Email: lab@gta.com | TEL 407-380-0220