experimental P2P-NAT-T for IKEv2 merged back from branch
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2007 Tobias Brunner
|
||||
* Copyright (C) 2005-2007 Martin Willi
|
||||
* Copyright (C) 2005 Jan Hutter
|
||||
* Hochschule fuer Technik Rapperswil
|
||||
@@ -175,6 +176,24 @@ struct private_peer_cfg_t {
|
||||
* virtual IP to use remotly
|
||||
*/
|
||||
host_t *other_virtual_ip;
|
||||
|
||||
#ifdef P2P
|
||||
/**
|
||||
* Is this a mediation connection?
|
||||
*/
|
||||
bool p2p_mediation;
|
||||
|
||||
/**
|
||||
* Name of the mediation connection to mediate through
|
||||
*/
|
||||
peer_cfg_t *p2p_mediated_by;
|
||||
|
||||
/**
|
||||
* ID of our peer at the mediation server (= leftid of the peer's conn with
|
||||
* the mediation server)
|
||||
*/
|
||||
identification_t *peer_id;
|
||||
#endif /* P2P */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -413,6 +432,36 @@ static host_t* get_other_virtual_ip(private_peer_cfg_t *this, host_t *suggestion
|
||||
return suggestion->clone(suggestion);
|
||||
}
|
||||
|
||||
#ifdef P2P
|
||||
/**
|
||||
* Implementation of peer_cfg_t.is_mediation.
|
||||
*/
|
||||
static bool is_mediation(private_peer_cfg_t *this)
|
||||
{
|
||||
return this->p2p_mediation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of peer_cfg_t.get_mediated_by.
|
||||
*/
|
||||
static peer_cfg_t* get_mediated_by(private_peer_cfg_t *this)
|
||||
{
|
||||
if (this->p2p_mediated_by) {
|
||||
this->p2p_mediated_by->get_ref(this->p2p_mediated_by);
|
||||
return this->p2p_mediated_by;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of peer_cfg_t.get_peer_id.
|
||||
*/
|
||||
static identification_t* get_peer_id(private_peer_cfg_t *this)
|
||||
{
|
||||
return this->peer_id;
|
||||
}
|
||||
#endif /* P2P */
|
||||
|
||||
/**
|
||||
* Implements peer_cfg_t.get_ref.
|
||||
*/
|
||||
@@ -436,6 +485,10 @@ static void destroy(private_peer_cfg_t *this)
|
||||
DESTROY_IF(this->other_ca);
|
||||
DESTROY_IF(this->my_virtual_ip);
|
||||
DESTROY_IF(this->other_virtual_ip);
|
||||
#ifdef P2P
|
||||
DESTROY_IF(this->p2p_mediated_by);
|
||||
DESTROY_IF(this->peer_id);
|
||||
#endif /* P2P */
|
||||
ietfAttr_list_destroy(this->groups);
|
||||
free(this->name);
|
||||
free(this);
|
||||
@@ -454,7 +507,9 @@ peer_cfg_t *peer_cfg_create(char *name, u_int ike_version, ike_cfg_t *ike_cfg,
|
||||
u_int32_t rekeytime, u_int32_t jitter,
|
||||
bool reauth, bool mobike,
|
||||
u_int32_t dpd_delay, dpd_action_t dpd_action,
|
||||
host_t *my_virtual_ip, host_t *other_virtual_ip)
|
||||
host_t *my_virtual_ip, host_t *other_virtual_ip,
|
||||
bool p2p_mediation, peer_cfg_t *p2p_mediated_by,
|
||||
identification_t *peer_id)
|
||||
{
|
||||
private_peer_cfg_t *this = malloc_thing(private_peer_cfg_t);
|
||||
|
||||
@@ -483,6 +538,11 @@ peer_cfg_t *peer_cfg_create(char *name, u_int ike_version, ike_cfg_t *ike_cfg,
|
||||
this->public.get_other_virtual_ip = (host_t* (*) (peer_cfg_t *, host_t *))get_other_virtual_ip;
|
||||
this->public.get_ref = (void(*)(peer_cfg_t *))get_ref;
|
||||
this->public.destroy = (void(*)(peer_cfg_t *))destroy;
|
||||
#ifdef P2P
|
||||
this->public.is_mediation = (bool (*) (peer_cfg_t *))is_mediation;
|
||||
this->public.get_mediated_by = (peer_cfg_t* (*) (peer_cfg_t *))get_mediated_by;
|
||||
this->public.get_peer_id = (identification_t* (*) (peer_cfg_t *))get_peer_id;
|
||||
#endif /* P2P */
|
||||
|
||||
/* apply init values */
|
||||
this->name = strdup(name);
|
||||
@@ -509,6 +569,11 @@ peer_cfg_t *peer_cfg_create(char *name, u_int ike_version, ike_cfg_t *ike_cfg,
|
||||
this->my_virtual_ip = my_virtual_ip;
|
||||
this->other_virtual_ip = other_virtual_ip;
|
||||
this->refcount = 1;
|
||||
#ifdef P2P
|
||||
this->p2p_mediation = p2p_mediation;
|
||||
this->p2p_mediated_by = p2p_mediated_by;
|
||||
this->peer_id = peer_id;
|
||||
#endif /* P2P */
|
||||
|
||||
return &this->public;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2007 Tobias Brunner
|
||||
* Copyright (C) 2005-2007 Martin Willi
|
||||
* Copyright (C) 2005 Jan Hutter
|
||||
* Hochschule fuer Technik Rapperswil
|
||||
@@ -314,6 +315,37 @@ struct peer_cfg_t {
|
||||
* @return clone of an IP to use
|
||||
*/
|
||||
host_t* (*get_other_virtual_ip) (peer_cfg_t *this, host_t *suggestion);
|
||||
|
||||
#ifdef P2P
|
||||
/**
|
||||
* @brief Is this a mediation connection?
|
||||
*
|
||||
* @param this peer_cfg
|
||||
* @return TRUE, if this is a mediation connection
|
||||
*/
|
||||
bool (*is_mediation) (peer_cfg_t *this);
|
||||
|
||||
/**
|
||||
* @brief Get peer_cfg of the connection this one is mediated through.
|
||||
*
|
||||
* @param this peer_cfg
|
||||
* @return reference to peer_cfg of the mediation connection
|
||||
*/
|
||||
peer_cfg_t* (*get_mediated_by) (peer_cfg_t *this);
|
||||
|
||||
/**
|
||||
* @brief Get the id of the other peer at the mediation server.
|
||||
*
|
||||
* This is the leftid of the peer's connection with the mediation server.
|
||||
*
|
||||
* If it is not configured, it is assumed to be the same as the right id
|
||||
* of this connection.
|
||||
*
|
||||
* @param this peer_cfg
|
||||
* @return the id of the other peer
|
||||
*/
|
||||
identification_t* (*get_peer_id) (peer_cfg_t *this);
|
||||
#endif /* P2P */
|
||||
|
||||
/**
|
||||
* @brief Get a new reference.
|
||||
@@ -370,6 +402,9 @@ struct peer_cfg_t {
|
||||
* @param dpd_action what to do with CHILD_SAs when detected a dead peer
|
||||
* @param my_virtual_ip virtual IP for local host, or NULL
|
||||
* @param other_virtual_ip virtual IP for remote host, or NULL
|
||||
* @param p2p_mediation TRUE if this is a mediation connection
|
||||
* @param p2p_mediated_by name of the mediation connection to mediate through
|
||||
* @param peer_id ID that identifies our peer at the mediation server
|
||||
* @return peer_cfg_t object
|
||||
*
|
||||
* @ingroup config
|
||||
@@ -383,6 +418,8 @@ peer_cfg_t *peer_cfg_create(char *name, u_int ikev_version, ike_cfg_t *ike_cfg,
|
||||
u_int32_t rekeytime, u_int32_t jitter,
|
||||
bool reauth, bool mobike,
|
||||
u_int32_t dpd_delay, dpd_action_t dpd_action,
|
||||
host_t *my_virtual_ip, host_t *other_virtual_ip);
|
||||
host_t *my_virtual_ip, host_t *other_virtual_ip,
|
||||
bool p2p_mediation, peer_cfg_t *p2p_mediated_by,
|
||||
identification_t *peer_id);
|
||||
|
||||
#endif /* PEER_CFG_H_ */
|
||||
|
||||
Reference in New Issue
Block a user