From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.droids-corp.org (zoll.droids-corp.org [94.23.50.67]) by dpdk.org (Postfix) with ESMTP id 656F56C93 for ; Mon, 30 May 2016 17:26:32 +0200 (CEST) Received: from was59-1-82-226-113-214.fbx.proxad.net ([82.226.113.214] helo=[192.168.0.10]) by mail.droids-corp.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1b7P7R-00073k-4A; Mon, 30 May 2016 17:28:41 +0200 To: "dev@dpdk.org" Cc: "Ananyev, Konstantin" , Yuanhan Liu , "Richardson, Bruce" , Adrien Mazarguil From: Olivier Matz Message-ID: <574C5B9D.4080006@6wind.com> Date: Mon, 30 May 2016 17:26:21 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.6.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: [dpdk-dev] about rx checksum flags X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 May 2016 15:26:32 -0000 Hi, I'm planning to add the support for offloads in virtio-net pmd. It appears that the current rx flags in mbuf are not sufficient to describe the state of a packet received from a virtual driver. I think we need a way to say "the checksum in the packet data is not calculated, but the integrity of the data is verified". Currently, we have one flag for L4 (same for IP): PKT_RX_L4_CKSUM_BAD: L4 cksum of RX pkt. is not OK. This has also another problem that has already been discussed [1]: if no flag is set, it is expected that the checksum is verified by hw, but there is no way to say "the hw does not know if the cksum is correct". I would like to extend this flag to a 4-state value (2 bits): PKT_RX_L4_CKSUM_UNKNOWN: no information about the RX L4 checksum -> the application should verify the checksum by sw PKT_RX_L4_CKSUM_BAD: the L4 checksum in the packet is wrong -> the application can drop the packet without additional check PKT_RX_L4_CKSUM_GOOD: the L4 checksum in the packet is valid -> the application can accept the packet without verifying the checksum by sw PKT_RX_L4_CKSUM_NONE: the L4 checksum is not correct in the packet data, but the integrity of the L4 header is verified. -> the application can process the packet but must not verify the checksum by sw. It has to take care to recalculate the cksum if the packet is transmitted (either by sw or using tx offload) To keep the compatibility with application, the old flag is kept at the same value, and a new flag is added. It is assumed that the behavior of applications was: PKT_RX_L4_CKSUM_BAD = 0 -> packet is accepted PKT_RX_L4_CKSUM_BAD = 1 -> packet is dropped The new checksum states for L4 (same for IP) would be: old flag new flag meaning 0 0 PKT_RX_L4_CKSUM_UNKNOWN 1 0 PKT_RX_L4_CKSUM_BAD 0 1 PKT_RX_L4_CKSUM_GOOD 1 1 PKT_RX_L4_CKSUM_NONE With this, an old application that only checks the old flag, and running using a dpdk having this modification would accept GOOD and UNKNOWN packets (like today), drop BAD packets (like today) and drop NONE packets (this is a new feature that has to be explicitly enabled by the application). Any comment? Olivier [1] http://dpdk.org/ml/archives/dev/2015-January/011550.html