(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SOCKSRC)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock1'>}
          spids: [79]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SOCKDST)
          op: assign_op.Equal
          rhs: {<unix> <Id.Lit_Colon ':'> <'//commsock2'>}
          spids: [84]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP4SRC)
          op: assign_op.Equal
          rhs: {<10.0.1.1>}
          spids: [89]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP4DST)
          op: assign_op.Equal
          rhs: {<10.0.1.2>}
          spids: [92]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP4DST_PROXYARP1)
          op: assign_op.Equal
          rhs: {<10.0.1.3>}
          spids: [95]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IP4DST_PROXYARP2)
          op: assign_op.Equal
          rhs: {<10.0.1.4>}
          spids: [98]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DEBUG)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name DEBUG>
                suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<false>})
              )
            }
          spids: [102]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TIMEOUT)
          op: assign_op.Equal
          rhs: {<1>}
          spids: [109]
        )
      ]
    )
    (C {<atf_test_case>} {<arp_cache_expiration_5s>} {<cleanup>})
    (C {<atf_test_case>} {<arp_cache_expiration_10s>} {<cleanup>})
    (C {<atf_test_case>} {<arp_command>} {<cleanup>})
    (C {<atf_test_case>} {<arp_garp>} {<cleanup>})
    (C {<atf_test_case>} {<arp_cache_overwriting>} {<cleanup>})
    (C {<atf_test_case>} {<arp_proxy_arp_pub>} {<cleanup>})
    (C {<atf_test_case>} {<arp_proxy_arp_pubproxy>} {<cleanup>})
    (C {<atf_test_case>} {<arp_link_activation>} {<cleanup>})
    (C {<atf_test_case>} {<arp_static>} {<cleanup>})
    (command.ShFunction
      name: arp_cache_expiration_5s_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for ARP cache expiration (5s)'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)})
          ]
        )
    )
    (command.ShFunction
      name: arp_cache_expiration_10s_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for ARP cache expiration (10s)'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)})
          ]
        )
    )
    (command.ShFunction
      name: arp_command_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for arp_commands of arp(8)'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)})
          ]
        )
    )
    (command.ShFunction
      name: arp_garp_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for GARP'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)})
          ]
        )
    )
    (command.ShFunction
      name: arp_cache_overwriting_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for behavior of overwriting ARP caches'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)})
          ]
        )
    )
    (command.ShFunction
      name: arp_proxy_arp_pub_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for Proxy ARP (pub)'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)})
          ]
        )
    )
    (command.ShFunction
      name: arp_proxy_arp_pubproxy_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for Proxy ARP (pub proxy)'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)})
          ]
        )
    )
    (command.ShFunction
      name: arp_link_activation_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for activating a new MAC address'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)})
          ]
        )
    )
    (command.ShFunction
      name: arp_static_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for static ARP entries'>)})
            (C {<atf_set>} {(DQ <require.progs>)} {(DQ <rump_server>)})
          ]
        )
    )
    (command.ShFunction
      name: setup_dst_server
      body: 
        (BraceGroup
          children: [
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCKDST')} {<shmif0>} {<bus1>})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet>} {($ Id.VSub_DollarName '$IP4DST') <'/24'>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<up>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<-w>} {<10>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>} {<shmif0>})]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
          ]
        )
    )
    (command.ShFunction
      name: setup_src_server
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'keep='> ($ Id.VSub_Number '$1')})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.sysctl>} {<-w>} {<net.inet.arp.keep> <Id.Lit_Equals '='> ($ Id.VSub_DollarName '$keep')}
            )
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCKSRC')} {<shmif0>} {<bus1>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet>} {($ Id.VSub_DollarName '$IP4SRC') <'/24'>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<up>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<-w>} {<10>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>} {<shmif0>})]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-n>} {($ Id.VSub_DollarName '$IP4SRC')}
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.arp>} 
              {<-n>} {($ Id.VSub_DollarName '$IP4DST')}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_cache_expiration
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'arp_keep='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'bonus='> <2>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')})
            (C {<setup_dst_server>})
            (C {<setup_src_server>} {($ Id.VSub_DollarName '$arp_keep')})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping>} {<-n>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP4DST')}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-n>} {($ Id.VSub_DollarName '$IP4SRC')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-n>} {($ Id.VSub_DollarName '$IP4DST')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<sleep>} 
              {
                (word_part.ArithSub
                  anode: 
                    (arith_expr.Binary
                      op_id: Id.Arith_Plus
                      left: {($ Id.VSub_DollarName '$arp_keep')}
                      right: {($ Id.VSub_DollarName '$bonus')}
                    )
                )
              }
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-n>} {($ Id.VSub_DollarName '$IP4SRC')}
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.arp>} 
              {<-n>} {($ Id.VSub_DollarName '$IP4DST')}
            )
          ]
        )
    )
    (command.ShFunction
      name: arp_cache_expiration_5s_body
      body: 
        (BraceGroup
          children: [(C {<test_cache_expiration>} {<5>}) (C {<rump_server_destroy_ifaces>})]
        )
    )
    (command.ShFunction
      name: arp_cache_expiration_10s_body
      body: 
        (BraceGroup
          children: [(C {<test_cache_expiration>} {<10>}) (C {<rump_server_destroy_ifaces>})]
        )
    )
    (command.ShFunction
      name: arp_command_body
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'arp_keep='> <5>})
            (C {<local>} {<Id.Lit_VarLike 'bonus='> <2>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')})
            (C {<setup_dst_server>})
            (C {<setup_src_server>} {($ Id.VSub_DollarName '$arp_keep')})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-d>} {($ Id.VSub_DollarName '$IP4SRC')}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-s>} {<10.0.1.10>} 
              {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> 
                <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <10>
              }
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:10'>)} {<rump.arp>} {<-n>} {<10.0.1.10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.arp>} {<-n>} {<10.0.1.10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-d>} {<10.0.1.10>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.arp>} 
              {<-n>} {<10.0.1.10>}
            )
            (command.Simple
              words: [{<cat>} {<->}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<'./list'>}
                )
                (redir
                  op: <Id.Redir_DLessDash '<<-'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1212
                      stdin_parts: [
                        <'10.0.1.11 b2:a0:20:00:00:11\n'>
                        <'10.0.1.12 b2:a0:20:00:00:12\n'>
                        <'10.0.1.13 b2:a0:20:00:00:13\n'>
                        <'10.0.1.14 b2:a0:20:00:00:14\n'>
                        <'10.0.1.15 b2:a0:20:00:00:15\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-f>} {<'./list'>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:11'>)} {<rump.arp>} {<-n>} {<10.0.1.11>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.arp>} {<-n>} {<10.0.1.11>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:12'>)} {<rump.arp>} {<-n>} {<10.0.1.12>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.arp>} {<-n>} {<10.0.1.12>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:13'>)} {<rump.arp>} {<-n>} {<10.0.1.13>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.arp>} {<-n>} {<10.0.1.13>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:14'>)} {<rump.arp>} {<-n>} {<10.0.1.14>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.arp>} {<-n>} {<10.0.1.14>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:15'>)} {<rump.arp>} {<-n>} {<10.0.1.15>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.arp>} {<-n>} {<10.0.1.15>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <10.0.1.11>)} {<rump.arp>} {<-n>} {<-a>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <10.0.1.12>)} {<rump.arp>} {<-n>} {<-a>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <10.0.1.13>)} {<rump.arp>} {<-n>} {<-a>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <10.0.1.14>)} {<rump.arp>} {<-n>} {<-a>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <10.0.1.15>)} {<rump.arp>} {<-n>} {<-a>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-d>} {<-a>}
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.arp>} 
              {<-n>} {<10.0.1.11>}
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.arp>} 
              {<-n>} {<10.0.1.12>}
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.arp>} 
              {<-n>} {<10.0.1.13>}
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.arp>} 
              {<-n>} {<10.0.1.14>}
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.arp>} 
              {<-n>} {<10.0.1.15>}
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} {<rump.arp>} 
              {<-n>} {<10.0.1.1>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-s>} {<10.0.1.10>} 
              {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> 
                <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <10>
              } {<temp>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:10'>)} {<rump.arp>} {<-n>} {<10.0.1.10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<not-match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.arp>} {<-n>} {<10.0.1.10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<sleep>} 
              {
                (word_part.ArithSub
                  anode: 
                    (arith_expr.Binary
                      op_id: Id.Arith_Plus
                      left: {($ Id.VSub_DollarName '$arp_keep')}
                      right: {($ Id.VSub_DollarName '$bonus')}
                    )
                )
              }
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<rump_server_destroy_ifaces>})
          ]
        )
    )
    (command.ShFunction
      name: make_pkt_str_arpreq
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'target='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'sender='> ($ Id.VSub_Number '$2')})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: {(DQ <'> ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42:'>)}
                  spids: [1925]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$pkt') <' Request who-has '> 
                        ($ Id.VSub_DollarName '$target') <' tell '> ($ Id.VSub_DollarName '$sender') <', length 28'>
                      )
                    }
                  spids: [1931]
                )
              ]
            )
            (C {<echo>} {($ Id.VSub_DollarName '$pkt')})
          ]
        )
    )
    (command.ShFunction
      name: arp_garp_body
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'pkt='>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<rump_server_add_iface>} {($ Id.VSub_DollarName '$SOCKSRC')} {<shmif0>} {<bus1>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet>} {<'10.0.0.1/24'>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet>} {<'10.0.0.2/24'>} {<alias>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<up>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.ifconfig>} {<shmif0>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<sleep>} {<1>})
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{<shmif_dumpbus>} {<-p>} {<->} {<bus1>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  words: [{<tcpdump>} {<-n>} {<-e>} {<-r>} {<->}]
                  redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})]
                  do_fork: T
                )
              ]
              negated: F
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<make_pkt_str_arpreq>} {<10.0.0.1>} {<10.0.0.1>})
                      )
                    }
                  spids: [2094]
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {(DQ <'cat ./out |grep -q \''> ($ Id.VSub_DollarName '$pkt') <'\''>)}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<make_pkt_str_arpreq>} {<10.0.0.2>} {<10.0.0.2>})
                      )
                    }
                  spids: [2125]
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {(DQ <'cat ./out |grep -q \''> ($ Id.VSub_DollarName '$pkt') <'\''>)}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<-w>} {<10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet>} {<'10.0.0.3/24'>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<shmif0>} {<inet>} {<'10.0.0.4/24'>} {<alias>}
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{<shmif_dumpbus>} {<-p>} {<->} {<bus1>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  words: [{<tcpdump>} {<-n>} {<-e>} {<-r>} {<->}]
                  redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})]
                  do_fork: T
                )
              ]
              negated: F
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<make_pkt_str_arpreq>} {<10.0.0.3>} {<10.0.0.3>})
                      )
                    }
                  spids: [2236]
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {(DQ <'cat ./out |grep -q \''> ($ Id.VSub_DollarName '$pkt') <'\''>)}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<make_pkt_str_arpreq>} {<10.0.0.4>} {<10.0.0.4>})
                      )
                    }
                  spids: [2263]
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {(DQ <'cat ./out |grep -q \''> ($ Id.VSub_DollarName '$pkt') <'\''>)}
            )
            (C {<rump_server_destroy_ifaces>})
          ]
        )
    )
    (command.ShFunction
      name: arp_cache_overwriting_body
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'arp_keep='> <5>})
            (C {<local>} {<Id.Lit_VarLike 'bonus='> <2>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')})
            (C {<setup_dst_server>})
            (C {<setup_src_server>} {($ Id.VSub_DollarName '$arp_keep')})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-e>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'File exists'>)} {<rump.arp>} {<-s>} {($ Id.VSub_DollarName '$IP4SRC')} 
              {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> 
                <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <ff>
              }
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping>} {<-n>} {<-w>} {($ Id.VSub_DollarName '$TIMEOUT')} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP4DST')}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-s>} {($ Id.VSub_DollarName '$IP4DST')} 
              {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> 
                <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00>
              }
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:00'>)} {<rump.arp>} {<-n>} {($ Id.VSub_DollarName '$IP4DST')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.arp>} {<-n>} {($ Id.VSub_DollarName '$IP4DST')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-s>} {<10.0.1.10>} 
              {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> 
                <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <10>
              } {<temp>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:10'>)} {<rump.arp>} {<-n>} {<10.0.1.10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<not-match> <Id.Lit_Colon ':'> (SQ <permanent>)} {<rump.arp>} {<-n>} {<10.0.1.10>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-s>} {<10.0.1.10>} 
              {<b2> <Id.Lit_Colon ':'> <a0> <Id.Lit_Colon ':'> <20> <Id.Lit_Colon ':'> <00> 
                <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <ff>
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (SQ <'b2:a0:20:00:00:ff'>)} {<rump.arp>} {<-n>} {<10.0.1.10>}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<rump_server_destroy_ifaces>})
          ]
        )
    )
    (command.ShFunction
      name: make_pkt_str_arprep
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'ip='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'mac='> ($ Id.VSub_Number '$2')})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: {(DQ <'ethertype ARP (0x0806), length 42: '>)}
                  spids: [2711]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ <'Reply '> ($ Id.VSub_DollarName '$ip') <' is-at '> 
                        ($ Id.VSub_DollarName '$mac') <', length 28'>
                      )
                    }
                  spids: [2717]
                )
              ]
            )
            (C {<echo>} {($ Id.VSub_DollarName '$pkt')})
          ]
        )
    )
    (command.ShFunction
      name: make_pkt_str_garp
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'ip='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'mac='> ($ Id.VSub_Number '$2')})
            (C {<local>} {<Id.Lit_VarLike 'pkt='>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$mac') 
                        <' > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),'>
                      )
                    }
                  spids: [2758]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$pkt') <' length 42: Request who-has '> 
                        ($ Id.VSub_DollarName '$ip') <' tell '> ($ Id.VSub_DollarName '$ip') <', length 28'>
                      )
                    }
                  spids: [2765]
                )
              ]
            )
            (C {<echo>} {($ Id.VSub_DollarName '$pkt')})
          ]
        )
    )
    (command.ShFunction
      name: test_proxy_arp
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'arp_keep='> <5>})
            (C {<local>} {<Id.Lit_VarLike 'opts='>} {<Id.Lit_VarLike 'title='>} 
              {<Id.Lit_VarLike 'flags='>}
            )
            (C {<local>} {<Id.Lit_VarLike 'type='> ($ Id.VSub_Number '$1')})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')} {<tap>})
            (C {<setup_dst_server>})
            (C {<setup_src_server>} {($ Id.VSub_DollarName '$arp_keep')})
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.sysctl>} {<-w>} {<net.inet.ip.forwarding> <Id.Lit_Equals '='> <1>}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:macaddr_dst)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<get_macaddr>} {($ Id.VSub_DollarName '$SOCKDST')} {<shmif0>})
                      )
                    }
                  spids: [2861]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$type'))} 
                              {<Id.Lit_Equals '='>} {(DQ <pub>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:opts)
                          op: assign_op.Equal
                          rhs: {(DQ <pub>)}
                          spids: [2892]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:title)
                          op: assign_op.Equal
                          rhs: {(DQ <'permanent published'>)}
                          spids: [2898]
                        )
                      ]
                    )
                  ]
                  spids: [2872 2889]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:opts)
                      op: assign_op.Equal
                      rhs: {(DQ <'pub proxy'>)}
                      spids: [2907]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:title)
                      op: assign_op.Equal
                      rhs: {(SQ <'permanent published \\(proxy only\\)'>)}
                      spids: [2913]
                    )
                  ]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<tap1>} {<create>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<tap1>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP1') <'/24'>} {<up>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<-w>} {<10>}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} 
              {<rump.ping>} {<-n>} {<-w>} {<1>} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP1')}
            )
            (command.Simple
              words: [{<extract_new_packets>} {<bus1>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})]
              do_fork: T
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-s>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP1')} {($ Id.VSub_DollarName '$macaddr_dst')} 
              {($ Id.VSub_DollarName '$opts')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (DQ ($ Id.VSub_DollarName '$title'))} {<rump.arp>} {<-n>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP1')}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$type'))} 
                              {<Id.Lit_Equals '='>} {(DQ <pub>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} 
                      {<ignore>} {<rump.ping>} {<-n>} {<-w>} {<1>} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP1')}
                    )
                  ]
                  spids: [3117 3134]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
                  {<ignore>} {<rump.ping>} {<-n>} {<-w>} {<1>} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP1')}
                )
              ]
            )
            (command.Simple
              words: [{<extract_new_packets>} {<bus1>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})]
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {<'./out'>})]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt1)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (C {<make_pkt_str_arprep>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP1')} 
                            {($ Id.VSub_DollarName '$macaddr_dst')}
                          )
                      )
                    }
                  spids: [3229]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt2)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (C {<make_pkt_str_garp>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP1')} 
                            {($ Id.VSub_DollarName '$macaddr_dst')}
                          )
                      )
                    }
                  spids: [3239]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$type'))} 
                              {<Id.Lit_Equals '='>} {(DQ <pub>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
                      {
                        (DQ <'cat ./out |grep -q -e \''> ($ Id.VSub_DollarName '$pkt1') <'\' -e \''> 
                          ($ Id.VSub_DollarName '$pkt2') <'\''>
                        )
                      }
                    )
                  ]
                  spids: [3249 3266]
                )
              ]
              else_action: [
                (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
                  {
                    (DQ <'cat ./out |grep -q -e \''> ($ Id.VSub_DollarName '$pkt1') <'\' -e \''> 
                      ($ Id.VSub_DollarName '$pkt2') <'\''>
                    )
                  }
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-s>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP2')} {($ Id.VSub_DollarName '$macaddr_dst')} 
              {($ Id.VSub_DollarName '$opts')}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<match> <Id.Lit_Colon ':'> (DQ ($ Id.VSub_DollarName '$title'))} {<rump.arp>} {<-n>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP2')}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$DEBUG')})
                (C {<rump.netstat>} {<-nr>} {<-f>} {<inet>})
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<ignore>} 
              {<rump.ping>} {<-n>} {<-w>} {<1>} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP2')}
            )
            (command.Simple
              words: [{<extract_new_packets>} {<bus1>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})]
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {<'./out'>})]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (C {<make_pkt_str_arprep>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP2')} 
                            {($ Id.VSub_DollarName '$macaddr_dst')}
                          )
                      )
                    }
                  spids: [3463]
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {(DQ <'cat ./out |grep -q \''> ($ Id.VSub_DollarName '$pkt') <'\''>)}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<tap2>} {<create>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<tap2>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP2') <'/24'>} {<up>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.ifconfig>} 
              {<-w>} {<10>}
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping>} {<-n>} {<-w>} {<1>} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP4DST_PROXYARP2')}
            )
          ]
        )
    )
    (command.ShFunction
      name: arp_proxy_arp_pub_body
      body: (BraceGroup children:[(C {<test_proxy_arp>} {<pub>}) (C {<rump_server_destroy_ifaces>})])
    )
    (command.ShFunction
      name: arp_proxy_arp_pubproxy_body
      body: 
        (BraceGroup
          children: [(C {<test_proxy_arp>} {<pubproxy>}) (C {<rump_server_destroy_ifaces>})]
        )
    )
    (command.ShFunction
      name: arp_link_activation_body
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'arp_keep='> <5>})
            (C {<local>} {<Id.Lit_VarLike 'bonus='> <2>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')})
            (C {<setup_dst_server>})
            (C {<setup_src_server>} {($ Id.VSub_DollarName '$arp_keep')})
            (command.Simple
              words: [{<extract_new_packets>} {<bus1>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})]
              do_fork: T
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ifconfig>} {<shmif0>} {<link>} 
              {<b2> <Id.Lit_Colon ':'> <a1> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> 
                <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <01>
              }
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<sleep>} {<1>})
            (command.Simple
              words: [{<extract_new_packets>} {<bus1>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})]
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {<'./out'>})]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (C {<make_pkt_str_arpreq>} {($ Id.VSub_DollarName '$IP4SRC')} 
                            {($ Id.VSub_DollarName '$IP4SRC')}
                          )
                      )
                    }
                  spids: [3748]
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {(DQ <'cat ./out |grep -q \''> ($ Id.VSub_DollarName '$pkt') <'\''>)}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ifconfig>} {<shmif0>} {<link>} 
              {<b2> <Id.Lit_Colon ':'> <a1> <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <00> 
                <Id.Lit_Colon ':'> <00> <Id.Lit_Colon ':'> <02>
              } {<active>}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<sleep>} {<1>})
            (command.Simple
              words: [{<extract_new_packets>} {<bus1>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./out'>})]
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<cat>} {<'./out'>})]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pkt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (C {<make_pkt_str_arpreq>} {($ Id.VSub_DollarName '$IP4SRC')} 
                            {($ Id.VSub_DollarName '$IP4SRC')}
                          )
                      )
                    }
                  spids: [3844]
                )
              ]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-x>} 
              {
                (DQ <'cat ./out |grep \''> ($ Id.VSub_DollarName '$pkt') 
                  <'\' |grep -q \'b2:a1:00:00:00:02\''>
                )
              }
            )
            (C {<rump_server_destroy_ifaces>})
          ]
        )
    )
    (command.ShFunction
      name: arp_static_body
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'arp_keep='> <5>})
            (C {<local>} {<Id.Lit_VarLike 'macaddr_src='>})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<rump_server_start>} {($ Id.VSub_DollarName '$SOCKDST')})
            (C {<setup_dst_server>})
            (C {<setup_src_server>} {($ Id.VSub_DollarName '$arp_keep')})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:macaddr_src)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<get_macaddr>} {($ Id.VSub_DollarName '$SOCKSRC')} {<shmif0>})
                      )
                    }
                  spids: [3918]
                )
              ]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKDST')})
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.arp>} {<-s>} {($ Id.VSub_DollarName '$IP4SRC')} {($ Id.VSub_DollarName '$macaddr_src')}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<rump.arp>} {<-n>} {<-a>})]
            )
            (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> ($ Id.VSub_DollarName '$SOCKSRC')})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} 
              {<rump.ping>} {<-n>} {<-w>} {<1>} {<-c>} {<1>} {($ Id.VSub_DollarName '$IP4DST')}
            )
            (C {<rump_server_destroy_ifaces>})
          ]
        )
    )
    (command.ShFunction
      name: arp_cache_expiration_5s_cleanup
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})]
            )
            (C {<cleanup>})
          ]
        )
    )
    (command.ShFunction
      name: arp_cache_expiration_10s_cleanup
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})]
            )
            (C {<cleanup>})
          ]
        )
    )
    (command.ShFunction
      name: arp_command_cleanup
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})]
            )
            (C {<cleanup>})
          ]
        )
    )
    (command.ShFunction
      name: arp_garp_cleanup
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})]
            )
            (C {<cleanup>})
          ]
        )
    )
    (command.ShFunction
      name: arp_cache_overwriting_cleanup
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})]
            )
            (C {<cleanup>})
          ]
        )
    )
    (command.ShFunction
      name: arp_proxy_arp_pub_cleanup
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})]
            )
            (C {<cleanup>})
          ]
        )
    )
    (command.ShFunction
      name: arp_proxy_arp_pubproxy_cleanup
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})]
            )
            (C {<cleanup>})
          ]
        )
    )
    (command.ShFunction
      name: arp_link_activation_cleanup
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})]
            )
            (C {<cleanup>})
          ]
        )
    )
    (command.ShFunction
      name: arp_static_cleanup
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {($ Id.VSub_DollarName '$DEBUG')}) (C {<dump>})]
            )
            (C {<cleanup>})
          ]
        )
    )
    (command.ShFunction
      name: atf_init_test_cases
      body: 
        (BraceGroup
          children: [
            (C {<atf_add_test_case>} {<arp_cache_expiration_5s>})
            (C {<atf_add_test_case>} {<arp_cache_expiration_10s>})
            (C {<atf_add_test_case>} {<arp_command>})
            (C {<atf_add_test_case>} {<arp_garp>})
            (C {<atf_add_test_case>} {<arp_cache_overwriting>})
            (C {<atf_add_test_case>} {<arp_proxy_arp_pub>})
            (C {<atf_add_test_case>} {<arp_proxy_arp_pubproxy>})
            (C {<atf_add_test_case>} {<arp_link_activation>})
            (C {<atf_add_test_case>} {<arp_static>})
          ]
        )
    )
  ]
)