[dpdk-stable] patch 'examples/ipsec-secgw: use POSIX network address conversion' has been queued to stable release 19.11.6

luca.boccassi at gmail.com luca.boccassi at gmail.com
Mon Nov 9 19:39:52 CET 2020


Hi,

FYI, your patch has been queued to stable release 19.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/11/20. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/3109cc617c1c882c3b44434d801a73eca8a5e4ed

Thanks.

Luca Boccassi

---
>From 3109cc617c1c882c3b44434d801a73eca8a5e4ed Mon Sep 17 00:00:00 2001
From: Ibtisam Tariq <ibtisam.tariq at emumba.com>
Date: Mon, 13 Jul 2020 09:57:30 +0000
Subject: [PATCH] examples/ipsec-secgw: use POSIX network address conversion

[ upstream commit 4054466be9c64e72c37cffd840ab0f35a946a867 ]

inet_pton4 and inet_pton6 was reimplemented. Replace implementation of
inet_pton4 and inet_pton6 with libc inet_pton function

Bugzilla ID: 365
Fixes: 0d547ed03717 ("examples/ipsec-secgw: support configuration file")

Reported-by: David Marchand <david.marchand at redhat.com>
Signed-off-by: Ibtisam Tariq <ibtisam.tariq at emumba.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev at intel.com>
Acked-by: David Marchand <david.marchand at redhat.com>
---
 examples/ipsec-secgw/parser.c | 173 +---------------------------------
 1 file changed, 5 insertions(+), 168 deletions(-)

diff --git a/examples/ipsec-secgw/parser.c b/examples/ipsec-secgw/parser.c
index fc8c238fe5..dfabac2dbf 100644
--- a/examples/ipsec-secgw/parser.c
+++ b/examples/ipsec-secgw/parser.c
@@ -1,6 +1,9 @@
 /* SPDX-License-Identifier: BSD-3-Clause
  * Copyright(c) 2016 Intel Corporation
  */
+#include <arpa/inet.h>
+#include <sys/socket.h>
+
 #include <rte_common.h>
 #include <rte_crypto.h>
 #include <rte_string_fns.h>
@@ -39,172 +42,6 @@ parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens)
 	return 0;
 }
 
-#define INADDRSZ 4
-#define IN6ADDRSZ 16
-
-/* int
- * inet_pton4(src, dst)
- *      like inet_aton() but without all the hexadecimal and shorthand.
- * return:
- *      1 if `src' is a valid dotted quad, else 0.
- * notice:
- *      does not touch `dst' unless it's returning 1.
- * author:
- *      Paul Vixie, 1996.
- */
-static int
-inet_pton4(const char *src, unsigned char *dst)
-{
-	static const char digits[] = "0123456789";
-	int saw_digit, octets, ch;
-	unsigned char tmp[INADDRSZ], *tp;
-
-	saw_digit = 0;
-	octets = 0;
-	*(tp = tmp) = 0;
-	while ((ch = *src++) != '\0') {
-		const char *pch;
-
-		pch = strchr(digits, ch);
-		if (pch != NULL) {
-			unsigned int new = *tp * 10 + (pch - digits);
-
-			if (new > 255)
-				return 0;
-			if (!saw_digit) {
-				if (++octets > 4)
-					return 0;
-				saw_digit = 1;
-			}
-			*tp = (unsigned char)new;
-		} else if (ch == '.' && saw_digit) {
-			if (octets == 4)
-				return 0;
-			*++tp = 0;
-			saw_digit = 0;
-		} else
-			return 0;
-	}
-	if (octets < 4)
-		return 0;
-
-	memcpy(dst, tmp, INADDRSZ);
-	return 1;
-}
-
-/* int
- * inet_pton6(src, dst)
- *      convert presentation level address to network order binary form.
- * return:
- *      1 if `src' is a valid [RFC1884 2.2] address, else 0.
- * notice:
- *      (1) does not touch `dst' unless it's returning 1.
- *      (2) :: in a full address is silently ignored.
- * credit:
- *      inspired by Mark Andrews.
- * author:
- *      Paul Vixie, 1996.
- */
-static int
-inet_pton6(const char *src, unsigned char *dst)
-{
-	static const char xdigits_l[] = "0123456789abcdef",
-		xdigits_u[] = "0123456789ABCDEF";
-	unsigned char tmp[IN6ADDRSZ], *tp = 0, *endp = 0, *colonp = 0;
-	const char *xdigits = 0, *curtok = 0;
-	int ch = 0, saw_xdigit = 0, count_xdigit = 0;
-	unsigned int val = 0;
-	unsigned dbloct_count = 0;
-
-	memset((tp = tmp), '\0', IN6ADDRSZ);
-	endp = tp + IN6ADDRSZ;
-	colonp = NULL;
-	/* Leading :: requires some special handling. */
-	if (*src == ':')
-		if (*++src != ':')
-			return 0;
-	curtok = src;
-	saw_xdigit = count_xdigit = 0;
-	val = 0;
-
-	while ((ch = *src++) != '\0') {
-		const char *pch;
-
-		pch = strchr((xdigits = xdigits_l), ch);
-		if (pch == NULL)
-			pch = strchr((xdigits = xdigits_u), ch);
-		if (pch != NULL) {
-			if (count_xdigit >= 4)
-				return 0;
-			val <<= 4;
-			val |= (pch - xdigits);
-			if (val > 0xffff)
-				return 0;
-			saw_xdigit = 1;
-			count_xdigit++;
-			continue;
-		}
-		if (ch == ':') {
-			curtok = src;
-			if (!saw_xdigit) {
-				if (colonp)
-					return 0;
-				colonp = tp;
-				continue;
-			} else if (*src == '\0') {
-				return 0;
-			}
-			if (tp + sizeof(int16_t) > endp)
-				return 0;
-			*tp++ = (unsigned char) ((val >> 8) & 0xff);
-			*tp++ = (unsigned char) (val & 0xff);
-			saw_xdigit = 0;
-			count_xdigit = 0;
-			val = 0;
-			dbloct_count++;
-			continue;
-		}
-		if (ch == '.' && ((tp + INADDRSZ) <= endp) &&
-		    inet_pton4(curtok, tp) > 0) {
-			tp += INADDRSZ;
-			saw_xdigit = 0;
-			dbloct_count += 2;
-			break;  /* '\0' was seen by inet_pton4(). */
-		}
-		return 0;
-	}
-	if (saw_xdigit) {
-		if (tp + sizeof(int16_t) > endp)
-			return 0;
-		*tp++ = (unsigned char) ((val >> 8) & 0xff);
-		*tp++ = (unsigned char) (val & 0xff);
-		dbloct_count++;
-	}
-	if (colonp != NULL) {
-		/* if we already have 8 double octets, having a colon
-		 * means error */
-		if (dbloct_count == 8)
-			return 0;
-
-		/*
-		 * Since some memmove()'s erroneously fail to handle
-		 * overlapping regions, we'll do the shift by hand.
-		 */
-		const int n = tp - colonp;
-		int i;
-
-		for (i = 1; i <= n; i++) {
-			endp[-i] = colonp[n - i];
-			colonp[n - i] = 0;
-		}
-		tp = endp;
-	}
-	if (tp != endp)
-		return 0;
-	memcpy(dst, tmp, IN6ADDRSZ);
-	return 1;
-}
-
 int
 parse_ipv4_addr(const char *token, struct in_addr *ipv4, uint32_t *mask)
 {
@@ -229,7 +66,7 @@ parse_ipv4_addr(const char *token, struct in_addr *ipv4, uint32_t *mask)
 	if (strlen(ip_str) >= INET_ADDRSTRLEN)
 		return -EINVAL;
 
-	if (inet_pton4(ip_str, (unsigned char *)ipv4) != 1)
+	if (inet_pton(AF_INET, ip_str, ipv4) != 1)
 		return -EINVAL;
 
 	return 0;
@@ -260,7 +97,7 @@ parse_ipv6_addr(const char *token, struct in6_addr *ipv6, uint32_t *mask)
 	if (strlen(ip_str) >= INET6_ADDRSTRLEN)
 		return -EINVAL;
 
-	if (inet_pton6(ip_str, (unsigned char *)ipv6) != 1)
+	if (inet_pton(AF_INET6, ip_str, ipv6) != 1)
 		return -EINVAL;
 
 	return 0;
-- 
2.27.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-11-09 18:40:11.382605693 +0000
+++ 0004-examples-ipsec-secgw-use-POSIX-network-address-conve.patch	2020-11-09 18:40:11.067310286 +0000
@@ -1 +1 @@
-From 4054466be9c64e72c37cffd840ab0f35a946a867 Mon Sep 17 00:00:00 2001
+From 3109cc617c1c882c3b44434d801a73eca8a5e4ed Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 4054466be9c64e72c37cffd840ab0f35a946a867 ]
+
@@ -21 +23 @@
-index 8f66660322..9069129914 100644
+index fc8c238fe5..dfabac2dbf 100644
@@ -34 +36 @@
-@@ -40,172 +43,6 @@ parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens)
+@@ -39,172 +42,6 @@ parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens)
@@ -207 +209 @@
-@@ -230,7 +67,7 @@ parse_ipv4_addr(const char *token, struct in_addr *ipv4, uint32_t *mask)
+@@ -229,7 +66,7 @@ parse_ipv4_addr(const char *token, struct in_addr *ipv4, uint32_t *mask)
@@ -216 +218 @@
-@@ -261,7 +98,7 @@ parse_ipv6_addr(const char *token, struct in6_addr *ipv6, uint32_t *mask)
+@@ -260,7 +97,7 @@ parse_ipv6_addr(const char *token, struct in6_addr *ipv6, uint32_t *mask)


More information about the stable mailing list