68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
|
'''
|
||
|
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
|