Previously, only the interface index was printed.
It is helpful to display the interface name, instead of letting the
reader doing the translation from the index to the name.
Because the index was already displayed before, keep it instead of
replacing it, just not to break some possible scripts parsing this
output.
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
ip/ipmptcp.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/ip/ipmptcp.c b/ip/ipmptcp.c
index acd008f3..5f194aca 100644
--- a/ip/ipmptcp.c
+++ b/ip/ipmptcp.c
@@ -471,6 +471,17 @@ static void print_addr(const char *key, int af, struct rtattr *value)
printf(" %s=%s", key, str);
}
+static void print_iface(int index)
+{
+ const char *ifname;
+
+ printf(" ifindex=%d", index);
+
+ ifname = index ? ll_index_to_name(index) : NULL;
+ if (ifname)
+ printf(" dev=%s", ifname);
+}
+
static int mptcp_monitor_msg(struct rtnl_ctrl_data *ctrl,
struct nlmsghdr *n, void *arg)
{
@@ -530,7 +541,7 @@ static int mptcp_monitor_msg(struct rtnl_ctrl_data *ctrl,
if (tb[MPTCP_ATTR_TIMEOUT])
printf(" timeout=%u", rta_getattr_u32(tb[MPTCP_ATTR_TIMEOUT]));
if (tb[MPTCP_ATTR_IF_IDX])
- printf(" ifindex=%d", rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
+ print_iface(rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
if (tb[MPTCP_ATTR_RESET_REASON])
printf(" reset_reason=%u", rta_getattr_u32(tb[MPTCP_ATTR_RESET_REASON]));
if (tb[MPTCP_ATTR_RESET_FLAGS])
--
2.51.0
On Wed, 11 Feb 2026 13:03:17 +0100
"Matthieu Baerts (NGI0)" <matttbe@kernel.org> wrote:
> @@ -530,7 +541,7 @@ static int mptcp_monitor_msg(struct rtnl_ctrl_data *ctrl,
> if (tb[MPTCP_ATTR_TIMEOUT])
> printf(" timeout=%u", rta_getattr_u32(tb[MPTCP_ATTR_TIMEOUT]));
> if (tb[MPTCP_ATTR_IF_IDX])
> - printf(" ifindex=%d", rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
> + print_iface(rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
> if (tb[MPTCP_ATTR_RESET_REASON])
> printf(" reset_reason=%u", rta_getattr_u32(tb[MPTCP_ATTR_RESET_REASON]));
> if (tb[MPTCP_ATTR_RESET_FLAGS])
The whole monitor message output format here is divergent from what other
iproute2 commands do. If you look at ip monitor there are no '=' signs
in the output.
Please fix the whole function. Ideally all of iproute commands should
support JSON in monitor mode as well. But that is a bigger effort.
Hi Stephen,
Thank you for the review!
On 18/02/2026 19:31, Stephen Hemminger wrote:
> On Wed, 11 Feb 2026 13:03:17 +0100
> "Matthieu Baerts (NGI0)" <matttbe@kernel.org> wrote:
>
>> @@ -530,7 +541,7 @@ static int mptcp_monitor_msg(struct rtnl_ctrl_data *ctrl,
>> if (tb[MPTCP_ATTR_TIMEOUT])
>> printf(" timeout=%u", rta_getattr_u32(tb[MPTCP_ATTR_TIMEOUT]));
>> if (tb[MPTCP_ATTR_IF_IDX])
>> - printf(" ifindex=%d", rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
>> + print_iface(rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
>> if (tb[MPTCP_ATTR_RESET_REASON])
>> printf(" reset_reason=%u", rta_getattr_u32(tb[MPTCP_ATTR_RESET_REASON]));
>> if (tb[MPTCP_ATTR_RESET_FLAGS])
>
>
> The whole monitor message output format here is divergent from what other
> iproute2 commands do. If you look at ip monitor there are no '=' signs
> in the output.
Indeed, the output is different from 'ip monitor' (but similar to 'ip
ioam monitor').
> Please fix the whole function.
Doing that would likely break scripts parsing 'ip mptcp monitor' output,
are you sure we should still change this output format?
Please note that compared to 'ip monitor', this commands can print quite
a few attributes, and I guess the '=' signs have been added to improve
the parsing (or even the reading?).
[ CREATED] token=d8392d7c remid=0 locid=0 saddr6=2001:db8:1234:5678:302e:d9cb:3bca:3d88 daddr6=2001:41d0:a:ffcf:1234:5678:8765:1 sport=57432 dport=443 deny_join_id0
[ ESTABLISHED] token=d8392d7c remid=0 locid=0 saddr6=2001:db8:1234:5678:302e:d9cb:3bca:3d88 daddr6=2001:41d0:a:ffcf:1234:5678:8765:1 sport=57432 dport=443 deny_join_id0
[ ANNOUNCED] token=d8392d7c remid=1 daddr4=5.196.67.297 dport=443
[ SF_ESTABLISHED] token=d8392d7c remid=0 locid=22 saddr6=2001:db8:1234:5678:20e:c6ff:fed9:8d06 daddr6=2001:41d0:a:ffcf:1234:5678:8765:1 sport=38949 dport=443 backup=0 ifindex=23
[ SF_PRIO] token=d8392d7c remid=0 locid=22 saddr6=2001:db8:1234:5678:20e:c6ff:fed9:8d06 daddr6=2001:41d0:a:ffcf:1234:5678:8765:1 sport=38949 dport=443 backup=1 ifindex=23
[ SF_ESTABLISHED] token=d8392d7c remid=0 locid=27 saddr6=2001:db8:1234:5678:d892:9a8:b192:3428 daddr6=2001:41d0:a:ffcf:1234:5678:8765:1 sport=53295 dport=443 backup=0 ifindex=5
[ SF_CLOSED] token=d8392d7c remid=0 locid=22 saddr6=2001:db8:1234:5678:20e:c6ff:fed9:8d06 daddr6=2001:41d0:a:ffcf:1234:5678:8765:1 sport=38949 dport=443 backup=1 ifindex=23 error=104
[ CLOSED] token=d8392d7c
The event type and the way it is displayed is also specific to 'ip mptcp
monitor'.
> Ideally all of iproute commands should
> support JSON in monitor mode as well. But that is a bigger effort.
I agree with you. I guess we copied the behaviour of 'ip monitor' here.
If there is a JSON support, we can probably more easily change the plain
text output format to force people to use the JSON one if still needed.
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
On Wed, 18 Feb 2026 20:03:20 +0100
Matthieu Baerts <matttbe@kernel.org> wrote:
> Hi Stephen,
>
> Thank you for the review!
>
> On 18/02/2026 19:31, Stephen Hemminger wrote:
> > On Wed, 11 Feb 2026 13:03:17 +0100
> > "Matthieu Baerts (NGI0)" <matttbe@kernel.org> wrote:
> >
> >> @@ -530,7 +541,7 @@ static int mptcp_monitor_msg(struct rtnl_ctrl_data *ctrl,
> >> if (tb[MPTCP_ATTR_TIMEOUT])
> >> printf(" timeout=%u", rta_getattr_u32(tb[MPTCP_ATTR_TIMEOUT]));
> >> if (tb[MPTCP_ATTR_IF_IDX])
> >> - printf(" ifindex=%d", rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
> >> + print_iface(rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
> >> if (tb[MPTCP_ATTR_RESET_REASON])
> >> printf(" reset_reason=%u", rta_getattr_u32(tb[MPTCP_ATTR_RESET_REASON]));
> >> if (tb[MPTCP_ATTR_RESET_FLAGS])
> >
> >
> > The whole monitor message output format here is divergent from what other
> > iproute2 commands do. If you look at ip monitor there are no '=' signs
> > in the output.
>
> Indeed, the output is different from 'ip monitor' (but similar to 'ip
> ioam monitor').
IMHO ioam monitor is outlier as well. Should have seen that during review.
>
> > Please fix the whole function.
>
> Doing that would likely break scripts parsing 'ip mptcp monitor' output,
> are you sure we should still change this output format?
I doubt scripts are parsing this weird format. That is one more reason for JSON
On 19/02/2026 18:11, Stephen Hemminger wrote:
> On Wed, 18 Feb 2026 20:03:20 +0100
> Matthieu Baerts <matttbe@kernel.org> wrote:
>
>> Hi Stephen,
>>
>> Thank you for the review!
>>
>> On 18/02/2026 19:31, Stephen Hemminger wrote:
>>> On Wed, 11 Feb 2026 13:03:17 +0100
>>> "Matthieu Baerts (NGI0)" <matttbe@kernel.org> wrote:
>>>
>>>> @@ -530,7 +541,7 @@ static int mptcp_monitor_msg(struct rtnl_ctrl_data *ctrl,
>>>> if (tb[MPTCP_ATTR_TIMEOUT])
>>>> printf(" timeout=%u", rta_getattr_u32(tb[MPTCP_ATTR_TIMEOUT]));
>>>> if (tb[MPTCP_ATTR_IF_IDX])
>>>> - printf(" ifindex=%d", rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
>>>> + print_iface(rta_getattr_s32(tb[MPTCP_ATTR_IF_IDX]));
>>>> if (tb[MPTCP_ATTR_RESET_REASON])
>>>> printf(" reset_reason=%u", rta_getattr_u32(tb[MPTCP_ATTR_RESET_REASON]));
>>>> if (tb[MPTCP_ATTR_RESET_FLAGS])
>>>
>>>
>>> The whole monitor message output format here is divergent from what other
>>> iproute2 commands do. If you look at ip monitor there are no '=' signs
>>> in the output.
>>
>> Indeed, the output is different from 'ip monitor' (but similar to 'ip
>> ioam monitor').
>
> IMHO ioam monitor is outlier as well. Should have seen that during review.
>
>>
>>> Please fix the whole function.
>>
>> Doing that would likely break scripts parsing 'ip mptcp monitor' output,
>> are you sure we should still change this output format?
>
> I doubt scripts are parsing this weird format. That is one more reason for JSON
Not as weird as 'ss -i' format where there are even more scripts parsing
that :)
I just added a task to add JSON support to 'ip mptcp monitor':
https://github.com/multipath-tcp/mptcp_net-next/issues/614
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
On Thu, 19 Feb 2026 18:38:51 +0100 Matthieu Baerts <matttbe@kernel.org> wrote: > >>> Please fix the whole function. > >> > >> Doing that would likely break scripts parsing 'ip mptcp monitor' output, > >> are you sure we should still change this output format? > > > > I doubt scripts are parsing this weird format. That is one more reason for JSON > > Not as weird as 'ss -i' format where there are even more scripts parsing > that :) Agreed ss is a RFM. I did take a shot at doing JSON there (with some help from Claude), just haven't gotten back to it.
On 19/02/2026 20:22, Stephen Hemminger wrote: > On Thu, 19 Feb 2026 18:38:51 +0100 > Matthieu Baerts <matttbe@kernel.org> wrote: > >>>>> Please fix the whole function. >>>> >>>> Doing that would likely break scripts parsing 'ip mptcp monitor' output, >>>> are you sure we should still change this output format? >>> >>> I doubt scripts are parsing this weird format. That is one more reason for JSON >> >> Not as weird as 'ss -i' format where there are even more scripts parsing >> that :) > > Agreed ss is a RFM. > I did take a shot at doing JSON there (with some help from Claude), just haven't gotten back to it. That would be great to have! Thank you for having started! Cheers, Matt -- Sponsored by the NGI0 Core fund.
© 2016 - 2026 Red Hat, Inc.