(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 '`'> child: (C {<dirname>} {($ Id.VSub_Number '$0')}) ) } spids: [18] ) ] ) (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.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: [91] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DEST_IP) op: assign_op.Equal rhs: {(DQ <'FD00::1'>)} spids: [98] ) ] ) ] ) ] spids: [63 76] ) ] ) (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: [117] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$DST_MAC'))} {<Id.Lit_RBracket ']'>} ) (C {<usage>}) (C {<err>} {<2>} {(DQ <'Must specify -m dst_mac'>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DELAY) op: assign_op.Equal rhs: {(DQ <0>)} spids: [153] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COUNT) op: assign_op.Equal rhs: {(DQ <100000>)} spids: [161] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:UDP_MIN) op: assign_op.Equal rhs: {<9>} spids: [173] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:UDP_MAX) op: assign_op.Equal rhs: {<109>} spids: [176] ) ] ) (C {<pg_ctrl>} {(DQ <reset>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:thread) op: assign_op.Equal rhs: {<0>} spids: [196] ) ] ) (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 <'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 op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (C {<pg_ctrl>} {(DQ <start>)}) (command.Simple words: [{<echo>} {(DQ <Done>)}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (C {<echo>} {(DQ <'Result device: '> ($ Id.VSub_DollarName '$DEV'))}) (C {<cat>} {<'/proc/net/pktgen/'> ($ Id.VSub_DollarName '$DEV')}) ] )