|
@@ -0,0 +1,66 @@
|
|
|
+'''
|
|
|
+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(
|
|
|
+ '-B', '--buildebpf', action='store_true',
|
|
|
+ help='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
|