kernel-wfp: Register a WFP provider to manage IPsec tunnels

This commit is contained in:
Martin Willi
2014-06-04 16:32:06 +02:00
parent 149fc48e03
commit f5ddda7f57
@@ -58,6 +58,11 @@ struct private_kernel_wfp_ipsec_t {
* WFP session handle
*/
HANDLE handle;
/**
* Provider charon registers as
*/
FWPM_PROVIDER0 provider;
};
/**
@@ -1182,6 +1187,7 @@ METHOD(kernel_ipsec_t, destroy, void,
{
if (this->handle)
{
FwpmProviderDeleteByKey0(this->handle, &this->provider.providerKey);
FwpmEngineClose0(this->handle);
}
this->entries->destroy(this->entries);
@@ -1224,6 +1230,14 @@ kernel_wfp_ipsec_t *kernel_wfp_ipsec_create()
.destroy = _destroy,
},
},
.provider = {
.displayData = {
.name = L"charon",
.description = L"strongSwan IKE kernel-wfp backend",
},
.providerKey = { 0x59cdae2e, 0xf6bb, 0x4c09,
{ 0xa9,0x59,0x9d,0x91,0xac,0xaf,0xf9,0x19 }},
},
.nextspi = htonl(0xc0000001),
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
.entries = hashtable_create(hashtable_hash_ptr,
@@ -1240,5 +1254,13 @@ kernel_wfp_ipsec_t *kernel_wfp_ipsec_create()
return NULL;
}
res = FwpmProviderAdd0(this->handle, &this->provider, NULL);
if (res != ERROR_SUCCESS && res != FWP_E_ALREADY_EXISTS)
{
DBG1(DBG_KNL, "registering WFP provider failed: 0x%08x", res);
destroy(this);
return NULL;
}
return &this->public;
}