forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.7 KiB
67 lines
1.7 KiB
''' |
|
build ebpf program |
|
''' |
|
|
|
import os |
|
import signal |
|
from string import Template |
|
import subprocess |
|
import time |
|
from TdcPlugin import TdcPlugin |
|
from 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
|
|
|