(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SOCK_LOCAL)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock1'>}
          spids: [79]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SOCK_PEER)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock2'>}
          spids: [84]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SOCK_GW1)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock3'>}
          spids: [89]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SOCK_GW2)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock4'>}
          spids: [94]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BUS1)
          op: assign_op.Equal
          rhs: {<bus1>}
          spids: [100]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BUS2)
          op: assign_op.Equal
          rhs: {<bus2>}
          spids: [103]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP6BUS1)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <1> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <'/64'>}
          spids: [106]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP6BUS2)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <2> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <'/64'>}
          spids: [114]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP6IF0_LOCAL)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <1> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <2>}
          spids: [122]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP6IF0_PEER)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <2> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <2>}
          spids: [130]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP6IF0_GW1)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <1> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [138]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP6IF1_GW1)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <2> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [146]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP6IF0_GW2)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <1> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <3>}
          spids: [154]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:REDIRECT_TIMEOUT)
          op: assign_op.Equal
          rhs: {<5>}
          spids: [163]
        )
      ]
    )
    (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: [167]
        )
      ]
    )
    (C {<atf_test_case>} {<icmp6_redirect_basic>} {<cleanup>})
    (command.ShFunction
      name: icmp6_redirect_basic_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} 
              {(DQ <'Test for the basically function of the ICMP6 redirect'>)}
            )
            (C {<atf_set>} {(DQ <require.progs>)} 
              {(DQ <'rump_server rump.route rump.ping rump.ifconfig'>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: icmp6_redirect_basic_body
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'gw1_lladdr0='>})
            (C {<local>} {<Id.Lit_VarLike 'gw1_lladdr1='>})
            (C {<local>} {<Id.Lit_VarLike 'gw2_lladdr0='>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCK_LOCAL')} {<netinet6>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCK_PEER')} {<netinet6>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCK_GW1')} {<netinet6>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCK_GW2')} {<netinet6>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Name SOCK_GW1)})
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCK_GW1')} {<shmif0>} 
              {($ Id.VSub_DollarName '$BUS1')}
            )
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCK_GW1')} {<shmif1>} 
              {($ Id.VSub_DollarName '$BUS2')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet6>} {(${ Id.VSub_Name IP6IF0_GW1)}
            )
            (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>} 
              {<shmif1>} {<inet6>} {(${ Id.VSub_Name IP6IF1_GW1)}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif1>} {<up>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'0.->.1'>)} {<rump.sysctl>} {<-w>} {<net.inet6.ip6.forwarding> <Id.Lit_Equals '='> <1>}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:gw1_lladdr0)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<get_linklocal_addr>} {(${ Id.VSub_Name SOCK_GW1)} {<shmif0>})
                      )
                    }
                  spids: [411]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:gw1_lladdr1)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<get_linklocal_addr>} {(${ Id.VSub_Name SOCK_GW1)} {<shmif1>})
                      )
                    }
                  spids: [425]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Name SOCK_PEER)})
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCK_PEER')} {<shmif0>} 
              {($ Id.VSub_DollarName '$BUS2')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet6>} {(${ Id.VSub_Name IP6IF0_PEER)}
            )
            (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>} {<-o>} {<ignore>} 
              {<rump.route>} {<add>} {<-inet6>} {<default>} {(${ Id.VSub_Name gw1_lladdr1) <Id.Lit_Other '%'> <shmif0>}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Name SOCK_GW2)})
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCK_GW2')} {<shmif0>} 
              {($ Id.VSub_DollarName '$BUS1')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet6>} {(${ Id.VSub_Name IP6IF0_GW2)}
            )
            (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>} {<-o>} {<ignore>} 
              {<rump.route>} {<add>} {<-inet6>} {(${ Id.VSub_Name IP6BUS2)} 
              {(${ Id.VSub_Name gw1_lladdr0) <Id.Lit_Other '%'> <shmif0>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'0.->.1'>)} {<rump.sysctl>} {<-w>} {<net.inet6.ip6.forwarding> <Id.Lit_Equals '='> <1>}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:gw2_lladdr0)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<get_linklocal_addr>} {(${ Id.VSub_Name SOCK_GW2)} {<shmif0>})
                      )
                    }
                  spids: [650]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Name SOCK_LOCAL)})
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCK_LOCAL')} {<shmif0>} 
              {($ Id.VSub_DollarName '$BUS1')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet6>} {(${ Id.VSub_Name IP6IF0_LOCAL)}
            )
            (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>} {<-o>} {<ignore>} 
              {<rump.route>} {<add>} {<-inet6>} {<default>} {(${ Id.VSub_Name gw2_lladdr0) <Id.Lit_Other '%'> <shmif0>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$DEBUG')})
                (C {<rump.route>} {<get>} {<-inet6>} {(${ Id.VSub_Name IP6IF0_PEER)})
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.sysctl>} {<-w>} {<net.inet6.icmp6.redirtimeout> <Id.Lit_Equals '='> ($ Id.VSub_DollarName '$REDIRECT_TIMEOUT')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping6>} {<-c>} {<1>} {<-n>} {(${ Id.VSub_Name IP6IF0_PEER)}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.route>} {<show>} {<-inet6>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (DQ <'gateway: '> (${ Id.VSub_Name gw1_lladdr0))} {<rump.route>} {<get>} {<-inet6>} {(${ Id.VSub_Name IP6IF0_PEER)}
            )
            (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.Lit_ArithVarLike REDIRECT_TIMEOUT>
                      right: {<Id.Lit_Digits 2>}
                    )
                )
              }
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.route>} {<show>} {<-inet6>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<not-match> <Id.Lit_Colon ':'> (DQ <'gateway: '> (${ Id.VSub_Name gw1_lladdr0))} {<rump.route>} {<get>} {<-inet6>} {(${ Id.VSub_Name IP6IF0_PEER)}
            )
            (C {<rump_server_destroy_ifaces>})
          ]
        )
    )
    (command.ShFunction
      name: icmp6_redirect_basic_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>} {<icmp6_redirect_basic>})])
    )
  ]
)