Enable the PG, wait till it is done, then clean up
(cls, trace=True, traceFilter=False)
| 165 | |
| 166 | @classmethod |
| 167 | def pg_start(cls, trace=True, traceFilter=False): |
| 168 | """Enable the PG, wait till it is done, then clean up""" |
| 169 | for intf, worker in cls._old_pcaps: |
| 170 | intf.remove_old_pcap_file(intf.get_in_path(worker)) |
| 171 | cls._old_pcaps = [] |
| 172 | if trace: |
| 173 | cls.vapi.cli("clear trace") |
| 174 | cls.vapi.cli("trace add pg-input 1000" + (" filter" if traceFilter else "")) |
| 175 | cls.vapi.cli("packet-generator enable") |
| 176 | # PG, when starts, runs to completion - |
| 177 | # so let's avoid a race condition, |
| 178 | # and wait a little till it's done. |
| 179 | # Then clean it up - and then be gone. |
| 180 | deadline = time.time() + 300 |
| 181 | while True: |
| 182 | try: |
| 183 | if cls.vapi.cli("show packet-generator").find("Yes") == -1: |
| 184 | break |
| 185 | except vpp_papi.VPPIOError: |
| 186 | cls.logger.debug("VPP API timeout during pg_start, retrying") |
| 187 | cls.sleep(0.01) # yield |
| 188 | if time.time() > deadline: |
| 189 | cls.logger.error("Timeout waiting for pg to stop") |
| 190 | break |
| 191 | for intf, worker in cls._pcaps: |
| 192 | cls.vapi.cli("packet-generator delete %s" % intf.get_cap_name(worker)) |
| 193 | cls._old_pcaps = cls._pcaps |
| 194 | cls._pcaps = [] |
| 195 | |
| 196 | @classmethod |
| 197 | def create_pg_interfaces_internal( |