]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
mptcp: add id check for deleting address
authorGeliang Tang <geliang.tang@suse.com>
Sat, 15 Jan 2022 16:04:33 +0000 (00:04 +0800)
committerStephen Hemminger <stephen@networkplumber.org>
Wed, 19 Jan 2022 20:41:41 +0000 (12:41 -0800)
This patch added the id check for deleting address in mptcp_parse_opt().
The ADDRESS argument is invalid for the non-zero id address, only needed
for the id 0 address.

 # ip mptcp endpoint delete id 1
 # ip mptcp endpoint delete id 0 10.0.1.1

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Acked-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
ip/ipmptcp.c
man/man8/ip-mptcp.8

index e7150138821b678793b9e8462e979af8a7d44fb0..eef7c6f40b4781175606265659b3157f9eee2010 100644 (file)
@@ -24,7 +24,7 @@ static void usage(void)
        fprintf(stderr,
                "Usage: ip mptcp endpoint add ADDRESS [ dev NAME ] [ id ID ]\n"
                "                                     [ port NR ] [ FLAG-LIST ]\n"
-               "       ip mptcp endpoint delete id ID\n"
+               "       ip mptcp endpoint delete id ID [ ADDRESS ]\n"
                "       ip mptcp endpoint change id ID [ backup | nobackup ]\n"
                "       ip mptcp endpoint show [ id ID ]\n"
                "       ip mptcp endpoint flush\n"
@@ -103,6 +103,7 @@ static int get_flags(const char *arg, __u32 *flags)
 static int mptcp_parse_opt(int argc, char **argv, struct nlmsghdr *n, int cmd)
 {
        bool adding = cmd == MPTCP_PM_CMD_ADD_ADDR;
+       bool deling = cmd == MPTCP_PM_CMD_DEL_ADDR;
        struct rtattr *attr_addr;
        bool addr_set = false;
        inet_prefix address;
@@ -156,8 +157,14 @@ static int mptcp_parse_opt(int argc, char **argv, struct nlmsghdr *n, int cmd)
        if (!addr_set && adding)
                missarg("ADDRESS");
 
-       if (!id_set && !adding)
+       if (!id_set && deling) {
                missarg("ID");
+       } else if (id_set && deling) {
+               if (id && addr_set)
+                       invarg("invalid for non-zero id address\n", "ADDRESS");
+               else if (!id && !addr_set)
+                       invarg("address is needed for deleting id 0 address\n", "ID");
+       }
 
        if (port && !(flags & MPTCP_PM_ADDR_FLAG_SIGNAL))
                invarg("flags must have signal when using port", "port");
index 0e6e153215c1259faf27ac314c8e5e8d5611026e..0e789225adabfba68099b12b6757b8d19d5d3523 100644 (file)
@@ -31,8 +31,11 @@ ip-mptcp \- MPTCP path manager configuration
 .RB "] "
 
 .ti -8
-.BR "ip mptcp endpoint del id "
+.BR "ip mptcp endpoint delete id "
 .I ID
+.RB "[ "
+.I IFADDR
+.RB "] "
 
 .ti -8
 .BR "ip mptcp endpoint change id "
@@ -107,6 +110,16 @@ ip mptcp endpoint show     get existing MPTCP endpoint
 ip mptcp endpoint flush        flush all existing MPTCP endpoints
 .TE
 
+.TP
+.IR IFADDR
+An IPv4 or IPv6 address. When used with the
+.B delete id
+operation, an
+.B IFADDR
+is only included when the
+.B ID
+is 0.
+
 .TP
 .IR PORT
 When a port number is specified, incoming MPTCP subflows for already
@@ -114,6 +127,7 @@ established MPTCP sockets will be accepted on the specified port, regardless
 the original listener port accepting the first MPTCP subflow and/or
 this peer being actually on the client side.
 
+.TP
 .IR ID
 is a unique numeric identifier for the given endpoint