From: Tobias Brunner Date: Wed, 19 May 2021 13:11:53 +0000 (+0200) Subject: ike-sa: Accept optional CPU ID when initiating CHILD_SAs X-Git-Tag: 6.0.2dr1~5^2~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2082fa5dd2bd5c24fa3f1f785367b37b5c6d71aa;p=thirdparty%2Fstrongswan.git ike-sa: Accept optional CPU ID when initiating CHILD_SAs --- diff --git a/src/libcharon/sa/ike_sa.h b/src/libcharon/sa/ike_sa.h index c6fa62ff3e..e3d4098a04 100644 --- a/src/libcharon/sa/ike_sa.h +++ b/src/libcharon/sa/ike_sa.h @@ -406,6 +406,8 @@ extern enum_name_t *ike_sa_state_names; struct child_init_args_t { /** Reqid to use for CHILD_SA, 0 to assign automatically */ uint32_t reqid; + /** Optional CPU ID to use for CHILD_SA, CPU_ID_MAX if unspecified */ + uint32_t cpu; /** Optional source of triggering packet */ traffic_selector_t *src; /** Optional destination of triggering packet */ diff --git a/src/libcharon/sa/ikev1/tasks/quick_delete.c b/src/libcharon/sa/ikev1/tasks/quick_delete.c index 0da50ed405..265d36c396 100644 --- a/src/libcharon/sa/ikev1/tasks/quick_delete.c +++ b/src/libcharon/sa/ikev1/tasks/quick_delete.c @@ -152,6 +152,7 @@ static status_t delete_child(private_quick_delete_t *this, { child_init_args_t args = { .reqid = child_sa->get_reqid_ref(child_sa), + .cpu = child_sa->get_cpu(child_sa), }; action_t action; diff --git a/src/libcharon/sa/ikev2/task_manager_v2.c b/src/libcharon/sa/ikev2/task_manager_v2.c index d46559182f..0f3b937fdd 100644 --- a/src/libcharon/sa/ikev2/task_manager_v2.c +++ b/src/libcharon/sa/ikev2/task_manager_v2.c @@ -2208,6 +2208,8 @@ static void trigger_mbb_reauth(private_task_manager_t *this) child_sa->get_mark(child_sa, TRUE).value, child_sa->get_mark(child_sa, FALSE).value); child_create->use_label(child_create, child_sa->get_label(child_sa)); + child_create->use_per_cpu(child_create, child_sa->use_per_cpu(child_sa), + child_sa->get_cpu(child_sa)); /* interface IDs are not migrated as the new CHILD_SAs on old and new * IKE_SA go though regular updown events */ new->queue_task(new, &child_create->task); @@ -2387,6 +2389,8 @@ METHOD(task_manager_t, queue_child, void, charon->kernel->release_reqid(charon->kernel, reqid); } task->use_label(task, child_sa->get_label(child_sa)); + task->use_per_cpu(task, child_sa->use_per_cpu(child_sa), + child_sa->get_cpu(child_sa)); } else if (args) { @@ -2394,6 +2398,7 @@ METHOD(task_manager_t, queue_child, void, args->dst, args->seq); task->use_reqid(task, args->reqid); task->use_label(task, args->label); + task->use_per_cpu(task, FALSE, args->cpu); } else { diff --git a/src/libcharon/sa/ikev2/tasks/child_delete.c b/src/libcharon/sa/ikev2/tasks/child_delete.c index 7987bdd534..c319d8e25b 100644 --- a/src/libcharon/sa/ikev2/tasks/child_delete.c +++ b/src/libcharon/sa/ikev2/tasks/child_delete.c @@ -171,6 +171,8 @@ static void queue_child_create(ike_sa_t *ike_sa, child_sa_t *child_sa) charon->kernel->release_reqid(charon->kernel, reqid); } child_create->use_label(child_create, child_sa->get_label(child_sa)); + child_create->use_per_cpu(child_create, child_sa->use_per_cpu(child_sa), + child_sa->get_cpu(child_sa)); ike_sa->queue_task(ike_sa, (task_t*)child_create); } diff --git a/src/libcharon/sa/trap_manager.c b/src/libcharon/sa/trap_manager.c index 0855e55172..c550695a46 100644 --- a/src/libcharon/sa/trap_manager.c +++ b/src/libcharon/sa/trap_manager.c @@ -643,6 +643,7 @@ METHOD(trap_manager_t, acquire, void, { child_init_args_t args = { .reqid = allocated_reqid, + .cpu = CPU_ID_MAX, .src = data->src, .dst = data->dst, .label = data->label,