kernel-interface: Raise expires with a proto/SPI/dst tuple instead of reqid

This commit is contained in:
Martin Willi committed 2015-02-20 13:34:50 +01:00
1 parent 971a91685d
commit f81a949748
20 files changed
+124 -118

No files matched your search

+2 -4
View File
@@ -35,14 +35,12 @@ struct ipsec_event_listener_t {
/**
* Called when the lifetime of an IPsec SA expired
*
* @param reqid reqid of the expired SA
* @param protocol protocol of the expired SA
* @param spi spi of the expired SA
* @param dst destination address of expired SA
* @param hard TRUE if this is a hard expire, FALSE otherwise
*/
void (*expire)(u_int32_t reqid, u_int8_t protocol, u_int32_t spi,
bool hard);
void (*expire)(u_int8_t protocol, u_int32_t spi, host_t *dst, bool hard);
};
#endif /** IPSEC_EVENT_LISTENER_H_ @}*/
+23 -11
View File
@@ -65,23 +65,26 @@ typedef struct {
} type;
/**
* Reqid of the SA, if any
* Protocol of the SA
*/
u_int32_t reqid;
u_int8_t protocol;
/**
* SPI of the SA, if any
*/
u_int32_t spi;
/**
* SA destination address
*/
host_t *dst;
/**
* Additional data for specific event types
*/
union {
struct {
/** Protocol of the SA */
u_int8_t protocol;
/** TRUE in case of a hard expire */
bool hard;
} expire;
@@ -90,6 +93,15 @@ typedef struct {
} ipsec_event_t;
/**
* Destroy IPsec event data
*/
static void ipsec_event_destroy(ipsec_event_t *event)
{
event->dst->destroy(event->dst);
free(event);
}
/**
* Dequeue events and relay them to listeners
*/
@@ -110,31 +122,31 @@ static job_requeue_t handle_events(private_ipsec_event_relay_t *this)
case IPSEC_EVENT_EXPIRE:
if (current->expire)
{
current->expire(event->reqid, event->data.expire.protocol,
event->spi, event->data.expire.hard);
current->expire(event->protocol, event->spi, event->dst,
event->data.expire.hard);
}
break;
}
}
enumerator->destroy(enumerator);
this->lock->unlock(this->lock);
free(event);
ipsec_event_destroy(event);
return JOB_REQUEUE_DIRECT;
}
METHOD(ipsec_event_relay_t, expire, void,
private_ipsec_event_relay_t *this, u_int32_t reqid, u_int8_t protocol,
u_int32_t spi, bool hard)
private_ipsec_event_relay_t *this, u_int8_t protocol, u_int32_t spi,
host_t *dst, bool hard)
{
ipsec_event_t *event;
INIT(event,
.type = IPSEC_EVENT_EXPIRE,
.reqid = reqid,
.protocol = protocol,
.spi = spi,
.dst = dst->clone(dst),
.data = {
.expire = {
.protocol = protocol,
.hard = hard,
},
},
+3 -3
View File
@@ -38,13 +38,13 @@ struct ipsec_event_relay_t {
/**
* Raise an expire event.
*
* @param reqid reqid of the expired IPsec SA
* @param protocol protocol (e.g ESP) of the expired SA
* @param spi SPI of the expired SA
* @param dst destination address of expired SA
* @param hard TRUE for a hard expire, FALSE otherwise
*/
void (*expire)(ipsec_event_relay_t *this, u_int32_t reqid,
u_int8_t protocol, u_int32_t spi, bool hard);
void (*expire)(ipsec_event_relay_t *this, u_int8_t protocol, u_int32_t spi,
host_t *dst, bool hard);
/**
* Register a listener to events raised by this manager
+4 -4
View File
@@ -194,8 +194,8 @@ METHOD(ipsec_sa_t, expire, void,
if (!this->hard_expired)
{
this->hard_expired = TRUE;
ipsec->events->expire(ipsec->events, this->reqid, this->protocol,
this->spi, TRUE);
ipsec->events->expire(ipsec->events, this->protocol, this->spi,
this->dst, TRUE);
}
}
else
@@ -203,8 +203,8 @@ METHOD(ipsec_sa_t, expire, void,
if (!this->hard_expired && !this->soft_expired)
{
this->soft_expired = TRUE;
ipsec->events->expire(ipsec->events, this->reqid, this->protocol,
this->spi, FALSE);
ipsec->events->expire(ipsec->events, this->protocol, this->spi,
this->dst, FALSE);
}
}
}