DPDK patches and discussions
 help / color / mirror / Atom feed
From: Keith Wiles <keith.wiles@windriver.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH] Add external parser support for unknown commands.
Date: Sun,  2 Nov 2014 16:28:28 -0600	[thread overview]
Message-ID: <1414967308-69530-1-git-send-email-keith.wiles@windriver.com> (raw)

Allow for a external parser to handle the command line if the
command is not found and the developer has called the routine
int cmdline_set_external_parser(struct cmdline * cl,
                                cmdline_external_parser_t parser);
function to set the function pointer.

The function for the external parser function should return CMDLINE_PARSE_NOMATCH
if not able to match the command requested or zero is handled.

Prototype of external routine:
int (*cmdline_external_parser_t)(struct cmdline * cl, const char * buy);

Signed-off-by: Keith Wiles <keith.wiles@windriver.com>
---
 lib/librte_cmdline/cmdline.h       |  4 ++++
 lib/librte_cmdline/cmdline_parse.c | 12 +++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/lib/librte_cmdline/cmdline.h b/lib/librte_cmdline/cmdline.h
index 4c28d37..f15d996 100644
--- a/lib/librte_cmdline/cmdline.h
+++ b/lib/librte_cmdline/cmdline.h
@@ -65,6 +65,8 @@
 extern "C" {
 #endif
 
+typedef int (*cmdline_external_parser_t)(struct cmdline * cl, const char * buf);
+
 struct cmdline {
 	int s_in;
 	int s_out;
@@ -74,6 +76,7 @@ struct cmdline {
 #ifdef RTE_EXEC_ENV_LINUXAPP
 	struct termios oldterm;
 #endif
+	cmdline_external_parser_t	external_parser;
 };
 
 struct cmdline *cmdline_new(cmdline_parse_ctx_t *ctx, const char *prompt, int s_in, int s_out);
@@ -85,6 +88,7 @@ int cmdline_in(struct cmdline *cl, const char *buf, int size);
 int cmdline_write_char(struct rdline *rdl, char c);
 void cmdline_interact(struct cmdline *cl);
 void cmdline_quit(struct cmdline *cl);
+void cmdline_set_external_parser(struct cmdline * cl, cmdline_external_parser_t parser);
 
 #ifdef __cplusplus
 }
diff --git a/lib/librte_cmdline/cmdline_parse.c b/lib/librte_cmdline/cmdline_parse.c
index 940480d..a65ae70 100644
--- a/lib/librte_cmdline/cmdline_parse.c
+++ b/lib/librte_cmdline/cmdline_parse.c
@@ -212,6 +212,14 @@ match_inst(cmdline_parse_inst_t *inst, const char *buf,
 	return i;
 }
 
+/* Set or disable external parser */
+void
+cmdline_set_external_parser(struct cmdline *cl, cmdline_external_parser_t parser)
+{
+	/* If parser is NULL it allows for disabling external parser */
+	if ( cl )
+		cl->external_parser = parser;
+}
 
 int
 cmdline_parse(struct cmdline *cl, const char * buf)
@@ -320,7 +328,9 @@ cmdline_parse(struct cmdline *cl, const char * buf)
 	/* no match */
 	else {
 		debug_printf("No match err=%d\n", err);
-		return err;
+		if ( cl->external_parser == NULL )
+			return err;
+		return cl->external_parser(cl, buf);
 	}
 
 	return linelen;
-- 
2.1.0

             reply	other threads:[~2014-11-02 22:19 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-02 22:28 Keith Wiles [this message]
2014-11-03 10:41 ` Bruce Richardson
2014-11-03 14:08   ` Wiles, Roger Keith
2014-11-03 14:16     ` Bruce Richardson
2014-11-03 14:25       ` Wiles, Roger Keith
2014-11-03 16:06         ` Neil Horman
2014-11-03 16:50           ` Wiles, Roger Keith
2014-11-03 23:26             ` Stephen Hemminger
2014-11-03 23:42               ` Neil Horman
2014-11-04  4:52                 ` Wiles, Roger Keith
2014-11-04 11:27                   ` Neil Horman
2014-11-04 14:44                     ` Wiles, Roger Keith
2014-11-04 19:29                       ` Neil Horman
2014-11-04 20:45                         ` Wiles, Roger Keith
2014-11-05 15:11                           ` Neil Horman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1414967308-69530-1-git-send-email-keith.wiles@windriver.com \
    --to=keith.wiles@windriver.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).