diff options
Diffstat (limited to 'src/platform/tests/test-tc.c')
-rw-r--r-- | src/platform/tests/test-tc.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/platform/tests/test-tc.c b/src/platform/tests/test-tc.c index 0fa4d8d96b..0c90fcfab6 100644 --- a/src/platform/tests/test-tc.c +++ b/src/platform/tests/test-tc.c @@ -152,6 +152,55 @@ test_qdisc_sfq (void) g_assert_cmpint (qdisc->sfq.flows, ==, 256); } +static void +test_qdisc_tbf (void) +{ + int ifindex; + gs_unref_ptrarray GPtrArray *known = NULL; + gs_unref_ptrarray GPtrArray *plat = NULL; + NMPObject *obj; + NMPlatformQdisc *qdisc; + + ifindex = nm_platform_link_get_ifindex (NM_PLATFORM_GET, DEVICE_NAME); + g_assert_cmpint (ifindex, >, 0); + + nmtstp_run_command ("tc qdisc del dev %s root", DEVICE_NAME); + + nmtstp_wait_for_signal (NM_PLATFORM_GET, 0); + + known = g_ptr_array_new_with_free_func ((GDestroyNotify) nmp_object_unref); + obj = qdisc_new (ifindex, "tbf", TC_H_ROOT); + obj->qdisc.handle = TC_H_MAKE (0x8143 << 16, 0); + obj->qdisc.tbf.rate = 1000000; + obj->qdisc.tbf.burst = 2000; + obj->qdisc.tbf.limit = 3000; + g_ptr_array_add (known, obj); + + obj = qdisc_new (ifindex, "sfq", TC_H_MAKE (0x8143 << 16, 0)); + obj->qdisc.handle = TC_H_MAKE (0x8005 << 16, 0); + g_ptr_array_add (known, obj); + + g_assert (nm_platform_qdisc_sync (NM_PLATFORM_GET, ifindex, known)); + plat = qdiscs_lookup (ifindex); + g_assert (plat); + g_assert_cmpint (plat->len, ==, 2); + + obj = plat->pdata[0]; + qdisc = NMP_OBJECT_CAST_QDISC (obj); + g_assert_cmpstr (qdisc->kind, ==, "tbf"); + g_assert_cmpint (qdisc->handle, ==, TC_H_MAKE (0x8143 << 16, 0)); + g_assert_cmpint (qdisc->parent, ==, TC_H_ROOT); + g_assert_cmpint (qdisc->tbf.rate, ==, 1000000); + g_assert_cmpint (qdisc->tbf.burst, ==, 2000); + g_assert_cmpint (qdisc->tbf.limit, ==, 3000); + + obj = plat->pdata[1]; + qdisc = NMP_OBJECT_CAST_QDISC (obj); + g_assert_cmpstr (qdisc->kind, ==, "sfq"); + g_assert_cmpint (qdisc->parent, ==, TC_H_MAKE (0x8143 << 16, 0)); + g_assert_cmpint (qdisc->handle, ==, TC_H_MAKE (0x8005 << 16, 0)); +} + /*****************************************************************************/ NMTstpSetupFunc const _nmtstp_setup_platform_func = SETUP; @@ -169,5 +218,6 @@ _nmtstp_setup_tests (void) nmtstp_env1_add_test_func ("/link/qdisc/1", test_qdisc1, TRUE); nmtstp_env1_add_test_func ("/link/qdisc/fq_codel", test_qdisc_fq_codel, TRUE); nmtstp_env1_add_test_func ("/link/qdisc/sfq", test_qdisc_sfq, TRUE); + nmtstp_env1_add_test_func ("/link/qdisc/tbf", test_qdisc_tbf, TRUE); } } |