* [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.