Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'mptcp-improve-set-flags-command-and-update-self-tests'

Mat Martineau says:

====================
mptcp: Improve set-flags command and update self tests

Patches 1-3 allow more flexibility in the combinations of features and
flags allowed with the MPTCP_PM_CMD_SET_FLAGS netlink command, and add
self test case coverage for the new functionality.

Patches 4-6 and 9 refactor the mptcp_join.sh self tests to allow them to
configure all of the test cases using either the pm_nl_ctl utility (part
of the mptcp self tests) or the 'ip mptcp' command (from iproute2). The
default remains to use pm_nl_ctl.

Patches 7 and 8 update the pm_netlink.sh self tests to cover the use of
endpoint ids to set endpoint flags (instead of just addresses).
====================

Link: https://lore.kernel.org/r/20220205000337.187292-1-mathew.j.martineau@linux.intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+595 -388
+6 -7
net/mptcp/pm_netlink.c
··· 1174 1174 if (tb[MPTCP_PM_ADDR_ATTR_FLAGS]) 1175 1175 entry->flags = nla_get_u32(tb[MPTCP_PM_ADDR_ATTR_FLAGS]); 1176 1176 1177 - if (tb[MPTCP_PM_ADDR_ATTR_PORT]) { 1178 - if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { 1179 - NL_SET_ERR_MSG_ATTR(info->extack, attr, 1180 - "flags must have signal when using port"); 1181 - return -EINVAL; 1182 - } 1177 + if (tb[MPTCP_PM_ADDR_ATTR_PORT]) 1183 1178 entry->addr.port = htons(nla_get_u16(tb[MPTCP_PM_ADDR_ATTR_PORT])); 1184 - } 1185 1179 1186 1180 return 0; 1187 1181 } ··· 1220 1226 ret = mptcp_pm_parse_addr(attr, info, true, &addr); 1221 1227 if (ret < 0) 1222 1228 return ret; 1229 + 1230 + if (addr.addr.port && !(addr.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { 1231 + GENL_SET_ERR_MSG(info, "flags must have signal when using port"); 1232 + return -EINVAL; 1233 + } 1223 1234 1224 1235 entry = kmalloc(sizeof(*entry), GFP_KERNEL); 1225 1236 if (!entry) {
+517 -360
tools/testing/selftests/net/mptcp/mptcp_join.sh
··· 15 15 mptcp_connect="" 16 16 capture=0 17 17 checksum=0 18 + ip_mptcp=0 18 19 do_all_tests=1 19 20 20 21 TEST_COUNT=0 ··· 240 239 [ -z "${1##*:*}" ] 241 240 } 242 241 242 + is_addr() 243 + { 244 + [ -z "${1##*[.:]*}" ] 245 + } 246 + 247 + is_number() 248 + { 249 + [[ $1 == ?(-)+([0-9]) ]] 250 + } 251 + 243 252 # $1: ns, $2: port 244 253 wait_local_port_listen() 245 254 { ··· 287 276 [ "$cnt" = "${old_cnt}" ] || break 288 277 sleep 0.1 289 278 done 279 + } 280 + 281 + pm_nl_set_limits() 282 + { 283 + local ns=$1 284 + local addrs=$2 285 + local subflows=$3 286 + 287 + if [ $ip_mptcp -eq 1 ]; then 288 + ip -n $ns mptcp limits set add_addr_accepted $addrs subflows $subflows 289 + else 290 + ip netns exec $ns ./pm_nl_ctl limits $addrs $subflows 291 + fi 292 + } 293 + 294 + pm_nl_add_endpoint() 295 + { 296 + local ns=$1 297 + local addr=$2 298 + local flags 299 + local port 300 + local dev 301 + local id 302 + local nr=2 303 + 304 + for p in $@ 305 + do 306 + if [ $p = "flags" ]; then 307 + eval _flags=\$"$nr" 308 + [ ! -z $_flags ]; flags="flags $_flags" 309 + fi 310 + if [ $p = "dev" ]; then 311 + eval _dev=\$"$nr" 312 + [ ! -z $_dev ]; dev="dev $_dev" 313 + fi 314 + if [ $p = "id" ]; then 315 + eval _id=\$"$nr" 316 + [ ! -z $_id ]; id="id $_id" 317 + fi 318 + if [ $p = "port" ]; then 319 + eval _port=\$"$nr" 320 + [ ! -z $_port ]; port="port $_port" 321 + fi 322 + 323 + let nr+=1 324 + done 325 + 326 + if [ $ip_mptcp -eq 1 ]; then 327 + ip -n $ns mptcp endpoint add $addr ${_flags//","/" "} $dev $id $port 328 + else 329 + ip netns exec $ns ./pm_nl_ctl add $addr $flags $dev $id $port 330 + fi 331 + } 332 + 333 + pm_nl_del_endpoint() 334 + { 335 + local ns=$1 336 + local id=$2 337 + local addr=$3 338 + 339 + if [ $ip_mptcp -eq 1 ]; then 340 + ip -n $ns mptcp endpoint delete id $id $addr 341 + else 342 + ip netns exec $ns ./pm_nl_ctl del $id $addr 343 + fi 344 + } 345 + 346 + pm_nl_flush_endpoint() 347 + { 348 + local ns=$1 349 + 350 + if [ $ip_mptcp -eq 1 ]; then 351 + ip -n $ns mptcp endpoint flush 352 + else 353 + ip netns exec $ns ./pm_nl_ctl flush 354 + fi 355 + } 356 + 357 + pm_nl_show_endpoints() 358 + { 359 + local ns=$1 360 + 361 + if [ $ip_mptcp -eq 1 ]; then 362 + ip -n $ns mptcp endpoint show 363 + else 364 + ip netns exec $ns ./pm_nl_ctl dump 365 + fi 366 + } 367 + 368 + pm_nl_change_endpoint() 369 + { 370 + local ns=$1 371 + local flags=$2 372 + local id=$3 373 + local addr=$4 374 + local port="" 375 + 376 + if [ $ip_mptcp -eq 1 ]; then 377 + ip -n $ns mptcp endpoint change id $id ${flags//","/" "} 378 + else 379 + if [ $5 -ne 0 ]; then port="port $5"; fi 380 + ip netns exec $ns ./pm_nl_ctl set $addr flags $flags $port 381 + fi 290 382 } 291 383 292 384 do_transfer() ··· 492 378 else 493 379 addr="10.0.$counter.1" 494 380 fi 495 - ip netns exec $ns1 ./pm_nl_ctl add $addr flags signal 381 + pm_nl_add_endpoint $ns1 $addr flags signal 496 382 let counter+=1 497 383 let add_nr_ns1-=1 498 384 done 499 385 elif [ $addr_nr_ns1 -lt 0 ]; then 500 386 let rm_nr_ns1=-addr_nr_ns1 501 387 if [ $rm_nr_ns1 -lt 8 ]; then 502 - counter=1 503 - pos=1 504 - dump=(`ip netns exec ${listener_ns} ./pm_nl_ctl dump`) 505 - if [ ${#dump[@]} -gt 0 ]; then 506 - while [ $counter -le $rm_nr_ns1 ] 507 - do 508 - id=${dump[$pos]} 509 - rm_addr=$(rm_addr_count ${connector_ns}) 510 - ip netns exec ${listener_ns} ./pm_nl_ctl del $id 511 - wait_rm_addr ${connector_ns} ${rm_addr} 512 - let counter+=1 513 - let pos+=5 388 + counter=0 389 + pm_nl_show_endpoints ${listener_ns} | while read line; do 390 + local arr=($line) 391 + local nr=0 392 + 393 + for i in ${arr[@]}; do 394 + if [ $i = "id" ]; then 395 + if [ $counter -eq $rm_nr_ns1 ]; then 396 + break 397 + fi 398 + id=${arr[$nr+1]} 399 + rm_addr=$(rm_addr_count ${connector_ns}) 400 + pm_nl_del_endpoint ${listener_ns} $id 401 + wait_rm_addr ${connector_ns} ${rm_addr} 402 + let counter+=1 403 + fi 404 + let nr+=1 514 405 done 515 - fi 406 + done 516 407 elif [ $rm_nr_ns1 -eq 8 ]; then 517 - ip netns exec ${listener_ns} ./pm_nl_ctl flush 408 + pm_nl_flush_endpoint ${listener_ns} 518 409 elif [ $rm_nr_ns1 -eq 9 ]; then 519 - ip netns exec ${listener_ns} ./pm_nl_ctl del 0 ${connect_addr} 410 + pm_nl_del_endpoint ${listener_ns} 0 ${connect_addr} 520 411 fi 521 412 fi 522 413 ··· 545 426 else 546 427 addr="10.0.$counter.2" 547 428 fi 548 - ip netns exec $ns2 ./pm_nl_ctl add $addr flags $flags 429 + pm_nl_add_endpoint $ns2 $addr flags $flags 549 430 let counter+=1 550 431 let add_nr_ns2-=1 551 432 done 552 433 elif [ $addr_nr_ns2 -lt 0 ]; then 553 434 let rm_nr_ns2=-addr_nr_ns2 554 435 if [ $rm_nr_ns2 -lt 8 ]; then 555 - counter=1 556 - pos=1 557 - dump=(`ip netns exec ${connector_ns} ./pm_nl_ctl dump`) 558 - if [ ${#dump[@]} -gt 0 ]; then 559 - while [ $counter -le $rm_nr_ns2 ] 560 - do 561 - # rm_addr are serialized, allow the previous one to complete 562 - id=${dump[$pos]} 563 - rm_addr=$(rm_addr_count ${listener_ns}) 564 - ip netns exec ${connector_ns} ./pm_nl_ctl del $id 565 - wait_rm_addr ${listener_ns} ${rm_addr} 566 - let counter+=1 567 - let pos+=5 436 + counter=0 437 + pm_nl_show_endpoints ${connector_ns} | while read line; do 438 + local arr=($line) 439 + local nr=0 440 + 441 + for i in ${arr[@]}; do 442 + if [ $i = "id" ]; then 443 + if [ $counter -eq $rm_nr_ns2 ]; then 444 + break 445 + fi 446 + # rm_addr are serialized, allow the previous one to 447 + # complete 448 + id=${arr[$nr+1]} 449 + rm_addr=$(rm_addr_count ${listener_ns}) 450 + pm_nl_del_endpoint ${connector_ns} $id 451 + wait_rm_addr ${listener_ns} ${rm_addr} 452 + let counter+=1 453 + fi 454 + let nr+=1 568 455 done 569 - fi 456 + done 570 457 elif [ $rm_nr_ns2 -eq 8 ]; then 571 - ip netns exec ${connector_ns} ./pm_nl_ctl flush 458 + pm_nl_flush_endpoint ${connector_ns} 572 459 elif [ $rm_nr_ns2 -eq 9 ]; then 573 460 local addr 574 461 if is_v6 "${connect_addr}"; then ··· 582 457 else 583 458 addr="10.0.1.2" 584 459 fi 585 - ip netns exec ${connector_ns} ./pm_nl_ctl del 0 $addr 460 + pm_nl_del_endpoint ${connector_ns} 0 $addr 586 461 fi 587 462 fi 588 463 589 464 if [ ! -z $sflags ]; then 590 465 sleep 1 591 466 for netns in "$ns1" "$ns2"; do 592 - dump=(`ip netns exec $netns ./pm_nl_ctl dump`) 593 - if [ ${#dump[@]} -gt 0 ]; then 594 - addr=${dump[${#dump[@]} - 1]} 595 - ip netns exec $netns ./pm_nl_ctl set $addr flags $sflags 596 - fi 467 + pm_nl_show_endpoints $netns | while read line; do 468 + local arr=($line) 469 + local addr 470 + local port=0 471 + local id 472 + 473 + for i in ${arr[@]}; do 474 + if is_addr $i; then 475 + addr=$i 476 + elif is_number $i; then 477 + # The minimum expected port number is 10000 478 + if [ $i -gt 10000 ]; then 479 + port=$i 480 + # The maximum id number is 255 481 + elif [ $i -lt 255 ]; then 482 + id=$i 483 + fi 484 + fi 485 + done 486 + pm_nl_change_endpoint $netns $sflags $id $addr $port 487 + done 597 488 done 598 489 fi 599 490 ··· 1118 977 1119 978 # subflow limited by client 1120 979 reset 1121 - ip netns exec $ns1 ./pm_nl_ctl limits 0 0 1122 - ip netns exec $ns2 ./pm_nl_ctl limits 0 0 1123 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 980 + pm_nl_set_limits $ns1 0 0 981 + pm_nl_set_limits $ns2 0 0 982 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1124 983 run_tests $ns1 $ns2 10.0.1.1 1125 984 chk_join_nr "single subflow, limited by client" 0 0 0 1126 985 1127 986 # subflow limited by server 1128 987 reset 1129 - ip netns exec $ns1 ./pm_nl_ctl limits 0 0 1130 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1131 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 988 + pm_nl_set_limits $ns1 0 0 989 + pm_nl_set_limits $ns2 0 1 990 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1132 991 run_tests $ns1 $ns2 10.0.1.1 1133 992 chk_join_nr "single subflow, limited by server" 1 1 0 1134 993 1135 994 # subflow 1136 995 reset 1137 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1138 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1139 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 996 + pm_nl_set_limits $ns1 0 1 997 + pm_nl_set_limits $ns2 0 1 998 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1140 999 run_tests $ns1 $ns2 10.0.1.1 1141 1000 chk_join_nr "single subflow" 1 1 1 1142 1001 1143 1002 # multiple subflows 1144 1003 reset 1145 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1146 - ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1147 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1148 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1004 + pm_nl_set_limits $ns1 0 2 1005 + pm_nl_set_limits $ns2 0 2 1006 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1007 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow 1149 1008 run_tests $ns1 $ns2 10.0.1.1 1150 1009 chk_join_nr "multiple subflows" 2 2 2 1151 1010 1152 1011 # multiple subflows limited by server 1153 1012 reset 1154 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1155 - ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1156 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1157 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1013 + pm_nl_set_limits $ns1 0 1 1014 + pm_nl_set_limits $ns2 0 2 1015 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1016 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow 1158 1017 run_tests $ns1 $ns2 10.0.1.1 1159 1018 chk_join_nr "multiple subflows, limited by server" 2 2 1 1160 1019 1161 1020 # single subflow, dev 1162 1021 reset 1163 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1164 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1165 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow dev ns2eth3 1022 + pm_nl_set_limits $ns1 0 1 1023 + pm_nl_set_limits $ns2 0 1 1024 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow dev ns2eth3 1166 1025 run_tests $ns1 $ns2 10.0.1.1 1167 1026 chk_join_nr "single subflow, dev" 1 1 1 1168 1027 } ··· 1172 1031 # If a single subflow is configured, and matches the MPC src 1173 1032 # address, no additional subflow should be created 1174 1033 reset 1175 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1176 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1177 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.1.2 flags subflow 1034 + pm_nl_set_limits $ns1 0 1 1035 + pm_nl_set_limits $ns2 0 1 1036 + pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow 1178 1037 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 1179 1038 chk_join_nr "no MPC reuse with single endpoint" 0 0 0 1180 1039 1181 1040 # multiple subflows, with subflow creation error 1182 1041 reset 1183 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1184 - ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1185 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1186 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1042 + pm_nl_set_limits $ns1 0 2 1043 + pm_nl_set_limits $ns2 0 2 1044 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1045 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow 1187 1046 ip netns exec $ns1 iptables -A INPUT -s 10.0.3.2 -p tcp -j REJECT 1188 1047 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 1189 1048 chk_join_nr "multi subflows, with failing subflow" 1 1 1 1190 1049 1191 1050 # multiple subflows, with subflow timeout on MPJ 1192 1051 reset 1193 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1194 - ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1195 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1196 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1052 + pm_nl_set_limits $ns1 0 2 1053 + pm_nl_set_limits $ns2 0 2 1054 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1055 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow 1197 1056 ip netns exec $ns1 iptables -A INPUT -s 10.0.3.2 -p tcp -j DROP 1198 1057 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 1199 1058 chk_join_nr "multi subflows, with subflow timeout" 1 1 1 ··· 1202 1061 # closed subflow (due to reset) is not reused if additional 1203 1062 # subflows are added later 1204 1063 reset 1205 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1206 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1207 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1064 + pm_nl_set_limits $ns1 0 1 1065 + pm_nl_set_limits $ns2 0 1 1066 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1208 1067 ip netns exec $ns1 iptables -A INPUT -s 10.0.3.2 -p tcp -j REJECT 1209 1068 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow & 1210 1069 ··· 1214 1073 1215 1074 # mpj subflow will be in TW after the reset 1216 1075 wait_for_tw $ns2 1217 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1076 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow 1218 1077 wait 1219 1078 1220 1079 # additional subflow could be created only if the PM select ··· 1226 1085 { 1227 1086 # add_address, unused 1228 1087 reset 1229 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1088 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1230 1089 run_tests $ns1 $ns2 10.0.1.1 1231 1090 chk_join_nr "unused signal address" 0 0 0 1232 1091 chk_add_nr 1 1 1233 1092 1234 1093 # accept and use add_addr 1235 1094 reset 1236 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1237 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1238 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1095 + pm_nl_set_limits $ns1 0 1 1096 + pm_nl_set_limits $ns2 1 1 1097 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1239 1098 run_tests $ns1 $ns2 10.0.1.1 1240 1099 chk_join_nr "signal address" 1 1 1 1241 1100 chk_add_nr 1 1 ··· 1245 1104 # belong to different subnets or one of the listed local address could be 1246 1105 # used for 'add_addr' subflow 1247 1106 reset 1248 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1249 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1250 - ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1251 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1107 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1108 + pm_nl_set_limits $ns1 0 2 1109 + pm_nl_set_limits $ns2 1 2 1110 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1252 1111 run_tests $ns1 $ns2 10.0.1.1 1253 1112 chk_join_nr "subflow and signal" 2 2 2 1254 1113 chk_add_nr 1 1 1255 1114 1256 1115 # accept and use add_addr with additional subflows 1257 1116 reset 1258 - ip netns exec $ns1 ./pm_nl_ctl limits 0 3 1259 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1260 - ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1261 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1262 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 1117 + pm_nl_set_limits $ns1 0 3 1118 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1119 + pm_nl_set_limits $ns2 1 3 1120 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1121 + pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow 1263 1122 run_tests $ns1 $ns2 10.0.1.1 1264 1123 chk_join_nr "multiple subflows and signal" 3 3 3 1265 1124 chk_add_nr 1 1 1266 1125 1267 1126 # signal addresses 1268 1127 reset 1269 - ip netns exec $ns1 ./pm_nl_ctl limits 3 3 1270 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1271 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal 1272 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.4.1 flags signal 1273 - ip netns exec $ns2 ./pm_nl_ctl limits 3 3 1128 + pm_nl_set_limits $ns1 3 3 1129 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1130 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 1131 + pm_nl_add_endpoint $ns1 10.0.4.1 flags signal 1132 + pm_nl_set_limits $ns2 3 3 1274 1133 run_tests $ns1 $ns2 10.0.1.1 1275 1134 chk_join_nr "signal addresses" 3 3 3 1276 1135 chk_add_nr 3 3 1277 1136 1278 1137 # signal invalid addresses 1279 1138 reset 1280 - ip netns exec $ns1 ./pm_nl_ctl limits 3 3 1281 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.12.1 flags signal 1282 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal 1283 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.14.1 flags signal 1284 - ip netns exec $ns2 ./pm_nl_ctl limits 3 3 1139 + pm_nl_set_limits $ns1 3 3 1140 + pm_nl_add_endpoint $ns1 10.0.12.1 flags signal 1141 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 1142 + pm_nl_add_endpoint $ns1 10.0.14.1 flags signal 1143 + pm_nl_set_limits $ns2 3 3 1285 1144 run_tests $ns1 $ns2 10.0.1.1 1286 1145 chk_join_nr "signal invalid addresses" 1 1 1 1287 1146 chk_add_nr 3 3 1288 1147 1289 1148 # signal addresses race test 1290 1149 reset 1291 - ip netns exec $ns1 ./pm_nl_ctl limits 4 4 1292 - ip netns exec $ns2 ./pm_nl_ctl limits 4 4 1293 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 flags signal 1294 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1295 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal 1296 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.4.1 flags signal 1297 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.1.2 flags signal 1298 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags signal 1299 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags signal 1300 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags signal 1150 + pm_nl_set_limits $ns1 4 4 1151 + pm_nl_set_limits $ns2 4 4 1152 + pm_nl_add_endpoint $ns1 10.0.1.1 flags signal 1153 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1154 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 1155 + pm_nl_add_endpoint $ns1 10.0.4.1 flags signal 1156 + pm_nl_add_endpoint $ns2 10.0.1.2 flags signal 1157 + pm_nl_add_endpoint $ns2 10.0.2.2 flags signal 1158 + pm_nl_add_endpoint $ns2 10.0.3.2 flags signal 1159 + pm_nl_add_endpoint $ns2 10.0.4.2 flags signal 1301 1160 run_tests $ns1 $ns2 10.0.1.1 1302 1161 1303 1162 # the server will not signal the address terminating ··· 1317 1176 # active backup and link switch-over. 1318 1177 # Let's set some arbitrary (low) virtual link limits. 1319 1178 init_shapers 1320 - ip netns exec $ns1 ./pm_nl_ctl limits 0 3 1321 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 dev ns1eth2 flags signal 1322 - ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1323 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 dev ns2eth3 flags subflow 1324 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 dev ns2eth4 flags subflow 1179 + pm_nl_set_limits $ns1 0 3 1180 + pm_nl_add_endpoint $ns1 10.0.2.1 dev ns1eth2 flags signal 1181 + pm_nl_set_limits $ns2 1 3 1182 + pm_nl_add_endpoint $ns2 10.0.3.2 dev ns2eth3 flags subflow 1183 + pm_nl_add_endpoint $ns2 10.0.4.2 dev ns2eth4 flags subflow 1325 1184 run_tests $ns1 $ns2 10.0.1.1 1 1326 1185 chk_join_nr "multiple flows, signal, link failure" 3 3 3 1327 1186 chk_add_nr 1 1 ··· 1331 1190 # for bidirectional transfer 1332 1191 reset 1333 1192 init_shapers 1334 - ip netns exec $ns1 ./pm_nl_ctl limits 0 3 1335 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 dev ns1eth2 flags signal 1336 - ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1337 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 dev ns2eth3 flags subflow 1338 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 dev ns2eth4 flags subflow 1193 + pm_nl_set_limits $ns1 0 3 1194 + pm_nl_add_endpoint $ns1 10.0.2.1 dev ns1eth2 flags signal 1195 + pm_nl_set_limits $ns2 1 3 1196 + pm_nl_add_endpoint $ns2 10.0.3.2 dev ns2eth3 flags subflow 1197 + pm_nl_add_endpoint $ns2 10.0.4.2 dev ns2eth4 flags subflow 1339 1198 run_tests $ns1 $ns2 10.0.1.1 2 1340 1199 chk_join_nr "multi flows, signal, bidi, link fail" 3 3 3 1341 1200 chk_add_nr 1 1 ··· 1345 1204 # will never be used 1346 1205 reset 1347 1206 init_shapers 1348 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1349 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 dev ns1eth2 flags signal 1350 - ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1207 + pm_nl_set_limits $ns1 0 2 1208 + pm_nl_add_endpoint $ns1 10.0.2.1 dev ns1eth2 flags signal 1209 + pm_nl_set_limits $ns2 1 2 1351 1210 export FAILING_LINKS="1" 1352 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 dev ns2eth3 flags subflow,backup 1211 + pm_nl_add_endpoint $ns2 10.0.3.2 dev ns2eth3 flags subflow,backup 1353 1212 run_tests $ns1 $ns2 10.0.1.1 1 1354 1213 chk_join_nr "backup subflow unused, link failure" 2 2 2 1355 1214 chk_add_nr 1 1 ··· 1359 1218 # the traffic 1360 1219 reset 1361 1220 init_shapers 1362 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1363 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 dev ns1eth2 flags signal 1364 - ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1365 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 dev ns2eth3 flags subflow,backup 1221 + pm_nl_set_limits $ns1 0 2 1222 + pm_nl_add_endpoint $ns1 10.0.2.1 dev ns1eth2 flags signal 1223 + pm_nl_set_limits $ns2 1 2 1224 + pm_nl_add_endpoint $ns2 10.0.3.2 dev ns2eth3 flags subflow,backup 1366 1225 export FAILING_LINKS="1 2" 1367 1226 run_tests $ns1 $ns2 10.0.1.1 1 1368 1227 chk_join_nr "backup flow used, multi links fail" 2 2 2 ··· 1374 1233 # for bidirectional transfer 1375 1234 reset 1376 1235 init_shapers 1377 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1378 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 dev ns1eth2 flags signal 1379 - ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1380 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 dev ns2eth3 flags subflow,backup 1236 + pm_nl_set_limits $ns1 0 2 1237 + pm_nl_add_endpoint $ns1 10.0.2.1 dev ns1eth2 flags signal 1238 + pm_nl_set_limits $ns2 1 3 1239 + pm_nl_add_endpoint $ns2 10.0.3.2 dev ns2eth3 flags subflow,backup 1381 1240 run_tests $ns1 $ns2 10.0.1.1 2 1382 1241 chk_join_nr "backup flow used, bidi, link failure" 2 2 2 1383 1242 chk_add_nr 1 1 ··· 1389 1248 { 1390 1249 # add_addr timeout 1391 1250 reset_with_add_addr_timeout 1392 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1393 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1394 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1251 + pm_nl_set_limits $ns1 0 1 1252 + pm_nl_set_limits $ns2 1 1 1253 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1395 1254 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 1396 1255 chk_join_nr "signal address, ADD_ADDR timeout" 1 1 1 1397 1256 chk_add_nr 4 0 1398 1257 1399 1258 # add_addr timeout IPv6 1400 1259 reset_with_add_addr_timeout 6 1401 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1402 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1403 - ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 1260 + pm_nl_set_limits $ns1 0 1 1261 + pm_nl_set_limits $ns2 1 1 1262 + pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal 1404 1263 run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow 1405 1264 chk_join_nr "signal address, ADD_ADDR6 timeout" 1 1 1 1406 1265 chk_add_nr 4 0 1407 1266 1408 1267 # signal addresses timeout 1409 1268 reset_with_add_addr_timeout 1410 - ip netns exec $ns1 ./pm_nl_ctl limits 2 2 1411 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1412 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal 1413 - ip netns exec $ns2 ./pm_nl_ctl limits 2 2 1269 + pm_nl_set_limits $ns1 2 2 1270 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1271 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 1272 + pm_nl_set_limits $ns2 2 2 1414 1273 run_tests $ns1 $ns2 10.0.1.1 0 0 0 least 1415 1274 chk_join_nr "signal addresses, ADD_ADDR timeout" 2 2 2 1416 1275 chk_add_nr 8 0 1417 1276 1418 1277 # signal invalid addresses timeout 1419 1278 reset_with_add_addr_timeout 1420 - ip netns exec $ns1 ./pm_nl_ctl limits 2 2 1421 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.12.1 flags signal 1422 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal 1423 - ip netns exec $ns2 ./pm_nl_ctl limits 2 2 1279 + pm_nl_set_limits $ns1 2 2 1280 + pm_nl_add_endpoint $ns1 10.0.12.1 flags signal 1281 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 1282 + pm_nl_set_limits $ns2 2 2 1424 1283 run_tests $ns1 $ns2 10.0.1.1 0 0 0 least 1425 1284 chk_join_nr "invalid address, ADD_ADDR timeout" 1 1 1 1426 1285 chk_add_nr 8 0 ··· 1430 1289 { 1431 1290 # single subflow, remove 1432 1291 reset 1433 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1434 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1435 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1292 + pm_nl_set_limits $ns1 0 1 1293 + pm_nl_set_limits $ns2 0 1 1294 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1436 1295 run_tests $ns1 $ns2 10.0.1.1 0 0 -1 slow 1437 1296 chk_join_nr "remove single subflow" 1 1 1 1438 1297 chk_rm_nr 1 1 1439 1298 1440 1299 # multiple subflows, remove 1441 1300 reset 1442 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1443 - ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1444 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1445 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1301 + pm_nl_set_limits $ns1 0 2 1302 + pm_nl_set_limits $ns2 0 2 1303 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow 1304 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1446 1305 run_tests $ns1 $ns2 10.0.1.1 0 0 -2 slow 1447 1306 chk_join_nr "remove multiple subflows" 2 2 2 1448 1307 chk_rm_nr 2 2 1449 1308 1450 1309 # single address, remove 1451 1310 reset 1452 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1453 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1454 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1311 + pm_nl_set_limits $ns1 0 1 1312 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1313 + pm_nl_set_limits $ns2 1 1 1455 1314 run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow 1456 1315 chk_join_nr "remove single address" 1 1 1 1457 1316 chk_add_nr 1 1 ··· 1459 1318 1460 1319 # subflow and signal, remove 1461 1320 reset 1462 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1463 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1464 - ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1465 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1321 + pm_nl_set_limits $ns1 0 2 1322 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1323 + pm_nl_set_limits $ns2 1 2 1324 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1466 1325 run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow 1467 1326 chk_join_nr "remove subflow and signal" 2 2 2 1468 1327 chk_add_nr 1 1 ··· 1470 1329 1471 1330 # subflows and signal, remove 1472 1331 reset 1473 - ip netns exec $ns1 ./pm_nl_ctl limits 0 3 1474 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1475 - ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1476 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1477 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 1332 + pm_nl_set_limits $ns1 0 3 1333 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1334 + pm_nl_set_limits $ns2 1 3 1335 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1336 + pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow 1478 1337 run_tests $ns1 $ns2 10.0.1.1 0 -1 -2 slow 1479 1338 chk_join_nr "remove subflows and signal" 3 3 3 1480 1339 chk_add_nr 1 1 ··· 1482 1341 1483 1342 # addresses remove 1484 1343 reset 1485 - ip netns exec $ns1 ./pm_nl_ctl limits 3 3 1486 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal id 250 1487 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal 1488 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.4.1 flags signal 1489 - ip netns exec $ns2 ./pm_nl_ctl limits 3 3 1344 + pm_nl_set_limits $ns1 3 3 1345 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal id 250 1346 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 1347 + pm_nl_add_endpoint $ns1 10.0.4.1 flags signal 1348 + pm_nl_set_limits $ns2 3 3 1490 1349 run_tests $ns1 $ns2 10.0.1.1 0 -3 0 slow 1491 1350 chk_join_nr "remove addresses" 3 3 3 1492 1351 chk_add_nr 3 3 ··· 1494 1353 1495 1354 # invalid addresses remove 1496 1355 reset 1497 - ip netns exec $ns1 ./pm_nl_ctl limits 3 3 1498 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.12.1 flags signal 1499 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal 1500 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.14.1 flags signal 1501 - ip netns exec $ns2 ./pm_nl_ctl limits 3 3 1356 + pm_nl_set_limits $ns1 3 3 1357 + pm_nl_add_endpoint $ns1 10.0.12.1 flags signal 1358 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 1359 + pm_nl_add_endpoint $ns1 10.0.14.1 flags signal 1360 + pm_nl_set_limits $ns2 3 3 1502 1361 run_tests $ns1 $ns2 10.0.1.1 0 -3 0 slow 1503 1362 chk_join_nr "remove invalid addresses" 1 1 1 1504 1363 chk_add_nr 3 3 ··· 1506 1365 1507 1366 # subflows and signal, flush 1508 1367 reset 1509 - ip netns exec $ns1 ./pm_nl_ctl limits 0 3 1510 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1511 - ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1512 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1513 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 1368 + pm_nl_set_limits $ns1 0 3 1369 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1370 + pm_nl_set_limits $ns2 1 3 1371 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1372 + pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow 1514 1373 run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow 1515 1374 chk_join_nr "flush subflows and signal" 3 3 3 1516 1375 chk_add_nr 1 1 ··· 1518 1377 1519 1378 # subflows flush 1520 1379 reset 1521 - ip netns exec $ns1 ./pm_nl_ctl limits 3 3 1522 - ip netns exec $ns2 ./pm_nl_ctl limits 3 3 1523 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow id 150 1524 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1525 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 1380 + pm_nl_set_limits $ns1 3 3 1381 + pm_nl_set_limits $ns2 3 3 1382 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow id 150 1383 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1384 + pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow 1526 1385 run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow 1527 1386 chk_join_nr "flush subflows" 3 3 3 1528 1387 chk_rm_nr 3 3 1529 1388 1530 1389 # addresses flush 1531 1390 reset 1532 - ip netns exec $ns1 ./pm_nl_ctl limits 3 3 1533 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal id 250 1534 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal 1535 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.4.1 flags signal 1536 - ip netns exec $ns2 ./pm_nl_ctl limits 3 3 1391 + pm_nl_set_limits $ns1 3 3 1392 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal id 250 1393 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 1394 + pm_nl_add_endpoint $ns1 10.0.4.1 flags signal 1395 + pm_nl_set_limits $ns2 3 3 1537 1396 run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow 1538 1397 chk_join_nr "flush addresses" 3 3 3 1539 1398 chk_add_nr 3 3 ··· 1541 1400 1542 1401 # invalid addresses flush 1543 1402 reset 1544 - ip netns exec $ns1 ./pm_nl_ctl limits 3 3 1545 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.12.1 flags signal 1546 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal 1547 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.14.1 flags signal 1548 - ip netns exec $ns2 ./pm_nl_ctl limits 3 3 1403 + pm_nl_set_limits $ns1 3 3 1404 + pm_nl_add_endpoint $ns1 10.0.12.1 flags signal 1405 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 1406 + pm_nl_add_endpoint $ns1 10.0.14.1 flags signal 1407 + pm_nl_set_limits $ns2 3 3 1549 1408 run_tests $ns1 $ns2 10.0.1.1 0 -8 0 slow 1550 1409 chk_join_nr "flush invalid addresses" 1 1 1 1551 1410 chk_add_nr 3 3 ··· 1553 1412 1554 1413 # remove id 0 subflow 1555 1414 reset 1556 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1557 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1558 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1415 + pm_nl_set_limits $ns1 0 1 1416 + pm_nl_set_limits $ns2 0 1 1417 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1559 1418 run_tests $ns1 $ns2 10.0.1.1 0 0 -9 slow 1560 1419 chk_join_nr "remove id 0 subflow" 1 1 1 1561 1420 chk_rm_nr 1 1 1562 1421 1563 1422 # remove id 0 address 1564 1423 reset 1565 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1566 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1567 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1424 + pm_nl_set_limits $ns1 0 1 1425 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1426 + pm_nl_set_limits $ns2 1 1 1568 1427 run_tests $ns1 $ns2 10.0.1.1 0 -9 0 slow 1569 1428 chk_join_nr "remove id 0 address" 1 1 1 1570 1429 chk_add_nr 1 1 ··· 1575 1434 { 1576 1435 # add single subflow 1577 1436 reset 1578 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1579 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1437 + pm_nl_set_limits $ns1 0 1 1438 + pm_nl_set_limits $ns2 0 1 1580 1439 run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow 1581 1440 chk_join_nr "add single subflow" 1 1 1 1582 1441 1583 1442 # add signal address 1584 1443 reset 1585 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1586 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1444 + pm_nl_set_limits $ns1 0 1 1445 + pm_nl_set_limits $ns2 1 1 1587 1446 run_tests $ns1 $ns2 10.0.1.1 0 1 0 slow 1588 1447 chk_join_nr "add signal address" 1 1 1 1589 1448 chk_add_nr 1 1 1590 1449 1591 1450 # add multiple subflows 1592 1451 reset 1593 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1594 - ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1452 + pm_nl_set_limits $ns1 0 2 1453 + pm_nl_set_limits $ns2 0 2 1595 1454 run_tests $ns1 $ns2 10.0.1.1 0 0 2 slow 1596 1455 chk_join_nr "add multiple subflows" 2 2 2 1597 1456 1598 1457 # add multiple subflows IPv6 1599 1458 reset 1600 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1601 - ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1459 + pm_nl_set_limits $ns1 0 2 1460 + pm_nl_set_limits $ns2 0 2 1602 1461 run_tests $ns1 $ns2 dead:beef:1::1 0 0 2 slow 1603 1462 chk_join_nr "add multiple subflows IPv6" 2 2 2 1604 1463 1605 1464 # add multiple addresses IPv6 1606 1465 reset 1607 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1608 - ip netns exec $ns2 ./pm_nl_ctl limits 2 2 1466 + pm_nl_set_limits $ns1 0 2 1467 + pm_nl_set_limits $ns2 2 2 1609 1468 run_tests $ns1 $ns2 dead:beef:1::1 0 2 0 slow 1610 1469 chk_join_nr "add multiple addresses IPv6" 2 2 2 1611 1470 chk_add_nr 2 2 ··· 1615 1474 { 1616 1475 # subflow IPv6 1617 1476 reset 1618 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1619 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1620 - ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 dev ns2eth3 flags subflow 1477 + pm_nl_set_limits $ns1 0 1 1478 + pm_nl_set_limits $ns2 0 1 1479 + pm_nl_add_endpoint $ns2 dead:beef:3::2 dev ns2eth3 flags subflow 1621 1480 run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow 1622 1481 chk_join_nr "single subflow IPv6" 1 1 1 1623 1482 1624 1483 # add_address, unused IPv6 1625 1484 reset 1626 - ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 1485 + pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal 1627 1486 run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow 1628 1487 chk_join_nr "unused signal address IPv6" 0 0 0 1629 1488 chk_add_nr 1 1 1630 1489 1631 1490 # signal address IPv6 1632 1491 reset 1633 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1634 - ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 1635 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1492 + pm_nl_set_limits $ns1 0 1 1493 + pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal 1494 + pm_nl_set_limits $ns2 1 1 1636 1495 run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow 1637 1496 chk_join_nr "single address IPv6" 1 1 1 1638 1497 chk_add_nr 1 1 1639 1498 1640 1499 # single address IPv6, remove 1641 1500 reset 1642 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1643 - ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 1644 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1501 + pm_nl_set_limits $ns1 0 1 1502 + pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal 1503 + pm_nl_set_limits $ns2 1 1 1645 1504 run_tests $ns1 $ns2 dead:beef:1::1 0 -1 0 slow 1646 1505 chk_join_nr "remove single address IPv6" 1 1 1 1647 1506 chk_add_nr 1 1 ··· 1649 1508 1650 1509 # subflow and signal IPv6, remove 1651 1510 reset 1652 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1653 - ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 1654 - ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1655 - ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 dev ns2eth3 flags subflow 1511 + pm_nl_set_limits $ns1 0 2 1512 + pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal 1513 + pm_nl_set_limits $ns2 1 2 1514 + pm_nl_add_endpoint $ns2 dead:beef:3::2 dev ns2eth3 flags subflow 1656 1515 run_tests $ns1 $ns2 dead:beef:1::1 0 -1 -1 slow 1657 1516 chk_join_nr "remove subflow and signal IPv6" 2 2 2 1658 1517 chk_add_nr 1 1 ··· 1663 1522 { 1664 1523 # subflow IPv4-mapped to IPv4-mapped 1665 1524 reset 1666 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1667 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1668 - ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow 1525 + pm_nl_set_limits $ns1 0 1 1526 + pm_nl_set_limits $ns2 0 1 1527 + pm_nl_add_endpoint $ns2 "::ffff:10.0.3.2" flags subflow 1669 1528 run_tests $ns1 $ns2 "::ffff:10.0.1.1" 1670 1529 chk_join_nr "single subflow IPv4-mapped" 1 1 1 1671 1530 1672 1531 # signal address IPv4-mapped with IPv4-mapped sk 1673 1532 reset 1674 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1675 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1676 - ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal 1533 + pm_nl_set_limits $ns1 0 1 1534 + pm_nl_set_limits $ns2 1 1 1535 + pm_nl_add_endpoint $ns1 "::ffff:10.0.2.1" flags signal 1677 1536 run_tests $ns1 $ns2 "::ffff:10.0.1.1" 1678 1537 chk_join_nr "signal address IPv4-mapped" 1 1 1 1679 1538 chk_add_nr 1 1 1680 1539 1681 1540 # subflow v4-map-v6 1682 1541 reset 1683 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1684 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1685 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1542 + pm_nl_set_limits $ns1 0 1 1543 + pm_nl_set_limits $ns2 0 1 1544 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1686 1545 run_tests $ns1 $ns2 "::ffff:10.0.1.1" 1687 1546 chk_join_nr "single subflow v4-map-v6" 1 1 1 1688 1547 1689 1548 # signal address v4-map-v6 1690 1549 reset 1691 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1692 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1693 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1550 + pm_nl_set_limits $ns1 0 1 1551 + pm_nl_set_limits $ns2 1 1 1552 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1694 1553 run_tests $ns1 $ns2 "::ffff:10.0.1.1" 1695 1554 chk_join_nr "signal address v4-map-v6" 1 1 1 1696 1555 chk_add_nr 1 1 1697 1556 1698 1557 # subflow v6-map-v4 1699 1558 reset 1700 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1701 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1702 - ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow 1559 + pm_nl_set_limits $ns1 0 1 1560 + pm_nl_set_limits $ns2 0 1 1561 + pm_nl_add_endpoint $ns2 "::ffff:10.0.3.2" flags subflow 1703 1562 run_tests $ns1 $ns2 10.0.1.1 1704 1563 chk_join_nr "single subflow v6-map-v4" 1 1 1 1705 1564 1706 1565 # signal address v6-map-v4 1707 1566 reset 1708 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1709 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1710 - ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal 1567 + pm_nl_set_limits $ns1 0 1 1568 + pm_nl_set_limits $ns2 1 1 1569 + pm_nl_add_endpoint $ns1 "::ffff:10.0.2.1" flags signal 1711 1570 run_tests $ns1 $ns2 10.0.1.1 1712 1571 chk_join_nr "signal address v6-map-v4" 1 1 1 1713 1572 chk_add_nr 1 1 1714 1573 1715 1574 # no subflow IPv6 to v4 address 1716 1575 reset 1717 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1718 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1719 - ip netns exec $ns2 ./pm_nl_ctl add dead:beef:2::2 flags subflow 1576 + pm_nl_set_limits $ns1 0 1 1577 + pm_nl_set_limits $ns2 0 1 1578 + pm_nl_add_endpoint $ns2 dead:beef:2::2 flags subflow 1720 1579 run_tests $ns1 $ns2 10.0.1.1 1721 1580 chk_join_nr "no JOIN with diff families v4-v6" 0 0 0 1722 1581 1723 1582 # no subflow IPv6 to v4 address even if v6 has a valid v4 at the end 1724 1583 reset 1725 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1726 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1727 - ip netns exec $ns2 ./pm_nl_ctl add dead:beef:2::10.0.3.2 flags subflow 1584 + pm_nl_set_limits $ns1 0 1 1585 + pm_nl_set_limits $ns2 0 1 1586 + pm_nl_add_endpoint $ns2 dead:beef:2::10.0.3.2 flags subflow 1728 1587 run_tests $ns1 $ns2 10.0.1.1 1729 1588 chk_join_nr "no JOIN with diff families v4-v6-2" 0 0 0 1730 1589 1731 1590 # no subflow IPv4 to v6 address, no need to slow down too then 1732 1591 reset 1733 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1734 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1735 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1592 + pm_nl_set_limits $ns1 0 1 1593 + pm_nl_set_limits $ns2 0 1 1594 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1736 1595 run_tests $ns1 $ns2 dead:beef:1::1 1737 1596 chk_join_nr "no JOIN with diff families v6-v4" 0 0 0 1738 1597 } ··· 1741 1600 { 1742 1601 # single subflow, backup 1743 1602 reset 1744 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1745 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1746 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow,backup 1603 + pm_nl_set_limits $ns1 0 1 1604 + pm_nl_set_limits $ns2 0 1 1605 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,backup 1747 1606 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow nobackup 1748 1607 chk_join_nr "single subflow, backup" 1 1 1 1749 1608 chk_prio_nr 0 1 1750 1609 1751 1610 # single address, backup 1752 1611 reset 1753 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1754 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1755 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1612 + pm_nl_set_limits $ns1 0 1 1613 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1614 + pm_nl_set_limits $ns2 1 1 1756 1615 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup 1757 1616 chk_join_nr "single address, backup" 1 1 1 1617 + chk_add_nr 1 1 1618 + chk_prio_nr 1 0 1619 + 1620 + # single address with port, backup 1621 + reset 1622 + pm_nl_set_limits $ns1 0 1 1623 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 1624 + pm_nl_set_limits $ns2 1 1 1625 + run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup 1626 + chk_join_nr "single address with port, backup" 1 1 1 1758 1627 chk_add_nr 1 1 1759 1628 chk_prio_nr 1 0 1760 1629 } ··· 1773 1622 { 1774 1623 # signal address with port 1775 1624 reset 1776 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1777 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1778 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1625 + pm_nl_set_limits $ns1 0 1 1626 + pm_nl_set_limits $ns2 1 1 1627 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 1779 1628 run_tests $ns1 $ns2 10.0.1.1 1780 1629 chk_join_nr "signal address with port" 1 1 1 1781 1630 chk_add_nr 1 1 1 1782 1631 1783 1632 # subflow and signal with port 1784 1633 reset 1785 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1786 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1787 - ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1788 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1634 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 1635 + pm_nl_set_limits $ns1 0 2 1636 + pm_nl_set_limits $ns2 1 2 1637 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1789 1638 run_tests $ns1 $ns2 10.0.1.1 1790 1639 chk_join_nr "subflow and signal with port" 2 2 2 1791 1640 chk_add_nr 1 1 1 1792 1641 1793 1642 # single address with port, remove 1794 1643 reset 1795 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1796 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1797 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1644 + pm_nl_set_limits $ns1 0 1 1645 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 1646 + pm_nl_set_limits $ns2 1 1 1798 1647 run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow 1799 1648 chk_join_nr "remove single address with port" 1 1 1 1800 1649 chk_add_nr 1 1 1 ··· 1802 1651 1803 1652 # subflow and signal with port, remove 1804 1653 reset 1805 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1806 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1807 - ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1808 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1654 + pm_nl_set_limits $ns1 0 2 1655 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 1656 + pm_nl_set_limits $ns2 1 2 1657 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1809 1658 run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow 1810 1659 chk_join_nr "remove subflow and signal with port" 2 2 2 1811 1660 chk_add_nr 1 1 1 ··· 1813 1662 1814 1663 # subflows and signal with port, flush 1815 1664 reset 1816 - ip netns exec $ns1 ./pm_nl_ctl limits 0 3 1817 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1818 - ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1819 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1820 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 1665 + pm_nl_set_limits $ns1 0 3 1666 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 1667 + pm_nl_set_limits $ns2 1 3 1668 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1669 + pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow 1821 1670 run_tests $ns1 $ns2 10.0.1.1 0 -8 -2 slow 1822 1671 chk_join_nr "flush subflows and signal with port" 3 3 3 1823 1672 chk_add_nr 1 1 ··· 1825 1674 1826 1675 # multiple addresses with port 1827 1676 reset 1828 - ip netns exec $ns1 ./pm_nl_ctl limits 2 2 1829 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1830 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10100 1831 - ip netns exec $ns2 ./pm_nl_ctl limits 2 2 1677 + pm_nl_set_limits $ns1 2 2 1678 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 1679 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal port 10100 1680 + pm_nl_set_limits $ns2 2 2 1832 1681 run_tests $ns1 $ns2 10.0.1.1 1833 1682 chk_join_nr "multiple addresses with port" 2 2 2 1834 1683 chk_add_nr 2 2 2 1835 1684 1836 1685 # multiple addresses with ports 1837 1686 reset 1838 - ip netns exec $ns1 ./pm_nl_ctl limits 2 2 1839 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1840 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10101 1841 - ip netns exec $ns2 ./pm_nl_ctl limits 2 2 1687 + pm_nl_set_limits $ns1 2 2 1688 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 1689 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal port 10101 1690 + pm_nl_set_limits $ns2 2 2 1842 1691 run_tests $ns1 $ns2 10.0.1.1 1843 1692 chk_join_nr "multiple addresses with ports" 2 2 2 1844 1693 chk_add_nr 2 2 2 ··· 1848 1697 { 1849 1698 # single subflow, syncookies 1850 1699 reset_with_cookies 1851 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1852 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1853 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1700 + pm_nl_set_limits $ns1 0 1 1701 + pm_nl_set_limits $ns2 0 1 1702 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1854 1703 run_tests $ns1 $ns2 10.0.1.1 1855 1704 chk_join_nr "single subflow with syn cookies" 1 1 1 1856 1705 1857 1706 # multiple subflows with syn cookies 1858 1707 reset_with_cookies 1859 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1860 - ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1861 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1862 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1708 + pm_nl_set_limits $ns1 0 2 1709 + pm_nl_set_limits $ns2 0 2 1710 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1711 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow 1863 1712 run_tests $ns1 $ns2 10.0.1.1 1864 1713 chk_join_nr "multiple subflows with syn cookies" 2 2 2 1865 1714 1866 1715 # multiple subflows limited by server 1867 1716 reset_with_cookies 1868 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1869 - ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1870 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1871 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1717 + pm_nl_set_limits $ns1 0 1 1718 + pm_nl_set_limits $ns2 0 2 1719 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1720 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow 1872 1721 run_tests $ns1 $ns2 10.0.1.1 1873 1722 chk_join_nr "subflows limited by server w cookies" 2 1 1 1874 1723 1875 1724 # test signal address with cookies 1876 1725 reset_with_cookies 1877 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1878 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1879 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1726 + pm_nl_set_limits $ns1 0 1 1727 + pm_nl_set_limits $ns2 1 1 1728 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1880 1729 run_tests $ns1 $ns2 10.0.1.1 1881 1730 chk_join_nr "signal address with syn cookies" 1 1 1 1882 1731 chk_add_nr 1 1 1883 1732 1884 1733 # test cookie with subflow and signal 1885 1734 reset_with_cookies 1886 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1887 - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1888 - ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1889 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1735 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1736 + pm_nl_set_limits $ns1 0 2 1737 + pm_nl_set_limits $ns2 1 2 1738 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1890 1739 run_tests $ns1 $ns2 10.0.1.1 1891 1740 chk_join_nr "subflow and signal w cookies" 2 2 2 1892 1741 chk_add_nr 1 1 1893 1742 1894 1743 # accept and use add_addr with additional subflows 1895 1744 reset_with_cookies 1896 - ip netns exec $ns1 ./pm_nl_ctl limits 0 3 1897 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1898 - ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1899 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1900 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 1745 + pm_nl_set_limits $ns1 0 3 1746 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1747 + pm_nl_set_limits $ns2 1 3 1748 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1749 + pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow 1901 1750 run_tests $ns1 $ns2 10.0.1.1 1902 1751 chk_join_nr "subflows and signal w. cookies" 3 3 3 1903 1752 chk_add_nr 1 1 ··· 1907 1756 { 1908 1757 # checksum test 0 0 1909 1758 reset_with_checksum 0 0 1910 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1911 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1759 + pm_nl_set_limits $ns1 0 1 1760 + pm_nl_set_limits $ns2 0 1 1912 1761 run_tests $ns1 $ns2 10.0.1.1 1913 1762 chk_csum_nr "checksum test 0 0" 1914 1763 1915 1764 # checksum test 1 1 1916 1765 reset_with_checksum 1 1 1917 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1918 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1766 + pm_nl_set_limits $ns1 0 1 1767 + pm_nl_set_limits $ns2 0 1 1919 1768 run_tests $ns1 $ns2 10.0.1.1 1920 1769 chk_csum_nr "checksum test 1 1" 1921 1770 1922 1771 # checksum test 0 1 1923 1772 reset_with_checksum 0 1 1924 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1925 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1773 + pm_nl_set_limits $ns1 0 1 1774 + pm_nl_set_limits $ns2 0 1 1926 1775 run_tests $ns1 $ns2 10.0.1.1 1927 1776 chk_csum_nr "checksum test 0 1" 1928 1777 1929 1778 # checksum test 1 0 1930 1779 reset_with_checksum 1 0 1931 - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1932 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1780 + pm_nl_set_limits $ns1 0 1 1781 + pm_nl_set_limits $ns2 0 1 1933 1782 run_tests $ns1 $ns2 10.0.1.1 1934 1783 chk_csum_nr "checksum test 1 0" 1935 1784 } ··· 1938 1787 { 1939 1788 # subflow allow join id0 ns1 1940 1789 reset_with_allow_join_id0 1 0 1941 - ip netns exec $ns1 ./pm_nl_ctl limits 1 1 1942 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1943 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1790 + pm_nl_set_limits $ns1 1 1 1791 + pm_nl_set_limits $ns2 1 1 1792 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1944 1793 run_tests $ns1 $ns2 10.0.1.1 1945 1794 chk_join_nr "single subflow allow join id0 ns1" 1 1 1 1946 1795 1947 1796 # subflow allow join id0 ns2 1948 1797 reset_with_allow_join_id0 0 1 1949 - ip netns exec $ns1 ./pm_nl_ctl limits 1 1 1950 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1951 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1798 + pm_nl_set_limits $ns1 1 1 1799 + pm_nl_set_limits $ns2 1 1 1800 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1952 1801 run_tests $ns1 $ns2 10.0.1.1 1953 1802 chk_join_nr "single subflow allow join id0 ns2" 0 0 0 1954 1803 1955 1804 # signal address allow join id0 ns1 1956 1805 # ADD_ADDRs are not affected by allow_join_id0 value. 1957 1806 reset_with_allow_join_id0 1 0 1958 - ip netns exec $ns1 ./pm_nl_ctl limits 1 1 1959 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1960 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1807 + pm_nl_set_limits $ns1 1 1 1808 + pm_nl_set_limits $ns2 1 1 1809 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1961 1810 run_tests $ns1 $ns2 10.0.1.1 1962 1811 chk_join_nr "signal address allow join id0 ns1" 1 1 1 1963 1812 chk_add_nr 1 1 ··· 1965 1814 # signal address allow join id0 ns2 1966 1815 # ADD_ADDRs are not affected by allow_join_id0 value. 1967 1816 reset_with_allow_join_id0 0 1 1968 - ip netns exec $ns1 ./pm_nl_ctl limits 1 1 1969 - ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1970 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1817 + pm_nl_set_limits $ns1 1 1 1818 + pm_nl_set_limits $ns2 1 1 1819 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1971 1820 run_tests $ns1 $ns2 10.0.1.1 1972 1821 chk_join_nr "signal address allow join id0 ns2" 1 1 1 1973 1822 chk_add_nr 1 1 1974 1823 1975 1824 # subflow and address allow join id0 ns1 1976 1825 reset_with_allow_join_id0 1 0 1977 - ip netns exec $ns1 ./pm_nl_ctl limits 2 2 1978 - ip netns exec $ns2 ./pm_nl_ctl limits 2 2 1979 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1980 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1826 + pm_nl_set_limits $ns1 2 2 1827 + pm_nl_set_limits $ns2 2 2 1828 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1829 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1981 1830 run_tests $ns1 $ns2 10.0.1.1 1982 1831 chk_join_nr "subflow and address allow join id0 1" 2 2 2 1983 1832 1984 1833 # subflow and address allow join id0 ns2 1985 1834 reset_with_allow_join_id0 0 1 1986 - ip netns exec $ns1 ./pm_nl_ctl limits 2 2 1987 - ip netns exec $ns2 ./pm_nl_ctl limits 2 2 1988 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1989 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1835 + pm_nl_set_limits $ns1 2 2 1836 + pm_nl_set_limits $ns2 2 2 1837 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 1838 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow 1990 1839 run_tests $ns1 $ns2 10.0.1.1 1991 1840 chk_join_nr "subflow and address allow join id0 2" 1 1 1 1992 1841 } ··· 1997 1846 # 2 fullmesh addrs in ns2, added before the connection, 1998 1847 # 1 non-fullmesh addr in ns1, added during the connection. 1999 1848 reset 2000 - ip netns exec $ns1 ./pm_nl_ctl limits 0 4 2001 - ip netns exec $ns2 ./pm_nl_ctl limits 1 4 2002 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow,fullmesh 2003 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow,fullmesh 1849 + pm_nl_set_limits $ns1 0 4 1850 + pm_nl_set_limits $ns2 1 4 1851 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow,fullmesh 1852 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,fullmesh 2004 1853 run_tests $ns1 $ns2 10.0.1.1 0 1 0 slow 2005 1854 chk_join_nr "fullmesh test 2x1" 4 4 4 2006 1855 chk_add_nr 1 1 ··· 2009 1858 # 1 non-fullmesh addr in ns1, added before the connection, 2010 1859 # 1 fullmesh addr in ns2, added during the connection. 2011 1860 reset 2012 - ip netns exec $ns1 ./pm_nl_ctl limits 1 3 2013 - ip netns exec $ns2 ./pm_nl_ctl limits 1 3 2014 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1861 + pm_nl_set_limits $ns1 1 3 1862 + pm_nl_set_limits $ns2 1 3 1863 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 2015 1864 run_tests $ns1 $ns2 10.0.1.1 0 0 fullmesh_1 slow 2016 1865 chk_join_nr "fullmesh test 1x1" 3 3 3 2017 1866 chk_add_nr 1 1 ··· 2020 1869 # 1 non-fullmesh addr in ns1, added before the connection, 2021 1870 # 2 fullmesh addrs in ns2, added during the connection. 2022 1871 reset 2023 - ip netns exec $ns1 ./pm_nl_ctl limits 2 5 2024 - ip netns exec $ns2 ./pm_nl_ctl limits 1 5 2025 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1872 + pm_nl_set_limits $ns1 2 5 1873 + pm_nl_set_limits $ns2 1 5 1874 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 2026 1875 run_tests $ns1 $ns2 10.0.1.1 0 0 fullmesh_2 slow 2027 1876 chk_join_nr "fullmesh test 1x2" 5 5 5 2028 1877 chk_add_nr 1 1 ··· 2032 1881 # 2 fullmesh addrs in ns2, added during the connection, 2033 1882 # limit max_subflows to 4. 2034 1883 reset 2035 - ip netns exec $ns1 ./pm_nl_ctl limits 2 4 2036 - ip netns exec $ns2 ./pm_nl_ctl limits 1 4 2037 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1884 + pm_nl_set_limits $ns1 2 4 1885 + pm_nl_set_limits $ns2 1 4 1886 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 2038 1887 run_tests $ns1 $ns2 10.0.1.1 0 0 fullmesh_2 slow 2039 1888 chk_join_nr "fullmesh test 1x2, limited" 4 4 4 2040 1889 chk_add_nr 1 1 2041 1890 2042 1891 # set fullmesh flag 2043 1892 reset 2044 - ip netns exec $ns1 ./pm_nl_ctl limits 4 4 2045 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags subflow 2046 - ip netns exec $ns2 ./pm_nl_ctl limits 4 4 1893 + pm_nl_set_limits $ns1 4 4 1894 + pm_nl_add_endpoint $ns1 10.0.2.1 flags subflow 1895 + pm_nl_set_limits $ns2 4 4 2047 1896 run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow fullmesh 2048 1897 chk_join_nr "set fullmesh flag test" 2 2 2 2049 1898 chk_rm_nr 0 1 2050 1899 2051 1900 # set nofullmesh flag 2052 1901 reset 2053 - ip netns exec $ns1 ./pm_nl_ctl limits 4 4 2054 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags subflow,fullmesh 2055 - ip netns exec $ns2 ./pm_nl_ctl limits 4 4 1902 + pm_nl_set_limits $ns1 4 4 1903 + pm_nl_add_endpoint $ns1 10.0.2.1 flags subflow,fullmesh 1904 + pm_nl_set_limits $ns2 4 4 2056 1905 run_tests $ns1 $ns2 10.0.1.1 0 0 fullmesh_1 slow nofullmesh 2057 1906 chk_join_nr "set nofullmesh flag test" 2 2 2 2058 1907 chk_rm_nr 0 1 2059 1908 2060 1909 # set backup,fullmesh flags 2061 1910 reset 2062 - ip netns exec $ns1 ./pm_nl_ctl limits 4 4 2063 - ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags subflow 2064 - ip netns exec $ns2 ./pm_nl_ctl limits 4 4 1911 + pm_nl_set_limits $ns1 4 4 1912 + pm_nl_add_endpoint $ns1 10.0.2.1 flags subflow 1913 + pm_nl_set_limits $ns2 4 4 2065 1914 run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow backup,fullmesh 2066 1915 chk_join_nr "set backup,fullmesh flags test" 2 2 2 2067 1916 chk_prio_nr 0 1 ··· 2069 1918 2070 1919 # set nobackup,nofullmesh flags 2071 1920 reset 2072 - ip netns exec $ns1 ./pm_nl_ctl limits 4 4 2073 - ip netns exec $ns2 ./pm_nl_ctl limits 4 4 2074 - ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow,backup,fullmesh 1921 + pm_nl_set_limits $ns1 4 4 1922 + pm_nl_set_limits $ns2 4 4 1923 + pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow,backup,fullmesh 2075 1924 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow nobackup,nofullmesh 2076 1925 chk_join_nr "set nobackup,nofullmesh flags test" 2 2 2 2077 1926 chk_prio_nr 0 1 ··· 2117 1966 echo " -m fullmesh_tests" 2118 1967 echo " -c capture pcap files" 2119 1968 echo " -C enable data checksum" 1969 + echo " -i use ip mptcp" 2120 1970 echo " -h help" 2121 1971 } 2122 1972 ··· 2139 1987 if [[ "${arg}" =~ ^"-"[0-9a-zA-Z]*"C"[0-9a-zA-Z]*$ ]]; then 2140 1988 checksum=1 2141 1989 fi 1990 + if [[ "${arg}" =~ ^"-"[0-9a-zA-Z]*"i"[0-9a-zA-Z]*$ ]]; then 1991 + ip_mptcp=1 1992 + fi 2142 1993 2143 - # exception for the capture/checksum options, the rest means: a part of the tests 2144 - if [ "${arg}" != "-c" ] && [ "${arg}" != "-C" ]; then 1994 + # exception for the capture/checksum/ip_mptcp options, the rest means: a part of the tests 1995 + if [ "${arg}" != "-c" ] && [ "${arg}" != "-C" ] && [ "${arg}" != "-i" ]; then 2145 1996 do_all_tests=0 2146 1997 fi 2147 1998 done ··· 2154 1999 exit $ret 2155 2000 fi 2156 2001 2157 - while getopts 'fesltra64bpkdmchCS' opt; do 2002 + while getopts 'fesltra64bpkdmchCSi' opt; do 2158 2003 case $opt in 2159 2004 f) 2160 2005 subflows_tests ··· 2204 2049 c) 2205 2050 ;; 2206 2051 C) 2052 + ;; 2053 + i) 2207 2054 ;; 2208 2055 h | *) 2209 2056 usage
+18
tools/testing/selftests/net/mptcp/pm_netlink.sh
··· 164 164 id 254 flags 10.0.0.2 165 165 id 255 flags 10.0.0.3" "wrap-around ids" 166 166 167 + ip netns exec $ns1 ./pm_nl_ctl flush 168 + ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 flags subflow 169 + ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags backup 170 + check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 171 + subflow,backup 10.0.1.1" "set flags (backup)" 172 + ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags nobackup 173 + check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 174 + subflow 10.0.1.1" " (nobackup)" 175 + ip netns exec $ns1 ./pm_nl_ctl set id 1 flags fullmesh 176 + check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 177 + subflow,fullmesh 10.0.1.1" " (fullmesh)" 178 + ip netns exec $ns1 ./pm_nl_ctl set id 1 flags nofullmesh 179 + check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 180 + subflow 10.0.1.1" " (nofullmesh)" 181 + ip netns exec $ns1 ./pm_nl_ctl set id 1 flags backup,fullmesh 182 + check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 183 + subflow,backup,fullmesh 10.0.1.1" " (backup,fullmesh)" 184 + 167 185 exit $ret
+54 -21
tools/testing/selftests/net/mptcp/pm_nl_ctl.c
··· 28 28 fprintf(stderr, "\tadd [flags signal|subflow|backup|fullmesh] [id <nr>] [dev <name>] <ip>\n"); 29 29 fprintf(stderr, "\tdel <id> [<ip>]\n"); 30 30 fprintf(stderr, "\tget <id>\n"); 31 - fprintf(stderr, "\tset <ip> [flags backup|nobackup|fullmesh|nofullmesh]\n"); 31 + fprintf(stderr, "\tset [<ip>] [id <nr>] flags [no]backup|[no]fullmesh [port <nr>]\n"); 32 32 fprintf(stderr, "\tflush\n"); 33 33 fprintf(stderr, "\tdump\n"); 34 34 fprintf(stderr, "\tlimits [<rcv addr max> <subflow max>]\n"); ··· 657 657 u_int32_t flags = 0; 658 658 u_int16_t family; 659 659 int nest_start; 660 + int use_id = 0; 661 + u_int8_t id; 660 662 int off = 0; 661 - int arg; 663 + int arg = 2; 662 664 663 665 memset(data, 0, sizeof(data)); 664 666 nh = (void *)data; ··· 676 674 nest->rta_len = RTA_LENGTH(0); 677 675 off += NLMSG_ALIGN(nest->rta_len); 678 676 679 - /* addr data */ 680 - rta = (void *)(data + off); 681 - if (inet_pton(AF_INET, argv[2], RTA_DATA(rta))) { 682 - family = AF_INET; 683 - rta->rta_type = MPTCP_PM_ADDR_ATTR_ADDR4; 684 - rta->rta_len = RTA_LENGTH(4); 685 - } else if (inet_pton(AF_INET6, argv[2], RTA_DATA(rta))) { 686 - family = AF_INET6; 687 - rta->rta_type = MPTCP_PM_ADDR_ATTR_ADDR6; 688 - rta->rta_len = RTA_LENGTH(16); 677 + if (!strcmp(argv[arg], "id")) { 678 + if (++arg >= argc) 679 + error(1, 0, " missing id value"); 680 + 681 + use_id = 1; 682 + id = atoi(argv[arg]); 683 + rta = (void *)(data + off); 684 + rta->rta_type = MPTCP_PM_ADDR_ATTR_ID; 685 + rta->rta_len = RTA_LENGTH(1); 686 + memcpy(RTA_DATA(rta), &id, 1); 687 + off += NLMSG_ALIGN(rta->rta_len); 689 688 } else { 690 - error(1, errno, "can't parse ip %s", argv[2]); 689 + /* addr data */ 690 + rta = (void *)(data + off); 691 + if (inet_pton(AF_INET, argv[arg], RTA_DATA(rta))) { 692 + family = AF_INET; 693 + rta->rta_type = MPTCP_PM_ADDR_ATTR_ADDR4; 694 + rta->rta_len = RTA_LENGTH(4); 695 + } else if (inet_pton(AF_INET6, argv[arg], RTA_DATA(rta))) { 696 + family = AF_INET6; 697 + rta->rta_type = MPTCP_PM_ADDR_ATTR_ADDR6; 698 + rta->rta_len = RTA_LENGTH(16); 699 + } else { 700 + error(1, errno, "can't parse ip %s", argv[arg]); 701 + } 702 + off += NLMSG_ALIGN(rta->rta_len); 703 + 704 + /* family */ 705 + rta = (void *)(data + off); 706 + rta->rta_type = MPTCP_PM_ADDR_ATTR_FAMILY; 707 + rta->rta_len = RTA_LENGTH(2); 708 + memcpy(RTA_DATA(rta), &family, 2); 709 + off += NLMSG_ALIGN(rta->rta_len); 691 710 } 692 - off += NLMSG_ALIGN(rta->rta_len); 693 711 694 - /* family */ 695 - rta = (void *)(data + off); 696 - rta->rta_type = MPTCP_PM_ADDR_ATTR_FAMILY; 697 - rta->rta_len = RTA_LENGTH(2); 698 - memcpy(RTA_DATA(rta), &family, 2); 699 - off += NLMSG_ALIGN(rta->rta_len); 712 + if (++arg >= argc) 713 + error(1, 0, " missing flags keyword"); 700 714 701 - for (arg = 3; arg < argc; arg++) { 715 + for (; arg < argc; arg++) { 702 716 if (!strcmp(argv[arg], "flags")) { 703 717 char *tok, *str; 704 718 ··· 738 720 rta->rta_type = MPTCP_PM_ADDR_ATTR_FLAGS; 739 721 rta->rta_len = RTA_LENGTH(4); 740 722 memcpy(RTA_DATA(rta), &flags, 4); 723 + off += NLMSG_ALIGN(rta->rta_len); 724 + } else if (!strcmp(argv[arg], "port")) { 725 + u_int16_t port; 726 + 727 + if (use_id) 728 + error(1, 0, " port can't be used with id"); 729 + 730 + if (++arg >= argc) 731 + error(1, 0, " missing port value"); 732 + 733 + port = atoi(argv[arg]); 734 + rta = (void *)(data + off); 735 + rta->rta_type = MPTCP_PM_ADDR_ATTR_PORT; 736 + rta->rta_len = RTA_LENGTH(2); 737 + memcpy(RTA_DATA(rta), &port, 2); 741 738 off += NLMSG_ALIGN(rta->rta_len); 742 739 } else { 743 740 error(1, 0, "unknown keyword %s", argv[arg]);