0001
0002
0003
0004 lib_dir=$(dirname $0)/../../../net/forwarding
0005
0006 ALL_TESTS="fw_flash_test params_test regions_test reload_test \
0007 netns_reload_test resource_test dev_info_test \
0008 empty_reporter_test dummy_reporter_test rate_test"
0009 NUM_NETIFS=0
0010 source $lib_dir/lib.sh
0011
0012 BUS_ADDR=10
0013 PORT_COUNT=4
0014 VF_COUNT=4
0015 DEV_NAME=netdevsim$BUS_ADDR
0016 SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV_NAME/net/
0017 DEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV_NAME/
0018 DL_HANDLE=netdevsim/$DEV_NAME
0019
0020 fw_flash_test()
0021 {
0022 RET=0
0023
0024 devlink dev flash $DL_HANDLE file dummy
0025 check_err $? "Failed to flash with status updates on"
0026
0027 devlink dev flash $DL_HANDLE file dummy component fw.mgmt
0028 check_err $? "Failed to flash with component attribute"
0029
0030 devlink dev flash $DL_HANDLE file dummy overwrite settings
0031 check_fail $? "Flash with overwrite settings should be rejected"
0032
0033 echo "1"> $DEBUGFS_DIR/fw_update_overwrite_mask
0034 check_err $? "Failed to change allowed overwrite mask"
0035
0036 devlink dev flash $DL_HANDLE file dummy overwrite settings
0037 check_err $? "Failed to flash with settings overwrite enabled"
0038
0039 devlink dev flash $DL_HANDLE file dummy overwrite identifiers
0040 check_fail $? "Flash with overwrite settings should be identifiers"
0041
0042 echo "3"> $DEBUGFS_DIR/fw_update_overwrite_mask
0043 check_err $? "Failed to change allowed overwrite mask"
0044
0045 devlink dev flash $DL_HANDLE file dummy overwrite identifiers overwrite settings
0046 check_err $? "Failed to flash with settings and identifiers overwrite enabled"
0047
0048 echo "n"> $DEBUGFS_DIR/fw_update_status
0049 check_err $? "Failed to disable status updates"
0050
0051 devlink dev flash $DL_HANDLE file dummy
0052 check_err $? "Failed to flash with status updates off"
0053
0054 log_test "fw flash test"
0055 }
0056
0057 param_get()
0058 {
0059 local name=$1
0060
0061 cmd_jq "devlink dev param show $DL_HANDLE name $name -j" \
0062 '.[][][].values[] | select(.cmode == "driverinit").value'
0063 }
0064
0065 param_set()
0066 {
0067 local name=$1
0068 local value=$2
0069
0070 devlink dev param set $DL_HANDLE name $name cmode driverinit value $value
0071 }
0072
0073 check_value()
0074 {
0075 local name=$1
0076 local phase_name=$2
0077 local expected_param_value=$3
0078 local expected_debugfs_value=$4
0079 local value
0080
0081 value=$(param_get $name)
0082 check_err $? "Failed to get $name param value"
0083 [ "$value" == "$expected_param_value" ]
0084 check_err $? "Unexpected $phase_name $name param value"
0085 value=$(<$DEBUGFS_DIR/$name)
0086 check_err $? "Failed to get $name debugfs value"
0087 [ "$value" == "$expected_debugfs_value" ]
0088 check_err $? "Unexpected $phase_name $name debugfs value"
0089 }
0090
0091 params_test()
0092 {
0093 RET=0
0094
0095 local max_macs
0096 local test1
0097
0098 check_value max_macs initial 32 32
0099 check_value test1 initial true Y
0100
0101 param_set max_macs 16
0102 check_err $? "Failed to set max_macs param value"
0103 param_set test1 false
0104 check_err $? "Failed to set test1 param value"
0105
0106 check_value max_macs post-set 16 32
0107 check_value test1 post-set false Y
0108
0109 devlink dev reload $DL_HANDLE
0110
0111 check_value max_macs post-reload 16 16
0112 check_value test1 post-reload false N
0113
0114 log_test "params test"
0115 }
0116
0117 check_region_size()
0118 {
0119 local name=$1
0120 local size
0121
0122 size=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].size')
0123 check_err $? "Failed to get $name region size"
0124 [ $size -eq 32768 ]
0125 check_err $? "Invalid $name region size"
0126 }
0127
0128 check_region_snapshot_count()
0129 {
0130 local name=$1
0131 local phase_name=$2
0132 local expected_count=$3
0133 local count
0134
0135 count=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].snapshot | length')
0136 [ $count -eq $expected_count ]
0137 check_err $? "Unexpected $phase_name snapshot count"
0138 }
0139
0140 regions_test()
0141 {
0142 RET=0
0143
0144 local count
0145
0146 check_region_size dummy
0147 check_region_snapshot_count dummy initial 0
0148
0149 echo ""> $DEBUGFS_DIR/take_snapshot
0150 check_err $? "Failed to take first dummy region snapshot"
0151 check_region_snapshot_count dummy post-first-snapshot 1
0152
0153 echo ""> $DEBUGFS_DIR/take_snapshot
0154 check_err $? "Failed to take second dummy region snapshot"
0155 check_region_snapshot_count dummy post-second-snapshot 2
0156
0157 echo ""> $DEBUGFS_DIR/take_snapshot
0158 check_err $? "Failed to take third dummy region snapshot"
0159 check_region_snapshot_count dummy post-third-snapshot 3
0160
0161 devlink region del $DL_HANDLE/dummy snapshot 1
0162 check_err $? "Failed to delete first dummy region snapshot"
0163
0164 check_region_snapshot_count dummy post-first-delete 2
0165
0166 devlink region new $DL_HANDLE/dummy snapshot 25
0167 check_err $? "Failed to create a new snapshot with id 25"
0168
0169 check_region_snapshot_count dummy post-first-request 3
0170
0171 devlink region dump $DL_HANDLE/dummy snapshot 25 >> /dev/null
0172 check_err $? "Failed to dump snapshot with id 25"
0173
0174 devlink region read $DL_HANDLE/dummy snapshot 25 addr 0 len 1 >> /dev/null
0175 check_err $? "Failed to read snapshot with id 25 (1 byte)"
0176
0177 devlink region read $DL_HANDLE/dummy snapshot 25 addr 128 len 128 >> /dev/null
0178 check_err $? "Failed to read snapshot with id 25 (128 bytes)"
0179
0180 devlink region read $DL_HANDLE/dummy snapshot 25 addr 128 len $((1<<32)) >> /dev/null
0181 check_err $? "Failed to read snapshot with id 25 (oversized)"
0182
0183 devlink region read $DL_HANDLE/dummy snapshot 25 addr $((1<<32)) len 128 >> /dev/null 2>&1
0184 check_fail $? "Bad read of snapshot with id 25 did not fail"
0185
0186 devlink region del $DL_HANDLE/dummy snapshot 25
0187 check_err $? "Failed to delete snapshot with id 25"
0188
0189 check_region_snapshot_count dummy post-second-delete 2
0190
0191 sid=$(devlink -j region new $DL_HANDLE/dummy | jq '.[][][][]')
0192 check_err $? "Failed to create a new snapshot with id allocated by the kernel"
0193
0194 check_region_snapshot_count dummy post-first-request 3
0195
0196 devlink region dump $DL_HANDLE/dummy snapshot $sid >> /dev/null
0197 check_err $? "Failed to dump a snapshot with id allocated by the kernel"
0198
0199 devlink region del $DL_HANDLE/dummy snapshot $sid
0200 check_err $? "Failed to delete snapshot with id allocated by the kernel"
0201
0202 check_region_snapshot_count dummy post-first-request 2
0203
0204 log_test "regions test"
0205 }
0206
0207 reload_test()
0208 {
0209 RET=0
0210
0211 devlink dev reload $DL_HANDLE
0212 check_err $? "Failed to reload"
0213
0214 echo "y"> $DEBUGFS_DIR/fail_reload
0215 check_err $? "Failed to setup devlink reload to fail"
0216
0217 devlink dev reload $DL_HANDLE
0218 check_fail $? "Unexpected success of devlink reload"
0219
0220 echo "n"> $DEBUGFS_DIR/fail_reload
0221 check_err $? "Failed to setup devlink reload not to fail"
0222
0223 devlink dev reload $DL_HANDLE
0224 check_err $? "Failed to reload after set not to fail"
0225
0226 echo "y"> $DEBUGFS_DIR/dont_allow_reload
0227 check_err $? "Failed to forbid devlink reload"
0228
0229 devlink dev reload $DL_HANDLE
0230 check_fail $? "Unexpected success of devlink reload"
0231
0232 echo "n"> $DEBUGFS_DIR/dont_allow_reload
0233 check_err $? "Failed to re-enable devlink reload"
0234
0235 devlink dev reload $DL_HANDLE
0236 check_err $? "Failed to reload after re-enable"
0237
0238 log_test "reload test"
0239 }
0240
0241 netns_reload_test()
0242 {
0243 RET=0
0244
0245 ip netns add testns1
0246 check_err $? "Failed add netns \"testns1\""
0247 ip netns add testns2
0248 check_err $? "Failed add netns \"testns2\""
0249
0250 devlink dev reload $DL_HANDLE netns testns1
0251 check_err $? "Failed to reload into netns \"testns1\""
0252
0253 devlink -N testns1 dev reload $DL_HANDLE netns testns2
0254 check_err $? "Failed to reload from netns \"testns1\" into netns \"testns2\""
0255
0256 ip netns del testns2
0257 ip netns del testns1
0258
0259 log_test "netns reload test"
0260 }
0261
0262 DUMMYDEV="dummytest"
0263
0264 res_val_get()
0265 {
0266 local netns=$1
0267 local parentname=$2
0268 local name=$3
0269 local type=$4
0270
0271 cmd_jq "devlink -N $netns resource show $DL_HANDLE -j" \
0272 ".[][][] | select(.name == \"$parentname\").resources[] \
0273 | select(.name == \"$name\").$type"
0274 }
0275
0276 resource_test()
0277 {
0278 RET=0
0279
0280 ip netns add testns1
0281 check_err $? "Failed add netns \"testns1\""
0282 ip netns add testns2
0283 check_err $? "Failed add netns \"testns2\""
0284
0285 devlink dev reload $DL_HANDLE netns testns1
0286 check_err $? "Failed to reload into netns \"testns1\""
0287
0288
0289
0290 ip -n testns1 link add name $DUMMYDEV type dummy
0291 check_err $? "Failed create dummy device"
0292 ip -n testns1 link set $DUMMYDEV up
0293 check_err $? "Failed bring up dummy device"
0294 ip -n testns1 a a 192.0.1.1/24 dev $DUMMYDEV
0295 check_err $? "Failed add an IP address to dummy device"
0296
0297 local occ=$(res_val_get testns1 IPv4 fib occ)
0298 local limit=$((occ+1))
0299
0300
0301
0302 devlink -N testns1 resource set $DL_HANDLE path IPv4/fib size $limit
0303 check_err $? "Failed to set IPv4/fib resource size"
0304 local size_new=$(res_val_get testns1 IPv4 fib size_new)
0305 [ "$size_new" -eq "$limit" ]
0306 check_err $? "Unexpected \"size_new\" value (got $size_new, expected $limit)"
0307
0308 devlink -N testns1 dev reload $DL_HANDLE
0309 check_err $? "Failed to reload"
0310 local size=$(res_val_get testns1 IPv4 fib size)
0311 [ "$size" -eq "$limit" ]
0312 check_err $? "Unexpected \"size\" value (got $size, expected $limit)"
0313
0314
0315
0316
0317 ip -n testns1 r a 192.0.2.0/24 via 192.0.1.2
0318 check_err $? "Failed to add route"
0319
0320 ip -n testns1 r a 192.0.3.0/24 via 192.0.1.2
0321 check_fail $? "Unexpected successful route add over limit"
0322
0323
0324
0325
0326
0327
0328 ip -n testns2 link add name $DUMMYDEV type dummy
0329 check_err $? "Failed create dummy device"
0330 ip -n testns2 link set $DUMMYDEV up
0331 check_err $? "Failed bring up dummy device"
0332 ip -n testns2 a a 192.0.1.1/24 dev $DUMMYDEV
0333 check_err $? "Failed add an IP address to dummy device"
0334 ip -n testns2 r a 192.0.2.0/24 via 192.0.1.2
0335 check_err $? "Failed to add route"
0336 ip -n testns2 r a 192.0.3.0/24 via 192.0.1.2
0337 check_err $? "Failed to add route"
0338
0339 devlink -N testns1 dev reload $DL_HANDLE netns testns2
0340 check_fail $? "Unexpected successful reload from netns \"testns1\" into netns \"testns2\""
0341
0342 devlink -N testns2 resource set $DL_HANDLE path IPv4/fib size ' -1'
0343 check_err $? "Failed to reset IPv4/fib resource size"
0344
0345 devlink -N testns2 dev reload $DL_HANDLE netns 1
0346 check_err $? "Failed to reload devlink back"
0347
0348 ip netns del testns2
0349 ip netns del testns1
0350
0351 log_test "resource test"
0352 }
0353
0354 info_get()
0355 {
0356 local name=$1
0357
0358 cmd_jq "devlink dev info $DL_HANDLE -j" ".[][][\"$name\"]" "-e"
0359 }
0360
0361 dev_info_test()
0362 {
0363 RET=0
0364
0365 driver=$(info_get "driver")
0366 check_err $? "Failed to get driver name"
0367 [ "$driver" == "netdevsim" ]
0368 check_err $? "Unexpected driver name $driver"
0369
0370 log_test "dev_info test"
0371 }
0372
0373 empty_reporter_test()
0374 {
0375 RET=0
0376
0377 devlink health show $DL_HANDLE reporter empty >/dev/null
0378 check_err $? "Failed show empty reporter"
0379
0380 devlink health dump show $DL_HANDLE reporter empty >/dev/null
0381 check_err $? "Failed show dump of empty reporter"
0382
0383 devlink health diagnose $DL_HANDLE reporter empty >/dev/null
0384 check_err $? "Failed diagnose empty reporter"
0385
0386 devlink health recover $DL_HANDLE reporter empty
0387 check_err $? "Failed recover empty reporter"
0388
0389 log_test "empty reporter test"
0390 }
0391
0392 check_reporter_info()
0393 {
0394 local name=$1
0395 local expected_state=$2
0396 local expected_error=$3
0397 local expected_recover=$4
0398 local expected_grace_period=$5
0399 local expected_auto_recover=$6
0400
0401 local show=$(devlink health show $DL_HANDLE reporter $name -j | jq -e -r ".[][][]")
0402 check_err $? "Failed show $name reporter"
0403
0404 local state=$(echo $show | jq -r ".state")
0405 [ "$state" == "$expected_state" ]
0406 check_err $? "Unexpected \"state\" value (got $state, expected $expected_state)"
0407
0408 local error=$(echo $show | jq -r ".error")
0409 [ "$error" == "$expected_error" ]
0410 check_err $? "Unexpected \"error\" value (got $error, expected $expected_error)"
0411
0412 local recover=`echo $show | jq -r ".recover"`
0413 [ "$recover" == "$expected_recover" ]
0414 check_err $? "Unexpected \"recover\" value (got $recover, expected $expected_recover)"
0415
0416 local grace_period=$(echo $show | jq -r ".grace_period")
0417 check_err $? "Failed get $name reporter grace_period"
0418 [ "$grace_period" == "$expected_grace_period" ]
0419 check_err $? "Unexpected \"grace_period\" value (got $grace_period, expected $expected_grace_period)"
0420
0421 local auto_recover=$(echo $show | jq -r ".auto_recover")
0422 [ "$auto_recover" == "$expected_auto_recover" ]
0423 check_err $? "Unexpected \"auto_recover\" value (got $auto_recover, expected $expected_auto_recover)"
0424 }
0425
0426 dummy_reporter_test()
0427 {
0428 RET=0
0429
0430 check_reporter_info dummy healthy 0 0 0 true
0431
0432 devlink health set $DL_HANDLE reporter dummy auto_recover false
0433 check_err $? "Failed to dummy reporter auto_recover option"
0434
0435 check_reporter_info dummy healthy 0 0 0 false
0436
0437 local BREAK_MSG="foo bar"
0438 echo "$BREAK_MSG"> $DEBUGFS_DIR/health/break_health
0439 check_err $? "Failed to break dummy reporter"
0440
0441 check_reporter_info dummy error 1 0 0 false
0442
0443 local dump=$(devlink health dump show $DL_HANDLE reporter dummy -j)
0444 check_err $? "Failed show dump of dummy reporter"
0445
0446 local dump_break_msg=$(echo $dump | jq -r ".break_message")
0447 [ "$dump_break_msg" == "$BREAK_MSG" ]
0448 check_err $? "Unexpected dump break message value (got $dump_break_msg, expected $BREAK_MSG)"
0449
0450 devlink health dump clear $DL_HANDLE reporter dummy
0451 check_err $? "Failed clear dump of dummy reporter"
0452
0453 devlink health recover $DL_HANDLE reporter dummy
0454 check_err $? "Failed recover dummy reporter"
0455
0456 check_reporter_info dummy healthy 1 1 0 false
0457
0458 devlink health set $DL_HANDLE reporter dummy auto_recover true
0459 check_err $? "Failed to dummy reporter auto_recover option"
0460
0461 check_reporter_info dummy healthy 1 1 0 true
0462
0463 echo "$BREAK_MSG"> $DEBUGFS_DIR/health/break_health
0464 check_err $? "Failed to break dummy reporter"
0465
0466 check_reporter_info dummy healthy 2 2 0 true
0467
0468 local diagnose=$(devlink health diagnose $DL_HANDLE reporter dummy -j -p)
0469 check_err $? "Failed show diagnose of dummy reporter"
0470
0471 local rcvrd_break_msg=$(echo $diagnose | jq -r ".recovered_break_message")
0472 [ "$rcvrd_break_msg" == "$BREAK_MSG" ]
0473 check_err $? "Unexpected recovered break message value (got $rcvrd_break_msg, expected $BREAK_MSG)"
0474
0475 devlink health set $DL_HANDLE reporter dummy grace_period 10
0476 check_err $? "Failed to dummy reporter grace_period option"
0477
0478 check_reporter_info dummy healthy 2 2 10 true
0479
0480 echo "Y"> $DEBUGFS_DIR/health/fail_recover
0481 check_err $? "Failed set dummy reporter recovery to fail"
0482
0483 echo "$BREAK_MSG"> $DEBUGFS_DIR/health/break_health
0484 check_fail $? "Unexpected success of dummy reporter break"
0485
0486 check_reporter_info dummy error 3 2 10 true
0487
0488 devlink health recover $DL_HANDLE reporter dummy
0489 check_fail $? "Unexpected success of dummy reporter recover"
0490
0491 echo "N"> $DEBUGFS_DIR/health/fail_recover
0492 check_err $? "Failed set dummy reporter recovery to be successful"
0493
0494 devlink health recover $DL_HANDLE reporter dummy
0495 check_err $? "Failed recover dummy reporter"
0496
0497 check_reporter_info dummy healthy 3 3 10 true
0498
0499 echo 8192> $DEBUGFS_DIR/health/binary_len
0500 check_fail $? "Failed set dummy reporter binary len to 8192"
0501
0502 local dump=$(devlink health dump show $DL_HANDLE reporter dummy -j)
0503 check_err $? "Failed show dump of dummy reporter"
0504
0505 devlink health dump clear $DL_HANDLE reporter dummy
0506 check_err $? "Failed clear dump of dummy reporter"
0507
0508 log_test "dummy reporter test"
0509 }
0510
0511 rate_leafs_get()
0512 {
0513 local handle=$1
0514
0515 cmd_jq "devlink port function rate show -j" \
0516 '.[] | to_entries | .[] | select(.value.type == "leaf") | .key | select(contains("'$handle'"))'
0517 }
0518
0519 rate_nodes_get()
0520 {
0521 local handle=$1
0522
0523 cmd_jq "devlink port function rate show -j" \
0524 '.[] | to_entries | .[] | select(.value.type == "node") | .key | select(contains("'$handle'"))'
0525 }
0526
0527 rate_attr_set()
0528 {
0529 local handle=$1
0530 local name=$2
0531 local value=$3
0532 local units=$4
0533
0534 devlink port function rate set $handle $name $value$units
0535 }
0536
0537 rate_attr_get()
0538 {
0539 local handle=$1
0540 local name=$2
0541
0542 cmd_jq "devlink port function rate show $handle -j" '.[][].'$name
0543 }
0544
0545 rate_attr_tx_rate_check()
0546 {
0547 local handle=$1
0548 local name=$2
0549 local rate=$3
0550 local debug_file=$4
0551
0552 rate_attr_set $handle $name $rate mbit
0553 check_err $? "Failed to set $name value"
0554
0555 local debug_value=$(cat $debug_file)
0556 check_err $? "Failed to read $name value from debugfs"
0557 [ "$debug_value" == "$rate" ]
0558 check_err $? "Unexpected $name debug value $debug_value != $rate"
0559
0560 local api_value=$(( $(rate_attr_get $handle $name) * 8 / 1000000 ))
0561 check_err $? "Failed to get $name attr value"
0562 [ "$api_value" == "$rate" ]
0563 check_err $? "Unexpected $name attr value $api_value != $rate"
0564 }
0565
0566 rate_attr_parent_check()
0567 {
0568 local handle=$1
0569 local parent=$2
0570 local debug_file=$3
0571
0572 rate_attr_set $handle parent $parent
0573 check_err $? "Failed to set parent"
0574
0575 debug_value=$(cat $debug_file)
0576 check_err $? "Failed to get parent debugfs value"
0577 [ "$debug_value" == "$parent" ]
0578 check_err $? "Unexpected parent debug value $debug_value != $parent"
0579
0580 api_value=$(rate_attr_get $r_obj parent)
0581 check_err $? "Failed to get parent attr value"
0582 [ "$api_value" == "$parent" ]
0583 check_err $? "Unexpected parent attr value $api_value != $parent"
0584 }
0585
0586 rate_node_add()
0587 {
0588 local handle=$1
0589
0590 devlink port function rate add $handle
0591 }
0592
0593 rate_node_del()
0594 {
0595 local handle=$1
0596
0597 devlink port function rate del $handle
0598 }
0599
0600 rate_test()
0601 {
0602 RET=0
0603
0604 echo $VF_COUNT > /sys/bus/netdevsim/devices/$DEV_NAME/sriov_numvfs
0605 devlink dev eswitch set $DL_HANDLE mode switchdev
0606 local leafs=`rate_leafs_get $DL_HANDLE`
0607 local num_leafs=`echo $leafs | wc -w`
0608 [ "$num_leafs" == "$VF_COUNT" ]
0609 check_err $? "Expected $VF_COUNT rate leafs but got $num_leafs"
0610
0611 rate=10
0612 for r_obj in $leafs
0613 do
0614 rate_attr_tx_rate_check $r_obj tx_share $rate \
0615 $DEBUGFS_DIR/ports/${r_obj
0616 rate=$(($rate+10))
0617 done
0618
0619 rate=100
0620 for r_obj in $leafs
0621 do
0622 rate_attr_tx_rate_check $r_obj tx_max $rate \
0623 $DEBUGFS_DIR/ports/${r_obj
0624 rate=$(($rate+100))
0625 done
0626
0627 local node1_name='group1'
0628 local node1="$DL_HANDLE/$node1_name"
0629 rate_node_add "$node1"
0630 check_err $? "Failed to add node $node1"
0631
0632 local num_nodes=`rate_nodes_get $DL_HANDLE | wc -w`
0633 [ $num_nodes == 1 ]
0634 check_err $? "Expected 1 rate node in output but got $num_nodes"
0635
0636 local node_tx_share=10
0637 rate_attr_tx_rate_check $node1 tx_share $node_tx_share \
0638 $DEBUGFS_DIR/rate_nodes/${node1
0639
0640 local node_tx_max=100
0641 rate_attr_tx_rate_check $node1 tx_max $node_tx_max \
0642 $DEBUGFS_DIR/rate_nodes/${node1
0643
0644 rate_node_del "$node1"
0645 check_err $? "Failed to delete node $node1"
0646 local num_nodes=`rate_nodes_get $DL_HANDLE | wc -w`
0647 [ $num_nodes == 0 ]
0648 check_err $? "Expected 0 rate node but got $num_nodes"
0649
0650 local node1_name='group1'
0651 local node1="$DL_HANDLE/$node1_name"
0652 rate_node_add "$node1"
0653 check_err $? "Failed to add node $node1"
0654
0655 rate_attr_parent_check $r_obj $node1_name \
0656 $DEBUGFS_DIR/ports/${r_obj
0657
0658 local node2_name='group2'
0659 local node2="$DL_HANDLE/$node2_name"
0660 rate_node_add "$node2"
0661 check_err $? "Failed to add node $node2"
0662
0663 rate_attr_parent_check $node2 $node1_name \
0664 $DEBUGFS_DIR/rate_nodes/$node2_name/rate_parent
0665 rate_node_del "$node2"
0666 check_err $? "Failed to delete node $node2"
0667 rate_attr_set "$r_obj" noparent
0668 check_err $? "Failed to unset $r_obj parent node"
0669 rate_node_del "$node1"
0670 check_err $? "Failed to delete node $node1"
0671
0672 log_test "rate test"
0673 }
0674
0675 setup_prepare()
0676 {
0677 modprobe netdevsim
0678 echo "$BUS_ADDR $PORT_COUNT" > /sys/bus/netdevsim/new_device
0679 while [ ! -d $SYSFS_NET_DIR ] ; do :; done
0680 }
0681
0682 cleanup()
0683 {
0684 pre_cleanup
0685 echo "$BUS_ADDR" > /sys/bus/netdevsim/del_device
0686 modprobe -r netdevsim
0687 }
0688
0689 trap cleanup EXIT
0690
0691 setup_prepare
0692
0693 tests_run
0694
0695 exit $EXIT_STATUS