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

Merge branch 'selftests-updates-to-allow-single-instance-of-nettest-for-client-and-server'

David Ahern says:

====================
selftests: Updates to allow single instance of nettest for client and server

Update nettest to handle namespace change internally to allow a
single instance to run both client and server modes. Device validation
needs to be moved after the namespace change and a few run time
options need to be split to allow values for client and server.

v4
- really fix the memory leak with stdout/stderr buffers

v3
- send proper status in do_server for UDP sockets
- fix memory leak with stdout/stderr buffers
- new patch with separate option for address binding
- new patch to remove unnecessary newline

v2
- fix checkpath warnings
====================

Link: https://lore.kernel.org/r/20210114030949.54425-1-dsahern@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+606 -381
+201 -201
tools/testing/selftests/net/fcnal-test.sh
··· 801 801 802 802 # basic use case 803 803 log_start 804 - run_cmd nettest -s -M ${MD5_PW} -r ${NSB_IP} & 804 + run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} & 805 805 sleep 1 806 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 806 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 807 807 log_test $? 0 "MD5: Single address config" 808 808 809 809 # client sends MD5, server not configured ··· 811 811 show_hint "Should timeout due to MD5 mismatch" 812 812 run_cmd nettest -s & 813 813 sleep 1 814 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 814 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 815 815 log_test $? 2 "MD5: Server no config, client uses password" 816 816 817 817 # wrong password 818 818 log_start 819 819 show_hint "Should timeout since client uses wrong password" 820 - run_cmd nettest -s -M ${MD5_PW} -r ${NSB_IP} & 820 + run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} & 821 821 sleep 1 822 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_WRONG_PW} 822 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 823 823 log_test $? 2 "MD5: Client uses wrong password" 824 824 825 825 # client from different address 826 826 log_start 827 827 show_hint "Should timeout due to MD5 mismatch" 828 - run_cmd nettest -s -M ${MD5_PW} -r ${NSB_LO_IP} & 828 + run_cmd nettest -s -M ${MD5_PW} -m ${NSB_LO_IP} & 829 829 sleep 1 830 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 830 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 831 831 log_test $? 2 "MD5: Client address does not match address configured with password" 832 832 833 833 # ··· 838 838 log_start 839 839 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} & 840 840 sleep 1 841 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 841 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 842 842 log_test $? 0 "MD5: Prefix config" 843 843 844 844 # client in prefix, wrong password ··· 846 846 show_hint "Should timeout since client uses wrong password" 847 847 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} & 848 848 sleep 1 849 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_WRONG_PW} 849 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 850 850 log_test $? 2 "MD5: Prefix config, client uses wrong password" 851 851 852 852 # client outside of prefix ··· 854 854 show_hint "Should timeout due to MD5 mismatch" 855 855 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} & 856 856 sleep 1 857 - run_cmd_nsb nettest -l ${NSB_LO_IP} -r ${NSA_IP} -M ${MD5_PW} 857 + run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW} 858 858 log_test $? 2 "MD5: Prefix config, client address not in configured prefix" 859 859 } 860 860 ··· 869 869 870 870 # basic use case 871 871 log_start 872 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP} & 872 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 873 873 sleep 1 874 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 874 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 875 875 log_test $? 0 "MD5: VRF: Single address config" 876 876 877 877 # client sends MD5, server not configured 878 878 log_start 879 879 show_hint "Should timeout since server does not have MD5 auth" 880 - run_cmd nettest -s -d ${VRF} & 880 + run_cmd nettest -s -I ${VRF} & 881 881 sleep 1 882 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 882 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 883 883 log_test $? 2 "MD5: VRF: Server no config, client uses password" 884 884 885 885 # wrong password 886 886 log_start 887 887 show_hint "Should timeout since client uses wrong password" 888 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP} & 888 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 889 889 sleep 1 890 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_WRONG_PW} 890 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 891 891 log_test $? 2 "MD5: VRF: Client uses wrong password" 892 892 893 893 # client from different address 894 894 log_start 895 895 show_hint "Should timeout since server config differs from client" 896 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -r ${NSB_LO_IP} & 896 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP} & 897 897 sleep 1 898 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 898 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 899 899 log_test $? 2 "MD5: VRF: Client address does not match address configured with password" 900 900 901 901 # ··· 904 904 905 905 # client in prefix 906 906 log_start 907 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET} & 907 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 908 908 sleep 1 909 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 909 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 910 910 log_test $? 0 "MD5: VRF: Prefix config" 911 911 912 912 # client in prefix, wrong password 913 913 log_start 914 914 show_hint "Should timeout since client uses wrong password" 915 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET} & 915 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 916 916 sleep 1 917 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_WRONG_PW} 917 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 918 918 log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password" 919 919 920 920 # client outside of prefix 921 921 log_start 922 922 show_hint "Should timeout since client address is outside of prefix" 923 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET} & 923 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 924 924 sleep 1 925 - run_cmd_nsb nettest -l ${NSB_LO_IP} -r ${NSA_IP} -M ${MD5_PW} 925 + run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW} 926 926 log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix" 927 927 928 928 # ··· 930 930 # 931 931 932 932 log_start 933 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP} & 934 - run_cmd nettest -s -M ${MD5_WRONG_PW} -r ${NSB_IP} & 933 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 934 + run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} & 935 935 sleep 1 936 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 936 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 937 937 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF" 938 938 939 939 log_start 940 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP} & 941 - run_cmd nettest -s -M ${MD5_WRONG_PW} -r ${NSB_IP} & 940 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 941 + run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} & 942 942 sleep 1 943 - run_cmd_nsc nettest -r ${NSA_IP} -M ${MD5_WRONG_PW} 943 + run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 944 944 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF" 945 945 946 946 log_start 947 947 show_hint "Should timeout since client in default VRF uses VRF password" 948 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP} & 949 - run_cmd nettest -s -M ${MD5_WRONG_PW} -r ${NSB_IP} & 948 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 949 + run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} & 950 950 sleep 1 951 - run_cmd_nsc nettest -r ${NSA_IP} -M ${MD5_PW} 951 + run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW} 952 952 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw" 953 953 954 954 log_start 955 955 show_hint "Should timeout since client in VRF uses default VRF password" 956 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP} & 957 - run_cmd nettest -s -M ${MD5_WRONG_PW} -r ${NSB_IP} & 956 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 957 + run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} & 958 958 sleep 1 959 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_WRONG_PW} 959 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 960 960 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw" 961 961 962 962 log_start 963 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET} & 963 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 964 964 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} & 965 965 sleep 1 966 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_PW} 966 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 967 967 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF" 968 968 969 969 log_start 970 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET} & 970 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 971 971 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} & 972 972 sleep 1 973 - run_cmd_nsc nettest -r ${NSA_IP} -M ${MD5_WRONG_PW} 973 + run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 974 974 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF" 975 975 976 976 log_start 977 977 show_hint "Should timeout since client in default VRF uses VRF password" 978 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET} & 978 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 979 979 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} & 980 980 sleep 1 981 - run_cmd_nsc nettest -r ${NSA_IP} -M ${MD5_PW} 981 + run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW} 982 982 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw" 983 983 984 984 log_start 985 985 show_hint "Should timeout since client in VRF uses default VRF password" 986 - run_cmd nettest -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET} & 986 + run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 987 987 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} & 988 988 sleep 1 989 - run_cmd_nsb nettest -r ${NSA_IP} -M ${MD5_WRONG_PW} 989 + run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 990 990 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw" 991 991 992 992 # 993 993 # negative tests 994 994 # 995 995 log_start 996 - run_cmd nettest -s -d ${NSA_DEV} -M ${MD5_PW} -r ${NSB_IP} 996 + run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP} 997 997 log_test $? 1 "MD5: VRF: Device must be a VRF - single address" 998 998 999 999 log_start 1000 - run_cmd nettest -s -d ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET} 1000 + run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET} 1001 1001 log_test $? 1 "MD5: VRF: Device must be a VRF - prefix" 1002 1002 1003 1003 } ··· 1020 1020 1021 1021 a=${NSA_IP} 1022 1022 log_start 1023 - run_cmd nettest -s -d ${NSA_DEV} & 1023 + run_cmd nettest -s -I ${NSA_DEV} & 1024 1024 sleep 1 1025 1025 run_cmd_nsb nettest -r ${a} 1026 1026 log_test_addr ${a} $? 0 "Device server" ··· 1076 1076 1077 1077 a=${NSA_IP} 1078 1078 log_start 1079 - run_cmd nettest -s -d ${NSA_DEV} & 1079 + run_cmd nettest -s -I ${NSA_DEV} & 1080 1080 sleep 1 1081 1081 run_cmd nettest -r ${a} -0 ${a} 1082 1082 log_test_addr ${a} $? 0 "Device server, unbound client, local connection" ··· 1085 1085 do 1086 1086 log_start 1087 1087 show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope" 1088 - run_cmd nettest -s -d ${NSA_DEV} & 1088 + run_cmd nettest -s -I ${NSA_DEV} & 1089 1089 sleep 1 1090 1090 run_cmd nettest -r ${a} 1091 1091 log_test_addr ${a} $? 1 "Device server, unbound client, local connection" ··· 1110 1110 1111 1111 a=${NSA_IP} 1112 1112 log_start 1113 - run_cmd nettest -s -d ${NSA_DEV} -2 ${NSA_DEV} & 1113 + run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1114 1114 sleep 1 1115 1115 run_cmd nettest -d ${NSA_DEV} -r ${a} -0 ${a} 1116 1116 log_test_addr ${a} $? 0 "Device server, device client, local connection" ··· 1145 1145 log_test_addr ${a} $? 1 "Global server" 1146 1146 1147 1147 log_start 1148 - run_cmd nettest -s -d ${VRF} -2 ${VRF} & 1148 + run_cmd nettest -s -I ${VRF} -3 ${VRF} & 1149 1149 sleep 1 1150 1150 run_cmd_nsb nettest -r ${a} 1151 1151 log_test_addr ${a} $? 0 "VRF server" 1152 1152 1153 1153 log_start 1154 - run_cmd nettest -s -d ${NSA_DEV} -2 ${NSA_DEV} & 1154 + run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1155 1155 sleep 1 1156 1156 run_cmd_nsb nettest -r ${a} 1157 1157 log_test_addr ${a} $? 0 "Device server" ··· 1186 1186 do 1187 1187 log_start 1188 1188 show_hint "client socket should be bound to VRF" 1189 - run_cmd nettest -s -2 ${VRF} & 1189 + run_cmd nettest -s -3 ${VRF} & 1190 1190 sleep 1 1191 1191 run_cmd_nsb nettest -r ${a} 1192 1192 log_test_addr ${a} $? 0 "Global server" 1193 1193 1194 1194 log_start 1195 1195 show_hint "client socket should be bound to VRF" 1196 - run_cmd nettest -s -d ${VRF} -2 ${VRF} & 1196 + run_cmd nettest -s -I ${VRF} -3 ${VRF} & 1197 1197 sleep 1 1198 1198 run_cmd_nsb nettest -r ${a} 1199 1199 log_test_addr ${a} $? 0 "VRF server" ··· 1208 1208 a=${NSA_IP} 1209 1209 log_start 1210 1210 show_hint "client socket should be bound to device" 1211 - run_cmd nettest -s -d ${NSA_DEV} -2 ${NSA_DEV} & 1211 + run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1212 1212 sleep 1 1213 1213 run_cmd_nsb nettest -r ${a} 1214 1214 log_test_addr ${a} $? 0 "Device server" ··· 1218 1218 do 1219 1219 log_start 1220 1220 show_hint "Should fail 'Connection refused' since client is not bound to VRF" 1221 - run_cmd nettest -s -d ${VRF} & 1221 + run_cmd nettest -s -I ${VRF} & 1222 1222 sleep 1 1223 1223 run_cmd nettest -r ${a} 1224 1224 log_test_addr ${a} $? 1 "Global server, local connection" ··· 1255 1255 for a in ${NSA_IP} ${VRF_IP} 127.0.0.1 1256 1256 do 1257 1257 log_start 1258 - run_cmd nettest -s -d ${VRF} -2 ${VRF} & 1258 + run_cmd nettest -s -I ${VRF} -3 ${VRF} & 1259 1259 sleep 1 1260 1260 run_cmd nettest -r ${a} -d ${VRF} -0 ${a} 1261 1261 log_test_addr ${a} $? 0 "VRF server, VRF client, local connection" ··· 1263 1263 1264 1264 a=${NSA_IP} 1265 1265 log_start 1266 - run_cmd nettest -s -d ${VRF} -2 ${VRF} & 1266 + run_cmd nettest -s -I ${VRF} -3 ${VRF} & 1267 1267 sleep 1 1268 1268 run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a} 1269 1269 log_test_addr ${a} $? 0 "VRF server, device client, local connection" 1270 1270 1271 1271 log_start 1272 1272 show_hint "Should fail 'No route to host' since client is out of VRF scope" 1273 - run_cmd nettest -s -d ${VRF} & 1273 + run_cmd nettest -s -I ${VRF} & 1274 1274 sleep 1 1275 1275 run_cmd nettest -r ${a} 1276 1276 log_test_addr ${a} $? 1 "VRF server, unbound client, local connection" 1277 1277 1278 1278 log_start 1279 - run_cmd nettest -s -d ${NSA_DEV} -2 ${NSA_DEV} & 1279 + run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1280 1280 sleep 1 1281 1281 run_cmd nettest -r ${a} -d ${VRF} -0 ${a} 1282 1282 log_test_addr ${a} $? 0 "Device server, VRF client, local connection" 1283 1283 1284 1284 log_start 1285 - run_cmd nettest -s -d ${NSA_DEV} -2 ${NSA_DEV} & 1285 + run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1286 1286 sleep 1 1287 1287 run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a} 1288 1288 log_test_addr ${a} $? 0 "Device server, device client, local connection" ··· 1321 1321 for a in ${NSA_IP} ${NSA_LO_IP} 1322 1322 do 1323 1323 log_start 1324 - run_cmd nettest -D -s -2 ${NSA_DEV} & 1324 + run_cmd nettest -D -s -3 ${NSA_DEV} & 1325 1325 sleep 1 1326 1326 run_cmd_nsb nettest -D -r ${a} 1327 1327 log_test_addr ${a} $? 0 "Global server" ··· 1334 1334 1335 1335 a=${NSA_IP} 1336 1336 log_start 1337 - run_cmd nettest -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 1337 + run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 1338 1338 sleep 1 1339 1339 run_cmd_nsb nettest -D -r ${a} 1340 1340 log_test_addr ${a} $? 0 "Device server" ··· 1393 1393 1394 1394 a=${NSA_IP} 1395 1395 log_start 1396 - run_cmd nettest -s -D -d ${NSA_DEV} -2 ${NSA_DEV} & 1396 + run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1397 1397 sleep 1 1398 1398 run_cmd nettest -D -r ${a} 1399 1399 log_test_addr ${a} $? 0 "Device server, unbound client, local connection" ··· 1402 1402 do 1403 1403 log_start 1404 1404 show_hint "Should fail 'Connection refused' since address is out of device scope" 1405 - run_cmd nettest -s -D -d ${NSA_DEV} & 1405 + run_cmd nettest -s -D -I ${NSA_DEV} & 1406 1406 sleep 1 1407 1407 run_cmd nettest -D -r ${a} 1408 1408 log_test_addr ${a} $? 1 "Device server, unbound client, local connection" ··· 1456 1456 1457 1457 a=${NSA_IP} 1458 1458 log_start 1459 - run_cmd nettest -D -s -d ${NSA_DEV} -2 ${NSA_DEV} & 1459 + run_cmd nettest -D -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1460 1460 sleep 1 1461 1461 run_cmd nettest -D -d ${NSA_DEV} -r ${a} -0 ${a} 1462 1462 log_test_addr ${a} $? 0 "Device server, device client, local conn" ··· 1487 1487 log_test_addr ${a} $? 1 "Global server" 1488 1488 1489 1489 log_start 1490 - run_cmd nettest -D -d ${VRF} -s -2 ${NSA_DEV} & 1490 + run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} & 1491 1491 sleep 1 1492 1492 run_cmd_nsb nettest -D -r ${a} 1493 1493 log_test_addr ${a} $? 0 "VRF server" 1494 1494 1495 1495 log_start 1496 - run_cmd nettest -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 1496 + run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 1497 1497 sleep 1 1498 1498 run_cmd_nsb nettest -D -r ${a} 1499 1499 log_test_addr ${a} $? 0 "Enslaved device server" ··· 1513 1513 1514 1514 a=${NSA_IP} 1515 1515 log_start 1516 - run_cmd nettest -s -D -d ${VRF} -2 ${NSA_DEV} & 1516 + run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} & 1517 1517 sleep 1 1518 1518 run_cmd nettest -D -d ${VRF} -r ${a} 1519 1519 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" 1520 1520 1521 1521 log_start 1522 - run_cmd nettest -s -D -d ${VRF} -2 ${NSA_DEV} & 1522 + run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} & 1523 1523 sleep 1 1524 1524 run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1525 1525 log_test_addr ${a} $? 0 "VRF server, enslaved device client, local connection" 1526 1526 1527 1527 a=${NSA_IP} 1528 1528 log_start 1529 - run_cmd nettest -s -D -d ${NSA_DEV} -2 ${NSA_DEV} & 1529 + run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1530 1530 sleep 1 1531 1531 run_cmd nettest -D -d ${VRF} -r ${a} 1532 1532 log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn" 1533 1533 1534 1534 log_start 1535 - run_cmd nettest -s -D -d ${NSA_DEV} -2 ${NSA_DEV} & 1535 + run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1536 1536 sleep 1 1537 1537 run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1538 1538 log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn" ··· 1547 1547 for a in ${NSA_IP} ${VRF_IP} 1548 1548 do 1549 1549 log_start 1550 - run_cmd nettest -D -s -2 ${NSA_DEV} & 1550 + run_cmd nettest -D -s -3 ${NSA_DEV} & 1551 1551 sleep 1 1552 1552 run_cmd_nsb nettest -D -r ${a} 1553 1553 log_test_addr ${a} $? 0 "Global server" 1554 1554 1555 1555 log_start 1556 - run_cmd nettest -D -d ${VRF} -s -2 ${NSA_DEV} & 1556 + run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} & 1557 1557 sleep 1 1558 1558 run_cmd_nsb nettest -D -r ${a} 1559 1559 log_test_addr ${a} $? 0 "VRF server" 1560 1560 1561 1561 log_start 1562 - run_cmd nettest -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 1562 + run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 1563 1563 sleep 1 1564 1564 run_cmd_nsb nettest -D -r ${a} 1565 1565 log_test_addr ${a} $? 0 "Enslaved device server" ··· 1601 1601 # 1602 1602 a=${NSA_IP} 1603 1603 log_start 1604 - run_cmd nettest -D -s -2 ${NSA_DEV} & 1604 + run_cmd nettest -D -s -3 ${NSA_DEV} & 1605 1605 sleep 1 1606 1606 run_cmd nettest -D -d ${VRF} -r ${a} 1607 1607 log_test_addr ${a} $? 0 "Global server, VRF client, local conn" 1608 1608 1609 1609 log_start 1610 - run_cmd nettest -s -D -d ${VRF} -2 ${NSA_DEV} & 1610 + run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} & 1611 1611 sleep 1 1612 1612 run_cmd nettest -D -d ${VRF} -r ${a} 1613 1613 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" 1614 1614 1615 1615 log_start 1616 - run_cmd nettest -s -D -d ${VRF} -2 ${NSA_DEV} & 1616 + run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} & 1617 1617 sleep 1 1618 1618 run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1619 1619 log_test_addr ${a} $? 0 "VRF server, device client, local conn" 1620 1620 1621 1621 log_start 1622 - run_cmd nettest -s -D -d ${NSA_DEV} -2 ${NSA_DEV} & 1622 + run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1623 1623 sleep 1 1624 1624 run_cmd nettest -D -d ${VRF} -r ${a} 1625 1625 log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn" 1626 1626 1627 1627 log_start 1628 - run_cmd nettest -s -D -d ${NSA_DEV} -2 ${NSA_DEV} & 1628 + run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1629 1629 sleep 1 1630 1630 run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1631 1631 log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn" ··· 1633 1633 for a in ${VRF_IP} 127.0.0.1 1634 1634 do 1635 1635 log_start 1636 - run_cmd nettest -D -s -2 ${VRF} & 1636 + run_cmd nettest -D -s -3 ${VRF} & 1637 1637 sleep 1 1638 1638 run_cmd nettest -D -d ${VRF} -r ${a} 1639 1639 log_test_addr ${a} $? 0 "Global server, VRF client, local conn" ··· 1642 1642 for a in ${VRF_IP} 127.0.0.1 1643 1643 do 1644 1644 log_start 1645 - run_cmd nettest -s -D -d ${VRF} -2 ${VRF} & 1645 + run_cmd nettest -s -D -I ${VRF} -3 ${VRF} & 1646 1646 sleep 1 1647 1647 run_cmd nettest -D -d ${VRF} -r ${a} 1648 1648 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" ··· 1697 1697 log_test_addr ${a} $? 0 "Raw socket bind to local address" 1698 1698 1699 1699 log_start 1700 - run_cmd nettest -s -R -P icmp -l ${a} -d ${NSA_DEV} -b 1700 + run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b 1701 1701 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind" 1702 1702 done 1703 1703 ··· 1706 1706 # 1707 1707 a=${NSA_IP} 1708 1708 log_start 1709 - run_cmd nettest -l ${a} -r ${NSB_IP} -t1 -b 1709 + run_cmd nettest -c ${a} -r ${NSB_IP} -t1 -b 1710 1710 log_test_addr ${a} $? 0 "TCP socket bind to local address" 1711 1711 1712 1712 log_start 1713 - run_cmd nettest -l ${a} -r ${NSB_IP} -d ${NSA_DEV} -t1 -b 1713 + run_cmd nettest -c ${a} -r ${NSB_IP} -d ${NSA_DEV} -t1 -b 1714 1714 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind" 1715 1715 1716 1716 # Sadly, the kernel allows binding a socket to a device and then ··· 1720 1720 #a=${NSA_LO_IP} 1721 1721 #log_start 1722 1722 #show_hint "Should fail with 'Cannot assign requested address'" 1723 - #run_cmd nettest -s -l ${a} -d ${NSA_DEV} -t1 -b 1723 + #run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b 1724 1724 #log_test_addr ${a} $? 1 "TCP socket bind to out of scope local address" 1725 1725 } 1726 1726 ··· 1736 1736 log_test_addr ${a} $? 0 "Raw socket bind to local address" 1737 1737 1738 1738 log_start 1739 - run_cmd nettest -s -R -P icmp -l ${a} -d ${NSA_DEV} -b 1739 + run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b 1740 1740 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind" 1741 1741 log_start 1742 - run_cmd nettest -s -R -P icmp -l ${a} -d ${VRF} -b 1742 + run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b 1743 1743 log_test_addr ${a} $? 0 "Raw socket bind to local address after VRF bind" 1744 1744 done 1745 1745 1746 1746 a=${NSA_LO_IP} 1747 1747 log_start 1748 1748 show_hint "Address on loopback is out of VRF scope" 1749 - run_cmd nettest -s -R -P icmp -l ${a} -d ${VRF} -b 1749 + run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b 1750 1750 log_test_addr ${a} $? 1 "Raw socket bind to out of scope address after VRF bind" 1751 1751 1752 1752 # ··· 1755 1755 for a in ${NSA_IP} ${VRF_IP} 1756 1756 do 1757 1757 log_start 1758 - run_cmd nettest -s -l ${a} -d ${VRF} -t1 -b 1758 + run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b 1759 1759 log_test_addr ${a} $? 0 "TCP socket bind to local address" 1760 1760 1761 1761 log_start 1762 - run_cmd nettest -s -l ${a} -d ${NSA_DEV} -t1 -b 1762 + run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b 1763 1763 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind" 1764 1764 done 1765 1765 1766 1766 a=${NSA_LO_IP} 1767 1767 log_start 1768 1768 show_hint "Address on loopback out of scope for VRF" 1769 - run_cmd nettest -s -l ${a} -d ${VRF} -t1 -b 1769 + run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b 1770 1770 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF" 1771 1771 1772 1772 log_start 1773 1773 show_hint "Address on loopback out of scope for device in VRF" 1774 - run_cmd nettest -s -l ${a} -d ${NSA_DEV} -t1 -b 1774 + run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b 1775 1775 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind" 1776 1776 } 1777 1777 ··· 1818 1818 for a in ${NSA_IP} ${VRF_IP} 1819 1819 do 1820 1820 log_start 1821 - run_cmd nettest ${varg} -s -d ${VRF} & 1821 + run_cmd nettest ${varg} -s -I ${VRF} & 1822 1822 sleep 1 1823 1823 run_cmd_nsb nettest ${varg} -r ${a} & 1824 1824 sleep 3 ··· 1831 1831 1832 1832 a=${NSA_IP} 1833 1833 log_start 1834 - run_cmd nettest ${varg} -s -d ${NSA_DEV} & 1834 + run_cmd nettest ${varg} -s -I ${NSA_DEV} & 1835 1835 sleep 1 1836 1836 run_cmd_nsb nettest ${varg} -r ${a} & 1837 1837 sleep 3 ··· 1886 1886 for a in ${NSA_IP} ${VRF_IP} 1887 1887 do 1888 1888 log_start 1889 - run_cmd nettest ${varg} -d ${VRF} -s & 1889 + run_cmd nettest ${varg} -I ${VRF} -s & 1890 1890 sleep 1 1891 1891 run_cmd nettest ${varg} -d ${VRF} -r ${a} & 1892 1892 sleep 3 ··· 1910 1910 setup ${with_vrf} 1911 1911 1912 1912 log_start 1913 - run_cmd nettest ${varg} -d ${VRF} -s & 1913 + run_cmd nettest ${varg} -I ${VRF} -s & 1914 1914 sleep 1 1915 1915 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 1916 1916 sleep 3 ··· 1921 1921 setup ${with_vrf} 1922 1922 1923 1923 log_start 1924 - run_cmd nettest ${varg} -d ${NSA_DEV} -s & 1924 + run_cmd nettest ${varg} -I ${NSA_DEV} -s & 1925 1925 sleep 1 1926 1926 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 1927 1927 sleep 3 ··· 2265 2265 2266 2266 # basic use case 2267 2267 log_start 2268 - run_cmd nettest -6 -s -M ${MD5_PW} -r ${NSB_IP6} & 2268 + run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} & 2269 2269 sleep 1 2270 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2270 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2271 2271 log_test $? 0 "MD5: Single address config" 2272 2272 2273 2273 # client sends MD5, server not configured ··· 2275 2275 show_hint "Should timeout due to MD5 mismatch" 2276 2276 run_cmd nettest -6 -s & 2277 2277 sleep 1 2278 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2278 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2279 2279 log_test $? 2 "MD5: Server no config, client uses password" 2280 2280 2281 2281 # wrong password 2282 2282 log_start 2283 2283 show_hint "Should timeout since client uses wrong password" 2284 - run_cmd nettest -6 -s -M ${MD5_PW} -r ${NSB_IP6} & 2284 + run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} & 2285 2285 sleep 1 2286 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_WRONG_PW} 2286 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2287 2287 log_test $? 2 "MD5: Client uses wrong password" 2288 2288 2289 2289 # client from different address 2290 2290 log_start 2291 2291 show_hint "Should timeout due to MD5 mismatch" 2292 - run_cmd nettest -6 -s -M ${MD5_PW} -r ${NSB_LO_IP6} & 2292 + run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_LO_IP6} & 2293 2293 sleep 1 2294 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2294 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2295 2295 log_test $? 2 "MD5: Client address does not match address configured with password" 2296 2296 2297 2297 # ··· 2302 2302 log_start 2303 2303 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} & 2304 2304 sleep 1 2305 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2305 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2306 2306 log_test $? 0 "MD5: Prefix config" 2307 2307 2308 2308 # client in prefix, wrong password ··· 2310 2310 show_hint "Should timeout since client uses wrong password" 2311 2311 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} & 2312 2312 sleep 1 2313 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_WRONG_PW} 2313 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2314 2314 log_test $? 2 "MD5: Prefix config, client uses wrong password" 2315 2315 2316 2316 # client outside of prefix ··· 2318 2318 show_hint "Should timeout due to MD5 mismatch" 2319 2319 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} & 2320 2320 sleep 1 2321 - run_cmd_nsb nettest -6 -l ${NSB_LO_IP6} -r ${NSA_IP6} -M ${MD5_PW} 2321 + run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW} 2322 2322 log_test $? 2 "MD5: Prefix config, client address not in configured prefix" 2323 2323 } 2324 2324 ··· 2333 2333 2334 2334 # basic use case 2335 2335 log_start 2336 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP6} & 2336 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2337 2337 sleep 1 2338 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2338 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2339 2339 log_test $? 0 "MD5: VRF: Single address config" 2340 2340 2341 2341 # client sends MD5, server not configured 2342 2342 log_start 2343 2343 show_hint "Should timeout since server does not have MD5 auth" 2344 - run_cmd nettest -6 -s -d ${VRF} & 2344 + run_cmd nettest -6 -s -I ${VRF} & 2345 2345 sleep 1 2346 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2346 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2347 2347 log_test $? 2 "MD5: VRF: Server no config, client uses password" 2348 2348 2349 2349 # wrong password 2350 2350 log_start 2351 2351 show_hint "Should timeout since client uses wrong password" 2352 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP6} & 2352 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2353 2353 sleep 1 2354 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_WRONG_PW} 2354 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2355 2355 log_test $? 2 "MD5: VRF: Client uses wrong password" 2356 2356 2357 2357 # client from different address 2358 2358 log_start 2359 2359 show_hint "Should timeout since server config differs from client" 2360 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -r ${NSB_LO_IP6} & 2360 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP6} & 2361 2361 sleep 1 2362 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2362 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2363 2363 log_test $? 2 "MD5: VRF: Client address does not match address configured with password" 2364 2364 2365 2365 # ··· 2368 2368 2369 2369 # client in prefix 2370 2370 log_start 2371 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2371 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2372 2372 sleep 1 2373 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2373 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2374 2374 log_test $? 0 "MD5: VRF: Prefix config" 2375 2375 2376 2376 # client in prefix, wrong password 2377 2377 log_start 2378 2378 show_hint "Should timeout since client uses wrong password" 2379 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2379 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2380 2380 sleep 1 2381 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_WRONG_PW} 2381 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2382 2382 log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password" 2383 2383 2384 2384 # client outside of prefix 2385 2385 log_start 2386 2386 show_hint "Should timeout since client address is outside of prefix" 2387 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2387 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2388 2388 sleep 1 2389 - run_cmd_nsb nettest -6 -l ${NSB_LO_IP6} -r ${NSA_IP6} -M ${MD5_PW} 2389 + run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW} 2390 2390 log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix" 2391 2391 2392 2392 # ··· 2394 2394 # 2395 2395 2396 2396 log_start 2397 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP6} & 2398 - run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -r ${NSB_IP6} & 2397 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2398 + run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} & 2399 2399 sleep 1 2400 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2400 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2401 2401 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF" 2402 2402 2403 2403 log_start 2404 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP6} & 2405 - run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -r ${NSB_IP6} & 2404 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2405 + run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} & 2406 2406 sleep 1 2407 - run_cmd_nsc nettest -6 -r ${NSA_IP6} -M ${MD5_WRONG_PW} 2407 + run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2408 2408 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF" 2409 2409 2410 2410 log_start 2411 2411 show_hint "Should timeout since client in default VRF uses VRF password" 2412 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP6} & 2413 - run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -r ${NSB_IP6} & 2412 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2413 + run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} & 2414 2414 sleep 1 2415 - run_cmd_nsc nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2415 + run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2416 2416 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw" 2417 2417 2418 2418 log_start 2419 2419 show_hint "Should timeout since client in VRF uses default VRF password" 2420 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -r ${NSB_IP6} & 2421 - run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -r ${NSB_IP6} & 2420 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2421 + run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} & 2422 2422 sleep 1 2423 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_WRONG_PW} 2423 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2424 2424 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw" 2425 2425 2426 2426 log_start 2427 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2427 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2428 2428 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} & 2429 2429 sleep 1 2430 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2430 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2431 2431 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF" 2432 2432 2433 2433 log_start 2434 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2434 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2435 2435 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} & 2436 2436 sleep 1 2437 - run_cmd_nsc nettest -6 -r ${NSA_IP6} -M ${MD5_WRONG_PW} 2437 + run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2438 2438 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF" 2439 2439 2440 2440 log_start 2441 2441 show_hint "Should timeout since client in default VRF uses VRF password" 2442 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2442 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2443 2443 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} & 2444 2444 sleep 1 2445 - run_cmd_nsc nettest -6 -r ${NSA_IP6} -M ${MD5_PW} 2445 + run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2446 2446 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw" 2447 2447 2448 2448 log_start 2449 2449 show_hint "Should timeout since client in VRF uses default VRF password" 2450 - run_cmd nettest -6 -s -d ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2450 + run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2451 2451 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} & 2452 2452 sleep 1 2453 - run_cmd_nsb nettest -6 -r ${NSA_IP6} -M ${MD5_WRONG_PW} 2453 + run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2454 2454 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw" 2455 2455 2456 2456 # 2457 2457 # negative tests 2458 2458 # 2459 2459 log_start 2460 - run_cmd nettest -6 -s -d ${NSA_DEV} -M ${MD5_PW} -r ${NSB_IP6} 2460 + run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP6} 2461 2461 log_test $? 1 "MD5: VRF: Device must be a VRF - single address" 2462 2462 2463 2463 log_start 2464 - run_cmd nettest -6 -s -d ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET6} 2464 + run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET6} 2465 2465 log_test $? 1 "MD5: VRF: Device must be a VRF - prefix" 2466 2466 2467 2467 } ··· 2534 2534 2535 2535 a=${NSA_IP6} 2536 2536 log_start 2537 - run_cmd nettest -6 -s -d ${NSA_DEV} -2 ${NSA_DEV} & 2537 + run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2538 2538 sleep 1 2539 2539 run_cmd nettest -6 -r ${a} -0 ${a} 2540 2540 log_test_addr ${a} $? 0 "Device server, unbound client, local connection" ··· 2543 2543 do 2544 2544 log_start 2545 2545 show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope" 2546 - run_cmd nettest -6 -s -d ${NSA_DEV} & 2546 + run_cmd nettest -6 -s -I ${NSA_DEV} & 2547 2547 sleep 1 2548 2548 run_cmd nettest -6 -r ${a} 2549 2549 log_test_addr ${a} $? 1 "Device server, unbound client, local connection" ··· 2569 2569 for a in ${NSA_IP6} ${NSA_LINKIP6} 2570 2570 do 2571 2571 log_start 2572 - run_cmd nettest -6 -s -d ${NSA_DEV} -2 ${NSA_DEV} & 2572 + run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2573 2573 sleep 1 2574 2574 run_cmd nettest -6 -d ${NSA_DEV} -r ${a} 2575 2575 log_test_addr ${a} $? 0 "Device server, device client, local conn" ··· 2611 2611 for a in ${NSA_IP6} ${VRF_IP6} 2612 2612 do 2613 2613 log_start 2614 - run_cmd nettest -6 -s -d ${VRF} -2 ${VRF} & 2614 + run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} & 2615 2615 sleep 1 2616 2616 run_cmd_nsb nettest -6 -r ${a} 2617 2617 log_test_addr ${a} $? 0 "VRF server" ··· 2620 2620 # link local is always bound to ingress device 2621 2621 a=${NSA_LINKIP6}%${NSB_DEV} 2622 2622 log_start 2623 - run_cmd nettest -6 -s -d ${VRF} -2 ${NSA_DEV} & 2623 + run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} & 2624 2624 sleep 1 2625 2625 run_cmd_nsb nettest -6 -r ${a} 2626 2626 log_test_addr ${a} $? 0 "VRF server" ··· 2628 2628 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2629 2629 do 2630 2630 log_start 2631 - run_cmd nettest -6 -s -d ${NSA_DEV} -2 ${NSA_DEV} & 2631 + run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2632 2632 sleep 1 2633 2633 run_cmd_nsb nettest -6 -r ${a} 2634 2634 log_test_addr ${a} $? 0 "Device server" ··· 2664 2664 for a in ${NSA_IP6} ${VRF_IP6} 2665 2665 do 2666 2666 log_start 2667 - run_cmd nettest -6 -s -2 ${VRF} & 2667 + run_cmd nettest -6 -s -3 ${VRF} & 2668 2668 sleep 1 2669 2669 run_cmd_nsb nettest -6 -r ${a} 2670 2670 log_test_addr ${a} $? 0 "Global server" ··· 2673 2673 for a in ${NSA_IP6} ${VRF_IP6} 2674 2674 do 2675 2675 log_start 2676 - run_cmd nettest -6 -s -d ${VRF} -2 ${VRF} & 2676 + run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} & 2677 2677 sleep 1 2678 2678 run_cmd_nsb nettest -6 -r ${a} 2679 2679 log_test_addr ${a} $? 0 "VRF server" ··· 2682 2682 # For LLA, child socket is bound to device 2683 2683 a=${NSA_LINKIP6}%${NSB_DEV} 2684 2684 log_start 2685 - run_cmd nettest -6 -s -2 ${NSA_DEV} & 2685 + run_cmd nettest -6 -s -3 ${NSA_DEV} & 2686 2686 sleep 1 2687 2687 run_cmd_nsb nettest -6 -r ${a} 2688 2688 log_test_addr ${a} $? 0 "Global server" 2689 2689 2690 2690 log_start 2691 - run_cmd nettest -6 -s -d ${VRF} -2 ${NSA_DEV} & 2691 + run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} & 2692 2692 sleep 1 2693 2693 run_cmd_nsb nettest -6 -r ${a} 2694 2694 log_test_addr ${a} $? 0 "VRF server" ··· 2696 2696 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2697 2697 do 2698 2698 log_start 2699 - run_cmd nettest -6 -s -d ${NSA_DEV} -2 ${NSA_DEV} & 2699 + run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2700 2700 sleep 1 2701 2701 run_cmd_nsb nettest -6 -r ${a} 2702 2702 log_test_addr ${a} $? 0 "Device server" ··· 2716 2716 do 2717 2717 log_start 2718 2718 show_hint "Fails 'Connection refused' since client is not in VRF" 2719 - run_cmd nettest -6 -s -d ${VRF} & 2719 + run_cmd nettest -6 -s -I ${VRF} & 2720 2720 sleep 1 2721 2721 run_cmd nettest -6 -r ${a} 2722 2722 log_test_addr ${a} $? 1 "Global server, local connection" ··· 2771 2771 for a in ${NSA_IP6} ${VRF_IP6} ::1 2772 2772 do 2773 2773 log_start 2774 - run_cmd nettest -6 -s -d ${VRF} -2 ${VRF} & 2774 + run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} & 2775 2775 sleep 1 2776 2776 run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a} 2777 2777 log_test_addr ${a} $? 0 "VRF server, VRF client, local connection" ··· 2779 2779 2780 2780 a=${NSA_IP6} 2781 2781 log_start 2782 - run_cmd nettest -6 -s -d ${VRF} -2 ${VRF} & 2782 + run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} & 2783 2783 sleep 1 2784 2784 run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a} 2785 2785 log_test_addr ${a} $? 0 "VRF server, device client, local connection" ··· 2787 2787 a=${NSA_IP6} 2788 2788 log_start 2789 2789 show_hint "Should fail since unbound client is out of VRF scope" 2790 - run_cmd nettest -6 -s -d ${VRF} & 2790 + run_cmd nettest -6 -s -I ${VRF} & 2791 2791 sleep 1 2792 2792 run_cmd nettest -6 -r ${a} 2793 2793 log_test_addr ${a} $? 1 "VRF server, unbound client, local connection" 2794 2794 2795 2795 log_start 2796 - run_cmd nettest -6 -s -d ${NSA_DEV} -2 ${NSA_DEV} & 2796 + run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2797 2797 sleep 1 2798 2798 run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a} 2799 2799 log_test_addr ${a} $? 0 "Device server, VRF client, local connection" ··· 2801 2801 for a in ${NSA_IP6} ${NSA_LINKIP6} 2802 2802 do 2803 2803 log_start 2804 - run_cmd nettest -6 -s -d ${NSA_DEV} -2 ${NSA_DEV} & 2804 + run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2805 2805 sleep 1 2806 2806 run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a} 2807 2807 log_test_addr ${a} $? 0 "Device server, device client, local connection" ··· 2841 2841 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2842 2842 do 2843 2843 log_start 2844 - run_cmd nettest -6 -D -s -2 ${NSA_DEV} & 2844 + run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 2845 2845 sleep 1 2846 2846 run_cmd_nsb nettest -6 -D -r ${a} 2847 2847 log_test_addr ${a} $? 0 "Global server" 2848 2848 2849 2849 log_start 2850 - run_cmd nettest -6 -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 2850 + run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 2851 2851 sleep 1 2852 2852 run_cmd_nsb nettest -6 -D -r ${a} 2853 2853 log_test_addr ${a} $? 0 "Device server" ··· 2855 2855 2856 2856 a=${NSA_LO_IP6} 2857 2857 log_start 2858 - run_cmd nettest -6 -D -s -2 ${NSA_DEV} & 2858 + run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 2859 2859 sleep 1 2860 2860 run_cmd_nsb nettest -6 -D -r ${a} 2861 2861 log_test_addr ${a} $? 0 "Global server" ··· 2865 2865 # behavior. 2866 2866 #log_start 2867 2867 #show_hint "Should fail since loopback address is out of scope" 2868 - #run_cmd nettest -6 -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 2868 + #run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 2869 2869 #sleep 1 2870 2870 #run_cmd_nsb nettest -6 -D -r ${a} 2871 2871 #log_test_addr ${a} $? 1 "Device server" ··· 2933 2933 2934 2934 a=${NSA_IP6} 2935 2935 log_start 2936 - run_cmd nettest -6 -s -D -d ${NSA_DEV} -2 ${NSA_DEV} & 2936 + run_cmd nettest -6 -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 2937 2937 sleep 1 2938 2938 run_cmd nettest -6 -D -r ${a} 2939 2939 log_test_addr ${a} $? 0 "Device server, unbound client, local connection" ··· 2942 2942 do 2943 2943 log_start 2944 2944 show_hint "Should fail 'Connection refused' since address is out of device scope" 2945 - run_cmd nettest -6 -s -D -d ${NSA_DEV} & 2945 + run_cmd nettest -6 -s -D -I ${NSA_DEV} & 2946 2946 sleep 1 2947 2947 run_cmd nettest -6 -D -r ${a} 2948 2948 log_test_addr ${a} $? 1 "Device server, local connection" ··· 2993 2993 2994 2994 a=${NSA_IP6} 2995 2995 log_start 2996 - run_cmd nettest -6 -D -s -d ${NSA_DEV} -2 ${NSA_DEV} & 2996 + run_cmd nettest -6 -D -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2997 2997 sleep 1 2998 2998 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} -0 ${a} 2999 2999 log_test_addr ${a} $? 0 "Device server, device client, local conn" ··· 3040 3040 for a in ${NSA_IP6} ${VRF_IP6} 3041 3041 do 3042 3042 log_start 3043 - run_cmd nettest -6 -D -d ${VRF} -s -2 ${NSA_DEV} & 3043 + run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3044 3044 sleep 1 3045 3045 run_cmd_nsb nettest -6 -D -r ${a} 3046 3046 log_test_addr ${a} $? 0 "VRF server" ··· 3049 3049 for a in ${NSA_IP6} ${VRF_IP6} 3050 3050 do 3051 3051 log_start 3052 - run_cmd nettest -6 -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 3052 + run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3053 3053 sleep 1 3054 3054 run_cmd_nsb nettest -6 -D -r ${a} 3055 3055 log_test_addr ${a} $? 0 "Enslaved device server" ··· 3080 3080 for a in ${NSA_IP6} ${VRF_IP6} 3081 3081 do 3082 3082 log_start 3083 - run_cmd nettest -6 -D -d ${VRF} -s & 3083 + run_cmd nettest -6 -D -I ${VRF} -s & 3084 3084 sleep 1 3085 3085 run_cmd nettest -6 -D -d ${VRF} -r ${a} 3086 3086 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" ··· 3095 3095 log_test_addr ${a} $? 1 "Global server, device client, local conn" 3096 3096 3097 3097 log_start 3098 - run_cmd nettest -6 -D -d ${VRF} -s -2 ${NSA_DEV} & 3098 + run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3099 3099 sleep 1 3100 3100 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3101 3101 log_test_addr ${a} $? 0 "VRF server, device client, local conn" 3102 3102 3103 3103 log_start 3104 - run_cmd nettest -6 -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 3104 + run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3105 3105 sleep 1 3106 3106 run_cmd nettest -6 -D -d ${VRF} -r ${a} 3107 3107 log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn" 3108 3108 3109 3109 log_start 3110 - run_cmd nettest -6 -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 3110 + run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3111 3111 sleep 1 3112 3112 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3113 3113 log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn" ··· 3122 3122 for a in ${NSA_IP6} ${VRF_IP6} 3123 3123 do 3124 3124 log_start 3125 - run_cmd nettest -6 -D -s -2 ${NSA_DEV} & 3125 + run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 3126 3126 sleep 1 3127 3127 run_cmd_nsb nettest -6 -D -r ${a} 3128 3128 log_test_addr ${a} $? 0 "Global server" ··· 3131 3131 for a in ${NSA_IP6} ${VRF_IP6} 3132 3132 do 3133 3133 log_start 3134 - run_cmd nettest -6 -D -d ${VRF} -s -2 ${NSA_DEV} & 3134 + run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3135 3135 sleep 1 3136 3136 run_cmd_nsb nettest -6 -D -r ${a} 3137 3137 log_test_addr ${a} $? 0 "VRF server" ··· 3140 3140 for a in ${NSA_IP6} ${VRF_IP6} 3141 3141 do 3142 3142 log_start 3143 - run_cmd nettest -6 -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 3143 + run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3144 3144 sleep 1 3145 3145 run_cmd_nsb nettest -6 -D -r ${a} 3146 3146 log_test_addr ${a} $? 0 "Enslaved device server" ··· 3184 3184 # 3185 3185 a=${NSA_IP6} 3186 3186 log_start 3187 - run_cmd nettest -6 -D -s -2 ${NSA_DEV} & 3187 + run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 3188 3188 sleep 1 3189 3189 run_cmd nettest -6 -D -d ${VRF} -r ${a} 3190 3190 log_test_addr ${a} $? 0 "Global server, VRF client, local conn" 3191 3191 3192 3192 #log_start 3193 - run_cmd nettest -6 -D -d ${VRF} -s -2 ${NSA_DEV} & 3193 + run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3194 3194 sleep 1 3195 3195 run_cmd nettest -6 -D -d ${VRF} -r ${a} 3196 3196 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" ··· 3198 3198 3199 3199 a=${VRF_IP6} 3200 3200 log_start 3201 - run_cmd nettest -6 -D -s -2 ${VRF} & 3201 + run_cmd nettest -6 -D -s -3 ${VRF} & 3202 3202 sleep 1 3203 3203 run_cmd nettest -6 -D -d ${VRF} -r ${a} 3204 3204 log_test_addr ${a} $? 0 "Global server, VRF client, local conn" 3205 3205 3206 3206 log_start 3207 - run_cmd nettest -6 -D -d ${VRF} -s -2 ${VRF} & 3207 + run_cmd nettest -6 -D -I ${VRF} -s -3 ${VRF} & 3208 3208 sleep 1 3209 3209 run_cmd nettest -6 -D -d ${VRF} -r ${a} 3210 3210 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" ··· 3220 3220 # device to global IP 3221 3221 a=${NSA_IP6} 3222 3222 log_start 3223 - run_cmd nettest -6 -D -s -2 ${NSA_DEV} & 3223 + run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 3224 3224 sleep 1 3225 3225 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3226 3226 log_test_addr ${a} $? 0 "Global server, device client, local conn" 3227 3227 3228 3228 log_start 3229 - run_cmd nettest -6 -D -d ${VRF} -s -2 ${NSA_DEV} & 3229 + run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3230 3230 sleep 1 3231 3231 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3232 3232 log_test_addr ${a} $? 0 "VRF server, device client, local conn" 3233 3233 3234 3234 log_start 3235 - run_cmd nettest -6 -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 3235 + run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3236 3236 sleep 1 3237 3237 run_cmd nettest -6 -D -d ${VRF} -r ${a} 3238 3238 log_test_addr ${a} $? 0 "Device server, VRF client, local conn" 3239 3239 3240 3240 log_start 3241 - run_cmd nettest -6 -D -d ${NSA_DEV} -s -2 ${NSA_DEV} & 3241 + run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3242 3242 sleep 1 3243 3243 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3244 3244 log_test_addr ${a} $? 0 "Device server, device client, local conn" ··· 3332 3332 log_test_addr ${a} $? 0 "Raw socket bind to local address" 3333 3333 3334 3334 log_start 3335 - run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -d ${NSA_DEV} -b 3335 + run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b 3336 3336 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind" 3337 3337 done 3338 3338 ··· 3345 3345 log_test_addr ${a} $? 0 "TCP socket bind to local address" 3346 3346 3347 3347 log_start 3348 - run_cmd nettest -6 -s -l ${a} -d ${NSA_DEV} -t1 -b 3348 + run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3349 3349 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind" 3350 3350 3351 3351 a=${NSA_LO_IP6} 3352 3352 log_start 3353 3353 show_hint "Should fail with 'Cannot assign requested address'" 3354 - run_cmd nettest -6 -s -l ${a} -d ${NSA_DEV} -t1 -b 3354 + run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3355 3355 log_test_addr ${a} $? 1 "TCP socket bind to out of scope local address" 3356 3356 } 3357 3357 ··· 3363 3363 for a in ${NSA_IP6} ${VRF_IP6} 3364 3364 do 3365 3365 log_start 3366 - run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -d ${VRF} -b 3366 + run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b 3367 3367 log_test_addr ${a} $? 0 "Raw socket bind to local address after vrf bind" 3368 3368 3369 3369 log_start 3370 - run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -d ${NSA_DEV} -b 3370 + run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b 3371 3371 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind" 3372 3372 done 3373 3373 3374 3374 a=${NSA_LO_IP6} 3375 3375 log_start 3376 3376 show_hint "Address on loopback is out of VRF scope" 3377 - run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -d ${VRF} -b 3377 + run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b 3378 3378 log_test_addr ${a} $? 1 "Raw socket bind to invalid local address after vrf bind" 3379 3379 3380 3380 # ··· 3384 3384 for a in ${NSA_IP6} ${VRF_IP6} 3385 3385 do 3386 3386 log_start 3387 - run_cmd nettest -6 -s -l ${a} -d ${VRF} -t1 -b 3387 + run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b 3388 3388 log_test_addr ${a} $? 0 "TCP socket bind to local address with VRF bind" 3389 3389 done 3390 3390 3391 3391 a=${NSA_IP6} 3392 3392 log_start 3393 - run_cmd nettest -6 -s -l ${a} -d ${NSA_DEV} -t1 -b 3393 + run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3394 3394 log_test_addr ${a} $? 0 "TCP socket bind to local address with device bind" 3395 3395 3396 3396 a=${VRF_IP6} 3397 3397 log_start 3398 - run_cmd nettest -6 -s -l ${a} -d ${NSA_DEV} -t1 -b 3398 + run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3399 3399 log_test_addr ${a} $? 1 "TCP socket bind to VRF address with device bind" 3400 3400 3401 3401 a=${NSA_LO_IP6} 3402 3402 log_start 3403 3403 show_hint "Address on loopback out of scope for VRF" 3404 - run_cmd nettest -6 -s -l ${a} -d ${VRF} -t1 -b 3404 + run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b 3405 3405 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF" 3406 3406 3407 3407 log_start 3408 3408 show_hint "Address on loopback out of scope for device in VRF" 3409 - run_cmd nettest -6 -s -l ${a} -d ${NSA_DEV} -t1 -b 3409 + run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3410 3410 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind" 3411 3411 3412 3412 } ··· 3454 3454 for a in ${NSA_IP6} ${VRF_IP6} 3455 3455 do 3456 3456 log_start 3457 - run_cmd nettest ${varg} -d ${VRF} -s & 3457 + run_cmd nettest ${varg} -I ${VRF} -s & 3458 3458 sleep 1 3459 3459 run_cmd_nsb nettest ${varg} -r ${a} & 3460 3460 sleep 3 ··· 3468 3468 for a in ${NSA_IP6} ${VRF_IP6} 3469 3469 do 3470 3470 log_start 3471 - run_cmd nettest ${varg} -d ${NSA_DEV} -s & 3471 + run_cmd nettest ${varg} -I ${NSA_DEV} -s & 3472 3472 sleep 1 3473 3473 run_cmd_nsb nettest ${varg} -r ${a} & 3474 3474 sleep 3 ··· 3525 3525 for a in ${NSA_IP6} ${VRF_IP6} 3526 3526 do 3527 3527 log_start 3528 - run_cmd nettest ${varg} -d ${VRF} -s & 3528 + run_cmd nettest ${varg} -I ${VRF} -s & 3529 3529 sleep 1 3530 3530 run_cmd nettest ${varg} -d ${VRF} -r ${a} & 3531 3531 sleep 3 ··· 3549 3549 setup ${with_vrf} 3550 3550 3551 3551 log_start 3552 - run_cmd nettest ${varg} -d ${VRF} -s & 3552 + run_cmd nettest ${varg} -I ${VRF} -s & 3553 3553 sleep 1 3554 3554 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 3555 3555 sleep 3 ··· 3560 3560 setup ${with_vrf} 3561 3561 3562 3562 log_start 3563 - run_cmd nettest ${varg} -d ${NSA_DEV} -s & 3563 + run_cmd nettest ${varg} -I ${NSA_DEV} -s & 3564 3564 sleep 1 3565 3565 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 3566 3566 sleep 3
+405 -180
tools/testing/selftests/net/nettest.c
··· 9 9 #include <sys/types.h> 10 10 #include <sys/ioctl.h> 11 11 #include <sys/socket.h> 12 + #include <sys/wait.h> 12 13 #include <linux/tcp.h> 13 14 #include <arpa/inet.h> 14 15 #include <net/if.h> ··· 18 17 #include <fcntl.h> 19 18 #include <libgen.h> 20 19 #include <limits.h> 20 + #include <sched.h> 21 21 #include <stdarg.h> 22 22 #include <stdio.h> 23 23 #include <stdlib.h> ··· 36 34 37 35 #define DEFAULT_PORT 12345 38 36 37 + #define NS_PREFIX "/run/netns/" 38 + 39 39 #ifndef MAX 40 40 #define MAX(a, b) ((a) > (b) ? (a) : (b)) 41 41 #endif ··· 47 43 48 44 struct sock_args { 49 45 /* local address */ 46 + const char *local_addr_str; 47 + const char *client_local_addr_str; 50 48 union { 51 49 struct in_addr in; 52 50 struct in6_addr in6; 53 51 } local_addr; 54 52 55 53 /* remote address */ 54 + const char *remote_addr_str; 56 55 union { 57 56 struct in_addr in; 58 57 struct in6_addr in6; ··· 80 73 int use_setsockopt; 81 74 int use_cmsg; 82 75 const char *dev; 76 + const char *server_dev; 83 77 int ifindex; 84 78 79 + const char *clientns; 80 + const char *serverns; 81 + 85 82 const char *password; 83 + const char *client_pw; 86 84 /* prefix for MD5 password */ 85 + const char *md5_prefix_str; 87 86 union { 88 87 struct sockaddr_in v4; 89 88 struct sockaddr_in6 v6; ··· 97 84 unsigned int prefix_len; 98 85 99 86 /* expected addresses and device index for connection */ 87 + const char *expected_dev; 88 + const char *expected_server_dev; 100 89 int expected_ifindex; 101 90 102 91 /* local address */ 92 + const char *expected_laddr_str; 103 93 union { 104 94 struct in_addr in; 105 95 struct in6_addr in6; 106 96 } expected_laddr; 107 97 108 98 /* remote address */ 99 + const char *expected_raddr_str; 109 100 union { 110 101 struct in_addr in; 111 102 struct in6_addr in6; ··· 203 186 if (sa->sa_family == AF_INET) { 204 187 struct sockaddr_in *s = (struct sockaddr_in *) sa; 205 188 206 - log_msg("%s %s:%d", 189 + log_msg("%s %s:%d\n", 207 190 desc, 208 191 inet_ntop(AF_INET, &s->sin_addr, addrstr, 209 192 sizeof(addrstr)), ··· 212 195 } else if (sa->sa_family == AF_INET6) { 213 196 struct sockaddr_in6 *s6 = (struct sockaddr_in6 *) sa; 214 197 215 - log_msg("%s [%s]:%d", 198 + log_msg("%s [%s]:%d\n", 216 199 desc, 217 200 inet_ntop(AF_INET6, &s6->sin6_addr, addrstr, 218 201 sizeof(addrstr)), 219 202 ntohs(s6->sin6_port)); 220 203 } 221 204 222 - printf("\n"); 223 - 224 205 fflush(stdout); 206 + } 207 + 208 + static int switch_ns(const char *ns) 209 + { 210 + char path[PATH_MAX]; 211 + int fd, ret; 212 + 213 + if (geteuid()) 214 + log_error("warning: likely need root to set netns %s!\n", ns); 215 + 216 + snprintf(path, sizeof(path), "%s%s", NS_PREFIX, ns); 217 + fd = open(path, 0); 218 + if (fd < 0) { 219 + log_err_errno("Failed to open netns path; can not switch netns"); 220 + return 1; 221 + } 222 + 223 + ret = setns(fd, CLONE_NEWNET); 224 + close(fd); 225 + 226 + return ret; 225 227 } 226 228 227 229 static int tcp_md5sig(int sd, void *addr, socklen_t alen, struct sock_args *args) ··· 295 259 switch (args->version) { 296 260 case AF_INET: 297 261 sin.sin_port = htons(args->port); 298 - sin.sin_addr = args->remote_addr.in; 262 + sin.sin_addr = args->md5_prefix.v4.sin_addr; 299 263 addr = &sin; 300 264 alen = sizeof(sin); 301 265 break; 302 266 case AF_INET6: 303 267 sin6.sin6_port = htons(args->port); 304 - sin6.sin6_addr = args->remote_addr.in6; 268 + sin6.sin6_addr = args->md5_prefix.v6.sin6_addr; 305 269 addr = &sin6; 306 270 alen = sizeof(sin6); 307 271 break; ··· 558 522 return -1; 559 523 } 560 524 525 + static int resolve_devices(struct sock_args *args) 526 + { 527 + if (args->dev) { 528 + args->ifindex = get_ifidx(args->dev); 529 + if (args->ifindex < 0) { 530 + log_error("Invalid device name\n"); 531 + return 1; 532 + } 533 + } 534 + 535 + if (args->expected_dev) { 536 + unsigned int tmp; 537 + 538 + if (str_to_uint(args->expected_dev, 0, INT_MAX, &tmp) == 0) { 539 + args->expected_ifindex = (int)tmp; 540 + } else { 541 + args->expected_ifindex = get_ifidx(args->expected_dev); 542 + if (args->expected_ifindex < 0) { 543 + fprintf(stderr, "Invalid expected device\n"); 544 + return 1; 545 + } 546 + } 547 + } 548 + 549 + return 0; 550 + } 551 + 561 552 static int expected_addr_match(struct sockaddr *sa, void *expected, 562 553 const char *desc) 563 554 { ··· 596 533 struct in_addr *exp_in = (struct in_addr *) expected; 597 534 598 535 if (s->sin_addr.s_addr != exp_in->s_addr) { 599 - log_error("%s address does not match expected %s", 536 + log_error("%s address does not match expected %s\n", 600 537 desc, 601 538 inet_ntop(AF_INET, exp_in, 602 539 addrstr, sizeof(addrstr))); ··· 607 544 struct in6_addr *exp_in = (struct in6_addr *) expected; 608 545 609 546 if (memcmp(&s6->sin6_addr, exp_in, sizeof(*exp_in))) { 610 - log_error("%s address does not match expected %s", 547 + log_error("%s address does not match expected %s\n", 611 548 desc, 612 549 inet_ntop(AF_INET6, exp_in, 613 550 addrstr, sizeof(addrstr))); 614 551 rc = 1; 615 552 } 616 553 } else { 617 - log_error("%s address does not match expected - unknown family", 554 + log_error("%s address does not match expected - unknown family\n", 618 555 desc); 619 556 rc = 1; 620 557 } ··· 660 597 } 661 598 662 599 return rc; 600 + } 601 + 602 + enum addr_type { 603 + ADDR_TYPE_LOCAL, 604 + ADDR_TYPE_REMOTE, 605 + ADDR_TYPE_MCAST, 606 + ADDR_TYPE_EXPECTED_LOCAL, 607 + ADDR_TYPE_EXPECTED_REMOTE, 608 + ADDR_TYPE_MD5_PREFIX, 609 + }; 610 + 611 + static int convert_addr(struct sock_args *args, const char *_str, 612 + enum addr_type atype) 613 + { 614 + int pfx_len_max = args->version == AF_INET6 ? 128 : 32; 615 + int family = args->version; 616 + char *str, *dev, *sep; 617 + struct in6_addr *in6; 618 + struct in_addr *in; 619 + const char *desc; 620 + void *addr; 621 + int rc = 0; 622 + 623 + str = strdup(_str); 624 + if (!str) 625 + return -ENOMEM; 626 + 627 + switch (atype) { 628 + case ADDR_TYPE_LOCAL: 629 + desc = "local"; 630 + addr = &args->local_addr; 631 + break; 632 + case ADDR_TYPE_REMOTE: 633 + desc = "remote"; 634 + addr = &args->remote_addr; 635 + break; 636 + case ADDR_TYPE_MCAST: 637 + desc = "mcast grp"; 638 + addr = &args->grp; 639 + break; 640 + case ADDR_TYPE_EXPECTED_LOCAL: 641 + desc = "expected local"; 642 + addr = &args->expected_laddr; 643 + break; 644 + case ADDR_TYPE_EXPECTED_REMOTE: 645 + desc = "expected remote"; 646 + addr = &args->expected_raddr; 647 + break; 648 + case ADDR_TYPE_MD5_PREFIX: 649 + desc = "md5 prefix"; 650 + if (family == AF_INET) { 651 + args->md5_prefix.v4.sin_family = AF_INET; 652 + addr = &args->md5_prefix.v4.sin_addr; 653 + } else if (family == AF_INET6) { 654 + args->md5_prefix.v6.sin6_family = AF_INET6; 655 + addr = &args->md5_prefix.v6.sin6_addr; 656 + } else 657 + return 1; 658 + 659 + sep = strchr(str, '/'); 660 + if (sep) { 661 + *sep = '\0'; 662 + sep++; 663 + if (str_to_uint(sep, 1, pfx_len_max, 664 + &args->prefix_len) != 0) { 665 + fprintf(stderr, "Invalid port\n"); 666 + return 1; 667 + } 668 + } else { 669 + args->prefix_len = 0; 670 + } 671 + break; 672 + default: 673 + log_error("unknown address type\n"); 674 + exit(1); 675 + } 676 + 677 + switch (family) { 678 + case AF_INET: 679 + in = (struct in_addr *) addr; 680 + if (str) { 681 + if (inet_pton(AF_INET, str, in) == 0) { 682 + log_error("Invalid %s IP address\n", desc); 683 + rc = -1; 684 + goto out; 685 + } 686 + } else { 687 + in->s_addr = htonl(INADDR_ANY); 688 + } 689 + break; 690 + 691 + case AF_INET6: 692 + dev = strchr(str, '%'); 693 + if (dev) { 694 + *dev = '\0'; 695 + dev++; 696 + } 697 + 698 + in6 = (struct in6_addr *) addr; 699 + if (str) { 700 + if (inet_pton(AF_INET6, str, in6) == 0) { 701 + log_error("Invalid %s IPv6 address\n", desc); 702 + rc = -1; 703 + goto out; 704 + } 705 + } else { 706 + *in6 = in6addr_any; 707 + } 708 + if (dev) { 709 + args->scope_id = get_ifidx(dev); 710 + if (args->scope_id < 0) { 711 + log_error("Invalid scope on %s IPv6 address\n", 712 + desc); 713 + rc = -1; 714 + goto out; 715 + } 716 + } 717 + break; 718 + 719 + default: 720 + log_error("Invalid address family\n"); 721 + } 722 + 723 + out: 724 + free(str); 725 + return rc; 726 + } 727 + 728 + static int validate_addresses(struct sock_args *args) 729 + { 730 + if (args->local_addr_str && 731 + convert_addr(args, args->local_addr_str, ADDR_TYPE_LOCAL) < 0) 732 + return 1; 733 + 734 + if (args->remote_addr_str && 735 + convert_addr(args, args->remote_addr_str, ADDR_TYPE_REMOTE) < 0) 736 + return 1; 737 + 738 + if (args->md5_prefix_str && 739 + convert_addr(args, args->md5_prefix_str, 740 + ADDR_TYPE_MD5_PREFIX) < 0) 741 + return 1; 742 + 743 + if (args->expected_laddr_str && 744 + convert_addr(args, args->expected_laddr_str, 745 + ADDR_TYPE_EXPECTED_LOCAL)) 746 + return 1; 747 + 748 + if (args->expected_raddr_str && 749 + convert_addr(args, args->expected_raddr_str, 750 + ADDR_TYPE_EXPECTED_REMOTE)) 751 + return 1; 752 + 753 + return 0; 663 754 } 664 755 665 756 static int get_index_from_cmsg(struct msghdr *m) ··· 1397 1180 return -1; 1398 1181 } 1399 1182 1400 - static int do_server(struct sock_args *args) 1183 + static void ipc_write(int fd, int message) 1401 1184 { 1185 + /* Not in both_mode, so there's no process to signal */ 1186 + if (fd < 0) 1187 + return; 1188 + 1189 + if (write(fd, &message, sizeof(message)) < 0) 1190 + log_err_errno("Failed to send client status"); 1191 + } 1192 + 1193 + static int do_server(struct sock_args *args, int ipc_fd) 1194 + { 1195 + /* ipc_fd = -1 if no parent process to signal */ 1402 1196 struct timeval timeout = { .tv_sec = prog_timeout }, *ptval = NULL; 1403 1197 unsigned char addr[sizeof(struct sockaddr_in6)] = {}; 1404 1198 socklen_t alen = sizeof(addr); ··· 1417 1189 1418 1190 fd_set rfds; 1419 1191 int rc; 1192 + 1193 + if (args->serverns) { 1194 + if (switch_ns(args->serverns)) { 1195 + log_error("Could not set server netns to %s\n", 1196 + args->serverns); 1197 + goto err_exit; 1198 + } 1199 + log_msg("Switched server netns\n"); 1200 + } 1201 + 1202 + args->dev = args->server_dev; 1203 + args->expected_dev = args->expected_server_dev; 1204 + if (resolve_devices(args) || validate_addresses(args)) 1205 + goto err_exit; 1420 1206 1421 1207 if (prog_timeout) 1422 1208 ptval = &timeout; ··· 1441 1199 lsd = lsock_init(args); 1442 1200 1443 1201 if (lsd < 0) 1444 - return 1; 1202 + goto err_exit; 1445 1203 1446 1204 if (args->bind_test_only) { 1447 1205 close(lsd); 1206 + ipc_write(ipc_fd, 1); 1448 1207 return 0; 1449 1208 } 1450 1209 1451 1210 if (args->type != SOCK_STREAM) { 1211 + ipc_write(ipc_fd, 1); 1452 1212 rc = msg_loop(0, lsd, (void *) addr, alen, args); 1453 1213 close(lsd); 1454 1214 return rc; ··· 1458 1214 1459 1215 if (args->password && tcp_md5_remote(lsd, args)) { 1460 1216 close(lsd); 1461 - return 1; 1217 + goto err_exit; 1462 1218 } 1463 1219 1220 + ipc_write(ipc_fd, 1); 1464 1221 while (1) { 1465 - log_msg("\n"); 1466 1222 log_msg("waiting for client connection.\n"); 1467 1223 FD_ZERO(&rfds); 1468 1224 FD_SET(lsd, &rfds); ··· 1508 1264 close(lsd); 1509 1265 1510 1266 return rc; 1267 + err_exit: 1268 + ipc_write(ipc_fd, 0); 1269 + return 1; 1511 1270 } 1512 1271 1513 1272 static int wait_for_connect(int sd) ··· 1622 1375 return 1; 1623 1376 } 1624 1377 1378 + if (args->clientns) { 1379 + if (switch_ns(args->clientns)) { 1380 + log_error("Could not set client netns to %s\n", 1381 + args->clientns); 1382 + return 1; 1383 + } 1384 + log_msg("Switched client netns\n"); 1385 + } 1386 + 1387 + args->local_addr_str = args->client_local_addr_str; 1388 + if (resolve_devices(args) || validate_addresses(args)) 1389 + return 1; 1390 + 1391 + if ((args->use_setsockopt || args->use_cmsg) && !args->ifindex) { 1392 + fprintf(stderr, "Device binding not specified\n"); 1393 + return 1; 1394 + } 1395 + if (args->use_setsockopt || args->use_cmsg) 1396 + args->dev = NULL; 1397 + 1625 1398 switch (args->version) { 1626 1399 case AF_INET: 1627 1400 sin.sin_port = htons(args->port); ··· 1660 1393 alen = sizeof(sin6); 1661 1394 break; 1662 1395 } 1396 + 1397 + args->password = args->client_pw; 1663 1398 1664 1399 if (args->has_grp) 1665 1400 sd = msock_client(args); ··· 1688 1419 return rc; 1689 1420 } 1690 1421 1691 - enum addr_type { 1692 - ADDR_TYPE_LOCAL, 1693 - ADDR_TYPE_REMOTE, 1694 - ADDR_TYPE_MCAST, 1695 - ADDR_TYPE_EXPECTED_LOCAL, 1696 - ADDR_TYPE_EXPECTED_REMOTE, 1697 - ADDR_TYPE_MD5_PREFIX, 1698 - }; 1699 - 1700 - static int convert_addr(struct sock_args *args, const char *_str, 1701 - enum addr_type atype) 1702 - { 1703 - int pfx_len_max = args->version == AF_INET6 ? 128 : 32; 1704 - int family = args->version; 1705 - char *str, *dev, *sep; 1706 - struct in6_addr *in6; 1707 - struct in_addr *in; 1708 - const char *desc; 1709 - void *addr; 1710 - int rc = 0; 1711 - 1712 - str = strdup(_str); 1713 - if (!str) 1714 - return -ENOMEM; 1715 - 1716 - switch (atype) { 1717 - case ADDR_TYPE_LOCAL: 1718 - desc = "local"; 1719 - addr = &args->local_addr; 1720 - break; 1721 - case ADDR_TYPE_REMOTE: 1722 - desc = "remote"; 1723 - addr = &args->remote_addr; 1724 - break; 1725 - case ADDR_TYPE_MCAST: 1726 - desc = "mcast grp"; 1727 - addr = &args->grp; 1728 - break; 1729 - case ADDR_TYPE_EXPECTED_LOCAL: 1730 - desc = "expected local"; 1731 - addr = &args->expected_laddr; 1732 - break; 1733 - case ADDR_TYPE_EXPECTED_REMOTE: 1734 - desc = "expected remote"; 1735 - addr = &args->expected_raddr; 1736 - break; 1737 - case ADDR_TYPE_MD5_PREFIX: 1738 - desc = "md5 prefix"; 1739 - if (family == AF_INET) { 1740 - args->md5_prefix.v4.sin_family = AF_INET; 1741 - addr = &args->md5_prefix.v4.sin_addr; 1742 - } else if (family == AF_INET6) { 1743 - args->md5_prefix.v6.sin6_family = AF_INET6; 1744 - addr = &args->md5_prefix.v6.sin6_addr; 1745 - } else 1746 - return 1; 1747 - 1748 - sep = strchr(str, '/'); 1749 - if (sep) { 1750 - *sep = '\0'; 1751 - sep++; 1752 - if (str_to_uint(sep, 1, pfx_len_max, 1753 - &args->prefix_len) != 0) { 1754 - fprintf(stderr, "Invalid port\n"); 1755 - return 1; 1756 - } 1757 - } else { 1758 - args->prefix_len = pfx_len_max; 1759 - } 1760 - break; 1761 - default: 1762 - log_error("unknown address type"); 1763 - exit(1); 1764 - } 1765 - 1766 - switch (family) { 1767 - case AF_INET: 1768 - in = (struct in_addr *) addr; 1769 - if (str) { 1770 - if (inet_pton(AF_INET, str, in) == 0) { 1771 - log_error("Invalid %s IP address\n", desc); 1772 - rc = -1; 1773 - goto out; 1774 - } 1775 - } else { 1776 - in->s_addr = htonl(INADDR_ANY); 1777 - } 1778 - break; 1779 - 1780 - case AF_INET6: 1781 - dev = strchr(str, '%'); 1782 - if (dev) { 1783 - *dev = '\0'; 1784 - dev++; 1785 - } 1786 - 1787 - in6 = (struct in6_addr *) addr; 1788 - if (str) { 1789 - if (inet_pton(AF_INET6, str, in6) == 0) { 1790 - log_error("Invalid %s IPv6 address\n", desc); 1791 - rc = -1; 1792 - goto out; 1793 - } 1794 - } else { 1795 - *in6 = in6addr_any; 1796 - } 1797 - if (dev) { 1798 - args->scope_id = get_ifidx(dev); 1799 - if (args->scope_id < 0) { 1800 - log_error("Invalid scope on %s IPv6 address\n", 1801 - desc); 1802 - rc = -1; 1803 - goto out; 1804 - } 1805 - } 1806 - break; 1807 - 1808 - default: 1809 - log_error("Invalid address family\n"); 1810 - } 1811 - 1812 - out: 1813 - free(str); 1814 - return rc; 1815 - } 1816 - 1817 1422 static char *random_msg(int len) 1818 1423 { 1819 1424 int i, n = 0, olen = len + 1; ··· 1711 1568 return m; 1712 1569 } 1713 1570 1714 - #define GETOPT_STR "sr:l:p:t:g:P:DRn:M:m:d:SCi6L:0:1:2:Fbq" 1571 + static int ipc_child(int fd, struct sock_args *args) 1572 + { 1573 + char *outbuf, *errbuf; 1574 + int rc = 1; 1575 + 1576 + outbuf = malloc(4096); 1577 + errbuf = malloc(4096); 1578 + if (!outbuf || !errbuf) { 1579 + fprintf(stderr, "server: Failed to allocate buffers for stdout and stderr\n"); 1580 + goto out; 1581 + } 1582 + 1583 + setbuffer(stdout, outbuf, 4096); 1584 + setbuffer(stderr, errbuf, 4096); 1585 + 1586 + server_mode = 1; /* to tell log_msg in case we are in both_mode */ 1587 + 1588 + /* when running in both mode, address validation applies 1589 + * solely to client side 1590 + */ 1591 + args->has_expected_laddr = 0; 1592 + args->has_expected_raddr = 0; 1593 + 1594 + rc = do_server(args, fd); 1595 + 1596 + out: 1597 + free(outbuf); 1598 + free(errbuf); 1599 + 1600 + return rc; 1601 + } 1602 + 1603 + static int ipc_parent(int cpid, int fd, struct sock_args *args) 1604 + { 1605 + int client_status; 1606 + int status; 1607 + int buf; 1608 + 1609 + /* do the client-side function here in the parent process, 1610 + * waiting to be told when to continue 1611 + */ 1612 + if (read(fd, &buf, sizeof(buf)) <= 0) { 1613 + log_err_errno("Failed to read IPC status from status"); 1614 + return 1; 1615 + } 1616 + if (!buf) { 1617 + log_error("Server failed; can not continue\n"); 1618 + return 1; 1619 + } 1620 + log_msg("Server is ready\n"); 1621 + 1622 + client_status = do_client(args); 1623 + log_msg("parent is done!\n"); 1624 + 1625 + if (kill(cpid, 0) == 0) 1626 + kill(cpid, SIGKILL); 1627 + 1628 + wait(&status); 1629 + return client_status; 1630 + } 1631 + 1632 + #define GETOPT_STR "sr:l:c:p:t:g:P:DRn:M:X:m:d:I:BN:O:SCi6L:0:1:2:3:Fbq" 1715 1633 1716 1634 static void print_usage(char *prog) 1717 1635 { ··· 1786 1582 " -t timeout seconds (default: none)\n" 1787 1583 "\n" 1788 1584 "Optional:\n" 1585 + " -B do both client and server via fork and IPC\n" 1586 + " -N ns set client to network namespace ns (requires root)\n" 1587 + " -O ns set server to network namespace ns (requires root)\n" 1789 1588 " -F Restart server loop\n" 1790 1589 " -6 IPv6 (default is IPv4)\n" 1791 1590 " -P proto protocol for socket: icmp, ospf (default: none)\n" 1792 1591 " -D|R datagram (D) / raw (R) socket (default stream)\n" 1793 - " -l addr local address to bind to\n" 1592 + " -l addr local address to bind to in server mode\n" 1593 + " -c addr local address to bind to in client mode\n" 1794 1594 "\n" 1795 1595 " -d dev bind socket to given device name\n" 1596 + " -I dev bind socket to given device name - server mode\n" 1796 1597 " -S use setsockopt (IP_UNICAST_IF or IP_MULTICAST_IF)\n" 1797 1598 " to set device binding\n" 1798 1599 " -C use cmsg and IP_PKTINFO to specify device binding\n" ··· 1806 1597 " -n num number of times to send message\n" 1807 1598 "\n" 1808 1599 " -M password use MD5 sum protection\n" 1600 + " -X password MD5 password for client mode\n" 1809 1601 " -m prefix/len prefix and length to use for MD5 key\n" 1810 1602 " -g grp multicast group (e.g., 239.1.1.1)\n" 1811 1603 " -i interactive mode (default is echo and terminate)\n" ··· 1814 1604 " -0 addr Expected local address\n" 1815 1605 " -1 addr Expected remote address\n" 1816 1606 " -2 dev Expected device name (or index) to receive packet\n" 1607 + " -3 dev Expected device name (or index) to receive packets - server mode\n" 1817 1608 "\n" 1818 1609 " -b Bind test only.\n" 1819 1610 " -q Be quiet. Run test without printing anything.\n" ··· 1829 1618 .port = DEFAULT_PORT, 1830 1619 }; 1831 1620 struct protoent *pe; 1621 + int both_mode = 0; 1832 1622 unsigned int tmp; 1833 1623 int forever = 0; 1624 + int fd[2]; 1625 + int cpid; 1834 1626 1835 1627 /* process inputs */ 1836 1628 extern char *optarg; ··· 1845 1631 1846 1632 while ((rc = getopt(argc, argv, GETOPT_STR)) != -1) { 1847 1633 switch (rc) { 1634 + case 'B': 1635 + both_mode = 1; 1636 + break; 1848 1637 case 's': 1849 1638 server_mode = 1; 1850 1639 break; ··· 1856 1639 break; 1857 1640 case 'l': 1858 1641 args.has_local_ip = 1; 1859 - if (convert_addr(&args, optarg, ADDR_TYPE_LOCAL) < 0) 1860 - return 1; 1642 + args.local_addr_str = optarg; 1861 1643 break; 1862 1644 case 'r': 1863 1645 args.has_remote_ip = 1; 1864 - if (convert_addr(&args, optarg, ADDR_TYPE_REMOTE) < 0) 1865 - return 1; 1646 + args.remote_addr_str = optarg; 1647 + break; 1648 + case 'c': 1649 + args.has_local_ip = 1; 1650 + args.client_local_addr_str = optarg; 1866 1651 break; 1867 1652 case 'p': 1868 1653 if (str_to_uint(optarg, 1, 65535, &tmp) != 0) { ··· 1904 1685 case 'n': 1905 1686 iter = atoi(optarg); 1906 1687 break; 1688 + case 'N': 1689 + args.clientns = optarg; 1690 + break; 1691 + case 'O': 1692 + args.serverns = optarg; 1693 + break; 1907 1694 case 'L': 1908 1695 msg = random_msg(atoi(optarg)); 1909 1696 break; 1910 1697 case 'M': 1911 1698 args.password = optarg; 1912 1699 break; 1700 + case 'X': 1701 + args.client_pw = optarg; 1702 + break; 1913 1703 case 'm': 1914 - if (convert_addr(&args, optarg, ADDR_TYPE_MD5_PREFIX) < 0) 1915 - return 1; 1704 + args.md5_prefix_str = optarg; 1916 1705 break; 1917 1706 case 'S': 1918 1707 args.use_setsockopt = 1; ··· 1930 1703 break; 1931 1704 case 'd': 1932 1705 args.dev = optarg; 1933 - args.ifindex = get_ifidx(optarg); 1934 - if (args.ifindex < 0) { 1935 - fprintf(stderr, "Invalid device name\n"); 1936 - return 1; 1937 - } 1706 + break; 1707 + case 'I': 1708 + args.server_dev = optarg; 1938 1709 break; 1939 1710 case 'i': 1940 1711 interactive = 1; ··· 1951 1726 break; 1952 1727 case '0': 1953 1728 args.has_expected_laddr = 1; 1954 - if (convert_addr(&args, optarg, 1955 - ADDR_TYPE_EXPECTED_LOCAL)) 1956 - return 1; 1729 + args.expected_laddr_str = optarg; 1957 1730 break; 1958 1731 case '1': 1959 1732 args.has_expected_raddr = 1; 1960 - if (convert_addr(&args, optarg, 1961 - ADDR_TYPE_EXPECTED_REMOTE)) 1962 - return 1; 1963 - 1733 + args.expected_raddr_str = optarg; 1964 1734 break; 1965 1735 case '2': 1966 - if (str_to_uint(optarg, 0, INT_MAX, &tmp) == 0) { 1967 - args.expected_ifindex = (int)tmp; 1968 - } else { 1969 - args.expected_ifindex = get_ifidx(optarg); 1970 - if (args.expected_ifindex < 0) { 1971 - fprintf(stderr, 1972 - "Invalid expected device\n"); 1973 - return 1; 1974 - } 1975 - } 1736 + args.expected_dev = optarg; 1737 + break; 1738 + case '3': 1739 + args.expected_server_dev = optarg; 1976 1740 break; 1977 1741 case 'q': 1978 1742 quiet = 1; ··· 1973 1759 } 1974 1760 1975 1761 if (args.password && 1976 - ((!args.has_remote_ip && !args.prefix_len) || args.type != SOCK_STREAM)) { 1762 + ((!args.has_remote_ip && !args.md5_prefix_str) || 1763 + args.type != SOCK_STREAM)) { 1977 1764 log_error("MD5 passwords apply to TCP only and require a remote ip for the password\n"); 1978 1765 return 1; 1979 1766 } 1980 1767 1981 - if (args.prefix_len && !args.password) { 1768 + if (args.md5_prefix_str && !args.password) { 1982 1769 log_error("Prefix range for MD5 protection specified without a password\n"); 1983 1770 return 1; 1984 1771 } 1985 - 1986 - if ((args.use_setsockopt || args.use_cmsg) && !args.ifindex) { 1987 - fprintf(stderr, "Device binding not specified\n"); 1988 - return 1; 1989 - } 1990 - if (args.use_setsockopt || args.use_cmsg) 1991 - args.dev = NULL; 1992 1772 1993 1773 if (iter == 0) { 1994 1774 fprintf(stderr, "Invalid number of messages to send\n"); ··· 2000 1792 return 1; 2001 1793 } 2002 1794 2003 - if (!server_mode && !args.has_grp && 1795 + if ((both_mode || !server_mode) && !args.has_grp && 2004 1796 !args.has_remote_ip && !args.has_local_ip) { 2005 1797 fprintf(stderr, 2006 1798 "Local (server mode) or remote IP (client IP) required\n"); ··· 2012 1804 msg = NULL; 2013 1805 } 2014 1806 1807 + if (both_mode) { 1808 + if (pipe(fd) < 0) { 1809 + perror("pipe"); 1810 + exit(1); 1811 + } 1812 + 1813 + cpid = fork(); 1814 + if (cpid < 0) { 1815 + perror("fork"); 1816 + exit(1); 1817 + } 1818 + if (cpid) 1819 + return ipc_parent(cpid, fd[0], &args); 1820 + 1821 + return ipc_child(fd[1], &args); 1822 + } 1823 + 2015 1824 if (server_mode) { 2016 1825 do { 2017 - rc = do_server(&args); 1826 + rc = do_server(&args, -1); 2018 1827 } while (forever); 2019 1828 2020 1829 return rc;