18c2ecf20Sopenharmony_ci''' 28c2ecf20Sopenharmony_cibuild ebpf program 38c2ecf20Sopenharmony_ci''' 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ciimport os 68c2ecf20Sopenharmony_ciimport signal 78c2ecf20Sopenharmony_cifrom string import Template 88c2ecf20Sopenharmony_ciimport subprocess 98c2ecf20Sopenharmony_ciimport time 108c2ecf20Sopenharmony_cifrom TdcPlugin import TdcPlugin 118c2ecf20Sopenharmony_cifrom tdc_config import * 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ciclass SubPlugin(TdcPlugin): 148c2ecf20Sopenharmony_ci def __init__(self): 158c2ecf20Sopenharmony_ci self.sub_class = 'buildebpf/SubPlugin' 168c2ecf20Sopenharmony_ci self.tap = '' 178c2ecf20Sopenharmony_ci super().__init__() 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci def pre_suite(self, testcount, testidlist): 208c2ecf20Sopenharmony_ci super().pre_suite(testcount, testidlist) 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci if self.args.buildebpf: 238c2ecf20Sopenharmony_ci self._ebpf_makeall() 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci def post_suite(self, index): 268c2ecf20Sopenharmony_ci super().post_suite(index) 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci self._ebpf_makeclean() 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci def add_args(self, parser): 318c2ecf20Sopenharmony_ci super().add_args(parser) 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci self.argparser_group = self.argparser.add_argument_group( 348c2ecf20Sopenharmony_ci 'buildebpf', 358c2ecf20Sopenharmony_ci 'options for buildebpfPlugin') 368c2ecf20Sopenharmony_ci self.argparser_group.add_argument( 378c2ecf20Sopenharmony_ci '--nobuildebpf', action='store_false', default=True, 388c2ecf20Sopenharmony_ci dest='buildebpf', 398c2ecf20Sopenharmony_ci help='Don\'t build eBPF programs') 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci return self.argparser 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci def _ebpf_makeall(self): 448c2ecf20Sopenharmony_ci if self.args.buildebpf: 458c2ecf20Sopenharmony_ci self._make('all') 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci def _ebpf_makeclean(self): 488c2ecf20Sopenharmony_ci if self.args.buildebpf: 498c2ecf20Sopenharmony_ci self._make('clean') 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci def _make(self, target): 528c2ecf20Sopenharmony_ci command = 'make -C {} {}'.format(self.args.NAMES['EBPFDIR'], target) 538c2ecf20Sopenharmony_ci proc = subprocess.Popen(command, 548c2ecf20Sopenharmony_ci shell=True, 558c2ecf20Sopenharmony_ci stdout=subprocess.PIPE, 568c2ecf20Sopenharmony_ci stderr=subprocess.PIPE, 578c2ecf20Sopenharmony_ci env=os.environ.copy()) 588c2ecf20Sopenharmony_ci (rawout, serr) = proc.communicate() 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ci if proc.returncode != 0 and len(serr) > 0: 618c2ecf20Sopenharmony_ci foutput = serr.decode("utf-8") 628c2ecf20Sopenharmony_ci else: 638c2ecf20Sopenharmony_ci foutput = rawout.decode("utf-8") 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci proc.stdout.close() 668c2ecf20Sopenharmony_ci proc.stderr.close() 678c2ecf20Sopenharmony_ci return proc, foutput 68