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