openvswitch: 3.7.1 -> 4.0.0 (#558973)

This commit is contained in:
Adam C. Stephens
2026-09-04 14:54:55 +00:00
committed by GitHub
3 changed files with 48 additions and 12 deletions

View File

@@ -64,9 +64,22 @@ in
boot.extraModulePackages = [ cfg.package ];
systemd.sockets.ovsdb = {
description = "Open_vSwitch Database Socket";
wantedBy = [ "sockets.target" ];
before = [ "ovsdb.service" ];
socketConfig = {
ListenStream = "${runDir}/db.sock";
Service = "ovsdb.service";
SocketMode = "0770";
};
};
systemd.services.ovsdb = {
description = "Open_vSwitch Database Server";
wantedBy = [ "multi-user.target" ];
requires = [ "ovsdb.socket" ];
after = [ "ovsdb.socket" ];
path = [ cfg.package ];
restartTriggers = [
db
@@ -95,7 +108,7 @@ in
serviceConfig = {
ExecStart = ''
${cfg.package}/bin/ovsdb-server \
--remote=punix:${runDir}/db.sock \
--remote=pfd:3 \
--private-key=db:Open_vSwitch,SSL,private_key \
--certificate=db:Open_vSwitch,SSL,certificate \
--bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
@@ -105,6 +118,7 @@ in
/var/db/openvswitch/conf.db
'';
Restart = "always";
RestartMode = "direct";
RestartSec = 3;
PIDFile = "/run/openvswitch/ovsdb.pid";
# Use service type 'forking' to correctly determine when ovsdb-server is ready.
@@ -118,8 +132,8 @@ in
systemd.services.ovs-vswitchd = {
description = "Open_vSwitch Daemon";
wantedBy = [ "multi-user.target" ];
bindsTo = [ "ovsdb.service" ];
after = [ "ovsdb.service" ];
requires = [ "ovsdb.socket" ];
after = [ "ovsdb.socket" ];
path = [ cfg.package ];
serviceConfig = {
ExecStart = ''
@@ -131,6 +145,7 @@ in
# Use service type 'forking' to correctly determine when vswitchd is ready.
Type = "forking";
Restart = "always";
RestartMode = "direct";
RestartSec = 3;
};
};

View File

@@ -58,5 +58,27 @@
node1.wait_until_succeeds("ping -c1 10.0.0.2", timeout=30)
node2.wait_until_succeeds("ping -c1 10.0.0.1", timeout=30)
with subtest("Restarting ovsdb preserves OpenFlow flows"):
ovs_ofctl = "ovs-ofctl -O OpenFlow13"
marker_cookie = "0x5eed"
def check_marker_flow():
node1.succeed(
f"{ovs_ofctl} dump-flows vs0 | grep -q 'cookie={marker_cookie}'"
)
node1.succeed(
f"{ovs_ofctl} add-flow vs0 "
f"'cookie={marker_cookie},priority=100,ip,nw_src=192.0.2.1,actions=drop'"
)
check_marker_flow()
node1.succeed("systemctl restart ovsdb.service")
node1.wait_for_unit("ovsdb.service")
node1.wait_for_unit("ovs-vswitchd.service")
node1.wait_for_unit("vs0-netdev.service")
check_marker_flow()
'';
}

View File

@@ -31,13 +31,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = if withDPDK then "openvswitch-dpdk" else "openvswitch";
version = "3.7.1";
version = "4.0.0";
src = fetchFromGitHub {
owner = "openvswitch";
repo = "ovs";
tag = "v${finalAttrs.version}";
hash = "sha256-3FQjV4BZZpn7Loiu9Xm30cCqzkU1HgJ3sAc+I6D8OvQ=";
hash = "sha256-+WjpNJkM3AztBY1gPO6RdujGi86GDTjskJyDK16/9Dc=";
};
outputs = [
@@ -110,13 +110,9 @@ stdenv.mkDerivation (finalAttrs: {
installShellCompletion utilities/ovs-vsctl-bashcomp.bash
mkdir -p $tools/{bin,share/openvswitch/scripts}
mv $out/share/openvswitch/bugtool-plugins $tools/share/openvswitch
mv $out/share/openvswitch/scripts/ovs-{bugtool*,check-dead-ifs,monitor-ipsec,vtep} $tools/share/openvswitch/scripts
mv $out/share/openvswitch/scripts/ovs-{check-dead-ifs,monitor-ipsec,vtep} $tools/share/openvswitch/scripts
mv $out/share/openvswitch/scripts/usdt $tools/share/openvswitch/scripts
mv $out/bin/ovs-{bugtool,dpctl-top,l3ping,parse-backtrace,pcap,tcpdump,tcpundump,test,vlan-test} $tools/bin
wrapProgram $tools/bin/ovs-l3ping \
--prefix PYTHONPATH : $out/share/openvswitch/python
mv $out/bin/ovs-{dpctl-top,pcap,tcpdump,tcpundump} $tools/bin
wrapProgram $tools/bin/ovs-tcpdump \
--prefix PATH : ${lib.makeBinPath [ tcpdump ]} \
@@ -143,7 +139,10 @@ stdenv.mkDerivation (finalAttrs: {
pyparsing
pytest
setuptools
]);
tftpy
])
# pyftpdlib depends on pysendfile extension, which cannot be static
++ lib.optionals (!stdenv.hostPlatform.isStatic) [ python3.pkgs.pyftpdlib ];
passthru = {
tests = {