qdiscs.json 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140
  1. [
  2. {
  3. "id": "ca5e",
  4. "name": "Check class delete notification for ffff:",
  5. "category": [
  6. "qdisc"
  7. ],
  8. "plugins": {
  9. "requires": "nsPlugin"
  10. },
  11. "setup": [
  12. "$IP link set dev $DUMMY up || true",
  13. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  14. "$TC qdisc add dev $DUMMY root handle 1: drr",
  15. "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
  16. "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
  17. "$TC qdisc add dev $DUMMY parent 1:1 handle ffff: drr",
  18. "$TC filter add dev $DUMMY parent ffff: basic classid ffff:1",
  19. "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr",
  20. "$TC qdisc add dev $DUMMY parent ffff:1 netem delay 1s",
  21. "ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true",
  22. "$TC class del dev $DUMMY classid ffff:1",
  23. "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr"
  24. ],
  25. "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1",
  26. "expExitCode": "1",
  27. "verifyCmd": "$TC -s qdisc ls dev $DUMMY",
  28. "matchPattern": "drr 1: root",
  29. "matchCount": "1",
  30. "teardown": [
  31. "$TC qdisc del dev $DUMMY root handle 1: drr",
  32. "$IP addr del 10.10.10.10/24 dev $DUMMY"
  33. ]
  34. },
  35. {
  36. "id": "e4b7",
  37. "name": "Check class delete notification for root ffff:",
  38. "category": [
  39. "qdisc"
  40. ],
  41. "plugins": {
  42. "requires": "nsPlugin"
  43. },
  44. "setup": [
  45. "$IP link set dev $DUMMY up || true",
  46. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  47. "$TC qdisc add dev $DUMMY root handle ffff: drr",
  48. "$TC filter add dev $DUMMY parent ffff: basic classid ffff:1",
  49. "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr",
  50. "$TC qdisc add dev $DUMMY parent ffff:1 netem delay 1s",
  51. "ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true",
  52. "$TC class del dev $DUMMY classid ffff:1",
  53. "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr"
  54. ],
  55. "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1",
  56. "expExitCode": "1",
  57. "verifyCmd": "$TC qdisc ls dev $DUMMY",
  58. "matchPattern": "drr ffff: root",
  59. "matchCount": "1",
  60. "teardown": [
  61. "$TC qdisc del dev $DUMMY root handle ffff: drr",
  62. "$IP addr del 10.10.10.10/24 dev $DUMMY"
  63. ]
  64. },
  65. {
  66. "id": "33a9",
  67. "name": "Check ingress is not searchable on backlog update",
  68. "category": [
  69. "qdisc"
  70. ],
  71. "plugins": {
  72. "requires": "nsPlugin"
  73. },
  74. "setup": [
  75. "$IP link set dev $DUMMY up || true",
  76. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  77. "$TC qdisc add dev $DUMMY ingress",
  78. "$TC qdisc add dev $DUMMY root handle 1: drr",
  79. "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
  80. "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
  81. "$TC qdisc add dev $DUMMY parent 1:1 handle 2: drr",
  82. "$TC filter add dev $DUMMY parent 2: basic classid 2:1",
  83. "$TC class add dev $DUMMY parent 2: classid 2:1 drr",
  84. "$TC qdisc add dev $DUMMY parent 2:1 netem delay 1s",
  85. "ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true"
  86. ],
  87. "cmdUnderTest": "$TC class del dev $DUMMY classid 2:1",
  88. "expExitCode": "0",
  89. "verifyCmd": "$TC qdisc ls dev $DUMMY",
  90. "matchPattern": "drr 1: root",
  91. "matchCount": "1",
  92. "teardown": [
  93. "$TC qdisc del dev $DUMMY root handle 1: drr",
  94. "$TC qdisc del dev $DUMMY ingress",
  95. "$IP addr del 10.10.10.10/24 dev $DUMMY"
  96. ]
  97. },
  98. {
  99. "id": "a4b9",
  100. "name": "Test class qlen notification",
  101. "category": [
  102. "qdisc"
  103. ],
  104. "plugins": {
  105. "requires": "nsPlugin"
  106. },
  107. "setup": [
  108. "$IP link set dev $DUMMY up || true",
  109. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  110. "$TC qdisc add dev $DUMMY root handle 1: drr",
  111. "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
  112. "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
  113. "$TC qdisc add dev $DUMMY parent 1:1 handle 2: netem",
  114. "$TC qdisc add dev $DUMMY parent 2: handle 3: drr",
  115. "$TC filter add dev $DUMMY parent 3: basic action drop",
  116. "$TC class add dev $DUMMY parent 3: classid 3:1 drr",
  117. "$TC class del dev $DUMMY classid 1:1",
  118. "$TC class add dev $DUMMY parent 1: classid 1:1 drr"
  119. ],
  120. "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1",
  121. "expExitCode": "1",
  122. "verifyCmd": "$TC qdisc ls dev $DUMMY",
  123. "matchPattern": "drr 1: root",
  124. "matchCount": "1",
  125. "teardown": [
  126. "$TC qdisc del dev $DUMMY root handle 1: drr",
  127. "$IP addr del 10.10.10.10/24 dev $DUMMY"
  128. ]
  129. },
  130. {
  131. "id": "5456",
  132. "name": "Test htb_dequeue_tree with deactivation and row emptying",
  133. "category": [
  134. "qdisc",
  135. "htb"
  136. ],
  137. "plugins": {
  138. "requires": "nsPlugin"
  139. },
  140. "setup": [
  141. "$IP link set dev $DUMMY up || true",
  142. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  143. "$TC qdisc add dev $DUMMY root handle 1: htb default 1",
  144. "$TC class add dev $DUMMY parent 1: classid 1:1 htb rate 64bit ",
  145. "$TC qdisc add dev $DUMMY parent 1:1 handle 2: netem",
  146. "$TC qdisc add dev $DUMMY parent 2:1 handle 3: blackhole"
  147. ],
  148. "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11",
  149. "expExitCode": "1",
  150. "verifyCmd": "$TC -j qdisc show dev $DUMMY",
  151. "matchJSON": [],
  152. "teardown": [
  153. "$TC qdisc del dev $DUMMY root"
  154. ]
  155. },
  156. {
  157. "id": "c024",
  158. "name": "Test TBF with SKBPRIO - catch qlen corner cases",
  159. "category": [
  160. "qdisc",
  161. "tbf",
  162. "skbprio"
  163. ],
  164. "plugins": {
  165. "requires": "nsPlugin"
  166. },
  167. "setup": [
  168. "$IP link set dev $DUMMY up || true",
  169. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  170. "$TC qdisc add dev $DUMMY handle 1: root tbf rate 100bit burst 2000 limit 1000",
  171. "$TC qdisc add dev $DUMMY parent 1: handle 10: skbprio limit 1",
  172. "ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
  173. "ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
  174. "ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
  175. "ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
  176. "sleep 0.5"
  177. ],
  178. "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
  179. "expExitCode": "0",
  180. "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc skbprio'",
  181. "matchPattern": "dropped [1-9][0-9]*",
  182. "matchCount": "1",
  183. "teardown": [
  184. "$TC qdisc del dev $DUMMY handle 1: root",
  185. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  186. ]
  187. },
  188. {
  189. "id": "34c0",
  190. "name": "Test TBF with HHF Backlog Accounting in gso_skb case against underflow",
  191. "category": [
  192. "qdisc",
  193. "tbf",
  194. "hhf"
  195. ],
  196. "plugins": {
  197. "requires": [
  198. "nsPlugin"
  199. ]
  200. },
  201. "setup": [
  202. "$IP link set dev $DUMMY up || true",
  203. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  204. "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
  205. "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 hhf limit 1000",
  206. [
  207. "ping -I $DUMMY -c2 10.10.11.11",
  208. 1
  209. ],
  210. "$TC qdisc change dev $DUMMY handle 2: parent 1:1 hhf limit 1"
  211. ],
  212. "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
  213. "expExitCode": "0",
  214. "verifyCmd": "$TC -s qdisc show dev $DUMMY",
  215. "matchPattern": "backlog 0b 0p",
  216. "matchCount": "1",
  217. "teardown": [
  218. "$TC qdisc del dev $DUMMY handle 1: root"
  219. ]
  220. },
  221. {
  222. "id": "fd68",
  223. "name": "Test TBF with CODEL Backlog Accounting in gso_skb case against underflow",
  224. "category": [
  225. "qdisc",
  226. "tbf",
  227. "codel"
  228. ],
  229. "plugins": {
  230. "requires": [
  231. "nsPlugin"
  232. ]
  233. },
  234. "setup": [
  235. "$IP link set dev $DUMMY up || true",
  236. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  237. "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
  238. "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 codel limit 1000",
  239. [
  240. "ping -I $DUMMY -c2 10.10.11.11",
  241. 1
  242. ],
  243. "$TC qdisc change dev $DUMMY handle 2: parent 1:1 codel limit 1"
  244. ],
  245. "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
  246. "expExitCode": "0",
  247. "verifyCmd": "$TC -s qdisc show dev $DUMMY",
  248. "matchPattern": "backlog 0b 0p",
  249. "matchCount": "1",
  250. "teardown": [
  251. "$TC qdisc del dev $DUMMY handle 1: root"
  252. ]
  253. },
  254. {
  255. "id": "514e",
  256. "name": "Test TBF with PIE Backlog Accounting in gso_skb case against underflow",
  257. "category": [
  258. "qdisc",
  259. "tbf",
  260. "pie"
  261. ],
  262. "plugins": {
  263. "requires": [
  264. "nsPlugin"
  265. ]
  266. },
  267. "setup": [
  268. "$IP link set dev $DUMMY up || true",
  269. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  270. "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
  271. "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 pie limit 1000",
  272. [
  273. "ping -I $DUMMY -c2 10.10.11.11",
  274. 1
  275. ],
  276. "$TC qdisc change dev $DUMMY handle 2: parent 1:1 pie limit 1"
  277. ],
  278. "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
  279. "expExitCode": "0",
  280. "verifyCmd": "$TC -s qdisc show dev $DUMMY",
  281. "matchPattern": "backlog 0b 0p",
  282. "matchCount": "1",
  283. "teardown": [
  284. "$TC qdisc del dev $DUMMY handle 1: root"
  285. ]
  286. },
  287. {
  288. "id": "6c97",
  289. "name": "Test TBF with FQ Backlog Accounting in gso_skb case against underflow",
  290. "category": [
  291. "qdisc",
  292. "tbf",
  293. "fq"
  294. ],
  295. "plugins": {
  296. "requires": [
  297. "nsPlugin"
  298. ]
  299. },
  300. "setup": [
  301. "$IP link set dev $DUMMY up || true",
  302. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  303. "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
  304. "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 fq limit 1000",
  305. [
  306. "ping -I $DUMMY -c2 10.10.11.11",
  307. 1
  308. ],
  309. "$TC qdisc change dev $DUMMY handle 2: parent 1:1 fq limit 1"
  310. ],
  311. "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
  312. "expExitCode": "0",
  313. "verifyCmd": "$TC -s qdisc show dev $DUMMY",
  314. "matchPattern": "backlog 0b 0p",
  315. "matchCount": "1",
  316. "teardown": [
  317. "$TC qdisc del dev $DUMMY handle 1: root"
  318. ]
  319. },
  320. {
  321. "id": "5d0b",
  322. "name": "Test TBF with FQ_CODEL Backlog Accounting in gso_skb case against underflow",
  323. "category": [
  324. "qdisc",
  325. "tbf",
  326. "fq_codel"
  327. ],
  328. "plugins": {
  329. "requires": [
  330. "nsPlugin"
  331. ]
  332. },
  333. "setup": [
  334. "$IP link set dev $DUMMY up || true",
  335. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  336. "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
  337. "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 fq_codel limit 1000",
  338. [
  339. "ping -I $DUMMY -c2 10.10.11.11",
  340. 1
  341. ],
  342. "$TC qdisc change dev $DUMMY handle 2: parent 1:1 fq_codel limit 1"
  343. ],
  344. "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
  345. "expExitCode": "0",
  346. "verifyCmd": "$TC -s qdisc show dev $DUMMY",
  347. "matchPattern": "backlog 0b 0p",
  348. "matchCount": "1",
  349. "teardown": [
  350. "$TC qdisc del dev $DUMMY handle 1: root"
  351. ]
  352. },
  353. {
  354. "id": "21c3",
  355. "name": "Test TBF with FQ_PIE Backlog Accounting in gso_skb case against underflow",
  356. "category": [
  357. "qdisc",
  358. "tbf",
  359. "fq_pie"
  360. ],
  361. "plugins": {
  362. "requires": [
  363. "nsPlugin"
  364. ]
  365. },
  366. "setup": [
  367. "$IP link set dev $DUMMY up || true",
  368. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  369. "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
  370. "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 fq_pie limit 1000",
  371. [
  372. "ping -I $DUMMY -c2 10.10.11.11",
  373. 1
  374. ],
  375. "$TC qdisc change dev $DUMMY handle 2: parent 1:1 fq_pie limit 1"
  376. ],
  377. "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
  378. "expExitCode": "0",
  379. "verifyCmd": "$TC -s qdisc show dev $DUMMY",
  380. "matchPattern": "backlog 0b 0p",
  381. "matchCount": "1",
  382. "teardown": [
  383. "$TC qdisc del dev $DUMMY handle 1: root"
  384. ]
  385. },
  386. {
  387. "id": "a4bb",
  388. "name": "Test FQ_CODEL with HTB parent - force packet drop with empty queue",
  389. "category": [
  390. "qdisc",
  391. "fq_codel",
  392. "htb"
  393. ],
  394. "plugins": {
  395. "requires": "nsPlugin"
  396. },
  397. "setup": [
  398. "$IP link set dev $DUMMY up || true",
  399. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  400. "$TC qdisc add dev $DUMMY handle 1: root htb default 10",
  401. "$TC class add dev $DUMMY parent 1: classid 1:10 htb rate 1kbit",
  402. "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
  403. "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
  404. "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
  405. "sleep 0.1"
  406. ],
  407. "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
  408. "expExitCode": "0",
  409. "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
  410. "matchPattern": "dropped [1-9][0-9]*",
  411. "matchCount": "1",
  412. "teardown": [
  413. "$TC qdisc del dev $DUMMY handle 1: root",
  414. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  415. ]
  416. },
  417. {
  418. "id": "a4be",
  419. "name": "Test FQ_CODEL with QFQ parent - force packet drop with empty queue",
  420. "category": [
  421. "qdisc",
  422. "fq_codel",
  423. "qfq"
  424. ],
  425. "plugins": {
  426. "requires": "nsPlugin"
  427. },
  428. "setup": [
  429. "$IP link set dev $DUMMY up || true",
  430. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  431. "$TC qdisc add dev $DUMMY handle 1: root qfq",
  432. "$TC class add dev $DUMMY parent 1: classid 1:10 qfq weight 1 maxpkt 1000",
  433. "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
  434. "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
  435. "ping -c 10 -s 1000 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
  436. "sleep 0.1"
  437. ],
  438. "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
  439. "expExitCode": "0",
  440. "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
  441. "matchPattern": "dropped [1-9][0-9]*",
  442. "matchCount": "1",
  443. "teardown": [
  444. "$TC qdisc del dev $DUMMY handle 1: root",
  445. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  446. ]
  447. },
  448. {
  449. "id": "a4bf",
  450. "name": "Test FQ_CODEL with HFSC parent - force packet drop with empty queue",
  451. "category": [
  452. "qdisc",
  453. "fq_codel",
  454. "hfsc"
  455. ],
  456. "plugins": {
  457. "requires": "nsPlugin"
  458. },
  459. "setup": [
  460. "$IP link set dev $DUMMY up || true",
  461. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  462. "$TC qdisc add dev $DUMMY handle 1: root hfsc default 10",
  463. "$TC class add dev $DUMMY parent 1: classid 1:10 hfsc sc rate 1kbit ul rate 1kbit",
  464. "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
  465. "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
  466. "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
  467. "sleep 0.1"
  468. ],
  469. "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
  470. "expExitCode": "0",
  471. "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
  472. "matchPattern": "dropped [1-9][0-9]*",
  473. "matchCount": "1",
  474. "teardown": [
  475. "$TC qdisc del dev $DUMMY handle 1: root",
  476. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  477. ]
  478. },
  479. {
  480. "id": "a4c0",
  481. "name": "Test FQ_CODEL with DRR parent - force packet drop with empty queue",
  482. "category": [
  483. "qdisc",
  484. "fq_codel",
  485. "drr"
  486. ],
  487. "plugins": {
  488. "requires": "nsPlugin"
  489. },
  490. "setup": [
  491. "$IP link set dev $DUMMY up || true",
  492. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  493. "$TC qdisc add dev $DUMMY handle 1: root drr",
  494. "$TC class add dev $DUMMY parent 1: classid 1:10 drr quantum 1500",
  495. "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
  496. "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
  497. "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
  498. "sleep 0.1"
  499. ],
  500. "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
  501. "expExitCode": "0",
  502. "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
  503. "matchPattern": "dropped [1-9][0-9]*",
  504. "matchCount": "1",
  505. "teardown": [
  506. "$TC qdisc del dev $DUMMY handle 1: root",
  507. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  508. ]
  509. },
  510. {
  511. "id": "a4c1",
  512. "name": "Test FQ_CODEL with ETS parent - force packet drop with empty queue",
  513. "category": [
  514. "qdisc",
  515. "fq_codel",
  516. "ets"
  517. ],
  518. "plugins": {
  519. "requires": "nsPlugin"
  520. },
  521. "setup": [
  522. "$IP link set dev $DUMMY up || true",
  523. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  524. "$TC qdisc add dev $DUMMY handle 1: root ets bands 2 strict 1",
  525. "$TC class change dev $DUMMY parent 1: classid 1:1 ets",
  526. "$TC qdisc add dev $DUMMY parent 1:1 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
  527. "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
  528. "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
  529. "sleep 0.1"
  530. ],
  531. "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
  532. "expExitCode": "0",
  533. "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
  534. "matchPattern": "dropped [1-9][0-9]*",
  535. "matchCount": "1",
  536. "teardown": [
  537. "$TC qdisc del dev $DUMMY handle 1: root",
  538. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  539. ]
  540. },
  541. {
  542. "id": "a4c3",
  543. "name": "Test HFSC with netem/blackhole - queue emptying during peek operation",
  544. "category": [
  545. "qdisc",
  546. "hfsc",
  547. "netem",
  548. "blackhole"
  549. ],
  550. "plugins": {
  551. "requires": "nsPlugin"
  552. },
  553. "setup": [
  554. "$IP link set dev $DUMMY up || true",
  555. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  556. "$TC qdisc add dev $DUMMY handle 1:0 root drr",
  557. "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
  558. "$TC class add dev $DUMMY parent 1:0 classid 1:2 drr",
  559. "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024",
  560. "$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 hfsc default 1",
  561. "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
  562. "$TC qdisc add dev $DUMMY parent 3:1 handle 4:0 netem delay 1ms",
  563. "$TC qdisc add dev $DUMMY parent 4:1 handle 5:0 blackhole",
  564. "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true",
  565. "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
  566. "$TC class del dev $DUMMY parent 3:0 classid 3:1",
  567. "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
  568. "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true"
  569. ],
  570. "cmdUnderTest": "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
  571. "expExitCode": "0",
  572. "verifyCmd": "$TC -s qdisc show dev $DUMMY",
  573. "matchPattern": "qdisc hfsc 3:.*parent 1:2.*default 1",
  574. "matchCount": "1",
  575. "teardown": [
  576. "$TC qdisc del dev $DUMMY handle 1:0 root",
  577. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  578. ]
  579. },
  580. {
  581. "id": "90ec",
  582. "name": "Test DRR's enqueue reentrant behaviour with netem",
  583. "category": [
  584. "qdisc",
  585. "drr"
  586. ],
  587. "plugins": {
  588. "requires": "nsPlugin"
  589. },
  590. "setup": [
  591. "$IP link set dev $DUMMY up || true",
  592. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  593. "$TC qdisc add dev $DUMMY handle 1:0 root drr",
  594. "$TC class replace dev $DUMMY parent 1:0 classid 1:1 drr",
  595. "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
  596. "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
  597. ],
  598. "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
  599. "expExitCode": "0",
  600. "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
  601. "matchJSON": [
  602. {
  603. "kind": "drr",
  604. "handle": "1:",
  605. "bytes": 196,
  606. "packets": 2
  607. }
  608. ],
  609. "matchCount": "1",
  610. "teardown": [
  611. "$TC qdisc del dev $DUMMY handle 1:0 root",
  612. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  613. ]
  614. },
  615. {
  616. "id": "1f1f",
  617. "name": "Test ETS's enqueue reentrant behaviour with netem",
  618. "category": [
  619. "qdisc",
  620. "ets"
  621. ],
  622. "plugins": {
  623. "requires": "nsPlugin"
  624. },
  625. "setup": [
  626. "$IP link set dev $DUMMY up || true",
  627. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  628. "$TC qdisc add dev $DUMMY handle 1:0 root ets bands 2",
  629. "$TC class replace dev $DUMMY parent 1:0 classid 1:1 ets quantum 1500",
  630. "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
  631. "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
  632. ],
  633. "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
  634. "expExitCode": "0",
  635. "verifyCmd": "$TC -j -s class show dev $DUMMY",
  636. "matchJSON": [
  637. {
  638. "class": "ets",
  639. "handle": "1:1",
  640. "stats": {
  641. "bytes": 196,
  642. "packets": 2
  643. }
  644. }
  645. ],
  646. "matchCount": "1",
  647. "teardown": [
  648. "$TC qdisc del dev $DUMMY handle 1:0 root",
  649. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  650. ]
  651. },
  652. {
  653. "id": "5e6d",
  654. "name": "Test QFQ's enqueue reentrant behaviour with netem",
  655. "category": [
  656. "qdisc",
  657. "qfq"
  658. ],
  659. "plugins": {
  660. "requires": "nsPlugin"
  661. },
  662. "setup": [
  663. "$IP link set dev $DUMMY up || true",
  664. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  665. "$TC qdisc add dev $DUMMY handle 1:0 root qfq",
  666. "$TC class replace dev $DUMMY parent 1:0 classid 1:1 qfq weight 100 maxpkt 1500",
  667. "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
  668. "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
  669. ],
  670. "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
  671. "expExitCode": "0",
  672. "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
  673. "matchJSON": [
  674. {
  675. "kind": "qfq",
  676. "handle": "1:",
  677. "bytes": 196,
  678. "packets": 2
  679. }
  680. ],
  681. "matchCount": "1",
  682. "teardown": [
  683. "$TC qdisc del dev $DUMMY handle 1:0 root",
  684. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  685. ]
  686. },
  687. {
  688. "id": "bf1d",
  689. "name": "Test HFSC's enqueue reentrant behaviour with netem",
  690. "category": [
  691. "qdisc",
  692. "hfsc"
  693. ],
  694. "plugins": {
  695. "requires": "nsPlugin"
  696. },
  697. "setup": [
  698. "$IP link set dev $DUMMY up || true",
  699. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  700. "$TC qdisc add dev $DUMMY handle 1:0 root hfsc",
  701. "$TC class add dev $DUMMY parent 1:0 classid 1:1 hfsc ls m2 10Mbit",
  702. "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
  703. "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1",
  704. "$TC class add dev $DUMMY parent 1:0 classid 1:2 hfsc ls m2 10Mbit",
  705. "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2",
  706. "ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true",
  707. "$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1",
  708. "$TC class del dev $DUMMY classid 1:1"
  709. ],
  710. "cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true",
  711. "expExitCode": "0",
  712. "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
  713. "matchJSON": [
  714. {
  715. "kind": "hfsc",
  716. "handle": "1:",
  717. "bytes": 294,
  718. "packets": 3
  719. }
  720. ],
  721. "matchCount": "1",
  722. "teardown": [
  723. "$TC qdisc del dev $DUMMY handle 1:0 root",
  724. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  725. ]
  726. },
  727. {
  728. "id": "7c3b",
  729. "name": "Test nested DRR's enqueue reentrant behaviour with netem",
  730. "category": [
  731. "qdisc",
  732. "drr"
  733. ],
  734. "plugins": {
  735. "requires": "nsPlugin"
  736. },
  737. "setup": [
  738. "$IP link set dev $DUMMY up || true",
  739. "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
  740. "$TC qdisc add dev $DUMMY handle 1:0 root drr",
  741. "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
  742. "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
  743. "$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr",
  744. "$TC class add dev $DUMMY classid 2:1 parent 2:0 drr",
  745. "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1",
  746. "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%"
  747. ],
  748. "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
  749. "expExitCode": "0",
  750. "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
  751. "matchJSON": [
  752. {
  753. "kind": "drr",
  754. "handle": "1:",
  755. "bytes": 196,
  756. "packets": 2
  757. }
  758. ],
  759. "matchCount": "1",
  760. "teardown": [
  761. "$TC qdisc del dev $DUMMY handle 1:0 root",
  762. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  763. ]
  764. },
  765. {
  766. "id": "62c4",
  767. "name": "Test HTB with FQ_CODEL - basic functionality",
  768. "category": [
  769. "qdisc",
  770. "htb",
  771. "fq_codel"
  772. ],
  773. "plugins": {
  774. "requires": [
  775. "nsPlugin",
  776. "scapyPlugin"
  777. ]
  778. },
  779. "setup": [
  780. "$TC qdisc add dev $DEV1 root handle 1: htb default 11",
  781. "$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 10kbit",
  782. "$TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 10kbit prio 0 quantum 1486",
  783. "$TC qdisc add dev $DEV1 parent 1:11 fq_codel quantum 300 noecn",
  784. "sleep 0.5"
  785. ],
  786. "scapy": {
  787. "iface": "$DEV0",
  788. "count": 5,
  789. "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/TCP(sport=12345, dport=80)"
  790. },
  791. "cmdUnderTest": "$TC -s qdisc show dev $DEV1",
  792. "expExitCode": "0",
  793. "verifyCmd": "$TC -s qdisc show dev $DEV1 | grep -A 5 'qdisc fq_codel'",
  794. "matchPattern": "Sent [0-9]+ bytes [0-9]+ pkt",
  795. "matchCount": "1",
  796. "teardown": [
  797. "$TC qdisc del dev $DEV1 handle 1: root"
  798. ]
  799. },
  800. {
  801. "id": "831d",
  802. "name": "Test HFSC qlen accounting with DRR/NETEM/BLACKHOLE chain",
  803. "category": ["qdisc", "hfsc", "drr", "netem", "blackhole"],
  804. "plugins": { "requires": ["nsPlugin", "scapyPlugin"] },
  805. "setup": [
  806. "$IP link set dev $DEV1 up || true",
  807. "$TC qdisc add dev $DEV1 root handle 1: drr",
  808. "$TC filter add dev $DEV1 parent 1: basic classid 1:1",
  809. "$TC class add dev $DEV1 parent 1: classid 1:1 drr",
  810. "$TC qdisc add dev $DEV1 parent 1:1 handle 2: hfsc def 1",
  811. "$TC class add dev $DEV1 parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
  812. "$TC qdisc add dev $DEV1 parent 2:1 handle 3: netem",
  813. "$TC qdisc add dev $DEV1 parent 3:1 handle 4: blackhole"
  814. ],
  815. "scapy": {
  816. "iface": "$DEV0",
  817. "count": 5,
  818. "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()"
  819. },
  820. "cmdUnderTest": "$TC -s qdisc show dev $DEV1",
  821. "expExitCode": "0",
  822. "verifyCmd": "$TC -s qdisc show dev $DEV1",
  823. "matchPattern": "qdisc hfsc",
  824. "matchCount": "1",
  825. "teardown": ["$TC qdisc del dev $DEV1 root handle 1: drr"]
  826. },
  827. {
  828. "id": "309e",
  829. "name": "Test HFSC eltree double add with reentrant enqueue behaviour on netem",
  830. "category": [
  831. "qdisc",
  832. "hfsc"
  833. ],
  834. "plugins": {
  835. "requires": "nsPlugin"
  836. },
  837. "setup": [
  838. "$IP link set dev $DUMMY up || true",
  839. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  840. "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 1s",
  841. "$TC qdisc add dev $DUMMY parent 1:0 handle 2:0 hfsc",
  842. "ping -I $DUMMY -f -c10 -s48 -W0.001 10.10.11.1 || true",
  843. "$TC class add dev $DUMMY parent 2:0 classid 2:1 hfsc rt m2 20Kbit",
  844. "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%",
  845. "$TC class add dev $DUMMY parent 2:0 classid 2:2 hfsc rt m2 20Kbit",
  846. "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip dst 10.10.11.2/32 flowid 2:1",
  847. "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 2 u32 match ip dst 10.10.11.3/32 flowid 2:2",
  848. "ping -c 1 10.10.11.2 -I$DUMMY > /dev/null || true",
  849. "$TC filter del dev $DUMMY parent 2:0 protocol ip prio 1",
  850. "$TC class del dev $DUMMY classid 2:1",
  851. "ping -c 1 10.10.11.3 -I$DUMMY > /dev/null || true"
  852. ],
  853. "cmdUnderTest": "$TC class change dev $DUMMY parent 2:0 classid 2:2 hfsc sc m2 20Kbit",
  854. "expExitCode": "0",
  855. "verifyCmd": "$TC -j class ls dev $DUMMY classid 2:1",
  856. "matchJSON": [],
  857. "teardown": [
  858. "$TC qdisc del dev $DUMMY handle 1:0 root",
  859. "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
  860. ]
  861. },
  862. {
  863. "id": "d74b",
  864. "name": "Test use-after-free with DRR/NETEM/BLACKHOLE chain",
  865. "category": [
  866. "qdisc",
  867. "hfsc",
  868. "drr",
  869. "netem",
  870. "blackhole"
  871. ],
  872. "plugins": {
  873. "requires": [
  874. "nsPlugin",
  875. "scapyPlugin"
  876. ]
  877. },
  878. "setup": [
  879. "$IP link set dev $DUMMY up || true",
  880. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  881. "$TC qdisc add dev $DUMMY root handle 1: drr",
  882. "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
  883. "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
  884. "$TC qdisc add dev $DUMMY parent 1:1 handle 2: hfsc def 1",
  885. "$TC class add dev $DUMMY parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
  886. "$TC qdisc add dev $DUMMY parent 2:1 handle 3: netem",
  887. "$TC qdisc add dev $DUMMY parent 3:1 handle 4: blackhole",
  888. "ping -c1 -W0.01 -I $DUMMY 10.10.11.11 || true",
  889. "$TC class del dev $DUMMY classid 1:1"
  890. ],
  891. "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11",
  892. "expExitCode": "1",
  893. "verifyCmd": "$TC -j class ls dev $DUMMY classid 1:1",
  894. "matchJSON": [],
  895. "teardown": [
  896. "$TC qdisc del dev $DUMMY root handle 1: drr"
  897. ]
  898. },
  899. {
  900. "id": "be28",
  901. "name": "Try to add fq_codel qdisc as a child of an hhf qdisc",
  902. "category": [
  903. "qdisc",
  904. "fq_codel",
  905. "hhf"
  906. ],
  907. "plugins": {
  908. "requires": "nsPlugin"
  909. },
  910. "setup": [
  911. "$TC qdisc add dev $DUMMY root handle a: hhf"
  912. ],
  913. "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: fq_codel",
  914. "expExitCode": "2",
  915. "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
  916. "matchJSON": [],
  917. "teardown": [
  918. "$TC qdisc del dev $DUMMY root"
  919. ]
  920. },
  921. {
  922. "id": "fcb5",
  923. "name": "Try to add pie qdisc as a child of a drr qdisc",
  924. "category": [
  925. "qdisc",
  926. "pie",
  927. "drr"
  928. ],
  929. "plugins": {
  930. "requires": "nsPlugin"
  931. },
  932. "setup": [
  933. "$TC qdisc add dev $DUMMY root handle a: drr"
  934. ],
  935. "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: pie",
  936. "expExitCode": "2",
  937. "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
  938. "matchJSON": [],
  939. "teardown": [
  940. "$TC qdisc del dev $DUMMY root"
  941. ]
  942. },
  943. {
  944. "id": "7801",
  945. "name": "Try to add fq qdisc as a child of an inexistent hfsc class",
  946. "category": [
  947. "qdisc",
  948. "sfq",
  949. "hfsc"
  950. ],
  951. "plugins": {
  952. "requires": "nsPlugin"
  953. },
  954. "setup": [
  955. "$TC qdisc add dev $DUMMY root handle a: hfsc"
  956. ],
  957. "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a:fff2 sfq limit 4",
  958. "expExitCode": "2",
  959. "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
  960. "matchJSON": [],
  961. "teardown": [
  962. "$TC qdisc del dev $DUMMY root"
  963. ]
  964. },
  965. {
  966. "id": "4989",
  967. "name": "Try to add an fq child to an ingress qdisc",
  968. "category": [
  969. "qdisc",
  970. "ingress"
  971. ],
  972. "plugins": {
  973. "requires": "nsPlugin"
  974. },
  975. "setup": [
  976. "$TC qdisc add dev $DUMMY handle ffff:0 ingress"
  977. ],
  978. "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq",
  979. "expExitCode": "2",
  980. "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:",
  981. "matchJSON": [],
  982. "matchCount": "1",
  983. "teardown": [
  984. "$TC qdisc del dev $DUMMY ingress"
  985. ]
  986. },
  987. {
  988. "id": "c2b0",
  989. "name": "Try to add an fq child to a clsact qdisc",
  990. "category": [
  991. "qdisc",
  992. "ingress"
  993. ],
  994. "plugins": {
  995. "requires": "nsPlugin"
  996. },
  997. "setup": [
  998. "$TC qdisc add dev $DUMMY handle ffff:0 clsact"
  999. ],
  1000. "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq",
  1001. "expExitCode": "2",
  1002. "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:",
  1003. "matchJSON": [],
  1004. "matchCount": "1",
  1005. "teardown": [
  1006. "$TC qdisc del dev $DUMMY clsact"
  1007. ]
  1008. },
  1009. {
  1010. "id": "4366",
  1011. "name": "CAKE with QFQ Parent - CAKE enqueue with packets dropping",
  1012. "category": [
  1013. "qdisc",
  1014. "cake",
  1015. "netem"
  1016. ],
  1017. "plugins": {
  1018. "requires": "nsPlugin"
  1019. },
  1020. "setup":[
  1021. "$TC qdisc add dev $DUMMY handle 1: root qfq",
  1022. "$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 1024",
  1023. "$TC qdisc add dev $DUMMY parent 1:1 handle 2: cake memlimit 9",
  1024. "$TC filter add dev $DUMMY protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1",
  1025. "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
  1026. "$TC qdisc replace dev $DUMMY parent 1:1 handle 3: netem delay 0ms"
  1027. ],
  1028. "cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
  1029. "expExitCode": "0",
  1030. "verifyCmd": "$TC -s qdisc show dev $DUMMY",
  1031. "matchPattern": "qdisc qfq 1:",
  1032. "matchCount": "1",
  1033. "teardown": [
  1034. "$TC qdisc del dev $DUMMY handle 1: root"
  1035. ]
  1036. },
  1037. {
  1038. "id": "6e4f",
  1039. "name": "Try to delete ets drr class' qdisc while still keeping it in the active list",
  1040. "category": [
  1041. "qdisc",
  1042. "ets",
  1043. "tbf"
  1044. ],
  1045. "plugins": {
  1046. "requires": [
  1047. "nsPlugin",
  1048. "scapyPlugin"
  1049. ]
  1050. },
  1051. "setup": [
  1052. "$IP link set dev $DUMMY up || true",
  1053. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  1054. "$TC qdisc add dev $DUMMY root handle 1: ets bands 2 strict 1",
  1055. "$TC qdisc add dev $DUMMY parent 1:2 handle 20: tbf rate 8bit burst 100b latency 1s",
  1056. "$TC filter add dev $DUMMY parent 1: basic classid 1:2",
  1057. "ping -c2 -W0.01 -s 56 -I $DUMMY 10.10.11.11 || true",
  1058. "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 2",
  1059. "$TC qdisc change dev $DUMMY root handle 1: ets bands 1 strict 1"
  1060. ],
  1061. "cmdUnderTest": "ping -c1 -W0.01 -s 56 -I $DUMMY 10.10.11.11",
  1062. "expExitCode": "1",
  1063. "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY root",
  1064. "matchJSON": [
  1065. {
  1066. "kind": "ets",
  1067. "handle": "1:",
  1068. "bytes": 196,
  1069. "packets": 2
  1070. }
  1071. ],
  1072. "teardown": [
  1073. "$TC qdisc del dev $DUMMY root handle 1:"
  1074. ]
  1075. },
  1076. {
  1077. "id": "0b8f",
  1078. "name": "Try to add ets class to the active list twice",
  1079. "category": [
  1080. "qdisc",
  1081. "ets",
  1082. "tbf"
  1083. ],
  1084. "plugins": {
  1085. "requires": [
  1086. "nsPlugin",
  1087. "scapyPlugin"
  1088. ]
  1089. },
  1090. "setup": [
  1091. "$IP link set dev $DUMMY up || true",
  1092. "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
  1093. "$TC qdisc add dev $DUMMY root handle 1: ets bands 2 strict 1",
  1094. "$TC qdisc add dev $DUMMY parent 1:2 handle 20: tbf rate 8bit burst 100b latency 1s",
  1095. "$TC filter add dev $DUMMY parent 1: basic classid 1:2",
  1096. "ping -c2 -W0.01 -s 56 -I $DUMMY 10.10.11.11 || true",
  1097. "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 2",
  1098. "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 1"
  1099. ],
  1100. "cmdUnderTest": "ping -c1 -W0.01 -s 56 -I $DUMMY 10.10.11.11",
  1101. "expExitCode": "1",
  1102. "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY root",
  1103. "matchJSON": [
  1104. {
  1105. "kind": "ets",
  1106. "handle": "1:",
  1107. "bytes": 98,
  1108. "packets": 1
  1109. }
  1110. ],
  1111. "teardown": [
  1112. "$TC qdisc del dev $DUMMY root handle 1:"
  1113. ]
  1114. },
  1115. {
  1116. "id": "a3d7",
  1117. "name": "HFSC with large m1 - no divide-by-zero on class reactivation",
  1118. "category": [
  1119. "qdisc",
  1120. "hfsc"
  1121. ],
  1122. "plugins": {
  1123. "requires": "nsPlugin"
  1124. },
  1125. "setup": [
  1126. "$TC qdisc replace dev $DUMMY root handle 1: hfsc default 1",
  1127. "$TC class replace dev $DUMMY parent 1: classid 1:1 hfsc rt m1 32gbit d 1ms m2 0bit ls m1 32gbit d 1ms m2 0bit",
  1128. "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
  1129. "sleep 1"
  1130. ],
  1131. "cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
  1132. "expExitCode": "0",
  1133. "verifyCmd": "$TC qdisc show dev $DUMMY",
  1134. "matchPattern": "qdisc hfsc 1: root",
  1135. "matchCount": "1",
  1136. "teardown": [
  1137. "$TC qdisc del dev $DUMMY handle 1: root"
  1138. ]
  1139. }
  1140. ]