Files
Hauke Mehrtens 670a7b3b0e strongswan: stage the migration in the LuCI session through ubus
When LuCI passes a session id, migrate-ipsec-to-swanctl moves its uci
delta into /tmp/run/rpcd/uci-<session id>, rpcd's private save directory
of that session. rpcd stops naming this directory after the session id,
as the id is a bearer credential that leaked through directory listings,
so the migrated configuration would no longer show up as pending changes
in LuCI.

Stage the migration through rpcd's uci ubus API instead: revert the
session's ipsec changes, delete all sections and add the sections of the
migrated configuration. Then revert the changes of the uci command line
tool, which the old code moved away. This works with old and new rpcd
versions. If staging fails, both are reverted and the script exits with
an error.

Fixes: d5f33e6410 ("strongswan: support optional UCI session staging in migrate-ipsec-to-swanctl")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-10-06 09:53:01 +02:00

728 lines
23 KiB
Makefile

#
# Copyright (C) 2012-2018 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=strongswan
PKG_VERSION:=6.0.7
PKG_RELEASE:=9
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://download.strongswan.org/ https://download2.strongswan.org/
PKG_HASH:=e518e34e159514f4c6ba80d1f926cb151e0dd4e3a1d94213171234b8b9ae6f55
PKG_MAINTAINER:=Philip Prindeville <philipp@redfish-solutions.com>, Noel Kuntze <noel.kuntze@thermi.consulting>
PKG_LICENSE:=GPL-2.0-or-later
PKG_LICENSE_FILES:=COPYING LICENSE
PKG_CPE_ID:=cpe:/a:strongswan:strongswan
PKG_MOD_AVAILABLE:= \
addrblock \
aes \
agent \
attr \
attr-sql \
blowfish \
$(if $(CONFIG_STRONGSWAN_INCLUDE_INSECURE),ccm,) \
chapoly \
cmac \
constraints \
connmark \
coupling \
ctr \
curl \
curve25519 \
des \
dhcp \
dnskey \
drbg \
duplicheck \
eap-dynamic \
eap-identity \
eap-md5 \
$(if $(CONFIG_STRONGSWAN_INCLUDE_INSECURE),eap-mschapv2,) \
eap-radius \
eap-tls \
farp \
fips-prf \
forecast \
gcm \
gcrypt \
gmp \
gmpdh \
ha \
hmac \
kdf \
kernel-libipsec \
kernel-netlink \
ldap \
led \
load-tester \
lookip \
$(if $(CONFIG_STRONGSWAN_INCLUDE_INSECURE),md4,) \
md5 \
mgf1 \
mysql \
openssl \
pem \
pgp \
pkcs1 \
pkcs7 \
pkcs8 \
pkcs11 \
pkcs12 \
pubkey \
random \
rc2 \
resolve \
revocation \
sha1 \
sha2 \
sha3 \
smp \
socket-default \
socket-dynamic \
sql \
sqlite \
sshkey \
stroke \
test-vectors \
unity \
updown \
vici \
whitelist \
wolfssl \
x509 \
xauth-eap \
xauth-generic \
xcbc
PKG_CONFIG_DEPENDS:= \
CONFIG_STRONGSWAN_ROUTING_TABLE \
CONFIG_STRONGSWAN_ROUTING_TABLE_PRIO \
CONFIG_STRONGSWAN_INCLUDE_INSECURE \
$(patsubst %,CONFIG_PACKAGE_strongswan-mod-%,$(PKG_MOD_AVAILABLE))
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
PKG_BUILD_DEPENDS:=python3/host
include $(INCLUDE_DIR)/package.mk
# strongswan-mod-mysql needs iconv
include $(INCLUDE_DIR)/nls.mk
define Package/strongswan/Default
SUBMENU:=VPN
SECTION:=net
CATEGORY:=Network
TITLE:=StrongSwan
URL:=https://strongswan.org/
endef
define Package/strongswan/description/Default
StrongSwan is an OpenSource IPsec implementation for the Linux operating system.
endef
define Package/strongswan
$(call Package/strongswan/Default)
MENU:=1
DEPENDS:= +libpthread +ip \
+kmod-ipsec +kmod-ipsec4 +IPV6:kmod-ipsec6
endef
define Package/strongswan/config
source "$(SOURCE)/Config.in"
endef
define Package/strongswan/description
$(call Package/strongswan/description/Default)
This package contains shared libraries and scripts.
endef
define Package/strongswan-full
$(call Package/strongswan/Default)
TITLE+= (full)
DEPENDS:= strongswan \
+strongswan-charon \
+strongswan-charon-cmd \
+strongswan-ipsec \
+strongswan-mod-addrblock \
+strongswan-mod-aes \
+strongswan-mod-agent \
+strongswan-mod-attr \
+strongswan-mod-attr-sql \
+strongswan-mod-blowfish \
+STRONGSWAN_INCLUDE_INSECURE:strongswan-mod-ccm \
+strongswan-mod-chapoly \
+strongswan-mod-cmac \
+strongswan-mod-constraints \
+strongswan-mod-connmark \
+strongswan-mod-coupling \
+strongswan-mod-ctr \
+strongswan-mod-curl \
+strongswan-mod-curve25519 \
+strongswan-mod-des \
+strongswan-mod-dhcp \
+strongswan-mod-dnskey \
+strongswan-mod-drbg \
+strongswan-mod-duplicheck \
+strongswan-mod-eap-dynamic \
+strongswan-mod-eap-identity \
+strongswan-mod-eap-md5 \
+STRONGSWAN_INCLUDE_INSECURE:strongswan-mod-eap-mschapv2 \
+strongswan-mod-eap-radius \
+strongswan-mod-eap-tls \
+strongswan-mod-farp \
+strongswan-mod-fips-prf \
+strongswan-mod-forecast \
+strongswan-mod-gcm \
+strongswan-mod-gcrypt \
+strongswan-mod-gmp \
+strongswan-mod-ha \
+strongswan-mod-hmac \
+strongswan-mod-kdf \
+strongswan-mod-kernel-netlink \
+strongswan-mod-ldap \
+strongswan-mod-led \
+strongswan-mod-load-tester \
+strongswan-mod-lookip \
+STRONGSWAN_INCLUDE_INSECURE:strongswan-mod-md4 \
+strongswan-mod-md5 \
+strongswan-mod-mgf1 \
+strongswan-mod-mysql \
+strongswan-mod-openssl \
+strongswan-mod-pem \
+strongswan-mod-pgp \
+strongswan-mod-pkcs1 \
+strongswan-mod-pkcs7 \
+strongswan-mod-pkcs8 \
+strongswan-mod-pkcs11 \
+strongswan-mod-pkcs12 \
+strongswan-mod-pubkey \
+strongswan-mod-random \
+strongswan-mod-rc2 \
+strongswan-mod-resolve \
+strongswan-mod-revocation \
+strongswan-mod-sha1 \
+strongswan-mod-sha2 \
+strongswan-mod-sha3 \
+strongswan-mod-smp \
+strongswan-mod-socket-default \
+strongswan-mod-sql \
+strongswan-mod-sqlite \
+strongswan-mod-sshkey \
+strongswan-mod-stroke \
+strongswan-mod-test-vectors \
+strongswan-mod-unity \
+strongswan-mod-updown \
+strongswan-mod-vici \
+strongswan-mod-whitelist \
+strongswan-mod-wolfssl \
+strongswan-mod-x509 \
+strongswan-mod-xauth-eap \
+strongswan-mod-xauth-generic \
+strongswan-mod-xcbc \
+strongswan-pki \
+strongswan-swanctl \
@DEVEL
endef
define Package/strongswan-full/description
$(call Package/strongswan/description/Default)
This meta-package contains dependencies for all of the strongswan plugins
except kernel-libipsec,
socket-dynamic and which are omitted in favor of the kernel-netlink and
socket-default plugins.
endef
define Package/strongswan-default
$(call Package/strongswan/Default)
TITLE+= (default)
DEPENDS:= strongswan \
+strongswan-charon \
+strongswan-mod-aes \
+strongswan-mod-attr \
+strongswan-mod-connmark \
+strongswan-mod-constraints \
+strongswan-mod-des \
+strongswan-mod-dnskey \
+strongswan-mod-fips-prf \
+strongswan-mod-gmp \
+strongswan-mod-hmac \
@(PACKAGE_strongswan-mod-kdf||PACKAGE_strongswan-mod-openssl||PACKAGE_strongswan-mod-wolfssl) \
+strongswan-mod-kernel-netlink \
+strongswan-mod-md5 \
+strongswan-mod-mgf1 \
+strongswan-mod-pem \
+strongswan-mod-pgp \
+strongswan-mod-pkcs1 \
+strongswan-mod-pubkey \
+strongswan-mod-random \
+strongswan-mod-rc2 \
+strongswan-mod-resolve \
+strongswan-mod-revocation \
+strongswan-mod-sha1 \
+strongswan-mod-sha2 \
+strongswan-mod-socket-default \
+strongswan-mod-sshkey \
+strongswan-mod-updown \
+strongswan-mod-x509 \
+strongswan-mod-xauth-generic \
+strongswan-mod-xcbc \
+strongswan-swanctl
endef
define Package/strongswan-default/description
$(call Package/strongswan/description/Default)
This meta-package contains only dependencies to match upstream defaults.
endef
define Package/strongswan-isakmp
$(call Package/strongswan/Default)
TITLE+= (isakmp)
DEPENDS:= strongswan \
+strongswan-charon \
+strongswan-ipsec \
+strongswan-mod-aes \
+strongswan-mod-des \
+strongswan-mod-gmpdh \
+strongswan-mod-hmac \
@(PACKAGE_strongswan-mod-kdf||PACKAGE_strongswan-mod-openssl||PACKAGE_strongswan-mod-wolfssl) \
+strongswan-mod-kernel-netlink \
+strongswan-mod-md5 \
+strongswan-mod-mgf1 \
+strongswan-mod-pubkey \
+strongswan-mod-random \
+strongswan-mod-sha1 \
+strongswan-mod-socket-default \
+strongswan-mod-stroke \
+strongswan-mod-updown
endef
define Package/strongswan-isakmp/description
$(call Package/strongswan/description/Default)
This meta-package contains only dependencies to establish ISAKMP /
IKE PSK connections, dropping other capabilities in favor of small size
Can fit most routers even with 4Mb flash (after removing IPv6 support).
endef
define Package/strongswan-minimal
$(call Package/strongswan/Default)
TITLE+= (minimal)
DEPENDS:= strongswan \
+strongswan-charon \
+strongswan-mod-aes \
+strongswan-mod-gmp \
+strongswan-mod-hmac \
@(PACKAGE_strongswan-mod-kdf||PACKAGE_strongswan-mod-openssl||PACKAGE_strongswan-mod-wolfssl) \
+strongswan-mod-kernel-netlink \
+strongswan-mod-mgf1 \
+strongswan-mod-pubkey \
+strongswan-mod-random \
+strongswan-mod-sha1 \
+strongswan-mod-socket-default \
+strongswan-mod-stroke \
+strongswan-mod-updown \
+strongswan-mod-x509 \
+strongswan-mod-xcbc
endef
define Package/strongswan-minimal/description
$(call Package/strongswan/description/Default)
This meta-package contains only dependencies for a minimal IKEv2 setup.
endef
define Package/strongswan-charon
$(call Package/strongswan/Default)
TITLE+= IKEv1/IKEv2 keying daemon
DEPENDS:= strongswan
endef
define Package/strongswan-charon/description
$(call Package/strongswan/description/Default)
This package contains charon, an IKEv2 keying daemon.
endef
define Package/strongswan-charon-cmd
$(call Package/strongswan/Default)
TITLE+= charon-cmd utility
DEPENDS:= strongswan +strongswan-charon
endef
define Package/strongswan-charon-cmd/description
$(call Package/strongswan/description/Default)
This package contains the charon-cmd utility.
endef
define Package/strongswan-ipsec
$(call Package/strongswan/Default)
TITLE+= utilities
DEPENDS:= strongswan
endef
define Package/strongswan-ipsec/description
$(call Package/strongswan/description/Default)
This package contains the ipsec utility.
endef
define Package/strongswan-pki
$(call Package/strongswan/Default)
TITLE+= PKI tool
DEPENDS:= strongswan strongswan-libtls
endef
define Package/strongswan-pki/description
$(call Package/strongswan/description/Default)
This package contains the pki tool.
endef
define Package/strongswan-swanctl
$(call Package/strongswan/Default)
TITLE+= swanctl utility
DEPENDS:= strongswan +strongswan-mod-vici
endef
define Package/strongswan-swanctl/description
$(call Package/strongswan/description/Default)
This package contains the swanctl utility.
endef
define Package/strongswan-gencerts
$(call Package/strongswan/Default)
TITLE+= X.509 certificate generation utility
DEPENDS:= strongswan +strongswan-pki bash
endef
define Package/strongswan-gencerts/description
$(call Package/strongswan/description/Default)
This package contains the X.509 certificate generation utility.
endef
define Package/strongswan-libtls
$(call Package/strongswan/Default)
TITLE+= libtls
DEPENDS:= strongswan
endef
define Package/strongswan-libtls/description
$(call Package/strongswan/description/Default)
This package contains libtls for strongSwan plugins eap-tls, eap-ttls,
eap-peap, tnc-tnccs
endef
define BuildPlugin
define Package/strongswan-mod-$(1)
$$(call Package/strongswan/Default)
TITLE:= StrongSwan $(2) plugin
DEPENDS:= strongswan $(3)
endef
define Package/strongswan-mod-$(1)/install
$(INSTALL_DIR) $$(1)/etc/strongswan.d/charon
if [ -f $(PKG_INSTALL_DIR)/etc/strongswan.d/charon/$(1).conf ]; then \
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/strongswan.d/charon/$(1).conf $$(1)/etc/strongswan.d/charon/; fi
$(INSTALL_DIR) $$(1)/usr/lib/ipsec/plugins
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/plugins/libstrongswan-$(1).so \
$$(1)/usr/lib/ipsec/plugins/
$(call Plugin/$(1)/install,$$(1))
endef
define Package/strongswan-mod-$(1)/conffiles
/etc/strongswan.d/charon/$(1).conf
endef
$$(eval $$(call BuildPackage,strongswan-mod-$(1)))
endef
CONFIGURE_ARGS+= \
--disable-scripts \
--disable-static \
--disable-fast \
--enable-nonce \
--enable-mgf1 \
--enable-mediation \
--with-systemdsystemunitdir=no \
--with-plugins-packaged-separately=yes \
PYTHON="python3" \
$(if $(CONFIG_PACKAGE_strongswan-charon-cmd),--enable-cmd,--disable-cmd) \
$(if $(CONFIG_PACKAGE_strongswan-mod-gmpdh),--enable-gmpdh,) \
$(if $(CONFIG_PACKAGE_strongswan-pki),--enable-pki,--disable-pki) \
--with-random-device=/dev/random \
--with-urandom-device=/dev/urandom \
--with-routing-table="$(call qstrip,$(CONFIG_STRONGSWAN_ROUTING_TABLE))" \
--with-routing-table-prio="$(call qstrip,$(CONFIG_STRONGSWAN_ROUTING_TABLE_PRIO))" \
$(foreach m,$(PKG_MOD_AVAILABLE) ccm eap-mschapv2 md4, \
$(if $(CONFIG_PACKAGE_strongswan-mod-$(m)),--enable-$(m),--disable-$(m)) \
) \
ac_cv_search___atomic_load=no
define Package/strongswan/conffiles
/etc/strongswan.conf
/etc/strongswan.d/
endef
define Package/strongswan/install
$(INSTALL_DIR) $(1)/etc
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/strongswan.conf $(1)/etc/
echo -e "\ninclude /var/ipsec/strongswan.conf" >> $(1)/etc/strongswan.conf
$(INSTALL_DIR) $(1)/etc/strongswan.d/charon
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/strongswan.d/charon/nonce.conf $(1)/etc/strongswan.d/charon/
$(INSTALL_DIR) $(1)/usr/lib/ipsec/plugins
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/libstrongswan.so.* $(1)/usr/lib/ipsec/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/plugins/libstrongswan-nonce.so $(1)/usr/lib/ipsec/plugins/
endef
define Package/strongswan-default/install
true
endef
define Package/strongswan-full/install
true
endef
define Package/strongswan-isakmp/install
true
endef
define Package/strongswan-minimal/install
true
endef
define Package/strongswan-charon/install
$(INSTALL_DIR) $(1)/etc/strongswan.d
$(CP) $(PKG_INSTALL_DIR)/etc/strongswan.d/charon.conf $(1)/etc/strongswan.d
$(CP) $(PKG_INSTALL_DIR)/etc/strongswan.d/charon-logging.conf $(1)/etc/strongswan.d
$(INSTALL_DIR) $(1)/usr/lib/ipsec
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ipsec/charon $(1)/usr/lib/ipsec/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/libcharon.so.* $(1)/usr/lib/ipsec/
endef
define Package/strongswan-charon/conffiles
/etc/strongswan.d/charon.conf
/etc/strongswan.d/charon-logging.conf
endef
define Package/strongswan-charon-cmd/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/charon-cmd $(1)/usr/sbin/
endef
define Package/strongswan-ipsec/conffiles
/etc/ipsec.d/
/etc/ipsec.conf
/etc/ipsec.secrets
/etc/ipsec.user
endef
define Package/strongswan-ipsec/install
$(INSTALL_DIR) $(1)/etc/ $(1)/usr/sbin
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/ipsec.conf $(1)/etc/
echo -e "\ninclude /var/ipsec/ipsec.conf" >> $(1)/etc/ipsec.conf
$(INSTALL_CONF) ./files/ipsec.secrets $(1)/etc/
echo -e "\ninclude /var/ipsec/ipsec.secrets" >> $(1)/etc/ipsec.secrets
$(INSTALL_CONF) ./files/ipsec.user $(1)/etc/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/ipsec.init $(1)/etc/init.d/ipsec
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ipsec $(1)/usr/sbin/
endef
define Package/strongswan-ipsec/postinst
#!/bin/sh
[ -z "$${IPKG_INSTROOT}" ] || exit 0
opkg list-changed-conffiles | grep -qx /etc/ipsec.conf || {
rm -f /etc/ipsec.conf-opkg
}
endef
define Package/strongswan-pki/install
$(INSTALL_DIR) $(1)/etc/strongswan.d
$(CP) $(PKG_INSTALL_DIR)/etc/strongswan.d/pki.conf $(1)/etc/strongswan.d/
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/pki $(1)/usr/bin/
endef
define Package/strongswan-swanctl/conffiles
/etc/config/ipsec
/etc/swanctl/
endef
define Package/strongswan-swanctl/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/etc/swanctl/{conf.d,ecdsa,pkcs{12,8},private,pubkey,rsa}
$(INSTALL_DIR) $(1)/etc/swanctl/x509{,aa,ac,ca,crl,ocsp}
$(CP) $(PKG_INSTALL_DIR)/etc/swanctl/swanctl.conf $(1)/etc/swanctl/
echo "include /var/swanctl/swanctl.conf" >> $(1)/etc/swanctl/swanctl.conf
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/swanctl $(1)/usr/sbin/
$(INSTALL_BIN) ./files/swanctl.init $(1)/etc/init.d/swanctl
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/ipsec.config $(1)/etc/config/ipsec
$(INSTALL_DIR) $(1)/usr/libexec/strongswan/
$(INSTALL_BIN) ./files/usr/libexec/strongswan/migrate-ipsec-to-swanctl \
$(1)/usr/libexec/strongswan/
endef
define Package/strongswan-gencerts/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) ./files/gencerts.sh $(1)/usr/bin/gencerts
endef
define Package/strongswan-libtls/install
$(INSTALL_DIR) $(1)/usr/lib/ipsec
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/libtls.so.* $(1)/usr/lib/ipsec/
endef
define Plugin/duplicheck/install
$(INSTALL_DIR) $(1)/usr/lib/ipsec/plugins
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/duplicheck $(1)/usr/lib/ipsec/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/plugins/libstrongswan-duplicheck.so $(1)/usr/lib/ipsec/plugins/
endef
define Plugin/eap-radius/install
$(INSTALL_DIR) $(1)/usr/lib/ipsec/plugins
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/libradius.so.* $(1)/usr/lib/ipsec/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/plugins/libstrongswan-eap-radius.so $(1)/usr/lib/ipsec/plugins/
endef
define Plugin/attr-sql/install
$(INSTALL_DIR) $(1)/usr/lib/ipsec
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/pool $(1)/usr/lib/ipsec/
endef
define Plugin/stroke/install
$(INSTALL_DIR) $(1)/etc/ipsec.d/{aacerts,acerts,cacerts,certs,crls,ocspcerts,private,reqs}
$(INSTALL_DIR) $(1)/usr/lib/ipsec/plugins
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ipsec/{starter,stroke} $(1)/usr/lib/ipsec/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/plugins/libstrongswan-stroke.so $(1)/usr/lib/ipsec/plugins/
endef
define Plugin/updown/install
$(INSTALL_DIR) $(1)/usr/lib/ipsec/plugins
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/_updown $(1)/usr/lib/ipsec/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/plugins/libstrongswan-updown.so $(1)/usr/lib/ipsec/plugins/
$(INSTALL_DIR) $(1)/etc/hotplug.d/ipsec
$(CP) ./files/etc/hotplug.d/ipsec/01-user \
$(1)/etc/hotplug.d/ipsec/01-user
endef
define Plugin/vici/install
$(INSTALL_DIR) $(1)/usr/lib/ipsec/plugins
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/libvici.so.* $(1)/usr/lib/ipsec/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/plugins/libstrongswan-vici.so $(1)/usr/lib/ipsec/plugins/
endef
define Plugin/whitelist/install
$(INSTALL_DIR) $(1)/usr/lib/ipsec/plugins
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/whitelist $(1)/usr/lib/ipsec/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/plugins/libstrongswan-whitelist.so $(1)/usr/lib/ipsec/plugins/
endef
define Plugin/kernel-libipsec/install
$(INSTALL_DIR) $(1)/usr/lib/ipsec
$(CP) $(PKG_INSTALL_DIR)/usr/lib/ipsec/libipsec.so.* $(1)/usr/lib/ipsec/
endef
$(eval $(call BuildPackage,strongswan))
$(eval $(call BuildPackage,strongswan-default))
$(eval $(call BuildPackage,strongswan-full))
$(eval $(call BuildPackage,strongswan-minimal))
$(eval $(call BuildPackage,strongswan-isakmp))
$(eval $(call BuildPackage,strongswan-charon))
$(eval $(call BuildPackage,strongswan-charon-cmd))
$(eval $(call BuildPackage,strongswan-ipsec))
$(eval $(call BuildPackage,strongswan-pki))
$(eval $(call BuildPackage,strongswan-swanctl))
$(eval $(call BuildPackage,strongswan-gencerts))
$(eval $(call BuildPackage,strongswan-libtls))
$(eval $(call BuildPlugin,addrblock,RFC 3779 address block constraint support,))
$(eval $(call BuildPlugin,aes,AES crypto,))
$(eval $(call BuildPlugin,agent,SSH agent signing,))
$(eval $(call BuildPlugin,attr,file based config,))
$(eval $(call BuildPlugin,attr-sql,SQL based config,+strongswan-charon))
$(eval $(call BuildPlugin,blowfish,Blowfish crypto,))
$(eval $(call BuildPlugin,ccm,CCM AEAD wrapper crypto,))
$(eval $(call BuildPlugin,chapoly,ChaCha20-Poly1305 AEAD crypto,+kmod-crypto-chacha20poly1305))
$(eval $(call BuildPlugin,cmac,CMAC crypto,))
$(eval $(call BuildPlugin,connmark,netfilter connection marking,+libip4tc))
$(eval $(call BuildPlugin,constraints,advanced X509 constraint checking,))
$(eval $(call BuildPlugin,coupling,IKEv2 plugin to couple peer certificates permanently to authentication,))
$(eval $(call BuildPlugin,ctr,Counter Mode wrapper crypto,))
$(eval $(call BuildPlugin,curl,cURL fetcher plugin,+PACKAGE_strongswan-mod-curl:libcurl))
$(eval $(call BuildPlugin,curve25519,Curve25519 Diffie-Hellman,))
$(eval $(call BuildPlugin,des,DES crypto,))
$(eval $(call BuildPlugin,dhcp,DHCP based attribute provider,))
$(eval $(call BuildPlugin,dnskey,DNS RR key decoding,))
$(eval $(call BuildPlugin,drbg,Deterministic random bit generator,,))
$(eval $(call BuildPlugin,duplicheck,advanced duplicate checking,))
$(eval $(call BuildPlugin,eap-dynamic,EAP dynamic selector,))
$(eval $(call BuildPlugin,eap-identity,EAP identity helper,))
$(eval $(call BuildPlugin,eap-md5,EAP MD5 (CHAP) EAP auth,))
$(eval $(call BuildPlugin,eap-mschapv2,EAP MS-CHAPv2 EAP auth,+strongswan-mod-md4 +strongswan-mod-des))
$(eval $(call BuildPlugin,eap-radius,EAP RADIUS auth,))
$(eval $(call BuildPlugin,eap-tls,EAP TLS auth,+strongswan-libtls))
$(eval $(call BuildPlugin,farp,fake arp respsonses,))
$(eval $(call BuildPlugin,fips-prf,FIPS PRF crypto,+strongswan-mod-sha1))
$(eval $(call BuildPlugin,forecast,forward multi/broadcast traffic,+libip4tc +kmod-ipt-conntrack-extra))
$(eval $(call BuildPlugin,gcm,GCM AEAD wrapper crypto,))
$(eval $(call BuildPlugin,gcrypt,libgcrypt,+PACKAGE_strongswan-mod-gcrypt:libgcrypt))
$(eval $(call BuildPlugin,gmp,libgmp,+PACKAGE_strongswan-mod-gmp:libgmp))
$(eval $(call BuildPlugin,gmpdh,DH-Groups; no libgmp dep,))
$(eval $(call BuildPlugin,ha,high availability cluster,))
$(eval $(call BuildPlugin,hmac,HMAC crypto,))
$(eval $(call BuildPlugin,kdf,KDF/PRF+,))
$(eval $(call BuildPlugin,kernel-libipsec,libipsec kernel interface,))
$(eval $(call BuildPlugin,kernel-netlink,netlink kernel interface,))
$(eval $(call BuildPlugin,ldap,LDAP,+PACKAGE_strongswan-mod-ldap:libopenldap))
$(eval $(call BuildPlugin,led,LED blink on IKE activity,))
$(eval $(call BuildPlugin,load-tester,load testing,))
$(eval $(call BuildPlugin,lookip,enable fast virtual IP lookup and notification,))
$(eval $(call BuildPlugin,md4,MD4 crypto,))
$(eval $(call BuildPlugin,md5,MD5 crypto,))
$(eval $(call BuildPlugin,mgf1,MGF1 crypto,))
$(eval $(call BuildPlugin,mysql,MySQL database interface,+strongswan-mod-sql +PACKAGE_strongswan-mod-mysql:libmysqlclient-r))
$(eval $(call BuildPlugin,openssl,OpenSSL crypto,+PACKAGE_strongswan-mod-openssl:libopenssl))
$(eval $(call BuildPlugin,pem,PEM decoding,))
$(eval $(call BuildPlugin,pgp,PGP key decoding,))
$(eval $(call BuildPlugin,pkcs1,PKCS1 key decoding,))
$(eval $(call BuildPlugin,pkcs7,PKCS7 key decoding,))
$(eval $(call BuildPlugin,pkcs8,PKCS8 key decoding,))
$(eval $(call BuildPlugin,pkcs11,PKCS11 key decoding,))
$(eval $(call BuildPlugin,pkcs12,PKCS12 key decoding,))
$(eval $(call BuildPlugin,pubkey,raw public key,))
$(eval $(call BuildPlugin,random,RNG,))
$(eval $(call BuildPlugin,rc2,RC2 crypto,))
$(eval $(call BuildPlugin,resolve,DNS resolver,))
$(eval $(call BuildPlugin,revocation,X509 CRL/OCSP revocation,))
$(eval $(call BuildPlugin,sha1,SHA1 crypto,))
$(eval $(call BuildPlugin,sha2,SHA2 crypto,))
$(eval $(call BuildPlugin,sha3,SHA3 and SHAKE crypto,))
$(eval $(call BuildPlugin,smp,SMP configuration and control interface,+PACKAGE_strongswan-mod-smp:libxml2))
$(eval $(call BuildPlugin,socket-default,default socket implementation for charon,))
$(eval $(call BuildPlugin,socket-dynamic,dynamic socket implementation for charon,))
$(eval $(call BuildPlugin,sql,SQL database interface,))
$(eval $(call BuildPlugin,sqlite,SQLite database interface,+strongswan-mod-sql +PACKAGE_strongswan-mod-sqlite:libsqlite3))
$(eval $(call BuildPlugin,sshkey,SSH key decoding,))
$(eval $(call BuildPlugin,stroke,Stroke,+strongswan-charon +strongswan-ipsec))
$(eval $(call BuildPlugin,test-vectors,crypto test vectors,))
$(eval $(call BuildPlugin,unity,Cisco Unity extension,))
$(eval $(call BuildPlugin,updown,updown firewall,+iptables +IPV6:ip6tables +iptables-mod-ipsec +kmod-ipt-ipsec))
$(eval $(call BuildPlugin,vici,Versatile IKE Configuration Interface,))
$(eval $(call BuildPlugin,whitelist,peer identity whitelisting,))
$(eval $(call BuildPlugin,wolfssl,WolfSSL crypto,+PACKAGE_strongswan-mod-wolfssl:libwolfssl))
$(eval $(call BuildPlugin,x509,x509 certificate,))
$(eval $(call BuildPlugin,xauth-eap,EAP XAuth backend,))
$(eval $(call BuildPlugin,xauth-generic,generic XAuth backend,))
$(eval $(call BuildPlugin,xcbc,xcbc crypto,))