(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:server)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'rump_server -lrump -lrumpnet -lrumpnet_net -lrumpnet_netinet\t'> 
                <'\t\t    -lrumpnet_netinet6 -lrumpnet_shmif -lrumpdev\t'> <'\t\t    -lrumpnet_pppoe'>
              )
            }
          spids: [79]
        )
      ]
    )
    (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'>)}
          spids: [91]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SERVER)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock1'>}
          spids: [97]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CLIENT)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock2'>}
          spids: [102]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SERVER_IP)
          op: assign_op.Equal
          rhs: {<10.3.3.1>}
          spids: [108]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CLIENT_IP)
          op: assign_op.Equal
          rhs: {<10.3.3.3>}
          spids: [111]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SERVER_IP6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [114]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CLIENT_IP6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <3>}
          spids: [120]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:AUTHNAME)
          op: assign_op.Equal
          rhs: {<foobar> <Id.Lit_Splice '@baz'> <.com>}
          spids: [126]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SECRET)
          op: assign_op.Equal
          rhs: {<oink>}
          spids: [131]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BUS)
          op: assign_op.Equal
          rhs: {<bus0>}
          spids: [134]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TIMEOUT)
          op: assign_op.Equal
          rhs: {<3>}
          spids: [137]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:WAITTIME)
          op: assign_op.Equal
          rhs: {<10>}
          spids: [140]
        )
      ]
    )
    (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:{<false>})
              )
            }
          spids: [143]
        )
      ]
    )
    (command.ShFunction
      name: setup
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inet)
                  op: assign_op.Equal
                  rhs: {<true>}
                  spids: [158]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<0>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<eval>} {($ Id.VSub_At '$@')})]
                  spids: [163 176]
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
              {(${ Id.VSub_Name server)} {($ Id.VSub_DollarName '$SERVER')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
              {(${ Id.VSub_Name server)} {($ Id.VSub_DollarName '$CLIENT')}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<create>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<linkstr>} {($ Id.VSub_DollarName '$BUS')}
            )
            (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>} 
              {<pppoe0>} {<create>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$inet')})
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                  {<rump.ifconfig>} {<pppoe0>} {<inet>} {($ Id.VSub_DollarName '$SERVER_IP')} {($ Id.VSub_DollarName '$CLIENT_IP')} {<down>}
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<link0>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>})]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$DEBUG')})
                (C {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {(DQ ($ Id.VSub_DollarName '$HIJACKING') <' pppoectl -e shmif0 pppoe0'>)}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<create>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<linkstr>} {($ Id.VSub_DollarName '$BUS')}
            )
            (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>} 
              {<pppoe0>} {<create>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$inet')})
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                  {<rump.ifconfig>} {<pppoe0>} {<inet>} {<0.0.0.0>} {<0.0.0.1>} {<down>}
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {(DQ ($ Id.VSub_DollarName '$HIJACKING') <' pppoectl -e shmif0 pppoe0'>)}
            )
            (C {<unset>} {<RUMP_SERVER>})
          ]
        )
    )
    (command.ShFunction
      name: cleanup
      body: 
        (BraceGroup
          children: [
            (C {<env>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')} {<rump.halt>})
            (C {<env>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')} {<rump.halt>})
          ]
        )
    )
    (command.ShFunction
      name: wait_for_session_established
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'dontfail='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'n='> ($ Id.VSub_DollarName '$WAITTIME')})
            (command.ForEach
              iter_names: [i]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<seq>} {($ Id.VSub_DollarName '$n')})
                      )
                    }
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (command.Pipeline
                      children: [
                        (C {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
                        (C {<grep>} {<-q>} {(DQ <'state = session'>)})
                      ]
                      negated: F
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<Id.Lit_Equals '='>} {<0>} 
                          {<Id.Lit_RBracket ']'>}
                        )
                        (command.ControlFlow
                          token: <Id.ControlFlow_Return return>
                        )
                      ]
                    )
                    (C {<sleep>} {<1>})
                  ]
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$dontfail'))} 
                              {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <dontfail>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_fail>} 
                      {
                        (DQ <'Couldn\'t connect to the server for '> ($ Id.VSub_DollarName '$n') 
                          <' seconds.'>
                        )
                      }
                    )
                  ]
                  spids: [598 616]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: wait_for_disconnected
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'dontfail='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'n='> ($ Id.VSub_DollarName '$WAITTIME')})
            (command.ForEach
              iter_names: [i]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<seq>} {($ Id.VSub_DollarName '$n')})
                      )
                    }
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (command.Pipeline
                      children: [
                        (C {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
                        (C {<grep>} {<-q>} {(DQ <'state = initial'>)})
                      ]
                      negated: F
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<Id.Lit_Equals '='>} {<0>} 
                          {<Id.Lit_RBracket ']'>}
                        )
                        (command.ControlFlow
                          token: <Id.ControlFlow_Return return>
                        )
                      ]
                    )
                    (command.Pipeline
                      children: [
                        (C {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
                        (C {<grep>} {<-q>} {(DQ <'state = PADI sent'>)})
                      ]
                      negated: F
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<Id.Lit_Equals '='>} {<0>} 
                          {<Id.Lit_RBracket ']'>}
                        )
                        (command.ControlFlow
                          token: <Id.ControlFlow_Return return>
                        )
                      ]
                    )
                    (C {<sleep>} {<1>})
                  ]
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$dontfail'))} 
                              {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <dontfail>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_fail>} 
                      {(DQ <'Couldn\'t disconnect for '> ($ Id.VSub_DollarName '$n') <' seconds.'>)}
                    )
                  ]
                  spids: [759 777]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: run_test
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'auth='> ($ Id.VSub_Number '$1')})
            (C {<setup>})
            (C {<local>} {<Id.Lit_VarLike 'server_optparam='> (DQ )})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$auth')} 
                              {<Id.Lit_Equals '='>} {(DQ <chap>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:server_optparam)
                          op: assign_op.Equal
                          rhs: {(DQ <norechallenge>)}
                          spids: [840]
                        )
                      ]
                    )
                  ]
                  spids: [822 837]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<local>} 
              {<Id.Lit_VarLike 'setup_serverparam='> 
                (DQ <'pppoectl pppoe0 hisauthproto='> ($ Id.VSub_DollarName '$auth') <' '> 
                  <'\t\t\t\t    \'hisauthname='> ($ Id.VSub_DollarName '$AUTHNAME') <'\' '> <'\t\t\t\t    \'hisauthsecret='> 
                  ($ Id.VSub_DollarName '$SECRET') <'\' '> <'\t\t\t\t    \'myauthproto=none\' '> <'\t\t\t\t    '> ($ Id.VSub_DollarName '$server_optparam')
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {
                (DQ ($ Id.VSub_DollarName '$HIJACKING') <' '> 
                  ($ Id.VSub_DollarName '$setup_serverparam')
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<up>}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<local>} 
              {<Id.Lit_VarLike 'setup_clientparam='> 
                (DQ <'pppoectl pppoe0 myauthproto='> ($ Id.VSub_DollarName '$auth') <' '> 
                  <'\t\t\t\t    \'myauthname='> ($ Id.VSub_DollarName '$AUTHNAME') <'\' '> <'\t\t\t\t    \'myauthsecret='> 
                  ($ Id.VSub_DollarName '$SECRET') <'\' '> <'\t\t\t\t    \'hisauthproto=none\''>
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {
                (DQ ($ Id.VSub_DollarName '$HIJACKING') <' '> 
                  ($ Id.VSub_DollarName '$setup_clientparam')
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<up>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>})]
            )
            (C {<wait_for_session_established>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping>} {<-c>} {<1>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$SERVER_IP')}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<down>}
            )
            (C {<wait_for_disconnected>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<wait_for_disconnected>})
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} 
              {<rump.ping>} {<-c>} {<1>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$SERVER_IP')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'PADI sent'>)} {<-x>} {(DQ ($ Id.VSub_DollarName '$HIJACKING') <' pppoectl -d pppoe0'>)}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {
                (DQ <'env RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER') <' rump.ifconfig pppoe0 up'>)
              }
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<wait_for_session_established>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping>} {<-c>} {<1>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$SERVER_IP')}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {<rump.ifconfig>} {<pppoe0>} {<down>}
            )
            (C {<wait_for_disconnected>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<wait_for_disconnected>})
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$DEBUG')})
                (C {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
              ]
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} 
              {<rump.ping>} {<-c>} {<1>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$CLIENT_IP')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <initial>)} {<-x>} {(DQ ($ Id.VSub_DollarName '$HIJACKING') <' pppoectl -d pppoe0'>)}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {<rump.ifconfig>} {<pppoe0>} {<up>}
            )
            (C {<wait_for_session_established>})
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>} {<pppoe0>})]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$DEBUG')})
                (C {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
              ]
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<-w>} {<10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping>} {<-c>} {<1>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$CLIENT_IP')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <session>)} {<-x>} {(DQ ($ Id.VSub_DollarName '$HIJACKING') <' pppoectl -d pppoe0'>)}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$DEBUG')})
                (C {<HIJACKING>} {<pppoectl>} {<-d>} {<pppoe0>})
              ]
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<down>}
            )
            (C {<wait_for_disconnected>})
            (C {<local>} 
              {<Id.Lit_VarLike 'setup_clientparam='> 
                (DQ <'pppoectl pppoe0 myauthproto='> ($ Id.VSub_DollarName '$auth') <' '> 
                  <'\t\t\t\t    \'myauthname='> ($ Id.VSub_DollarName '$AUTHNAME') <'\' '> <'\t\t\t\t    \'myauthsecret=invalidsecret\' '> 
                  <'\t\t\t\t    \'hisauthproto=none\''>
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {
                (DQ ($ Id.VSub_DollarName '$HIJACKING') <' '> 
                  ($ Id.VSub_DollarName '$setup_clientparam')
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<up>}
            )
            (C {<wait_for_session_established>} {<dontfail>})
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} 
              {<rump.ping>} {<-c>} {<1>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$SERVER_IP')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <DETACHED>)} {<rump.ifconfig>} {<pppoe0>}
            )
            (C {<unset>} {<RUMP_SERVER>})
          ]
        )
    )
    (C {<atf_test_case>} {<pppoe_pap>} {<cleanup>})
    (command.ShFunction
      name: pppoe_pap_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Does simple pap tests'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <'rump_server pppoectl'>)})
          ]
        )
    )
    (command.ShFunction name:pppoe_pap_body body:(BraceGroup children:[(C {<run_test>} {<pap>})]))
    (command.ShFunction name:pppoe_pap_cleanup body:(BraceGroup children:[(C {<cleanup>})]))
    (C {<atf_test_case>} {<pppoe_chap>} {<cleanup>})
    (command.ShFunction
      name: pppoe_chap_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Does simple chap tests'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <'rump_server pppoectl'>)})
          ]
        )
    )
    (command.ShFunction
      name: pppoe_chap_body
      body: (BraceGroup children:[(C {<run_test>} {<chap>})])
    )
    (command.ShFunction name:pppoe_chap_cleanup body:(BraceGroup children:[(C {<cleanup>})]))
    (command.ShFunction
      name: run_test6
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'auth='> ($ Id.VSub_Number '$1')})
            (C {<setup>} {(DQ <'inet=false'>)})
            (C {<local>} {<Id.Lit_VarLike 'server_optparam='> (DQ )})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$auth')} 
                              {<Id.Lit_Equals '='>} {(DQ <chap>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:server_optparam)
                          op: assign_op.Equal
                          rhs: {(DQ <norechallenge>)}
                          spids: [1755]
                        )
                      ]
                    )
                  ]
                  spids: [1737 1752]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<local>} 
              {<Id.Lit_VarLike 'setup_serverparam='> 
                (DQ <'pppoectl pppoe0 hisauthproto='> ($ Id.VSub_DollarName '$auth') <' '> 
                  <'\t\t\t\t    \'hisauthname='> ($ Id.VSub_DollarName '$AUTHNAME') <'\' '> <'\t\t\t\t    \'hisauthsecret='> 
                  ($ Id.VSub_DollarName '$SECRET') <'\' '> <'\t\t\t\t    \'myauthproto=none\' '> <'\t\t\t\t    '> ($ Id.VSub_DollarName '$server_optparam')
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {
                (DQ ($ Id.VSub_DollarName '$HIJACKING') <' '> 
                  ($ Id.VSub_DollarName '$setup_serverparam')
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<inet6>} {($ Id.VSub_DollarName '$SERVER_IP6') <'/64'>} {<down>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<up>}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<local>} 
              {<Id.Lit_VarLike 'setup_clientparam='> 
                (DQ <'pppoectl pppoe0 myauthproto='> ($ Id.VSub_DollarName '$auth') <' '> 
                  <'\t\t\t\t    \'myauthname='> ($ Id.VSub_DollarName '$AUTHNAME') <'\' '> <'\t\t\t\t    \'myauthsecret='> 
                  ($ Id.VSub_DollarName '$SECRET') <'\' '> <'\t\t\t\t    \'hisauthproto=none\''>
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {
                (DQ ($ Id.VSub_DollarName '$HIJACKING') <' '> 
                  ($ Id.VSub_DollarName '$setup_clientparam')
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<inet6>} {($ Id.VSub_DollarName '$CLIENT_IP6') <'/64'>} {<down>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<up>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>})]
            )
            (C {<wait_for_session_established>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ifconfig>} {<-w>} {<10>}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ifconfig>} {<-w>} {<10>}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping6>} {<-c>} {<1>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$SERVER_IP6')}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:session_id)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
                              (C {<grep>} {<state>})
                            ]
                            negated: F
                          )
                      )
                    }
                  spids: [2031]
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<down>}
            )
            (C {<wait_for_disconnected>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<wait_for_disconnected>})
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} 
              {<rump.ping6>} {<-c>} {<1>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$SERVER_IP6')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<not-match> <Id.Lit_Colon ':'> (DQ ($ Id.VSub_DollarName '$session_id'))} {<-x>} {(DQ ($ Id.VSub_DollarName '$HIJACKING') <' pppoectl -d pppoe0'>)}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<up>}
            )
            (C {<wait_for_session_established>})
            (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 {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>} {<pppoe0>})]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ifconfig>} {<-w>} {<10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping6>} {<-c>} {<1>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$SERVER_IP6')}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<down>}
            )
            (C {<wait_for_disconnected>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<wait_for_disconnected>})
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$DEBUG')})
                (C {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
              ]
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} 
              {<rump.ping6>} {<-c>} {<1>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$CLIENT_IP6')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <initial>)} {<-x>} {(DQ ($ Id.VSub_DollarName '$HIJACKING') <' pppoectl -d pppoe0'>)}
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<up>}
            )
            (C {<wait_for_session_established>})
            (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>} {<pppoe0>})]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$DEBUG')})
                (C {($ Id.VSub_DollarName '$HIJACKING')} {<pppoectl>} {<-d>} {<pppoe0>})
              ]
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SERVER')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<-w>} {<10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping6>} {<-c>} {<1>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$CLIENT_IP6')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <session>)} {<-x>} {(DQ ($ Id.VSub_DollarName '$HIJACKING') <' pppoectl -d pppoe0'>)}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$DEBUG')})
                (C {<HIJACKING>} {<pppoectl>} {<-d>} {<pppoe0>})
              ]
            )
            (C {<unset>} {<RUMP_SERVER>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$CLIENT')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<down>}
            )
            (C {<wait_for_disconnected>})
            (C {<local>} 
              {<Id.Lit_VarLike 'setup_clientparam='> 
                (DQ <'pppoectl pppoe0 myauthproto='> ($ Id.VSub_DollarName '$auth') <' '> 
                  <'\t\t\t\t    \'myauthname='> ($ Id.VSub_DollarName '$AUTHNAME') <'\' '> <'\t\t\t\t    \'myauthsecret=invalidsecret\' '> 
                  <'\t\t\t\t    \'hisauthproto=none\''>
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {
                (DQ ($ Id.VSub_DollarName '$HIJACKING') <' '> 
                  ($ Id.VSub_DollarName '$setup_clientparam')
                )
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<pppoe0>} {<up>}
            )
            (C {<wait_for_session_established>} {<dontfail>})
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} 
              {<rump.ping6>} {<-c>} {<1>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {($ Id.VSub_DollarName '$SERVER_IP6')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <DETACHED>)} {<rump.ifconfig>} {<pppoe0>}
            )
            (C {<unset>} {<RUMP_SERVER>})
          ]
        )
    )
    (C {<atf_test_case>} {<pppoe6_pap>} {<cleanup>})
    (command.ShFunction
      name: pppoe6_pap_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Does simple pap using IPv6 tests'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <'rump_server pppoectl'>)})
          ]
        )
    )
    (command.ShFunction
      name: pppoe6_pap_body
      body: (BraceGroup children:[(C {<run_test6>} {<pap>})])
    )
    (command.ShFunction name:pppoe6_pap_cleanup body:(BraceGroup children:[(C {<cleanup>})]))
    (C {<atf_test_case>} {<pppoe6_chap>} {<cleanup>})
    (command.ShFunction
      name: pppoe6_chap_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Does simple chap using IPv6 tests'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <'rump_server pppoectl'>)})
          ]
        )
    )
    (command.ShFunction
      name: pppoe6_chap_body
      body: (BraceGroup children:[(C {<run_test6>} {<chap>})])
    )
    (command.ShFunction name:pppoe6_chap_cleanup body:(BraceGroup children:[(C {<cleanup>})]))
    (command.ShFunction
      name: atf_init_test_cases
      body: 
        (BraceGroup
          children: [
            (C {<atf_add_test_case>} {<pppoe_pap>})
            (C {<atf_add_test_case>} {<pppoe_chap>})
            (C {<atf_add_test_case>} {<pppoe6_pap>})
            (C {<atf_add_test_case>} {<pppoe6_chap>})
          ]
        )
    )
  ]
)