Test-Label: iol-testing Test-Status: WARNING http://dpdk.org/patch/101946 _apply patch failure_ Submitter: Jie Wang Date: Monday, October 18 2021 09:33:52 Applied on: CommitID:9942ebb9c698a53b86e2bbd450f3e24238771fe5 Apply patch set 101946-101948 failed: Checking patch doc/guides/prog_guide/rte_flow.rst... error: while searching for: See also `Action: REPRESENTED_PORT`_. Actions ~~~~~~~ error: patch failed: doc/guides/prog_guide/rte_flow.rst:1548 Checking patch doc/guides/rel_notes/release_21_11.rst... error: while searching for: Added an ethdev API which can help users get device configuration. * **Updated AF_XDP PMD.** * Disabled secondary process support. error: patch failed: doc/guides/rel_notes/release_21_11.rst:98 Checking patch lib/ethdev/rte_flow.c... error: while searching for: MK_FLOW_ITEM(CONNTRACK, sizeof(uint32_t)), MK_FLOW_ITEM(PORT_REPRESENTOR, sizeof(struct rte_flow_item_ethdev)), MK_FLOW_ITEM(REPRESENTED_PORT, sizeof(struct rte_flow_item_ethdev)), }; /** Generate flow_action[] entry. */ error: patch failed: lib/ethdev/rte_flow.c:102 Checking patch lib/ethdev/rte_flow.h... error: while searching for: * @see struct rte_flow_item_ethdev */ RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT, }; /** error: patch failed: lib/ethdev/rte_flow.h:635 Hunk #3 succeeded at 1801 (offset -107 lines). Checking patch lib/net/rte_l2tpv2.h... Checking patch lib/net/rte_ppp.h... Applying patch doc/guides/prog_guide/rte_flow.rst with 1 reject... Rejected hunk #1. Applying patch doc/guides/rel_notes/release_21_11.rst with 1 reject... Rejected hunk #1. Applying patch lib/ethdev/rte_flow.c with 1 reject... Rejected hunk #1. Applying patch lib/ethdev/rte_flow.h with 1 reject... Hunk #1 applied cleanly. Rejected hunk #2. Hunk #3 applied cleanly. Applied patch lib/net/rte_l2tpv2.h cleanly. Applied patch lib/net/rte_ppp.h cleanly. diff a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst (rejected hunks) @@ -1548,6 +1548,31 @@ This item is meant to use the same structure as `Item: PORT_REPRESENTOR`_. See also `Action: REPRESENTED_PORT`_. +Item: ``L2TPV2`` +^^^^^^^^^^^^^^^^^^^ + +Matches a L2TPv2 header. + +- ``flags_version``: flags(12b), version(4b). +- ``length``: total length of the message. +- ``tunnel_id``: identifier for the control connection. +- ``session_id``: identifier for a session within a tunnel. +- ``ns``: sequence number for this date or control message. +- ``nr``: sequence number expected in the next control message to be received. +- ``offset_size``: offset of payload data. +- ``offset_padding``: offset padding, variable length. +- Default ``mask`` matches flags_version only. + +Item: ``PPP`` +^^^^^^^^^^^^^^^^^^^ + +Matches a PPP header. + +- ``addr``: ppp address. +- ``ctrl``: ppp control. +- ``proto_id``: ppp protocol identifier. +- Default ``mask`` matches addr, ctrl, proto_id. + Actions ~~~~~~~ diff a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst (rejected hunks) @@ -98,6 +98,11 @@ New Features Added an ethdev API which can help users get device configuration. +* **Added L2TPV2 and PPP protocol support in rte_flow.** + + Added flow pattern items and header formats of L2TPv2 and PPP to support + PPP over L2TPv2 over UDP protocol RSS Hash. + * **Updated AF_XDP PMD.** * Disabled secondary process support. diff a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c (rejected hunks) @@ -102,6 +102,8 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = { MK_FLOW_ITEM(CONNTRACK, sizeof(uint32_t)), MK_FLOW_ITEM(PORT_REPRESENTOR, sizeof(struct rte_flow_item_ethdev)), MK_FLOW_ITEM(REPRESENTED_PORT, sizeof(struct rte_flow_item_ethdev)), + MK_FLOW_ITEM(L2TPV2, sizeof(struct rte_flow_item_l2tpv2)), + MK_FLOW_ITEM(PPP, sizeof(struct rte_flow_item_ppp)), }; /** Generate flow_action[] entry. */ diff a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h (rejected hunks) @@ -635,6 +637,21 @@ enum rte_flow_item_type { * @see struct rte_flow_item_ethdev */ RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT, + + /** + * Matches L2TPV2 Header. + * + * See struct rte_flow_item_l2tpv2. + */ + RTE_FLOW_ITEM_TYPE_L2TPV2, + + /** + * Matches PPP Header. + * + * See struct rte_flow_item_ppp. + */ + RTE_FLOW_ITEM_TYPE_PPP, + }; /** Checking patch app/test-pmd/cmdline_flow.c... error: while searching for: ITEM_PORT_REPRESENTOR_PORT_ID, ITEM_REPRESENTED_PORT, ITEM_REPRESENTED_PORT_ETHDEV_PORT_ID, /* Validate/create actions. */ ACTIONS, error: patch failed: app/test-pmd/cmdline_flow.c:310 error: while searching for: ITEM_CONNTRACK, ITEM_PORT_REPRESENTOR, ITEM_REPRESENTED_PORT, END_SET, ZERO, }; error: patch failed: app/test-pmd/cmdline_flow.c:1018 Hunk #3 succeeded at 1368 (offset -49 lines). Hunk #4 succeeded at 1762 (offset -63 lines). error: while searching for: item_param), .args = ARGS(ARGS_ENTRY(struct rte_flow_item_ethdev, port_id)), }, /* Validate/create actions. */ [ACTIONS] = { .name = "actions", error: patch failed: app/test-pmd/cmdline_flow.c:3682 Hunk #6 succeeded at 5483 (offset -280 lines). error: while searching for: case RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT: mask = &rte_flow_item_ethdev_mask; break; default: break; } error: patch failed: app/test-pmd/cmdline_flow.c:8461 Applying patch app/test-pmd/cmdline_flow.c with 4 rejects... Rejected hunk #1. Rejected hunk #2. Hunk #3 applied cleanly. Hunk #4 applied cleanly. Rejected hunk #5. Hunk #6 applied cleanly. Rejected hunk #7. diff a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c (rejected hunks) @@ -310,6 +310,23 @@ enum index { ITEM_PORT_REPRESENTOR_PORT_ID, ITEM_REPRESENTED_PORT, ITEM_REPRESENTED_PORT_ETHDEV_PORT_ID, + ITEM_L2TPV2, + ITEM_L2TPV2_COMMON, + ITEM_L2TPV2_COMMON_TYPE, + ITEM_L2TPV2_COMMON_TYPE_DATA_L, + ITEM_L2TPV2_COMMON_TYPE_CTRL, + ITEM_L2TPV2_MSG_DATA_L_LENGTH, + ITEM_L2TPV2_MSG_DATA_L_TUNNEL_ID, + ITEM_L2TPV2_MSG_DATA_L_SESSION_ID, + ITEM_L2TPV2_MSG_CTRL_LENGTH, + ITEM_L2TPV2_MSG_CTRL_TUNNEL_ID, + ITEM_L2TPV2_MSG_CTRL_SESSION_ID, + ITEM_L2TPV2_MSG_CTRL_NS, + ITEM_L2TPV2_MSG_CTRL_NR, + ITEM_PPP, + ITEM_PPP_ADDR, + ITEM_PPP_CTRL, + ITEM_PPP_PROTO_ID, /* Validate/create actions. */ ACTIONS, @@ -1018,6 +1035,8 @@ static const enum index next_item[] = { ITEM_CONNTRACK, ITEM_PORT_REPRESENTOR, ITEM_REPRESENTED_PORT, + ITEM_L2TPV2, + ITEM_PPP, END_SET, ZERO, }; @@ -3682,6 +3729,153 @@ static const struct token token_list[] = { item_param), .args = ARGS(ARGS_ENTRY(struct rte_flow_item_ethdev, port_id)), }, + [ITEM_L2TPV2] = { + .name = "l2tpv2", + .help = "match l2tpv2 header", + .priv = PRIV_ITEM(L2TPV2, sizeof(struct rte_flow_item_l2tpv2)), + .next = NEXT(item_l2tpv2), + .call = parse_vc, + }, + [ITEM_L2TPV2_COMMON] = { + .name = "common", + .help = "l2tpv2 common header", + .next = NEXT(item_l2tpv2_common), + }, + [ITEM_L2TPV2_COMMON_TYPE] = { + .name = "type", + .help = "type of common header", + .next = NEXT(item_l2tpv2_common_type), + .args = ARGS(ARG_ENTRY_HTON(struct rte_flow_item_l2tpv2)), + }, + [ITEM_L2TPV2_COMMON_TYPE_DATA_L] = { + .name = "data_l", + .help = "Type #6: data message with length option", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_DATA_L_LENGTH, + ITEM_L2TPV2_MSG_DATA_L_TUNNEL_ID, + ITEM_L2TPV2_MSG_DATA_L_SESSION_ID, + ITEM_NEXT)), + .call = parse_vc_item_l2tpv2_type, + }, + [ITEM_L2TPV2_MSG_DATA_L_LENGTH] = { + .name = "length", + .help = "message length", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_DATA_L_LENGTH, + ITEM_L2TPV2_COMMON, ITEM_NEXT), + NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_l2tpv2, + hdr.type6.length)), + }, + [ITEM_L2TPV2_MSG_DATA_L_TUNNEL_ID] = { + .name = "tunnel_id", + .help = "tunnel identifier", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_DATA_L_TUNNEL_ID, + ITEM_L2TPV2_COMMON, ITEM_NEXT), + NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_l2tpv2, + hdr.type6.tunnel_id)), + }, + [ITEM_L2TPV2_MSG_DATA_L_SESSION_ID] = { + .name = "session_id", + .help = "session identifier", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_DATA_L_SESSION_ID, + ITEM_L2TPV2_COMMON, ITEM_NEXT), + NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_l2tpv2, + hdr.type6.session_id)), + }, + [ITEM_L2TPV2_COMMON_TYPE_CTRL] = { + .name = "control", + .help = "Type #3: conrtol message contains length, ns, nr options", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_CTRL_LENGTH, + ITEM_L2TPV2_MSG_CTRL_TUNNEL_ID, + ITEM_L2TPV2_MSG_CTRL_SESSION_ID, + ITEM_L2TPV2_MSG_CTRL_NS, + ITEM_L2TPV2_MSG_CTRL_NR, + ITEM_NEXT)), + .call = parse_vc_item_l2tpv2_type, + }, + [ITEM_L2TPV2_MSG_CTRL_LENGTH] = { + .name = "length", + .help = "message length", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_CTRL_LENGTH, + ITEM_L2TPV2_COMMON, ITEM_NEXT), + NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_l2tpv2, + hdr.type3.length)), + }, + [ITEM_L2TPV2_MSG_CTRL_TUNNEL_ID] = { + .name = "tunnel_id", + .help = "tunnel identifier", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_CTRL_TUNNEL_ID, + ITEM_L2TPV2_COMMON, ITEM_NEXT), + NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_l2tpv2, + hdr.type3.tunnel_id)), + }, + [ITEM_L2TPV2_MSG_CTRL_SESSION_ID] = { + .name = "session_id", + .help = "session identifier", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_CTRL_SESSION_ID, + ITEM_L2TPV2_COMMON, ITEM_NEXT), + NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_l2tpv2, + hdr.type3.session_id)), + }, + [ITEM_L2TPV2_MSG_CTRL_NS] = { + .name = "ns", + .help = "sequence number for message", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_CTRL_NS, + ITEM_L2TPV2_COMMON, ITEM_NEXT), + NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_l2tpv2, + hdr.type3.ns)), + }, + [ITEM_L2TPV2_MSG_CTRL_NR] = { + .name = "nr", + .help = "sequence number for next receive message", + .next = NEXT(NEXT_ENTRY(ITEM_L2TPV2_MSG_CTRL_NS, + ITEM_L2TPV2_COMMON, ITEM_NEXT), + NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_l2tpv2, + hdr.type3.nr)), + }, + [ITEM_PPP] = { + .name = "ppp", + .help = "match ppp header", + .priv = PRIV_ITEM(PPP, sizeof(struct rte_flow_item_ppp)), + .next = NEXT(item_ppp), + .call = parse_vc, + }, + [ITEM_PPP_ADDR] = { + .name = "addr", + .help = "ppp address", + .next = NEXT(item_ppp, NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY(struct rte_flow_item_ppp, hdr.addr)), + }, + [ITEM_PPP_CTRL] = { + .name = "ctrl", + .help = "ppp control", + .next = NEXT(item_ppp, NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY(struct rte_flow_item_ppp, hdr.ctrl)), + }, + [ITEM_PPP_PROTO_ID] = { + .name = "proto_id", + .help = "ppp protocol id", + .next = NEXT(item_ppp, NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY(struct rte_flow_item_ppp, + hdr.proto_id)), + }, /* Validate/create actions. */ [ACTIONS] = { .name = "actions", @@ -8461,6 +8706,12 @@ flow_item_default_mask(const struct rte_flow_item *item) case RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT: mask = &rte_flow_item_ethdev_mask; break; + case RTE_FLOW_ITEM_TYPE_L2TPV2: + mask = &rte_flow_item_l2tpv2_mask; + break; + case RTE_FLOW_ITEM_TYPE_PPP: + mask = &rte_flow_item_ppp_mask; + break; default: break; } https://lab.dpdk.org/results/dashboard/patchsets/19488/ UNH-IOL DPDK Community Lab