Merge with HEAD, close aly's branch.
authorClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Sun, 4 Sep 2011 17:31:46 +0000 (19:31 +0200)
committerClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Sun, 4 Sep 2011 17:31:46 +0000 (19:31 +0200)
1  2 
src/nepi/testbeds/planetlab/tunproto.py
src/nepi/util/tunchannel.py

@@@ -26,7 -26,6 +26,7 @@@ class TunProtoBase(object)
          self.port = 15000
          self.mode = 'pl-tun'
          self.key = key
 +        self.cross_slice = False
          
          self.home_path = home_path
         
          local_snat = local.snat
          local_txq  = local.txqueuelen
          local_p2p  = local.pointopoint
 -        local_cipher = local.tun_cipher
 -        local_mcast = local.multicast
 -        local_bwlim = local.bwlimit
 +        local_cipher=local.tun_cipher
 +        local_mcast= local.multicast
 +        local_bwlim= local.bwlimit
 +        local_mcastfwd = local.multicast_forwarder
          
          if not local_p2p and hasattr(peer, 'address'):
              local_p2p = peer.address
              "-t", str(check_proto),
              "-A", str(local_addr),
              "-M", str(local_mask),
 -            "-C", str(local_cipher)]
 +            "-C", str(local_cipher),
 +            ]
          
          if check_proto == 'fd':
              passfd_arg = str(peer_addr)
                  "--pass-fd", passfd_arg
              ])
          elif check_proto == 'gre':
 +            if self.cross_slice:
 +                args.extend([
 +                    "-K", str(self.key.strip('='))
 +                ])
 +
              args.extend([
 -                "-K", str(min(local_port, peer_port)),
                  "-a", str(peer_addr),
              ])
          # both udp and tcp
              args.append("-N")
          elif local_cap == 'pcap':
              args.extend(('-c','pcap'))
 -        if local_mcast:
 -            args.append("--multicast")
          if local_bwlim:
              args.extend(("-b",str(local_bwlim*1024)))
          if filter_module:
              args.extend(("--filter", filter_module))
          if filter_args:
              args.extend(("--filter-args", filter_args))
 +        if local_mcast and local_mcastfwd:
 +            args.extend(("--multicast-forwarder", local_mcastfwd))
  
          self._logger.info("Starting %s", self)
          
              
              # Connected?
              (out,err),proc = server.eintr_retry(server.popen_ssh_command)(
 -                "cd %(home)s ; grep -c Connected capture" % dict(
 +                "cd %(home)s ; grep -a -c Connected capture" % dict(
                      home = server.shell_escape(self.home_path)),
                  host = local.node.hostname,
                  port = None,
  
              # At least listening?
              (out,err),proc = server.eintr_retry(server.popen_ssh_command)(
 -                "cd %(home)s ; grep -c Listening capture" % dict(
 +                "cd %(home)s ; grep -a -c Listening capture" % dict(
                      home = server.shell_escape(self.home_path)),
                  host = local.node.hostname,
                  port = None,
              # Inspect the trace to check the assigned iface
              local = self.local()
              if local:
 -                cmd = "cd %(home)s ; grep 'Using tun:' capture | head -1" % dict(
 +                cmd = "cd %(home)s ; grep -a 'Using tun:' capture | head -1" % dict(
                              home = server.shell_escape(self.home_path))
                  for spin in xrange(30):
                      (out,err),proc = server.eintr_retry(server.popen_ssh_command)(
                          self._logger.debug("if_name: %r does not match expected pattern from cmd %s", out, cmd)
                      else:
                          self._logger.debug("if_name: empty output from cmd %s", cmd)
-                     time.sleep(1)
+                     time.sleep(3)
                  else:
                      self._logger.warn("if_name: Could not get interface name")
          return self._if_name
@@@ -4,6 -4,7 +4,7 @@@ import o
  import struct
  import socket
  import threading
+ import traceback
  import errno
  import fcntl
  import random
@@@ -119,15 -120,15 +120,15 @@@ def _pullPacket(buf, ether_mode=False, 
              rv = buf.popleft()
          return rv
  
 -def etherStrip(buf):
 +def etherStrip(buf, buffer=buffer, len=len):
      if len(buf) < 14:
          return ""
      if buf[12:14] == '\x08\x10' and buf[16:18] == '\x08\x00':
          # tagged ethernet frame
 -        return buf[18:]
 +        return buffer(buf, 18)
      elif buf[12:14] == '\x08\x00':
          # untagged ethernet frame
 -        return buf[14:]
 +        return buffer(buf, 14)
      else:
          return ""
  
@@@ -354,6 -355,7 +355,7 @@@ def tun_fwd(tun, remote, with_pi, ether
                  # just retry
                  continue
              else:
+                 traceback.print_exc(file=sys.stderr)
                  raise
  
          # check for errors
@@@ -679,7 -681,9 +681,9 @@@ def tcp_establish(TERMINATE, local_addr
    
      end = False
      sock = None
-     while not end:
+     for i in xrange(0, 50):
+         if end:
+             break
          if TERMINATE:
              raise OSError, "Killed"
          hand = str(random.randint(1, 6))