(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:basedir) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [(C {<dirname>} {($ Id.VSub_Number '$0')})] ) ) } spids: [24] ) ] ) (C {<source>} {(${ Id.VSub_Name basedir) </functions.sh>}) (C {<root_check_run_with_sudo>} {(DQ ($ Id.VSub_At '$@'))}) (C {<source>} {(${ Id.VSub_Name basedir) </parameters.sh>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DELAY) op: assign_op.Equal rhs: {(DQ <0>)} spids: [63] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COUNT) op: assign_op.Equal rhs: {(DQ <100000>)} spids: [71] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$CLONE_SKB'))} {<Id.Lit_RBracket ']'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CLONE_SKB) op: assign_op.Equal rhs: {(DQ <0>)} spids: [91] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:UDP_MIN) op: assign_op.Equal rhs: {<9>} spids: [100] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:UDP_MAX) op: assign_op.Equal rhs: {<109>} spids: [103] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$DEST_IP'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$IP6'))} {<Id.Lit_RBracket ']'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DEST_IP) op: assign_op.Equal rhs: {(DQ <198.18.0.42>)} spids: [138] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DEST_IP) op: assign_op.Equal rhs: {(DQ <'FD00::1'>)} spids: [145] ) ] ) ] ) ] spids: [110 123] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$DST_MAC'))} {<Id.Lit_RBracket ']'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DST_MAC) op: assign_op.Equal rhs: {(DQ <'90:e2:ba:ff:ff:ff'>)} spids: [164] ) ] ) ] ) (C {<pg_ctrl>} {(DQ <reset>)}) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:thread) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike thread>) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$THREADS')}) ) update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:(sh_lhs_expr.Name name:thread)) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dev) op: assign_op.Equal rhs: {(${ Id.VSub_Name DEV) <Id.Lit_Other '@'> (${ Id.VSub_Name thread)} spids: [217] ) ] ) (C {<pg_thread>} {($ Id.VSub_DollarName '$thread')} {(DQ <rem_device_all>)}) (C {<pg_thread>} {($ Id.VSub_DollarName '$thread')} {(DQ <add_device>)} {($ Id.VSub_DollarName '$dev')} ) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'flag QUEUE_MAP_CPU'>)}) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'count '> ($ Id.VSub_DollarName '$COUNT'))} ) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'clone_skb '> ($ Id.VSub_DollarName '$CLONE_SKB'))} ) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'pkt_size '> ($ Id.VSub_DollarName '$PKT_SIZE'))} ) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'delay '> ($ Id.VSub_DollarName '$DELAY'))} ) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'flag NO_TIMESTAMP'>)}) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'dst_mac '> ($ Id.VSub_DollarName '$DST_MAC'))} ) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <dst> ($ Id.VSub_DollarName '$IP6') <' '> ($ Id.VSub_DollarName '$DEST_IP'))} ) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'flag UDPSRC_RND'>)}) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'udp_src_min '> ($ Id.VSub_DollarName '$UDP_MIN'))} ) (C {<pg_set>} {($ Id.VSub_DollarName '$dev')} {(DQ <'udp_src_max '> ($ Id.VSub_DollarName '$UDP_MAX'))} ) ] ) ) (command.Simple words: [{<echo>} {(DQ <'Running... ctrl^C to stop'>)}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (C {<pg_ctrl>} {(DQ <start>)}) (command.Simple words: [{<echo>} {(DQ <Done>)}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:thread) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike thread>) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$THREADS')}) ) update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:(sh_lhs_expr.Name name:thread)) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dev) op: assign_op.Equal rhs: {(${ Id.VSub_Name DEV) <Id.Lit_Other '@'> (${ Id.VSub_Name thread)} spids: [449] ) ] ) (C {<echo>} {(DQ <'Device: '> ($ Id.VSub_DollarName '$dev'))}) (command.Pipeline children: [ (C {<cat>} {</proc/net/pktgen/> ($ Id.VSub_DollarName '$dev')}) (C {<grep>} {<-A2>} {(DQ <'Result:'>)}) ] negated: F ) ] ) ) ] )