selinux Plugin
Purpose
The selinux plugin for libcharon automatically installs and updates
trap policies with generic SELinux contexts/labels. This is especially useful
as responder in roadwarrior scenarios, where start_action=trap can’t be used.
The plugin is disabled by default and can be enabled with the
./configure option
--enable-selinux
| Even if the plugin is not necessary for your specific scenario (e.g. for site-to-site connections), this option is required to enable SELinux support in general. | 
Behavior
On systems with SELinux supported and enabled, it’s expected that the label
configured in swanctl.conf is a generic
context such as system_u:object_r:ipsec_spd_t:s0. When traffic hits a trap
policy with such a context and matches it via association:polmatch, the kernel
generates an acquire with the specific context for which a CHILD_SAs with
matching label is negotiated with the peer.  Since traffic in either direction
usually requires different labels, the peer will probably create another
CHILD_SA. Traffic will then flow through one IPsec SA of each CHILD_SA, the
other SAs will remain unused.
In situations where trap policies can’t be installed from the start (by including
trap in start_action), the selinux plugin dynamically installs trap
policies with the configured label once an IKE_SA is established (possibly
childless if the initiator had no specific label available). It does this for
each child config that has a label configured and uses selinux as label mode.
The trap policies are automatically updated in case of MOBIKE updates and
removed once the IKE_SA is terminated.