* [PATCH mptcp-next v4 0/2] add the id argument for set_flags
@ 2022-01-26 2:35 Geliang Tang
2022-01-26 2:35 ` [PATCH mptcp-next v4 1/2] selftests: mptcp: " Geliang Tang
2022-01-26 2:35 ` [PATCH mptcp-next v4 2/2] selftests: mptcp: add set_flags tests in pm_netlink.sh Geliang Tang
0 siblings, 2 replies; 3+ messages in thread
From: Geliang Tang @ 2022-01-26 2:35 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
v4:
- update the output of pm_netlink.sh
v3:
- update the usage of set_flags in #1
- check more of the intermediate states with "pm_nl_ctl dump" in #2
v2:
- make standalone patches, instead of squash-to ones.
- add test cases in pm_netlink.sh, instead of mptcp_join.sh
Add the id argument for 'pm_nl_ctl set', and allow to use the port keyword
with the non-signal flags for the setting flags in 'ip mptcp endpoint
change', more commands can be used to set the address flags:
pm_nl_ctl set 10.0.2.1 flags backup port 10100
pm_nl_ctl set id 1 flags backup
ip mptcp endpoint change id 1 backup
ip mptcp endpoint change 10.0.2.1 backup port 10100
Geliang Tang (2):
selftests: mptcp: add the id argument for set_flags
selftests: mptcp: add set_flags tests in pm_netlink.sh
.../testing/selftests/net/mptcp/pm_netlink.sh | 18 ++++++
tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 63 ++++++++++++-------
2 files changed, 60 insertions(+), 21 deletions(-)
--
2.31.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH mptcp-next v4 1/2] selftests: mptcp: add the id argument for set_flags
2022-01-26 2:35 [PATCH mptcp-next v4 0/2] add the id argument for set_flags Geliang Tang
@ 2022-01-26 2:35 ` Geliang Tang
2022-01-26 2:35 ` [PATCH mptcp-next v4 2/2] selftests: mptcp: add set_flags tests in pm_netlink.sh Geliang Tang
1 sibling, 0 replies; 3+ messages in thread
From: Geliang Tang @ 2022-01-26 2:35 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch added the id argument for setting the address flags in
pm_nl_ctl.
Usage:
pm_nl_ctl set id 1 flags backup
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 63 ++++++++++++-------
1 file changed, 42 insertions(+), 21 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
index 2a57462764d0..22a5ec1e128e 100644
--- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
+++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
@@ -28,7 +28,7 @@ static void syntax(char *argv[])
fprintf(stderr, "\tadd [flags signal|subflow|backup|fullmesh] [id <nr>] [dev <name>] <ip>\n");
fprintf(stderr, "\tdel <id> [<ip>]\n");
fprintf(stderr, "\tget <id>\n");
- fprintf(stderr, "\tset <ip> [flags backup|nobackup|fullmesh|nofullmesh] [port <nr>]\n");
+ fprintf(stderr, "\tset [<ip>] [id <nr>] flags [no]backup|[no]fullmesh [port <nr>]\n");
fprintf(stderr, "\tflush\n");
fprintf(stderr, "\tdump\n");
fprintf(stderr, "\tlimits [<rcv addr max> <subflow max>]\n");
@@ -657,8 +657,10 @@ int set_flags(int fd, int pm_family, int argc, char *argv[])
u_int32_t flags = 0;
u_int16_t family;
int nest_start;
+ int use_id = 0;
+ u_int8_t id;
int off = 0;
- int arg;
+ int arg = 2;
memset(data, 0, sizeof(data));
nh = (void *)data;
@@ -674,29 +676,45 @@ int set_flags(int fd, int pm_family, int argc, char *argv[])
nest->rta_len = RTA_LENGTH(0);
off += NLMSG_ALIGN(nest->rta_len);
- /* addr data */
- rta = (void *)(data + off);
- if (inet_pton(AF_INET, argv[2], RTA_DATA(rta))) {
- family = AF_INET;
- rta->rta_type = MPTCP_PM_ADDR_ATTR_ADDR4;
- rta->rta_len = RTA_LENGTH(4);
- } else if (inet_pton(AF_INET6, argv[2], RTA_DATA(rta))) {
- family = AF_INET6;
- rta->rta_type = MPTCP_PM_ADDR_ATTR_ADDR6;
- rta->rta_len = RTA_LENGTH(16);
+ if (!strcmp(argv[arg], "id")) {
+ if (++arg >= argc)
+ error(1, 0, " missing id value");
+
+ use_id = 1;
+ id = atoi(argv[arg]);
+ rta = (void *)(data + off);
+ rta->rta_type = MPTCP_PM_ADDR_ATTR_ID;
+ rta->rta_len = RTA_LENGTH(1);
+ memcpy(RTA_DATA(rta), &id, 1);
+ off += NLMSG_ALIGN(rta->rta_len);
} else {
- error(1, errno, "can't parse ip %s", argv[2]);
+ /* addr data */
+ rta = (void *)(data + off);
+ if (inet_pton(AF_INET, argv[arg], RTA_DATA(rta))) {
+ family = AF_INET;
+ rta->rta_type = MPTCP_PM_ADDR_ATTR_ADDR4;
+ rta->rta_len = RTA_LENGTH(4);
+ } else if (inet_pton(AF_INET6, argv[arg], RTA_DATA(rta))) {
+ family = AF_INET6;
+ rta->rta_type = MPTCP_PM_ADDR_ATTR_ADDR6;
+ rta->rta_len = RTA_LENGTH(16);
+ } else {
+ error(1, errno, "can't parse ip %s", argv[arg]);
+ }
+ off += NLMSG_ALIGN(rta->rta_len);
+
+ /* family */
+ rta = (void *)(data + off);
+ rta->rta_type = MPTCP_PM_ADDR_ATTR_FAMILY;
+ rta->rta_len = RTA_LENGTH(2);
+ memcpy(RTA_DATA(rta), &family, 2);
+ off += NLMSG_ALIGN(rta->rta_len);
}
- off += NLMSG_ALIGN(rta->rta_len);
- /* family */
- rta = (void *)(data + off);
- rta->rta_type = MPTCP_PM_ADDR_ATTR_FAMILY;
- rta->rta_len = RTA_LENGTH(2);
- memcpy(RTA_DATA(rta), &family, 2);
- off += NLMSG_ALIGN(rta->rta_len);
+ if (++arg >= argc)
+ error(1, 0, " missing flags keyword");
- for (arg = 3; arg < argc; arg++) {
+ for (; arg < argc; arg++) {
if (!strcmp(argv[arg], "flags")) {
char *tok, *str;
@@ -724,6 +742,9 @@ int set_flags(int fd, int pm_family, int argc, char *argv[])
} else if (!strcmp(argv[arg], "port")) {
u_int16_t port;
+ if (use_id)
+ error(1, 0, " port can't be used with id");
+
if (++arg >= argc)
error(1, 0, " missing port value");
--
2.31.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH mptcp-next v4 2/2] selftests: mptcp: add set_flags tests in pm_netlink.sh
2022-01-26 2:35 [PATCH mptcp-next v4 0/2] add the id argument for set_flags Geliang Tang
2022-01-26 2:35 ` [PATCH mptcp-next v4 1/2] selftests: mptcp: " Geliang Tang
@ 2022-01-26 2:35 ` Geliang Tang
1 sibling, 0 replies; 3+ messages in thread
From: Geliang Tang @ 2022-01-26 2:35 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch added the setting flags test cases, using both addr-based and
id-based lookups for the setting address.
The output looks like this:
set flags (backup) [ OK ]
set flags (nobackup) [ OK ]
set flags (fullmesh) [ OK ]
set flags (nofullmesh) [ OK ]
set flags (backup,fullmesh) [ OK ]
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/net/mptcp/pm_netlink.sh | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/pm_netlink.sh b/tools/testing/selftests/net/mptcp/pm_netlink.sh
index cbacf9f6538b..82c056a7ae8f 100755
--- a/tools/testing/selftests/net/mptcp/pm_netlink.sh
+++ b/tools/testing/selftests/net/mptcp/pm_netlink.sh
@@ -164,4 +164,22 @@ id 253 flags 10.0.0.5
id 254 flags 10.0.0.2
id 255 flags 10.0.0.3" "wrap-around ids"
+ip netns exec $ns1 ./pm_nl_ctl flush
+ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 flags subflow
+ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags backup
+check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
+subflow,backup 10.0.1.1" "set flags (backup)"
+ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags nobackup
+check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
+subflow 10.0.1.1" "set flags (nobackup)"
+ip netns exec $ns1 ./pm_nl_ctl set id 1 flags fullmesh
+check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
+subflow,fullmesh 10.0.1.1" "set flags (fullmesh)"
+ip netns exec $ns1 ./pm_nl_ctl set id 1 flags nofullmesh
+check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
+subflow 10.0.1.1" "set flags (nofullmesh)"
+ip netns exec $ns1 ./pm_nl_ctl set id 1 flags backup,fullmesh
+check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
+subflow,backup,fullmesh 10.0.1.1" "set flags (backup,fullmesh)"
+
exit $ret
--
2.31.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-01-26 2:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-26 2:35 [PATCH mptcp-next v4 0/2] add the id argument for set_flags Geliang Tang
2022-01-26 2:35 ` [PATCH mptcp-next v4 1/2] selftests: mptcp: " Geliang Tang
2022-01-26 2:35 ` [PATCH mptcp-next v4 2/2] selftests: mptcp: add set_flags tests in pm_netlink.sh Geliang Tang
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.