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