fcnal-test.sh 104 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. #
  4. # Copyright (c) 2019 David Ahern <[email protected]>. All rights reserved.
  5. #
  6. # IPv4 and IPv6 functional tests focusing on VRF and routing lookups
  7. # for various permutations:
  8. # 1. icmp, tcp, udp and netfilter
  9. # 2. client, server, no-server
  10. # 3. global address on interface
  11. # 4. global address on 'lo'
  12. # 5. remote and local traffic
  13. # 6. VRF and non-VRF permutations
  14. #
  15. # Setup:
  16. # ns-A | ns-B
  17. # No VRF case:
  18. # [ lo ] [ eth1 ]---|---[ eth1 ] [ lo ]
  19. # remote address
  20. # VRF case:
  21. # [ red ]---[ eth1 ]---|---[ eth1 ] [ lo ]
  22. #
  23. # ns-A:
  24. # eth1: 172.16.1.1/24, 2001:db8:1::1/64
  25. # lo: 127.0.0.1/8, ::1/128
  26. # 172.16.2.1/32, 2001:db8:2::1/128
  27. # red: 127.0.0.1/8, ::1/128
  28. # 172.16.3.1/32, 2001:db8:3::1/128
  29. #
  30. # ns-B:
  31. # eth1: 172.16.1.2/24, 2001:db8:1::2/64
  32. # lo2: 127.0.0.1/8, ::1/128
  33. # 172.16.2.2/32, 2001:db8:2::2/128
  34. #
  35. # ns-A to ns-C connection - only for VRF and same config
  36. # as ns-A to ns-B
  37. #
  38. # server / client nomenclature relative to ns-A
  39. # Kselftest framework requirement - SKIP code is 4.
  40. ksft_skip=4
  41. VERBOSE=0
  42. NSA_DEV=eth1
  43. NSA_DEV2=eth2
  44. NSB_DEV=eth1
  45. NSC_DEV=eth2
  46. VRF=red
  47. VRF_TABLE=1101
  48. # IPv4 config
  49. NSA_IP=172.16.1.1
  50. NSB_IP=172.16.1.2
  51. VRF_IP=172.16.3.1
  52. NS_NET=172.16.1.0/24
  53. # IPv6 config
  54. NSA_IP6=2001:db8:1::1
  55. NSB_IP6=2001:db8:1::2
  56. VRF_IP6=2001:db8:3::1
  57. NS_NET6=2001:db8:1::/120
  58. NSA_LO_IP=172.16.2.1
  59. NSB_LO_IP=172.16.2.2
  60. NSA_LO_IP6=2001:db8:2::1
  61. NSB_LO_IP6=2001:db8:2::2
  62. # non-local addresses for freebind tests
  63. NL_IP=172.17.1.1
  64. NL_IP6=2001:db8:4::1
  65. # multicast and broadcast addresses
  66. MCAST_IP=224.0.0.1
  67. BCAST_IP=255.255.255.255
  68. MD5_PW=abc123
  69. MD5_WRONG_PW=abc1234
  70. MCAST=ff02::1
  71. # set after namespace create
  72. NSA_LINKIP6=
  73. NSB_LINKIP6=
  74. NSA=ns-A
  75. NSB=ns-B
  76. NSC=ns-C
  77. NSA_CMD="ip netns exec ${NSA}"
  78. NSB_CMD="ip netns exec ${NSB}"
  79. NSC_CMD="ip netns exec ${NSC}"
  80. which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
  81. # Check if FIPS mode is enabled
  82. if [ -f /proc/sys/crypto/fips_enabled ]; then
  83. fips_enabled=`cat /proc/sys/crypto/fips_enabled`
  84. else
  85. fips_enabled=0
  86. fi
  87. ################################################################################
  88. # utilities
  89. log_test()
  90. {
  91. local rc=$1
  92. local expected=$2
  93. local msg="$3"
  94. [ "${VERBOSE}" = "1" ] && echo
  95. if [ ${rc} -eq ${expected} ]; then
  96. nsuccess=$((nsuccess+1))
  97. printf "TEST: %-70s [ OK ]\n" "${msg}"
  98. else
  99. nfail=$((nfail+1))
  100. printf "TEST: %-70s [FAIL]\n" "${msg}"
  101. if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
  102. echo
  103. echo "hit enter to continue, 'q' to quit"
  104. read a
  105. [ "$a" = "q" ] && exit 1
  106. fi
  107. fi
  108. if [ "${PAUSE}" = "yes" ]; then
  109. echo
  110. echo "hit enter to continue, 'q' to quit"
  111. read a
  112. [ "$a" = "q" ] && exit 1
  113. fi
  114. kill_procs
  115. }
  116. log_test_addr()
  117. {
  118. local addr=$1
  119. local rc=$2
  120. local expected=$3
  121. local msg="$4"
  122. local astr
  123. astr=$(addr2str ${addr})
  124. log_test $rc $expected "$msg - ${astr}"
  125. }
  126. log_section()
  127. {
  128. echo
  129. echo "###########################################################################"
  130. echo "$*"
  131. echo "###########################################################################"
  132. echo
  133. }
  134. log_subsection()
  135. {
  136. echo
  137. echo "#################################################################"
  138. echo "$*"
  139. echo
  140. }
  141. log_start()
  142. {
  143. # make sure we have no test instances running
  144. kill_procs
  145. if [ "${VERBOSE}" = "1" ]; then
  146. echo
  147. echo "#######################################################"
  148. fi
  149. }
  150. log_debug()
  151. {
  152. if [ "${VERBOSE}" = "1" ]; then
  153. echo
  154. echo "$*"
  155. echo
  156. fi
  157. }
  158. show_hint()
  159. {
  160. if [ "${VERBOSE}" = "1" ]; then
  161. echo "HINT: $*"
  162. echo
  163. fi
  164. }
  165. kill_procs()
  166. {
  167. killall nettest ping ping6 >/dev/null 2>&1
  168. sleep 1
  169. }
  170. do_run_cmd()
  171. {
  172. local cmd="$*"
  173. local out
  174. if [ "$VERBOSE" = "1" ]; then
  175. echo "COMMAND: ${cmd}"
  176. fi
  177. out=$($cmd 2>&1)
  178. rc=$?
  179. if [ "$VERBOSE" = "1" -a -n "$out" ]; then
  180. echo "$out"
  181. fi
  182. return $rc
  183. }
  184. run_cmd()
  185. {
  186. do_run_cmd ${NSA_CMD} $*
  187. }
  188. run_cmd_nsb()
  189. {
  190. do_run_cmd ${NSB_CMD} $*
  191. }
  192. run_cmd_nsc()
  193. {
  194. do_run_cmd ${NSC_CMD} $*
  195. }
  196. setup_cmd()
  197. {
  198. local cmd="$*"
  199. local rc
  200. run_cmd ${cmd}
  201. rc=$?
  202. if [ $rc -ne 0 ]; then
  203. # show user the command if not done so already
  204. if [ "$VERBOSE" = "0" ]; then
  205. echo "setup command: $cmd"
  206. fi
  207. echo "failed. stopping tests"
  208. if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
  209. echo
  210. echo "hit enter to continue"
  211. read a
  212. fi
  213. exit $rc
  214. fi
  215. }
  216. setup_cmd_nsb()
  217. {
  218. local cmd="$*"
  219. local rc
  220. run_cmd_nsb ${cmd}
  221. rc=$?
  222. if [ $rc -ne 0 ]; then
  223. # show user the command if not done so already
  224. if [ "$VERBOSE" = "0" ]; then
  225. echo "setup command: $cmd"
  226. fi
  227. echo "failed. stopping tests"
  228. if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
  229. echo
  230. echo "hit enter to continue"
  231. read a
  232. fi
  233. exit $rc
  234. fi
  235. }
  236. setup_cmd_nsc()
  237. {
  238. local cmd="$*"
  239. local rc
  240. run_cmd_nsc ${cmd}
  241. rc=$?
  242. if [ $rc -ne 0 ]; then
  243. # show user the command if not done so already
  244. if [ "$VERBOSE" = "0" ]; then
  245. echo "setup command: $cmd"
  246. fi
  247. echo "failed. stopping tests"
  248. if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
  249. echo
  250. echo "hit enter to continue"
  251. read a
  252. fi
  253. exit $rc
  254. fi
  255. }
  256. # set sysctl values in NS-A
  257. set_sysctl()
  258. {
  259. echo "SYSCTL: $*"
  260. echo
  261. run_cmd sysctl -q -w $*
  262. }
  263. # get sysctl values in NS-A
  264. get_sysctl()
  265. {
  266. ${NSA_CMD} sysctl -n $*
  267. }
  268. ################################################################################
  269. # Setup for tests
  270. addr2str()
  271. {
  272. case "$1" in
  273. 127.0.0.1) echo "loopback";;
  274. ::1) echo "IPv6 loopback";;
  275. ${BCAST_IP}) echo "broadcast";;
  276. ${MCAST_IP}) echo "multicast";;
  277. ${NSA_IP}) echo "ns-A IP";;
  278. ${NSA_IP6}) echo "ns-A IPv6";;
  279. ${NSA_LO_IP}) echo "ns-A loopback IP";;
  280. ${NSA_LO_IP6}) echo "ns-A loopback IPv6";;
  281. ${NSA_LINKIP6}|${NSA_LINKIP6}%*) echo "ns-A IPv6 LLA";;
  282. ${NSB_IP}) echo "ns-B IP";;
  283. ${NSB_IP6}) echo "ns-B IPv6";;
  284. ${NSB_LO_IP}) echo "ns-B loopback IP";;
  285. ${NSB_LO_IP6}) echo "ns-B loopback IPv6";;
  286. ${NSB_LINKIP6}|${NSB_LINKIP6}%*) echo "ns-B IPv6 LLA";;
  287. ${NL_IP}) echo "nonlocal IP";;
  288. ${NL_IP6}) echo "nonlocal IPv6";;
  289. ${VRF_IP}) echo "VRF IP";;
  290. ${VRF_IP6}) echo "VRF IPv6";;
  291. ${MCAST}%*) echo "multicast IP";;
  292. *) echo "unknown";;
  293. esac
  294. }
  295. get_linklocal()
  296. {
  297. local ns=$1
  298. local dev=$2
  299. local addr
  300. addr=$(ip -netns ${ns} -6 -br addr show dev ${dev} | \
  301. awk '{
  302. for (i = 3; i <= NF; ++i) {
  303. if ($i ~ /^fe80/)
  304. print $i
  305. }
  306. }'
  307. )
  308. addr=${addr/\/*}
  309. [ -z "$addr" ] && return 1
  310. echo $addr
  311. return 0
  312. }
  313. ################################################################################
  314. # create namespaces and vrf
  315. create_vrf()
  316. {
  317. local ns=$1
  318. local vrf=$2
  319. local table=$3
  320. local addr=$4
  321. local addr6=$5
  322. ip -netns ${ns} link add ${vrf} type vrf table ${table}
  323. ip -netns ${ns} link set ${vrf} up
  324. ip -netns ${ns} route add vrf ${vrf} unreachable default metric 8192
  325. ip -netns ${ns} -6 route add vrf ${vrf} unreachable default metric 8192
  326. ip -netns ${ns} addr add 127.0.0.1/8 dev ${vrf}
  327. ip -netns ${ns} -6 addr add ::1 dev ${vrf} nodad
  328. if [ "${addr}" != "-" ]; then
  329. ip -netns ${ns} addr add dev ${vrf} ${addr}
  330. fi
  331. if [ "${addr6}" != "-" ]; then
  332. ip -netns ${ns} -6 addr add dev ${vrf} ${addr6}
  333. fi
  334. ip -netns ${ns} ru del pref 0
  335. ip -netns ${ns} ru add pref 32765 from all lookup local
  336. ip -netns ${ns} -6 ru del pref 0
  337. ip -netns ${ns} -6 ru add pref 32765 from all lookup local
  338. }
  339. create_ns()
  340. {
  341. local ns=$1
  342. local addr=$2
  343. local addr6=$3
  344. ip netns add ${ns}
  345. ip -netns ${ns} link set lo up
  346. if [ "${addr}" != "-" ]; then
  347. ip -netns ${ns} addr add dev lo ${addr}
  348. fi
  349. if [ "${addr6}" != "-" ]; then
  350. ip -netns ${ns} -6 addr add dev lo ${addr6}
  351. fi
  352. ip -netns ${ns} ro add unreachable default metric 8192
  353. ip -netns ${ns} -6 ro add unreachable default metric 8192
  354. ip netns exec ${ns} sysctl -qw net.ipv4.ip_forward=1
  355. ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1
  356. ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.forwarding=1
  357. ip netns exec ${ns} sysctl -qw net.ipv6.conf.default.forwarding=1
  358. }
  359. # create veth pair to connect namespaces and apply addresses.
  360. connect_ns()
  361. {
  362. local ns1=$1
  363. local ns1_dev=$2
  364. local ns1_addr=$3
  365. local ns1_addr6=$4
  366. local ns2=$5
  367. local ns2_dev=$6
  368. local ns2_addr=$7
  369. local ns2_addr6=$8
  370. ip -netns ${ns1} li add ${ns1_dev} type veth peer name tmp
  371. ip -netns ${ns1} li set ${ns1_dev} up
  372. ip -netns ${ns1} li set tmp netns ${ns2} name ${ns2_dev}
  373. ip -netns ${ns2} li set ${ns2_dev} up
  374. if [ "${ns1_addr}" != "-" ]; then
  375. ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr}
  376. ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr}
  377. fi
  378. if [ "${ns1_addr6}" != "-" ]; then
  379. ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr6}
  380. ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr6}
  381. fi
  382. }
  383. cleanup()
  384. {
  385. # explicit cleanups to check those code paths
  386. ip netns | grep -q ${NSA}
  387. if [ $? -eq 0 ]; then
  388. ip -netns ${NSA} link delete ${VRF}
  389. ip -netns ${NSA} ro flush table ${VRF_TABLE}
  390. ip -netns ${NSA} addr flush dev ${NSA_DEV}
  391. ip -netns ${NSA} -6 addr flush dev ${NSA_DEV}
  392. ip -netns ${NSA} link set dev ${NSA_DEV} down
  393. ip -netns ${NSA} link del dev ${NSA_DEV}
  394. ip netns pids ${NSA} | xargs kill 2>/dev/null
  395. ip netns del ${NSA}
  396. fi
  397. ip netns pids ${NSB} | xargs kill 2>/dev/null
  398. ip netns del ${NSB}
  399. ip netns pids ${NSC} | xargs kill 2>/dev/null
  400. ip netns del ${NSC} >/dev/null 2>&1
  401. }
  402. cleanup_vrf_dup()
  403. {
  404. ip link del ${NSA_DEV2} >/dev/null 2>&1
  405. ip netns pids ${NSC} | xargs kill 2>/dev/null
  406. ip netns del ${NSC} >/dev/null 2>&1
  407. }
  408. setup_vrf_dup()
  409. {
  410. # some VRF tests use ns-C which has the same config as
  411. # ns-B but for a device NOT in the VRF
  412. create_ns ${NSC} "-" "-"
  413. connect_ns ${NSA} ${NSA_DEV2} ${NSA_IP}/24 ${NSA_IP6}/64 \
  414. ${NSC} ${NSC_DEV} ${NSB_IP}/24 ${NSB_IP6}/64
  415. }
  416. setup()
  417. {
  418. local with_vrf=${1}
  419. # make sure we are starting with a clean slate
  420. kill_procs
  421. cleanup 2>/dev/null
  422. log_debug "Configuring network namespaces"
  423. set -e
  424. create_ns ${NSA} ${NSA_LO_IP}/32 ${NSA_LO_IP6}/128
  425. create_ns ${NSB} ${NSB_LO_IP}/32 ${NSB_LO_IP6}/128
  426. connect_ns ${NSA} ${NSA_DEV} ${NSA_IP}/24 ${NSA_IP6}/64 \
  427. ${NSB} ${NSB_DEV} ${NSB_IP}/24 ${NSB_IP6}/64
  428. NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV})
  429. NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV})
  430. # tell ns-A how to get to remote addresses of ns-B
  431. if [ "${with_vrf}" = "yes" ]; then
  432. create_vrf ${NSA} ${VRF} ${VRF_TABLE} ${VRF_IP} ${VRF_IP6}
  433. ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF}
  434. ip -netns ${NSA} ro add vrf ${VRF} ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV}
  435. ip -netns ${NSA} -6 ro add vrf ${VRF} ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV}
  436. ip -netns ${NSB} ro add ${VRF_IP}/32 via ${NSA_IP} dev ${NSB_DEV}
  437. ip -netns ${NSB} -6 ro add ${VRF_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV}
  438. else
  439. ip -netns ${NSA} ro add ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV}
  440. ip -netns ${NSA} ro add ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV}
  441. fi
  442. # tell ns-B how to get to remote addresses of ns-A
  443. ip -netns ${NSB} ro add ${NSA_LO_IP}/32 via ${NSA_IP} dev ${NSB_DEV}
  444. ip -netns ${NSB} ro add ${NSA_LO_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV}
  445. set +e
  446. sleep 1
  447. }
  448. setup_lla_only()
  449. {
  450. # make sure we are starting with a clean slate
  451. kill_procs
  452. cleanup 2>/dev/null
  453. log_debug "Configuring network namespaces"
  454. set -e
  455. create_ns ${NSA} "-" "-"
  456. create_ns ${NSB} "-" "-"
  457. create_ns ${NSC} "-" "-"
  458. connect_ns ${NSA} ${NSA_DEV} "-" "-" \
  459. ${NSB} ${NSB_DEV} "-" "-"
  460. connect_ns ${NSA} ${NSA_DEV2} "-" "-" \
  461. ${NSC} ${NSC_DEV} "-" "-"
  462. NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV})
  463. NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV})
  464. NSC_LINKIP6=$(get_linklocal ${NSC} ${NSC_DEV})
  465. create_vrf ${NSA} ${VRF} ${VRF_TABLE} "-" "-"
  466. ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF}
  467. ip -netns ${NSA} link set dev ${NSA_DEV2} vrf ${VRF}
  468. set +e
  469. sleep 1
  470. }
  471. ################################################################################
  472. # IPv4
  473. ipv4_ping_novrf()
  474. {
  475. local a
  476. #
  477. # out
  478. #
  479. for a in ${NSB_IP} ${NSB_LO_IP}
  480. do
  481. log_start
  482. run_cmd ping -c1 -w1 ${a}
  483. log_test_addr ${a} $? 0 "ping out"
  484. log_start
  485. run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  486. log_test_addr ${a} $? 0 "ping out, device bind"
  487. log_start
  488. run_cmd ping -c1 -w1 -I ${NSA_LO_IP} ${a}
  489. log_test_addr ${a} $? 0 "ping out, address bind"
  490. done
  491. #
  492. # in
  493. #
  494. for a in ${NSA_IP} ${NSA_LO_IP}
  495. do
  496. log_start
  497. run_cmd_nsb ping -c1 -w1 ${a}
  498. log_test_addr ${a} $? 0 "ping in"
  499. done
  500. #
  501. # local traffic
  502. #
  503. for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1
  504. do
  505. log_start
  506. run_cmd ping -c1 -w1 ${a}
  507. log_test_addr ${a} $? 0 "ping local"
  508. done
  509. #
  510. # local traffic, socket bound to device
  511. #
  512. # address on device
  513. a=${NSA_IP}
  514. log_start
  515. run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  516. log_test_addr ${a} $? 0 "ping local, device bind"
  517. # loopback addresses not reachable from device bind
  518. # fails in a really weird way though because ipv4 special cases
  519. # route lookups with oif set.
  520. for a in ${NSA_LO_IP} 127.0.0.1
  521. do
  522. log_start
  523. show_hint "Fails since address on loopback device is out of device scope"
  524. run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  525. log_test_addr ${a} $? 1 "ping local, device bind"
  526. done
  527. #
  528. # ip rule blocks reachability to remote address
  529. #
  530. log_start
  531. setup_cmd ip rule add pref 32765 from all lookup local
  532. setup_cmd ip rule del pref 0 from all lookup local
  533. setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit
  534. setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit
  535. a=${NSB_LO_IP}
  536. run_cmd ping -c1 -w1 ${a}
  537. log_test_addr ${a} $? 2 "ping out, blocked by rule"
  538. # NOTE: ipv4 actually allows the lookup to fail and yet still create
  539. # a viable rtable if the oif (e.g., bind to device) is set, so this
  540. # case succeeds despite the rule
  541. # run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  542. a=${NSA_LO_IP}
  543. log_start
  544. show_hint "Response generates ICMP (or arp request is ignored) due to ip rule"
  545. run_cmd_nsb ping -c1 -w1 ${a}
  546. log_test_addr ${a} $? 1 "ping in, blocked by rule"
  547. [ "$VERBOSE" = "1" ] && echo
  548. setup_cmd ip rule del pref 32765 from all lookup local
  549. setup_cmd ip rule add pref 0 from all lookup local
  550. setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit
  551. setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit
  552. #
  553. # route blocks reachability to remote address
  554. #
  555. log_start
  556. setup_cmd ip route replace unreachable ${NSB_LO_IP}
  557. setup_cmd ip route replace unreachable ${NSB_IP}
  558. a=${NSB_LO_IP}
  559. run_cmd ping -c1 -w1 ${a}
  560. log_test_addr ${a} $? 2 "ping out, blocked by route"
  561. # NOTE: ipv4 actually allows the lookup to fail and yet still create
  562. # a viable rtable if the oif (e.g., bind to device) is set, so this
  563. # case succeeds despite not having a route for the address
  564. # run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  565. a=${NSA_LO_IP}
  566. log_start
  567. show_hint "Response is dropped (or arp request is ignored) due to ip route"
  568. run_cmd_nsb ping -c1 -w1 ${a}
  569. log_test_addr ${a} $? 1 "ping in, blocked by route"
  570. #
  571. # remove 'remote' routes; fallback to default
  572. #
  573. log_start
  574. setup_cmd ip ro del ${NSB_LO_IP}
  575. a=${NSB_LO_IP}
  576. run_cmd ping -c1 -w1 ${a}
  577. log_test_addr ${a} $? 2 "ping out, unreachable default route"
  578. # NOTE: ipv4 actually allows the lookup to fail and yet still create
  579. # a viable rtable if the oif (e.g., bind to device) is set, so this
  580. # case succeeds despite not having a route for the address
  581. # run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  582. }
  583. ipv4_ping_vrf()
  584. {
  585. local a
  586. # should default on; does not exist on older kernels
  587. set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
  588. #
  589. # out
  590. #
  591. for a in ${NSB_IP} ${NSB_LO_IP}
  592. do
  593. log_start
  594. run_cmd ping -c1 -w1 -I ${VRF} ${a}
  595. log_test_addr ${a} $? 0 "ping out, VRF bind"
  596. log_start
  597. run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  598. log_test_addr ${a} $? 0 "ping out, device bind"
  599. log_start
  600. run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${NSA_IP} ${a}
  601. log_test_addr ${a} $? 0 "ping out, vrf device + dev address bind"
  602. log_start
  603. run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${VRF_IP} ${a}
  604. log_test_addr ${a} $? 0 "ping out, vrf device + vrf address bind"
  605. done
  606. #
  607. # in
  608. #
  609. for a in ${NSA_IP} ${VRF_IP}
  610. do
  611. log_start
  612. run_cmd_nsb ping -c1 -w1 ${a}
  613. log_test_addr ${a} $? 0 "ping in"
  614. done
  615. #
  616. # local traffic, local address
  617. #
  618. for a in ${NSA_IP} ${VRF_IP} 127.0.0.1
  619. do
  620. log_start
  621. show_hint "Source address should be ${a}"
  622. run_cmd ping -c1 -w1 -I ${VRF} ${a}
  623. log_test_addr ${a} $? 0 "ping local, VRF bind"
  624. done
  625. #
  626. # local traffic, socket bound to device
  627. #
  628. # address on device
  629. a=${NSA_IP}
  630. log_start
  631. run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  632. log_test_addr ${a} $? 0 "ping local, device bind"
  633. # vrf device is out of scope
  634. for a in ${VRF_IP} 127.0.0.1
  635. do
  636. log_start
  637. show_hint "Fails since address on vrf device is out of device scope"
  638. run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  639. log_test_addr ${a} $? 2 "ping local, device bind"
  640. done
  641. #
  642. # ip rule blocks address
  643. #
  644. log_start
  645. setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit
  646. setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit
  647. a=${NSB_LO_IP}
  648. run_cmd ping -c1 -w1 -I ${VRF} ${a}
  649. log_test_addr ${a} $? 2 "ping out, vrf bind, blocked by rule"
  650. log_start
  651. run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  652. log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"
  653. a=${NSA_LO_IP}
  654. log_start
  655. show_hint "Response lost due to ip rule"
  656. run_cmd_nsb ping -c1 -w1 ${a}
  657. log_test_addr ${a} $? 1 "ping in, blocked by rule"
  658. [ "$VERBOSE" = "1" ] && echo
  659. setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit
  660. setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit
  661. #
  662. # remove 'remote' routes; fallback to default
  663. #
  664. log_start
  665. setup_cmd ip ro del vrf ${VRF} ${NSB_LO_IP}
  666. a=${NSB_LO_IP}
  667. run_cmd ping -c1 -w1 -I ${VRF} ${a}
  668. log_test_addr ${a} $? 2 "ping out, vrf bind, unreachable route"
  669. log_start
  670. run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
  671. log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"
  672. a=${NSA_LO_IP}
  673. log_start
  674. show_hint "Response lost by unreachable route"
  675. run_cmd_nsb ping -c1 -w1 ${a}
  676. log_test_addr ${a} $? 1 "ping in, unreachable route"
  677. }
  678. ipv4_ping()
  679. {
  680. log_section "IPv4 ping"
  681. log_subsection "No VRF"
  682. setup
  683. set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null
  684. ipv4_ping_novrf
  685. setup
  686. set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
  687. ipv4_ping_novrf
  688. setup
  689. set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
  690. ipv4_ping_novrf
  691. log_subsection "With VRF"
  692. setup "yes"
  693. ipv4_ping_vrf
  694. setup "yes"
  695. set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
  696. ipv4_ping_vrf
  697. }
  698. ################################################################################
  699. # IPv4 TCP
  700. #
  701. # MD5 tests without VRF
  702. #
  703. ipv4_tcp_md5_novrf()
  704. {
  705. #
  706. # single address
  707. #
  708. # basic use case
  709. log_start
  710. run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} &
  711. sleep 1
  712. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  713. log_test $? 0 "MD5: Single address config"
  714. # client sends MD5, server not configured
  715. log_start
  716. show_hint "Should timeout due to MD5 mismatch"
  717. run_cmd nettest -s &
  718. sleep 1
  719. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  720. log_test $? 2 "MD5: Server no config, client uses password"
  721. # wrong password
  722. log_start
  723. show_hint "Should timeout since client uses wrong password"
  724. run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} &
  725. sleep 1
  726. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
  727. log_test $? 2 "MD5: Client uses wrong password"
  728. # client from different address
  729. log_start
  730. show_hint "Should timeout due to MD5 mismatch"
  731. run_cmd nettest -s -M ${MD5_PW} -m ${NSB_LO_IP} &
  732. sleep 1
  733. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  734. log_test $? 2 "MD5: Client address does not match address configured with password"
  735. #
  736. # MD5 extension - prefix length
  737. #
  738. # client in prefix
  739. log_start
  740. run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &
  741. sleep 1
  742. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  743. log_test $? 0 "MD5: Prefix config"
  744. # client in prefix, wrong password
  745. log_start
  746. show_hint "Should timeout since client uses wrong password"
  747. run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &
  748. sleep 1
  749. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
  750. log_test $? 2 "MD5: Prefix config, client uses wrong password"
  751. # client outside of prefix
  752. log_start
  753. show_hint "Should timeout due to MD5 mismatch"
  754. run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &
  755. sleep 1
  756. run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW}
  757. log_test $? 2 "MD5: Prefix config, client address not in configured prefix"
  758. }
  759. #
  760. # MD5 tests with VRF
  761. #
  762. ipv4_tcp_md5()
  763. {
  764. #
  765. # single address
  766. #
  767. # basic use case
  768. log_start
  769. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
  770. sleep 1
  771. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  772. log_test $? 0 "MD5: VRF: Single address config"
  773. # client sends MD5, server not configured
  774. log_start
  775. show_hint "Should timeout since server does not have MD5 auth"
  776. run_cmd nettest -s -I ${VRF} &
  777. sleep 1
  778. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  779. log_test $? 2 "MD5: VRF: Server no config, client uses password"
  780. # wrong password
  781. log_start
  782. show_hint "Should timeout since client uses wrong password"
  783. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
  784. sleep 1
  785. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
  786. log_test $? 2 "MD5: VRF: Client uses wrong password"
  787. # client from different address
  788. log_start
  789. show_hint "Should timeout since server config differs from client"
  790. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP} &
  791. sleep 1
  792. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  793. log_test $? 2 "MD5: VRF: Client address does not match address configured with password"
  794. #
  795. # MD5 extension - prefix length
  796. #
  797. # client in prefix
  798. log_start
  799. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
  800. sleep 1
  801. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  802. log_test $? 0 "MD5: VRF: Prefix config"
  803. # client in prefix, wrong password
  804. log_start
  805. show_hint "Should timeout since client uses wrong password"
  806. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
  807. sleep 1
  808. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
  809. log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password"
  810. # client outside of prefix
  811. log_start
  812. show_hint "Should timeout since client address is outside of prefix"
  813. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
  814. sleep 1
  815. run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW}
  816. log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix"
  817. #
  818. # duplicate config between default VRF and a VRF
  819. #
  820. log_start
  821. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
  822. run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
  823. sleep 1
  824. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  825. log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF"
  826. log_start
  827. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
  828. run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
  829. sleep 1
  830. run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
  831. log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF"
  832. log_start
  833. show_hint "Should timeout since client in default VRF uses VRF password"
  834. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
  835. run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
  836. sleep 1
  837. run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
  838. log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw"
  839. log_start
  840. show_hint "Should timeout since client in VRF uses default VRF password"
  841. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
  842. run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
  843. sleep 1
  844. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
  845. log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw"
  846. log_start
  847. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
  848. run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
  849. sleep 1
  850. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  851. log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF"
  852. log_start
  853. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
  854. run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
  855. sleep 1
  856. run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
  857. log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF"
  858. log_start
  859. show_hint "Should timeout since client in default VRF uses VRF password"
  860. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
  861. run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
  862. sleep 1
  863. run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
  864. log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw"
  865. log_start
  866. show_hint "Should timeout since client in VRF uses default VRF password"
  867. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
  868. run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
  869. sleep 1
  870. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
  871. log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw"
  872. #
  873. # negative tests
  874. #
  875. log_start
  876. run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP}
  877. log_test $? 1 "MD5: VRF: Device must be a VRF - single address"
  878. log_start
  879. run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET}
  880. log_test $? 1 "MD5: VRF: Device must be a VRF - prefix"
  881. test_ipv4_md5_vrf__vrf_server__no_bind_ifindex
  882. test_ipv4_md5_vrf__global_server__bind_ifindex0
  883. }
  884. test_ipv4_md5_vrf__vrf_server__no_bind_ifindex()
  885. {
  886. log_start
  887. show_hint "Simulates applications using VRF without TCP_MD5SIG_FLAG_IFINDEX"
  888. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex &
  889. sleep 1
  890. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  891. log_test $? 0 "MD5: VRF: VRF-bound server, unbound key accepts connection"
  892. log_start
  893. show_hint "Binding both the socket and the key is not required but it works"
  894. run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex &
  895. sleep 1
  896. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  897. log_test $? 0 "MD5: VRF: VRF-bound server, bound key accepts connection"
  898. }
  899. test_ipv4_md5_vrf__global_server__bind_ifindex0()
  900. {
  901. # This particular test needs tcp_l3mdev_accept=1 for Global server to accept VRF connections
  902. local old_tcp_l3mdev_accept
  903. old_tcp_l3mdev_accept=$(get_sysctl net.ipv4.tcp_l3mdev_accept)
  904. set_sysctl net.ipv4.tcp_l3mdev_accept=1
  905. log_start
  906. run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex &
  907. sleep 1
  908. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  909. log_test $? 2 "MD5: VRF: Global server, Key bound to ifindex=0 rejects VRF connection"
  910. log_start
  911. run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex &
  912. sleep 1
  913. run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
  914. log_test $? 0 "MD5: VRF: Global server, key bound to ifindex=0 accepts non-VRF connection"
  915. log_start
  916. run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex &
  917. sleep 1
  918. run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
  919. log_test $? 0 "MD5: VRF: Global server, key not bound to ifindex accepts VRF connection"
  920. log_start
  921. run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex &
  922. sleep 1
  923. run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
  924. log_test $? 0 "MD5: VRF: Global server, key not bound to ifindex accepts non-VRF connection"
  925. # restore value
  926. set_sysctl net.ipv4.tcp_l3mdev_accept="$old_tcp_l3mdev_accept"
  927. }
  928. ipv4_tcp_novrf()
  929. {
  930. local a
  931. #
  932. # server tests
  933. #
  934. for a in ${NSA_IP} ${NSA_LO_IP}
  935. do
  936. log_start
  937. run_cmd nettest -s &
  938. sleep 1
  939. run_cmd_nsb nettest -r ${a}
  940. log_test_addr ${a} $? 0 "Global server"
  941. done
  942. a=${NSA_IP}
  943. log_start
  944. run_cmd nettest -s -I ${NSA_DEV} &
  945. sleep 1
  946. run_cmd_nsb nettest -r ${a}
  947. log_test_addr ${a} $? 0 "Device server"
  948. # verify TCP reset sent and received
  949. for a in ${NSA_IP} ${NSA_LO_IP}
  950. do
  951. log_start
  952. show_hint "Should fail 'Connection refused' since there is no server"
  953. run_cmd_nsb nettest -r ${a}
  954. log_test_addr ${a} $? 1 "No server"
  955. done
  956. #
  957. # client
  958. #
  959. for a in ${NSB_IP} ${NSB_LO_IP}
  960. do
  961. log_start
  962. run_cmd_nsb nettest -s &
  963. sleep 1
  964. run_cmd nettest -r ${a} -0 ${NSA_IP}
  965. log_test_addr ${a} $? 0 "Client"
  966. log_start
  967. run_cmd_nsb nettest -s &
  968. sleep 1
  969. run_cmd nettest -r ${a} -d ${NSA_DEV}
  970. log_test_addr ${a} $? 0 "Client, device bind"
  971. log_start
  972. show_hint "Should fail 'Connection refused'"
  973. run_cmd nettest -r ${a}
  974. log_test_addr ${a} $? 1 "No server, unbound client"
  975. log_start
  976. show_hint "Should fail 'Connection refused'"
  977. run_cmd nettest -r ${a} -d ${NSA_DEV}
  978. log_test_addr ${a} $? 1 "No server, device client"
  979. done
  980. #
  981. # local address tests
  982. #
  983. for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1
  984. do
  985. log_start
  986. run_cmd nettest -s &
  987. sleep 1
  988. run_cmd nettest -r ${a} -0 ${a} -1 ${a}
  989. log_test_addr ${a} $? 0 "Global server, local connection"
  990. done
  991. a=${NSA_IP}
  992. log_start
  993. run_cmd nettest -s -I ${NSA_DEV} &
  994. sleep 1
  995. run_cmd nettest -r ${a} -0 ${a}
  996. log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
  997. for a in ${NSA_LO_IP} 127.0.0.1
  998. do
  999. log_start
  1000. show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"
  1001. run_cmd nettest -s -I ${NSA_DEV} &
  1002. sleep 1
  1003. run_cmd nettest -r ${a}
  1004. log_test_addr ${a} $? 1 "Device server, unbound client, local connection"
  1005. done
  1006. a=${NSA_IP}
  1007. log_start
  1008. run_cmd nettest -s &
  1009. sleep 1
  1010. run_cmd nettest -r ${a} -0 ${a} -d ${NSA_DEV}
  1011. log_test_addr ${a} $? 0 "Global server, device client, local connection"
  1012. for a in ${NSA_LO_IP} 127.0.0.1
  1013. do
  1014. log_start
  1015. show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
  1016. run_cmd nettest -s &
  1017. sleep 1
  1018. run_cmd nettest -r ${a} -d ${NSA_DEV}
  1019. log_test_addr ${a} $? 1 "Global server, device client, local connection"
  1020. done
  1021. a=${NSA_IP}
  1022. log_start
  1023. run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  1024. sleep 1
  1025. run_cmd nettest -d ${NSA_DEV} -r ${a} -0 ${a}
  1026. log_test_addr ${a} $? 0 "Device server, device client, local connection"
  1027. log_start
  1028. show_hint "Should fail 'Connection refused'"
  1029. run_cmd nettest -d ${NSA_DEV} -r ${a}
  1030. log_test_addr ${a} $? 1 "No server, device client, local conn"
  1031. [ "$fips_enabled" = "1" ] || ipv4_tcp_md5_novrf
  1032. }
  1033. ipv4_tcp_vrf()
  1034. {
  1035. local a
  1036. # disable global server
  1037. log_subsection "Global server disabled"
  1038. set_sysctl net.ipv4.tcp_l3mdev_accept=0
  1039. #
  1040. # server tests
  1041. #
  1042. for a in ${NSA_IP} ${VRF_IP}
  1043. do
  1044. log_start
  1045. show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
  1046. run_cmd nettest -s &
  1047. sleep 1
  1048. run_cmd_nsb nettest -r ${a}
  1049. log_test_addr ${a} $? 1 "Global server"
  1050. log_start
  1051. run_cmd nettest -s -I ${VRF} -3 ${VRF} &
  1052. sleep 1
  1053. run_cmd_nsb nettest -r ${a}
  1054. log_test_addr ${a} $? 0 "VRF server"
  1055. log_start
  1056. run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  1057. sleep 1
  1058. run_cmd_nsb nettest -r ${a}
  1059. log_test_addr ${a} $? 0 "Device server"
  1060. # verify TCP reset received
  1061. log_start
  1062. show_hint "Should fail 'Connection refused' since there is no server"
  1063. run_cmd_nsb nettest -r ${a}
  1064. log_test_addr ${a} $? 1 "No server"
  1065. done
  1066. # local address tests
  1067. # (${VRF_IP} and 127.0.0.1 both timeout)
  1068. a=${NSA_IP}
  1069. log_start
  1070. show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
  1071. run_cmd nettest -s &
  1072. sleep 1
  1073. run_cmd nettest -r ${a} -d ${NSA_DEV}
  1074. log_test_addr ${a} $? 1 "Global server, local connection"
  1075. # run MD5 tests
  1076. if [ "$fips_enabled" = "0" ]; then
  1077. setup_vrf_dup
  1078. ipv4_tcp_md5
  1079. cleanup_vrf_dup
  1080. fi
  1081. #
  1082. # enable VRF global server
  1083. #
  1084. log_subsection "VRF Global server enabled"
  1085. set_sysctl net.ipv4.tcp_l3mdev_accept=1
  1086. for a in ${NSA_IP} ${VRF_IP}
  1087. do
  1088. log_start
  1089. show_hint "client socket should be bound to VRF"
  1090. run_cmd nettest -s -3 ${VRF} &
  1091. sleep 1
  1092. run_cmd_nsb nettest -r ${a}
  1093. log_test_addr ${a} $? 0 "Global server"
  1094. log_start
  1095. show_hint "client socket should be bound to VRF"
  1096. run_cmd nettest -s -I ${VRF} -3 ${VRF} &
  1097. sleep 1
  1098. run_cmd_nsb nettest -r ${a}
  1099. log_test_addr ${a} $? 0 "VRF server"
  1100. # verify TCP reset received
  1101. log_start
  1102. show_hint "Should fail 'Connection refused'"
  1103. run_cmd_nsb nettest -r ${a}
  1104. log_test_addr ${a} $? 1 "No server"
  1105. done
  1106. a=${NSA_IP}
  1107. log_start
  1108. show_hint "client socket should be bound to device"
  1109. run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  1110. sleep 1
  1111. run_cmd_nsb nettest -r ${a}
  1112. log_test_addr ${a} $? 0 "Device server"
  1113. # local address tests
  1114. for a in ${NSA_IP} ${VRF_IP}
  1115. do
  1116. log_start
  1117. show_hint "Should fail 'Connection refused' since client is not bound to VRF"
  1118. run_cmd nettest -s -I ${VRF} &
  1119. sleep 1
  1120. run_cmd nettest -r ${a}
  1121. log_test_addr ${a} $? 1 "Global server, local connection"
  1122. done
  1123. #
  1124. # client
  1125. #
  1126. for a in ${NSB_IP} ${NSB_LO_IP}
  1127. do
  1128. log_start
  1129. run_cmd_nsb nettest -s &
  1130. sleep 1
  1131. run_cmd nettest -r ${a} -d ${VRF}
  1132. log_test_addr ${a} $? 0 "Client, VRF bind"
  1133. log_start
  1134. run_cmd_nsb nettest -s &
  1135. sleep 1
  1136. run_cmd nettest -r ${a} -d ${NSA_DEV}
  1137. log_test_addr ${a} $? 0 "Client, device bind"
  1138. log_start
  1139. show_hint "Should fail 'Connection refused'"
  1140. run_cmd nettest -r ${a} -d ${VRF}
  1141. log_test_addr ${a} $? 1 "No server, VRF client"
  1142. log_start
  1143. show_hint "Should fail 'Connection refused'"
  1144. run_cmd nettest -r ${a} -d ${NSA_DEV}
  1145. log_test_addr ${a} $? 1 "No server, device client"
  1146. done
  1147. for a in ${NSA_IP} ${VRF_IP} 127.0.0.1
  1148. do
  1149. log_start
  1150. run_cmd nettest -s -I ${VRF} -3 ${VRF} &
  1151. sleep 1
  1152. run_cmd nettest -r ${a} -d ${VRF} -0 ${a}
  1153. log_test_addr ${a} $? 0 "VRF server, VRF client, local connection"
  1154. done
  1155. a=${NSA_IP}
  1156. log_start
  1157. run_cmd nettest -s -I ${VRF} -3 ${VRF} &
  1158. sleep 1
  1159. run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a}
  1160. log_test_addr ${a} $? 0 "VRF server, device client, local connection"
  1161. log_start
  1162. show_hint "Should fail 'No route to host' since client is out of VRF scope"
  1163. run_cmd nettest -s -I ${VRF} &
  1164. sleep 1
  1165. run_cmd nettest -r ${a}
  1166. log_test_addr ${a} $? 1 "VRF server, unbound client, local connection"
  1167. log_start
  1168. run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  1169. sleep 1
  1170. run_cmd nettest -r ${a} -d ${VRF} -0 ${a}
  1171. log_test_addr ${a} $? 0 "Device server, VRF client, local connection"
  1172. log_start
  1173. run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  1174. sleep 1
  1175. run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a}
  1176. log_test_addr ${a} $? 0 "Device server, device client, local connection"
  1177. }
  1178. ipv4_tcp()
  1179. {
  1180. log_section "IPv4/TCP"
  1181. log_subsection "No VRF"
  1182. setup
  1183. # tcp_l3mdev_accept should have no affect without VRF;
  1184. # run tests with it enabled and disabled to verify
  1185. log_subsection "tcp_l3mdev_accept disabled"
  1186. set_sysctl net.ipv4.tcp_l3mdev_accept=0
  1187. ipv4_tcp_novrf
  1188. log_subsection "tcp_l3mdev_accept enabled"
  1189. set_sysctl net.ipv4.tcp_l3mdev_accept=1
  1190. ipv4_tcp_novrf
  1191. log_subsection "With VRF"
  1192. setup "yes"
  1193. ipv4_tcp_vrf
  1194. }
  1195. ################################################################################
  1196. # IPv4 UDP
  1197. ipv4_udp_novrf()
  1198. {
  1199. local a
  1200. #
  1201. # server tests
  1202. #
  1203. for a in ${NSA_IP} ${NSA_LO_IP}
  1204. do
  1205. log_start
  1206. run_cmd nettest -D -s -3 ${NSA_DEV} &
  1207. sleep 1
  1208. run_cmd_nsb nettest -D -r ${a}
  1209. log_test_addr ${a} $? 0 "Global server"
  1210. log_start
  1211. show_hint "Should fail 'Connection refused' since there is no server"
  1212. run_cmd_nsb nettest -D -r ${a}
  1213. log_test_addr ${a} $? 1 "No server"
  1214. done
  1215. a=${NSA_IP}
  1216. log_start
  1217. run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  1218. sleep 1
  1219. run_cmd_nsb nettest -D -r ${a}
  1220. log_test_addr ${a} $? 0 "Device server"
  1221. #
  1222. # client
  1223. #
  1224. for a in ${NSB_IP} ${NSB_LO_IP}
  1225. do
  1226. log_start
  1227. run_cmd_nsb nettest -D -s &
  1228. sleep 1
  1229. run_cmd nettest -D -r ${a} -0 ${NSA_IP}
  1230. log_test_addr ${a} $? 0 "Client"
  1231. log_start
  1232. run_cmd_nsb nettest -D -s &
  1233. sleep 1
  1234. run_cmd nettest -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP}
  1235. log_test_addr ${a} $? 0 "Client, device bind"
  1236. log_start
  1237. run_cmd_nsb nettest -D -s &
  1238. sleep 1
  1239. run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP}
  1240. log_test_addr ${a} $? 0 "Client, device send via cmsg"
  1241. log_start
  1242. run_cmd_nsb nettest -D -s &
  1243. sleep 1
  1244. run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP}
  1245. log_test_addr ${a} $? 0 "Client, device bind via IP_UNICAST_IF"
  1246. log_start
  1247. run_cmd_nsb nettest -D -s &
  1248. sleep 1
  1249. run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP} -U
  1250. log_test_addr ${a} $? 0 "Client, device bind via IP_UNICAST_IF, with connect()"
  1251. log_start
  1252. show_hint "Should fail 'Connection refused'"
  1253. run_cmd nettest -D -r ${a}
  1254. log_test_addr ${a} $? 1 "No server, unbound client"
  1255. log_start
  1256. show_hint "Should fail 'Connection refused'"
  1257. run_cmd nettest -D -r ${a} -d ${NSA_DEV}
  1258. log_test_addr ${a} $? 1 "No server, device client"
  1259. done
  1260. #
  1261. # local address tests
  1262. #
  1263. for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1
  1264. do
  1265. log_start
  1266. run_cmd nettest -D -s &
  1267. sleep 1
  1268. run_cmd nettest -D -r ${a} -0 ${a} -1 ${a}
  1269. log_test_addr ${a} $? 0 "Global server, local connection"
  1270. done
  1271. a=${NSA_IP}
  1272. log_start
  1273. run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
  1274. sleep 1
  1275. run_cmd nettest -D -r ${a}
  1276. log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
  1277. for a in ${NSA_LO_IP} 127.0.0.1
  1278. do
  1279. log_start
  1280. show_hint "Should fail 'Connection refused' since address is out of device scope"
  1281. run_cmd nettest -s -D -I ${NSA_DEV} &
  1282. sleep 1
  1283. run_cmd nettest -D -r ${a}
  1284. log_test_addr ${a} $? 1 "Device server, unbound client, local connection"
  1285. done
  1286. a=${NSA_IP}
  1287. log_start
  1288. run_cmd nettest -s -D &
  1289. sleep 1
  1290. run_cmd nettest -D -d ${NSA_DEV} -r ${a}
  1291. log_test_addr ${a} $? 0 "Global server, device client, local connection"
  1292. log_start
  1293. run_cmd nettest -s -D &
  1294. sleep 1
  1295. run_cmd nettest -D -d ${NSA_DEV} -C -r ${a}
  1296. log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection"
  1297. log_start
  1298. run_cmd nettest -s -D &
  1299. sleep 1
  1300. run_cmd nettest -D -d ${NSA_DEV} -S -r ${a}
  1301. log_test_addr ${a} $? 0 "Global server, device client via IP_UNICAST_IF, local connection"
  1302. log_start
  1303. run_cmd nettest -s -D &
  1304. sleep 1
  1305. run_cmd nettest -D -d ${NSA_DEV} -S -r ${a} -U
  1306. log_test_addr ${a} $? 0 "Global server, device client via IP_UNICAST_IF, local connection, with connect()"
  1307. # IPv4 with device bind has really weird behavior - it overrides the
  1308. # fib lookup, generates an rtable and tries to send the packet. This
  1309. # causes failures for local traffic at different places
  1310. for a in ${NSA_LO_IP} 127.0.0.1
  1311. do
  1312. log_start
  1313. show_hint "Should fail since addresses on loopback are out of device scope"
  1314. run_cmd nettest -D -s &
  1315. sleep 1
  1316. run_cmd nettest -D -r ${a} -d ${NSA_DEV}
  1317. log_test_addr ${a} $? 2 "Global server, device client, local connection"
  1318. log_start
  1319. show_hint "Should fail since addresses on loopback are out of device scope"
  1320. run_cmd nettest -D -s &
  1321. sleep 1
  1322. run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C
  1323. log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection"
  1324. log_start
  1325. show_hint "Should fail since addresses on loopback are out of device scope"
  1326. run_cmd nettest -D -s &
  1327. sleep 1
  1328. run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S
  1329. log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection"
  1330. log_start
  1331. show_hint "Should fail since addresses on loopback are out of device scope"
  1332. run_cmd nettest -D -s &
  1333. sleep 1
  1334. run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -U
  1335. log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection, with connect()"
  1336. done
  1337. a=${NSA_IP}
  1338. log_start
  1339. run_cmd nettest -D -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  1340. sleep 1
  1341. run_cmd nettest -D -d ${NSA_DEV} -r ${a} -0 ${a}
  1342. log_test_addr ${a} $? 0 "Device server, device client, local conn"
  1343. log_start
  1344. run_cmd nettest -D -d ${NSA_DEV} -r ${a}
  1345. log_test_addr ${a} $? 2 "No server, device client, local conn"
  1346. }
  1347. ipv4_udp_vrf()
  1348. {
  1349. local a
  1350. # disable global server
  1351. log_subsection "Global server disabled"
  1352. set_sysctl net.ipv4.udp_l3mdev_accept=0
  1353. #
  1354. # server tests
  1355. #
  1356. for a in ${NSA_IP} ${VRF_IP}
  1357. do
  1358. log_start
  1359. show_hint "Fails because ingress is in a VRF and global server is disabled"
  1360. run_cmd nettest -D -s &
  1361. sleep 1
  1362. run_cmd_nsb nettest -D -r ${a}
  1363. log_test_addr ${a} $? 1 "Global server"
  1364. log_start
  1365. run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} &
  1366. sleep 1
  1367. run_cmd_nsb nettest -D -r ${a}
  1368. log_test_addr ${a} $? 0 "VRF server"
  1369. log_start
  1370. run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  1371. sleep 1
  1372. run_cmd_nsb nettest -D -r ${a}
  1373. log_test_addr ${a} $? 0 "Enslaved device server"
  1374. log_start
  1375. show_hint "Should fail 'Connection refused' since there is no server"
  1376. run_cmd_nsb nettest -D -r ${a}
  1377. log_test_addr ${a} $? 1 "No server"
  1378. log_start
  1379. show_hint "Should fail 'Connection refused' since global server is out of scope"
  1380. run_cmd nettest -D -s &
  1381. sleep 1
  1382. run_cmd nettest -D -d ${VRF} -r ${a}
  1383. log_test_addr ${a} $? 1 "Global server, VRF client, local connection"
  1384. done
  1385. a=${NSA_IP}
  1386. log_start
  1387. run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
  1388. sleep 1
  1389. run_cmd nettest -D -d ${VRF} -r ${a}
  1390. log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
  1391. log_start
  1392. run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
  1393. sleep 1
  1394. run_cmd nettest -D -d ${NSA_DEV} -r ${a}
  1395. log_test_addr ${a} $? 0 "VRF server, enslaved device client, local connection"
  1396. a=${NSA_IP}
  1397. log_start
  1398. run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
  1399. sleep 1
  1400. run_cmd nettest -D -d ${VRF} -r ${a}
  1401. log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"
  1402. log_start
  1403. run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
  1404. sleep 1
  1405. run_cmd nettest -D -d ${NSA_DEV} -r ${a}
  1406. log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"
  1407. # enable global server
  1408. log_subsection "Global server enabled"
  1409. set_sysctl net.ipv4.udp_l3mdev_accept=1
  1410. #
  1411. # server tests
  1412. #
  1413. for a in ${NSA_IP} ${VRF_IP}
  1414. do
  1415. log_start
  1416. run_cmd nettest -D -s -3 ${NSA_DEV} &
  1417. sleep 1
  1418. run_cmd_nsb nettest -D -r ${a}
  1419. log_test_addr ${a} $? 0 "Global server"
  1420. log_start
  1421. run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} &
  1422. sleep 1
  1423. run_cmd_nsb nettest -D -r ${a}
  1424. log_test_addr ${a} $? 0 "VRF server"
  1425. log_start
  1426. run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  1427. sleep 1
  1428. run_cmd_nsb nettest -D -r ${a}
  1429. log_test_addr ${a} $? 0 "Enslaved device server"
  1430. log_start
  1431. show_hint "Should fail 'Connection refused'"
  1432. run_cmd_nsb nettest -D -r ${a}
  1433. log_test_addr ${a} $? 1 "No server"
  1434. done
  1435. #
  1436. # client tests
  1437. #
  1438. log_start
  1439. run_cmd_nsb nettest -D -s &
  1440. sleep 1
  1441. run_cmd nettest -d ${VRF} -D -r ${NSB_IP} -1 ${NSA_IP}
  1442. log_test $? 0 "VRF client"
  1443. log_start
  1444. run_cmd_nsb nettest -D -s &
  1445. sleep 1
  1446. run_cmd nettest -d ${NSA_DEV} -D -r ${NSB_IP} -1 ${NSA_IP}
  1447. log_test $? 0 "Enslaved device client"
  1448. # negative test - should fail
  1449. log_start
  1450. show_hint "Should fail 'Connection refused'"
  1451. run_cmd nettest -D -d ${VRF} -r ${NSB_IP}
  1452. log_test $? 1 "No server, VRF client"
  1453. log_start
  1454. show_hint "Should fail 'Connection refused'"
  1455. run_cmd nettest -D -d ${NSA_DEV} -r ${NSB_IP}
  1456. log_test $? 1 "No server, enslaved device client"
  1457. #
  1458. # local address tests
  1459. #
  1460. a=${NSA_IP}
  1461. log_start
  1462. run_cmd nettest -D -s -3 ${NSA_DEV} &
  1463. sleep 1
  1464. run_cmd nettest -D -d ${VRF} -r ${a}
  1465. log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
  1466. log_start
  1467. run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
  1468. sleep 1
  1469. run_cmd nettest -D -d ${VRF} -r ${a}
  1470. log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
  1471. log_start
  1472. run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
  1473. sleep 1
  1474. run_cmd nettest -D -d ${NSA_DEV} -r ${a}
  1475. log_test_addr ${a} $? 0 "VRF server, device client, local conn"
  1476. log_start
  1477. run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
  1478. sleep 1
  1479. run_cmd nettest -D -d ${VRF} -r ${a}
  1480. log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"
  1481. log_start
  1482. run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
  1483. sleep 1
  1484. run_cmd nettest -D -d ${NSA_DEV} -r ${a}
  1485. log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"
  1486. for a in ${VRF_IP} 127.0.0.1
  1487. do
  1488. log_start
  1489. run_cmd nettest -D -s -3 ${VRF} &
  1490. sleep 1
  1491. run_cmd nettest -D -d ${VRF} -r ${a}
  1492. log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
  1493. done
  1494. for a in ${VRF_IP} 127.0.0.1
  1495. do
  1496. log_start
  1497. run_cmd nettest -s -D -I ${VRF} -3 ${VRF} &
  1498. sleep 1
  1499. run_cmd nettest -D -d ${VRF} -r ${a}
  1500. log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
  1501. done
  1502. # negative test - should fail
  1503. # verifies ECONNREFUSED
  1504. for a in ${NSA_IP} ${VRF_IP} 127.0.0.1
  1505. do
  1506. log_start
  1507. show_hint "Should fail 'Connection refused'"
  1508. run_cmd nettest -D -d ${VRF} -r ${a}
  1509. log_test_addr ${a} $? 1 "No server, VRF client, local conn"
  1510. done
  1511. }
  1512. ipv4_udp()
  1513. {
  1514. log_section "IPv4/UDP"
  1515. log_subsection "No VRF"
  1516. setup
  1517. # udp_l3mdev_accept should have no affect without VRF;
  1518. # run tests with it enabled and disabled to verify
  1519. log_subsection "udp_l3mdev_accept disabled"
  1520. set_sysctl net.ipv4.udp_l3mdev_accept=0
  1521. ipv4_udp_novrf
  1522. log_subsection "udp_l3mdev_accept enabled"
  1523. set_sysctl net.ipv4.udp_l3mdev_accept=1
  1524. ipv4_udp_novrf
  1525. log_subsection "With VRF"
  1526. setup "yes"
  1527. ipv4_udp_vrf
  1528. }
  1529. ################################################################################
  1530. # IPv4 address bind
  1531. #
  1532. # verifies ability or inability to bind to an address / device
  1533. ipv4_addr_bind_novrf()
  1534. {
  1535. #
  1536. # raw socket
  1537. #
  1538. for a in ${NSA_IP} ${NSA_LO_IP}
  1539. do
  1540. log_start
  1541. run_cmd nettest -s -R -P icmp -l ${a} -b
  1542. log_test_addr ${a} $? 0 "Raw socket bind to local address"
  1543. log_start
  1544. run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b
  1545. log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
  1546. done
  1547. #
  1548. # tests for nonlocal bind
  1549. #
  1550. a=${NL_IP}
  1551. log_start
  1552. run_cmd nettest -s -R -f -l ${a} -b
  1553. log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address"
  1554. log_start
  1555. run_cmd nettest -s -f -l ${a} -b
  1556. log_test_addr ${a} $? 0 "TCP socket bind to nonlocal address"
  1557. log_start
  1558. run_cmd nettest -s -D -P icmp -f -l ${a} -b
  1559. log_test_addr ${a} $? 0 "ICMP socket bind to nonlocal address"
  1560. #
  1561. # check that ICMP sockets cannot bind to broadcast and multicast addresses
  1562. #
  1563. a=${BCAST_IP}
  1564. log_start
  1565. run_cmd nettest -s -D -P icmp -l ${a} -b
  1566. log_test_addr ${a} $? 1 "ICMP socket bind to broadcast address"
  1567. a=${MCAST_IP}
  1568. log_start
  1569. run_cmd nettest -s -D -P icmp -l ${a} -b
  1570. log_test_addr ${a} $? 1 "ICMP socket bind to multicast address"
  1571. #
  1572. # tcp sockets
  1573. #
  1574. a=${NSA_IP}
  1575. log_start
  1576. run_cmd nettest -c ${a} -r ${NSB_IP} -t1 -b
  1577. log_test_addr ${a} $? 0 "TCP socket bind to local address"
  1578. log_start
  1579. run_cmd nettest -c ${a} -r ${NSB_IP} -d ${NSA_DEV} -t1 -b
  1580. log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"
  1581. # Sadly, the kernel allows binding a socket to a device and then
  1582. # binding to an address not on the device. The only restriction
  1583. # is that the address is valid in the L3 domain. So this test
  1584. # passes when it really should not
  1585. #a=${NSA_LO_IP}
  1586. #log_start
  1587. #show_hint "Should fail with 'Cannot assign requested address'"
  1588. #run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b
  1589. #log_test_addr ${a} $? 1 "TCP socket bind to out of scope local address"
  1590. }
  1591. ipv4_addr_bind_vrf()
  1592. {
  1593. #
  1594. # raw socket
  1595. #
  1596. for a in ${NSA_IP} ${VRF_IP}
  1597. do
  1598. log_start
  1599. show_hint "Socket not bound to VRF, but address is in VRF"
  1600. run_cmd nettest -s -R -P icmp -l ${a} -b
  1601. log_test_addr ${a} $? 1 "Raw socket bind to local address"
  1602. log_start
  1603. run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b
  1604. log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
  1605. log_start
  1606. run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b
  1607. log_test_addr ${a} $? 0 "Raw socket bind to local address after VRF bind"
  1608. done
  1609. a=${NSA_LO_IP}
  1610. log_start
  1611. show_hint "Address on loopback is out of VRF scope"
  1612. run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b
  1613. log_test_addr ${a} $? 1 "Raw socket bind to out of scope address after VRF bind"
  1614. #
  1615. # tests for nonlocal bind
  1616. #
  1617. a=${NL_IP}
  1618. log_start
  1619. run_cmd nettest -s -R -f -l ${a} -I ${VRF} -b
  1620. log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address after VRF bind"
  1621. log_start
  1622. run_cmd nettest -s -f -l ${a} -I ${VRF} -b
  1623. log_test_addr ${a} $? 0 "TCP socket bind to nonlocal address after VRF bind"
  1624. log_start
  1625. run_cmd nettest -s -D -P icmp -f -l ${a} -I ${VRF} -b
  1626. log_test_addr ${a} $? 0 "ICMP socket bind to nonlocal address after VRF bind"
  1627. #
  1628. # check that ICMP sockets cannot bind to broadcast and multicast addresses
  1629. #
  1630. a=${BCAST_IP}
  1631. log_start
  1632. run_cmd nettest -s -D -P icmp -l ${a} -I ${VRF} -b
  1633. log_test_addr ${a} $? 1 "ICMP socket bind to broadcast address after VRF bind"
  1634. a=${MCAST_IP}
  1635. log_start
  1636. run_cmd nettest -s -D -P icmp -l ${a} -I ${VRF} -b
  1637. log_test_addr ${a} $? 1 "ICMP socket bind to multicast address after VRF bind"
  1638. #
  1639. # tcp sockets
  1640. #
  1641. for a in ${NSA_IP} ${VRF_IP}
  1642. do
  1643. log_start
  1644. run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b
  1645. log_test_addr ${a} $? 0 "TCP socket bind to local address"
  1646. log_start
  1647. run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b
  1648. log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"
  1649. done
  1650. a=${NSA_LO_IP}
  1651. log_start
  1652. show_hint "Address on loopback out of scope for VRF"
  1653. run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b
  1654. log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF"
  1655. log_start
  1656. show_hint "Address on loopback out of scope for device in VRF"
  1657. run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b
  1658. log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind"
  1659. }
  1660. ipv4_addr_bind()
  1661. {
  1662. log_section "IPv4 address binds"
  1663. log_subsection "No VRF"
  1664. setup
  1665. set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
  1666. ipv4_addr_bind_novrf
  1667. log_subsection "With VRF"
  1668. setup "yes"
  1669. set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
  1670. ipv4_addr_bind_vrf
  1671. }
  1672. ################################################################################
  1673. # IPv4 runtime tests
  1674. ipv4_rt()
  1675. {
  1676. local desc="$1"
  1677. local varg="$2"
  1678. local with_vrf="yes"
  1679. local a
  1680. #
  1681. # server tests
  1682. #
  1683. for a in ${NSA_IP} ${VRF_IP}
  1684. do
  1685. log_start
  1686. run_cmd nettest ${varg} -s &
  1687. sleep 1
  1688. run_cmd_nsb nettest ${varg} -r ${a} &
  1689. sleep 3
  1690. run_cmd ip link del ${VRF}
  1691. sleep 1
  1692. log_test_addr ${a} 0 0 "${desc}, global server"
  1693. setup ${with_vrf}
  1694. done
  1695. for a in ${NSA_IP} ${VRF_IP}
  1696. do
  1697. log_start
  1698. run_cmd nettest ${varg} -s -I ${VRF} &
  1699. sleep 1
  1700. run_cmd_nsb nettest ${varg} -r ${a} &
  1701. sleep 3
  1702. run_cmd ip link del ${VRF}
  1703. sleep 1
  1704. log_test_addr ${a} 0 0 "${desc}, VRF server"
  1705. setup ${with_vrf}
  1706. done
  1707. a=${NSA_IP}
  1708. log_start
  1709. run_cmd nettest ${varg} -s -I ${NSA_DEV} &
  1710. sleep 1
  1711. run_cmd_nsb nettest ${varg} -r ${a} &
  1712. sleep 3
  1713. run_cmd ip link del ${VRF}
  1714. sleep 1
  1715. log_test_addr ${a} 0 0 "${desc}, enslaved device server"
  1716. setup ${with_vrf}
  1717. #
  1718. # client test
  1719. #
  1720. log_start
  1721. run_cmd_nsb nettest ${varg} -s &
  1722. sleep 1
  1723. run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP} &
  1724. sleep 3
  1725. run_cmd ip link del ${VRF}
  1726. sleep 1
  1727. log_test_addr ${a} 0 0 "${desc}, VRF client"
  1728. setup ${with_vrf}
  1729. log_start
  1730. run_cmd_nsb nettest ${varg} -s &
  1731. sleep 1
  1732. run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP} &
  1733. sleep 3
  1734. run_cmd ip link del ${VRF}
  1735. sleep 1
  1736. log_test_addr ${a} 0 0 "${desc}, enslaved device client"
  1737. setup ${with_vrf}
  1738. #
  1739. # local address tests
  1740. #
  1741. for a in ${NSA_IP} ${VRF_IP}
  1742. do
  1743. log_start
  1744. run_cmd nettest ${varg} -s &
  1745. sleep 1
  1746. run_cmd nettest ${varg} -d ${VRF} -r ${a} &
  1747. sleep 3
  1748. run_cmd ip link del ${VRF}
  1749. sleep 1
  1750. log_test_addr ${a} 0 0 "${desc}, global server, VRF client, local"
  1751. setup ${with_vrf}
  1752. done
  1753. for a in ${NSA_IP} ${VRF_IP}
  1754. do
  1755. log_start
  1756. run_cmd nettest ${varg} -I ${VRF} -s &
  1757. sleep 1
  1758. run_cmd nettest ${varg} -d ${VRF} -r ${a} &
  1759. sleep 3
  1760. run_cmd ip link del ${VRF}
  1761. sleep 1
  1762. log_test_addr ${a} 0 0 "${desc}, VRF server and client, local"
  1763. setup ${with_vrf}
  1764. done
  1765. a=${NSA_IP}
  1766. log_start
  1767. run_cmd nettest ${varg} -s &
  1768. sleep 1
  1769. run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
  1770. sleep 3
  1771. run_cmd ip link del ${VRF}
  1772. sleep 1
  1773. log_test_addr ${a} 0 0 "${desc}, global server, enslaved device client, local"
  1774. setup ${with_vrf}
  1775. log_start
  1776. run_cmd nettest ${varg} -I ${VRF} -s &
  1777. sleep 1
  1778. run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
  1779. sleep 3
  1780. run_cmd ip link del ${VRF}
  1781. sleep 1
  1782. log_test_addr ${a} 0 0 "${desc}, VRF server, enslaved device client, local"
  1783. setup ${with_vrf}
  1784. log_start
  1785. run_cmd nettest ${varg} -I ${NSA_DEV} -s &
  1786. sleep 1
  1787. run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
  1788. sleep 3
  1789. run_cmd ip link del ${VRF}
  1790. sleep 1
  1791. log_test_addr ${a} 0 0 "${desc}, enslaved device server and client, local"
  1792. }
  1793. ipv4_ping_rt()
  1794. {
  1795. local with_vrf="yes"
  1796. local a
  1797. for a in ${NSA_IP} ${VRF_IP}
  1798. do
  1799. log_start
  1800. run_cmd_nsb ping -f ${a} &
  1801. sleep 3
  1802. run_cmd ip link del ${VRF}
  1803. sleep 1
  1804. log_test_addr ${a} 0 0 "Device delete with active traffic - ping in"
  1805. setup ${with_vrf}
  1806. done
  1807. a=${NSB_IP}
  1808. log_start
  1809. run_cmd ping -f -I ${VRF} ${a} &
  1810. sleep 3
  1811. run_cmd ip link del ${VRF}
  1812. sleep 1
  1813. log_test_addr ${a} 0 0 "Device delete with active traffic - ping out"
  1814. }
  1815. ipv4_runtime()
  1816. {
  1817. log_section "Run time tests - ipv4"
  1818. setup "yes"
  1819. ipv4_ping_rt
  1820. setup "yes"
  1821. ipv4_rt "TCP active socket" "-n -1"
  1822. setup "yes"
  1823. ipv4_rt "TCP passive socket" "-i"
  1824. }
  1825. ################################################################################
  1826. # IPv6
  1827. ipv6_ping_novrf()
  1828. {
  1829. local a
  1830. # should not have an impact, but make a known state
  1831. set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null
  1832. #
  1833. # out
  1834. #
  1835. for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
  1836. do
  1837. log_start
  1838. run_cmd ${ping6} -c1 -w1 ${a}
  1839. log_test_addr ${a} $? 0 "ping out"
  1840. done
  1841. for a in ${NSB_IP6} ${NSB_LO_IP6}
  1842. do
  1843. log_start
  1844. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  1845. log_test_addr ${a} $? 0 "ping out, device bind"
  1846. log_start
  1847. run_cmd ${ping6} -c1 -w1 -I ${NSA_LO_IP6} ${a}
  1848. log_test_addr ${a} $? 0 "ping out, loopback address bind"
  1849. done
  1850. #
  1851. # in
  1852. #
  1853. for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV}
  1854. do
  1855. log_start
  1856. run_cmd_nsb ${ping6} -c1 -w1 ${a}
  1857. log_test_addr ${a} $? 0 "ping in"
  1858. done
  1859. #
  1860. # local traffic, local address
  1861. #
  1862. for a in ${NSA_IP6} ${NSA_LO_IP6} ::1 ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
  1863. do
  1864. log_start
  1865. run_cmd ${ping6} -c1 -w1 ${a}
  1866. log_test_addr ${a} $? 0 "ping local, no bind"
  1867. done
  1868. for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
  1869. do
  1870. log_start
  1871. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  1872. log_test_addr ${a} $? 0 "ping local, device bind"
  1873. done
  1874. for a in ${NSA_LO_IP6} ::1
  1875. do
  1876. log_start
  1877. show_hint "Fails since address on loopback is out of device scope"
  1878. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  1879. log_test_addr ${a} $? 2 "ping local, device bind"
  1880. done
  1881. #
  1882. # ip rule blocks address
  1883. #
  1884. log_start
  1885. setup_cmd ip -6 rule add pref 32765 from all lookup local
  1886. setup_cmd ip -6 rule del pref 0 from all lookup local
  1887. setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit
  1888. setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit
  1889. a=${NSB_LO_IP6}
  1890. run_cmd ${ping6} -c1 -w1 ${a}
  1891. log_test_addr ${a} $? 2 "ping out, blocked by rule"
  1892. log_start
  1893. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  1894. log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"
  1895. a=${NSA_LO_IP6}
  1896. log_start
  1897. show_hint "Response lost due to ip rule"
  1898. run_cmd_nsb ${ping6} -c1 -w1 ${a}
  1899. log_test_addr ${a} $? 1 "ping in, blocked by rule"
  1900. setup_cmd ip -6 rule add pref 0 from all lookup local
  1901. setup_cmd ip -6 rule del pref 32765 from all lookup local
  1902. setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit
  1903. setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit
  1904. #
  1905. # route blocks reachability to remote address
  1906. #
  1907. log_start
  1908. setup_cmd ip -6 route del ${NSB_LO_IP6}
  1909. setup_cmd ip -6 route add unreachable ${NSB_LO_IP6} metric 10
  1910. setup_cmd ip -6 route add unreachable ${NSB_IP6} metric 10
  1911. a=${NSB_LO_IP6}
  1912. run_cmd ${ping6} -c1 -w1 ${a}
  1913. log_test_addr ${a} $? 2 "ping out, blocked by route"
  1914. log_start
  1915. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  1916. log_test_addr ${a} $? 2 "ping out, device bind, blocked by route"
  1917. a=${NSA_LO_IP6}
  1918. log_start
  1919. show_hint "Response lost due to ip route"
  1920. run_cmd_nsb ${ping6} -c1 -w1 ${a}
  1921. log_test_addr ${a} $? 1 "ping in, blocked by route"
  1922. #
  1923. # remove 'remote' routes; fallback to default
  1924. #
  1925. log_start
  1926. setup_cmd ip -6 ro del unreachable ${NSB_LO_IP6}
  1927. setup_cmd ip -6 ro del unreachable ${NSB_IP6}
  1928. a=${NSB_LO_IP6}
  1929. run_cmd ${ping6} -c1 -w1 ${a}
  1930. log_test_addr ${a} $? 2 "ping out, unreachable route"
  1931. log_start
  1932. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  1933. log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"
  1934. }
  1935. ipv6_ping_vrf()
  1936. {
  1937. local a
  1938. # should default on; does not exist on older kernels
  1939. set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
  1940. #
  1941. # out
  1942. #
  1943. for a in ${NSB_IP6} ${NSB_LO_IP6}
  1944. do
  1945. log_start
  1946. run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a}
  1947. log_test_addr ${a} $? 0 "ping out, VRF bind"
  1948. done
  1949. for a in ${NSB_LINKIP6}%${VRF} ${MCAST}%${VRF}
  1950. do
  1951. log_start
  1952. show_hint "Fails since VRF device does not support linklocal or multicast"
  1953. run_cmd ${ping6} -c1 -w1 ${a}
  1954. log_test_addr ${a} $? 1 "ping out, VRF bind"
  1955. done
  1956. for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
  1957. do
  1958. log_start
  1959. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  1960. log_test_addr ${a} $? 0 "ping out, device bind"
  1961. done
  1962. for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
  1963. do
  1964. log_start
  1965. run_cmd ip vrf exec ${VRF} ${ping6} -c1 -w1 -I ${VRF_IP6} ${a}
  1966. log_test_addr ${a} $? 0 "ping out, vrf device+address bind"
  1967. done
  1968. #
  1969. # in
  1970. #
  1971. for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV}
  1972. do
  1973. log_start
  1974. run_cmd_nsb ${ping6} -c1 -w1 ${a}
  1975. log_test_addr ${a} $? 0 "ping in"
  1976. done
  1977. a=${NSA_LO_IP6}
  1978. log_start
  1979. show_hint "Fails since loopback address is out of VRF scope"
  1980. run_cmd_nsb ${ping6} -c1 -w1 ${a}
  1981. log_test_addr ${a} $? 1 "ping in"
  1982. #
  1983. # local traffic, local address
  1984. #
  1985. for a in ${NSA_IP6} ${VRF_IP6} ::1
  1986. do
  1987. log_start
  1988. show_hint "Source address should be ${a}"
  1989. run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a}
  1990. log_test_addr ${a} $? 0 "ping local, VRF bind"
  1991. done
  1992. for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
  1993. do
  1994. log_start
  1995. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  1996. log_test_addr ${a} $? 0 "ping local, device bind"
  1997. done
  1998. # LLA to GUA - remove ipv6 global addresses from ns-B
  1999. setup_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}
  2000. setup_cmd_nsb ip -6 addr del ${NSB_LO_IP6}/128 dev lo
  2001. setup_cmd_nsb ip -6 ro add ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV}
  2002. for a in ${NSA_IP6} ${VRF_IP6}
  2003. do
  2004. log_start
  2005. run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}
  2006. log_test_addr ${a} $? 0 "ping in, LLA to GUA"
  2007. done
  2008. setup_cmd_nsb ip -6 ro del ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV}
  2009. setup_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV}
  2010. setup_cmd_nsb ip -6 addr add ${NSB_LO_IP6}/128 dev lo
  2011. #
  2012. # ip rule blocks address
  2013. #
  2014. log_start
  2015. setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit
  2016. setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit
  2017. a=${NSB_LO_IP6}
  2018. run_cmd ${ping6} -c1 -w1 ${a}
  2019. log_test_addr ${a} $? 2 "ping out, blocked by rule"
  2020. log_start
  2021. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  2022. log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"
  2023. a=${NSA_LO_IP6}
  2024. log_start
  2025. show_hint "Response lost due to ip rule"
  2026. run_cmd_nsb ${ping6} -c1 -w1 ${a}
  2027. log_test_addr ${a} $? 1 "ping in, blocked by rule"
  2028. log_start
  2029. setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit
  2030. setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit
  2031. #
  2032. # remove 'remote' routes; fallback to default
  2033. #
  2034. log_start
  2035. setup_cmd ip -6 ro del ${NSB_LO_IP6} vrf ${VRF}
  2036. a=${NSB_LO_IP6}
  2037. run_cmd ${ping6} -c1 -w1 ${a}
  2038. log_test_addr ${a} $? 2 "ping out, unreachable route"
  2039. log_start
  2040. run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
  2041. log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"
  2042. ip -netns ${NSB} -6 ro del ${NSA_LO_IP6}
  2043. a=${NSA_LO_IP6}
  2044. log_start
  2045. run_cmd_nsb ${ping6} -c1 -w1 ${a}
  2046. log_test_addr ${a} $? 2 "ping in, unreachable route"
  2047. }
  2048. ipv6_ping()
  2049. {
  2050. log_section "IPv6 ping"
  2051. log_subsection "No VRF"
  2052. setup
  2053. ipv6_ping_novrf
  2054. setup
  2055. set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
  2056. ipv6_ping_novrf
  2057. log_subsection "With VRF"
  2058. setup "yes"
  2059. ipv6_ping_vrf
  2060. setup "yes"
  2061. set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
  2062. ipv6_ping_vrf
  2063. }
  2064. ################################################################################
  2065. # IPv6 TCP
  2066. #
  2067. # MD5 tests without VRF
  2068. #
  2069. ipv6_tcp_md5_novrf()
  2070. {
  2071. #
  2072. # single address
  2073. #
  2074. # basic use case
  2075. log_start
  2076. run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} &
  2077. sleep 1
  2078. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2079. log_test $? 0 "MD5: Single address config"
  2080. # client sends MD5, server not configured
  2081. log_start
  2082. show_hint "Should timeout due to MD5 mismatch"
  2083. run_cmd nettest -6 -s &
  2084. sleep 1
  2085. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2086. log_test $? 2 "MD5: Server no config, client uses password"
  2087. # wrong password
  2088. log_start
  2089. show_hint "Should timeout since client uses wrong password"
  2090. run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} &
  2091. sleep 1
  2092. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
  2093. log_test $? 2 "MD5: Client uses wrong password"
  2094. # client from different address
  2095. log_start
  2096. show_hint "Should timeout due to MD5 mismatch"
  2097. run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_LO_IP6} &
  2098. sleep 1
  2099. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2100. log_test $? 2 "MD5: Client address does not match address configured with password"
  2101. #
  2102. # MD5 extension - prefix length
  2103. #
  2104. # client in prefix
  2105. log_start
  2106. run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &
  2107. sleep 1
  2108. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2109. log_test $? 0 "MD5: Prefix config"
  2110. # client in prefix, wrong password
  2111. log_start
  2112. show_hint "Should timeout since client uses wrong password"
  2113. run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &
  2114. sleep 1
  2115. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
  2116. log_test $? 2 "MD5: Prefix config, client uses wrong password"
  2117. # client outside of prefix
  2118. log_start
  2119. show_hint "Should timeout due to MD5 mismatch"
  2120. run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &
  2121. sleep 1
  2122. run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW}
  2123. log_test $? 2 "MD5: Prefix config, client address not in configured prefix"
  2124. }
  2125. #
  2126. # MD5 tests with VRF
  2127. #
  2128. ipv6_tcp_md5()
  2129. {
  2130. #
  2131. # single address
  2132. #
  2133. # basic use case
  2134. log_start
  2135. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
  2136. sleep 1
  2137. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2138. log_test $? 0 "MD5: VRF: Single address config"
  2139. # client sends MD5, server not configured
  2140. log_start
  2141. show_hint "Should timeout since server does not have MD5 auth"
  2142. run_cmd nettest -6 -s -I ${VRF} &
  2143. sleep 1
  2144. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2145. log_test $? 2 "MD5: VRF: Server no config, client uses password"
  2146. # wrong password
  2147. log_start
  2148. show_hint "Should timeout since client uses wrong password"
  2149. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
  2150. sleep 1
  2151. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
  2152. log_test $? 2 "MD5: VRF: Client uses wrong password"
  2153. # client from different address
  2154. log_start
  2155. show_hint "Should timeout since server config differs from client"
  2156. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP6} &
  2157. sleep 1
  2158. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2159. log_test $? 2 "MD5: VRF: Client address does not match address configured with password"
  2160. #
  2161. # MD5 extension - prefix length
  2162. #
  2163. # client in prefix
  2164. log_start
  2165. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
  2166. sleep 1
  2167. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2168. log_test $? 0 "MD5: VRF: Prefix config"
  2169. # client in prefix, wrong password
  2170. log_start
  2171. show_hint "Should timeout since client uses wrong password"
  2172. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
  2173. sleep 1
  2174. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
  2175. log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password"
  2176. # client outside of prefix
  2177. log_start
  2178. show_hint "Should timeout since client address is outside of prefix"
  2179. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
  2180. sleep 1
  2181. run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW}
  2182. log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix"
  2183. #
  2184. # duplicate config between default VRF and a VRF
  2185. #
  2186. log_start
  2187. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
  2188. run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
  2189. sleep 1
  2190. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2191. log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF"
  2192. log_start
  2193. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
  2194. run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
  2195. sleep 1
  2196. run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
  2197. log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF"
  2198. log_start
  2199. show_hint "Should timeout since client in default VRF uses VRF password"
  2200. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
  2201. run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
  2202. sleep 1
  2203. run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2204. log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw"
  2205. log_start
  2206. show_hint "Should timeout since client in VRF uses default VRF password"
  2207. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
  2208. run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
  2209. sleep 1
  2210. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
  2211. log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw"
  2212. log_start
  2213. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
  2214. run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
  2215. sleep 1
  2216. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2217. log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF"
  2218. log_start
  2219. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
  2220. run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
  2221. sleep 1
  2222. run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
  2223. log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF"
  2224. log_start
  2225. show_hint "Should timeout since client in default VRF uses VRF password"
  2226. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
  2227. run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
  2228. sleep 1
  2229. run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
  2230. log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw"
  2231. log_start
  2232. show_hint "Should timeout since client in VRF uses default VRF password"
  2233. run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
  2234. run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
  2235. sleep 1
  2236. run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
  2237. log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw"
  2238. #
  2239. # negative tests
  2240. #
  2241. log_start
  2242. run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP6}
  2243. log_test $? 1 "MD5: VRF: Device must be a VRF - single address"
  2244. log_start
  2245. run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET6}
  2246. log_test $? 1 "MD5: VRF: Device must be a VRF - prefix"
  2247. }
  2248. ipv6_tcp_novrf()
  2249. {
  2250. local a
  2251. #
  2252. # server tests
  2253. #
  2254. for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}
  2255. do
  2256. log_start
  2257. run_cmd nettest -6 -s &
  2258. sleep 1
  2259. run_cmd_nsb nettest -6 -r ${a}
  2260. log_test_addr ${a} $? 0 "Global server"
  2261. done
  2262. # verify TCP reset received
  2263. for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}
  2264. do
  2265. log_start
  2266. show_hint "Should fail 'Connection refused'"
  2267. run_cmd_nsb nettest -6 -r ${a}
  2268. log_test_addr ${a} $? 1 "No server"
  2269. done
  2270. #
  2271. # client
  2272. #
  2273. for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
  2274. do
  2275. log_start
  2276. run_cmd_nsb nettest -6 -s &
  2277. sleep 1
  2278. run_cmd nettest -6 -r ${a}
  2279. log_test_addr ${a} $? 0 "Client"
  2280. done
  2281. for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
  2282. do
  2283. log_start
  2284. run_cmd_nsb nettest -6 -s &
  2285. sleep 1
  2286. run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
  2287. log_test_addr ${a} $? 0 "Client, device bind"
  2288. done
  2289. for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
  2290. do
  2291. log_start
  2292. show_hint "Should fail 'Connection refused'"
  2293. run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
  2294. log_test_addr ${a} $? 1 "No server, device client"
  2295. done
  2296. #
  2297. # local address tests
  2298. #
  2299. for a in ${NSA_IP6} ${NSA_LO_IP6} ::1
  2300. do
  2301. log_start
  2302. run_cmd nettest -6 -s &
  2303. sleep 1
  2304. run_cmd nettest -6 -r ${a}
  2305. log_test_addr ${a} $? 0 "Global server, local connection"
  2306. done
  2307. a=${NSA_IP6}
  2308. log_start
  2309. run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  2310. sleep 1
  2311. run_cmd nettest -6 -r ${a} -0 ${a}
  2312. log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
  2313. for a in ${NSA_LO_IP6} ::1
  2314. do
  2315. log_start
  2316. show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"
  2317. run_cmd nettest -6 -s -I ${NSA_DEV} &
  2318. sleep 1
  2319. run_cmd nettest -6 -r ${a}
  2320. log_test_addr ${a} $? 1 "Device server, unbound client, local connection"
  2321. done
  2322. a=${NSA_IP6}
  2323. log_start
  2324. run_cmd nettest -6 -s &
  2325. sleep 1
  2326. run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}
  2327. log_test_addr ${a} $? 0 "Global server, device client, local connection"
  2328. for a in ${NSA_LO_IP6} ::1
  2329. do
  2330. log_start
  2331. show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"
  2332. run_cmd nettest -6 -s &
  2333. sleep 1
  2334. run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
  2335. log_test_addr ${a} $? 1 "Global server, device client, local connection"
  2336. done
  2337. for a in ${NSA_IP6} ${NSA_LINKIP6}
  2338. do
  2339. log_start
  2340. run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  2341. sleep 1
  2342. run_cmd nettest -6 -d ${NSA_DEV} -r ${a}
  2343. log_test_addr ${a} $? 0 "Device server, device client, local conn"
  2344. done
  2345. for a in ${NSA_IP6} ${NSA_LINKIP6}
  2346. do
  2347. log_start
  2348. show_hint "Should fail 'Connection refused'"
  2349. run_cmd nettest -6 -d ${NSA_DEV} -r ${a}
  2350. log_test_addr ${a} $? 1 "No server, device client, local conn"
  2351. done
  2352. [ "$fips_enabled" = "1" ] || ipv6_tcp_md5_novrf
  2353. }
  2354. ipv6_tcp_vrf()
  2355. {
  2356. local a
  2357. # disable global server
  2358. log_subsection "Global server disabled"
  2359. set_sysctl net.ipv4.tcp_l3mdev_accept=0
  2360. #
  2361. # server tests
  2362. #
  2363. for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
  2364. do
  2365. log_start
  2366. show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
  2367. run_cmd nettest -6 -s &
  2368. sleep 1
  2369. run_cmd_nsb nettest -6 -r ${a}
  2370. log_test_addr ${a} $? 1 "Global server"
  2371. done
  2372. for a in ${NSA_IP6} ${VRF_IP6}
  2373. do
  2374. log_start
  2375. run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
  2376. sleep 1
  2377. run_cmd_nsb nettest -6 -r ${a}
  2378. log_test_addr ${a} $? 0 "VRF server"
  2379. done
  2380. # link local is always bound to ingress device
  2381. a=${NSA_LINKIP6}%${NSB_DEV}
  2382. log_start
  2383. run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} &
  2384. sleep 1
  2385. run_cmd_nsb nettest -6 -r ${a}
  2386. log_test_addr ${a} $? 0 "VRF server"
  2387. for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
  2388. do
  2389. log_start
  2390. run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  2391. sleep 1
  2392. run_cmd_nsb nettest -6 -r ${a}
  2393. log_test_addr ${a} $? 0 "Device server"
  2394. done
  2395. # verify TCP reset received
  2396. for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
  2397. do
  2398. log_start
  2399. show_hint "Should fail 'Connection refused'"
  2400. run_cmd_nsb nettest -6 -r ${a}
  2401. log_test_addr ${a} $? 1 "No server"
  2402. done
  2403. # local address tests
  2404. a=${NSA_IP6}
  2405. log_start
  2406. show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
  2407. run_cmd nettest -6 -s &
  2408. sleep 1
  2409. run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
  2410. log_test_addr ${a} $? 1 "Global server, local connection"
  2411. # run MD5 tests
  2412. if [ "$fips_enabled" = "0" ]; then
  2413. setup_vrf_dup
  2414. ipv6_tcp_md5
  2415. cleanup_vrf_dup
  2416. fi
  2417. #
  2418. # enable VRF global server
  2419. #
  2420. log_subsection "VRF Global server enabled"
  2421. set_sysctl net.ipv4.tcp_l3mdev_accept=1
  2422. for a in ${NSA_IP6} ${VRF_IP6}
  2423. do
  2424. log_start
  2425. run_cmd nettest -6 -s -3 ${VRF} &
  2426. sleep 1
  2427. run_cmd_nsb nettest -6 -r ${a}
  2428. log_test_addr ${a} $? 0 "Global server"
  2429. done
  2430. for a in ${NSA_IP6} ${VRF_IP6}
  2431. do
  2432. log_start
  2433. run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
  2434. sleep 1
  2435. run_cmd_nsb nettest -6 -r ${a}
  2436. log_test_addr ${a} $? 0 "VRF server"
  2437. done
  2438. # For LLA, child socket is bound to device
  2439. a=${NSA_LINKIP6}%${NSB_DEV}
  2440. log_start
  2441. run_cmd nettest -6 -s -3 ${NSA_DEV} &
  2442. sleep 1
  2443. run_cmd_nsb nettest -6 -r ${a}
  2444. log_test_addr ${a} $? 0 "Global server"
  2445. log_start
  2446. run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} &
  2447. sleep 1
  2448. run_cmd_nsb nettest -6 -r ${a}
  2449. log_test_addr ${a} $? 0 "VRF server"
  2450. for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV}
  2451. do
  2452. log_start
  2453. run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  2454. sleep 1
  2455. run_cmd_nsb nettest -6 -r ${a}
  2456. log_test_addr ${a} $? 0 "Device server"
  2457. done
  2458. # verify TCP reset received
  2459. for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
  2460. do
  2461. log_start
  2462. show_hint "Should fail 'Connection refused'"
  2463. run_cmd_nsb nettest -6 -r ${a}
  2464. log_test_addr ${a} $? 1 "No server"
  2465. done
  2466. # local address tests
  2467. for a in ${NSA_IP6} ${VRF_IP6}
  2468. do
  2469. log_start
  2470. show_hint "Fails 'Connection refused' since client is not in VRF"
  2471. run_cmd nettest -6 -s -I ${VRF} &
  2472. sleep 1
  2473. run_cmd nettest -6 -r ${a}
  2474. log_test_addr ${a} $? 1 "Global server, local connection"
  2475. done
  2476. #
  2477. # client
  2478. #
  2479. for a in ${NSB_IP6} ${NSB_LO_IP6}
  2480. do
  2481. log_start
  2482. run_cmd_nsb nettest -6 -s &
  2483. sleep 1
  2484. run_cmd nettest -6 -r ${a} -d ${VRF}
  2485. log_test_addr ${a} $? 0 "Client, VRF bind"
  2486. done
  2487. a=${NSB_LINKIP6}
  2488. log_start
  2489. show_hint "Fails since VRF device does not allow linklocal addresses"
  2490. run_cmd_nsb nettest -6 -s &
  2491. sleep 1
  2492. run_cmd nettest -6 -r ${a} -d ${VRF}
  2493. log_test_addr ${a} $? 1 "Client, VRF bind"
  2494. for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}
  2495. do
  2496. log_start
  2497. run_cmd_nsb nettest -6 -s &
  2498. sleep 1
  2499. run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
  2500. log_test_addr ${a} $? 0 "Client, device bind"
  2501. done
  2502. for a in ${NSB_IP6} ${NSB_LO_IP6}
  2503. do
  2504. log_start
  2505. show_hint "Should fail 'Connection refused'"
  2506. run_cmd nettest -6 -r ${a} -d ${VRF}
  2507. log_test_addr ${a} $? 1 "No server, VRF client"
  2508. done
  2509. for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}
  2510. do
  2511. log_start
  2512. show_hint "Should fail 'Connection refused'"
  2513. run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
  2514. log_test_addr ${a} $? 1 "No server, device client"
  2515. done
  2516. for a in ${NSA_IP6} ${VRF_IP6} ::1
  2517. do
  2518. log_start
  2519. run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
  2520. sleep 1
  2521. run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a}
  2522. log_test_addr ${a} $? 0 "VRF server, VRF client, local connection"
  2523. done
  2524. a=${NSA_IP6}
  2525. log_start
  2526. run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
  2527. sleep 1
  2528. run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}
  2529. log_test_addr ${a} $? 0 "VRF server, device client, local connection"
  2530. a=${NSA_IP6}
  2531. log_start
  2532. show_hint "Should fail since unbound client is out of VRF scope"
  2533. run_cmd nettest -6 -s -I ${VRF} &
  2534. sleep 1
  2535. run_cmd nettest -6 -r ${a}
  2536. log_test_addr ${a} $? 1 "VRF server, unbound client, local connection"
  2537. log_start
  2538. run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  2539. sleep 1
  2540. run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a}
  2541. log_test_addr ${a} $? 0 "Device server, VRF client, local connection"
  2542. for a in ${NSA_IP6} ${NSA_LINKIP6}
  2543. do
  2544. log_start
  2545. run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  2546. sleep 1
  2547. run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}
  2548. log_test_addr ${a} $? 0 "Device server, device client, local connection"
  2549. done
  2550. }
  2551. ipv6_tcp()
  2552. {
  2553. log_section "IPv6/TCP"
  2554. log_subsection "No VRF"
  2555. setup
  2556. # tcp_l3mdev_accept should have no affect without VRF;
  2557. # run tests with it enabled and disabled to verify
  2558. log_subsection "tcp_l3mdev_accept disabled"
  2559. set_sysctl net.ipv4.tcp_l3mdev_accept=0
  2560. ipv6_tcp_novrf
  2561. log_subsection "tcp_l3mdev_accept enabled"
  2562. set_sysctl net.ipv4.tcp_l3mdev_accept=1
  2563. ipv6_tcp_novrf
  2564. log_subsection "With VRF"
  2565. setup "yes"
  2566. ipv6_tcp_vrf
  2567. }
  2568. ################################################################################
  2569. # IPv6 UDP
  2570. ipv6_udp_novrf()
  2571. {
  2572. local a
  2573. #
  2574. # server tests
  2575. #
  2576. for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV}
  2577. do
  2578. log_start
  2579. run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
  2580. sleep 1
  2581. run_cmd_nsb nettest -6 -D -r ${a}
  2582. log_test_addr ${a} $? 0 "Global server"
  2583. log_start
  2584. run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  2585. sleep 1
  2586. run_cmd_nsb nettest -6 -D -r ${a}
  2587. log_test_addr ${a} $? 0 "Device server"
  2588. done
  2589. a=${NSA_LO_IP6}
  2590. log_start
  2591. run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
  2592. sleep 1
  2593. run_cmd_nsb nettest -6 -D -r ${a}
  2594. log_test_addr ${a} $? 0 "Global server"
  2595. # should fail since loopback address is out of scope for a device
  2596. # bound server, but it does not - hence this is more documenting
  2597. # behavior.
  2598. #log_start
  2599. #show_hint "Should fail since loopback address is out of scope"
  2600. #run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  2601. #sleep 1
  2602. #run_cmd_nsb nettest -6 -D -r ${a}
  2603. #log_test_addr ${a} $? 1 "Device server"
  2604. # negative test - should fail
  2605. for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}
  2606. do
  2607. log_start
  2608. show_hint "Should fail 'Connection refused' since there is no server"
  2609. run_cmd_nsb nettest -6 -D -r ${a}
  2610. log_test_addr ${a} $? 1 "No server"
  2611. done
  2612. #
  2613. # client
  2614. #
  2615. for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
  2616. do
  2617. log_start
  2618. run_cmd_nsb nettest -6 -D -s &
  2619. sleep 1
  2620. run_cmd nettest -6 -D -r ${a} -0 ${NSA_IP6}
  2621. log_test_addr ${a} $? 0 "Client"
  2622. log_start
  2623. run_cmd_nsb nettest -6 -D -s &
  2624. sleep 1
  2625. run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP6}
  2626. log_test_addr ${a} $? 0 "Client, device bind"
  2627. log_start
  2628. run_cmd_nsb nettest -6 -D -s &
  2629. sleep 1
  2630. run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP6}
  2631. log_test_addr ${a} $? 0 "Client, device send via cmsg"
  2632. log_start
  2633. run_cmd_nsb nettest -6 -D -s &
  2634. sleep 1
  2635. run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP6}
  2636. log_test_addr ${a} $? 0 "Client, device bind via IPV6_UNICAST_IF"
  2637. log_start
  2638. show_hint "Should fail 'Connection refused'"
  2639. run_cmd nettest -6 -D -r ${a}
  2640. log_test_addr ${a} $? 1 "No server, unbound client"
  2641. log_start
  2642. show_hint "Should fail 'Connection refused'"
  2643. run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV}
  2644. log_test_addr ${a} $? 1 "No server, device client"
  2645. done
  2646. #
  2647. # local address tests
  2648. #
  2649. for a in ${NSA_IP6} ${NSA_LO_IP6} ::1
  2650. do
  2651. log_start
  2652. run_cmd nettest -6 -D -s &
  2653. sleep 1
  2654. run_cmd nettest -6 -D -r ${a} -0 ${a} -1 ${a}
  2655. log_test_addr ${a} $? 0 "Global server, local connection"
  2656. done
  2657. a=${NSA_IP6}
  2658. log_start
  2659. run_cmd nettest -6 -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
  2660. sleep 1
  2661. run_cmd nettest -6 -D -r ${a}
  2662. log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
  2663. for a in ${NSA_LO_IP6} ::1
  2664. do
  2665. log_start
  2666. show_hint "Should fail 'Connection refused' since address is out of device scope"
  2667. run_cmd nettest -6 -s -D -I ${NSA_DEV} &
  2668. sleep 1
  2669. run_cmd nettest -6 -D -r ${a}
  2670. log_test_addr ${a} $? 1 "Device server, local connection"
  2671. done
  2672. a=${NSA_IP6}
  2673. log_start
  2674. run_cmd nettest -6 -s -D &
  2675. sleep 1
  2676. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
  2677. log_test_addr ${a} $? 0 "Global server, device client, local connection"
  2678. log_start
  2679. run_cmd nettest -6 -s -D &
  2680. sleep 1
  2681. run_cmd nettest -6 -D -d ${NSA_DEV} -C -r ${a}
  2682. log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection"
  2683. log_start
  2684. run_cmd nettest -6 -s -D &
  2685. sleep 1
  2686. run_cmd nettest -6 -D -d ${NSA_DEV} -S -r ${a}
  2687. log_test_addr ${a} $? 0 "Global server, device client via IPV6_UNICAST_IF, local connection"
  2688. for a in ${NSA_LO_IP6} ::1
  2689. do
  2690. log_start
  2691. show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
  2692. run_cmd nettest -6 -D -s &
  2693. sleep 1
  2694. run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV}
  2695. log_test_addr ${a} $? 1 "Global server, device client, local connection"
  2696. log_start
  2697. show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
  2698. run_cmd nettest -6 -D -s &
  2699. sleep 1
  2700. run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C
  2701. log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection"
  2702. log_start
  2703. show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
  2704. run_cmd nettest -6 -D -s &
  2705. sleep 1
  2706. run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S
  2707. log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection"
  2708. log_start
  2709. show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
  2710. run_cmd nettest -6 -D -s &
  2711. sleep 1
  2712. run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S -U
  2713. log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection, with connect()"
  2714. done
  2715. a=${NSA_IP6}
  2716. log_start
  2717. run_cmd nettest -6 -D -s -I ${NSA_DEV} -3 ${NSA_DEV} &
  2718. sleep 1
  2719. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} -0 ${a}
  2720. log_test_addr ${a} $? 0 "Device server, device client, local conn"
  2721. log_start
  2722. show_hint "Should fail 'Connection refused'"
  2723. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
  2724. log_test_addr ${a} $? 1 "No server, device client, local conn"
  2725. # LLA to GUA
  2726. run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}
  2727. run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV}
  2728. log_start
  2729. run_cmd nettest -6 -s -D &
  2730. sleep 1
  2731. run_cmd_nsb nettest -6 -D -r ${NSA_IP6}
  2732. log_test $? 0 "UDP in - LLA to GUA"
  2733. run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV}
  2734. run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad
  2735. }
  2736. ipv6_udp_vrf()
  2737. {
  2738. local a
  2739. # disable global server
  2740. log_subsection "Global server disabled"
  2741. set_sysctl net.ipv4.udp_l3mdev_accept=0
  2742. #
  2743. # server tests
  2744. #
  2745. for a in ${NSA_IP6} ${VRF_IP6}
  2746. do
  2747. log_start
  2748. show_hint "Should fail 'Connection refused' since global server is disabled"
  2749. run_cmd nettest -6 -D -s &
  2750. sleep 1
  2751. run_cmd_nsb nettest -6 -D -r ${a}
  2752. log_test_addr ${a} $? 1 "Global server"
  2753. done
  2754. for a in ${NSA_IP6} ${VRF_IP6}
  2755. do
  2756. log_start
  2757. run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
  2758. sleep 1
  2759. run_cmd_nsb nettest -6 -D -r ${a}
  2760. log_test_addr ${a} $? 0 "VRF server"
  2761. done
  2762. for a in ${NSA_IP6} ${VRF_IP6}
  2763. do
  2764. log_start
  2765. run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  2766. sleep 1
  2767. run_cmd_nsb nettest -6 -D -r ${a}
  2768. log_test_addr ${a} $? 0 "Enslaved device server"
  2769. done
  2770. # negative test - should fail
  2771. for a in ${NSA_IP6} ${VRF_IP6}
  2772. do
  2773. log_start
  2774. show_hint "Should fail 'Connection refused' since there is no server"
  2775. run_cmd_nsb nettest -6 -D -r ${a}
  2776. log_test_addr ${a} $? 1 "No server"
  2777. done
  2778. #
  2779. # local address tests
  2780. #
  2781. for a in ${NSA_IP6} ${VRF_IP6}
  2782. do
  2783. log_start
  2784. show_hint "Should fail 'Connection refused' since global server is disabled"
  2785. run_cmd nettest -6 -D -s &
  2786. sleep 1
  2787. run_cmd nettest -6 -D -d ${VRF} -r ${a}
  2788. log_test_addr ${a} $? 1 "Global server, VRF client, local conn"
  2789. done
  2790. for a in ${NSA_IP6} ${VRF_IP6}
  2791. do
  2792. log_start
  2793. run_cmd nettest -6 -D -I ${VRF} -s &
  2794. sleep 1
  2795. run_cmd nettest -6 -D -d ${VRF} -r ${a}
  2796. log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
  2797. done
  2798. a=${NSA_IP6}
  2799. log_start
  2800. show_hint "Should fail 'Connection refused' since global server is disabled"
  2801. run_cmd nettest -6 -D -s &
  2802. sleep 1
  2803. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
  2804. log_test_addr ${a} $? 1 "Global server, device client, local conn"
  2805. log_start
  2806. run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
  2807. sleep 1
  2808. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
  2809. log_test_addr ${a} $? 0 "VRF server, device client, local conn"
  2810. log_start
  2811. run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  2812. sleep 1
  2813. run_cmd nettest -6 -D -d ${VRF} -r ${a}
  2814. log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"
  2815. log_start
  2816. run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  2817. sleep 1
  2818. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
  2819. log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"
  2820. # disable global server
  2821. log_subsection "Global server enabled"
  2822. set_sysctl net.ipv4.udp_l3mdev_accept=1
  2823. #
  2824. # server tests
  2825. #
  2826. for a in ${NSA_IP6} ${VRF_IP6}
  2827. do
  2828. log_start
  2829. run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
  2830. sleep 1
  2831. run_cmd_nsb nettest -6 -D -r ${a}
  2832. log_test_addr ${a} $? 0 "Global server"
  2833. done
  2834. for a in ${NSA_IP6} ${VRF_IP6}
  2835. do
  2836. log_start
  2837. run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
  2838. sleep 1
  2839. run_cmd_nsb nettest -6 -D -r ${a}
  2840. log_test_addr ${a} $? 0 "VRF server"
  2841. done
  2842. for a in ${NSA_IP6} ${VRF_IP6}
  2843. do
  2844. log_start
  2845. run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  2846. sleep 1
  2847. run_cmd_nsb nettest -6 -D -r ${a}
  2848. log_test_addr ${a} $? 0 "Enslaved device server"
  2849. done
  2850. # negative test - should fail
  2851. for a in ${NSA_IP6} ${VRF_IP6}
  2852. do
  2853. log_start
  2854. run_cmd_nsb nettest -6 -D -r ${a}
  2855. log_test_addr ${a} $? 1 "No server"
  2856. done
  2857. #
  2858. # client tests
  2859. #
  2860. log_start
  2861. run_cmd_nsb nettest -6 -D -s &
  2862. sleep 1
  2863. run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6}
  2864. log_test $? 0 "VRF client"
  2865. # negative test - should fail
  2866. log_start
  2867. run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6}
  2868. log_test $? 1 "No server, VRF client"
  2869. log_start
  2870. run_cmd_nsb nettest -6 -D -s &
  2871. sleep 1
  2872. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6}
  2873. log_test $? 0 "Enslaved device client"
  2874. # negative test - should fail
  2875. log_start
  2876. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6}
  2877. log_test $? 1 "No server, enslaved device client"
  2878. #
  2879. # local address tests
  2880. #
  2881. a=${NSA_IP6}
  2882. log_start
  2883. run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
  2884. sleep 1
  2885. run_cmd nettest -6 -D -d ${VRF} -r ${a}
  2886. log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
  2887. #log_start
  2888. run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
  2889. sleep 1
  2890. run_cmd nettest -6 -D -d ${VRF} -r ${a}
  2891. log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
  2892. a=${VRF_IP6}
  2893. log_start
  2894. run_cmd nettest -6 -D -s -3 ${VRF} &
  2895. sleep 1
  2896. run_cmd nettest -6 -D -d ${VRF} -r ${a}
  2897. log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
  2898. log_start
  2899. run_cmd nettest -6 -D -I ${VRF} -s -3 ${VRF} &
  2900. sleep 1
  2901. run_cmd nettest -6 -D -d ${VRF} -r ${a}
  2902. log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
  2903. # negative test - should fail
  2904. for a in ${NSA_IP6} ${VRF_IP6}
  2905. do
  2906. log_start
  2907. run_cmd nettest -6 -D -d ${VRF} -r ${a}
  2908. log_test_addr ${a} $? 1 "No server, VRF client, local conn"
  2909. done
  2910. # device to global IP
  2911. a=${NSA_IP6}
  2912. log_start
  2913. run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
  2914. sleep 1
  2915. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
  2916. log_test_addr ${a} $? 0 "Global server, device client, local conn"
  2917. log_start
  2918. run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
  2919. sleep 1
  2920. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
  2921. log_test_addr ${a} $? 0 "VRF server, device client, local conn"
  2922. log_start
  2923. run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  2924. sleep 1
  2925. run_cmd nettest -6 -D -d ${VRF} -r ${a}
  2926. log_test_addr ${a} $? 0 "Device server, VRF client, local conn"
  2927. log_start
  2928. run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
  2929. sleep 1
  2930. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
  2931. log_test_addr ${a} $? 0 "Device server, device client, local conn"
  2932. log_start
  2933. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
  2934. log_test_addr ${a} $? 1 "No server, device client, local conn"
  2935. # link local addresses
  2936. log_start
  2937. run_cmd nettest -6 -D -s &
  2938. sleep 1
  2939. run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6}
  2940. log_test $? 0 "Global server, linklocal IP"
  2941. log_start
  2942. run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6}
  2943. log_test $? 1 "No server, linklocal IP"
  2944. log_start
  2945. run_cmd_nsb nettest -6 -D -s &
  2946. sleep 1
  2947. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6}
  2948. log_test $? 0 "Enslaved device client, linklocal IP"
  2949. log_start
  2950. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6}
  2951. log_test $? 1 "No server, device client, peer linklocal IP"
  2952. log_start
  2953. run_cmd nettest -6 -D -s &
  2954. sleep 1
  2955. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6}
  2956. log_test $? 0 "Enslaved device client, local conn - linklocal IP"
  2957. log_start
  2958. run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6}
  2959. log_test $? 1 "No server, device client, local conn - linklocal IP"
  2960. # LLA to GUA
  2961. run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}
  2962. run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV}
  2963. log_start
  2964. run_cmd nettest -6 -s -D &
  2965. sleep 1
  2966. run_cmd_nsb nettest -6 -D -r ${NSA_IP6}
  2967. log_test $? 0 "UDP in - LLA to GUA"
  2968. run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV}
  2969. run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad
  2970. }
  2971. ipv6_udp()
  2972. {
  2973. # should not matter, but set to known state
  2974. set_sysctl net.ipv4.udp_early_demux=1
  2975. log_section "IPv6/UDP"
  2976. log_subsection "No VRF"
  2977. setup
  2978. # udp_l3mdev_accept should have no affect without VRF;
  2979. # run tests with it enabled and disabled to verify
  2980. log_subsection "udp_l3mdev_accept disabled"
  2981. set_sysctl net.ipv4.udp_l3mdev_accept=0
  2982. ipv6_udp_novrf
  2983. log_subsection "udp_l3mdev_accept enabled"
  2984. set_sysctl net.ipv4.udp_l3mdev_accept=1
  2985. ipv6_udp_novrf
  2986. log_subsection "With VRF"
  2987. setup "yes"
  2988. ipv6_udp_vrf
  2989. }
  2990. ################################################################################
  2991. # IPv6 address bind
  2992. ipv6_addr_bind_novrf()
  2993. {
  2994. #
  2995. # raw socket
  2996. #
  2997. for a in ${NSA_IP6} ${NSA_LO_IP6}
  2998. do
  2999. log_start
  3000. run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -b
  3001. log_test_addr ${a} $? 0 "Raw socket bind to local address"
  3002. log_start
  3003. run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b
  3004. log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
  3005. done
  3006. #
  3007. # raw socket with nonlocal bind
  3008. #
  3009. a=${NL_IP6}
  3010. log_start
  3011. run_cmd nettest -6 -s -R -P icmp -f -l ${a} -I ${NSA_DEV} -b
  3012. log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address"
  3013. #
  3014. # tcp sockets
  3015. #
  3016. a=${NSA_IP6}
  3017. log_start
  3018. run_cmd nettest -6 -s -l ${a} -t1 -b
  3019. log_test_addr ${a} $? 0 "TCP socket bind to local address"
  3020. log_start
  3021. run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
  3022. log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"
  3023. # Sadly, the kernel allows binding a socket to a device and then
  3024. # binding to an address not on the device. So this test passes
  3025. # when it really should not
  3026. a=${NSA_LO_IP6}
  3027. log_start
  3028. show_hint "Tecnically should fail since address is not on device but kernel allows"
  3029. run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
  3030. log_test_addr ${a} $? 0 "TCP socket bind to out of scope local address"
  3031. }
  3032. ipv6_addr_bind_vrf()
  3033. {
  3034. #
  3035. # raw socket
  3036. #
  3037. for a in ${NSA_IP6} ${VRF_IP6}
  3038. do
  3039. log_start
  3040. run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b
  3041. log_test_addr ${a} $? 0 "Raw socket bind to local address after vrf bind"
  3042. log_start
  3043. run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b
  3044. log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
  3045. done
  3046. a=${NSA_LO_IP6}
  3047. log_start
  3048. show_hint "Address on loopback is out of VRF scope"
  3049. run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b
  3050. log_test_addr ${a} $? 1 "Raw socket bind to invalid local address after vrf bind"
  3051. #
  3052. # raw socket with nonlocal bind
  3053. #
  3054. a=${NL_IP6}
  3055. log_start
  3056. run_cmd nettest -6 -s -R -P icmp -f -l ${a} -I ${VRF} -b
  3057. log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address after VRF bind"
  3058. #
  3059. # tcp sockets
  3060. #
  3061. # address on enslaved device is valid for the VRF or device in a VRF
  3062. for a in ${NSA_IP6} ${VRF_IP6}
  3063. do
  3064. log_start
  3065. run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b
  3066. log_test_addr ${a} $? 0 "TCP socket bind to local address with VRF bind"
  3067. done
  3068. a=${NSA_IP6}
  3069. log_start
  3070. run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
  3071. log_test_addr ${a} $? 0 "TCP socket bind to local address with device bind"
  3072. # Sadly, the kernel allows binding a socket to a device and then
  3073. # binding to an address not on the device. The only restriction
  3074. # is that the address is valid in the L3 domain. So this test
  3075. # passes when it really should not
  3076. a=${VRF_IP6}
  3077. log_start
  3078. show_hint "Tecnically should fail since address is not on device but kernel allows"
  3079. run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
  3080. log_test_addr ${a} $? 0 "TCP socket bind to VRF address with device bind"
  3081. a=${NSA_LO_IP6}
  3082. log_start
  3083. show_hint "Address on loopback out of scope for VRF"
  3084. run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b
  3085. log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF"
  3086. log_start
  3087. show_hint "Address on loopback out of scope for device in VRF"
  3088. run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
  3089. log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind"
  3090. }
  3091. ipv6_addr_bind()
  3092. {
  3093. log_section "IPv6 address binds"
  3094. log_subsection "No VRF"
  3095. setup
  3096. ipv6_addr_bind_novrf
  3097. log_subsection "With VRF"
  3098. setup "yes"
  3099. ipv6_addr_bind_vrf
  3100. }
  3101. ################################################################################
  3102. # IPv6 runtime tests
  3103. ipv6_rt()
  3104. {
  3105. local desc="$1"
  3106. local varg="-6 $2"
  3107. local with_vrf="yes"
  3108. local a
  3109. #
  3110. # server tests
  3111. #
  3112. for a in ${NSA_IP6} ${VRF_IP6}
  3113. do
  3114. log_start
  3115. run_cmd nettest ${varg} -s &
  3116. sleep 1
  3117. run_cmd_nsb nettest ${varg} -r ${a} &
  3118. sleep 3
  3119. run_cmd ip link del ${VRF}
  3120. sleep 1
  3121. log_test_addr ${a} 0 0 "${desc}, global server"
  3122. setup ${with_vrf}
  3123. done
  3124. for a in ${NSA_IP6} ${VRF_IP6}
  3125. do
  3126. log_start
  3127. run_cmd nettest ${varg} -I ${VRF} -s &
  3128. sleep 1
  3129. run_cmd_nsb nettest ${varg} -r ${a} &
  3130. sleep 3
  3131. run_cmd ip link del ${VRF}
  3132. sleep 1
  3133. log_test_addr ${a} 0 0 "${desc}, VRF server"
  3134. setup ${with_vrf}
  3135. done
  3136. for a in ${NSA_IP6} ${VRF_IP6}
  3137. do
  3138. log_start
  3139. run_cmd nettest ${varg} -I ${NSA_DEV} -s &
  3140. sleep 1
  3141. run_cmd_nsb nettest ${varg} -r ${a} &
  3142. sleep 3
  3143. run_cmd ip link del ${VRF}
  3144. sleep 1
  3145. log_test_addr ${a} 0 0 "${desc}, enslaved device server"
  3146. setup ${with_vrf}
  3147. done
  3148. #
  3149. # client test
  3150. #
  3151. log_start
  3152. run_cmd_nsb nettest ${varg} -s &
  3153. sleep 1
  3154. run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP6} &
  3155. sleep 3
  3156. run_cmd ip link del ${VRF}
  3157. sleep 1
  3158. log_test 0 0 "${desc}, VRF client"
  3159. setup ${with_vrf}
  3160. log_start
  3161. run_cmd_nsb nettest ${varg} -s &
  3162. sleep 1
  3163. run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP6} &
  3164. sleep 3
  3165. run_cmd ip link del ${VRF}
  3166. sleep 1
  3167. log_test 0 0 "${desc}, enslaved device client"
  3168. setup ${with_vrf}
  3169. #
  3170. # local address tests
  3171. #
  3172. for a in ${NSA_IP6} ${VRF_IP6}
  3173. do
  3174. log_start
  3175. run_cmd nettest ${varg} -s &
  3176. sleep 1
  3177. run_cmd nettest ${varg} -d ${VRF} -r ${a} &
  3178. sleep 3
  3179. run_cmd ip link del ${VRF}
  3180. sleep 1
  3181. log_test_addr ${a} 0 0 "${desc}, global server, VRF client"
  3182. setup ${with_vrf}
  3183. done
  3184. for a in ${NSA_IP6} ${VRF_IP6}
  3185. do
  3186. log_start
  3187. run_cmd nettest ${varg} -I ${VRF} -s &
  3188. sleep 1
  3189. run_cmd nettest ${varg} -d ${VRF} -r ${a} &
  3190. sleep 3
  3191. run_cmd ip link del ${VRF}
  3192. sleep 1
  3193. log_test_addr ${a} 0 0 "${desc}, VRF server and client"
  3194. setup ${with_vrf}
  3195. done
  3196. a=${NSA_IP6}
  3197. log_start
  3198. run_cmd nettest ${varg} -s &
  3199. sleep 1
  3200. run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
  3201. sleep 3
  3202. run_cmd ip link del ${VRF}
  3203. sleep 1
  3204. log_test_addr ${a} 0 0 "${desc}, global server, device client"
  3205. setup ${with_vrf}
  3206. log_start
  3207. run_cmd nettest ${varg} -I ${VRF} -s &
  3208. sleep 1
  3209. run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
  3210. sleep 3
  3211. run_cmd ip link del ${VRF}
  3212. sleep 1
  3213. log_test_addr ${a} 0 0 "${desc}, VRF server, device client"
  3214. setup ${with_vrf}
  3215. log_start
  3216. run_cmd nettest ${varg} -I ${NSA_DEV} -s &
  3217. sleep 1
  3218. run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
  3219. sleep 3
  3220. run_cmd ip link del ${VRF}
  3221. sleep 1
  3222. log_test_addr ${a} 0 0 "${desc}, device server, device client"
  3223. }
  3224. ipv6_ping_rt()
  3225. {
  3226. local with_vrf="yes"
  3227. local a
  3228. a=${NSA_IP6}
  3229. log_start
  3230. run_cmd_nsb ${ping6} -f ${a} &
  3231. sleep 3
  3232. run_cmd ip link del ${VRF}
  3233. sleep 1
  3234. log_test_addr ${a} 0 0 "Device delete with active traffic - ping in"
  3235. setup ${with_vrf}
  3236. log_start
  3237. run_cmd ${ping6} -f ${NSB_IP6} -I ${VRF} &
  3238. sleep 1
  3239. run_cmd ip link del ${VRF}
  3240. sleep 1
  3241. log_test_addr ${a} 0 0 "Device delete with active traffic - ping out"
  3242. }
  3243. ipv6_runtime()
  3244. {
  3245. log_section "Run time tests - ipv6"
  3246. setup "yes"
  3247. ipv6_ping_rt
  3248. setup "yes"
  3249. ipv6_rt "TCP active socket" "-n -1"
  3250. setup "yes"
  3251. ipv6_rt "TCP passive socket" "-i"
  3252. setup "yes"
  3253. ipv6_rt "UDP active socket" "-D -n -1"
  3254. }
  3255. ################################################################################
  3256. # netfilter blocking connections
  3257. netfilter_tcp_reset()
  3258. {
  3259. local a
  3260. for a in ${NSA_IP} ${VRF_IP}
  3261. do
  3262. log_start
  3263. run_cmd nettest -s &
  3264. sleep 1
  3265. run_cmd_nsb nettest -r ${a}
  3266. log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx"
  3267. done
  3268. }
  3269. netfilter_icmp()
  3270. {
  3271. local stype="$1"
  3272. local arg
  3273. local a
  3274. [ "${stype}" = "UDP" ] && arg="-D"
  3275. for a in ${NSA_IP} ${VRF_IP}
  3276. do
  3277. log_start
  3278. run_cmd nettest ${arg} -s &
  3279. sleep 1
  3280. run_cmd_nsb nettest ${arg} -r ${a}
  3281. log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach"
  3282. done
  3283. }
  3284. ipv4_netfilter()
  3285. {
  3286. log_section "IPv4 Netfilter"
  3287. log_subsection "TCP reset"
  3288. setup "yes"
  3289. run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset
  3290. netfilter_tcp_reset
  3291. log_start
  3292. log_subsection "ICMP unreachable"
  3293. log_start
  3294. run_cmd iptables -F
  3295. run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp-port-unreachable
  3296. run_cmd iptables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp-port-unreachable
  3297. netfilter_icmp "TCP"
  3298. netfilter_icmp "UDP"
  3299. log_start
  3300. iptables -F
  3301. }
  3302. netfilter_tcp6_reset()
  3303. {
  3304. local a
  3305. for a in ${NSA_IP6} ${VRF_IP6}
  3306. do
  3307. log_start
  3308. run_cmd nettest -6 -s &
  3309. sleep 1
  3310. run_cmd_nsb nettest -6 -r ${a}
  3311. log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx"
  3312. done
  3313. }
  3314. netfilter_icmp6()
  3315. {
  3316. local stype="$1"
  3317. local arg
  3318. local a
  3319. [ "${stype}" = "UDP" ] && arg="$arg -D"
  3320. for a in ${NSA_IP6} ${VRF_IP6}
  3321. do
  3322. log_start
  3323. run_cmd nettest -6 -s ${arg} &
  3324. sleep 1
  3325. run_cmd_nsb nettest -6 ${arg} -r ${a}
  3326. log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach"
  3327. done
  3328. }
  3329. ipv6_netfilter()
  3330. {
  3331. log_section "IPv6 Netfilter"
  3332. log_subsection "TCP reset"
  3333. setup "yes"
  3334. run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset
  3335. netfilter_tcp6_reset
  3336. log_subsection "ICMP unreachable"
  3337. log_start
  3338. run_cmd ip6tables -F
  3339. run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable
  3340. run_cmd ip6tables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable
  3341. netfilter_icmp6 "TCP"
  3342. netfilter_icmp6 "UDP"
  3343. log_start
  3344. ip6tables -F
  3345. }
  3346. ################################################################################
  3347. # specific use cases
  3348. # VRF only.
  3349. # ns-A device enslaved to bridge. Verify traffic with and without
  3350. # br_netfilter module loaded. Repeat with SVI on bridge.
  3351. use_case_br()
  3352. {
  3353. setup "yes"
  3354. setup_cmd ip link set ${NSA_DEV} down
  3355. setup_cmd ip addr del dev ${NSA_DEV} ${NSA_IP}/24
  3356. setup_cmd ip -6 addr del dev ${NSA_DEV} ${NSA_IP6}/64
  3357. setup_cmd ip link add br0 type bridge
  3358. setup_cmd ip addr add dev br0 ${NSA_IP}/24
  3359. setup_cmd ip -6 addr add dev br0 ${NSA_IP6}/64 nodad
  3360. setup_cmd ip li set ${NSA_DEV} master br0
  3361. setup_cmd ip li set ${NSA_DEV} up
  3362. setup_cmd ip li set br0 up
  3363. setup_cmd ip li set br0 vrf ${VRF}
  3364. rmmod br_netfilter 2>/dev/null
  3365. sleep 5 # DAD
  3366. run_cmd ip neigh flush all
  3367. run_cmd ping -c1 -w1 -I br0 ${NSB_IP}
  3368. log_test $? 0 "Bridge into VRF - IPv4 ping out"
  3369. run_cmd ip neigh flush all
  3370. run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6}
  3371. log_test $? 0 "Bridge into VRF - IPv6 ping out"
  3372. run_cmd ip neigh flush all
  3373. run_cmd_nsb ping -c1 -w1 ${NSA_IP}
  3374. log_test $? 0 "Bridge into VRF - IPv4 ping in"
  3375. run_cmd ip neigh flush all
  3376. run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}
  3377. log_test $? 0 "Bridge into VRF - IPv6 ping in"
  3378. modprobe br_netfilter
  3379. if [ $? -eq 0 ]; then
  3380. run_cmd ip neigh flush all
  3381. run_cmd ping -c1 -w1 -I br0 ${NSB_IP}
  3382. log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping out"
  3383. run_cmd ip neigh flush all
  3384. run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6}
  3385. log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping out"
  3386. run_cmd ip neigh flush all
  3387. run_cmd_nsb ping -c1 -w1 ${NSA_IP}
  3388. log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping in"
  3389. run_cmd ip neigh flush all
  3390. run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}
  3391. log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping in"
  3392. fi
  3393. setup_cmd ip li set br0 nomaster
  3394. setup_cmd ip li add br0.100 link br0 type vlan id 100
  3395. setup_cmd ip li set br0.100 vrf ${VRF} up
  3396. setup_cmd ip addr add dev br0.100 172.16.101.1/24
  3397. setup_cmd ip -6 addr add dev br0.100 2001:db8:101::1/64 nodad
  3398. setup_cmd_nsb ip li add vlan100 link ${NSB_DEV} type vlan id 100
  3399. setup_cmd_nsb ip addr add dev vlan100 172.16.101.2/24
  3400. setup_cmd_nsb ip -6 addr add dev vlan100 2001:db8:101::2/64 nodad
  3401. setup_cmd_nsb ip li set vlan100 up
  3402. sleep 1
  3403. rmmod br_netfilter 2>/dev/null
  3404. run_cmd ip neigh flush all
  3405. run_cmd ping -c1 -w1 -I br0.100 172.16.101.2
  3406. log_test $? 0 "Bridge vlan into VRF - IPv4 ping out"
  3407. run_cmd ip neigh flush all
  3408. run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::2
  3409. log_test $? 0 "Bridge vlan into VRF - IPv6 ping out"
  3410. run_cmd ip neigh flush all
  3411. run_cmd_nsb ping -c1 -w1 172.16.101.1
  3412. log_test $? 0 "Bridge vlan into VRF - IPv4 ping in"
  3413. run_cmd ip neigh flush all
  3414. run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::1
  3415. log_test $? 0 "Bridge vlan into VRF - IPv6 ping in"
  3416. modprobe br_netfilter
  3417. if [ $? -eq 0 ]; then
  3418. run_cmd ip neigh flush all
  3419. run_cmd ping -c1 -w1 -I br0.100 172.16.101.2
  3420. log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv4 ping out"
  3421. run_cmd ip neigh flush all
  3422. run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::2
  3423. log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv6 ping out"
  3424. run_cmd ip neigh flush all
  3425. run_cmd_nsb ping -c1 -w1 172.16.101.1
  3426. log_test $? 0 "Bridge vlan into VRF - IPv4 ping in"
  3427. run_cmd ip neigh flush all
  3428. run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::1
  3429. log_test $? 0 "Bridge vlan into VRF - IPv6 ping in"
  3430. fi
  3431. setup_cmd ip li del br0 2>/dev/null
  3432. setup_cmd_nsb ip li del vlan100 2>/dev/null
  3433. }
  3434. # VRF only.
  3435. # ns-A device is connected to both ns-B and ns-C on a single VRF but only has
  3436. # LLA on the interfaces
  3437. use_case_ping_lla_multi()
  3438. {
  3439. setup_lla_only
  3440. # only want reply from ns-A
  3441. setup_cmd_nsb sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1
  3442. setup_cmd_nsc sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1
  3443. log_start
  3444. run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
  3445. log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Pre cycle, ping out ns-B"
  3446. run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
  3447. log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Pre cycle, ping out ns-C"
  3448. # cycle/flap the first ns-A interface
  3449. setup_cmd ip link set ${NSA_DEV} down
  3450. setup_cmd ip link set ${NSA_DEV} up
  3451. sleep 1
  3452. log_start
  3453. run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
  3454. log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-B"
  3455. run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
  3456. log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-C"
  3457. # cycle/flap the second ns-A interface
  3458. setup_cmd ip link set ${NSA_DEV2} down
  3459. setup_cmd ip link set ${NSA_DEV2} up
  3460. sleep 1
  3461. log_start
  3462. run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
  3463. log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-B"
  3464. run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
  3465. log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-C"
  3466. }
  3467. # Perform IPv{4,6} SNAT on ns-A, and verify TCP connection is successfully
  3468. # established with ns-B.
  3469. use_case_snat_on_vrf()
  3470. {
  3471. setup "yes"
  3472. local port="12345"
  3473. run_cmd iptables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF}
  3474. run_cmd ip6tables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF}
  3475. run_cmd_nsb nettest -s -l ${NSB_IP} -p ${port} &
  3476. sleep 1
  3477. run_cmd nettest -d ${VRF} -r ${NSB_IP} -p ${port}
  3478. log_test $? 0 "IPv4 TCP connection over VRF with SNAT"
  3479. run_cmd_nsb nettest -6 -s -l ${NSB_IP6} -p ${port} &
  3480. sleep 1
  3481. run_cmd nettest -6 -d ${VRF} -r ${NSB_IP6} -p ${port}
  3482. log_test $? 0 "IPv6 TCP connection over VRF with SNAT"
  3483. # Cleanup
  3484. run_cmd iptables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF}
  3485. run_cmd ip6tables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF}
  3486. }
  3487. use_cases()
  3488. {
  3489. log_section "Use cases"
  3490. log_subsection "Device enslaved to bridge"
  3491. use_case_br
  3492. log_subsection "Ping LLA with multiple interfaces"
  3493. use_case_ping_lla_multi
  3494. log_subsection "SNAT on VRF"
  3495. use_case_snat_on_vrf
  3496. }
  3497. ################################################################################
  3498. # usage
  3499. usage()
  3500. {
  3501. cat <<EOF
  3502. usage: ${0##*/} OPTS
  3503. -4 IPv4 tests only
  3504. -6 IPv6 tests only
  3505. -t <test> Test name/set to run
  3506. -p Pause on fail
  3507. -P Pause after each test
  3508. -v Be verbose
  3509. Tests:
  3510. $TESTS_IPV4 $TESTS_IPV6 $TESTS_OTHER
  3511. EOF
  3512. }
  3513. ################################################################################
  3514. # main
  3515. TESTS_IPV4="ipv4_ping ipv4_tcp ipv4_udp ipv4_bind ipv4_runtime ipv4_netfilter"
  3516. TESTS_IPV6="ipv6_ping ipv6_tcp ipv6_udp ipv6_bind ipv6_runtime ipv6_netfilter"
  3517. TESTS_OTHER="use_cases"
  3518. PAUSE_ON_FAIL=no
  3519. PAUSE=no
  3520. while getopts :46t:pPvh o
  3521. do
  3522. case $o in
  3523. 4) TESTS=ipv4;;
  3524. 6) TESTS=ipv6;;
  3525. t) TESTS=$OPTARG;;
  3526. p) PAUSE_ON_FAIL=yes;;
  3527. P) PAUSE=yes;;
  3528. v) VERBOSE=1;;
  3529. h) usage; exit 0;;
  3530. *) usage; exit 1;;
  3531. esac
  3532. done
  3533. # make sure we don't pause twice
  3534. [ "${PAUSE}" = "yes" ] && PAUSE_ON_FAIL=no
  3535. #
  3536. # show user test config
  3537. #
  3538. if [ -z "$TESTS" ]; then
  3539. TESTS="$TESTS_IPV4 $TESTS_IPV6 $TESTS_OTHER"
  3540. elif [ "$TESTS" = "ipv4" ]; then
  3541. TESTS="$TESTS_IPV4"
  3542. elif [ "$TESTS" = "ipv6" ]; then
  3543. TESTS="$TESTS_IPV6"
  3544. fi
  3545. # nettest can be run from PATH or from same directory as this selftest
  3546. if ! which nettest >/dev/null; then
  3547. PATH=$PWD:$PATH
  3548. if ! which nettest >/dev/null; then
  3549. echo "'nettest' command not found; skipping tests"
  3550. exit $ksft_skip
  3551. fi
  3552. fi
  3553. declare -i nfail=0
  3554. declare -i nsuccess=0
  3555. for t in $TESTS
  3556. do
  3557. case $t in
  3558. ipv4_ping|ping) ipv4_ping;;
  3559. ipv4_tcp|tcp) ipv4_tcp;;
  3560. ipv4_udp|udp) ipv4_udp;;
  3561. ipv4_bind|bind) ipv4_addr_bind;;
  3562. ipv4_runtime) ipv4_runtime;;
  3563. ipv4_netfilter) ipv4_netfilter;;
  3564. ipv6_ping|ping6) ipv6_ping;;
  3565. ipv6_tcp|tcp6) ipv6_tcp;;
  3566. ipv6_udp|udp6) ipv6_udp;;
  3567. ipv6_bind|bind6) ipv6_addr_bind;;
  3568. ipv6_runtime) ipv6_runtime;;
  3569. ipv6_netfilter) ipv6_netfilter;;
  3570. use_cases) use_cases;;
  3571. # setup namespaces and config, but do not run any tests
  3572. setup) setup; exit 0;;
  3573. vrf_setup) setup "yes"; exit 0;;
  3574. esac
  3575. done
  3576. cleanup 2>/dev/null
  3577. printf "\nTests passed: %3d\n" ${nsuccess}
  3578. printf "Tests failed: %3d\n" ${nfail}
  3579. if [ $nfail -ne 0 ]; then
  3580. exit 1 # KSFT_FAIL
  3581. elif [ $nsuccess -eq 0 ]; then
  3582. exit $ksft_skip
  3583. fi
  3584. exit 0 # KSFT_PASS