@@ -455,6 +455,12 @@ wait_mpj()
455
455
done
456
456
}
457
457
458
+ kill_wait ()
459
+ {
460
+ kill $1 > /dev/null 2>&1
461
+ wait $1 2> /dev/null
462
+ }
463
+
458
464
pm_nl_set_limits ()
459
465
{
460
466
local ns=$1
@@ -654,6 +660,9 @@ do_transfer()
654
660
655
661
local port=$(( 10000 + TEST_COUNT - 1 ))
656
662
local cappid
663
+ local userspace_pm=0
664
+ local evts_ns1
665
+ local evts_ns1_pid
657
666
658
667
:> " $cout "
659
668
:> " $sout "
@@ -690,12 +699,24 @@ do_transfer()
690
699
extra_args=" -r ${speed: 6} "
691
700
fi
692
701
702
+ if [[ " ${addr_nr_ns1} " = " userspace_" * ]]; then
703
+ userspace_pm=1
704
+ addr_nr_ns1=${addr_nr_ns1: 10}
705
+ fi
706
+
693
707
if [[ " ${addr_nr_ns2} " = " fastclose_" * ]]; then
694
708
# disconnect
695
709
extra_args=" $extra_args -I ${addr_nr_ns2: 10} "
696
710
addr_nr_ns2=0
697
711
fi
698
712
713
+ if [ $userspace_pm -eq 1 ]; then
714
+ evts_ns1=$( mktemp)
715
+ :> " $evts_ns1 "
716
+ ip netns exec ${listener_ns} ./pm_nl_ctl events >> " $evts_ns1 " 2>&1 &
717
+ evts_ns1_pid=$!
718
+ fi
719
+
699
720
local local_addr
700
721
if is_v6 " ${connect_addr} " ; then
701
722
local_addr=" ::"
@@ -748,16 +769,27 @@ do_transfer()
748
769
if [ $addr_nr_ns1 -gt 0 ]; then
749
770
local counter=2
750
771
local add_nr_ns1=${addr_nr_ns1}
772
+ local id=10
773
+ local tk
751
774
while [ $add_nr_ns1 -gt 0 ]; do
752
775
local addr
753
776
if is_v6 " ${connect_addr} " ; then
754
777
addr=" dead:beef:$counter ::1"
755
778
else
756
779
addr=" 10.0.$counter .1"
757
780
fi
758
- pm_nl_add_endpoint $ns1 $addr flags signal
781
+ if [ $userspace_pm -eq 0 ]; then
782
+ pm_nl_add_endpoint $ns1 $addr flags signal
783
+ else
784
+ tk=$( sed -n ' s/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' " $evts_ns1 " )
785
+ ip netns exec ${listener_ns} ./pm_nl_ctl ann $addr token $tk id $id
786
+ sleep 1
787
+ ip netns exec ${listener_ns} ./pm_nl_ctl rem token $tk id $id
788
+ fi
789
+
759
790
counter=$(( counter + 1 ))
760
791
add_nr_ns1=$(( add_nr_ns1 - 1 ))
792
+ id=$(( id + 1 ))
761
793
done
762
794
elif [ $addr_nr_ns1 -lt 0 ]; then
763
795
local rm_nr_ns1=$(( - addr_nr_ns1 ))
@@ -890,6 +922,11 @@ do_transfer()
890
922
kill $cappid
891
923
fi
892
924
925
+ if [ $userspace_pm -eq 1 ]; then
926
+ kill_wait $evts_ns1_pid
927
+ rm -rf $evts_ns1
928
+ fi
929
+
893
930
NSTAT_HISTORY=/tmp/${listener_ns} .nstat ip netns exec ${listener_ns} \
894
931
nstat | grep Tcp > /tmp/${listener_ns} .out
895
932
NSTAT_HISTORY=/tmp/${connector_ns} .nstat ip netns exec ${connector_ns} \
@@ -2810,6 +2847,16 @@ userspace_tests()
2810
2847
chk_join_nr 0 0 0
2811
2848
chk_rm_nr 0 0
2812
2849
fi
2850
+
2851
+ # userspace pm add & remove address
2852
+ if reset " userspace pm add & remove address" ; then
2853
+ set_userspace_pm $ns1
2854
+ pm_nl_set_limits $ns2 1 1
2855
+ run_tests $ns1 $ns2 10.0.1.1 0 userspace_1 0 slow
2856
+ chk_join_nr 1 1 1
2857
+ chk_add_nr 1 1
2858
+ chk_rm_nr 1 1 invert
2859
+ fi
2813
2860
}
2814
2861
2815
2862
endpoint_tests ()
0 commit comments