cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

buildebpfPlugin.py (1748B)


      1'''
      2build ebpf program
      3'''
      4
      5import os
      6import signal
      7from string import Template
      8import subprocess
      9import time
     10from TdcPlugin import TdcPlugin
     11from tdc_config import *
     12
     13class 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            '--nobuildebpf', action='store_false', default=True,
     38            dest='buildebpf',
     39            help='Don\'t build eBPF programs')
     40
     41        return self.argparser
     42
     43    def _ebpf_makeall(self):
     44        if self.args.buildebpf:
     45            self._make('all')
     46
     47    def _ebpf_makeclean(self):
     48        if self.args.buildebpf:
     49            self._make('clean')
     50
     51    def _make(self, target):
     52        command = 'make -C {} {}'.format(self.args.NAMES['EBPFDIR'], target)
     53        proc = subprocess.Popen(command,
     54            shell=True,
     55            stdout=subprocess.PIPE,
     56            stderr=subprocess.PIPE,
     57            env=os.environ.copy())
     58        (rawout, serr) = proc.communicate()
     59
     60        if proc.returncode != 0 and len(serr) > 0:
     61            foutput = serr.decode("utf-8")
     62        else:
     63            foutput = rawout.decode("utf-8")
     64
     65        proc.stdout.close()
     66        proc.stderr.close()
     67        return proc, foutput