Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

'''
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(
            '--nobuildebpf', action='store_false', default=True,
            dest='buildebpf',
            help='Don\'t 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