Almost all functionality in charon is implemented as plugins. The daemon itself provides only the core IKE state machine and plugin infrastructure — cryptography, kernel integration, EAP methods, certificate handling, and network utilities are each provided by dedicated plugin modules. This design lets you enable only what you need, swap implementations (for example, choosing between OpenSSL and wolfSSL for crypto), and extend strongSwan without modifying the daemon itself.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/strongswan/strongswan/llms.txt
Use this file to discover all available pages before exploring further.
Loading plugins
There are two ways to control which plugins charon loads at startup.Explicit load list
Set a space-separated list instrongswan.conf:
strongswan.conf
Modular loading
Setload_modular = yes and control each plugin via its own .conf file in /etc/strongswan.d/charon/:
strongswan.conf
/etc/strongswan.d/charon/ has a load key:
/etc/strongswan.d/charon/openssl.conf
Plugin categories
Kernel backends
Install IPsec SAs and routing policies into the OS:
kernel-netlink, kernel-pfkey, kernel-pfroute, kernel-libipsec, kernel-iph, kernel-wfpCryptography
Algorithm implementations for IKE and ESP:
openssl, botan, wolfssl, gcrypt, gmp, aesni, af-alg, and dedicated algorithm pluginsEAP methods
Password and certificate-based client authentication:
eap-md5, eap-mschapv2, eap-tls, eap-ttls, eap-peap, eap-radius, eap-sim, eap-akaCertificate handling
X.509 parsing, revocation, PKCS#11/12, constraints:
x509, revocation, constraints, pkcs11, pkcs12, pemNetwork utilities
DNS resolution, virtual IPs via DHCP, script hooks:
resolve, dhcp, updown, attrMonitoring
Traffic counters, IP lookups, error signalling:
counters, lookip, error-notifyDatabase
SQLite/MySQL for IP pools and certificate storage:
sql, attr-sqlPost-quantum
ML-KEM (CRYSTALS-Kyber) hybrid key exchange for IKEv2:
ml, curve25519Listing loaded algorithms
After charon is running, useswanctl to inspect which algorithms are actually available from loaded crypto plugins:
Plugin directories
Plugin shared objects are installed under the strongSwan library path, typically:/var/log/syslog for lines like:
Plugins listed but not found on disk are silently skipped unless
charon.plugins.<name>.load = yes is set via modular loading, in which case a missing plugin causes a warning.