From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wj0-f182.google.com (mail-wj0-f182.google.com [209.85.210.182]) by dpdk.org (Postfix) with ESMTP id 63AC82B8C for ; Thu, 8 Dec 2016 16:19:44 +0100 (CET) Received: by mail-wj0-f182.google.com with SMTP id v7so390896386wjy.2 for ; Thu, 08 Dec 2016 07:19:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=vgsEwZ5gBPAN1KRfsOjgzHFia3Izq0/wE5vYmBv9rgc=; b=uf7Ca6boXDy5Mp7BAQnE2GjiG9Q4McQRsC5maslFRax5ASSDX/QvTVANA6tx1iiYmO 1QH8q43TeTA/86JAdkGKRtiyBtK0VwW6EUPmgWB5iNYY9/WlOCIA2f5/JdNY9gHI+6HB Gayuo9JKoPWpA4BLvAZ3adAR+HbeaBx5Lm8AlOxIXZv196WSdmWO5e1nuueUxRD6AC3w khOnDyt4BY7dgt5RhlB1dxZXyqSU1UdHQn825zyKvWEHYHx1LpRl//X9Q18JbMqVRWhZ buu0JbTvNuyJx1l7Zj8/Ad9/9N56+UA2okofCfn0MbBYItuF5i58rLkgtohNMn0TOmUH gFxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=vgsEwZ5gBPAN1KRfsOjgzHFia3Izq0/wE5vYmBv9rgc=; b=lYIEyPT/GIUhuM/WA5leor9X77HBN8lIuitkMBlLoA1iZsLOlVPRbWe3c3KnDapGfr 1Ob76jmWBbJ1v9s7UBvRJvwcxUXRV4eTKzhfEa471tDRB4fk+lPI0ZfUAisvyeTxkIPM RIl4Vssk3FDpx9jVUWZ0s0/brSOv4qToDNXFzyavv5Tabs2JJJmc0lpXBTTaIGKJEizi ip0PQbNFxdckjkOa6LO/f9zR+yWenb/IFDmxFwGe6cotTak6O88RayLjgiUzEEeyeu9M x3Ff+N4HgLT3A1FwaWEimqWCUIUqYgOj/nPH4pX/2u7IfVZCo5PG1NhfadWH/0vGPXYL C66Q== X-Gm-Message-State: AKaTC023HhOAQG7PoVXt8bTPX+cNBf7wFuNmdqD3UKQPnR6a5pHkpCqQUKTwdmAhxEPVfpAR X-Received: by 10.194.187.103 with SMTP id fr7mr62049824wjc.99.1481210383828; Thu, 08 Dec 2016 07:19:43 -0800 (PST) Received: from 6wind.com (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by smtp.gmail.com with ESMTPSA id r7sm37507762wjp.43.2016.12.08.07.19.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Dec 2016 07:19:42 -0800 (PST) Date: Thu, 8 Dec 2016 16:19:35 +0100 From: Adrien Mazarguil To: Ferruh Yigit Cc: dev@dpdk.org, Thomas Monjalon , Pablo de Lara , Olivier Matz Message-ID: <20161208151935.GK10340@6wind.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: Re: [dpdk-dev] [PATCH 00/22] Generic flow API (rte_flow) X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 08 Dec 2016 15:19:44 -0000 Hi Ferruh, On Fri, Dec 02, 2016 at 04:58:53PM +0000, Ferruh Yigit wrote: > Hi Adrien, > > On 11/16/2016 4:23 PM, Adrien Mazarguil wrote: > > As previously discussed in RFC v1 [1], RFC v2 [2], with changes > > described in [3] (also pasted below), here is the first non-draft series > > for this new API. > > > > Its capabilities are so generic that its name had to be vague, it may be > > called "Generic flow API", "Generic flow interface" (possibly shortened > > as "GFI") to refer to the name of the new filter type, or "rte_flow" from > > the prefix used for its public symbols. I personally favor the latter. > > > > While it is currently meant to supersede existing filter types in order for > > all PMDs to expose a common filtering/classification interface, it may > > eventually evolve to cover the following ideas as well: > > > > - Rx/Tx offloads configuration through automatic offloads for specific > > packets, e.g. performing checksum on TCP packets could be expressed with > > an egress rule with a TCP pattern and a kind of checksum action. > > > > - RSS configuration (already defined actually). Could be global or per rule > > depending on hardware capabilities. > > > > - Switching configuration for devices with many physical ports; rules doing > > both ingress and egress could even be used to completely bypass software > > if supported by hardware. > > > > [1] http://dpdk.org/ml/archives/dev/2016-July/043365.html > > [2] http://dpdk.org/ml/archives/dev/2016-August/045383.html > > [3] http://dpdk.org/ml/archives/dev/2016-November/050044.html > > > > Changes since RFC v2: > > > > - New separate VLAN pattern item (previously part of the ETH definition), > > found to be much more convenient. > > > > - Removed useless "any" field from VF pattern item, the same effect can be > > achieved by not providing a specification structure. > > > > - Replaced bit-fields from the VXLAN pattern item to avoid endianness > > conversion issues on 24-bit fields. > > > > - Updated struct rte_flow_item with a new "last" field to create inclusive > > ranges. They are defined as the interval between (spec & mask) and > > (last & mask). All three parameters are optional. > > > > - Renamed ID action MARK. > > > > - Renamed "queue" fields in actions QUEUE and DUP to "index". > > > > - "rss_conf" field in RSS action is now const. > > > > - VF action now uses a 32 bit ID like its pattern item counterpart. > > > > - Removed redundant struct rte_flow_pattern, API functions now expect > > struct > > rte_flow_item lists terminated by END items. > > > > - Replaced struct rte_flow_actions for the same reason, with struct > > rte_flow_action lists terminated by END actions. > > > > - Error types (enum rte_flow_error_type) have been updated and the cause > > pointer in struct rte_flow_error is now const. > > > > - Function prototypes (rte_flow_create, rte_flow_validate) have also been > > updated for clarity. > > > > Additions: > > > > - Public wrapper functions rte_flow_{validate|create|destroy|flush|query} > > are now implemented in rte_flow.c, with their symbols exported and > > versioned. Related filter type RTE_ETH_FILTER_GENERIC has been added. > > > > - A separate header (rte_flow_driver.h) has been added for driver-side > > functionality, in particular struct rte_flow_ops which contains PMD > > callbacks returned by RTE_ETH_FILTER_GENERIC query. > > > > - testpmd now exposes most of this API through the new "flow" command. > > > > What remains to be done: > > > > - Using endian-aware integer types (rte_beX_t) where necessary for clarity. > > > > - API documentation (based on RFC). > > > > - testpmd flow command documentation (although context-aware command > > completion should already help quite a bit in this regard). > > > > - A few pattern item / action properties cannot be configured yet > > (e.g. rss_conf parameter for RSS action) and a few completions > > (e.g. possible queue IDs) should be added. > > > > <...> > > I was trying to check driver filter API patches, but hit a few compiler > errors with this patchset. > > [1] clang complains about variable bitfield value changed from -1 to 1. > Which is correct, but I guess that is intentional, but I don't know how > to tell this to clang? > > [2] shred library compilation error, because of missing rte_flow_flush > in rte_ether_version.map file > > [3] bunch of icc compilation errors, almost all are same type: > error #188: enumerated type mixed with another type Thanks for the report, I'll attempt to address them all in v2. However icc error #188 looks like a pain, I think I can work around it but do we really not tolerate the use of normal integers inside enum fields in DPDK? > [1] > ============================= > .../app/test-pmd/cmdline_flow.c:944:16: error: implicit truncation from > 'int' to bitfield changes value from -1 to 1 > [-Werror,-Wbitfield-constant-conversion] > .args = ARGS(ARGS_ENTRY_BF(struct rte_flow_item_raw, > relative)), > > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > .../app/test-pmd/cmdline_flow.c:282:42: note: expanded from macro > 'ARGS_ENTRY_BF' > .mask = (const void *)&(const s){ .f = -1 }, \ > ^~ > .../app/test-pmd/cmdline_flow.c:269:49: note: expanded from macro 'ARGS' > #define ARGS(...) (const struct arg *const []){ __VA_ARGS__, NULL, } > ^~~~~~~~~~~ > .../app/test-pmd/cmdline_flow.c:950:16: error: implicit truncation from > 'int' to bitfield changes value from -1 to 1 > [-Werror,-Wbitfield-constant-conversion] > .args = ARGS(ARGS_ENTRY_BF(struct rte_flow_item_raw, > search)), > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > .../app/test-pmd/cmdline_flow.c:282:42: note: expanded from macro > 'ARGS_ENTRY_BF' > .mask = (const void *)&(const s){ .f = -1 }, \ > ^~ > .../app/test-pmd/cmdline_flow.c:269:49: note: expanded from macro 'ARGS' > #define ARGS(...) (const struct arg *const []){ __VA_ARGS__, NULL, } > ^~~~~~~~~~~ > .../app/test-pmd/cmdline_flow.c:1293:16: error: implicit truncation from > 'int' to bitfield changes value from -1 to 1 > [-Werror,-Wbitfield-constant-conversion] > .args = ARGS(ARGS_ENTRY_BF(struct rte_flow_action_vf, > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > .../app/test-pmd/cmdline_flow.c:282:42: note: expanded from macro > 'ARGS_ENTRY_BF' > .mask = (const void *)&(const s){ .f = -1 }, \ > ^~ > .../app/test-pmd/cmdline_flow.c:269:49: note: expanded from macro 'ARGS' > #define ARGS(...) (const struct arg *const []){ __VA_ARGS__, NULL, } > ^~~~~~~~~~~ > .../app/test-pmd/cmdline_flow.c:1664:26: error: duplicate 'const' > declaration specifier [-Werror,-Wduplicate-decl-specifier] > static const enum index const next[] = NEXT_ENTRY(ACTION_RSS_QUEUE); > ^ > 4 errors generated. > > > > [2] > ============================= > LD testpmd > config.o: In function `port_flow_flush': > config.c:(.text+0x2231): undefined reference to `rte_flow_flush' > collect2: error: ld returned 1 exit status > > > [3] > ============================= > .../app/test-pmd/cmdline_flow.c(364): error #188: enumerated type mixed > with another type > > 0, > > > ^ > > .../app/test-pmd/cmdline_flow.c(370): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(376): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(385): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(406): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(413): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(419): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(425): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(435): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(443): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(450): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(457): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(464): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(471): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(478): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(485): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(492): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(498): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(514): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(520): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(526): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(532): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(538): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(545): error #188: enumerated type mixed > with another type > 0, > ^ > > .../app/test-pmd/cmdline_flow.c(619): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(FLOW)), > ^ > > .../app/test-pmd/cmdline_flow.c(716): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY > ^ > > .../app/test-pmd/cmdline_flow.c(729): error #188: enumerated type mixed > with another type > .next = NEXT(next_vc_attr, NEXT_ENTRY(PORT_ID)), > ^ > > .../app/test-pmd/cmdline_flow.c(736): error #188: enumerated type mixed > with another type > .next = NEXT(next_vc_attr, NEXT_ENTRY(PORT_ID)), > ^ > > .../app/test-pmd/cmdline_flow.c(743): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(DESTROY_RULE), NEXT_ENTRY(PORT_ID)), > ^ > > .../app/test-pmd/cmdline_flow.c(743): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(DESTROY_RULE), NEXT_ENTRY(PORT_ID)), > ^ > > .../app/test-pmd/cmdline_flow.c(750): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(PORT_ID)), > ^ > > .../app/test-pmd/cmdline_flow.c(757): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(QUERY_ACTION), > ^ > > .../app/test-pmd/cmdline_flow.c(757): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(QUERY_ACTION), > ^ > > .../app/test-pmd/cmdline_flow.c(757): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(QUERY_ACTION), > ^ > > .../app/test-pmd/cmdline_flow.c(768): error #188: enumerated type mixed > with another type > .next = NEXT(next_list_attr, NEXT_ENTRY(PORT_ID)), > ^ > > .../app/test-pmd/cmdline_flow.c(776): error #188: enumerated type mixed > with another type > .next = NEXT(next_destroy_attr, NEXT_ENTRY(RULE_ID)), > ^ > > .../app/test-pmd/cmdline_flow.c(792): error #188: enumerated type mixed > with another type > .next = NEXT(next_list_attr, NEXT_ENTRY(GROUP_ID)), > ^ > > .../app/test-pmd/cmdline_flow.c(800): error #188: enumerated type mixed > with another type > .next = NEXT(next_vc_attr, NEXT_ENTRY(GROUP_ID)), > ^ > > .../app/test-pmd/cmdline_flow.c(807): error #188: enumerated type mixed > with another type > .next = NEXT(next_vc_attr, NEXT_ENTRY(PRIORITY_LEVEL)), > ^ > > .../app/test-pmd/cmdline_flow.c(864): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ACTIONS)), > ^ > > .../app/test-pmd/cmdline_flow.c(871): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ITEM_NEXT)), > ^ > > .../app/test-pmd/cmdline_flow.c(878): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ITEM_NEXT)), > ^ > > .../app/test-pmd/cmdline_flow.c(891): error #188: enumerated type mixed > with another type > .next = NEXT(item_any, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(897): error #188: enumerated type mixed > with another type > .next = NEXT(item_any, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(904): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ITEM_NEXT)), > ^ > > .../app/test-pmd/cmdline_flow.c(917): error #188: enumerated type mixed > with another type > .next = NEXT(item_vf, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(930): error #188: enumerated type mixed > with another type > .next = NEXT(item_port, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(943): error #188: enumerated type mixed > with another type > .next = NEXT(item_raw, NEXT_ENTRY(BOOLEAN), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(949): error #188: enumerated type mixed > with another type > .next = NEXT(item_raw, NEXT_ENTRY(BOOLEAN), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(955): error #188: enumerated type mixed > with another type > .next = NEXT(item_raw, NEXT_ENTRY(INTEGER), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(961): error #188: enumerated type mixed > with another type > .next = NEXT(item_raw, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(967): error #188: enumerated type mixed > with another type > .next = NEXT(item_raw, > ^ > > .../app/test-pmd/cmdline_flow.c(967): error #188: enumerated type mixed > with another type > .next = NEXT(item_raw, > ^ > > .../app/test-pmd/cmdline_flow.c(987): error #188: enumerated type mixed > with another type > .next = NEXT(item_eth, NEXT_ENTRY(MAC_ADDR), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(993): error #188: enumerated type mixed > with another type > .next = NEXT(item_eth, NEXT_ENTRY(MAC_ADDR), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(999): error #188: enumerated type mixed > with another type > .next = NEXT(item_eth, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1012): error #188: enumerated type mixed > with another type > .next = NEXT(item_vlan, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1018): error #188: enumerated type mixed > with another type > .next = NEXT(item_vlan, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1031): error #188: enumerated type mixed > with another type > .next = NEXT(item_ipv4, NEXT_ENTRY(IPV4_ADDR), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1038): error #188: enumerated type mixed > with another type > .next = NEXT(item_ipv4, NEXT_ENTRY(IPV4_ADDR), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1052): error #188: enumerated type mixed > with another type > .next = NEXT(item_ipv6, NEXT_ENTRY(IPV6_ADDR), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1059): error #188: enumerated type mixed > with another type > .next = NEXT(item_ipv6, NEXT_ENTRY(IPV6_ADDR), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1073): error #188: enumerated type mixed > with another type > .next = NEXT(item_icmp, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1080): error #188: enumerated type mixed > with another type > .next = NEXT(item_icmp, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1094): error #188: enumerated type mixed > with another type > .next = NEXT(item_udp, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1101): error #188: enumerated type mixed > with another type > .next = NEXT(item_udp, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1115): error #188: enumerated type mixed > with another type > .next = NEXT(item_tcp, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1122): error #188: enumerated type mixed > with another type > .next = NEXT(item_tcp, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1136): error #188: enumerated type mixed > with another type > .next = NEXT(item_sctp, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1143): error #188: enumerated type mixed > with another type > .next = NEXT(item_sctp, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1157): error #188: enumerated type mixed > with another type > .next = NEXT(item_vxlan, NEXT_ENTRY(UNSIGNED), item_param), > ^ > > .../app/test-pmd/cmdline_flow.c(1182): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ACTION_NEXT)), > ^ > > .../app/test-pmd/cmdline_flow.c(1189): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ACTION_NEXT)), > ^ > > .../app/test-pmd/cmdline_flow.c(1202): error #188: enumerated type mixed > with another type > .next = NEXT(action_mark, NEXT_ENTRY(UNSIGNED)), > ^ > > .../app/test-pmd/cmdline_flow.c(1210): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ACTION_NEXT)), > ^ > > .../app/test-pmd/cmdline_flow.c(1224): error #188: enumerated type mixed > with another type > .next = NEXT(action_queue, NEXT_ENTRY(UNSIGNED)), > ^ > > .../app/test-pmd/cmdline_flow.c(1232): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ACTION_NEXT)), > ^ > > .../app/test-pmd/cmdline_flow.c(1239): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ACTION_NEXT)), > ^ > > .../app/test-pmd/cmdline_flow.c(1252): error #188: enumerated type mixed > with another type > .next = NEXT(action_dup, NEXT_ENTRY(UNSIGNED)), > ^ > > .../app/test-pmd/cmdline_flow.c(1266): error #188: enumerated type mixed > with another type > .next = NEXT(action_rss, NEXT_ENTRY(ACTION_RSS_QUEUE)), > ^ > > .../app/test-pmd/cmdline_flow.c(1279): error #188: enumerated type mixed > with another type > .next = NEXT(NEXT_ENTRY(ACTION_NEXT)), > ^ > > .../app/test-pmd/cmdline_flow.c(1292): error #188: enumerated type mixed > with another type > .next = NEXT(action_vf, NEXT_ENTRY(BOOLEAN)), > ^ > > .../app/test-pmd/cmdline_flow.c(1300): error #188: enumerated type mixed > with another type > .next = NEXT(action_vf, NEXT_ENTRY(UNSIGNED)), > ^ > > .../app/test-pmd/cmdline_flow.c(1599): error #188: enumerated type mixed > with another type > ctx->next[ctx->next_num - 2] = NEXT_ENTRY(PREFIX); > ^ > > .../app/test-pmd/cmdline_flow.c(1664): error #83: type qualifier > specified more than once > static const enum index const next[] = NEXT_ENTRY(ACTION_RSS_QUEUE); > ^ > > .../app/test-pmd/cmdline_flow.c(1664): error #188: enumerated type mixed > with another type > static const enum index const next[] = NEXT_ENTRY(ACTION_RSS_QUEUE); > ^ > > .../app/test-pmd/cmdline_flow.c(2302): error #188: enumerated type mixed > with another type > ctx->curr = 0; > ^ > > .../app/test-pmd/cmdline_flow.c(2303): error #188: enumerated type mixed > with another type > ctx->prev = 0; > ^ > > -- Adrien Mazarguil 6WIND