7145fcfffe
when the following command is done on a fresh clone of the kernel tree, [root@f31 tc-testing]# ./tdc.py -c bpf test cases that need to build the eBPF sample program fail systematically, because 'buildebpfPlugin' is unable to install the kernel headers (i.e, the 'khdr' target fails). Pass the correct environment to 'make', in place of ENVIR, to allow running these tests. Fixes: 4c2d39bd40c1 ("tc-testing: use a plugin to build eBPF program") Signed-off-by: Davide Caratti <dcaratti@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
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
|