xref: /wlan-dirver/utils/sigma-dut/sniffer-control-filter-capture.py (revision cd4e3c3e0365aac6e078aab03f11d01d8f1020d5)
1*cd4e3c3eSJouni Malinen#!/usr/bin/python
2*cd4e3c3eSJouni Malinen#
3*cd4e3c3eSJouni Malinen# Sigma Control API DUT (sniffer_control_filter_capture)
4*cd4e3c3eSJouni Malinen# Copyright (c) 2014, Qualcomm Atheros, Inc.
5*cd4e3c3eSJouni Malinen# All Rights Reserved.
6*cd4e3c3eSJouni Malinen# Licensed under the Clear BSD license. See README for more details.
7*cd4e3c3eSJouni Malinen
8*cd4e3c3eSJouni Malinenimport sys
9*cd4e3c3eSJouni Malinenimport subprocess
10*cd4e3c3eSJouni Malinenimport tshark
11*cd4e3c3eSJouni Malinen
12*cd4e3c3eSJouni Malinenframename = None
13*cd4e3c3eSJouni Malinenhasfield = None
14*cd4e3c3eSJouni Malinendatalen = None
15*cd4e3c3eSJouni Malinen
16*cd4e3c3eSJouni Malinenfor arg in sys.argv:
17*cd4e3c3eSJouni Malinen    if arg.startswith("InFile="):
18*cd4e3c3eSJouni Malinen        infile = arg.split("=", 1)[1]
19*cd4e3c3eSJouni Malinen    elif arg.startswith("OutFile="):
20*cd4e3c3eSJouni Malinen        outfile = arg.split("=", 1)[1]
21*cd4e3c3eSJouni Malinen    elif arg.startswith("SrcMac="):
22*cd4e3c3eSJouni Malinen        srcmac = arg.split("=", 1)[1]
23*cd4e3c3eSJouni Malinen    elif arg.startswith("FrameName="):
24*cd4e3c3eSJouni Malinen        framename = arg.split("=", 1)[1].lower()
25*cd4e3c3eSJouni Malinen    elif arg.startswith("HasField="):
26*cd4e3c3eSJouni Malinen        hasfield = arg.split("=", 1)[1].lower()
27*cd4e3c3eSJouni Malinen    elif arg.startswith("Nframes="):
28*cd4e3c3eSJouni Malinen        nframes = arg.split("=", 1)[1]
29*cd4e3c3eSJouni Malinen    elif arg.startswith("Datalen="):
30*cd4e3c3eSJouni Malinen        datalen = arg.split("=", 1)[1]
31*cd4e3c3eSJouni Malinen
32*cd4e3c3eSJouni Malinenfilter = 'wlan.sa==' + srcmac
33*cd4e3c3eSJouni Malinen
34*cd4e3c3eSJouni Malinenif framename:
35*cd4e3c3eSJouni Malinen    frame_filters = tshark.tshark_framenames()
36*cd4e3c3eSJouni Malinen    if framename not in frame_filters:
37*cd4e3c3eSJouni Malinen        print "errorCode,Unsupported FrameName"
38*cd4e3c3eSJouni Malinen        sys.exit()
39*cd4e3c3eSJouni Malinen
40*cd4e3c3eSJouni Malinen    filter = filter + " and " + frame_filters[framename]
41*cd4e3c3eSJouni Malinen
42*cd4e3c3eSJouni Malinenif hasfield:
43*cd4e3c3eSJouni Malinen    fields = tshark.tshark_hasfields()
44*cd4e3c3eSJouni Malinen    if hasfield not in fields:
45*cd4e3c3eSJouni Malinen        print "errorCode,Unsupported HasField"
46*cd4e3c3eSJouni Malinen        sys.exit()
47*cd4e3c3eSJouni Malinen    filter = filter + " and " + fields[hasfield]
48*cd4e3c3eSJouni Malinen
49*cd4e3c3eSJouni Malinenif datalen:
50*cd4e3c3eSJouni Malinen    filter = filter + " and wlan.fc.type == 2 and data.len == " + datalen
51*cd4e3c3eSJouni Malinen
52*cd4e3c3eSJouni Malinenif nframes == "last":
53*cd4e3c3eSJouni Malinen    cmd = ['tshark', '-r', infile, '-R', filter,
54*cd4e3c3eSJouni Malinen           '-Tfields', '-e', 'frame.number']
55*cd4e3c3eSJouni Malinen    tshark = subprocess.Popen(cmd, stdout=subprocess.PIPE)
56*cd4e3c3eSJouni Malinen    data = tshark.stdout.read()
57*cd4e3c3eSJouni Malinen    frames = data.splitlines()
58*cd4e3c3eSJouni Malinen    if len(frames) == 0:
59*cd4e3c3eSJouni Malinen        print "CheckResult,NoPacketsFound"
60*cd4e3c3eSJouni Malinen        sys.exit()
61*cd4e3c3eSJouni Malinen    filter = "frame.number == " + frames[-1]
62*cd4e3c3eSJouni Malinen    nframes = "1"
63*cd4e3c3eSJouni Malinenelif nframes == "all":
64*cd4e3c3eSJouni Malinen    nframes = "9999999"
65*cd4e3c3eSJouni Malinen
66*cd4e3c3eSJouni Malinencmd = ['tshark', '-r', infile, '-w', outfile,
67*cd4e3c3eSJouni Malinen       '-c', nframes,
68*cd4e3c3eSJouni Malinen       '-R', filter]
69*cd4e3c3eSJouni Malinentshark = subprocess.Popen(cmd, stdout=subprocess.PIPE)
70*cd4e3c3eSJouni Malinendata = tshark.stdout.read()
71*cd4e3c3eSJouni Malinen
72*cd4e3c3eSJouni Malinencmd = ['tshark', '-r', outfile, '-c', '1', '-Tfields', '-e', 'frame.number']
73*cd4e3c3eSJouni Malinentshark = subprocess.Popen(cmd, stdout=subprocess.PIPE)
74*cd4e3c3eSJouni Malinendata = tshark.stdout.read().rstrip()
75*cd4e3c3eSJouni Malinen
76*cd4e3c3eSJouni Malinenresult = "SUCCESS" if len(data) > 0 else "NoPacketsFound"
77*cd4e3c3eSJouni Malinenprint "CheckResult,%s" % (result)
78