diff --git a/src/libipsec/ipsec_sa.c b/src/libipsec/ipsec_sa.c index cccd16404..66852259c 100644 --- a/src/libipsec/ipsec_sa.c +++ b/src/libipsec/ipsec_sa.c @@ -95,6 +95,20 @@ METHOD(ipsec_sa_t, get_destination, host_t*, return this->dst; } +METHOD(ipsec_sa_t, set_source, void, + private_ipsec_sa_t *this, host_t *addr) +{ + this->src->destroy(this->src); + this->src = addr->clone(addr); +} + +METHOD(ipsec_sa_t, set_destination, void, + private_ipsec_sa_t *this, host_t *addr) +{ + this->dst->destroy(this->dst); + this->dst = addr->clone(addr); +} + METHOD(ipsec_sa_t, get_spi, u_int32_t, private_ipsec_sa_t *this) { @@ -202,6 +216,8 @@ ipsec_sa_t *ipsec_sa_create(u_int32_t spi, host_t *src, host_t *dst, .destroy = _destroy, .get_source = _get_source, .get_destination = _get_destination, + .set_source = _set_source, + .set_destination = _set_destination, .get_spi = _get_spi, .get_reqid = _get_reqid, .get_protocol = _get_protocol, diff --git a/src/libipsec/ipsec_sa.h b/src/libipsec/ipsec_sa.h index 5fd03b6e4..271e0129f 100644 --- a/src/libipsec/ipsec_sa.h +++ b/src/libipsec/ipsec_sa.h @@ -51,6 +51,20 @@ struct ipsec_sa_t { */ host_t *(*get_destination)(ipsec_sa_t *this); + /** + * Set the source address for this SA + * + * @param addr source address of this SA (gets cloned) + */ + void (*set_source)(ipsec_sa_t *this, host_t *addr); + + /** + * Set the destination address for this SA + * + * @param addr destination address of this SA (gets cloned) + */ + void (*set_destination)(ipsec_sa_t *this, host_t *addr); + /** * Get the SPI for this SA *