(List (Com {[LIT_CHARS set]} {[LIT_CHARS -x]}) (= scope= flags=0 words=[] bindings=[('DEV', {[LIT_CHARS eth1]})]) (= scope= flags=0 words=[] bindings=[('TAP1', {[LIT_CHARS tap1]})]) (= scope= flags=0 words=[] bindings=[('TAP2', {[LIT_CHARS tap2]})]) (= scope= flags=0 words=[] bindings=[('IP', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS ifconfig]} {[VarSub DEV]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[SQ ]}) )]]})]) (= scope= flags=0 words=[] bindings=[('MASK', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS ifconfig]} {[VarSub DEV]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[SQ ]}) )]]})]) (= scope= flags=0 words=[] bindings=[('BCAST', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS ifconfig]} {[VarSub DEV]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[SQ ]}) )]]})]) (= scope= flags=0 words=[] bindings=[('NET', {[ComSub (Pipeline (Com {[LIT_CHARS route]} {[LIT_CHARS -n]}) (Com {[LIT_CHARS grep]} {[VarSub DEV]}) (Com {[LIT_CHARS head]} {[LIT_CHARS -1]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('DIR', {[ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub 0]]})]})]) (Case to_match={[DQ [VarSub MASK]]}, pat_word_list=[[{[LIT_CHARS 255.255.255.0]}], [{[LIT_CHARS 255.255.0.0]}], [{[LIT_CHARS 255.0.0.0]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('MASK_BITS', {[LIT_CHARS 24]})]) (= scope= flags=0 words=[] bindings=[('MASK_BITS', {[LIT_CHARS 16]})]) (= scope= flags=0 words=[] bindings=[('MASK_BITS', {[LIT_CHARS 8]})]) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Unknown network mask"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=0 words=[] bindings=[('SHADOWIP', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub IP]}) (Com {[LIT_CHARS sed]} {[SQ ]}) )][LIT_CHARS 253]]})]) (= scope= flags=0 words=[] bindings=[('SHADOWCONF', {[DQ [LIT_CHARS /tmp/shadowconf.][VarSub $]]})]) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "lxc.utsname = shadow\n"][LIT_CHARS "lxc.network.type = veth\n"][LIT_CHARS "lxc.network.link = shadowbr\n"][LIT_CHARS "lxc.network.flags = up\n"][LIT_CHARS "lxc.network.ipv4 = "][VarSub SHADOWIP][LIT_CHARS /][VarSub MASK_BITS][LIT_CHARS "\n"][LIT_CHARS "lxc.network.ipv4.gateway = "][VarSub IP][LIT_CHARS "\n"][LIT_CHARS "lxc.kmsg = 0\n"]]} 0), (FilenameRedirectNode filename={[VarSub SHADOWCONF]} "> 1), > ) (Com {[LIT_CHARS trap]} {[DQ [LIT_CHARS "rm "][VarSub SHADOWCONF]]} {[LIT_CHARS SIGINT]} {[LIT_CHARS SIGTERM]} {[LIT_CHARS EXIT]}) (= scope= flags=0 words=[] bindings=[('LXC_COMMON', {[DQ [LIT_CHARS "-n shadow -f "][VarSub SHADOWCONF]]})]) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS start]}], [{[LIT_CHARS stop]}], [{[LIT_OTHER "*"]}]] (List (Com {[LIT_CHARS openvpn]} {[LIT_CHARS --mktun]} {[LIT_CHARS --dev]} {[VarSub TAP1]}) (Com {[LIT_CHARS openvpn]} {[LIT_CHARS --mktun]} {[LIT_CHARS --dev]} {[VarSub TAP2]}) (Com {[LIT_CHARS ifconfig]} {[VarSub TAP1]} {[VarSub IP]} {[LIT_CHARS netmask]} {[VarSub MASK]} {[LIT_CHARS broadcast]} {[VarSub BCAST]} {[LIT_CHARS up]}) (Com {[LIT_CHARS ifconfig]} {[VarSub TAP2]} {[LIT_CHARS up]}) (Com {[LIT_CHARS route]} {[LIT_CHARS add]} {[LIT_CHARS -net]} {[VarSub NET]} {[LIT_CHARS netmask]} {[VarSub MASK]} {[VarSub TAP1]}) (Com {[LIT_CHARS brctl]} {[LIT_CHARS addbr]} {[LIT_CHARS shadowbr]}) (Com {[LIT_CHARS brctl]} {[LIT_CHARS addif]} {[LIT_CHARS shadowbr]} {[VarSub TAP2]} {[VarSub DEV]}) (Com {[LIT_CHARS ifconfig]} {[LIT_CHARS shadowbr]} {[LIT_CHARS up]}) (Com {[LIT_CHARS lxc-create]} {[VarSub LXC_COMMON]}) (Fork (Com {[LIT_CHARS lxc-execute]} {[VarSub LXC_COMMON]} {[LIT_CHARS --]} {[DQ [VarSub DIRNAME][LIT_CHARS "/netload.py listen 9999"]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} 0), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Now run: tap_proxy "][VarSub TAP1][LIT_CHARS " "][VarSub TAP2][LIT_CHARS " wifi"]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Data sink/source is available on "][VarSub SHADOWIP][LIT_CHARS " 9999"]]}) ) (List (Com {[LIT_CHARS lxc-kill]} {[LIT_CHARS -n]} {[LIT_CHARS shadow]}) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]}) (Com {[LIT_CHARS lxc-destroy]} {[VarSub LXC_COMMON]}) (Com {[LIT_CHARS ifconfig]} {[VarSub TAP1]} {[LIT_CHARS down]}) (Com {[LIT_CHARS ifconfig]} {[VarSub TAP2]} {[LIT_CHARS down]}) (Com {[LIT_CHARS ifconfig]} {[LIT_CHARS shadowbr]} {[LIT_CHARS down]}) (Com {[LIT_CHARS brctl]} {[LIT_CHARS delbr]} {[LIT_CHARS shadowbr]}) (Com {[LIT_CHARS openvpn]} {[LIT_CHARS --rmtun]} {[LIT_CHARS --dev]} {[VarSub TAP1]}) (Com {[LIT_CHARS openvpn]} {[LIT_CHARS --rmtun]} {[LIT_CHARS --dev]} {[VarSub TAP2]}) ) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub 0][LIT_CHARS " start/stop"]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Read "][VarSub 0][LIT_CHARS " for more information."]]}) ) ) )