Пример #1
0
 def test_list_tc_policy_classes(self):
     htb_params = {'buffer': 12500000, 'ceil': 256000, 'rate': 192000}
     self.mock_list_tc_policy_classes.return_value = tuple([{
         'index':
         3,
         'handle':
         65537,
         'parent':
         4294967295,
         'attrs': (('TCA_KIND', 'htb'), ('TCA_OPTIONS', {
             'attrs':
             tuple([('TCA_HTB_PARMS', htb_params)])
         }))
     }])
     _class = tc_lib.list_tc_policy_class('device',
                                          namespace=self.namespace)[0]
     reference = {
         'device': 'device',
         'index': 3,
         'namespace': self.namespace,
         'parent': 'root',
         'classid': '1:1',
         'qdisc_type': 'htb',
         'min_kbps': 1500,
         'max_kbps': 2000,
         'burst_kb': 1200
     }
     self.assertEqual(reference, _class)
Пример #2
0
    def test_list_tc_policy_class_retrieve_statistics(self):
        statistics = {
            'bytes', 'packets', 'drop', 'overlimits', 'bps', 'pps', 'qlen',
            'backlog'
        }
        self._create_two_namespaces()
        tc_lib.add_tc_qdisc(self.device[0],
                            'htb',
                            parent='root',
                            handle='1:',
                            namespace=self.ns[0])
        tc_lib.add_tc_policy_class(self.device[0],
                                   '1:',
                                   '1:10',
                                   max_kbps=1000,
                                   burst_kb=900,
                                   min_kbps=500,
                                   namespace=self.ns[0])
        tc_lib.add_tc_filter_match_mac(self.device[0],
                                       '1:',
                                       '1:10',
                                       self.mac[1],
                                       namespace=self.ns[0])
        tc_classes = tc_lib.list_tc_policy_class(self.device[0],
                                                 namespace=self.ns[0])
        self.assertEqual(1, len(tc_classes))
        self.assertEqual(statistics, set(tc_classes[0]['stats']))

        bytes = tc_classes[0]['stats']['bytes']
        packets = tc_classes[0]['stats']['packets']
        net_helpers.assert_ping(self.ns[1],
                                str(netaddr.IPNetwork(self.ip[0]).ip),
                                count=1)
        tc_classes = tc_lib.list_tc_policy_class(self.device[0],
                                                 namespace=self.ns[0])
        self.assertGreater(tc_classes[0]['stats']['bytes'], bytes)
        self.assertGreater(tc_classes[0]['stats']['packets'], packets)
Пример #3
0
 def test_list_tc_policy_classes(self):
     htb_params = {'buffer': 12500000, 'ceil': 256000, 'rate': 192000}
     self.mock_list_tc_policy_classes.return_value = tuple([
         {'index': 3, 'handle': 65537, 'parent': 4294967295,
          'attrs': (
              ('TCA_KIND', 'htb'),
              ('TCA_OPTIONS', {
                  'attrs': tuple([('TCA_HTB_PARMS', htb_params)])}))
          }])
     _class = tc_lib.list_tc_policy_class('device',
                                          namespace=self.namespace)[0]
     reference = {'device': 'device',
                  'index': 3,
                  'namespace': self.namespace,
                  'parent': 'root',
                  'classid': '1:1',
                  'qdisc_type': 'htb',
                  'min_kbps': 1500,
                  'max_kbps': 2000,
                  'burst_kb': 1200}
     self.assertEqual(reference, _class)
Пример #4
0
    def test_add_tc_filter_vxlan(self):
        # The traffic control is applied on the veth pair device of the first
        # namespace (self.ns[0]). The traffic created from the VXLAN interface
        # when replying to the ping (sent from the other namespace), is
        # encapsulated in a VXLAN frame and goes through the veth pair
        # interface.
        self._create_two_namespaces_connected_using_vxlan()

        tc_lib.add_tc_qdisc(self.device[0],
                            'htb',
                            parent='root',
                            handle='1:',
                            namespace=self.ns[0])
        classes = tc_lib.list_tc_policy_class(self.device[0],
                                              namespace=self.ns[0])
        self.assertEqual(0, len(classes))

        class_ids = []
        for i in range(1, 10):
            class_id = '1:%s' % i
            class_ids.append(class_id)
            tc_lib.add_tc_policy_class(self.device[0],
                                       '1:',
                                       class_id,
                                       namespace=self.ns[0],
                                       min_kbps=1000,
                                       max_kbps=2000,
                                       burst_kb=1600)

        # Add a filter for a randomly chosen created class, in the first
        # namespace veth pair device, with the VXLAN MAC address. The traffic
        # from the VXLAN device must go through this chosen class.
        chosen_class_id = random.choice(class_ids)
        tc_lib.add_tc_filter_vxlan(self.device[0],
                                   '1:',
                                   chosen_class_id,
                                   self.mac_vxlan[0],
                                   self.vxlan_id,
                                   namespace=self.ns[0])

        tc_classes = tc_lib.list_tc_policy_class(self.device[0],
                                                 namespace=self.ns[0])
        for tc_class in (c for c in tc_classes
                         if c['classid'] == chosen_class_id):
            bytes = tc_class['stats']['bytes']
            packets = tc_class['stats']['packets']
            break
        else:
            self.fail('TC class %(class_id)s is not present in the device '
                      '%(device)s' % {
                          'class_id': chosen_class_id,
                          'device': self.device[0]
                      })

        net_helpers.assert_ping(self.ns[1],
                                str(netaddr.IPNetwork(self.ip_vxlan[0]).ip),
                                count=1)
        tc_classes = tc_lib.list_tc_policy_class(self.device[0],
                                                 namespace=self.ns[0])
        for tc_class in tc_classes:
            if tc_class['classid'] == chosen_class_id:
                self.assertGreater(tc_class['stats']['bytes'], bytes)
                self.assertGreater(tc_class['stats']['packets'], packets)
            else:
                self.assertEqual(0, tc_class['stats']['bytes'])
                self.assertEqual(0, tc_class['stats']['packets'])