(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HIJACKING) op: assign_op.Equal rhs: {(DQ <'env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=sysctl=yes'>)} spids: [89] ) ] ) (command.ShFunction name: extract_new_packets body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'bus='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'old='> <'./.__old'>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {($ Id.VSub_DollarName '$old')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:old) op: assign_op.Equal rhs: {<'/dev/null'>} spids: [131] ) ] ) ] spids: [115 128] ) ] ) (command.Pipeline children: [ (command.Simple words: [{<shmif_dumpbus>} {<-p>} {<->} {($ Id.VSub_DollarName '$bus')}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple words: [{<tcpdump>} {<-n>} {<-e>} {<-r>} {<->}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'./.__new'>} ) ] do_fork: T ) ] negated: F ) (command.Pipeline children: [ (C {<diff>} {<-u>} {($ Id.VSub_DollarName '$old')} {<'./.__new'>}) (C {<grep>} {(SQ <'^+'>)}) (command.Simple words: [{<cut>} {<-d>} {(SQ <'+'>)} {<-f>} {<2>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'./.__diff'>} ) ] do_fork: T ) ] negated: F ) (C {<mv>} {<-f>} {<'./.__new'>} {<'./.__old'>}) (C {<cat>} {<'./.__diff'>}) ] ) ) (command.ShFunction name: check_route body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'target='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'gw='> ($ Id.VSub_Number '$2')}) (C {<local>} {<Id.Lit_VarLike 'flags='> (braced_var_sub token: <Id.VSub_Number 3> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonHyphen ':-'> arg_word: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\.'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\+'> ) } ) ) } ) (C {<local>} {<Id.Lit_VarLike 'ifname='> (braced_var_sub token: <Id.VSub_Number 4> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonHyphen ':-'> arg_word: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\.'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\+'> ) } ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:target) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$target')}) (C {<sed>} {(SQ <'s/\\./\\\\./g'>)}) ] negated: F ) ) } spids: [262] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$gw'))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:gw) op: assign_op.Equal rhs: {(DQ <'.+'>)} spids: [296] ) ] ) ] spids: [277 293] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:gw) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$gw')}) (C {<sed>} {(SQ <'s/\\./\\\\./g'>)}) ] negated: F ) ) } spids: [305] ) ] ) ] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<-o>} {<match> <Id.Lit_Colon ':'> (DQ <'^'> ($ Id.VSub_DollarName '$target') <' +'> ($ Id.VSub_DollarName '$gw') <' +'> ($ Id.VSub_DollarName '$flags') <' +- +- +.+ +'> ($ Id.VSub_DollarName '$ifname') ) } {<rump.netstat>} {<-rn>} ) ] ) ) (command.ShFunction name: check_route_flags body: (BraceGroup children: [ (C {<check_route>} {(DQ ($ Id.VSub_Number '$1'))} {(DQ )} {(DQ ($ Id.VSub_Number '$2'))} {(DQ )}) ] ) ) (command.ShFunction name: check_route_gw body: (BraceGroup children: [(C {<check_route>} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))} {(DQ )} {(DQ )})] ) ) (command.ShFunction name: check_route_no_entry body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'target='> (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_Number '$1')}) (C {<sed>} {(SQ <'s/\\./\\\\./g'>)}) ] negated: F ) ) } ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<-o>} {<not-match> <Id.Lit_Colon ':'> (DQ <'^'> ($ Id.VSub_DollarName '$target'))} {<rump.netstat>} {<-rn>} ) ] ) ) (command.ShFunction name: get_linklocal_addr body: (BraceGroup children: [ (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Number 1)}) (command.Pipeline children: [ (C {<rump.ifconfig>} {(${ Id.VSub_Number 2)} {<inet6>}) (C {<awk>} { (DQ <'/fe80/ {sub(/%'> ($ Id.VSub_Number '$2') <'/, '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'); sub(/'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ) <'/[0-9]*/, '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) <'); print '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'2;}'> ) } ) ] negated: F ) (C {<unset>} {<RUMP_SERVER>}) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: get_macaddr body: (BraceGroup children: [ (command.Pipeline children: [ (C {<env>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Number 1)} {<rump.ifconfig>} {(${ Id.VSub_Number 2)} ) (C {<awk>} {(SQ <'/address/ {print $2;}'>)}) ] negated: F ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HTTPD_PID) op: assign_op.Equal rhs: {<'./.__httpd.pid'>} spids: [563] ) ] ) (command.ShFunction name: start_httpd body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'sock='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'ip='> ($ Id.VSub_Number '$2')}) (C {<local>} {<Id.Lit_VarLike 'backup='> ($ Id.VSub_DollarName '$RUMP_SERVER')}) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$sock')}) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<env>} {<Id.Lit_VarLike 'LD_PRELOAD='> <'/usr/lib/librumphijack.so'>} {<'/usr/libexec/httpd'>} {<-P>} {($ Id.VSub_DollarName '$HTTPD_PID')} {<-i>} {($ Id.VSub_DollarName '$ip')} {<-b>} {<-s>} {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>}))} ) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$backup')}) (C {<sleep>} {<3>}) ] ) ) (command.ShFunction name: stop_httpd body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_DollarName '$HTTPD_PID')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<kill>} {<-9>} { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<cat>} {($ Id.VSub_DollarName '$HTTPD_PID')}) ) } ) (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$HTTPD_PID')}) (C {<sleep>} {<1>}) ] spids: [660 671] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BASIC_LIBS) op: assign_op.Equal rhs: {(DQ <'-lrumpnet -lrumpnet_net -lrumpnet_netinet '> <' -lrumpnet_shmif -lrumpdev'>)} spids: [702] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FS_LIBS) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$BASIC_LIBS') <' -lrumpvfs -lrumpfs_ffs'>)} spids: [709] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_rump_server_socks) op: assign_op.Equal rhs: {<'./.__socks'>} spids: [719] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_rump_server_ifaces) op: assign_op.Equal rhs: {<'./.__ifaces'>} spids: [722] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_rump_server_buses) op: assign_op.Equal rhs: {<'./.__buses'>} spids: [725] ) ] ) (command.ShFunction name: _rump_server_start_common body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'sock='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'libs='>}) (C {<shift>} {<1>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:libs) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '$*'))} spids: [753] ) ] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump_server>} {($ Id.VSub_DollarName '$libs')} {($ Id.VSub_DollarName '$sock')} ) (command.Simple words: [{<echo>} {($ Id.VSub_DollarName '$sock')}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$_rump_server_socks')} ) ] do_fork: T ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_socks')}) ] ) ] ) ) (command.ShFunction name: rump_server_start body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'sock='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike '_libs='>}) (C {<local>} {<Id.Lit_VarLike 'libs='> (DQ ($ Id.VSub_DollarName '$BASIC_LIBS'))}) (C {<shift>} {<1>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_libs) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '$*'))} spids: [828] ) ] ) (command.ForEach iter_name: lib iter_words: [{($ Id.VSub_DollarName '$_libs')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:libs) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$libs') <' -lrumpnet_'> ($ Id.VSub_DollarName '$lib') ) } spids: [847] ) ] ) ] ) ) (C {<_rump_server_start_common>} {($ Id.VSub_DollarName '$sock')} {($ Id.VSub_DollarName '$libs')} ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: rump_server_fs_start body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'sock='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike '_libs='>}) (C {<local>} {<Id.Lit_VarLike 'libs='> (DQ ($ Id.VSub_DollarName '$FS_LIBS'))}) (C {<shift>} {<1>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_libs) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '$*'))} spids: [906] ) ] ) (command.ForEach iter_name: lib iter_words: [{($ Id.VSub_DollarName '$_libs')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:libs) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$libs') <' -lrumpnet_'> ($ Id.VSub_DollarName '$lib') ) } spids: [925] ) ] ) ] ) ) (C {<_rump_server_start_common>} {($ Id.VSub_DollarName '$sock')} {($ Id.VSub_DollarName '$libs')} ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: rump_server_add_iface body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'sock='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'ifname='> ($ Id.VSub_Number '$2')}) (C {<local>} {<Id.Lit_VarLike 'bus='> ($ Id.VSub_Number '$3')}) (C {<local>} {<Id.Lit_VarLike 'backup='> ($ Id.VSub_DollarName '$RUMP_SERVER')}) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$sock')}) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {($ Id.VSub_DollarName '$ifname')} {<create>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {($ Id.VSub_DollarName '$ifname')} {<linkstr>} {($ Id.VSub_DollarName '$bus')} ) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$backup')}) (command.Simple words: [{<echo>} {($ Id.VSub_DollarName '$sock')} {($ Id.VSub_DollarName '$ifname')}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$_rump_server_ifaces')} ) ] do_fork: T ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_ifaces')}) ] ) (command.Simple words: [{<echo>} {($ Id.VSub_DollarName '$bus')}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$_rump_server_buses')} ) ] do_fork: T ) (command.Pipeline children: [ (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_buses')}) (command.Simple words: [{<sort>} {<-u>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'./.__tmp'>} ) ] do_fork: T ) ] negated: F ) (C {<mv>} {<-f>} {<'./.__tmp'>} {($ Id.VSub_DollarName '$_rump_server_buses')}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_buses')}) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: rump_server_destroy_ifaces body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'backup='> ($ Id.VSub_DollarName '$RUMP_SERVER')}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_ifaces')}) ] ) (command.ForEach iter_name: sock iter_words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_socks')}) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$sock')}) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ifconfig>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.netstat>} {<-nr>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {($ Id.VSub_DollarName '$HIJACKING')} {<rump.netstat>} {<-i>} {<-a>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.arp>} {<-na>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ndp>} {<-na>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {($ Id.VSub_DollarName '$HIJACKING')} {<ifmcstat>} ) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (C {<read>} {<sock>} {<ifname>}) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$sock')}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<rump.ifconfig>} {<-l>}) (C {<grep>} {<-q>} {($ Id.VSub_DollarName '$ifname')}) ] negated: F ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {($ Id.VSub_DollarName '$ifname')} {<destroy>} ) ] spids: [1286 1300] ) ] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ifconfig>} ) ] ) redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {($ Id.VSub_DollarName '$_rump_server_ifaces')} ) ] ) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$backup')}) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: rump_server_halt_servers body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'backup='> ($ Id.VSub_DollarName '$RUMP_SERVER')}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_socks')}) ] ) (command.ForEach iter_name: sock iter_words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_socks')}) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (C {<env>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$sock')} {<rump.halt>} ) ] ) ) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$backup')}) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: rump_server_dump_servers body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'backup='> ($ Id.VSub_DollarName '$RUMP_SERVER')}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_socks')}) ] ) (command.ForEach iter_name: sock iter_words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_socks')}) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (C {<echo>} {(DQ <'### Dumping '> ($ Id.VSub_DollarName '$sock'))}) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$sock')}) (C {<rump.ifconfig>}) (C {<rump.netstat>} {<-nr>}) (C {($ Id.VSub_DollarName '$HIJACKING')} {<rump.netstat>} {<-i>} {<-a>}) (C {<rump.arp>} {<-na>}) (C {<rump.ndp>} {<-na>}) (C {($ Id.VSub_DollarName '$HIJACKING')} {<ifmcstat>}) (C {($ Id.VSub_DollarName '$HIJACKING')} {<dmesg>}) ] ) ) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$backup')}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-f>} {<rump_server.core>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<gdb>} {<-ex>} {<bt>} {<'/usr/bin/rump_server'>} {<rump_server.core>}) (command.Pipeline children: [(C {<strings>} {<rump_server.core>}) (C {<grep>} {<panic>})] negated: F ) ] spids: [1525 1536] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: rump_server_dump_buses body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {($ Id.VSub_DollarName '$_rump_server_buses')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [1578 1591] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_buses')}) ] ) (command.ForEach iter_name: bus iter_words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<cat>} {($ Id.VSub_DollarName '$_rump_server_buses')}) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (C {<echo>} {(DQ <'### Dumping '> ($ Id.VSub_DollarName '$bus'))}) (command.Pipeline children: [ (command.Simple words: [{<shmif_dumpbus>} {<-p>} {<->} {($ Id.VSub_DollarName '$bus')}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (C {<tcpdump>} {<-n>} {<-e>} {<-r>} {<->}) ] negated: F ) ] ) ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: cleanup body: (BraceGroup children:[(C {<rump_server_halt_servers>})]) ) (command.ShFunction name: dump body: (BraceGroup children:[(C {<rump_server_dump_servers>}) (C {<rump_server_dump_buses>})]) ) ] )