diff options
Diffstat (limited to 'src/charon/processing')
-rw-r--r-- | src/charon/processing/jobs/roam_job.c | 11 | ||||
-rw-r--r-- | src/charon/processing/jobs/roam_job.h | 3 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/charon/processing/jobs/roam_job.c b/src/charon/processing/jobs/roam_job.c index c5acad60c..3b5cd0ed2 100644 --- a/src/charon/processing/jobs/roam_job.c +++ b/src/charon/processing/jobs/roam_job.c @@ -39,6 +39,11 @@ struct private_roam_job_t { * public roam_job_t interface */ roam_job_t public; + + /** + * has the address list changed, or the routing only? + */ + bool address; }; /** @@ -75,7 +80,7 @@ static void execute(private_roam_job_t *this) ike_sa = charon->ike_sa_manager->checkout(charon->ike_sa_manager, id); if (ike_sa) { - if (ike_sa->roam(ike_sa) == DESTROY_ME) + if (ike_sa->roam(ike_sa, this->address) == DESTROY_ME) { charon->ike_sa_manager->checkin_and_destroy( charon->ike_sa_manager, ike_sa); @@ -95,13 +100,15 @@ static void execute(private_roam_job_t *this) /* * Described in header */ -roam_job_t *roam_job_create() +roam_job_t *roam_job_create(bool address) { private_roam_job_t *this = malloc_thing(private_roam_job_t); this->public.job_interface.destroy = (void (*) (job_t *)) destroy; this->public.job_interface.execute = (void (*) (job_t *)) execute; this->public.job_interface.destroy = (void (*) (job_t *)) destroy; + + this->address = address; return &this->public; } diff --git a/src/charon/processing/jobs/roam_job.h b/src/charon/processing/jobs/roam_job.h index 23d374ccb..293b09f08 100644 --- a/src/charon/processing/jobs/roam_job.h +++ b/src/charon/processing/jobs/roam_job.h @@ -50,11 +50,12 @@ struct roam_job_t { /** * @brief Creates a job to inform IKE_SAs about an updated address list. * + * @param address TRUE if address list changed, FALSE if routing changed * @return initiate_ike_sa_job_t object * * @ingroup jobs */ -roam_job_t *roam_job_create(); +roam_job_t *roam_job_create(bool address); #endif /*ROAM_JOB_H_*/ |