Ejemplo n.º 1
0
 def test_iperf_upper_limit(self):
     # Upper limit is not an accurate measure. This is because it converges
     # over time and depends on current machine hardware (CPU).
     # Hence, it is hard to make hard assertions on it. The test should run
     # at least 60 seconds (the longer the better) and the user should
     # inspect the computed average rate and optionally the additional
     # traffic data that was collected in client.out in order to be
     # convinced QOS is working properly.
     limit_kbps = 1000  # 1 Mbps (in kbps)
     server_ip = '192.0.2.1'
     client_ip = '192.0.2.10'
     qos_out = {'ul': {'m2': limit_kbps}, 'ls': {'m2': limit_kbps}}
     # using a network namespace is essential since otherwise the kernel
     # short-circuits the traffic and bypasses the veth devices and the
     # classfull qdisc.
     with network_namespace(
         'server_ns'
     ) as ns, bridge_device() as bridge, veth_pair() as (
         server_peer,
         server_dev,
     ), veth_pair() as (
         client_dev,
         client_peer,
     ):
         linkSet(server_peer, ['up'])
         linkSet(client_peer, ['up'])
         # iperf server and its veth peer lie in a separate network
         # namespace
         link_set_netns(server_dev, ns)
         bridge.addIf(server_peer)
         bridge.addIf(client_peer)
         linkSet(client_dev, ['up'])
         netns_exec(ns, ['ip', 'link', 'set', 'dev', server_dev, 'up'])
         addrAdd(client_dev, client_ip, 24)
         netns_exec(
             ns,
             [
                 'ip',
                 '-4',
                 'addr',
                 'add',
                 'dev',
                 server_dev,
                 '%s/24' % server_ip,
             ],
         )
         qos.configure_outbound(qos_out, client_peer, None)
         with running(IperfServer(server_ip, network_ns=ns)):
             client = IperfClient(server_ip, client_ip, test_time=60)
             client.start()
             max_rate = max(
                 [
                     float(interval['streams'][0]['bits_per_second'])
                     // (2 ** 10)
                     for interval in client.out['intervals']
                 ]
             )
             self.assertTrue(0 < max_rate < limit_kbps * 1.5)
Ejemplo n.º 2
0
 def start(self):
     cmd = [_IPERF3_BINARY.cmd, '--server', '--bind', self._bind_to]
     if self._net_ns is not None:
         p = netns_exec(self._net_ns, cmd)
     else:
         p = execCmd(cmd, sync=False)
     self._pid = p.pid
Ejemplo n.º 3
0
 def start(self):
     cmd = [_IPERF3_BINARY.cmd, '--server', '--bind', self._bind_to]
     if self._net_ns is not None:
         p = netns_exec(self._net_ns, cmd)
     else:
         p = execCmd(cmd, sync=False)
     self._pid = p.pid
Ejemplo n.º 4
0
 def test_iperf_upper_limit(self):
     # Upper limit is not an accurate measure. This is because it converges
     # over time and depends on current machine hardware (CPU).
     # Hence, it is hard to make hard assertions on it. The test should run
     # at least 60 seconds (the longer the better) and the user should
     # inspect the computed average rate and optionally the additional
     # traffic data that was collected in client.out in order to be
     # convinced QOS is working properly.
     limit_kbps = 1000  # 1 Mbps (in kbps)
     server_ip = '192.0.2.1'
     client_ip = '192.0.2.10'
     qos_out = {'ul': {'m2': limit_kbps}, 'ls': {'m2': limit_kbps}}
     # using a network namespace is essential since otherwise the kernel
     # short-circuits the traffic and bypasses the veth devices and the
     # classfull qdisc.
     with network_namespace('server_ns') as ns, bridge_device() as bridge, \
             veth_pair() as (server_peer, server_dev), \
             veth_pair() as (client_dev, client_peer):
         linkSet(server_peer, ['up'])
         linkSet(client_peer, ['up'])
         # iperf server and its veth peer lie in a separate network
         # namespace
         link_set_netns(server_dev, ns)
         bridge.addIf(server_peer)
         bridge.addIf(client_peer)
         linkSet(client_dev, ['up'])
         netns_exec(ns, ['ip', 'link', 'set', 'dev', server_dev, 'up'])
         addrAdd(client_dev, client_ip, 24)
         netns_exec(ns, ['ip', '-4', 'addr', 'add', 'dev', server_dev,
                         '%s/24' % server_ip])
         qos.configure_outbound(qos_out, client_peer, None)
         with running(IperfServer(server_ip, network_ns=ns)):
             client = IperfClient(server_ip, client_ip, test_time=60)
             client.start()
             max_rate = max([float(
                 interval['streams'][0]['bits_per_second']) / (2**10)
                 for interval in client.out['intervals']])
             self.assertTrue(0 < max_rate < limit_kbps * 1.5)
Ejemplo n.º 5
0
 def start(self):
     cmd = [_IPERF3_BINARY.cmd, '--server', '--bind', self._bind_to]
     self._popen = netns_exec(self._net_ns, cmd)
Ejemplo n.º 6
0
 def start(self):
     cmd = [_IPERF3_BINARY.cmd, '--server', '--bind', self._bind_to]
     self._popen = netns_exec(self._net_ns, cmd)