ikev2: Negotiate support for IKEv2 fragmentation
This commit is contained in:
@@ -128,7 +128,7 @@ enum ike_extension_t {
|
|||||||
EXT_NATT_DRAFT_02_03 = (1<<10),
|
EXT_NATT_DRAFT_02_03 = (1<<10),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* peer support proprietary IKE fragmentation
|
* peer supports proprietary IKEv1 or standardized IKEv2 fragmentation
|
||||||
*/
|
*/
|
||||||
EXT_IKE_FRAGMENTATION = (1<<11),
|
EXT_IKE_FRAGMENTATION = (1<<11),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -161,6 +161,19 @@ static void build_payloads(private_ike_init_t *this, message_t *message)
|
|||||||
message->add_payload(message, (payload_t*)ke_payload);
|
message->add_payload(message, (payload_t*)ke_payload);
|
||||||
message->add_payload(message, (payload_t*)nonce_payload);
|
message->add_payload(message, (payload_t*)nonce_payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* negotiate fragmentation if we are not rekeying */
|
||||||
|
if (!this->old_sa &&
|
||||||
|
this->config->fragmentation(this->config) != FRAGMENTATION_NO)
|
||||||
|
{
|
||||||
|
if (this->initiator ||
|
||||||
|
this->ike_sa->supports_extension(this->ike_sa,
|
||||||
|
EXT_IKE_FRAGMENTATION))
|
||||||
|
{
|
||||||
|
message->add_notify(message, FALSE, FRAGMENTATION_SUPPORTED,
|
||||||
|
chunk_empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -220,6 +233,16 @@ static void process_payloads(private_ike_init_t *this, message_t *message)
|
|||||||
this->other_nonce = nonce_payload->get_nonce(nonce_payload);
|
this->other_nonce = nonce_payload->get_nonce(nonce_payload);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case PLV2_NOTIFY:
|
||||||
|
{
|
||||||
|
notify_payload_t *notify = (notify_payload_t*)payload;
|
||||||
|
|
||||||
|
if (notify->get_notify_type(notify) == FRAGMENTATION_SUPPORTED)
|
||||||
|
{
|
||||||
|
this->ike_sa->enable_extension(this->ike_sa,
|
||||||
|
EXT_IKE_FRAGMENTATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user