[dpdk-dev,2/2] app/testpmd: fix MAC endian issue in flow command

Message ID 2f565661121fe816a097d41dd375cb7c44932cf4.1493917362.git.adrien.mazarguil@6wind.com (mailing list archive)
State Accepted, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Adrien Mazarguil May 4, 2017, 5:08 p.m. UTC
  MAC addresses are implicitly handled in network order since they are
actually byte strings, however this is not properly enforced with MAC masks
provided as prefix lengths, which end up inverted on little endian
systems.

Fixes: 6df81b325fa4 ("app/testpmd: add items eth/vlan to flow command")

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
---
 app/test-pmd/cmdline_flow.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
  

Comments

Thomas Monjalon May 6, 2017, 8:14 a.m. UTC | #1
04/05/2017 19:08, Adrien Mazarguil:
> MAC addresses are implicitly handled in network order since they are
> actually byte strings, however this is not properly enforced with MAC masks
> provided as prefix lengths, which end up inverted on little endian
> systems.
> 
> Fixes: 6df81b325fa4 ("app/testpmd: add items eth/vlan to flow command")
> 
> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

Series applies, thanks
  

Patch

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index e952c91..0fd69f9 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -1057,13 +1057,13 @@  static const struct token token_list[] = {
 		.name = "dst",
 		.help = "destination MAC",
 		.next = NEXT(item_eth, NEXT_ENTRY(MAC_ADDR), item_param),
-		.args = ARGS(ARGS_ENTRY(struct rte_flow_item_eth, dst)),
+		.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_eth, dst)),
 	},
 	[ITEM_ETH_SRC] = {
 		.name = "src",
 		.help = "source MAC",
 		.next = NEXT(item_eth, NEXT_ENTRY(MAC_ADDR), item_param),
-		.args = ARGS(ARGS_ENTRY(struct rte_flow_item_eth, src)),
+		.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_eth, src)),
 	},
 	[ITEM_ETH_TYPE] = {
 		.name = "type",
@@ -2238,6 +2238,9 @@  parse_mac_addr(struct context *ctx, const struct token *token,
 	/* Bit-mask fill is not supported. */
 	if (arg->mask || size != sizeof(tmp))
 		goto error;
+	/* Only network endian is supported. */
+	if (!arg->hton)
+		goto error;
 	ret = cmdline_parse_etheraddr(NULL, str, &tmp, size);
 	if (ret < 0 || (unsigned int)ret != len)
 		goto error;