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