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.

68 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=ENVIR)
(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