All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH iproute2-next v2 0/2] add support for tunsrc
@ 2024-08-26 13:52 Justin Iurman
  2024-08-26 13:52 ` [PATCH iproute2-next v2 1/2] ip: lwtunnel: tunsrc support Justin Iurman
  2024-08-26 13:52 ` [PATCH iproute2-next v2 2/2] man8: ip-route: update documentation Justin Iurman
  0 siblings, 2 replies; 6+ messages in thread
From: Justin Iurman @ 2024-08-26 13:52 UTC (permalink / raw)
  To: netdev; +Cc: dsahern, justin.iurman

v2:
- removed uapi patch (@David please pull from net-next, thanks)

This patchset provides support for the new ioam6 feature called
"tunsrc".

Justin Iurman (2):
  ip: lwtunnel: tunsrc support
  man8: ip-route: update documentation

 ip/iproute_lwtunnel.c  | 40 ++++++++++++++++++++++++++++++++++------
 man/man8/ip-route.8.in |  8 ++++++++
 2 files changed, 42 insertions(+), 6 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH iproute2-next v2 1/2] ip: lwtunnel: tunsrc support
  2024-08-26 13:52 [PATCH iproute2-next v2 0/2] add support for tunsrc Justin Iurman
@ 2024-08-26 13:52 ` Justin Iurman
  2024-08-26 15:59   ` Stephen Hemminger
  2024-08-26 13:52 ` [PATCH iproute2-next v2 2/2] man8: ip-route: update documentation Justin Iurman
  1 sibling, 1 reply; 6+ messages in thread
From: Justin Iurman @ 2024-08-26 13:52 UTC (permalink / raw)
  To: netdev; +Cc: dsahern, justin.iurman

Add support for setting/getting the new "tunsrc" feature.

Signed-off-by: Justin Iurman <justin.iurman@uliege.be>
---
 ip/iproute_lwtunnel.c | 40 ++++++++++++++++++++++++++++++++++------
 1 file changed, 34 insertions(+), 6 deletions(-)

diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c
index b4df4348..009045cb 100644
--- a/ip/iproute_lwtunnel.c
+++ b/ip/iproute_lwtunnel.c
@@ -352,14 +352,22 @@ static void print_encap_ioam6(FILE *fp, struct rtattr *encap)
 	print_uint(PRINT_ANY, "freqn", "/%u ", freq_n);
 
 	mode = rta_getattr_u8(tb[IOAM6_IPTUNNEL_MODE]);
-	if (!tb[IOAM6_IPTUNNEL_DST] && mode != IOAM6_IPTUNNEL_MODE_INLINE)
+	if ((tb[IOAM6_IPTUNNEL_SRC] && mode == IOAM6_IPTUNNEL_MODE_INLINE) ||
+	    (!tb[IOAM6_IPTUNNEL_DST] && mode != IOAM6_IPTUNNEL_MODE_INLINE))
 		return;
 
 	print_string(PRINT_ANY, "mode", "mode %s ", format_ioam6mode_type(mode));
 
-	if (mode != IOAM6_IPTUNNEL_MODE_INLINE)
+	if (mode != IOAM6_IPTUNNEL_MODE_INLINE) {
+		if (tb[IOAM6_IPTUNNEL_SRC]) {
+			print_string(PRINT_ANY, "tunsrc", "tunsrc %s ",
+				     rt_addr_n2a_rta(AF_INET6,
+						     tb[IOAM6_IPTUNNEL_SRC]));
+		}
+
 		print_string(PRINT_ANY, "tundst", "tundst %s ",
 			     rt_addr_n2a_rta(AF_INET6, tb[IOAM6_IPTUNNEL_DST]));
+	}
 
 	trace = RTA_DATA(tb[IOAM6_IPTUNNEL_TRACE]);
 
@@ -1111,11 +1119,12 @@ static int parse_encap_ioam6(struct rtattr *rta, size_t len, int *argcp,
 	int ns_found = 0, argc = *argcp;
 	__u16 trace_ns, trace_size = 0;
 	struct ioam6_trace_hdr *trace;
+	inet_prefix saddr, daddr;
 	char **argv = *argvp;
 	__u32 trace_type = 0;
 	__u32 freq_k, freq_n;
 	char buf[16] = {0};
-	inet_prefix addr;
+	bool has_src;
 	__u8 mode;
 
 	if (strcmp(*argv, "freq") != 0) {
@@ -1158,6 +1167,23 @@ static int parse_encap_ioam6(struct rtattr *rta, size_t len, int *argcp,
 		NEXT_ARG();
 	}
 
+	if (strcmp(*argv, "tunsrc") != 0) {
+		has_src = false;
+	} else {
+		has_src = true;
+
+		if (mode == IOAM6_IPTUNNEL_MODE_INLINE)
+			invarg("Inline mode does not need tunsrc", *argv);
+
+		NEXT_ARG();
+
+		get_addr(&saddr, *argv, AF_INET6);
+		if (saddr.family != AF_INET6 || saddr.bytelen != 16)
+			invarg("Invalid IPv6 address for tunsrc", *argv);
+
+		NEXT_ARG();
+	}
+
 	if (strcmp(*argv, "tundst") != 0) {
 		if (mode != IOAM6_IPTUNNEL_MODE_INLINE)
 			missarg("tundst");
@@ -1167,8 +1193,8 @@ static int parse_encap_ioam6(struct rtattr *rta, size_t len, int *argcp,
 
 		NEXT_ARG();
 
-		get_addr(&addr, *argv, AF_INET6);
-		if (addr.family != AF_INET6 || addr.bytelen != 16)
+		get_addr(&daddr, *argv, AF_INET6);
+		if (daddr.family != AF_INET6 || daddr.bytelen != 16)
 			invarg("Invalid IPv6 address for tundst", *argv);
 
 		NEXT_ARG();
@@ -1239,8 +1265,10 @@ static int parse_encap_ioam6(struct rtattr *rta, size_t len, int *argcp,
 	if (rta_addattr32(rta, len, IOAM6_IPTUNNEL_FREQ_K, freq_k) ||
 	    rta_addattr32(rta, len, IOAM6_IPTUNNEL_FREQ_N, freq_n) ||
 	    rta_addattr8(rta, len, IOAM6_IPTUNNEL_MODE, mode) ||
+	    (mode != IOAM6_IPTUNNEL_MODE_INLINE && has_src &&
+	     rta_addattr_l(rta, len, IOAM6_IPTUNNEL_SRC, &saddr.data, saddr.bytelen)) ||
 	    (mode != IOAM6_IPTUNNEL_MODE_INLINE &&
-	     rta_addattr_l(rta, len, IOAM6_IPTUNNEL_DST, &addr.data, addr.bytelen)) ||
+	     rta_addattr_l(rta, len, IOAM6_IPTUNNEL_DST, &daddr.data, daddr.bytelen)) ||
 	    rta_addattr_l(rta, len, IOAM6_IPTUNNEL_TRACE, trace, sizeof(*trace))) {
 		free(trace);
 		return -1;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH iproute2-next v2 2/2] man8: ip-route: update documentation
  2024-08-26 13:52 [PATCH iproute2-next v2 0/2] add support for tunsrc Justin Iurman
  2024-08-26 13:52 ` [PATCH iproute2-next v2 1/2] ip: lwtunnel: tunsrc support Justin Iurman
@ 2024-08-26 13:52 ` Justin Iurman
  1 sibling, 0 replies; 6+ messages in thread
From: Justin Iurman @ 2024-08-26 13:52 UTC (permalink / raw)
  To: netdev; +Cc: dsahern, justin.iurman

Include "tunsrc" in the man page.

Signed-off-by: Justin Iurman <justin.iurman@uliege.be>
---
 man/man8/ip-route.8.in | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/man/man8/ip-route.8.in b/man/man8/ip-route.8.in
index df49f8b0..676f289a 100644
--- a/man/man8/ip-route.8.in
+++ b/man/man8/ip-route.8.in
@@ -253,6 +253,8 @@ throw " | " unreachable " | " prohibit " | " blackhole " | " nat " ]"
 .IR K "/" N " ] "
 .BR mode " [ "
 .BR inline " | " encap " | " auto " ] ["
+.B tunsrc
+.IR ADDRESS " ] ["
 .B tundst
 .IR ADDRESS " ] "
 .B trace
@@ -1037,6 +1039,12 @@ divisible by 8. This attribute can be used only with NEXT-C-SID flavor.
 packets.
 .sp
 
+.B tunsrc
+.I ADDRESS
+- IPv6 address of the tunnel source (outer header), not used with inline mode.
+It is optional: if not provided, the tunnel source address is chosen
+automatically.
+
 .B tundst
 .I ADDRESS
 - IPv6 address of the tunnel destination (outer header), not used with inline
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH iproute2-next v2 1/2] ip: lwtunnel: tunsrc support
  2024-08-26 13:52 ` [PATCH iproute2-next v2 1/2] ip: lwtunnel: tunsrc support Justin Iurman
@ 2024-08-26 15:59   ` Stephen Hemminger
  2024-08-27  7:41     ` Justin Iurman
  0 siblings, 1 reply; 6+ messages in thread
From: Stephen Hemminger @ 2024-08-26 15:59 UTC (permalink / raw)
  To: Justin Iurman; +Cc: netdev, dsahern

On Mon, 26 Aug 2024 15:52:28 +0200
Justin Iurman <justin.iurman@uliege.be> wrote:

> -	if (mode != IOAM6_IPTUNNEL_MODE_INLINE)
> +	if (mode != IOAM6_IPTUNNEL_MODE_INLINE) {
> +		if (tb[IOAM6_IPTUNNEL_SRC]) {
> +			print_string(PRINT_ANY, "tunsrc", "tunsrc %s ",
> +				     rt_addr_n2a_rta(AF_INET6,
> +						     tb[IOAM6_IPTUNNEL_SRC]));
> +		}
> +
>  		print_string(PRINT_ANY, "tundst", "tundst %s ",
>  			     rt_addr_n2a_rta(AF_INET6, tb[IOAM6_IPTUNNEL_DST]));
> +	}

Looks good.
These strings should be printed with
		print_color_string(PRINT_ANY, COLOR_INET6, ...

but that is not urgent. Just to follow convention.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH iproute2-next v2 1/2] ip: lwtunnel: tunsrc support
  2024-08-26 15:59   ` Stephen Hemminger
@ 2024-08-27  7:41     ` Justin Iurman
  2024-08-28 22:22       ` David Ahern
  0 siblings, 1 reply; 6+ messages in thread
From: Justin Iurman @ 2024-08-27  7:41 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: netdev, dsahern

On 8/26/24 17:59, Stephen Hemminger wrote:
> On Mon, 26 Aug 2024 15:52:28 +0200
> Justin Iurman <justin.iurman@uliege.be> wrote:
> 
>> -	if (mode != IOAM6_IPTUNNEL_MODE_INLINE)
>> +	if (mode != IOAM6_IPTUNNEL_MODE_INLINE) {
>> +		if (tb[IOAM6_IPTUNNEL_SRC]) {
>> +			print_string(PRINT_ANY, "tunsrc", "tunsrc %s ",
>> +				     rt_addr_n2a_rta(AF_INET6,
>> +						     tb[IOAM6_IPTUNNEL_SRC]));
>> +		}
>> +
>>   		print_string(PRINT_ANY, "tundst", "tundst %s ",
>>   			     rt_addr_n2a_rta(AF_INET6, tb[IOAM6_IPTUNNEL_DST]));
>> +	}
> 
> Looks good.
> These strings should be printed with
> 		print_color_string(PRINT_ANY, COLOR_INET6, ...
> 
> but that is not urgent. Just to follow convention.

Ack, thanks! I can submit -v3 now to include the change though. WDYT?

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH iproute2-next v2 1/2] ip: lwtunnel: tunsrc support
  2024-08-27  7:41     ` Justin Iurman
@ 2024-08-28 22:22       ` David Ahern
  0 siblings, 0 replies; 6+ messages in thread
From: David Ahern @ 2024-08-28 22:22 UTC (permalink / raw)
  To: Justin Iurman, Stephen Hemminger; +Cc: netdev

On 8/27/24 1:41 AM, Justin Iurman wrote:
> On 8/26/24 17:59, Stephen Hemminger wrote:
>> On Mon, 26 Aug 2024 15:52:28 +0200
>> Justin Iurman <justin.iurman@uliege.be> wrote:
>>
>>> -    if (mode != IOAM6_IPTUNNEL_MODE_INLINE)
>>> +    if (mode != IOAM6_IPTUNNEL_MODE_INLINE) {
>>> +        if (tb[IOAM6_IPTUNNEL_SRC]) {
>>> +            print_string(PRINT_ANY, "tunsrc", "tunsrc %s ",
>>> +                     rt_addr_n2a_rta(AF_INET6,
>>> +                             tb[IOAM6_IPTUNNEL_SRC]));
>>> +        }
>>> +
>>>           print_string(PRINT_ANY, "tundst", "tundst %s ",
>>>                    rt_addr_n2a_rta(AF_INET6, tb[IOAM6_IPTUNNEL_DST]));
>>> +    }
>>
>> Looks good.
>> These strings should be printed with
>>         print_color_string(PRINT_ANY, COLOR_INET6, ...
>>
>> but that is not urgent. Just to follow convention.
> 
> Ack, thanks! I can submit -v3 now to include the change though. WDYT?

sure. send an update now. I most likely will not have time to update the
headers and commit until this weekend.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-08-28 22:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-26 13:52 [PATCH iproute2-next v2 0/2] add support for tunsrc Justin Iurman
2024-08-26 13:52 ` [PATCH iproute2-next v2 1/2] ip: lwtunnel: tunsrc support Justin Iurman
2024-08-26 15:59   ` Stephen Hemminger
2024-08-27  7:41     ` Justin Iurman
2024-08-28 22:22       ` David Ahern
2024-08-26 13:52 ` [PATCH iproute2-next v2 2/2] man8: ip-route: update documentation Justin Iurman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.