]> git.ipfire.org Git - thirdparty/strongswan.git/blobdiff - src/swanctl/swanctl.opt
swanctl: Fix documentation of default value of hostaccess
[thirdparty/strongswan.git] / src / swanctl / swanctl.opt
index 5f8a1867b8bffddabf3d2315f470c098f552f927..7c71548d07d601bf3151c382d16b507970fe6efc 100644 (file)
@@ -28,6 +28,9 @@ connections.<conn>.local_addrs = %any
        connection from. As responder, the local destination address must match at
        least to one of the specified addresses, subnets or ranges.
 
+       If FQDNs are assigned they are resolved every time a configuration lookup
+       is done. If DNS resolution times out, the lookup is delayed for that time.
+
 connections.<conn>.remote_addrs = %any
        Remote address(es) to use for IKE communication, comma separated.
 
@@ -38,13 +41,16 @@ connections.<conn>.remote_addrs = %any
        connection to. As responder, the initiator source address must match at
        least to one of the specified addresses, subnets or ranges.
 
+       If FQDNs are assigned they are resolved every time a configuration lookup
+       is done. If DNS resolution times out, the lookup is delayed for that time.
+
        To initiate a connection, at least one specific address or DNS name must
        be specified.
 
 connections.<conn>.local_port = 500
-       Local UPD port for IKE communication.
+       Local UDP port for IKE communication.
 
-       Local UPD port for IKE communication. By default the port of the socket
+       Local UDP port for IKE communication. By default the port of the socket
        backend is used, which is usually _500_. If port _500_ is used, automatic
        IKE port floating to port 4500 is used to work around NAT issues.
 
@@ -54,7 +60,7 @@ connections.<conn>.local_port = 500
 connections.<conn>.remote_port = 500
        Remote UDP port for IKE communication.
 
-       Remote UPD port for IKE communication. If the default of port _500_ is used,
+       Remote UDP port for IKE communication. If the default of port _500_ is used,
        automatic IKE port floating to port 4500 is used to work around NAT issues.
 
 connections.<conn>.proposals = default
@@ -102,6 +108,14 @@ connections.<conn>.pull = yes
        Push mode is currently supported for IKEv1, but not in IKEv2. It is used
        by a few implementations only, pull mode is recommended.
 
+connections.<conn>.dscp = 000000
+       Differentiated Services Field Codepoint to set on outgoing IKE packets (six
+       binary digits).
+
+       Differentiated Services Field Codepoint to set on outgoing IKE packets for
+       this connection. The value is a six digit binary encoded string specifying
+       the Codepoint to set, as defined in RFC 2474.
+
 connections.<conn>.encap = no
        Enforce UDP encapsulation by faking NAT-D payloads.
 
@@ -139,16 +153,20 @@ connections.<conn>.dpd_timeout = 0s
        checking. For compatibility reasons, with IKEv1 a custom interval may be
        specified; this option has no effect on connections using IKE2.
 
-connections.<conn>.fragmentation = no
-       Use IKE UDP datagram fragmentation.  (_yes_, _no_ or _force_).
+connections.<conn>.fragmentation = yes
+       Use IKE UDP datagram fragmentation.  (_yes_, _accept_, _no_ or _force_).
 
        Use IKE fragmentation (proprietary IKEv1 extension or RFC 7383 IKEv2
-       fragmentation).  Acceptable  values  are _yes_, _force_ and _no_ (the
-       default). Fragmented IKE messages sent by a peer are always accepted
-       irrespective of  the  value  of  this option. If set to _yes_, and the peer
-       supports it, oversized IKE messages will be sent in fragments.  If set  to
-       _force_  (only  supported  for IKEv1) the initial IKE message will already
-       be fragmented if required.
+       fragmentation).  Acceptable  values  are _yes_ (the     default), _accept_,
+       _force_ and _no_. If set to _yes_, and the peer supports it, oversized IKE
+       messages will be sent in fragments. If set to _accept_, support for
+       fragmentation is announced to the peer but the daemon does not send its own
+       messages in fragments.  If set to _force_ (only supported for IKEv1) the
+       initial IKE message will already be fragmented if required. Finally, setting
+       the option to _no_ will disable announcing support for this feature.
+
+       Note that fragmented IKE messages sent by a peer are always accepted
+       irrespective of the value of this option (even when set to _no_).
 
 connections.<conn>.send_certreq = yes
        Send certificate requests payloads (_yes_ or _no_).
@@ -170,6 +188,12 @@ connections.<conn>.send_cert = ifasked
        certificate payloads altogether, _always_ causes certificate payloads to be
        sent unconditionally whenever certificate authentication is used.
 
+connections.<conn>.ppk_id =
+       String identifying the Postquantum Preshared Key (PPK) to be used.
+
+connections.<conn>.ppk_required = no
+       Whether a Postquantum Preshared Key (PPK) is required for this connection.
+
 connections.<conn>.keyingtries = 1
        Number of retransmission sequences to perform during initial connect.
 
@@ -198,7 +222,7 @@ connections.<conn>.unique = no
        On initiators this setting specifies whether an INITIAL_CONTACT notify is
        sent during IKE_AUTH if no existing connection is found with the remote
        peer (determined by the identities of the first authentication round).
-       Only if set to _keep_ or _replace_ will the client send a notify.
+       Unless set to _never_ the client will send a notify.
 
 connections.<conn>.reauth_time = 0s
        Time to schedule IKE reauthentication.
@@ -256,6 +280,30 @@ connections.<conn>.pools =
        other configuration attributes from. Each name references a pool by name
        from either the **pools** section or an external pool.
 
+connections.<conn>.mediation = no
+       Whether this connection is a mediation connection.
+
+       Whether this connection is a mediation connection, that is, whether this
+       connection is used to mediate other connections using the IKEv2 Mediation
+       Extension.  Mediation connections create no CHILD_SA.
+
+connections.<conn>.mediated_by =
+       The name of the connection to mediate this connection through.
+
+       The name of the connection to mediate this connection through. If given, the
+       connection will be mediated through the named mediation connection.
+       The     mediation connection must have **mediation** enabled.
+
+connections.<conn>.mediation_peer =
+       Identity under which the peer is registered at the mediation server.
+
+       Identity under which the peer is registered at the mediation server, that
+       is, the IKE identity the other end of this connection uses as its local
+       identity on its connection to the mediation server. This is the identity we
+       request the mediation server to mediate us with. Only relevant on
+       connections that set **mediated_by**. If it is not given, the remote IKE
+       identity of the first authentication round of this connection will be used.
+
 connections.<conn>.local<suffix> {}
        Section for a local authentication round.
 
@@ -268,6 +316,11 @@ connections.<conn>.local<suffix> {}
        unique suffix. To define a single authentication round, the suffix may be
        omitted.
 
+connections.<conn>.local<suffix>.round = 0
+       Optional numeric identifier by which authentication rounds are sorted.  If
+       not specified rounds are ordered by their position in the config file/VICI
+       message.
+
 connections.<conn>.local<suffix>.certs =
        Comma separated list of certificate candidates to use for authentication.
 
@@ -279,6 +332,34 @@ connections.<conn>.local<suffix>.certs =
        certificate request payloads. If no appropriate CA can be located, the
        first certificate is used.
 
+connections.<conn>.local<suffix>.cert<suffix> =
+       Section for a certificate candidate to use for authentication.
+
+       Section for a certificate candidate to use for authentication. Certificates
+       in _certs_ are transmitted as binary blobs, these sections offer more
+       flexibility.
+
+connections.<conn>.local<suffix>.cert<suffix>.file =
+       Absolute path to the certificate to load.
+
+       Absolute path to the certificate to load. Passed as-is to the daemon, so it
+       must be readable by it.
+
+       Configure either this or _handle_, but not both, in one section.
+
+connections.<conn>.local<suffix>.cert<suffix>.handle =
+       Hex-encoded CKA_ID of the certificate on a token.
+
+       Hex-encoded CKA_ID of the certificate on a token.
+
+       Configure either this or _file_, but not both, in one section.
+
+connections.<conn>.local<suffix>.cert<suffix>.slot =
+       Optional slot number of the token that stores the certificate.
+
+connections.<conn>.local<suffix>.cert<suffix>.module =
+       Optional PKCS#11 module name.
+
 connections.<conn>.local<suffix>.pubkeys =
        Comma separated list of raw public key candidates to use for authentication.
 
@@ -309,6 +390,23 @@ connections.<conn>.local<suffix>.auth = pubkey
        An EAP module implementing the appropriate method is selected to perform
        the EAP conversation.
 
+       If both peers support RFC 7427 ("Signature Authentication in IKEv2")
+       specific hash algorithms to be used during IKEv2 authentication may be
+       configured. To do so use _ike:_ followed by a trust chain signature scheme
+       constraint (see description of the **remote** section's **auth** keyword).
+       For example, with _ike:pubkey-sha384-sha256_ a public key signature scheme
+       with either SHA-384 or SHA-256 would get used for authentication, in that
+       order and depending on the hash algorithms supported by the peer. If no
+       specific hash algorithms are configured, the default is to prefer an
+       algorithm that matches or exceeds the strength of the signature key.
+       If no constraints with _ike:_ prefix are configured any signature scheme
+       constraint (without _ike:_ prefix) will also apply to IKEv2 authentication,
+       unless this is disabled in **strongswan.conf**(5). To use RSASSA-PSS
+       signatures use _rsa/pss_ instead of _pubkey_ or _rsa_ as in e.g.
+       _ike:rsa/pss-sha256_. If _pubkey_ or _rsa_ constraints are configured
+       RSASSA-PSS signatures will only be used if enabled in
+       **strongswan.conf**(5).
+
 connections.<conn>.local<suffix>.id =
        IKE identity to use for authentication round.
 
@@ -361,12 +459,23 @@ connections.<conn>.remote<suffix> {}
        optional unique suffix. To define a single authentication round, the suffix
        may be omitted.
 
+connections.<conn>.remote<suffix>.round = 0
+       Optional numeric identifier by which authentication rounds are sorted.  If
+       not specified rounds are ordered by their position in the config file/VICI
+       message.
+
 connections.<conn>.remote<suffix>.id = %any
        IKE identity to expect for authentication round.
 
        IKE identity to expect for authentication round. Refer to the _local_ _id_
        section for details.
 
+connections.<conn>.remote<suffix>.eap_id = id
+       Identity to use as peer identity during EAP authentication.
+
+       Identity to use as peer identity during EAP authentication. If set to _%any_
+       the EAP-Identity method will be used to ask the client for an identity.
+
 connections.<conn>.remote<suffix>.groups =
        Authorization group memberships to require.
 
@@ -375,6 +484,12 @@ connections.<conn>.remote<suffix>.groups =
        can be certified by different means, for example by appropriate Attribute
        Certificates or by an AAA backend involved in the authentication.
 
+connections.<conn>.remote<suffix>.cert_policy =
+       Certificate policy OIDs the peer's certificate must have.
+
+       Comma separated list of certificate policy OIDs the peer's certificate must
+       have. OIDs are specified using the numerical dotted representation.
+
 connections.<conn>.remote<suffix>.certs =
        Comma separated list of certificate to accept for authentication.
 
@@ -382,6 +497,34 @@ connections.<conn>.remote<suffix>.certs =
        The certificates may use a relative path from the **swanctl** _x509_
        directory or an absolute path.
 
+connections.<conn>.remote<suffix>.cert<suffix> =
+       Section for a certificate to accept for authentication.
+
+       Section for a certificate to accept for authentication. Certificates
+       in _certs_ are transmitted as binary blobs, these sections offer more
+       flexibility.
+
+connections.<conn>.remote<suffix>.cert<suffix>.file =
+       Absolute path to the certificate to load.
+
+       Absolute path to the certificate to load. Passed as-is to the daemon, so it
+       must be readable by it.
+
+       Configure either this or _handle_, but not both, in one section.
+
+connections.<conn>.remote<suffix>.cert<suffix>.handle =
+       Hex-encoded CKA_ID of the certificate on a token.
+
+       Hex-encoded CKA_ID of the certificate on a token.
+
+       Configure either this or _file_, but not both, in one section.
+
+connections.<conn>.remote<suffix>.cert<suffix>.slot =
+       Optional slot number of the token that stores the certificate.
+
+connections.<conn>.remote<suffix>.cert<suffix>.module =
+       Optional PKCS#11 module name.
+
 connections.<conn>.remote<suffix>.cacerts =
        Comma separated list of CA certificates to accept for authentication.
 
@@ -389,11 +532,39 @@ connections.<conn>.remote<suffix>.cacerts =
        The certificates may use a relative path from the **swanctl** _x509ca_
        directory or an absolute path.
 
+connections.<conn>.remote<suffix>.cacert<suffix> =
+       Section for a CA certificate to accept for authentication.
+
+       Section for a CA certificate to accept for authentication. Certificates
+       in _cacerts_ are transmitted as binary blobs, these sections offer more
+       flexibility.
+
+connections.<conn>.remote<suffix>.cacert<suffix>.file =
+       Absolute path to the certificate to load.
+
+       Absolute path to the certificate to load. Passed as-is to the daemon, so it
+       must be readable by it.
+
+       Configure either this or _handle_, but not both, in one section.
+
+connections.<conn>.remote<suffix>.cacert<suffix>.handle =
+       Hex-encoded CKA_ID of the CA certificate on a token.
+
+       Hex-encoded CKA_ID of the CA certificate on a token.
+
+       Configure either this or _file_, but not both, in one section.
+
+connections.<conn>.remote<suffix>.cacert<suffix>.slot =
+       Optional slot number of the token that stores the CA certificate.
+
+connections.<conn>.remote<suffix>.cacert<suffix>.module =
+       Optional PKCS#11 module name.
+
 connections.<conn>.remote<suffix>.pubkeys =
        Comma separated list of raw public keys to accept for authentication.
 
        Comma separated list of raw public keys to accept for authentication.
-       The public keys may use a relative path from the **swanctl** _x509_
+       The public keys may use a relative path from the **swanctl** _pubkey_
        directory or an absolute path.
 
 connections.<conn>.remote<suffix>.revocation = relaxed
@@ -415,9 +586,29 @@ connections.<conn>.remote<suffix>.auth = pubkey
        Authentication to expect from remote (_pubkey_, _psk_, _xauth[-backend]_ or
        _eap[-method]_).
 
-       Authentication to expect from remote. See the **local** sections **auth**
+       Authentication to expect from remote. See the **local** section's **auth**
        keyword description about the details of supported mechanisms.
 
+       To require a trustchain public key strength for the remote side, specify the
+       key type followed by the minimum strength in bits (for example _ecdsa-384_
+       or _rsa-2048-ecdsa-256_). To limit the acceptable set of hashing algorithms
+       for trustchain validation, append hash algorithms to _pubkey_ or a key
+       strength definition (for example _pubkey-sha256-sha512_,
+       _rsa-2048-sha256-sha384-sha512_ or
+       _rsa-2048-sha256-ecdsa-256-sha256-sha384_).
+       Unless disabled in **strongswan.conf**(5), or explicit IKEv2 signature
+       constraints are configured (refer to the description of the **local**
+       section's **auth** keyword for details), such key types and hash algorithms
+       are also applied as constraints against IKEv2 signature authentication
+       schemes used by the remote side. To require RSASSA-PSS signatures use
+       _rsa/pss_ instead of _pubkey_ or _rsa_ as in e.g. _rsa/pss-sha256_. If
+       _pubkey_ or _rsa_ constraints are configured RSASSA-PSS signatures will only
+       be accepted if enabled in **strongswan.conf**(5).
+
+       To specify trust chain constraints for EAP-(T)TLS, append a colon to the
+       EAP method, followed by the key type/size and hash algorithm as discussed
+       above (e.g. _eap-tls:ecdsa-384-sha384_).
+
 connections.<conn>.children.<child> {}
        CHILD_SA configuration sub-section.
 
@@ -433,7 +624,7 @@ connections.<conn>.children.<child>.ah_proposals =
        For AH, this includes an integrity algorithm and an optional Diffie-Hellman
        group. If a DH group is specified, CHILD_SA/Quick Mode rekeying and initial
        negotiation uses a separate Diffie-Hellman exchange using the specified
-       group.
+       group (refer to _esp_proposals_ for details).
 
        In IKEv2, multiple algorithms of the same kind can be specified in a single
        proposal, from which one gets selected. In IKEv1, only one algorithm per
@@ -456,11 +647,18 @@ connections.<conn>.children.<child>.esp_proposals = default
        mode algorithm is used instead of the separate encryption/integrity
        algorithms.
 
-       If a DH group is specified, CHILD_SA/Quick Mode rekeying and initial (non
-       IKE_AUTH piggybacked) negotiation uses a separate Diffie-Hellman exchange
-       using the specified group. Extended Sequence Number support may be indicated
-       with the _esn_ and _noesn_ values, both may be included to indicate support
-       for both modes. If omitted, _noesn_ is assumed.
+       If a DH group is specified, CHILD_SA/Quick Mode rekeying and initial
+       negotiation use a separate Diffie-Hellman exchange using the specified
+       group. However, for IKEv2, the keys of the CHILD_SA created implicitly with
+       the IKE_SA will always be derived from the IKE_SA's key material. So any DH
+       group specified here will only apply when the CHILD_SA is later rekeyed or
+       is created with a separate CREATE_CHILD_SA exchange. A proposal mismatch
+       might, therefore, not immediately be noticed when the SA is established, but
+       may later cause rekeying to fail.
+
+       Extended Sequence Number support may be indicated with the _esn_ and _noesn_
+       values, both may be included to indicate support for both modes. If omitted,
+       _noesn_ is assumed.
 
        In IKEv2, multiple algorithms of the same kind can be specified in a single
        proposal, from which one gets selected. In IKEv1, only one algorithm per
@@ -473,6 +671,15 @@ connections.<conn>.children.<child>.esp_proposals = default
        for interoperability. If no algorithms are specified for AH nor ESP,
        the _default_ set of algorithms for ESP is included.
 
+connections.<conn>.children.<child>.sha256_96 = no
+       Use incorrect 96-bit truncation for HMAC-SHA-256.
+
+       HMAC-SHA-256 is used with 128-bit truncation with IPsec. For compatibility
+       with implementations that incorrectly use 96-bit truncation this option may
+       be enabled to configure the shorter truncation length in the kernel.  This
+       is not negotiated, so this only works with peers that use the incorrect
+       truncation length (or have this option enabled).
+
 connections.<conn>.children.<child>.local_ts = dynamic
        Local traffic selectors to include in CHILD_SA.
 
@@ -490,9 +697,16 @@ connections.<conn>.children.<child>.local_ts = dynamic
        value _opaque_ for RFC 4301 OPAQUE selectors. Port ranges may be specified
        as well, none of the kernel backends currently support port ranges, though.
 
-       Unless the Unity extension is used, IKEv1 supports the first specified
-       selector only. IKEv1 uses very similar traffic selector narrowing as it is
-       supported in the IKEv2 protocol.
+       When IKEv1 is used only the first selector is interpreted, except if
+       the Cisco Unity extension plugin is used. This is due to a limitation of the
+       IKEv1 protocol, which only allows a single pair of selectors per CHILD_SA.
+       So to tunnel traffic matched by several pairs of selectors when using IKEv1
+       several children (CHILD_SAs) have to be defined that cover the selectors.
+
+       The IKE daemon uses traffic selector narrowing for IKEv1, the same way it is
+       standardized and implemented for IKEv2. However, this may lead to problems
+       with other implementations. To avoid that, configure identical selectors in
+       such scenarios.
 
 connections.<conn>.children.<child>.remote_ts = dynamic
        Remote selectors to include in CHILD_SA.
@@ -590,15 +804,17 @@ connections.<conn>.children.<child>.rand_packets = life_packets - rekey_packets
 connections.<conn>.children.<child>.updown =
        Updown script to invoke on CHILD_SA up and down events.
 
-connections.<conn>.children.<child>.hostaccess = yes
+connections.<conn>.children.<child>.hostaccess = no
        Hostaccess variable to pass to **updown** script.
 
 connections.<conn>.children.<child>.mode = tunnel
-       IPsec Mode to establish (_tunnel_, _transport_, _beet_, _pass_ or _drop_).
+       IPsec Mode to establish (_tunnel_, _transport_, _transport_proxy_, _beet_,
+       _pass_ or _drop_).
 
        IPsec Mode to establish CHILD_SA with. _tunnel_ negotiates the CHILD_SA
-       in IPsec Tunnel Mode, whereas _transport_ uses IPsec Transport Mode. _beet_
-       is the Bound End to End Tunnel mixture mode, working with fixed inner
+       in IPsec Tunnel Mode, whereas _transport_ uses IPsec Transport Mode.
+       _transport_proxy_ signifying the special Mobile IPv6 Transport Proxy Mode.
+       _beet_ is the Bound End to End Tunnel mixture mode, working with fixed inner
        addresses without the need to include them in each packet.
 
        Both _transport_ and _beet_ modes are subject to mode negotiation; _tunnel_
@@ -613,6 +829,13 @@ connections.<conn>.children.<child>.policies = yes
        Whether to install IPsec policies or not. Disabling this can be useful in
        some scenarios e.g. MIPv6, where policies are not managed by the IKE daemon.
 
+connections.<conn>.children.<child>.policies_fwd_out = no
+       Whether to install outbound FWD IPsec policies or not.
+
+       Whether to install outbound FWD IPsec policies or not. Enabling this is
+       required in case there is a drop policy that would match and block forwarded
+       traffic for this CHILD_SA.
+
 connections.<conn>.children.<child>.dpd_action = clear
        Action to perform on DPD timeout (_clear_, _trap_ or _restart_).
 
@@ -645,28 +868,85 @@ connections.<conn>.children.<child>.reqid = 0
        not more than once. The default of _0_ uses dynamic reqids, allocated
        incrementally.
 
+connections.<conn>.children.<child>.priority = 0
+       Optional fixed priority for IPsec policies.
+
+       Optional fixed priority for IPsec policies. This could be useful to install
+       high-priority drop policies.  The default of _0_ uses dynamically calculated
+       priorities based on the size of the traffic selectors.
+
+connections.<conn>.children.<child>.interface =
+       Optional interface name to restrict IPsec policies.
+
 connections.<conn>.children.<child>.mark_in = 0/0x00000000
        Netfilter mark and mask for input traffic.
 
-       Netfilter mark and mask for input traffic. On Linux Netfilter may require
-       marks on each packet to match an SA having that option set. This allows
-       Netfilter rules to select specific tunnels for incoming traffic. The
-       special value _%unique_ sets a unique mark on each CHILD_SA instance.
+       Netfilter mark and mask for input traffic. On Linux, Netfilter may require
+       marks on each packet to match an SA/policy having that option set. This
+       allows installing duplicate policies and enables Netfilter rules to select
+       specific SAs/policies for incoming traffic.  Note that inbound marks are
+       only set on policies, by default, unless *mark_in_sa* is enabled. The
+       special value _%unique_ sets a unique mark on each CHILD_SA instance, beyond
+       that the value _%unique-dir_ assigns a different unique mark for each
+       CHILD_SA direction (in/out).
 
        An additional mask may be appended to the mark, separated by _/_. The
        default mask if omitted is 0xffffffff.
 
+connections.<conn>.children.<child>.mark_in_sa = no
+       Whether to set *mark_in* on the inbound SA.
+
+       Whether to set *mark_in* on the inbound SA. By default, the inbound mark is
+       only set on the inbound policy. The tuple destination address, protocol and
+       SPI is unique and the mark is not required to find the correct SA, allowing
+       to mark traffic after decryption instead (where more specific selectors may
+       be used) to match different policies. Marking packets before decryption is
+       still possible, even if no mark is set on the SA.
+
 connections.<conn>.children.<child>.mark_out = 0/0x00000000
        Netfilter mark and mask for output traffic.
 
-       Netfilter mark and mask for output traffic. On Linux Netfilter may require
-       marks on each packet to match a policy having that option set. This allows
-       Netfilter rules to select specific tunnels for outgoing traffic. The
-       special value _%unique_ sets a unique mark on each CHILD_SA instance.
+       Netfilter mark and mask for output traffic. On Linux, Netfilter may require
+       marks on each packet to match a policy/SA having that option set. This
+       allows installing duplicate policies and enables Netfilter rules to select
+       specific policies/SAs for outgoing traffic. The special value _%unique_ sets
+       a unique mark on each CHILD_SA instance, beyond that the value _%unique-dir_
+       assigns a different unique mark for each CHILD_SA direction (in/out).
 
        An additional mask may be appended to the mark, separated by _/_. The
        default mask if omitted is 0xffffffff.
 
+connections.<conn>.children.<child>.set_mark_in = 0/0x00000000
+       Netfilter mark applied to packets after the inbound IPsec SA processed them.
+
+       Netfilter mark applied to packets after the inbound IPsec SA processed them.
+       This way it's not necessary to mark packets via Netfilter before decryption
+       or right afterwards to match policies or process them differently (e.g. via
+       policy routing).
+
+       An additional mask may be appended to the mark, separated by _/_. The
+       default mask if omitted is 0xffffffff. The special value _%same_ uses
+       the value (but not the mask) from **mark_in** as mark value, which can be
+       fixed, _%unique_ or _%unique-dir_.
+
+       Setting marks in XFRM input requires Linux 4.19 or higher.
+
+connections.<conn>.children.<child>.set_mark_out = 0/0x00000000
+       Netfilter mark applied to packets after the outbound IPsec SA processed
+       them.
+
+       Netfilter mark applied to packets after the outbound IPsec SA processed
+       them. This allows processing ESP packets differently than the original
+       traffic (e.g. via policy routing).
+
+       An additional mask may be appended to the mark, separated by _/_. The
+       default mask if omitted is 0xffffffff. The special value _%same_ uses
+       the value (but not the mask) from **mark_out** as mark value, which can be
+       fixed, _%unique_ or _%unique-dir_.
+
+       Setting marks in XFRM output is supported since Linux 4.14. Setting a mask
+       requires at least Linux 4.19.
+
 connections.<conn>.children.<child>.tfc_padding = 0
        Traffic Flow Confidentiality padding.
 
@@ -684,6 +964,45 @@ connections.<conn>.children.<child>.replay_window = 32
        default of 32 are supported using the Netlink backend only, a value of 0
        disables IPsec replay protection.
 
+connections.<conn>.children.<child>.hw_offload = no
+       Enable hardware offload for this CHILD_SA, if supported by the IPsec
+       implementation.
+
+       Enable hardware offload for this CHILD_SA, if supported by the IPsec
+       implementation. The value _yes_ enforces offloading and the installation
+       will fail if it's not supported by either kernel or device.     The value _auto_
+       enables offloading, if it's supported, but the installation does not fail
+       otherwise.
+
+connections.<conn>.children.<child>.copy_df = yes
+       Whether to copy the DF bit to the outer IPv4 header in tunnel mode.
+
+       Whether to copy the DF bit to the outer IPv4 header in tunnel mode. This
+       effectively disables Path MTU discovery (PMTUD).  Controlling this behavior
+       is not supported by all kernel interfaces.
+
+connections.<conn>.children.<child>.copy_ecn = yes
+       Whether to copy the ECN header field to/from the outer IP header in tunnel
+       mode.
+
+       Whether to copy the ECN (Explicit Congestion Notification) header field
+       to/from the outer IP header in tunnel mode. Controlling this behavior is not
+       supported by all kernel interfaces.
+
+connections.<conn>.children.<child>.copy_dscp = out
+       Whether to copy the DSCP header field to/from the outer IP header in tunnel
+       mode.
+
+       Whether to copy the DSCP (Differentiated Services Field Codepoint) header
+       field to/from the outer IP header in tunnel mode. The value _out_ only
+       copies the field from the inner to the outer header, the value _in_ does the
+       opposite and only copies the field from the outer to the inner header when
+       decapsulating, the value _yes_ copies the field in both directions, and the
+       value _no_ disables copying the field altogether.  Setting this to _yes_ or
+       _in_ could allow an attacker to adversely affect other traffic at the
+       receiver, which is why the default is _out_. Controlling this behavior is
+       not supported by all kernel interfaces.
+
 connections.<conn>.children.<child>.start_action = none
        Action to perform after loading the configuration (_none_, _trap_, _start_).
 
@@ -752,6 +1071,28 @@ secrets.eap<suffix>.id<suffix> =
        be specified, each having an _id_ prefix, if a secret is shared between
        multiple users.
 
+secrets.ntlm<suffix> { # }
+       NTLM secret section for a specific secret.
+
+       NTLM secret section for a specific secret. Each NTLM secret is defined in
+       a unique section having the _ntlm_ prefix. NTLM secrets may only be used for
+       EAP-MSCHAPv2 authentication.
+
+secrets.ntlm<suffix>.secret =
+       Value of the NTLM secret.
+
+       Value of the NTLM secret, which is the NT Hash of the actual secret, that
+       is, MD4(UTF-16LE(secret)). The resulting 16-byte value may either be given
+       as a hex encoded string with a _0x_ prefix or as a Base64 encoded string
+       with a _0s_ prefix.
+
+secrets.ntlm<suffix>.id<suffix> =
+       Identity the NTLM secret belongs to.
+
+       Identity the NTLM secret belongs to. Multiple unique identities may
+       be specified, each having an _id_ prefix, if a secret is shared between
+       multiple users.
+
 secrets.ike<suffix> { # }
        IKE preshared secret section for a specific secret.
 
@@ -772,6 +1113,35 @@ secrets.ike<suffix>.id<suffix> =
        may be specified, each having an _id_ prefix, if a secret is shared between
        multiple peers.
 
+secrets.ppk<suffix> { # }
+       Postquantum Preshared Key (PPK) section for a specific secret.
+
+       Postquantum Preshared Key (PPK) section for a specific secret. Each PPK is
+       defined in a unique section having the _ppk_ prefix.
+
+secrets.ppk<suffix>.secret =
+       Value of the PPK.
+
+       Value of the PPK. It may either be an ASCII string,     a hex encoded string if
+       it has a _0x_ prefix or a Base64 encoded string if it has a _0s_ prefix in
+       its value. Should have at least 256 bits of entropy for 128-bit security.
+
+secrets.ppk<suffix>.id<suffix> =
+       PPK identity the PPK belongs to.
+
+       PPK identity the PPK belongs to. Multiple unique identities
+       may be specified, each having an _id_ prefix, if a secret is shared between
+       multiple peers.
+
+secrets.private<suffix> { # }
+       Private key decryption passphrase for a key in the _private_ folder.
+
+secrets.private<suffix>.file =
+       File name in the _private_ folder for which this passphrase should be used.
+
+secrets.private<suffix>.secret
+       Value of decryption passphrase for private key.
+
 secrets.rsa<suffix> { # }
        Private key decryption passphrase for a key in the _rsa_ folder.
 
@@ -808,6 +1178,22 @@ secrets.pkcs12<suffix>.file =
 secrets.pkcs12<suffix>.secret
        Value of decryption passphrase for PKCS#12 container.
 
+secrets.token<suffix> { # }
+       Definition for a private key that's stored on a token/smartcard.
+
+secrets.token<suffix>.handle =
+       Hex-encoded CKA_ID of the private key on the token.
+
+secrets.token<suffix>.slot =
+       Optional slot number to access the token.
+
+secrets.token<suffix>.module =
+       Optional PKCS#11 module name to access the token.
+
+secrets.token<suffix>.pin =
+       Optional PIN required to access the key on the token. If none is provided
+       the user is prompted during an interactive --load-creds call.
+
 pools { # }
        Section defining named pools.
 
@@ -844,18 +1230,40 @@ authorities.<name> { # }
 authorities.<name>.cacert =
        CA certificate belonging to the certification authority.
 
-       The certificates may use a relative path from the **swanctl** _x509ca_
-       directory or an absolute path.
+       CA certificate belonging to the certification authority. The certificates
+       may use a relative path from the **swanctl** _x509ca_ directory or an
+       absolute path.
+
+       Configure one of _cacert_, _file_, or _handle_ per section.
+
+authorities.<name>.file =
+       Absolute path to the certificate to load.
+
+       Absolute path to the certificate to load. Passed as-is to the daemon, so it
+       must be readable by it.
+
+       Configure one of _cacert_, _file_, or _handle_ per section.
+
+authorities.<name>.handle =
+       Hex-encoded CKA_ID of the CA certificate on a token.
+
+       Hex-encoded CKA_ID of the CA certificate on a token.
+
+       Configure one of _cacert_, _file_, or _handle_ per section.
+
+authorities.<name>.slot =
+       Optional slot number of the token that stores the CA certificate.
+
+authorities.<name>.module =
+       Optional PKCS#11 module name.
 
 authorities.<name>.crl_uris =
-       Comma-separated list of CRL distribution points
+       Comma-separated list of CRL distribution points.
 
-       Comma-separated list of CRL distribution points (ldap, http, or file URI)
+       Comma-separated list of CRL distribution points (ldap, http, or file URI).
 
 authorities.<name>.ocsp_uris =
-       Comma-separated list of OCSP URIs
-
-       Comma-separated list of OCSP URIs
+       Comma-separated list of OCSP URIs.
 
 authorities.<name>.cert_uri_base =
        Defines the base URI for the Hash and URL feature supported by IKEv2.
@@ -866,3 +1274,5 @@ authorities.<name>.cert_uri_base =
        built by appending the SHA1 hash of the DER encoded certificates to this
        base URI.
 
+include conf.d/*.conf
+       Include config snippets