From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-out1.informatik.tu-muenchen.de (mail-out1.informatik.tu-muenchen.de [131.159.0.8]) by dpdk.org (Postfix) with ESMTP id 2F16A6C97; Fri, 19 Aug 2016 18:39:16 +0200 (CEST) Received: from [127.0.0.1] (localhost [127.0.0.1]) by mail.net.in.tum.de (Postfix) with ESMTPSA id 755DC282F004; Fri, 19 Aug 2016 18:39:15 +0200 (CEST) To: users@dpdk.org, "dev@dpdk.org" References: <57739782.60708@net.in.tum.de> From: Paul Emmerich Message-ID: <706195b6-0635-43fc-ce49-41dfcc06dbf8@net.in.tum.de> Date: Fri, 19 Aug 2016 18:39:14 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <57739782.60708@net.in.tum.de> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-users] FDir flex filters on XL710/i40e NICs with the new filter API X-BeenThere: users@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: usage discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Aug 2016 16:39:16 -0000 Hi, I've an update and work-around for this issue that we encountered in DPDK >= 2.2. (See original email below) Cross-posting to dev since this seems to be a bug in the i40e driver. We are trying to set a filter matching on the following conditions while ignoring all other header fields. 1. Packet is a UDP packet 2. Bytes 42 and 43 of the payload are a specific value The first condition is optional, a filter that just matches on the payload bytes of arbitrary packets is fine as well. So we set all fdir masks to ignore everything except for the payload bytes and then add a filter that just specifies the payload bytes. We got the following results with ixgbe: Old filter API, DPDK < 2.2: everything works fine New filter API, DPDK >= 2.2: The "packet is a UDP packet" condition stops working if we do not also filter for the ports, i.e., flow_type = RTE_ETH_FLOW_NONFRAG_IPV4_UDP does not work as expected. flow_type = RTE_ETH_FLOW_IPV4 does work. We are fine with this as we assume that it improves compatibility. The real problem is the i40e driver. Setting flow_type to anything other RTE_ETH_FLOW_NONFRAG_IPV4_UDP doesn't match any packets (the packets we are trying to match are actually UDP packets). I guess that's okay, but inconsistent with the ixgbe driver that does accept RTE_ETH_FLOW_IPV4 as well. The actual problem is that we have to explicitly specify IP addresses and ports in the filter, *despite setting masks to ignore them*. Is this a bug? Or are we using something wrong? (The filter API doesn't seem to be very well documented) Paul Paul Emmerich: > Hi, > > we are trying to use flex filters to match on payload bytes and our code > stopped working with the new Filter API after upgrading to DPDK 2.2 or > later (currently using 16.04). > > We use these filters to match on the bytes 42 and 43 of the payload, the > filter worked with DPDK 2.0 with both XL710 and 82599 NICs with the old > fdir filter API. > > We then upgraded to DPDK 2.2 and later to DPDK 16.04 and migrated to the > new filter API. The filter still works on 82599 NICs but not on XL710 NICs. > > Any ideas what we might be doing wrong here? > > The initialization code can be found here: > https://github.com/emmericp/MoonGen/blob/master/src/device.c#L115-L157 > > Adding the filter is done here: > https://github.com/emmericp/MoonGen/blob/master/lua/include/filter.lua#L356-L385 > > > rte_eth_dev_filter_ctrl() does not return an error and the same code > works for the 82599 NIC. Yet, the filter matches no packets on XL710 NICs. > > Is there a minimal example for the flex filters somewhere that could > help me track down this? > > Any help would be appreciated. > > Thanks! > > > Paul