Exemplo n.º 1
0
def delete_tc_qdisc(device,
                    parent=None,
                    is_ingress=False,
                    raise_interface_not_found=True,
                    raise_qdisc_not_found=True,
                    namespace=None):
    """Delete a TC qdisc of a device

    :param device: (string) device name
    :param parent: (string) (optional) qdisc parent class ('root', '2:10')
    :param is_ingress: (bool) (optional) if qdisc type is 'ingress'
    :param raise_interface_not_found: (bool) (optional) raise exception if the
                                      interface doesn't exist
    :param raise_qdisc_not_found: (bool) (optional) raise exception if the
                                  qdisc doesn't exist
    :param namespace: (string) (optional) namespace name
    """
    qdisc_type = 'ingress' if is_ingress else None
    if parent:
        parent = rtnl.TC_H_ROOT if parent == 'root' else parent
    priv_tc_lib.delete_tc_qdisc(
        device,
        parent=parent,
        kind=qdisc_type,
        raise_interface_not_found=raise_interface_not_found,
        raise_qdisc_not_found=raise_qdisc_not_found,
        namespace=namespace)
Exemplo n.º 2
0
    def test_add_tc_qdisc_tbf(self):
        burst = 192000
        rate = 320000
        latency = 50000
        priv_tc_lib.add_tc_qdisc(self.device,
                                 parent=rtnl.TC_H_ROOT,
                                 kind='tbf',
                                 burst=burst,
                                 rate=rate,
                                 latency=latency,
                                 namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(1, len(qdiscs))
        self.assertEqual(rtnl.TC_H_ROOT, qdiscs[0]['parent'])
        self.assertEqual('tbf', tc_lib._get_attr(qdiscs[0], 'TCA_KIND'))
        tca_options = tc_lib._get_attr(qdiscs[0], 'TCA_OPTIONS')
        tca_tbf_parms = tc_lib._get_attr(tca_options, 'TCA_TBF_PARMS')
        self.assertEqual(rate, tca_tbf_parms['rate'])
        self.assertEqual(
            burst,
            tc_lib._calc_burst(tca_tbf_parms['rate'], tca_tbf_parms['buffer']))
        self.assertEqual(
            latency,
            tc_lib._calc_latency_ms(tca_tbf_parms['limit'], burst,
                                    tca_tbf_parms['rate']) * 1000)

        priv_tc_lib.delete_tc_qdisc(self.device,
                                    parent=rtnl.TC_H_ROOT,
                                    namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(0, len(qdiscs))
Exemplo n.º 3
0
    def test_add_tc_qdisc_tbf(self):
        burst = 192000
        rate = 320000
        latency = 50000
        priv_tc_lib.add_tc_qdisc(
            self.device, parent=rtnl.TC_H_ROOT, kind='tbf', burst=burst,
            rate=rate, latency=latency, namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(1, len(qdiscs))
        self.assertEqual(rtnl.TC_H_ROOT, qdiscs[0]['parent'])
        self.assertEqual('tbf', tc_lib._get_attr(qdiscs[0], 'TCA_KIND'))
        tca_options = tc_lib._get_attr(qdiscs[0], 'TCA_OPTIONS')
        tca_tbf_parms = tc_lib._get_attr(tca_options, 'TCA_TBF_PARMS')
        self.assertEqual(rate, tca_tbf_parms['rate'])
        self.assertEqual(burst, tc_lib._calc_burst(tca_tbf_parms['rate'],
                                                   tca_tbf_parms['buffer']))
        self.assertEqual(latency, tc_lib._calc_latency_ms(
            tca_tbf_parms['limit'], burst, tca_tbf_parms['rate']) * 1000)

        priv_tc_lib.delete_tc_qdisc(self.device, parent=rtnl.TC_H_ROOT,
                                    namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(0, len(qdiscs))
Exemplo n.º 4
0
    def test_add_tc_qdisc_ingress(self):
        priv_tc_lib.add_tc_qdisc(self.device, kind='ingress',
                                 namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(1, len(qdiscs))
        self.assertEqual('ingress', tc_lib._get_attr(qdiscs[0], 'TCA_KIND'))
        self.assertEqual(rtnl.TC_H_INGRESS, qdiscs[0]['parent'])
        self.assertEqual(0xffff0000, qdiscs[0]['handle'])

        priv_tc_lib.delete_tc_qdisc(self.device, kind='ingress',
                                    namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(0, len(qdiscs))
Exemplo n.º 5
0
    def test_add_tc_qdisc_ingress(self):
        priv_tc_lib.add_tc_qdisc(self.device, kind='ingress',
                                 namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(1, len(qdiscs))
        self.assertEqual('ingress', tc_lib._get_attr(qdiscs[0], 'TCA_KIND'))
        self.assertEqual(rtnl.TC_H_INGRESS, qdiscs[0]['parent'])
        self.assertEqual(0xffff0000, qdiscs[0]['handle'])

        priv_tc_lib.delete_tc_qdisc(self.device, kind='ingress',
                                    namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(0, len(qdiscs))
Exemplo n.º 6
0
 def test_delete_tc_qdisc_no_qdisc_no_exception(self):
     self.assertEqual(
         2,
         priv_tc_lib.delete_tc_qdisc(self.device,
                                     rtnl.TC_H_ROOT,
                                     namespace=self.namespace,
                                     raise_qdisc_not_found=False))
Exemplo n.º 7
0
    def test_add_tc_qdisc_htb_no_handle(self):
        priv_tc_lib.add_tc_qdisc(
            self.device, parent=rtnl.TC_H_ROOT, kind='htb',
            namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(1, len(qdiscs))
        self.assertEqual(rtnl.TC_H_ROOT, qdiscs[0]['parent'])
        self.assertEqual(0, qdiscs[0]['handle'] & 0xFFFF)
        self.assertEqual('htb', tc_lib._get_attr(qdiscs[0], 'TCA_KIND'))

        priv_tc_lib.delete_tc_qdisc(self.device, parent=rtnl.TC_H_ROOT,
                                    namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(0, len(qdiscs))
Exemplo n.º 8
0
    def test_add_tc_qdisc_htb_no_handle(self):
        priv_tc_lib.add_tc_qdisc(
            self.device, parent=rtnl.TC_H_ROOT, kind='htb',
            namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(1, len(qdiscs))
        self.assertEqual(rtnl.TC_H_ROOT, qdiscs[0]['parent'])
        self.assertEqual(0, qdiscs[0]['handle'] & 0xFFFF)
        self.assertEqual('htb', tc_lib._get_attr(qdiscs[0], 'TCA_KIND'))

        priv_tc_lib.delete_tc_qdisc(self.device, parent=rtnl.TC_H_ROOT,
                                    namespace=self.namespace)
        qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                            namespace=self.namespace)
        self.assertEqual(0, len(qdiscs))
Exemplo n.º 9
0
 def test_delete_tc_qdisc_ingress_twice(self):
     priv_tc_lib.add_tc_qdisc(self.device, kind='ingress',
                              namespace=self.namespace)
     qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                         namespace=self.namespace)
     self.assertEqual(1, len(qdiscs))
     self.assertEqual('ingress', tc_lib._get_attr(qdiscs[0], 'TCA_KIND'))
     self.assertIsNone(
         priv_tc_lib.delete_tc_qdisc(self.device, kind='ingress',
                                     namespace=self.namespace))
     qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                         namespace=self.namespace)
     self.assertEqual(0, len(qdiscs))
     self.assertEqual(
         errno.EINVAL,
         priv_tc_lib.delete_tc_qdisc(self.device, kind='ingress',
                                     namespace=self.namespace,
                                     raise_qdisc_not_found=False))
Exemplo n.º 10
0
 def test_delete_tc_qdisc_ingress_twice(self):
     priv_tc_lib.add_tc_qdisc(self.device, kind='ingress',
                              namespace=self.namespace)
     qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                         namespace=self.namespace)
     self.assertEqual(1, len(qdiscs))
     self.assertEqual('ingress', tc_lib._get_attr(qdiscs[0], 'TCA_KIND'))
     self.assertIsNone(
         priv_tc_lib.delete_tc_qdisc(self.device, kind='ingress',
                                     namespace=self.namespace))
     qdiscs = priv_tc_lib.list_tc_qdiscs(self.device,
                                         namespace=self.namespace)
     self.assertEqual(0, len(qdiscs))
     self.assertEqual(
         errno.EINVAL,
         priv_tc_lib.delete_tc_qdisc(self.device, kind='ingress',
                                     namespace=self.namespace,
                                     raise_qdisc_not_found=False))
Exemplo n.º 11
0
def delete_tc_qdisc(device, parent=None, is_ingress=False,
                    raise_interface_not_found=True, raise_qdisc_not_found=True,
                    namespace=None):
    """Delete a TC qdisc of a device

    :param device: (string) device name
    :param parent: (string) (optional) qdisc parent class ('root', '2:10')
    :param is_ingress: (bool) (optional) if qdisc type is 'ingress'
    :param raise_interface_not_found: (bool) (optional) raise exception if the
                                      interface doesn't exist
    :param raise_qdisc_not_found: (bool) (optional) raise exception if the
                                  qdisc doesn't exist
    :param namespace: (string) (optional) namespace name
    """
    qdisc_type = 'ingress' if is_ingress else None
    if parent:
        parent = rtnl.TC_H_ROOT if parent == 'root' else parent
    priv_tc_lib.delete_tc_qdisc(
        device, parent=parent, kind=qdisc_type,
        raise_interface_not_found=raise_interface_not_found,
        raise_qdisc_not_found=raise_qdisc_not_found, namespace=namespace)
Exemplo n.º 12
0
 def test_delete_tc_qdisc_no_device_no_exception(self):
     self.assertIsNone(
         priv_tc_lib.delete_tc_qdisc('other_device',
                                     rtnl.TC_H_ROOT,
                                     namespace=self.namespace,
                                     raise_interface_not_found=False))
Exemplo n.º 13
0
 def test_delete_tc_qdisc_no_qdisc_no_exception(self):
     self.assertEqual(2, priv_tc_lib.delete_tc_qdisc(
         self.device, rtnl.TC_H_ROOT, namespace=self.namespace,
         raise_qdisc_not_found=False))
Exemplo n.º 14
0
 def test_delete_tc_qdisc_no_device_no_exception(self):
     self.assertIsNone(priv_tc_lib.delete_tc_qdisc(
         'other_device', rtnl.TC_H_ROOT, namespace=self.namespace,
         raise_interface_not_found=False))