numam-dpdk/lib/librte_cmdline
Adrien Mazarguil a9510e11ad cmdline: fix dynamic tokens interface
Support for dynamic tokens was added in order to implement the flow command
in testpmd, for which static tokens were not versatile enough due to the
large number of possible parameter combinations.

However, due to its reliance on a temporary array to store dynamic tokens,
this interface suffers from various limitations that need to be addressed
in order to implement more commands in the future:

- The maximum number of dynamic tokens is determined at compilation time
  (CMDLINE_PARSE_DYNAMIC_TOKENS). The larger this value, the more stack
  space is wasted (one pointer per potential token, i.e. 1kB of stack space
  on 64-bit architectures with the default value).

- This temporary array is actually a cache in which entries already present
  are not regenerated. This behavior is not documented, which makes dynamic
  tokens practically unusable by applications as they do not know which
  token is current.

- The cache does not really reduce the number of function calls needed to
  retrieve tokens, it was mainly deemed useful to provide context about
  other tokens to the generator callback.

- Like testpmd, most users will likely use repeated pointers to a fixed
  token header structure (cmdline_token_hdr_t), with internal context-aware
  callbacks that do not need to look at other entries; knowing the index of
  the current token is enough.

Getting rid of the temporary array and properly documenting usage of the
token generator callback greatly simplifies this interface.

Fixes: 4fffc05a2b ("cmdline: support dynamic tokens")
Fixes: 19c90af628 ("app/testpmd: add flow command")
Cc: stable@dpdk.org

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
2017-07-21 01:03:25 +03:00
..
cmdline_cirbuf.c lib: fix whitespace 2015-06-12 11:10:10 +02:00
cmdline_cirbuf.h remove trailing whitespaces 2014-06-11 00:29:34 +02:00
cmdline_parse_etheraddr.c lib: remove duplicate includes 2017-07-16 17:30:06 +02:00
cmdline_parse_etheraddr.h cmdline: fix missing include 2016-03-04 15:31:16 +01:00
cmdline_parse_ipaddr.c lib: remove extra parenthesis after return 2015-06-23 23:31:15 +02:00
cmdline_parse_ipaddr.h cmdline: fix missing include 2016-03-04 15:31:16 +01:00
cmdline_parse_num.c lib: add switch fall-through comments 2017-05-05 18:36:55 +02:00
cmdline_parse_num.h cmdline: fix missing include 2016-03-04 15:31:16 +01:00
cmdline_parse_portlist.c lib: remove extra parenthesis after return 2015-06-23 23:31:15 +02:00
cmdline_parse_portlist.h lib: add missing include dependencies 2016-09-13 15:35:28 +02:00
cmdline_parse_string.c cmdline: add any multi string mode to token string 2016-05-02 15:31:16 +02:00
cmdline_parse_string.h cmdline: add any multi string mode to token string 2016-05-02 15:31:16 +02:00
cmdline_parse.c cmdline: fix dynamic tokens interface 2017-07-21 01:03:25 +03:00
cmdline_parse.h cmdline: fix dynamic tokens interface 2017-07-21 01:03:25 +03:00
cmdline_rdline.c lib: fix whitespace 2015-06-12 11:10:10 +02:00
cmdline_rdline.h cmdline: increase command line buffer 2016-03-03 20:39:47 +01:00
cmdline_socket.c lib: remove extra parenthesis after return 2015-06-23 23:31:15 +02:00
cmdline_socket.h lib: add missing include dependencies 2016-09-13 15:35:28 +02:00
cmdline_vt100.c remove trailing whitespaces 2014-06-11 00:29:34 +02:00
cmdline_vt100.h cmdline: fix missing includes 2015-05-18 13:10:48 +02:00
cmdline.c cmdline: check initialization error 2016-05-19 14:40:12 +02:00
cmdline.h lib: add missing include dependencies 2016-09-13 15:35:28 +02:00
Makefile mk: optimize directory dependencies 2017-03-27 23:28:43 +02:00
rte_cmdline_version.map cmdline: remove duplicated symbol from .map 2016-06-30 20:02:52 +02:00