Skip to content

ifupdown2 3.10 release - #352

Open
julienfortin wants to merge 69 commits into
CumulusNetworks:masterfrom
julienfortin:sync/2026-06
Open

ifupdown2 3.10 release#352
julienfortin wants to merge 69 commits into
CumulusNetworks:masterfrom
julienfortin:sync/2026-06

Conversation

@julienfortin

Copy link
Copy Markdown
Contributor

Summary

This prepares the 3.10.0 release, with a focus on IPv6 VXLAN support, safer reload behavior, and preserving existing network state during configuration changes.

Highlights

VXLAN

  • Support IPv6 local tunnel addresses.
  • Handle IPv4/IPv6 tunnel address-family transitions by recreating the device when required.
  • Clear stale local endpoints when they are removed from an L3VXI.
  • Preserve explicit vxlan-ageing 0 and propagate ageing settings to SVD and L3VXI devices.
  • Correct local/group address reset handling.

Address and DHCP handling

  • Enforce the IPv6 minimum MTU for static and DHCPv6 configurations, including force and ignore-error paths.
  • Preserve IPv6 addresses when only the primary IPv4 address changes.
  • Avoid installing gateways on administratively down links while still removing obsolete routes.
  • Improve DHCP-to-static transitions, stale PID handling, and DHCPv6 client release.
  • Restore IPv6 correctly when moving interfaces between bridge and bond roles.
  • Harden address-virtual FDB cleanup.

Reload and interface reconciliation

  • Avoid bridge-port flaps during reload.
  • Preserve PVID-to-VNI mappings when VLAN state changes.
  • Requeue bonds when saved slave state needs recovery.
  • Propagate bridge MAC changes to dependent VLAN interfaces.
  • Requeue CLAG interfaces when the loopback anycast address changes.
  • Keep VLAN VRF slaves down when their lower interface is down.
  • Reject conflicting bridge, bond, and VRF ownership before changing link state or disrupting connections.
  • Reset cached PVRST state between down and up phases.

Ethtool

  • Add policy-gated single-speed auto-negotiation for switch ports.
  • Preserve existing behavior when the feature is not enabled.
  • Handle duplex defaults, lane-state recovery, retries, and rollback after failed transitions.

Parser, netlink, and service robustness

  • Handle malformed source-directory input and close parser files on errors.
  • Remove obsolete json.loads(..., encoding=...) usage.
  • Use the Linux MCTP address-family value and harden multipath route decoding.
  • Add a networking service startup timeout and correct shutdown ordering.
  • Remove obsolete shutdown.target enablement during package upgrades.
  • Align runtime, setup, and Debian metadata for 3.10.0 / 3.10.0-1.

Compatibility

  • Existing ifupdown2.conf defaults are unchanged.
  • The Debian addon set is unchanged, including Open vSwitch and batman-adv support.
  • Single-speed auto-negotiation remains disabled unless explicitly enabled by policy.
  • Python 3.7 remains the minimum supported version.

Validation

  • 1,198 unit tests passed
  • 69 physical-switch integration tests passed
  • 3 intentional integration skips
  • Entire commit series validated against Python 3.7 grammar
  • Exact package, interfaces, drop-in, ethtool, and physical-port state restoration verified
  • Debian metadata, shell syntax, whitespace, and source-parity checks passed

Nita Kachhadiya and others added 30 commits August 14, 2026 01:17
(cherry picked from commit e41af9241a175cc4221cea580cd087b3e30ec4da)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…g in ifupdown2

(cherry picked from commit 4c27bc1fbc8f11dc78d9ac119f95161685755bf3)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…other

When a port moves between VLAN-aware bridges, processing order can leave the
netlink cache pointing at the old bridge. The stale mapping prevents the port
from being enslaved to the bridge selected by the current configuration.

Use the configured bridge mapping whenever it differs from the cached mapping.

Signed-off-by: Abhishek Agarwal (Networking SW) <abhishag@nvidia.com>
(cherry picked from commit b76b133e1188c2780831f9b34c05d982db1a65b7)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Closing a socket on the main VRF device can require a path through one of its
slaves. Taking every slave down first can leave the connection stuck in
FIN-WAIT-1 and prevent its namespace from being released.

Close sockets on the main VRF before taking slaves down, then close them again
afterward to catch sessions reopened during that window.

Signed-off-by: Andy Roulin <aroulin@nvidia.com>
(cherry picked from commit 897ab792629aa4247a8d3bf375188dc5c9467664)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
(cherry picked from commit dba61d4a6fa44cd430d428049c94c0da43f65748)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
In 3.9 the encoding keyword argument of json.loads has been removed
any decoding needs to be done prior to the json.loads call.

sys.stdin.read() always return a string, so there's no need to do any
decoding anymore.

Tests:
- manual regression tests
- utf-8 tests:

$  echo '{ "auto": true, "name": "ñáöü" }' | ifquery -t json "ñáöü" -i -
auto ñáöü
iface ñáöü
$

(cherry picked from commit 58ca3b4479cbf3399fa5897c03a9c5b62781bbed)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
The kernel rejects gateway installation on an administratively down link.
Skip gateway additions while KEEP_LINK_DOWN is active, but continue deleting
gateways removed from the configuration.

Signed-off-by: Nita MS <nkachhadiya@nvidia.com>
(cherry picked from commit 9132b6cbf5aa4e2e0e61e968b8810b6db7d63459)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
(cherry picked from commit 857de67bcd9914b9f88571ca82fe11a6f03c8097)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
We have done few fixes in the past where dhclient process were getting
terminated and there were stale dhclient pidfiles that were causing
issues when trying to assign same dhcp ip as static IP. In earlier case,
we fixed two things -
a. workaround fix to cleanup the stale dhclient pids
and force release the dhclient process.
b. Fixing the actual culprit that was terminating the dhclient process
to ensure no stale pids

The current issues seems to be following -
a. Either the dhclient process that was released is deleting the address
but not clearing the cache on time (there is slight delay). Subsequently
we try to force clear the cache which has a bug that prevents it from
clearing the cache. Later when trying to assign static IP, it is skipped
since the same address is already present in cache.

Subsequently upon debugging we also found that there could be scenario
where releasing of dhclient process would not result in deleting the
address from the interface. Then even if we clear the cache, there will
be failure when trying to assign static IP (same address) since it will
complain that "Address exists" and not overwrite it. Later upon lease
expiry the address will again get deleted and cause same issue.

Fixes done:
1. Fixed the code for clearing of address cache to use address version
instead of address family. Everywhere we are saving the cache with
address version as key but while force clearing the cache we were using
address family which is incorrect

2. When trying to force add a static address, we should ideally avoid
checking the cache and try to add the address irrespective of whether
the address cache has the address configured or not.
Also in the same path, we should ensure that the address is deleted
before attempting to add the address.

3. In one of the previous fix we were returning True in case of stale
dhclient pid file existing when the process was terminated. Ideally we
should be releasing the dhclient process to clean up the cache and still
return False to indicate that dhclient is not actually running. This is
required in the dhcp config scenario when it is expected to setup the
dhclient process even in case a stale one exists.

4. We are forcing the static address add on an interface irrespective of
whether dhclient process was running or not. We could have a scenario of
someone manually running dhclient using some other pid file in which
case we will not be able to clean up the address if the same address is
assigned in dhcp server that the static address is trying to assign.

(cherry picked from commit f0ca63883634d691e84ccc2f6d6e65f68d560112)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…tatic IP

Recently we added a fix to force add static IP address irrespective
whether we have dhclient process running previously or not.

Ideally, we have "ifreload -a --diff" command if we do not want existing
configs to be overwritten, however, the baseline behaviour also prevents
overwriting existing IP address on the interface if it is same as the
one that is getting configured.

We need to add logic to force-reapply the static IP address only when we
move from dhcp/dhcp6 to static IP address in order to avoid this
regression.

We cannot just rely on checking the dhclient process running since there
are scenarios where the dhclient process is not running (due to some
corner case scenario/bug) and still we need to force reapply the static
IP address.

For such cases, we have now added a check to force reapply static IP
address only when previous address method on the ifaceobj is dhcp/dhcp6
and current address method is not dhcp.

Unit Test:
1. Executed `ifreload -a` with interface static IP configured. Ensured
that the interface static IP is not reconfigured.
2. Have neigh entries installed in kernel on a given IP interface.
Execute `ifreload -a` and ensure the neigh entries are not deleted after
ifreload.

Signed-off-by: Abhishek Agarwal <abhishag@nvidia.com>
(cherry picked from commit fbd4659079bf67bf9e07b341a8a6b5e69665cb32)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
We added a logic recently to release the dhclient process when stale pid
exists when trying to check the dhclient.is_running. The motivation was
to cleanup the state during config apply process

The same API is also invoked during ifquery as well. Since ifquery is
simply trying to check the dhclient process running or not, we should
add check to not cleanup the stale pids in that sequence/flow.

(cherry picked from commit 521ee1f6d935e0c90b653201bc43d4237f844ce7)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
For DHCPv6, when trying to check for the PID file to determine whether
the DHCPv6 client is running or not, we are incorrectly checking for the
v4 PID file instead of checking for the v6 pid file.

Need to fix the pid file check in the code.

(cherry picked from commit 2b3f0b0e3023a5967a10113ed4df9ff8080cf365)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…ort to bond-member

1. The bond addon module had logic to re-enable ipv6 if previous saved
state had the interface as bridge-port.
   However, the previous saved state did not save bridge-port flag in
link_privflags of the ifaceobj.

   inside sync_ifaceobj it was using compare function to overwrite the
saved object or not.
   The compare function was not taking into account link_privflags
between saved and current ifaceobj
   Hence it was not saving the state as bridge-port (link_privflags) for
already saved ifaceobj

   Fix: Fixed the compare logic in iface.py code to include check for
"link_privflags" as well

2. In diff mode, when moving the port from bridge to bond, there was no
change detected for the interface.
   this is because the `__eq__` function for ifaceobj was not
considering all the properties - ideally should re-use the compare
object
   the sync_ifaceobj was not kicking in when interface moving from
bridge to bond and hence the link_privflags state was not getting
updated in saved state

   Fix: Use compare function in `__eq__` for ifaceobj class object

3. After fixing above two issues, the interface is now included in the
diff objlist which allowed the schedule reload of the interface
   Once the schedule_reload operation happened on interface, the saved
state got overwritten with the current state
   Later, during schedule_reload of bond interface, the logic to
re-enable ipv6 was not kicked in again because it could not figure out
the old state (which already got overwritten)

   Fix:
   we need to add a logic in interface address.py to re-enable ipv6 when
it is no longer part of bridge.
   we can also remove the logic from bond.py that checks for old state
to re-enable ipv6 - may keep it for now to ensure no other case is
broken

Signed-off-by: Abhishek Agarwal <abhishag@nvidia.com>
(cherry picked from commit 94df840be1e3a53390b1106d5c2d19cf6c3e610b)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Mark regular-expression patterns as raw strings so imports do not emit
invalid-escape SyntaxWarnings. Pattern semantics remain unchanged.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Treat numeric and string zero as configured values while preserving the
existing fallback for absent or empty input.

Forward zero through the addon, iproute2, and netlink construction so a
custom timer can be reset instead of leaving stale running state.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
The imported check raises in normal operation, but force and
ignore-errors suppress that exception. Return an explicit failure so an
invalid MTU is never applied.

Validate before the cached-MTU shortcut so adding IPv6 to an existing
sub-minimum interface is also rejected.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
… configured

DHCPv6 release needs a link-local source address. A link-down interface has
already lost that address by the time the DHCP addon runs, so release can fail
and abort reload.

Treat DHCP release failure as non-fatal after the link is intentionally down.

Signed-off-by: Nita MS <nkachhadiya@nvidia.com>
(cherry picked from commit 6a292af8bf79da7865b0578512416db1bdee3fb1)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…address changes

IPv4 primary-address changes previously purged every address on the interface.
That briefly removed unchanged IPv6 addresses and could withdraw IPv6 routes.

Evaluate primary changes within IPv4 only. Preserve configured IPv6 addresses
during an IPv4 reorder while still deleting IPv6 addresses explicitly removed
from the configuration.

Signed-off-by: Lohith CS <lcs@nvidia.com>
(cherry picked from commit 43a14a8edf3975849242a4278c5be9cff295117c)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
… sync

Avoid crashing in the bond reload path when the slave list is missing
or a slave, such as a dummy interface, does not expose a permanent MAC.
This keeps ifreload resilient for dummy-backed bond configurations.

Normalize missing running slave state to an empty list and add regression
tests for absent bond slaves and missing slave permanent hardware addresses.

(cherry picked from commit 2349454f8f55abe4206f35b022c0560965b6a639)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…terfaces

An interface configured under incompatible master types could be detached from
its existing bond, bridge, or VRF and enslaved to another master.

Reject conflicting ownership before changing link or protocol state, closing
connections, releasing DHCP, creating a VRF device, or setting a new master.

Signed-off-by: Lohith CS <lcs@nvidia.com>
(cherry picked from commit ff71b0539e1da682924e88b6854be4cc652aa740)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…update

When adding a port to a bridge - the port gets put into VLAN 1 this
can cause packets to get leaked in VLAN 1 if the port is up and sends
traffic before being put in the correct VLAN (if different than 1).
To prevent this we need to set the port admin down.

(cherry picked from commit 5682d60d05598565c148162e8912bd5dbbd4ad2f)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…evert)

RCA:
Whenever any new vlans/l2-vnis are added on the node, we seem to be flapping
all the bridge-ports present part of the bridge (including vxlan device). As
a result, this causes lots of churn in the network leading to traffic loss as
well. Ideally, any new vlans/l2-vnis on the top of existing ones shouldn't lead
to any traffic loss for the existing vlans/l2-vnis. In this instance, as all
the devices including vxlan device is flapped, it leads to complete blackholing.

Fix: Reverting the latest change flapping existing ports - we will only keep
admin-down newly added ports to avoid packets leaking into VLAN 1.

(cherry picked from commit d4e736c4ef25d826a33036a9ca9e3c291ed61a05)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…ort are admin-downed

In the non-ifreload scenarios new brports stayed down.
We need extra handling to bring them back up.

(cherry picked from commit bc21765dce50d4d4a2064a1e531229b86c99d974)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Bridge ports are already brought up in the preceding batch. A second non-batch
link-up can fail while the bond master is momentarily down and adds no useful
state transition, so remove it.

Update the kept-down gateway regression to assert kernel state directly and
remove obsolete failure-output fixtures.

Signed-off-by: Abhishek Agarwal <abhishag@nvidia.com>
(cherry picked from commit 804d8acde3ec12faa001930dab1b5dfc830ae883)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Deleting a primary IPv4 address may implicitly remove its secondary before
ifupdown2 issues the explicit secondary delete. Accept only that ENOENT
warning while continuing to reject any warning involving retained IPv6.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Accept only the known stale management-address ENOENT warning and require
the IPv6 monitor to observe the IPv4 transition without depending on a
specific explicit-delete event being flushed to its output.

Final kernel assertions still verify removed IPv6 is absent and retained
IPv6 never transiently disappears.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
vlan-bridge-binding controls an SVI using VLAN membership on its lower
bridge. It is not meaningful for an ordinary VLAN whose lower interface
is a physical, bond, or other non-bridge device.

Reset the requested or default value to None unless at least one lower
interface object is a bridge. Keep the Debian-facing default at off.

(cherry picked from commit 74bfd4dc86f496732e96e4edbc4f7624dd6f1fbf)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
The public address path already uses the shared boolean helpers instead of
importing distutils.util.strtobool. Extend the common mapping with y/n,
t/f, and true/false so the replacement accepts the same boolean aliases.

(cherry picked from commit eaf897a4c74eca3efceec716e3ea72f211b62c35)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…batch operations encounter conflicts

When changing address-virtual MAC addresses, a duplicate-IP batch error
could abort before stale bridge FDB entries were removed.

Continue only when the batch reports one or more RTNETLINK File exists
errors and no other RTNETLINK failures. Unknown or mixed failures still
propagate, while duplicate-address conflicts no longer skip FDB cleanup.

(cherry picked from commit b81214c7eb8ea40949f0b8770a5bf9a91d73c588)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Add comprehensive IPv6 support for VXLAN local tunnel IP configuration,
enabling VXLAN underlays to use either IPv4 or IPv6 addressing.

Key changes:
- accept IPv4 and IPv6 values for vxlan-local-tunnelip
- support IFLA_VXLAN_LOCAL6 alongside IFLA_VXLAN_LOCAL
- parse both address families using ipnetwork.IPNetwork
- use the iproute2 -6 flag for IPv6 VXLAN configurations
- pass the IP version through single-VXLAN and L3VXI helpers
- reconcile and report both families in ifquery output

A VXLAN interface supports one local address family at a time. A focused
integration test covers IPv6 creation, query output, and idempotent reload.

(cherry picked from commit 82d545ef72f4c8d65d464d0b43c4f584a365f106)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Tejeswar Pichuka and others added 30 commits August 16, 2026 00:55
…ssing SIGTERM during shutdown

Do not enable networking.service through shutdown.target. The service is
already active from basic.target/network.target; Conflicts=shutdown.target
and Before=shutdown.target stop it through the normal ExecStop path.

Keeping shutdown.target in WantedBy can add a contradictory start job to the
shutdown transaction and race normal termination.

(cherry picked from commit 314ea1d17e4b4a5be138eb1180bea2aaa55cf8ff)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
During diff-mode bridge creation, the generic slave handler brought a new
port up before the bridge module deliberately cycled it for protected
enslavement. That produced an unnecessary UP-DOWN-UP sequence.

For a configured bridge port with no running bridge master, defer link-up
to the bridge module. Continue allowing recovery for already-enslaved
bridge ports and preserve existing behavior for other slave types.

A focused diff-mode integration test verifies the deferred link-up path and
final admin-up state. The existing EVPN regression accepts only the known
management-address cleanup warning.

(cherry picked from commit f8d9a8266ee4faf837a46f97f9d75c3899e75b67)
Signed-off-by: Lohith CS <lcs@nvidia.com>
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
…down

Treat the lower VLAN raw device's running IFF_UP state as a gate before
bringing a VLAN VRF slave up. This complements the existing configured
link-down check and avoids ENETDOWN when the lower is intentionally down.

Ordinary VRF slaves and VLANs with an admin-up lower retain existing
behavior. A focused live test verifies the VLAN remains enslaved and down.

(cherry picked from commit 7506df6923d1e82a00b60b2c91e4739dacb0da40)
Signed-off-by: abhishag <abhishag@nvidia.com>
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
The regression edits the active ENI by removing IPv4 and IPv6 addresses.
Use ifreload --diff, the operation that reconciles configuration removals,
instead of re-running ifup on an already-applied interface.

This makes explicit IPv6 removal deterministic while retaining the monitor
assertion that configured IPv6 never flaps.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
When a port is enslaved to a VLAN-aware bridge, the kernel auto-adds
VLAN 1 with the PVID flag. The netlink cache can receive this update
before bridge PVID processing. Single VXLAN devices have no configured
PVID, so the check can delete VLAN 1 and its VNI tunnel mapping.

Filter a running PVID through bridge-vlan-vni-map before scheduling its
deletion. VLANs managed by the tunnel-map handler remain intact, while
ordinary PVID deletion is unchanged.

(cherry picked from commit fa0dd84f007d26aee76f0baf991b3b62fa10be5e)
Signed-off-by: Sapir Elyovitch <selyovitch@nvidia.com>
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Recreate a collect-metadata VXLAN twenty times and verify its VLAN 1 to
VNI mapping survives every reload. Confirm each logical device is removed
before recreation and guarantee cleanup if an assertion fails.

The regression fails without fa0dd84f.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
ifreload --diff schedules its down phase against saved interface objects
and its up phase against the new configuration. PVRST_MODE caches the
process-wide scan result, so a decision made during down can prevent up
from scanning its own objects. A stale false value leaves mstpd in RSTP;
a stale true value can prevent PVRST from being cleared.

Reset the cache at each sched_ifaces boundary so every phase evaluates its
own interface set. The regression exercises RSTP to PVRST and back across
a non-empty down phase.

(cherry picked from commit 28313c06435b626eb97627b3024f8fa0d3481903)
Signed-off-by: Lohith CS <lcs@nvidia.com>
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
The brief link display reports operational state, which can be DOWN when an
interface is administratively up but has no carrier. Read the kernel JSON flags
and check IFF_UP directly instead.

(cherry picked from commit 3d5b2c549b0a1c64c3d9e5fbf9c7b3c5d16db4c8)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
The interface is administratively up, but the test still expects it to be
down. Update the stale expectation to match ifupdown2 behavior.

(cherry picked from commit bb59b9859760070ba3e44313cb5bf61e0627e90e)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Escape the sed word-boundary expressions so Python does not treat them as
invalid string escapes. Restore diff mode after the multi-bridge scenario so
its local harness setting cannot leak into later tests.

(cherry picked from commit abe47a99e30034eb35d715955ca8c281fa564370)
Signed-off-by: Nita MS <nkachhadiya@nvidia.com>
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Restore the caller's reload mode even when the multi-bridge scenario fails.
Document and assert the physical port's final administrative state so both
link-state fixtures are fully covered.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Promote the secondary IPv4 address without editing IPv6 configuration, then
require both configured IPv6 addresses to remain continuously present. This
keeps the regression focused on the purge bug and removes an unrelated,
sequence-sensitive explicit-removal check.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Use the module's duplex default only when a non-switch interface has an
effective fixed-speed request and no policy duplex. This avoids standalone
duplex commands, leaves switch ports policy-driven, and preserves explicit
policy precedence.

Update the stale generated man-page value to match the existing module
metadata.

(cherry picked from commit 4fbd40ec9f2ffa74a5f59a2386554a3bcf9617bd)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Add a disabled-by-default policy path for switch ports. Autonegotiation can
advertise either all supported modes or one configured speed, while forced
mode continues to require a positive speed. Non-switch interfaces retain the
legacy path.

Reapply link mode whenever the module runs because raw ENI and running speed
cannot identify the advertised mode. Preserve effective mode outside ENI
diff comparison so forced-lane to autoneg transitions can be cleared safely,
retried after failure, or rolled back if the final command fails.

(cherry picked from commit d23a229eaa64e96cc38cfcbab2069319887e1d29)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Co-authored-by: sbandlamudi <sbandlamudi@nvidia.com>
Compare every saved and current loopback clagd-vxlan-anycast-ip value before
building the up queue. Added, changed, or removed values now trigger the
existing CLAG-wide fanout, including complete loopback removal.

Keep the public current-CLAG detection so changes to other global CLAG
attributes continue to schedule every configured CLAG interface.

(cherry picked from commit c829f6f0ea3dbe8b176b50184f04b0cec8983d32)
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
When a saved bond slave is missing or administratively down, diff recovery
already schedules the slave. Also schedule its configured bond master so the
bond module can restore kernel master ownership.

Limit expansion to current BOND_SLAVE interfaces and uppers that are actual
configured bond devices; ordinary diffs, bridge/VRF slaves, and stale uppers
retain existing behavior.

(cherry picked from commit 05d4f64e6ce9b9955513857ed4fe493d0a465246)
Signed-off-by: Abhishek Agarwal <abhishag@nvidia.com>
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
When a queued bridge's configured MAC changes, also schedule its direct VLAN
uppers. Inherited SVIs then receive the new bridge MAC, while explicit-MAC
SVIs rerun to preserve their own MAC and associated FDB state.

Compare normalized MAC values across every bridge stanza, preserve value
order, aggregate split SVI dependency metadata, and exclude non-VLAN uppers.

(cherry picked from commit f1446a13d6a5ce60b07f75bbff2aea982c3da07e)
Signed-off-by: Lohith CS <lcs@nvidia.com>
Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Prepare coherent Python and Debian 3.10.0-1 release metadata and summarize the
VXLAN, ethtool, reload, address, parser, netlink, and service changes.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Validate rtnexthop and nested-attribute lengths, scan the complete nested list,
and decode only family-correct RTA_GATEWAY payloads. Malformed or unsupported
entries are skipped without fabricating a device nexthop.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Treat inet6 and DHCPv6 interface intent as IPv6 configuration even without a
static address. Low explicit or inherited MTUs now mark the interface failed
instead of logging and returning success.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Do not seed current global VXLAN state from saved reload objects. When an L3VXI
drops its effective local endpoint, inspect the running link and recreate the
device so collect-metadata state cannot retain the stale address.

Use the requested or cached address family consistently during recreation.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Lowercase string inputs before alias lookup so uppercase distutils-compatible
values cannot fall through to an opposing caller default.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Remove a legacy shutdown.target.wants symlink during upgrades when it resolves
to the package-owned networking service. Leave unrelated or non-symlink paths
untouched.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Require an explicit plain-port allowlist, preserve and restore ENI/drop-ins for
the session, fail on function cleanup errors, and keep Python 3.7-compatible
test syntax. Attempt ethtool hardware restoration even if ENI restoration
fails.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Delete the session snapshot only after ENI restoration, reload, and exact file
verification all succeed. Failed restorations keep the snapshot for recovery.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Reject duplicate, configured, linked, active, or enslaved physical ports before
mutation. Preserve ENI around standalone bridge-move tests and allow key-based
SSH authentication.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Reject connected or enslaved ports before use, while allowing disconnected
ports regardless of initial admin state. Restore each reserved port to that
initial state after ENI reconciliation.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Delete the per-session remote coverage directory during SSH fixture teardown,
and fail the session if cleanup cannot be completed.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Register the two-bridge fixture set before checking host capability so an
intentional skip cannot make valid files appear orphaned.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Attempt every reserved-port admin-state restoration even when ENI copy or
reload fails. Retain the snapshot and return failure unless ENI, ports, and
exact verification all succeed.

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants