@@ -26,6 +26,7 @@ ALL_TESTS="
2626 kci_test_fdb_get
2727 kci_test_neigh_get
2828 kci_test_bridge_parent_id
29+ kci_test_address_proto
2930"
3031
3132devdummy=" test-dummy0"
@@ -1249,6 +1250,96 @@ kci_test_bridge_parent_id()
12491250 echo " PASS: bridge_parent_id"
12501251}
12511252
1253+ address_get_proto ()
1254+ {
1255+ local addr=$1 ; shift
1256+
1257+ ip -N -j address show dev " $devdummy " |
1258+ jq -e -r --arg addr " ${addr%/* } " \
1259+ ' .[].addr_info[] | select(.local == $addr) | .protocol'
1260+ }
1261+
1262+ address_count ()
1263+ {
1264+ ip -N -j address show dev " $devdummy " " $@ " |
1265+ jq -e -r ' [.[].addr_info[] | .local | select(. != null)] | length'
1266+ }
1267+
1268+ do_test_address_proto ()
1269+ {
1270+ local what=$1 ; shift
1271+ local addr=$1 ; shift
1272+ local addr2=${addr%/* } 2/${addr#*/ }
1273+ local addr3=${addr%/* } 3/${addr#*/ }
1274+ local proto
1275+ local count
1276+ local ret=0
1277+ local err
1278+
1279+ ip address add dev " $devdummy " " $addr3 "
1280+ check_err $?
1281+ proto=$( address_get_proto " $addr3 " )
1282+ [[ " $proto " == null ]]
1283+ check_err $?
1284+
1285+ ip address add dev " $devdummy " " $addr2 " proto 0x99
1286+ check_err $?
1287+ proto=$( address_get_proto " $addr2 " )
1288+ [[ " $proto " == 0x99 ]]
1289+ check_err $?
1290+
1291+ ip address add dev " $devdummy " " $addr " proto 0xab
1292+ check_err $?
1293+ proto=$( address_get_proto " $addr " )
1294+ [[ " $proto " == 0xab ]]
1295+ check_err $?
1296+
1297+ ip address replace dev " $devdummy " " $addr " proto 0x11
1298+ proto=$( address_get_proto " $addr " )
1299+ check_err $?
1300+ [[ " $proto " == 0x11 ]]
1301+ check_err $?
1302+
1303+ count=$( address_count)
1304+ check_err $?
1305+ (( count == 3 )) # $addr, $addr2 and $addr3
1306+
1307+ count=$( address_count proto 0)
1308+ check_err $?
1309+ (( count == 1 )) # just $addr2
1310+
1311+ count=$( address_count proto 0x11)
1312+ check_err $?
1313+ (( count == 2 )) # $addr and $addr2
1314+
1315+ count=$( address_count proto 0xab)
1316+ check_err $?
1317+ (( count == 1 )) # just $addr2
1318+
1319+ ip address del dev " $devdummy " " $addr "
1320+ ip address del dev " $devdummy " " $addr2 "
1321+ ip address del dev " $devdummy " " $addr3 "
1322+
1323+ if [ $ret -ne 0 ]; then
1324+ echo " FAIL: address proto $what "
1325+ return 1
1326+ fi
1327+ echo " PASS: address proto $what "
1328+ }
1329+
1330+ kci_test_address_proto ()
1331+ {
1332+ local ret=0
1333+
1334+ do_test_address_proto IPv4 192.0.2.1/28
1335+ check_err $?
1336+
1337+ do_test_address_proto IPv6 2001:db8:1::1/64
1338+ check_err $?
1339+
1340+ return $ret
1341+ }
1342+
12521343kci_test_rtnl ()
12531344{
12541345 local current_test
0 commit comments