# Copyright (C) 2013 INRIA
#
# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation;
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# Author: Alina Quereilhac <alina.quereilhac@inria.fr>
from nepi.execution.attribute import Attribute, Flags, Types
-from nepi.execution.resource import clsinit_copy, ResourceState, \
- reschedule_delay
+from nepi.execution.resource import clsinit_copy, ResourceState
from nepi.resources.linux.tunnel import LinuxTunnel
from nepi.util.sshfuncs import ProcStatus
from nepi.util.timefuncs import tnow, tdiffsec
@clsinit_copy
class LinuxGRETunnel(LinuxTunnel):
- _rtype = "LinuxGRETunnel"
+ _rtype = "linux::GRETunnel"
_help = "Constructs a tunnel between two Linux endpoints using a UDP connection "
- _backend = "linux"
def log_message(self, msg):
return " guid %d - GRE tunnel %s - %s - %s " % (self.guid,
connected = []
for guid in self.connections:
rm = self.ec.get_resource(guid)
- if hasattr(rm, "gre_connect_command"):
+ if hasattr(rm, "gre_connect"):
connected.append(rm)
return connected
# Return the command to execute to initiate the connection to the
# other endpoint
connection_run_home = self.run_home(endpoint)
- gre_connect_command = endpoint.gre_connect_command(
- remote_endpoint, connection_run_home)
-
- # upload command to connect.sh script
- shfile = os.path.join(self.app_home(endpoint), "gre-connect.sh")
- endpoint.node.upload(gre_connect_command,
- shfile,
- text = True,
- overwrite = False)
-
- # invoke connect script
- cmd = "bash %s" % shfile
- (out, err), proc = endpoint.node.run(cmd, self.run_home(endpoint))
-
- # check if execution errors occurred
- msg = " Failed to connect endpoints "
-
- if proc.poll() or err:
- self.error(msg, out, err)
- raise RuntimeError, msg
-
- # Wait for pid file to be generated
- pid, ppid = endpoint.node.wait_pid(self.run_home(endpoint))
-
- # If the process is not running, check for error information
- # on the remote machine
- if not pid or not ppid:
- (out, err), proc = endpoint.node.check_errors(self.run_home(endpoint))
- # Out is what was written in the stderr file
- if err:
- msg = " Failed to start command '%s' " % command
- self.error(msg, out, err)
- raise RuntimeError, msg
-
- # After creating the TAP, the pl-vif-create.py script
- # will write the name of the TAP to a file. We wait until
- # we can read the interface name from the file.
- vif_name = endpoint.wait_vif_name()
- endpoint.set("deviceName", vif_name)
-
- # Wait if name
- return True
+ connection_app_home = self.app_home(endpoint)
+ data = endpoint.gre_connect(remote_endpoint,
+ connection_app_home,
+ connection_run_home)
+ return data
def establish_connection(self, endpoint, remote_endpoint, data):
pass
m = re.search("(\d+)% packet loss", str(out))
if not m or int(m.groups()[0]) == 100:
- msg = " Erroro establishing GRE Tunnel"
+ msg = " Error establishing GRE Tunnel"
self.error(msg, out, err)
- raise RuntimeError, msg
+ raise RuntimeError(msg)
def terminate_connection(self, endpoint, remote_endpoint):
pass