(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SOCKSRC) op: assign_op.Equal rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock1'>} spids: [79] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SOCKDST) op: assign_op.Equal rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock2'>} spids: [84] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IP6SRC) op: assign_op.Equal rhs: {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>} spids: [89] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IP6DST) op: assign_op.Equal rhs: {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <2>} spids: [95] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DEBUG) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name DEBUG> suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<true>}) ) } spids: [102] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TIMEOUT) op: assign_op.Equal rhs: {<1>} spids: [109] ) ] ) (C {<atf_test_case>} {<ndp_cache_expiration>} {<cleanup>}) (C {<atf_test_case>} {<ndp_commands>} {<cleanup>}) (C {<atf_test_case>} {<ndp_cache_overwriting>} {<cleanup>}) (C {<atf_test_case>} {<ndp_neighborgcthresh>} {<cleanup>}) (C {<atf_test_case>} {<ndp_link_activation>} {<cleanup>}) (command.ShFunction name: ndp_cache_expiration_head body: (BraceGroup children: [ (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for NDP cache expiration'>)}) (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)}) ] ) ) (command.ShFunction name: ndp_commands_head body: (BraceGroup children: [ (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for commands of ndp(8)'>)}) (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)}) ] ) ) (command.ShFunction name: ndp_cache_overwriting_head body: (BraceGroup children: [ (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for behavior of overwriting NDP caches'>)}) (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)}) ] ) ) (command.ShFunction name: ndp_neighborgcthresh_head body: (BraceGroup children: [ (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for GC of neighbor caches'>)}) (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)}) ] ) ) (command.ShFunction name: ndp_link_activation_head body: (BraceGroup children: [ (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for activating a new MAC address'>)}) (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)}) ] ) ) (command.ShFunction name: setup_dst_server body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'assign_ip='> ($ Id.VSub_Number '$1')}) (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCKDST')} {<shmif0>} {<bus1>}) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$assign_ip'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {<shmif0>} {<inet6>} {($ Id.VSub_DollarName '$IP6DST')} ) ] spids: [328 344] ) ] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {<shmif0>} {<up>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {<-w>} {<10>} ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>} {<shmif0>})] ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) ] ) ) (command.ShFunction name: setup_src_server body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<ulimit>} {<-c>} {<unlimited>})] ) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')}) (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCKSRC')} {<shmif0>} {<bus1>}) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {<shmif0>} {<inet6>} {($ Id.VSub_DollarName '$IP6SRC')} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {<shmif0>} {<up>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {<-w>} {<10>} ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>} {<shmif0>})] ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6SRC')} ) (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6DST')} ) ] ) ) (command.ShFunction name: get_timeout body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'timeout='> (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<env>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6DST')} ) (C {<grep>} {($ Id.VSub_DollarName '$IP6DST')}) (C {<awk>} {(SQ <'{print $4;}'>)}) ] negated: F ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:timeout) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name timeout> suffix_op: (suffix_op.Unary tok:<Id.VOp1_Percent '%'> arg_word:{<s>}) ) } spids: [609] ) ] ) (C {<echo>} {($ Id.VSub_DollarName '$timeout')}) ] ) ) (command.ShFunction name: ndp_cache_expiration_body body: (BraceGroup children: [ (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')} {<netinet6>}) (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')} {<netinet6>}) (C {<setup_dst_server>}) (C {<setup_src_server>}) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')}) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP6DST')} ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6SRC')} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<not-match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6DST')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:timeout) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<get_timeout>} {($ Id.VSub_DollarName '$IP6DST')}) ) } spids: [762] ) ] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<sleep>} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName '$timeout')} right: {<Id.Lit_Digits 1>} ) ) } ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6SRC')} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <'(1d0h0m|23h59m)'>)} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6DST')} ) (C {<rump_server_destroy_ifaces>}) ] ) ) (command.ShFunction name: ifdown_dst_server body: (BraceGroup children: [ (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')}) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {<shmif0>} {<down>} ) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')}) ] ) ) (command.ShFunction name: ndp_commands_body body: (BraceGroup children: [ (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')} {<netinet6>}) (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')} {<netinet6>}) (C {<setup_dst_server>}) (C {<setup_src_server>}) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')}) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (DQ ($ Id.VSub_DollarName '$IP6SRC'))} {<rump.ndp>} {<-d>} {($ Id.VSub_DollarName '$IP6SRC')} ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ndp>} {<-s>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <10>} {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <10> } ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.ndp>} {<-n>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <10>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <deleted>)} {<rump.ndp>} {<-d>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <10>} ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} {<rump.ndp>} {<-n>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <10>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP6DST')} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ndp>} {<-s>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <11>} {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <11> } ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ndp>} {<-s>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <12>} {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <12> } ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<not-match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6DST')} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.ndp>} {<-n>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <11>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.ndp>} {<-n>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <12>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <'fc00::11'>)} {<rump.ndp>} {<-n>} {<-a>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <'fc00::12'>)} {<rump.ndp>} {<-n>} {<-a>} ) (C {<ifdown_dst_server>}) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ndp>} {<-c>} ) (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6SRC')} ) (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6DST')} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} {<rump.ndp>} {<-n>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <11>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} {<rump.ndp>} {<-n>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <12>} ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ndp>} {<-s>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <10>} {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <10> } {<temp>} ) (C {<rump.ndp>} {<-s>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <10>} {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <10> } {<temp>} ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<not-match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.ndp>} {<-n>} {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <10>} ) (C {<rump_server_destroy_ifaces>}) ] ) ) (command.ShFunction name: ndp_cache_overwriting_body body: (BraceGroup children: [ (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')} {<netinet6>}) (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')} {<netinet6>}) (C {<setup_dst_server>}) (C {<setup_src_server>}) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')}) (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.ndp>} {<-s>} {($ Id.VSub_DollarName '$IP6SRC')} {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <ff> } ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP6DST')} ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ndp>} {<-s>} {($ Id.VSub_DollarName '$IP6DST')} {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> } ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.ndp>} {<-n>} {($ Id.VSub_DollarName '$IP6DST')} ) (C {<rump_server_destroy_ifaces>}) ] ) ) (command.ShFunction name: get_n_caches body: (BraceGroup children: [ (C {<echo>} { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<rump.ndp>} {<-a>} {<-n>}) (C {<grep>} {<-v>} {<-e>} {<Neighbor>} {<-e>} {<permanent>}) (C {<wc>} {<-l>}) ] negated: F ) ) } ) ] ) ) (command.ShFunction name: ndp_neighborgcthresh_body body: (BraceGroup children: [ (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')} {<netinet6>}) (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')} {<netinet6>}) (C {<setup_dst_server>} {<no>}) (C {<setup_src_server>}) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')}) (command.ForEach iter_names: [i] iterable: (for_iter.Words words: [ {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<seq>} {<0>} {<9>}))} ] ) body: (command.DoGroup children: [ (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} {<shmif0>} {<inet6>} {(${ Id.VSub_Name IP6DST) ($ Id.VSub_DollarName '$i')} ) ] ) ) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')}) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (command.ForEach iter_names: [i] iterable: (for_iter.Words words: [ {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<seq>} {<0>} {<2>}))} ] ) body: (command.DoGroup children: [ (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {(${ Id.VSub_Name IP6DST) ($ Id.VSub_DollarName '$i')} ) ] ) ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check_equal>} {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<get_n_caches>}))} {<3>} ) (command.ForEach iter_names: [i] iterable: (for_iter.Words words: [ {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<seq>} {<3>} {<5>}))} ] ) body: (command.DoGroup children: [ (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {(${ Id.VSub_Name IP6DST) ($ Id.VSub_DollarName '$i')} ) ] ) ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ndp>} {<-n>} {<-a>})] ) (C {<atf_check_equal>} {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<get_n_caches>}))} {<6>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.sysctl>} {<-w>} {<net.inet6.ip6.neighborgcthresh> <Id.Lit_Equals '='> <5>} ) (command.ForEach iter_names: [i] iterable: (for_iter.Words words: [ {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<seq>} {<6>} {<9>}))} ] ) body: (command.DoGroup children: [ (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {(${ Id.VSub_Name IP6DST) ($ Id.VSub_DollarName '$i')} ) ] ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<get_n_caches>}) ) ) } {<-gt>} {<5>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<atf_fail>} {(DQ <'Neighbor caches are not GC-ed'>)})] spids: [2258 2275] ) ] ) (C {<rump_server_destroy_ifaces>}) ] ) ) (command.ShFunction name: make_pkt_str_na body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'ip='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'mac='> ($ Id.VSub_Number '$2')}) (C {<local>} {<Id.Lit_VarLike 'pkt='>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pkt) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$mac') <' > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 86:'> ) } spids: [2318] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pkt) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$pkt') <' '> ($ Id.VSub_DollarName '$ip') <' > ff02::1: ICMP6, neighbor advertisement'> ) } spids: [2325] ) ] ) (C {<echo>} {($ Id.VSub_DollarName '$pkt')}) ] ) ) (command.ShFunction name: ndp_link_activation_body body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'linklocal='>}) (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')} {<netinet6>}) (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')} {<netinet6>}) (C {<setup_dst_server>}) (C {<setup_src_server>}) (command.Simple words: [{<extract_new_packets>} {<bus1>}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})] do_fork: T ) (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')}) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ifconfig>} {<shmif0>} {<link>} {<b2> <Id.Lit_Colon ':'> <a1> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <01> } ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<sleep>} {<1>}) (command.Simple words: [{<extract_new_packets>} {<bus1>}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})] do_fork: T ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {<'./out'>})] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:linklocal) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<rump.ifconfig>} {<shmif0>}) (C {<awk>} {(SQ <'/fe80/ {print $2;}'>)}) (C {<awk>} {<-F>} {<Id.Lit_Other '%'>} {(SQ <'{print $1;}'>)}) ] negated: F ) ) } spids: [2463] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {($ Id.VSub_DollarName '$DEBUG')}) (C {<echo>} {($ Id.VSub_DollarName '$linklocal')}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pkt) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<make_pkt_str_na>} {($ Id.VSub_DollarName '$linklocal')} {<b2> <Id.Lit_Colon ':'> <a1> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <01> } ) ) } spids: [2499] ) ] ) (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-x>} {(DQ <'cat ./out |grep -q \''> ($ Id.VSub_DollarName '$pkt') <'\''>)} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<rump.ifconfig>} {<shmif0>} {<link>} {<b2> <Id.Lit_Colon ':'> <a1> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <02> } {<active>} ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<sleep>} {<1>}) (command.Simple words: [{<extract_new_packets>} {<bus1>}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})] do_fork: T ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {<'./out'>})] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:linklocal) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<rump.ifconfig>} {<shmif0>}) (C {<awk>} {(SQ <'/fe80/ {print $2;}'>)}) (C {<awk>} {<-F>} {<Id.Lit_Other '%'>} {(SQ <'{print $1;}'>)}) ] negated: F ) ) } spids: [2605] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {($ Id.VSub_DollarName '$DEBUG')}) (C {<echo>} {($ Id.VSub_DollarName '$linklocal')}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pkt) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<make_pkt_str_na>} {($ Id.VSub_DollarName '$linklocal')} {<b2> <Id.Lit_Colon ':'> <a1> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <02> } ) ) } spids: [2641] ) ] ) (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} {(DQ <'cat ./out |grep -q \''> ($ Id.VSub_DollarName '$pkt') <'\''>)} ) (C {<rump_server_destroy_ifaces>}) ] ) ) (command.ShFunction name: ndp_cache_expiration_cleanup body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})] ) (C {<cleanup>}) ] ) ) (command.ShFunction name: ndp_commands_cleanup body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})] ) (C {<cleanup>}) ] ) ) (command.ShFunction name: ndp_cache_overwriting_cleanup body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})] ) (C {<cleanup>}) ] ) ) (command.ShFunction name: ndp_neighborgcthresh_cleanup body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})] ) (C {<cleanup>}) ] ) ) (command.ShFunction name: ndp_link_activation_cleanup body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})] ) (C {<cleanup>}) ] ) ) (command.ShFunction name: atf_init_test_cases body: (BraceGroup children: [ (C {<atf_add_test_case>} {<ndp_cache_expiration>}) (C {<atf_add_test_case>} {<ndp_commands>}) (C {<atf_add_test_case>} {<ndp_cache_overwriting>}) (C {<atf_add_test_case>} {<ndp_neighborgcthresh>}) (C {<atf_add_test_case>} {<ndp_link_activation>}) ] ) ) ] )