+
+AT_SETUP([ofproto - ofport_request])
+OVS_VSWITCHD_START
+ADD_OF_PORTS([br0], [1], [2], [3])
+
+set_and_check_specific_ofports () {
+ ovs-vsctl set Interface p1 ofport_request="$1" -- \
+ set Interface p2 ofport_request="$2" -- \
+ set Interface p3 ofport_request="$3"
+ ofports=`ovs-vsctl get Interface p1 ofport -- \
+ get Interface p2 ofport -- \
+ get Interface p3 ofport`
+ AT_CHECK_UNQUOTED([echo $ofports], [0], [$1 $2 $3
+])
+}
+for pre in '1 2 3' '1 3 2' '2 1 3' '2 3 1' '3 1 2' '3 2 1'; do
+ for post in '1 2 3' '1 3 2' '2 1 3' '2 3 1' '3 1 2' '3 2 1'; do
+ echo -----------------------------------------------------------
+ echo "Check changing port numbers from $pre to $post"
+ set_and_check_ofports $pre
+ set_and_check_ofports $post
+ done
+done
+
+ovs-vsctl del-port p3
+
+set_and_check_poorly_specified_ofports () {
+ ovs-vsctl set Interface p1 ofport_request="$1" -- \
+ set Interface p2 ofport_request="$2"
+ p1=`ovs-vsctl get Interface p1 ofport`
+ p2=`ovs-vsctl get Interface p2 ofport`
+ echo $p1 $p2
+
+ AT_CHECK([test "$p1" != "$p2"])
+ if test "$1" = "$2" && test "$1" != '[[]]'; then
+ # One port number must be the requested one.
+ AT_CHECK([test "$p1" = "$1" || test "$p2" = "$1"])
+ # The other port number must be different (already tested above).
+ else
+ AT_CHECK([test "$1" = '[[]]' || test "$p1" == "$1"])
+ AT_CHECK([test "$2" = '[[]]' || test "$p2" == "$2"])
+ fi
+}
+for pre in '1 2' '[[]] 2' '1 [[]]' '[[]] [[]]' '2 1' '[[]] 1' '2 [[]]' \
+ '1 1' '2 2'; do
+ for post in '1 2' '[[]] 2' '1 [[]]' '[[]] [[]]' '2 1' '[[]] 1' '2 [[]]' \
+ '1 1' '2 2'; do
+ echo -----------------------------------------------------------
+ echo "Check changing port numbers from $pre to $post"
+ set_and_check_poorly_specified_ofports $pre
+ set_and_check_poorly_specified_ofports $post
+ done
+done
+OVS_VSWITCHD_STOP
+AT_CLEANUP