xref: /openbmc/linux/tools/testing/selftests/tc-testing/plugin-lib/buildebpfPlugin.py (revision 4c2d39bd40c1f34975bec070a8e43fa573a9c327)
1*4c2d39bdSDavide Caratti'''
2*4c2d39bdSDavide Carattibuild ebpf program
3*4c2d39bdSDavide Caratti'''
4*4c2d39bdSDavide Caratti
5*4c2d39bdSDavide Carattiimport os
6*4c2d39bdSDavide Carattiimport signal
7*4c2d39bdSDavide Carattifrom string import Template
8*4c2d39bdSDavide Carattiimport subprocess
9*4c2d39bdSDavide Carattiimport time
10*4c2d39bdSDavide Carattifrom TdcPlugin import TdcPlugin
11*4c2d39bdSDavide Carattifrom tdc_config import *
12*4c2d39bdSDavide Caratti
13*4c2d39bdSDavide Caratticlass SubPlugin(TdcPlugin):
14*4c2d39bdSDavide Caratti    def __init__(self):
15*4c2d39bdSDavide Caratti        self.sub_class = 'buildebpf/SubPlugin'
16*4c2d39bdSDavide Caratti        self.tap = ''
17*4c2d39bdSDavide Caratti        super().__init__()
18*4c2d39bdSDavide Caratti
19*4c2d39bdSDavide Caratti    def pre_suite(self, testcount, testidlist):
20*4c2d39bdSDavide Caratti        super().pre_suite(testcount, testidlist)
21*4c2d39bdSDavide Caratti
22*4c2d39bdSDavide Caratti        if self.args.buildebpf:
23*4c2d39bdSDavide Caratti            self._ebpf_makeall()
24*4c2d39bdSDavide Caratti
25*4c2d39bdSDavide Caratti    def post_suite(self, index):
26*4c2d39bdSDavide Caratti        super().post_suite(index)
27*4c2d39bdSDavide Caratti
28*4c2d39bdSDavide Caratti        self._ebpf_makeclean()
29*4c2d39bdSDavide Caratti
30*4c2d39bdSDavide Caratti    def add_args(self, parser):
31*4c2d39bdSDavide Caratti        super().add_args(parser)
32*4c2d39bdSDavide Caratti
33*4c2d39bdSDavide Caratti        self.argparser_group = self.argparser.add_argument_group(
34*4c2d39bdSDavide Caratti            'buildebpf',
35*4c2d39bdSDavide Caratti            'options for buildebpfPlugin')
36*4c2d39bdSDavide Caratti        self.argparser_group.add_argument(
37*4c2d39bdSDavide Caratti            '-B', '--buildebpf', action='store_true',
38*4c2d39bdSDavide Caratti            help='build eBPF programs')
39*4c2d39bdSDavide Caratti
40*4c2d39bdSDavide Caratti        return self.argparser
41*4c2d39bdSDavide Caratti
42*4c2d39bdSDavide Caratti    def _ebpf_makeall(self):
43*4c2d39bdSDavide Caratti        if self.args.buildebpf:
44*4c2d39bdSDavide Caratti            self._make('all')
45*4c2d39bdSDavide Caratti
46*4c2d39bdSDavide Caratti    def _ebpf_makeclean(self):
47*4c2d39bdSDavide Caratti        if self.args.buildebpf:
48*4c2d39bdSDavide Caratti            self._make('clean')
49*4c2d39bdSDavide Caratti
50*4c2d39bdSDavide Caratti    def _make(self, target):
51*4c2d39bdSDavide Caratti        command = 'make -C {} {}'.format(self.args.NAMES['EBPFDIR'], target)
52*4c2d39bdSDavide Caratti        proc = subprocess.Popen(command,
53*4c2d39bdSDavide Caratti            shell=True,
54*4c2d39bdSDavide Caratti            stdout=subprocess.PIPE,
55*4c2d39bdSDavide Caratti            stderr=subprocess.PIPE,
56*4c2d39bdSDavide Caratti            env=ENVIR)
57*4c2d39bdSDavide Caratti        (rawout, serr) = proc.communicate()
58*4c2d39bdSDavide Caratti
59*4c2d39bdSDavide Caratti        if proc.returncode != 0 and len(serr) > 0:
60*4c2d39bdSDavide Caratti            foutput = serr.decode("utf-8")
61*4c2d39bdSDavide Caratti        else:
62*4c2d39bdSDavide Caratti            foutput = rawout.decode("utf-8")
63*4c2d39bdSDavide Caratti
64*4c2d39bdSDavide Caratti        proc.stdout.close()
65*4c2d39bdSDavide Caratti        proc.stderr.close()
66*4c2d39bdSDavide Caratti        return proc, foutput
67