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']}
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)
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)
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']}