def tunnel_new(self, to_rt_uuid, tunnel_type, policy):
        try:
            self.network.link_check(to_rt_uuid)
        except:
            # Need to join the other peer first
            # Create a tunnel object which is not inserted on a link yet
            tunnel = CalvinTunnel(self.network.links, self.tunnels, None, tunnel_type, policy, rt_id=self.node.id)
            self.network.link_request(to_rt_uuid, CalvinCB(self._tunnel_link_request_finished, tunnel=tunnel, to_rt_uuid=to_rt_uuid, tunnel_type=tunnel_type, policy=policy))
            return tunnel

        # Do we have a tunnel already?
        tunnel = self._get_tunnel(to_rt_uuid, tunnel_type = tunnel_type)
        if tunnel != None:
            return tunnel

        # Create new tunnel and send request to peer
        tunnel = CalvinTunnel(self.network.links, self.tunnels, to_rt_uuid, tunnel_type, policy, rt_id=self.node.id)
        self._tunnel_new_msg(tunnel, to_rt_uuid, tunnel_type, policy)
        return tunnel
Either create a new tunnel (request side), with status pending,
dataset/ETHPy150Open EricssonResearch/calvin-base/calvin/runtime/north/calvin_proto.py/CalvinProto.tunnel_new