(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>})
          ]
        )
    )
  ]
)