Exemplo n.º 1
0
def _report_network_qos(caps):
    """Augment netinfo information with QoS data for the engine"""
    qdiscs = defaultdict(list)
    for qdisc in tc._qdiscs(dev=None):  # None -> all dev qdiscs
        qdiscs[qdisc['dev']].append(qdisc)
    for net, attrs in caps['networks'].iteritems():
        iface = attrs['iface']
        if iface in caps['bridges']:
            host_ports = [port for port in attrs['ports'] if
                          not port.startswith('vnet')]
            if not host_ports:  # Port-less bridge
                continue
            iface, = host_ports
        if iface in caps['vlans']:
            vlan_id = caps['vlans'][iface]['vlanid']
            iface = caps['vlans'][iface]['iface']
            iface_qdiscs = qdiscs.get(iface)
            if iface_qdiscs is None:
                continue
            class_id = (qos._root_qdisc(iface_qdiscs)['handle'] + '%x' %
                        vlan_id)
        else:
            iface_qdiscs = qdiscs.get(iface)
            if iface_qdiscs is None:
                continue
            class_id = (qos._root_qdisc(iface_qdiscs)['handle'] +
                        qos._DEFAULT_CLASSID)

        # Now that iface is either a bond or a nic, let's get the QoS info
        classes = [cls for cls in tc.classes(iface, classid=class_id) if
                   cls['kind'] == 'hfsc']
        if classes:
            cls, = classes
            attrs['hostQos'] = {'out': cls['hfsc']}
Exemplo n.º 2
0
 def test_get_root_qdisc(self):
     root = {
         'kind': 'hfsc',
         'root': True,
         'handle': '1:',
         'refcnt': 2,
         'hfsc': {
             'default': 0x5000
         }
     }
     inp = (root, {
         'kind': 'sfq',
         'handle': '10:',
         'parent': '1:10',
         'sfq': {
             'limit': 127,
             'quantum': 1514
         }
     }, {
         'kind': 'sfq',
         'handle': '20:',
         'parent': '1:20',
         'sfq': {
             'limit': 127,
             'quantum': 1514
         }
     })
     self.assertEqual(qos._root_qdisc(inp), root)
Exemplo n.º 3
0
 def test_get_root_qdisc(self):
     root = {'kind': 'hfsc', 'root': True, 'handle': '1:', 'refcnt': 2,
             'hfsc': {'default': 0x5000}}
     inp = (root,
            {'kind': 'sfq', 'handle': '10:', 'parent': '1:10',
             'sfq': {'limit': 127, 'quantum': 1514}},
            {'kind': 'sfq', 'handle': '20:', 'parent': '1:20',
             'sfq': {'limit': 127, 'quantum': 1514}})
     self.assertEqual(qos._root_qdisc(inp), root)
Exemplo n.º 4
0
def _report_network_qos(caps):
    """Augment netinfo information with QoS data for the engine"""
    qdiscs = defaultdict(list)
    for qdisc in tc._qdiscs(dev=None):  # None -> all dev qdiscs
        qdiscs[qdisc['dev']].append(qdisc)
    for net, attrs in caps['networks'].iteritems():
        iface = attrs['iface']
        if iface in caps['bridges']:
            host_ports = [
                port for port in attrs['ports'] if not port.startswith('vnet')
            ]
            if not host_ports:  # Port-less bridge
                continue
            iface, = host_ports
        if iface in caps['vlans']:
            vlan_id = caps['vlans'][iface]['vlanid']
            iface = caps['vlans'][iface]['iface']
            iface_qdiscs = qdiscs.get(iface)
            if iface_qdiscs is None:
                continue
            class_id = (qos._root_qdisc(iface_qdiscs)['handle'] +
                        '%x' % vlan_id)
        else:
            iface_qdiscs = qdiscs.get(iface)
            if iface_qdiscs is None:
                continue
            class_id = (qos._root_qdisc(iface_qdiscs)['handle'] +
                        qos._DEFAULT_CLASSID)

        # Now that iface is either a bond or a nic, let's get the QoS info
        classes = [
            cls for cls in tc.classes(iface, classid=class_id)
            if cls['kind'] == 'hfsc'
        ]
        if classes:
            cls, = classes
            attrs['hostQos'] = {'out': cls['hfsc']}