#!/bin/bash proc pktgen { ../pktgen/pktgen_bench_xmit_mode_netif_receive.sh -i $IFC -s 64 \ -m 90:e2:ba:ff:ff:ff -d 192.168.0.1 -t 4 var dropped = $[tc -s qdisc show dev $IFC | tail -3 | awk '/drop/{print $7}] if test $dropped == "0," { echo "FAIL" } else { echo "Successfully filtered " $dropped " packets" } } proc test { echo -n "Loading bpf program '$2'... " tc qdisc add dev $IFC clsact tc filter add dev $IFC ingress bpf da obj $1 sec $2 var status = $Status if test $status -ne 0 { echo "FAIL" } else { echo "ok" pktgen } tc qdisc del dev $IFC clsact } global IFC := 'test_veth' ip link add name $IFC type veth peer name pair_$IFC ip link set $IFC up ip link set pair_$IFC up test ./parse_simple.o simple test ./parse_varlen.o varlen test ./parse_ldabs.o ldabs ip link del dev $IFC (CommandList children: [ (FuncDef name: pktgen body: (BraceGroup children: [ (C {(../pktgen/pktgen_bench_xmit_mode_netif_receive.sh)} {(-i)} {($ VSub_Name "$IFC")} {(-s)} {(64)} {(-m)} {(90) (Lit_Other ":") (e2) (Lit_Other ":") (ba) (Lit_Other ":") (ff) (Lit_Other ":") (ff) (Lit_Other ":") (ff) } {(-d)} {(192.168.0.1)} {(-t)} {(4)} ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:dropped) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(tc)} {(-s)} {(qdisc)} {(show)} {(dev)} {($ VSub_Name "$IFC")}) (C {(tail)} {(-3)}) (C {(awk)} {(SQ <"/drop/{print $7}">)}) ] negated: False ) ] ) left_token: spids: [49 75] ) } spids: [48] ) ] spids: [46] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$dropped"))} {(Lit_Other "=") (Lit_Other "=")} {(DQ ("0,"))} {(Lit_Other "]")} ) terminator: ) ] action: [(C {(echo)} {(DQ (FAIL))})] spids: [-1 96] ) ] else_action: [ (C {(echo)} {(DQ ("Successfully filtered "))} {($ VSub_Name "$dropped")} {(DQ (" packets"))} ) ] spids: [106 122] ) ] spids: [8] ) spids: [4 7] ) (FuncDef name: test body: (BraceGroup children: [ (C {(echo)} {(-n)} {(DQ ("Loading bpf program '") ($ VSub_Number "$2") ("'... "))}) (C {(tc)} {(qdisc)} {(add)} {(dev)} {($ VSub_Name "$IFC")} {(clsact)}) (C {(tc)} {(filter)} {(add)} {(dev)} {($ VSub_Name "$IFC")} {(ingress)} {(bpf)} {(da)} {(obj)} {($ VSub_Number "$1")} {(sec)} {($ VSub_Number "$2")} ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:status) op: Equal rhs: {($ VSub_QMark "$?")} spids: [185] ) ] spids: [183] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {($ VSub_Name "$status")} {(-ne)} {(0)} {(Lit_Other "]")}) terminator: ) ] action: [(C {(echo)} {(DQ (FAIL))})] spids: [-1 202] ) ] else_action: [(C {(echo)} {(DQ (ok))}) (C {(pktgen)})] spids: [212 225] ) (C {(tc)} {(qdisc)} {(del)} {(dev)} {($ VSub_Name "$IFC")} {(clsact)}) ] spids: [131] ) spids: [127 130] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:IFC) op:Equal rhs:{(test_veth)} spids:[243])] spids: [243] ) (C {(ip)} {(link)} {(add)} {(name)} {($ VSub_Name "$IFC")} {(type)} {(veth)} {(peer)} {(name)} {(pair_) ($ VSub_Name "$IFC")} ) (C {(ip)} {(link)} {(set)} {($ VSub_Name "$IFC")} {(up)}) (C {(ip)} {(link)} {(set)} {(pair_) ($ VSub_Name "$IFC")} {(up)}) (C {(test)} {(./parse_simple.o)} {(simple)}) (C {(test)} {(./parse_varlen.o)} {(varlen)}) (C {(test)} {(./parse_ldabs.o)} {(ldabs)}) (C {(ip)} {(link)} {(del)} {(dev)} {($ VSub_Name "$IFC")}) ] )