summaryrefslogtreecommitdiff
path: root/src/platform/tests/test-tc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/tests/test-tc.c')
-rw-r--r--src/platform/tests/test-tc.c50
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);
}
}