On 1/15/25 10:20, Frode Nordahl wrote:
> On Wed, Jan 15, 2025 at 12:30 AM Ilya Maximets <[email protected]> wrote:
>>
>> Commit in the fixes tag added support for using custom ipsec.conf with
>> ovs-monitor-ipsec, but it didn't provide a way to use those options
>> via ovs-ctl. This makes it not possible to use these options from a
>> systemd unit, for example.
>>
>> Fix that by adding --ovs-monitor-ipsec-options knob to ovs-ctl and
>> allowing OPTIONS to be passed via sysconfig.
>>
>> Our Debian units are using StrongSwan, so they do not need these
>> Libreswan-specific options, however, it's better to keep systemd
>> integration similar to Fedora/RHEL. There is at least one other
>> option that can be used with StrongSwan.
>>
>> Only the Debian init file is updated, because we don't have IPsec
>> support for init in Fedora/RHEL.
>>
>> There is a line length warning in the example, but it's hard to split
>> it into multiple lines, and I think, it's a good configuration example
>> to provide.
>>
>> Fixes: 09d7c5ac0054 ("ipsec: Add support for using non-root ipsec.conf.")
>> Signed-off-by: Ilya Maximets <[email protected]>
>> ---
>> NEWS | 2 ++
>> debian/openvswitch-ipsec.init | 5 ++++-
>> debian/openvswitch-ipsec.service | 3 ++-
>> ...b_systemd_system_openvswitch-ipsec.service | 4 +++-
>> ...vswitch_scripts_systemd_sysconfig.template | 3 +++
>> utilities/ovs-ctl.in | 22 ++++++++++++-------
>> 6 files changed, 28 insertions(+), 11 deletions(-)
>>
>> diff --git a/NEWS b/NEWS
>> index 83f051379..1aedbbe44 100644
>> --- a/NEWS
>> +++ b/NEWS
>> @@ -55,6 +55,8 @@ Post-v3.4.0
>> to make it not configure any crypto options (ike/esp) for
>> connections.
>> Most useful in combination with '--root-ipsec-conf' where system-wide
>> crypto-policy is included from the root ipsec.conf.
>> + * New option '--ovs-monitor-ipsec-options' for 'ovs-ctl
>> start-ovs-ipsec'
>> + to pass above new options to ovs-monitor-ipsec.
>>
>>
>> v3.4.0 - 15 Aug 2024
>> diff --git a/debian/openvswitch-ipsec.init b/debian/openvswitch-ipsec.init
>> index aa6838454..f66058b8a 100755
>> --- a/debian/openvswitch-ipsec.init
>> +++ b/debian/openvswitch-ipsec.init
>> @@ -41,6 +41,8 @@ test -x $DAEMON || exit 0
>>
>> . /lib/lsb/init-functions
>>
>> +test -e /etc/default/openvswitch-switch && . /etc/default/openvswitch-switch
>> +
>
> In Debian, each "binary" package has its own defaults file, so we
> would need to create a new shell fragment that can double as a systemd
> environment file named /etc/default/openvswitch-ipsec.
Ack. Good to know. Will try and add one.
>
>> DODTIME=10 # Time to wait for the server to die, in seconds
>> # If this value is set too low you might not
>> # let some servers to die gracefully and
>> @@ -72,7 +74,8 @@ running() {
>> }
>>
>> start_server() {
>> - ${DATADIR}/scripts/ovs-ctl --ike-daemon=strongswan start-ovs-ipsec
>> + ${DATADIR}/scripts/ovs-ctl --ike-daemon=strongswan \
>> + start-ovs-ipsec $OVS_CTL_OPTS
>> return 0
>> }
>>
>> diff --git a/debian/openvswitch-ipsec.service
>> b/debian/openvswitch-ipsec.service
>> index 51b9b315a..3bc2e489b 100644
>> --- a/debian/openvswitch-ipsec.service
>> +++ b/debian/openvswitch-ipsec.service
>> @@ -7,8 +7,9 @@ After=openvswitch-switch.service
>> Type=forking
>> PIDFile=/run/openvswitch/ovs-monitor-ipsec.pid
>> Restart=on-failure
>> +EnvironmentFile=-/etc/default/openvswitch-switch
>
> See comment above about per "binary" package defaults file.
>
>> ExecStart=/usr/share/openvswitch/scripts/ovs-ctl --no-monitor \
>> - --ike-daemon=strongswan start-ovs-ipsec
>> + --ike-daemon=strongswan start-ovs-ipsec $OVS_CTL_OPTS
>> ExecStop=/usr/share/openvswitch/scripts/ovs-ctl stop-ovs-ipsec
>>
>> [Install]
>> diff --git a/rhel/usr_lib_systemd_system_openvswitch-ipsec.service
>> b/rhel/usr_lib_systemd_system_openvswitch-ipsec.service
>> index a4bf475d0..913598f08 100644
>> --- a/rhel/usr_lib_systemd_system_openvswitch-ipsec.service
>> +++ b/rhel/usr_lib_systemd_system_openvswitch-ipsec.service
>> @@ -7,8 +7,10 @@ After=openvswitch.service
>> Type=forking
>> PIDFile=/run/openvswitch/ovs-monitor-ipsec.pid
>> Restart=on-failure
>> +EnvironmentFile=/etc/openvswitch/default.conf
>> +EnvironmentFile=-/etc/sysconfig/openvswitch
>> ExecStart=/usr/share/openvswitch/scripts/ovs-ctl --no-monitor \
>> - --ike-daemon=libreswan start-ovs-ipsec
>> + --ike-daemon=libreswan start-ovs-ipsec $OPTIONS
>> ExecStop=/usr/share/openvswitch/scripts/ovs-ctl stop-ovs-ipsec
>>
>> [Install]
>> diff --git a/rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template
>> b/rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template
>> index c467d02db..63833c4d8 100644
>> --- a/rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template
>> +++ b/rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template
>> @@ -25,6 +25,9 @@
>> # --ovs-vswitchd-options='-vconsole:dbg -vfile:dbg'
>> # --ovsdb-server-options='-vconsole:dbg -vfile:dbg'
>> #
>> +# Or to start with non-root IPsec config file:
>> +# --ovs-monitor-ipsec-options='--ipsec-conf=/etc/ipsec.d/ovs.conf
>> --root-ipsec-conf=/etc/ipsec.conf'
>> +#
>> OPTIONS=""
>>
>> # Uncomment and set the OVS User/Group value
>> diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in
>> index 1f9ce1e6e..03a39337f 100644
>> --- a/utilities/ovs-ctl.in
>> +++ b/utilities/ovs-ctl.in
>> @@ -242,18 +242,20 @@ start_forwarding () {
>> }
>>
>> start_ovs_ipsec () {
>> + set ${datadir}/scripts/ovs-monitor-ipsec unix:"$DB_SOCK"
>> + set "$@" --log-file=${logdir}/ovs-monitor-ipsec.log
>> + set "$@" --pidfile=${rundir}/ovs-monitor-ipsec.pid
>> + set "$@" --detach
>> + test X"$MONITOR" = Xno || set "$@" --monitor
>> + set "$@" --ike-daemon=$IKE_DAEMON
>> if test X$RESTART_IKE_DAEMON = Xno; then
>> - no_restart="--no-restart-ike-daemon"
>> + set "$@" --no-restart-ike-daemon
>> fi
>> - if test X"$MONITOR" != Xno; then
>> - monitor_arg="--monitor"
>> + if test X"$OVS_MONITOR_IPSEC_OPTIONS" != X; then
>> + set "$@" $OVS_MONITOR_IPSEC_OPTIONS
>> fi
>>
>> - ${datadir}/scripts/ovs-monitor-ipsec \
>> - --pidfile=${rundir}/ovs-monitor-ipsec.pid \
>> - --ike-daemon=$IKE_DAEMON \
>> - $no_restart $monitor_arg \
>> - --log-file --detach unix:${rundir}/db.sock || return 1
>> + action "Starting ovs-monitor-ipsec" "$@" || return 1
>> return 0
>> }
>>
>> @@ -351,6 +353,7 @@ set_defaults () {
>> OVS_VSWITCHD_WRAPPER=
>> OVSDB_SERVER_OPTIONS=
>> OVS_VSWITCHD_OPTIONS=
>> + OVS_MONITOR_IPSEC_OPTIONS=
>> OVSDB_SERVER_UMASK=
>> OVS_VSWITCHD_UMASK=
>>
>> @@ -466,6 +469,9 @@ Option for "start-ovs-ipsec":
>> the IKE daemon for ipsec tunnels (either libreswan or strongswan)
>> --no-restart-ike-daemon
>> do not restart the IKE daemon on startup
>> + --ovs-monitor-ipsec-options=OPTIONS
>> + additional options for ovs-monitor-ipsec (example:
>> + '--ipsec-conf=/etc/ipsec.d/ovs.conf
>> --root-ipsec-conf=/etc/ipsec.conf')
>>
>> Other options:
>> -h, --help display this help message
>> --
>> 2.47.0
>
> Apart from the defaults file naming I took this for a spin and it LGTM.
Thanks!
Best regards, Ilya Maximets.
>
> --
> Frode Nordahl
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev