67 lines · 1.7 KB · Python
RawDownload
'''build ebpf program''' import osimport signalfrom string import Templateimport subprocessimport timefrom TdcPlugin import TdcPluginfrom tdc_config import * class SubPlugin(TdcPlugin):    def __init__(self):        self.sub_class = 'buildebpf/SubPlugin'        self.tap = ''        super().__init__()     def pre_suite(self, testcount, testidlist):        super().pre_suite(testcount, testidlist)         if self.args.buildebpf:            self._ebpf_makeall()     def post_suite(self, index):        super().post_suite(index)         self._ebpf_makeclean()     def add_args(self, parser):        super().add_args(parser)         self.argparser_group = self.argparser.add_argument_group(            'buildebpf',            'options for buildebpfPlugin')        self.argparser_group.add_argument(            '--nobuildebpf', action='store_false', default=True,            dest='buildebpf',            help='Don\'t build eBPF programs')         return self.argparser     def _ebpf_makeall(self):        if self.args.buildebpf:            self._make('all')     def _ebpf_makeclean(self):        if self.args.buildebpf:            self._make('clean')     def _make(self, target):        command = 'make -C {} {}'.format(self.args.NAMES['EBPFDIR'], target)        proc = subprocess.Popen(command,            shell=True,            stdout=subprocess.PIPE,            stderr=subprocess.PIPE,            env=os.environ.copy())        (rawout, serr) = proc.communicate()         if proc.returncode != 0 and len(serr) > 0:            foutput = serr.decode("utf-8")        else:            foutput = rawout.decode("utf-8")         proc.stdout.close()        proc.stderr.close()        return proc, foutput