(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SOCK1)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock1'>}
          spids: [79]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SOCK2)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock2'>}
          spids: [87]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_LANIP)
          op: assign_op.Equal
          rhs: {<192.168.1.1>}
          spids: [95]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_LANNET)
          op: assign_op.Equal
          rhs: {<'192.168.1.0/24'>}
          spids: [98]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_WANIP)
          op: assign_op.Equal
          rhs: {<10.0.0.1>}
          spids: [101]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_GIFIP)
          op: assign_op.Equal
          rhs: {<172.16.1.1>}
          spids: [104]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_WANIP_DUMMY)
          op: assign_op.Equal
          rhs: {<10.0.0.11>}
          spids: [107]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_GIFIP_DUMMY)
          op: assign_op.Equal
          rhs: {<172.16.11.1>}
          spids: [110]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_GIFIP_RECURSIVE1)
          op: assign_op.Equal
          rhs: {<172.16.101.1>}
          spids: [113]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_GIFIP_RECURSIVE2)
          op: assign_op.Equal
          rhs: {<172.16.201.1>}
          spids: [116]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_LANIP)
          op: assign_op.Equal
          rhs: {<192.168.2.1>}
          spids: [119]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_LANNET)
          op: assign_op.Equal
          rhs: {<'192.168.2.0/24'>}
          spids: [122]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_WANIP)
          op: assign_op.Equal
          rhs: {<10.0.0.2>}
          spids: [125]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_GIFIP)
          op: assign_op.Equal
          rhs: {<172.16.2.1>}
          spids: [128]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_WANIP_DUMMY)
          op: assign_op.Equal
          rhs: {<10.0.0.12>}
          spids: [131]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_GIFIP_DUMMY)
          op: assign_op.Equal
          rhs: {<172.16.12.1>}
          spids: [134]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_GIFIP_RECURSIVE1)
          op: assign_op.Equal
          rhs: {<172.16.102.1>}
          spids: [137]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_GIFIP_RECURSIVE2)
          op: assign_op.Equal
          rhs: {<172.16.202.1>}
          spids: [140]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_LANIP6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <1> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [144]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_LANNET6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <1> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <'/64'>}
          spids: [152]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_WANIP6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [160]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_GIFIP6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <3> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [166]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_WANIP6_DUMMY)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <11>}
          spids: [174]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_GIFIP6_DUMMY)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <13> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [180]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_GIFIP6_RECURSIVE1)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <103> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [188]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER1_GIFIP6_RECURSIVE2)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <203> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [196]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_LANIP6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <2> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [204]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_LANNET6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <2> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <'/64'>}
          spids: [212]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_WANIP6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <2>}
          spids: [220]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_GIFIP6)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <4> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [226]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_WANIP6_DUMMY)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <12>}
          spids: [234]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_GIFIP6_DUMMY)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <14> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [240]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_GIFIP6_RECURSIVE1)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <104> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [248]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROUTER2_GIFIP6_RECURSIVE2)
          op: assign_op.Equal
          rhs: {<fc00> <Id.Lit_Colon ':'> <204> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <1>}
          spids: [256]
        )
      ]
    )
    (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: [265]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TIMEOUT)
          op: assign_op.Equal
          rhs: {<5>}
          spids: [272]
        )
      ]
    )
    (command.ShFunction
      name: setup_router
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:sock)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [283]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lan)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 2)}
                  spids: [289]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lan_mode)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 3)}
                  spids: [295]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:wan)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 4)}
                  spids: [301]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:wan_mode)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 5)}
                  spids: [307]
                )
              ]
            )
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$sock')} {<shmif0>} {<bus0>})
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$sock')} {<shmif1>} {<bus1>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Name sock)})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name lan_mode)} 
                              {<Id.Lit_Equals '='>} {(DQ <ipv6>)} {<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_Name lan)}
                    )
                  ]
                  spids: [341 358]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                  {<rump.ifconfig>} {<shmif0>} {<inet>} {(${ Id.VSub_Name lan)} {<netmask>} {<0xffffff00>}
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<up>}
            )
            (C {<rump.ifconfig>} {<shmif0>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name wan_mode)} 
                              {<Id.Lit_Equals '='>} {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                      {<rump.ifconfig>} {<shmif1>} {<inet6>} {(${ Id.VSub_Name wan)}
                    )
                  ]
                  spids: [430 447]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                  {<rump.ifconfig>} {<shmif1>} {<inet>} {(${ Id.VSub_Name wan)} {<netmask>} {<0xff000000>}
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif1>} {<up>}
            )
            (C {<rump.ifconfig>} {<shmif1>})
          ]
        )
    )
    (command.ShFunction
      name: test_router
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:sock)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [527]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lan)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 2)}
                  spids: [533]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lan_mode)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 3)}
                  spids: [539]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:wan)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 4)}
                  spids: [545]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:wan_mode)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 5)}
                  spids: [551]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Name sock)})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> <shmif0>} {<rump.ifconfig>}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name lan_mode)} 
                              {<Id.Lit_Equals '='>} {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                      {<ignore>} {<rump.ping6>} {<-n>} {<-c>} {<1>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {(${ Id.VSub_Name lan)}
                    )
                  ]
                  spids: [583 600]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                  {<ignore>} {<rump.ping>} {<-n>} {<-c>} {<1>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {(${ Id.VSub_Name lan)}
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> <shmif1>} {<rump.ifconfig>}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name wan_mode)} 
                              {<Id.Lit_Equals '='>} {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                      {<ignore>} {<rump.ping6>} {<-n>} {<-c>} {<1>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {(${ Id.VSub_Name wan)}
                    )
                  ]
                  spids: [685 702]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                  {<ignore>} {<rump.ping>} {<-n>} {<-c>} {<1>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {(${ Id.VSub_Name wan)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: setup
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [778]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 2)}
                  spids: [784]
                )
              ]
            )
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCK1')} {<netinet6>} {<gif>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCK2')} {<netinet6>} {<gif>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:router1_lan)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [810]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:router1_lan_mode)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [815]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:router2_lan)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [820]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:router2_lan_mode)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [825]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name inner)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:router1_lan)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_LANIP6')}
                          spids: [850]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:router1_lan_mode)
                          op: assign_op.Equal
                          rhs: {(DQ <ipv6>)}
                          spids: [854]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:router2_lan)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_LANIP6')}
                          spids: [860]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:router2_lan_mode)
                          op: assign_op.Equal
                          rhs: {(DQ <ipv6>)}
                          spids: [864]
                        )
                      ]
                    )
                  ]
                  spids: [830 847]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:router1_lan)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_LANIP')}
                      spids: [873]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:router1_lan_mode)
                      op: assign_op.Equal
                      rhs: {(DQ <ipv4>)}
                      spids: [877]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:router2_lan)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_LANIP')}
                      spids: [883]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:router2_lan_mode)
                      op: assign_op.Equal
                      rhs: {(DQ <ipv4>)}
                      spids: [887]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name outer)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<setup_router>} {($ Id.VSub_DollarName '$SOCK1')} 
                      {(${ Id.VSub_Name router1_lan)} {(${ Id.VSub_Name router1_lan_mode)} {($ Id.VSub_DollarName '$ROUTER1_WANIP6')} {<ipv6>}
                    )
                    (C {<setup_router>} {($ Id.VSub_DollarName '$SOCK2')} 
                      {(${ Id.VSub_Name router2_lan)} {(${ Id.VSub_Name router2_lan_mode)} {($ Id.VSub_DollarName '$ROUTER2_WANIP6')} {<ipv6>}
                    )
                  ]
                  spids: [897 914]
                )
              ]
              else_action: [
                (C {<setup_router>} {($ Id.VSub_DollarName '$SOCK1')} {(${ Id.VSub_Name router1_lan)} 
                  {(${ Id.VSub_Name router1_lan_mode)} {($ Id.VSub_DollarName '$ROUTER1_WANIP')} {<ipv4>}
                )
                (C {<setup_router>} {($ Id.VSub_DollarName '$SOCK2')} {(${ Id.VSub_Name router2_lan)} 
                  {(${ Id.VSub_Name router2_lan_mode)} {($ Id.VSub_DollarName '$ROUTER2_WANIP')} {<ipv4>}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_setup
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [1008]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 2)}
                  spids: [1014]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:router1_lan)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1021]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:router1_lan_mode)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1026]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:router2_lan)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1031]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:router2_lan_mode)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1036]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name inner)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:router1_lan)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_LANIP6')}
                          spids: [1061]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:router1_lan_mode)
                          op: assign_op.Equal
                          rhs: {(DQ <ipv6>)}
                          spids: [1065]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:router2_lan)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_LANIP6')}
                          spids: [1071]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:router2_lan_mode)
                          op: assign_op.Equal
                          rhs: {(DQ <ipv6>)}
                          spids: [1075]
                        )
                      ]
                    )
                  ]
                  spids: [1041 1058]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:router1_lan)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_LANIP')}
                      spids: [1084]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:router1_lan_mode)
                      op: assign_op.Equal
                      rhs: {(DQ <ipv4>)}
                      spids: [1088]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:router2_lan)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_LANIP')}
                      spids: [1094]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:router2_lan_mode)
                      op: assign_op.Equal
                      rhs: {(DQ <ipv4>)}
                      spids: [1098]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name outer)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<test_router>} {($ Id.VSub_DollarName '$SOCK1')} {(${ Id.VSub_Name router1_lan)} 
                      {(${ Id.VSub_Name router1_lan_mode)} {($ Id.VSub_DollarName '$ROUTER1_WANIP6')} {<ipv6>}
                    )
                    (C {<test_router>} {($ Id.VSub_DollarName '$SOCK2')} {(${ Id.VSub_Name router2_lan)} 
                      {(${ Id.VSub_Name router2_lan_mode)} {($ Id.VSub_DollarName '$ROUTER2_WANIP6')} {<ipv6>}
                    )
                  ]
                  spids: [1107 1124]
                )
              ]
              else_action: [
                (C {<test_router>} {($ Id.VSub_DollarName '$SOCK1')} {(${ Id.VSub_Name router1_lan)} 
                  {(${ Id.VSub_Name router1_lan_mode)} {($ Id.VSub_DollarName '$ROUTER1_WANIP')} {<ipv4>}
                )
                (C {<test_router>} {($ Id.VSub_DollarName '$SOCK2')} {(${ Id.VSub_Name router2_lan)} 
                  {(${ Id.VSub_Name router2_lan_mode)} {($ Id.VSub_DollarName '$ROUTER2_WANIP')} {<ipv4>}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: setup_if_gif
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:sock)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [1218]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:addr)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 2)}
                  spids: [1224]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:remote)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 3)}
                  spids: [1230]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 4)}
                  spids: [1236]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 5)}
                  spids: [1242]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dst)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 6)}
                  spids: [1248]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:peernet)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 7)}
                  spids: [1254]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Name sock)})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif0>} {<create>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif0>} {<tunnel>} {(${ Id.VSub_Name src)} {(${ Id.VSub_Name dst)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name inner)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                      {<rump.ifconfig>} {<gif0>} {<inet6>} {(${ Id.VSub_Name addr) <'/128'>} {(${ Id.VSub_Name remote)}
                    )
                    (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                      {<ignore>} {<rump.route>} {<add>} {<-inet6>} {(${ Id.VSub_Name peernet)} {(${ Id.VSub_Name addr)}
                    )
                  ]
                  spids: [1307 1324]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                  {<rump.ifconfig>} {<gif0>} {<inet>} {(${ Id.VSub_Name addr) <'/32'>} {(${ Id.VSub_Name remote)}
                )
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                  {<ignore>} {<rump.route>} {<add>} {<-inet>} {(${ Id.VSub_Name peernet)} {(${ Id.VSub_Name addr)}
                )
              ]
            )
            (C {<rump.ifconfig>} {<gif0>})
            (C {<rump.route>} {<-nL>} {<show>})
          ]
        )
    )
    (command.ShFunction
      name: setup_tunnel
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [1457]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 2)}
                  spids: [1463]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:addr)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1470]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:remote)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1475]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1480]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dst)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1485]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:peernet)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1490]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name inner)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:addr)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP6')}
                          spids: [1516]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:remote)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP6')}
                          spids: [1520]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:peernet)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_LANNET6')}
                          spids: [1524]
                        )
                      ]
                    )
                  ]
                  spids: [1496 1513]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:addr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP')}
                      spids: [1531]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:remote)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP')}
                      spids: [1535]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:peernet)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_LANNET')}
                      spids: [1539]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name outer)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:src)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP6')}
                          spids: [1566]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP6')}
                          spids: [1570]
                        )
                      ]
                    )
                  ]
                  spids: [1546 1563]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:src)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP')}
                      spids: [1577]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:dst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP')}
                      spids: [1581]
                    )
                  ]
                )
              ]
            )
            (C {<setup_if_gif>} {($ Id.VSub_DollarName '$SOCK1')} {(${ Id.VSub_Name addr)} 
              {(${ Id.VSub_Name remote)} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name src)} {(${ Id.VSub_Name dst)} {(${ Id.VSub_Name peernet)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$inner')} 
                              {<Id.Lit_Equals '='>} {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:addr)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP6')}
                          spids: [1638]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:remote)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP6')}
                          spids: [1642]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:peernet)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_LANNET6')}
                          spids: [1646]
                        )
                      ]
                    )
                  ]
                  spids: [1620 1635]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:addr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP')}
                      spids: [1653]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:remote)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP')}
                      spids: [1657]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:peernet)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_LANNET')}
                      spids: [1661]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$outer')} 
                              {<Id.Lit_Equals '='>} {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:src)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP6')}
                          spids: [1686]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP6')}
                          spids: [1690]
                        )
                      ]
                    )
                  ]
                  spids: [1668 1683]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:src)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP')}
                      spids: [1697]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:dst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP')}
                      spids: [1701]
                    )
                  ]
                )
              ]
            )
            (C {<setup_if_gif>} {($ Id.VSub_DollarName '$SOCK2')} {(${ Id.VSub_Name addr)} 
              {(${ Id.VSub_Name remote)} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name src)} {(${ Id.VSub_Name dst)} {(${ Id.VSub_Name peernet)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_setup_tunnel
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:mode)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [1748]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:peernet)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1755]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:opt)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1760]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:peernet)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_LANNET6')}
                          spids: [1785]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:opt)
                          op: assign_op.Equal
                          rhs: {(DQ <-inet6>)}
                          spids: [1789]
                        )
                      ]
                    )
                  ]
                  spids: [1765 1782]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:peernet)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_LANNET')}
                      spids: [1798]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:opt)
                      op: assign_op.Equal
                      rhs: {(DQ <-inet>)}
                      spids: [1802]
                    )
                  ]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> <gif0>} {<rump.ifconfig>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> <gif0>} {<rump.route>} {<-nL>} {<get>} {(${ Id.VSub_Name opt)} {(${ Id.VSub_Name peernet)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:peernet)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_LANNET6')}
                          spids: [1884]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:opt)
                          op: assign_op.Equal
                          rhs: {(DQ <-inet6>)}
                          spids: [1888]
                        )
                      ]
                    )
                  ]
                  spids: [1864 1881]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:peernet)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_LANNET')}
                      spids: [1897]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:opt)
                      op: assign_op.Equal
                      rhs: {(DQ <-inet>)}
                      spids: [1901]
                    )
                  ]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK2')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> <gif0>} {<rump.ifconfig>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> <gif0>} {<rump.route>} {<-nL>} {<get>} {(${ Id.VSub_Name opt)} {(${ Id.VSub_Name peernet)}
            )
          ]
        )
    )
    (command.ShFunction
      name: teardown_tunnel
      body: 
        (BraceGroup
          children: [
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif0>} {<deletetunnel>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif0>} {<destroy>}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK2')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif0>} {<deletetunnel>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif0>} {<destroy>}
            )
          ]
        )
    )
    (command.ShFunction
      name: setup_dummy_if_gif
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:sock)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [2053]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:addr)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 2)}
                  spids: [2059]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:remote)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 3)}
                  spids: [2065]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 4)}
                  spids: [2071]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 5)}
                  spids: [2077]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dst)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 6)}
                  spids: [2083]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Name sock)})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif1>} {<create>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif1>} {<tunnel>} {(${ Id.VSub_Name src)} {(${ Id.VSub_Name dst)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name inner)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                      {<rump.ifconfig>} {<gif1>} {<inet6>} {(${ Id.VSub_Name addr) <'/128'>} {(${ Id.VSub_Name remote)}
                    )
                  ]
                  spids: [2136 2153]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                  {<rump.ifconfig>} {<gif1>} {<inet>} {(${ Id.VSub_Name addr) <'/32'>} {(${ Id.VSub_Name remote)}
                )
              ]
            )
            (C {<rump.ifconfig>} {<gif1>})
          ]
        )
    )
    (command.ShFunction
      name: setup_dummy_tunnel
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [2225]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 2)}
                  spids: [2231]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:addr)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [2238]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:remote)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [2243]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [2248]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dst)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [2253]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name inner)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:addr)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP6_DUMMY')}
                          spids: [2279]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:remote)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP6_DUMMY')}
                          spids: [2283]
                        )
                      ]
                    )
                  ]
                  spids: [2259 2276]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:addr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP_DUMMY')}
                      spids: [2290]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:remote)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP_DUMMY')}
                      spids: [2294]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name outer)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:src)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP6_DUMMY')}
                          spids: [2321]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP6_DUMMY')}
                          spids: [2325]
                        )
                      ]
                    )
                  ]
                  spids: [2301 2318]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:src)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP_DUMMY')}
                      spids: [2332]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:dst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP_DUMMY')}
                      spids: [2336]
                    )
                  ]
                )
              ]
            )
            (C {<setup_dummy_if_gif>} {($ Id.VSub_DollarName '$SOCK1')} {(${ Id.VSub_Name addr)} 
              {(${ Id.VSub_Name remote)} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name src)} {(${ Id.VSub_Name dst)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$inner')} 
                              {<Id.Lit_Equals '='>} {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:addr)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP6_DUMMY')}
                          spids: [2389]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:remote)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP6_DUMMY')}
                          spids: [2393]
                        )
                      ]
                    )
                  ]
                  spids: [2371 2386]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:addr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP_DUMMY')}
                      spids: [2400]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:remote)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP_DUMMY')}
                      spids: [2404]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$outer')} 
                              {<Id.Lit_Equals '='>} {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:src)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP6_DUMMY')}
                          spids: [2429]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP6_DUMMY')}
                          spids: [2433]
                        )
                      ]
                    )
                  ]
                  spids: [2411 2426]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:src)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP_DUMMY')}
                      spids: [2440]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:dst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP_DUMMY')}
                      spids: [2444]
                    )
                  ]
                )
              ]
            )
            (C {<setup_dummy_if_gif>} {($ Id.VSub_DollarName '$SOCK2')} {(${ Id.VSub_Name addr)} 
              {(${ Id.VSub_Name remote)} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name src)} {(${ Id.VSub_Name dst)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_setup_dummy_tunnel
      body: 
        (BraceGroup
          children: [
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> <gif1>} {<rump.ifconfig>}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK2')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> <gif1>} {<rump.ifconfig>}
            )
          ]
        )
    )
    (command.ShFunction
      name: teardown_dummy_tunnel
      body: 
        (BraceGroup
          children: [
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif1>} {<deletetunnel>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif1>} {<destroy>}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK2')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif1>} {<deletetunnel>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif1>} {<destroy>}
            )
          ]
        )
    )
    (command.ShFunction
      name: setup_recursive_if_gif
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:sock)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [2625]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:gif)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 2)}
                  spids: [2631]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:addr)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 3)}
                  spids: [2637]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:remote)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 4)}
                  spids: [2643]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 5)}
                  spids: [2649]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 6)}
                  spids: [2655]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dst)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 7)}
                  spids: [2661]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (${ Id.VSub_Name sock)})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {(${ Id.VSub_Name gif)} {<create>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {(${ Id.VSub_Name gif)} {<tunnel>} {(${ Id.VSub_Name src)} {(${ Id.VSub_Name dst)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name inner)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                      {<rump.ifconfig>} {(${ Id.VSub_Name gif)} {<inet6>} {(${ Id.VSub_Name addr) <'/128'>} {(${ Id.VSub_Name remote)}
                    )
                  ]
                  spids: [2718 2735]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
                  {<rump.ifconfig>} {(${ Id.VSub_Name gif)} {<inet>} {(${ Id.VSub_Name addr) <'/32'>} {(${ Id.VSub_Name remote)}
                )
              ]
            )
            (C {<rump.ifconfig>} {(${ Id.VSub_Name gif)})
          ]
        )
    )
    (command.ShFunction
      name: setup_recursive_tunnels
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:mode)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Number 1)}
                  spids: [2816]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:addr)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [2823]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:remote)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [2828]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [2833]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dst)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [2838]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:addr)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP6_RECURSIVE1')}
                          spids: [2864]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:remote)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP6_RECURSIVE1')}
                          spids: [2868]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:src)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP6')}
                          spids: [2872]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP6')}
                          spids: [2876]
                        )
                      ]
                    )
                  ]
                  spids: [2844 2861]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:addr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP_RECURSIVE1')}
                      spids: [2883]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:remote)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP_RECURSIVE1')}
                      spids: [2887]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:src)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP')}
                      spids: [2891]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:dst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP')}
                      spids: [2895]
                    )
                  ]
                )
              ]
            )
            (C {<setup_recursive_if_gif>} {($ Id.VSub_DollarName '$SOCK1')} {<gif1>} 
              {(${ Id.VSub_Name addr)} {(${ Id.VSub_Name remote)} {(${ Id.VSub_Name mode)} {(${ Id.VSub_Name src)} {(${ Id.VSub_Name dst)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:addr)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP6_RECURSIVE2')}
                          spids: [2952]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:remote)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP6_RECURSIVE2')}
                          spids: [2956]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:src)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP6_RECURSIVE1')}
                          spids: [2960]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP6_RECURSIVE1')}
                          spids: [2964]
                        )
                      ]
                    )
                  ]
                  spids: [2932 2949]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:addr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP_RECURSIVE2')}
                      spids: [2971]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:remote)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP_RECURSIVE2')}
                      spids: [2975]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:src)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_GIFIP_RECURSIVE1')}
                      spids: [2979]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:dst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_GIFIP_RECURSIVE1')}
                      spids: [2983]
                    )
                  ]
                )
              ]
            )
            (C {<setup_recursive_if_gif>} {($ Id.VSub_DollarName '$SOCK1')} {<gif2>} 
              {(${ Id.VSub_Name addr)} {(${ Id.VSub_Name remote)} {(${ Id.VSub_Name mode)} {(${ Id.VSub_Name src)} {(${ Id.VSub_Name dst)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_recursive_check
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:mode)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3031]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} 
                      {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} 
                      {($ Id.VSub_DollarName '$ROUTER2_GIFIP6_RECURSIVE2')}
                    )
                  ]
                  spids: [3042 3059]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} 
                  {<ignore>} {<rump.ping>} {<-n>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} 
                  {($ Id.VSub_DollarName '$ROUTER2_GIFIP_RECURSIVE2')}
                )
              ]
            )
            (C {<atf_check>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'gif0: recursively called too many times'>)} {<-x>} {(DQ ($ Id.VSub_DollarName '$HIJACKING') <' dmesg'>)}
            )
            (C {($ Id.VSub_DollarName '$HIJACKING')} {<dmesg>})
          ]
        )
    )
    (command.ShFunction
      name: teardown_recursive_tunnels
      body: 
        (BraceGroup
          children: [
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif1>} {<deletetunnel>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif1>} {<destroy>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif2>} {<deletetunnel>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif2>} {<destroy>}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_ping_failure
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:mode)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3245]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} 
                      {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {<-S>} 
                      {($ Id.VSub_DollarName '$ROUTER1_LANIP6')} {($ Id.VSub_DollarName '$ROUTER2_LANIP6')}
                    )
                  ]
                  spids: [3256 3273]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} 
                  {<ignore>} {<rump.ping>} {<-n>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {<-I>} 
                  {($ Id.VSub_DollarName '$ROUTER1_LANIP')} {($ Id.VSub_DollarName '$ROUTER2_LANIP')}
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK2')})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} 
                      {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {<-S>} 
                      {($ Id.VSub_DollarName '$ROUTER2_LANIP6')} {($ Id.VSub_DollarName '$ROUTER1_LANIP6')}
                    )
                  ]
                  spids: [3367 3384]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} 
                  {<ignore>} {<rump.ping>} {<-n>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {<-I>} 
                  {($ Id.VSub_DollarName '$ROUTER1_LANIP')} {($ Id.VSub_DollarName '$ROUTER2_LANIP')}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_ping_success
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:mode)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3480]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                      {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {<-S>} 
                      {($ Id.VSub_DollarName '$ROUTER1_LANIP6')} {($ Id.VSub_DollarName '$ROUTER2_LANIP6')}
                    )
                  ]
                  spids: [3498 3515]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                  {<ignore>} {<rump.ping>} {<-n>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {<-I>} 
                  {($ Id.VSub_DollarName '$ROUTER1_LANIP')} {($ Id.VSub_DollarName '$ROUTER2_LANIP')}
                )
              ]
            )
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK2')})
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                      {<ignore>} {<rump.ping6>} {<-n>} {<-X>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {<-S>} 
                      {($ Id.VSub_DollarName '$ROUTER2_LANIP6')} {($ Id.VSub_DollarName '$ROUTER1_LANIP6')}
                    )
                  ]
                  spids: [3631 3648]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                  {<ignore>} {<rump.ping>} {<-n>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {<-I>} 
                  {($ Id.VSub_DollarName '$ROUTER2_LANIP')} {($ Id.VSub_DollarName '$ROUTER1_LANIP')}
                )
              ]
            )
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
          ]
        )
    )
    (command.ShFunction
      name: test_change_tunnel_duplicate
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:mode)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3743]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:newsrc)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [3748]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:newdst)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [3753]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:newsrc)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP6_DUMMY')}
                          spids: [3778]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:newdst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP6_DUMMY')}
                          spids: [3782]
                        )
                      ]
                    )
                  ]
                  spids: [3758 3775]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:newsrc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP_DUMMY')}
                      spids: [3789]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:newdst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP_DUMMY')}
                      spids: [3793]
                    )
                  ]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (C {<rump.ifconfig>} {<-v>} {<gif1>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} 
              {<match> <Id.Lit_Colon ':'> <SIOCSLIFPHYADDR>} {<rump.ifconfig>} {<gif0>} {<tunnel>} {(${ Id.VSub_Name newsrc)} {(${ Id.VSub_Name newdst)}
            )
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (C {<rump.ifconfig>} {<-v>} {<gif1>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:newsrc)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP6_DUMMY')}
                          spids: [3886]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:newdst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP6_DUMMY')}
                          spids: [3890]
                        )
                      ]
                    )
                  ]
                  spids: [3866 3883]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:newsrc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP_DUMMY')}
                      spids: [3897]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:newdst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP_DUMMY')}
                      spids: [3901]
                    )
                  ]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK2')})
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (C {<rump.ifconfig>} {<-v>} {<gif1>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} 
              {<match> <Id.Lit_Colon ':'> <SIOCSLIFPHYADDR>} {<rump.ifconfig>} {<gif0>} {<tunnel>} {(${ Id.VSub_Name newsrc)} {(${ Id.VSub_Name newdst)}
            )
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (C {<rump.ifconfig>} {<-v>} {<gif1>})
          ]
        )
    )
    (command.ShFunction
      name: test_change_tunnel_success
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:mode)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3982]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:newsrc)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [3987]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:newdst)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [3992]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:newsrc)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP6_DUMMY')}
                          spids: [4017]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:newdst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP6_DUMMY')}
                          spids: [4021]
                        )
                      ]
                    )
                  ]
                  spids: [3997 4014]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:newsrc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP_DUMMY')}
                      spids: [4028]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:newdst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP_DUMMY')}
                      spids: [4032]
                    )
                  ]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK1')})
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif0>} {<tunnel>} {(${ Id.VSub_Name newsrc)} {(${ Id.VSub_Name newdst)}
            )
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name mode)} {<Id.Lit_Equals '='>} 
                              {(DQ <ipv6>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:newsrc)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP6_DUMMY')}
                          spids: [4105]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:newdst)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP6_DUMMY')}
                          spids: [4109]
                        )
                      ]
                    )
                  ]
                  spids: [4085 4102]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:newsrc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER2_WANIP_DUMMY')}
                      spids: [4116]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:newdst)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$ROUTER1_WANIP_DUMMY')}
                      spids: [4120]
                    )
                  ]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCK2')})
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<gif0>} {<tunnel>} {(${ Id.VSub_Name newsrc)} {(${ Id.VSub_Name newdst)}
            )
            (C {<rump.ifconfig>} {<-v>} {<gif0>})
          ]
        )
    )
    (command.ShFunction
      name: basic_setup
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4181]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4185]
                )
              ]
            )
            (C {<setup>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<test_setup>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<setup_tunnel>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<sleep>} {<1>})
            (C {<test_setup_tunnel>} {(${ Id.VSub_Name inner)})
          ]
        )
    )
    (command.ShFunction
      name: basic_test
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4254]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4258]
                )
              ]
            )
            (C {<test_ping_success>} {(${ Id.VSub_Name inner)})
          ]
        )
    )
    (command.ShFunction
      name: basic_teardown
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4282]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4286]
                )
              ]
            )
            (C {<teardown_tunnel>})
            (C {<test_ping_failure>} {(${ Id.VSub_Name inner)})
          ]
        )
    )
    (command.ShFunction
      name: ioctl_setup
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4313]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4317]
                )
              ]
            )
            (C {<setup>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<test_setup>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<setup_tunnel>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<setup_dummy_tunnel>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<sleep>} {<1>})
            (C {<test_setup_tunnel>} {(${ Id.VSub_Name inner)})
          ]
        )
    )
    (command.ShFunction
      name: ioctl_test
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4397]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4401]
                )
              ]
            )
            (C {<test_ping_success>} {(${ Id.VSub_Name inner)})
            (C {<test_change_tunnel_duplicate>} {(${ Id.VSub_Name outer)})
            (C {<teardown_dummy_tunnel>})
            (C {<test_change_tunnel_success>} {(${ Id.VSub_Name outer)})
          ]
        )
    )
    (command.ShFunction
      name: ioctl_teardown
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4441]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4445]
                )
              ]
            )
            (C {<teardown_tunnel>})
            (C {<test_ping_failure>} {(${ Id.VSub_Name inner)})
          ]
        )
    )
    (command.ShFunction
      name: recursive_setup
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4472]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4476]
                )
              ]
            )
            (C {<setup>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<test_setup>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<setup_tunnel>} {(${ Id.VSub_Name inner)} {(${ Id.VSub_Name outer)})
            (C {<setup_recursive_tunnels>} {(${ Id.VSub_Name inner)})
            (C {<sleep>} {<1>})
            (C {<test_setup_tunnel>} {(${ Id.VSub_Name inner)})
          ]
        )
    )
    (command.ShFunction
      name: recursive_test
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4552]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4556]
                )
              ]
            )
            (C {<test_recursive_check>} {(${ Id.VSub_Name inner)})
          ]
        )
    )
    (command.ShFunction
      name: recursive_teardown
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4580]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4587]
                )
              ]
            )
            (C {<teardown_recursive_tunnels>})
            (C {<teardown_tunnel>})
          ]
        )
    )
    (command.ShFunction
      name: add_test
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:category)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4610]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:desc)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4614]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:inner)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [4618]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outer)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$4')}
                  spids: [4622]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:name)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ <gif_> (${ Id.VSub_Name category) <_> (${ Id.VSub_Name inner) <over> 
                        (${ Id.VSub_Name outer)
                      )
                    }
                  spids: [4627]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:fulldesc)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ <'Does '> (${ Id.VSub_Name inner) <' over '> (${ Id.VSub_Name outer) 
                        <' if_gif '> (${ Id.VSub_Name desc)
                      )
                    }
                  spids: [4644]
                )
              ]
            )
            (C {<atf_test_case>} {(${ Id.VSub_Name name)} {<cleanup>})
            (C {<eval>} 
              {
                (DQ (${ Id.VSub_Name name) <'_head() { '> <'\t\t\tatf_set '> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <descr> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) (${ Id.VSub_Name fulldesc) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'; '> 
                  <'\t\t\tatf_set '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <require.progs> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <rump_server> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'; '> <'\t\t}; '> <'\t    '> (${ Id.VSub_Name name) <'_body() { '> <'\t\t\t'> (${ Id.VSub_Name category) 
                  <'_setup '> (${ Id.VSub_Name inner) <' '> (${ Id.VSub_Name outer) <'; '> <'\t\t\t'> (${ Id.VSub_Name category) 
                  <'_test '> (${ Id.VSub_Name inner) <' '> (${ Id.VSub_Name outer) <'; '> <'\t\t\t'> (${ Id.VSub_Name category) 
                  <'_teardown '> (${ Id.VSub_Name inner) <' '> (${ Id.VSub_Name outer) <'; '> <'\t\t\trump_server_destroy_ifaces; '> 
                  <'\t    }; '> <'\t    '> (${ Id.VSub_Name name) <'_cleanup() { '> <'\t\t\t'> ($ Id.VSub_DollarName '$DEBUG') 
                  <' && dump; '> <'\t\t\tcleanup; '> <'\t\t}'>
                )
              }
            )
            (C {<atf_add_test_case>} {(${ Id.VSub_Name name)})
          ]
        )
    )
    (command.ShFunction
      name: add_test_allproto
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:category)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4787]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:desc)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [4791]
                )
              ]
            )
            (C {<add_test>} {(${ Id.VSub_Name category)} {(DQ (${ Id.VSub_Name desc))} {<ipv4>} {<ipv4>})
            (C {<add_test>} {(${ Id.VSub_Name category)} {(DQ (${ Id.VSub_Name desc))} {<ipv4>} {<ipv6>})
            (C {<add_test>} {(${ Id.VSub_Name category)} {(DQ (${ Id.VSub_Name desc))} {<ipv6>} {<ipv4>})
            (C {<add_test>} {(${ Id.VSub_Name category)} {(DQ (${ Id.VSub_Name desc))} {<ipv6>} {<ipv6>})
          ]
        )
    )
    (command.ShFunction
      name: atf_init_test_cases
      body: 
        (BraceGroup
          children: [
            (C {<add_test_allproto>} {<basic>} {(DQ <'basic tests'>)})
            (C {<add_test_allproto>} {<ioctl>} {(DQ <'ioctl tests'>)})
            (C {<add_test_allproto>} {<recursive>} {(DQ <'recursive check tests'>)})
          ]
        )
    )
  ]
)