diff options
author | Filip Tehlar <ftehlar@cisco.com> | 2020-03-02 21:49:48 +0000 |
---|---|---|
committer | Neale Ranns <nranns@cisco.com> | 2020-03-04 08:23:50 +0000 |
commit | b979f5e3a6d99d5e9a37a9a086004feaa8fd15e5 (patch) | |
tree | ebaf5be057981e380af82166efa82bd6db9b85aa /src/plugins/ikev2 | |
parent | 27518c2ffd0ef75e973a64870da0e3339f39ccce (diff) |
ikev2: make integ algo optional
Type: improvement
This patch makes configuring integration algorithm optional. This is
useful when using AEAD cipher (in fact when using such
cipher, integ algo is ignored anyway).
Change-Id: I5891db5c0433afb85ae2d9084d45b89ec1133178
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Diffstat (limited to 'src/plugins/ikev2')
-rw-r--r-- | src/plugins/ikev2/ikev2.c | 35 | ||||
-rw-r--r-- | src/plugins/ikev2/ikev2_cli.c | 26 |
2 files changed, 40 insertions, 21 deletions
diff --git a/src/plugins/ikev2/ikev2.c b/src/plugins/ikev2/ikev2.c index db68135db42..a9d7e5696a8 100644 --- a/src/plugins/ikev2/ikev2.c +++ b/src/plugins/ikev2/ikev2.c @@ -2754,24 +2754,27 @@ ikev2_set_initiator_proposals (vlib_main_t * vm, ikev2_sa_t * sa, return r; } - /* Integrity */ - error = 1; - vec_foreach (td, km->supported_transforms) - { - if (td->type == IKEV2_TRANSFORM_TYPE_INTEG - && td->integ_type == ts->integ_alg) + if (IKEV2_TRANSFORM_ENCR_TYPE_AES_GCM_16 != ts->crypto_alg) + { + /* Integrity */ + error = 1; + vec_foreach (td, km->supported_transforms) { - vec_add1 (proposal->transforms, *td); - error = 0; - break; + if (td->type == IKEV2_TRANSFORM_TYPE_INTEG + && td->integ_type == ts->integ_alg) + { + vec_add1 (proposal->transforms, *td); + error = 0; + break; + } } - } - if (error) - { - ikev2_elog_error - ("Didn't find any supported algorithm for IKEV2_TRANSFORM_TYPE_INTEG"); - r = clib_error_return (0, "Unsupported algorithm"); - return r; + if (error) + { + ikev2_elog_error + ("Didn't find any supported algorithm for IKEV2_TRANSFORM_TYPE_INTEG"); + r = clib_error_return (0, "Unsupported algorithm"); + return r; + } } /* PRF */ diff --git a/src/plugins/ikev2/ikev2_cli.c b/src/plugins/ikev2/ikev2_cli.c index 6b9876b4ead..1acae91c777 100644 --- a/src/plugins/ikev2/ikev2_cli.c +++ b/src/plugins/ikev2/ikev2_cli.c @@ -125,10 +125,13 @@ show_ikev2_sa_command_fn (vlib_main_t * vm, vlib_cli_output(vm, " SK_e i:%U\n r:%U", format_hex_bytes, child->sk_ei, vec_len(child->sk_ei), format_hex_bytes, child->sk_er, vec_len(child->sk_er)); - vlib_cli_output(vm, " SK_a i:%U\n r:%U", - format_hex_bytes, child->sk_ai, vec_len(child->sk_ai), - format_hex_bytes, child->sk_ar, vec_len(child->sk_ar)); - vlib_cli_output(vm, " traffic selectors (i):"); + if (child->sk_ai) + { + vlib_cli_output(vm, " SK_a i:%U\n r:%U", + format_hex_bytes, child->sk_ai, vec_len(child->sk_ai), + format_hex_bytes, child->sk_ar, vec_len(child->sk_ar)); + vlib_cli_output(vm, " traffic selectors (i):"); + } vec_foreach(ts, child->tsi) { vlib_cli_output(vm, " %u type %u protocol_id %u addr " @@ -362,6 +365,18 @@ ikev2_profile_add_del_command_fn (vlib_main_t * vm, dh_type, tmp1); goto done; } + else if (unformat + (line_input, + "set %U esp-crypto-alg %U %u esp-dh %U", + unformat_token, valid_chars, &name, + unformat_ikev2_transform_encr_type, &crypto_alg, &tmp1, + unformat_ikev2_transform_dh_type, &dh_type)) + { + r = + ikev2_set_profile_esp_transforms (vm, name, crypto_alg, 0, + dh_type, tmp1); + goto done; + } else if (unformat (line_input, "set %U sa-lifetime %lu %u %u %lu", unformat_token, valid_chars, &name, &tmp4, &tmp1, &tmp2, &tmp5)) @@ -405,7 +420,8 @@ VLIB_CLI_COMMAND (ikev2_profile_add_del_command, static) = { "protocol <protocol-number>\n" "ikev2 profile set <id> responder <interface> <addr>\n" "ikev2 profile set <id> ike-crypto-alg <crypto alg> <key size> ike-integ-alg <integ alg> ike-dh <dh type>\n" - "ikev2 profile set <id> esp-crypto-alg <crypto alg> <key size> esp-integ-alg <integ alg> esp-dh <dh type>\n" + "ikev2 profile set <id> esp-crypto-alg <crypto alg> <key size> " + "[esp-integ-alg <integ alg>] esp-dh <dh type>\n" "ikev2 profile set <id> sa-lifetime <seconds> <jitter> <handover> <max bytes>", .function = ikev2_profile_add_del_command_fn, }; |