aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tools/testing/selftests/tc-testing/plugin-lib/scapyPlugin.py
blob: 229ee185b27e198dd1a1ec7a4408751e54428d60 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env python3

import os
import signal
from string import Template
import subprocess
import time
from TdcPlugin import TdcPlugin

from tdc_config import *

try:
    from scapy.all import *
except ImportError:
    print("Unable to import the scapy python module.")
    print("\nIf not already installed, you may do so with:")
    print("\t\tpip3 install scapy==2.4.2")
    exit(1)

class SubPlugin(TdcPlugin):
    def __init__(self):
        self.sub_class = 'scapy/SubPlugin'
        super().__init__()

    def post_execute(self):
        if 'scapy' not in self.args.caseinfo:
            if self.args.verbose:
                print('{}.post_execute: no scapy info in test case'.format(self.sub_class))
            return

        # Check for required fields
        scapyinfo = self.args.caseinfo['scapy']
        scapy_keys = ['iface', 'count', 'packet']
        missing_keys = []
        keyfail = False
        for k in scapy_keys:
            if k not in scapyinfo:
                keyfail = True
                missing_keys.add(k)
        if keyfail:
            print('{}: Scapy block present in the test, but is missing info:'
                .format(self.sub_class))
            print('{}'.format(missing_keys))

        pkt = eval(scapyinfo['packet'])
        if '$' in scapyinfo['iface']:
            tpl = Template(scapyinfo['iface'])
            scapyinfo['iface'] = tpl.safe_substitute(NAMES)
        for count in range(scapyinfo['count']):
            sendp(pkt, iface=scapyinfo['iface'])