5 # see license for license details
10 import vstf.common.decorator as deco
11 from vstf.common.utils import kill_by_name, my_popen
15 LOG = logging.getLogger(__name__)
20 self._send_processes = []
21 self._receive_processes = []
23 @deco.check("protocol", choices=['udp_bw'], defaults='udp_bw')
24 @deco.check("namespace", defaults=None)
27 @deco.check("size", defaults=64)
28 @deco.check("threads", defaults=1)
29 @deco.check("ratep", defaults=0)
30 def send_start(self, **kwargs):
31 cmd = self.format_send_start(**kwargs)
32 LOG.info("cmd:%s", cmd)
34 process = my_popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
35 self._send_processes.append(process)
41 error_str = "start netmap send success"
43 error_str = "start netmap send failed, %s" % (str(kwargs))
45 self._send_processes.remove(process)
49 def send_stop(self, **kwargs):
53 for process in self._send_processes:
56 error_str = "stop netmap send success"
57 results.append((ret, error_str))
58 self._send_processes = []
61 def format_send_start(self, **kwargs):
62 cmd = "pkt-gen -i %(src_iface)s -f tx -l %(pkt_size)s -p %(threads)s -D %(dst_mac)s -R %(ratep)s"
64 'src_iface': kwargs['src'][0]['iface'],
65 'dst_mac': kwargs['dst'][0]['mac'],
66 'pkt_size': kwargs['size'],
67 'threads': kwargs['threads'],
68 'ratep': kwargs['ratep']
74 def format_receive_start(self, **kwargs):
75 cmd = "pkt-gen -i %(iface)s -f rx"
77 'iface': kwargs['dst'][0]['iface']
82 @deco.check("protocol", choices=['udp_bw'], defaults='udp_bw')
83 @deco.check("namespace", defaults=None)
85 def receive_start(self, **kwargs):
87 cmd = self.format_receive_start(**kwargs)
88 LOG.info("cmd:%s", cmd)
90 process = my_popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
91 self._receive_processes.append(process)
97 error_str = "start netmap receive success"
99 error_str = "start netmap receive failed, %s" % (str(kwargs))
101 self._receive_processes.remove(process)
103 return ret, error_str
105 def receive_stop(self, **kwargs):
106 LOG.info("receive_stop")
108 for process in self._receive_processes:
111 self._receive_processes = []
112 error_str = "stop netmap receive success"
113 self._receive_processes = []
114 return ret, error_str
121 def force_clean(self):
122 LOG.info("%s %s start", self.__class__, self.force_clean.__name__)
123 kill_by_name('pkt-gen')
124 self._send_processes = []
125 self._receive_processes = []
132 "protocol": "udp_bw",
133 # "namespace": "receive",
138 ret = perf.receive_start(**receive)
139 LOG.info("*********receive_start***********")
142 # "namespace": "send",
143 "protocol": "udp_bw",
145 {"iface": "eth4", "mac": "90:e2:ba:20:1f:d8"}
148 {"mac": "90:e2:ba:20:1f:d9"}
154 print perf.send_start(**send)
155 print perf._send_processes
158 print perf.send_stop()
159 print perf.receive_stop()
162 if __name__ == "__main__":
163 from vstf.common.log import setup_logging
165 setup_logging(level=logging.DEBUG, log_file="/var/log/vstf/vstf-netmap.log", clevel=logging.INFO)