(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:RUMP_FLAGS spids:[79])
          op: Equal
          rhs: {(DQ ('-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6'))}
          spids: [79]
        )
      ]
      spids: [79]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:RUMP_FLAGS spids:[84])
          op: Equal
          rhs: {(DQ ($ VSub_DollarName '$RUMP_FLAGS') (' -lrumpnet_shmif -lrumpnet_tun -lrumpdev'))}
          spids: [84]
        )
      ]
      spids: [84]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:BUS spids:[91])
          op: Equal
          rhs: {(bus)}
          spids: [91]
        )
      ]
      spids: [91]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:SOCK_LOCAL spids:[94])
          op: Equal
          rhs: {(unix) (Lit_Other ':') (//commsock1)}
          spids: [94]
        )
      ]
      spids: [94]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:SOCK_REMOTE spids:[99])
          op: Equal
          rhs: {(unix) (Lit_Other ':') (//commsock2)}
          spids: [99]
        )
      ]
      spids: [99]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:IP_LOCAL spids:[104])
          op: Equal
          rhs: {(10.0.0.1)}
          spids: [104]
        )
      ]
      spids: [104]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:IP_REMOTE spids:[107])
          op: Equal
          rhs: {(10.0.0.2)}
          spids: [107]
        )
      ]
      spids: [107]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:DEBUG spids:[111])
          op: Equal
          rhs: 
            {
              (word_part.BracedVarSub
                token: <VSub_Name DEBUG>
                suffix_op: (suffix_op.StringUnary op_id:VTest_ColonHyphen arg_word:{(true)})
                spids: [112 116]
              )
            }
          spids: [111]
        )
      ]
      spids: [111]
    )
    (C {(atf_test_case)} {(tun_create_destroy)} {(cleanup)})
    (command.FuncDef
      name: tun_create_destroy_head
      body: 
        (command.BraceGroup
          children: [
            (C {(atf_set)} {(DQ (descr))} {(DQ ('tests of creation and deletion of tun interface'))})
            (C {(atf_set)} {(DQ (require.progs))} {(DQ (rump_server))})
          ]
          spids: [129]
        )
      spids: [125 128]
    )
    (command.FuncDef
      name: tun_create_destroy_body
      body: 
        (command.BraceGroup
          children: [
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump_server)} 
              {(${ VSub_Name RUMP_FLAGS)} {(${ VSub_Name SOCK_LOCAL)}
            )
            (C {(export)} {(Lit_VarLike 'RUMP_SERVER=') (${ VSub_Name SOCK_LOCAL)})
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(tun0)} {(create)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(tun0)} {(up)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(tun0)} {(down)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(tun0)} {(destroy)}
            )
          ]
          spids: [161]
        )
      spids: [157 160]
    )
    (command.FuncDef
      name: tun_create_destroy_cleanup
      body: 
        (command.BraceGroup
          children: [
            (command.SimpleCommand
              words: [{(rump.halt)}]
              more_env: [(env_pair name:RUMP_SERVER val:{(${ VSub_Name SOCK_LOCAL)} spids:[264])]
            )
          ]
          spids: [260]
        )
      spids: [256 259]
    )
    (C {(atf_test_case)} {(tun_setup)} {(cleanup)})
    (command.FuncDef
      name: tun_setup_head
      body: 
        (command.BraceGroup
          children: [
            (C {(atf_set)} {(DQ (descr))} {(DQ ('tests of setting up a tunnel'))})
            (C {(atf_set)} {(DQ (require.progs))} {(DQ (rump_server))})
          ]
          spids: [284]
        )
      spids: [280 283]
    )
    (command.FuncDef
      name: check_route_entry
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:ip spids:[321])
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(echo)} {($ VSub_Number '$1')})
                                  (C {(sed)} {(SQ <'s/\\./\\\\./g'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [322 333]
                      )
                    }
                  spids: [321]
                )
              ]
              spids: [319]
            )
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:gw spids:[338])
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [338]
                )
              ]
              spids: [336]
            )
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:flags spids:[344])
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [344]
                )
              ]
              spids: [342]
            )
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:iface spids:[350])
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [350]
                )
              ]
              spids: [348]
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(-o)} 
              {(match) (Lit_Other ':') (DQ (' ') ($ VSub_DollarName '$flags') (' '))} {(-e)} {(ignore)} {(-x)} {(DQ ("rump.netstat -rn -f inet | grep ^'") ($ VSub_DollarName '$ip') ("'"))}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(-o)} 
              {(match) (Lit_Other ':') (DQ (' ') ($ VSub_DollarName '$gw') (' '))} {(-e)} {(ignore)} {(-x)} {(DQ ("rump.netstat -rn -f inet | grep ^'") ($ VSub_DollarName '$ip') ("'"))}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(-o)} 
              {(match) (Lit_Other ':') (DQ (' ') ($ VSub_DollarName '$iface'))} {(-e)} {(ignore)} {(-x)} {(DQ ("rump.netstat -rn -f inet | grep ^'") ($ VSub_DollarName '$ip') ("'"))}
            )
          ]
          spids: [316]
        )
      spids: [312 315]
    )
    (command.FuncDef
      name: tun_setup_body
      body: 
        (command.BraceGroup
          children: [
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump_server)} 
              {(${ VSub_Name RUMP_FLAGS)} {(${ VSub_Name SOCK_LOCAL)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump_server)} 
              {(${ VSub_Name RUMP_FLAGS)} {(${ VSub_Name SOCK_REMOTE)}
            )
            (C {(export)} {(Lit_VarLike 'RUMP_SERVER=') (${ VSub_Name SOCK_LOCAL)})
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(shmif0)} {(create)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(shmif0)} {(linkstr)} {($ VSub_DollarName '$BUS')}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(shmif0)} {(${ VSub_Name IP_LOCAL) (/24)} {(up)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} {(-w)} 
              {(10)}
            )
            (C {(export)} {(Lit_VarLike 'RUMP_SERVER=') (${ VSub_Name SOCK_REMOTE)})
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(shmif0)} {(create)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(shmif0)} {(linkstr)} {($ VSub_DollarName '$BUS')}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(shmif0)} {(${ VSub_Name IP_REMOTE) (/24)} {(up)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} {(-w)} 
              {(10)}
            )
            (C {(export)} {(Lit_VarLike 'RUMP_SERVER=') (${ VSub_Name SOCK_LOCAL)})
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(tun0)} {(create)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(tun0)} {(${ VSub_Name IP_LOCAL)} {(${ VSub_Name IP_REMOTE)} {(up)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(-o)} 
              {(match) (Lit_Other ':') 
                (DQ ('inet ') (${ VSub_Name IP_LOCAL) ('/32 -> ') (${ VSub_Name IP_REMOTE))
              } {(rump.ifconfig)} {(tun0)}
            )
            (command.AndOr
              ops: [Op_DAmp]
              children: [(C {($ VSub_DollarName '$DEBUG')}) (C {(rump.netstat)} {(-nr)} {(-f)} {(inet)})]
            )
            (C {(check_route_entry)} {(${ VSub_Name IP_REMOTE)} {(${ VSub_Name IP_LOCAL)} {(UH)} {(tun0)})
            (C {(export)} {(Lit_VarLike 'RUMP_SERVER=') (${ VSub_Name SOCK_REMOTE)})
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(tun0)} {(create)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(rump.ifconfig)} 
              {(tun0)} {(${ VSub_Name IP_REMOTE)} {(${ VSub_Name IP_LOCAL)} {(up)}
            )
            (C {(atf_check)} {(-s)} {(ControlFlow_Exit exit) (Lit_Other ':') (0)} {(-o)} 
              {(match) (Lit_Other ':') 
                (DQ ('inet ') (${ VSub_Name IP_REMOTE) ('/32 -> ') (${ VSub_Name IP_LOCAL))
              } {(rump.ifconfig)} {(tun0)}
            )
            (command.AndOr
              ops: [Op_DAmp]
              children: [(C {($ VSub_DollarName '$DEBUG')}) (C {(rump.netstat)} {(-nr)} {(-f)} {(inet)})]
            )
            (C {(check_route_entry)} {(${ VSub_Name IP_LOCAL)} {(${ VSub_Name IP_REMOTE)} {(UH)} {(tun0)})
          ]
          spids: [459]
        )
      spids: [455 458]
    )
    (command.FuncDef
      name: tun_setup_cleanup
      body: 
        (command.BraceGroup
          children: [
            (command.SimpleCommand
              words: [{(rump.halt)}]
              more_env: [(env_pair name:RUMP_SERVER val:{(${ VSub_Name SOCK_LOCAL)} spids:[875])]
            )
            (command.SimpleCommand
              words: [{(rump.halt)}]
              more_env: [(env_pair name:RUMP_SERVER val:{(${ VSub_Name SOCK_REMOTE)} spids:[883])]
            )
          ]
          spids: [871]
        )
      spids: [867 870]
    )
    (command.FuncDef
      name: atf_init_test_cases
      body: 
        (command.BraceGroup
          children: [
            (C {(atf_add_test_case)} {(tun_create_destroy)})
            (C {(atf_add_test_case)} {(tun_setup)})
          ]
          spids: [897]
        )
      spids: [893 896]
    )
  ]
)