> -----Original Message----- > From: Dekel Peled <dek...@mellanox.com> > Sent: Tuesday, July 2, 2019 17:44 > To: Adrien Mazarguil <adrien.mazarg...@6wind.com>; > wenzhuo...@intel.com; jingjing...@intel.com; > bernard.iremon...@intel.com; Yongseok Koh <ys...@mellanox.com>; > Shahaf Shuler <shah...@mellanox.com>; Slava Ovsiienko > <viachesl...@mellanox.com>; arybche...@solarflare.com > Cc: dev@dpdk.org; Ori Kam <or...@mellanox.com> > Subject: [PATCH v10 2/3] app/testpmd: add actions to modify TCP header > fields > > Add actions: > - INC_TCP_SEQ - Increase sequence number in the outermost TCP header. > - DEC_TCP_SEQ - Decrease sequence number in the outermost TCP header. > - INC_TCP_ACK - Increase acknowledgment number in the outermost TCP > header. > - DEC_TCP_ACK - Decrease acknowledgment number in the outermost TCP > header. > > Original work by Xiaoyu Min. > > This patch uses the new approach introduced by [1], using a new macro > ARG_ENTRY_HTON to pass a single integer argument to each of the new > actions. > > [1] http://patches.dpdk.org/patch/55882/ > > Signed-off-by: Dekel Peled <dek...@mellanox.com> Acked-by: Viacheslav Ovsiienko <viachesl...@mellanox.com>
> --- > app/test-pmd/cmdline_flow.c | 100 > ++++++++++++++++++++++++++++ > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 16 +++++ > 2 files changed, 116 insertions(+) > > diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c > index 201bd9d..e644efa 100644 > --- a/app/test-pmd/cmdline_flow.c > +++ b/app/test-pmd/cmdline_flow.c > @@ -272,6 +272,14 @@ enum index { > ACTION_SET_MAC_SRC_MAC_SRC, > ACTION_SET_MAC_DST, > ACTION_SET_MAC_DST_MAC_DST, > + ACTION_INC_TCP_SEQ, > + ACTION_INC_TCP_SEQ_VALUE, > + ACTION_DEC_TCP_SEQ, > + ACTION_DEC_TCP_SEQ_VALUE, > + ACTION_INC_TCP_ACK, > + ACTION_INC_TCP_ACK_VALUE, > + ACTION_DEC_TCP_ACK, > + ACTION_DEC_TCP_ACK_VALUE, > }; > > /** Maximum size for pattern in struct rte_flow_item_raw. */ @@ -485,6 > +493,14 @@ struct token { > .size = sizeof(((s *)0)->f), \ > }) > > +/** Same as ARGS_ENTRY_HTON() for a single argument, without structure. > +*/ #define ARG_ENTRY_HTON(s) \ > + (&(const struct arg){ \ > + .hton = 1, \ > + .offset = 0, \ > + .size = sizeof(s), \ > + }) > + > /** Parser output buffer layout expected by cmd_flow_parsed(). */ struct > buffer { > enum index command; /**< Flow command. */ @@ -885,6 +901,10 > @@ struct parse_action_priv { > ACTION_SET_TTL, > ACTION_SET_MAC_SRC, > ACTION_SET_MAC_DST, > + ACTION_INC_TCP_SEQ, > + ACTION_DEC_TCP_SEQ, > + ACTION_INC_TCP_ACK, > + ACTION_DEC_TCP_ACK, > ZERO, > }; > > @@ -1047,6 +1067,30 @@ struct parse_action_priv { > ZERO, > }; > > +static const enum index action_inc_tcp_seq[] = { > + ACTION_INC_TCP_SEQ_VALUE, > + ACTION_NEXT, > + ZERO, > +}; > + > +static const enum index action_dec_tcp_seq[] = { > + ACTION_DEC_TCP_SEQ_VALUE, > + ACTION_NEXT, > + ZERO, > +}; > + > +static const enum index action_inc_tcp_ack[] = { > + ACTION_INC_TCP_ACK_VALUE, > + ACTION_NEXT, > + ZERO, > +}; > + > +static const enum index action_dec_tcp_ack[] = { > + ACTION_DEC_TCP_ACK_VALUE, > + ACTION_NEXT, > + ZERO, > +}; > + > static int parse_init(struct context *, const struct token *, > const char *, unsigned int, > void *, unsigned int); > @@ -2854,6 +2898,62 @@ static int comp_vc_action_rss_queue(struct > context *, const struct token *, > (struct rte_flow_action_set_mac, mac_addr)), > .call = parse_vc_conf, > }, > + [ACTION_INC_TCP_SEQ] = { > + .name = "inc_tcp_seq", > + .help = "increase TCP sequence number", > + .priv = PRIV_ACTION(INC_TCP_SEQ, sizeof(rte_be32_t)), > + .next = NEXT(action_inc_tcp_seq), > + .call = parse_vc, > + }, > + [ACTION_INC_TCP_SEQ_VALUE] = { > + .name = "value", > + .help = "the value to increase TCP sequence number by", > + .next = NEXT(action_inc_tcp_seq, NEXT_ENTRY(UNSIGNED)), > + .args = ARGS(ARG_ENTRY_HTON(rte_be32_t)), > + .call = parse_vc_conf, > + }, > + [ACTION_DEC_TCP_SEQ] = { > + .name = "dec_tcp_seq", > + .help = "decrease TCP sequence number", > + .priv = PRIV_ACTION(DEC_TCP_SEQ, sizeof(rte_be32_t)), > + .next = NEXT(action_dec_tcp_seq), > + .call = parse_vc, > + }, > + [ACTION_DEC_TCP_SEQ_VALUE] = { > + .name = "value", > + .help = "the value to decrease TCP sequence number by", > + .next = NEXT(action_dec_tcp_seq, > NEXT_ENTRY(UNSIGNED)), > + .args = ARGS(ARG_ENTRY_HTON(rte_be32_t)), > + .call = parse_vc_conf, > + }, > + [ACTION_INC_TCP_ACK] = { > + .name = "inc_tcp_ack", > + .help = "increase TCP acknowledgment number", > + .priv = PRIV_ACTION(INC_TCP_ACK, sizeof(rte_be32_t)), > + .next = NEXT(action_inc_tcp_ack), > + .call = parse_vc, > + }, > + [ACTION_INC_TCP_ACK_VALUE] = { > + .name = "value", > + .help = "the value to increase TCP acknowledgment number > by", > + .next = NEXT(action_inc_tcp_ack, NEXT_ENTRY(UNSIGNED)), > + .args = ARGS(ARG_ENTRY_HTON(rte_be32_t)), > + .call = parse_vc_conf, > + }, > + [ACTION_DEC_TCP_ACK] = { > + .name = "dec_tcp_ack", > + .help = "decrease TCP acknowledgment number", > + .priv = PRIV_ACTION(DEC_TCP_ACK, sizeof(rte_be32_t)), > + .next = NEXT(action_dec_tcp_ack), > + .call = parse_vc, > + }, > + [ACTION_DEC_TCP_ACK_VALUE] = { > + .name = "value", > + .help = "the value to decrease TCP acknowledgment number > by", > + .next = NEXT(action_dec_tcp_ack, > NEXT_ENTRY(UNSIGNED)), > + .args = ARGS(ARG_ENTRY_HTON(rte_be32_t)), > + .call = parse_vc_conf, > + }, > }; > > /** Remove and return last entry from argument stack. */ diff --git > a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > index cb83a3c..49a9e15 100644 > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > @@ -4106,6 +4106,22 @@ This section lists supported actions and their > attributes, if any. > > - ``mac_addr {MAC-48}``: new destination MAC address > > +- ``inc_tcp_seq``: Increase sequence number in the outermost TCP header. > + > + - ``value {unsigned}``: Value to increase TCP sequence number by. > + > +- ``dec_tcp_seq``: Decrease sequence number in the outermost TCP header. > + > + - ``value {unsigned}``: Value to decrease TCP sequence number by. > + > +- ``inc_tcp_ack``: Increase acknowledgment number in the outermost TCP > header. > + > + - ``value {unsigned}``: Value to increase TCP acknowledgment number by. > + > +- ``dec_tcp_ack``: Decrease acknowledgment number in the outermost TCP > header. > + > + - ``value {unsigned}``: Value to decrease TCP acknowledgment number by. > + > Destroying flow rules > ~~~~~~~~~~~~~~~~~~~~~ > > -- > 1.8.3.1