Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - PoMpIs

#1
I am seeing an issue where a physical link change on a LAN interface causes IPv6 on the PPPoE WAN to be reconfigured/restarted.

Setup
OPNsense 26.7.2_2
WAN: PPPoE on pppoe0
ISP: DIGI Spain
DHCPv6-PD: /56
LAN interfaces: Intel E810 (ice0, ice1, ice2)
WAN interface: Intel X550-T2

The problem is easy to reproduce: if a device is connected directly to a LAN interface and that device is powered off or the cable is disconnected, the LAN interface goes LINK_DOWN.

Shortly afterwards, OPNsense triggers IPv6 processing on pppoe0 and DHCPv6-PD is restarted/reconfigured, causing loss of IPv6 connectivity on all LAN/VLAN interfaces using the delegated prefix.

The PPPoE WAN itself does not go down and IPv4 remains working.

This is not specific to the Intel E810. I have reproduced the same behaviour with several different NICs.

I also reproduced the issue after replacing Kea/radvd on the affected LAN with dnsmasq handling DHCPv6 and Router Advertisements, so the problem does not appear to be specific to Kea or radvd.

Behaviour after the LAN link event

When the issue is triggered, dhcp6c on pppoe0 gets stuck in the SOLICIT state and keeps retransmitting without receiving an ADVERTISE:

Sending Solicit on pppoe0
send so
licit to ff02::1:2%pppoe0
reset a timer on pppoe0, state=SOLICIT, timeo=6, retrans=72361

Sending Solicit on pppoe0
send solicit to ff02::1:2%pppoe0
reset a timer on pppoe0, state=SOLICIT, timeo=7, retrans=144580

Shortly afterwards, the LAN interfaces lose their delegated IPv6 prefixes and radvd reports errors such as:

radvd_configure_do(manual) found no suitable IPv6 address on opt11(ice0)
radvd_configure_do(manual) found no suitable IPv6 address on opt3(vlan011)
radvd_configure_do(manual) found no suitable IPv6 address on opt6(vlan050)

A normal DHCPv6-PD negotiation after boot completes almost immediately:

SOLICIT -> ADVERTISE -> REQUEST -> REPLY

So the failure only appears after DHCPv6-PD processing is triggered by the LAN link-state event.

Workaround

As a workaround, I modified /usr/local/etc/rc.linkup to ignore link events from the affected LAN interfaces.

With those LAN link events ignored, powering devices on/off or disconnecting the cable no longer affects the WAN IPv6 connection.

The added workaround is:

#!/usr/local/bin/php
<?php

/*
* Copyright (C) 2003-2005 Scott Ullrich <sullrich@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
*    this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
*/

require_once("config.inc");
require_once(
"auth.inc");
require_once(
"filter.inc");
require_once(
"interfaces.inc");
require_once(
"util.inc");
require_once(
"system.inc");

exit_on_bootup();

if (
$argc < 3) {
   exit;
}

// Workaround for an issue where a physical LINK_UP/LINK_DOWN event on a LAN
// interface causes OPNsense to trigger IPv6 WAN processing on pppoe0.
//
// In my setup, powering off a device directly connected to ice0/ice1/ice2
// can indirectly trigger DHCPv6-PD reconfiguration on the unrelated PPPoE WAN,
// resulting in loss of IPv6 connectivity.
//
// Ignoring DEVD link events from these LAN interfaces completely prevents
// the unwanted DHCPv6-PD reset/reconfiguration.
//
// This is only a workaround for debugging/reporting purposes.
$ignored_interfaces = [
   
'ice0',
   
'ice1',
   
'ice2',
];

$action = $argv[1];
$device = $argv[2];

// Stop processing LAN carrier events before they can propagate further
// through rc.linkup and eventually affect WAN IPv6/DHCPv6-PD handling.
if (in_array($device, $ignored_interfaces, true)) {
   
log_msg(sprintf(
       
"DEVD: Ignored Ethernet %s event for %s to avoid DHCPv6-PD reset",
       
$action,
       
$device
   
));
   exit;
}

function
handle_argument_group($action, $device)
{
   global
$config;

   
$interface = convert_real_interface_to_friendly_interface_name($device);

   if (empty(
$interface)) {
       return;
   }

   if (empty(
$config['interfaces'][$interface])) {
       return;
   }

   if (!isset(
$config['interfaces'][$interface]['enable'])) {
       return;
   }

   switch (
$action) {
       case
'stop':
           
log_msg(sprintf("DEVD: Ethernet detached event for %s(%s)", $interface, $device));
           
interface_suspend($interface);
           break;

       case
'start':
           
log_msg(sprintf("DEVD: Ethernet attached event for %s(%s)", $interface, $device));
           
interface_configure(false, $interface, true, true);
           break;

       default:
           
log_msg(sprintf("DEVD: The action parameter passed is wrong (%s)", $action), LOG_ERR);
           break;
   }
}

handle_argument_group($action, $device);


I inserted this before handle_argument_group() in /usr/local/etc/rc.linkup.

Expected behaviour

I would expect a LINK_DOWN or LINK_UP event on an unrelated LAN interface not to restart or reconfigure DHCPv6-PD on pppoe0 while the PPPoE WAN itself remains up.

If I place a switch between OPNsense and the directly connected PC, the issue does not occur because the physical link on the OPNsense interface never goes down.

However, I use direct physical connections from OPNsense to some devices, so I would like to keep this topology without losing IPv6 every time one of those devices is powered off.

Thank you very much. 😊
#2
Well, I didn't know about the donations... I've been using Opnsense for two years and I don't think I'll ever stop, I love it...

So I've also sent a donation.

Thank you very much. 😊
#3
I use the same version of CrowdSec and it still works the same as in 26.1... I don't have any more CPU usage. I think since I updated to 26.7 I have less CPU usage overall. It works very, very well. 👌


crowdsec -version
version: v1.7.8_1-6322745
Codename: alphaga
BuildDate: 2026-07-06_18:59:29
GoVersion: 1.26.4
Platform: freebsd
libre2: C++
User-Agent: crowdsec/v1.7.8_1-6322745-freebsd
Constraint_parser: >= 1.0, <= 3.0
Constraint_scenario: >= 1.0, <= 3.0
Constraint_api: v1
Constraint_acquis: >= 1.0, < 2.0
Built-in optional components: datasource_appsec, datasource_cloudwatch, datasource_docker, datasource_file, datasource_http, datasource_journalctl, datasource_k8s-audit, datasource_kafka, datasource_kinesis, datasource_loki, datasource_s3, datasource_syslog, datasource_victorialogs, datasource_wineventlog, db_mysql, db_postgres, db_sqlite
Excluded components: cscli_setup

#4
@pfry

Here you go:

sysctl dev.ice.0.ddp_version
dev.ice.0.ddp_version: ICE OS Default Package version 1.3.43.0, track id 0xc0000001

This is my card; I saw it a while ago for 157€ and bought it without thinking twice: 😀

https://es.aliexpress.com/item/1005006344562349.html?spm=a2g0o.order_list.order_list_main.15.bb2a194dELSfTX&gatewayAdapt=glo2esp
#5
Well, I've updated mine to the latest version. I've been testing it and it's still working fine, both at 10Gbps and 25Gbps.

dmesg | grep -i ice0
[1] ice0: <Intel(R) Ethernet Network Adapter E810-XXV-4 - 1.43.3-k> mem 0x382000000000-0x382001ffffff,0x382002000000-0x38200200ffff irq 21 at device 0.0 on pci5
[1] ice0: Loading the iflib ice driver
[1] ice0: The driver could not load the DDP package file because a compatible DDP package is already present on the device.  The device has package ICE OS Default Package version 1.3.43.0, track id 0xc0000001.  The ice_ddp module has package: ICE OS Default Package version 1.3.41.0.
[1] ice0: fw 8.0.2 api 1.7 nvm 5.01 etid 80021faa netlist 4.4.2000-1.18.0.bc358136 oem 1.4031.0
[1] ice0: Using 4 Tx and Rx queues
[1] ice0: Reserving 2 MSI-X interrupts for iRDMA
[1] ice0: Using MSI-X interrupts with 7 vectors
[1] ice0: Using 4096 TX descriptors and 4096 RX descriptors
[1] ice0: Ethernet address: 9c:69:b4:68:65:99
[1] ice0: ice_add_rss_cfg on VSI 0 could not configure every requested hash type
[1] ice0: PCI Express Bus: Speed 8.0GT/s Width x16
[1] ice0: pci_iov_attach failed (error=ENOENT)
[1] ice0: Firmware LLDP agent disabled
[1] ice0: link state changed to DOWN
[1] ice0: netmap queues/slots: TX 4/4096, RX 4/4096
[11] ice0: Link is up, 10 Gbps Full Duplex, Requested FEC: None, Negotiated FEC: None, Autoneg: False, Flow Control: None
[11] ice0: link state changed to UP
[1423] ice0: link state changed to DOWN
[1434] ice0: Link is up, 25 Gbps Full Duplex, Requested FEC: None, Negotiated FEC: None, Autoneg: True, Flow Control: None
[1434] ice0: link state changed to UP
[1434] ice0: Link is up, 25 Gbps Full Duplex, Requested FEC: None, Negotiated FEC: None, Autoneg: True, Flow Control: None
#6
I also have a 4-port e810.



Mine works fine, although I just checked and there's an update. Is it a good idea to update it?

grep -i ddp
[1] ice0: The driver could not load the DDP package file because a compatible DDP package is already present on the device.  The device has package ICE OS Default Package version 1.3.43.0, track id 0xc0000001.  The ice_ddp module has package: ICE OS Default Package version 1.3.41.0.
[1] ice1: The driver could not load the DDP package file because a compatible DDP package is already present on the device.  The device has package ICE OS Default Package version 1.3.43.0, track id 0xc0000001.  The ice_ddp module has package: ICE OS Default Package version 1.3.41.0.
[1] ice2: The driver could not load the DDP package file because a compatible DDP package is already present on the device.  The device has package ICE OS Default Package version 1.3.43.0, track id 0xc0000001.  The ice_ddp module has package: ICE OS Default Package version 1.3.41.0.
root@opn:~ # kldstat | grep -i ddp
12    1 0xffffffff82f71000   14ce38 ice_ddp.ko
root@opn:~ # dmesg | grep -i ice0
[1] ice0: <Intel(R) Ethernet Network Adapter E810-XXV-4 - 1.43.3-k> mem 0x382000000000-0x382001ffffff,0x382002000000-0x38200200ffff irq 21 at device 0.0 on pci5
[1] ice0: Loading the iflib ice driver
[1] ice0: The driver could not load the DDP package file because a compatible DDP package is already present on the device.  The device has package ICE OS Default Package version 1.3.43.0, track id 0xc0000001.  The ice_ddp module has package: ICE OS Default Package version 1.3.41.0.
[1] ice0: fw 7.6.2 api 1.7 nvm 4.60 etid 8001e8b2 netlist 4.3.2000-1.17.0.2c46f598 oem 1.3682.0
[1] ice0: Using 4 Tx and Rx queues
[1] ice0: Reserving 2 MSI-X interrupts for iRDMA
[1] ice0: Using MSI-X interrupts with 7 vectors
[1] ice0: Using 4096 TX descriptors and 4096 RX descriptors
[1] ice0: Ethernet address: 9c:69:b4:68:65:99
[1] ice0: ice_add_rss_cfg on VSI 0 could not configure every requested hash type
[1] ice0: PCI Express Bus: Speed 8.0GT/s Width x16
[1] ice0: pci_iov_attach failed (error=ENOENT)
[1] ice0: Firmware LLDP agent disabled
[1] ice0: link state changed to UP
[1] ice0: Link is up, 25 Gbps Full Duplex, Requested FEC: None, Negotiated FEC: RS-FEC, Autoneg: True, Flow Control: None
[1] ice0: netmap queues/slots: TX 4/4096, RX 4/4096
[1] ice0: link state changed to DOWN
[1] ice0: Link is up, 25 Gbps Full Duplex, Requested FEC: None, Negotiated FEC: None, Autoneg: True, Flow Control: None
[1] ice0: link state changed to UP
[11768] ice0: link state changed to DOWN
[11787] ice0: All configured link modes were attempted but failed to establish link.
[11787] ice0: The device will restart the process to establish link.
[11787] ice0: Possible Solution: Check link partner connection and configuration.
[60739] ice0: Link is up, 25 Gbps Full Duplex, Requested FEC: None, Negotiated FEC: None, Autoneg: False, Flow Control: None
[60739] ice0: link state changed to UP

Intel(R) Ethernet NVM Update Tool
NVMUpdate version 1.43.37.1a
Copyright(C) 2013 - 2026 Intel Corporation.


WARNING: To avoid damage to your device, do not stop the update or reboot or power off the system during this update.
Inventory in progress. Please wait [***-......]


Num Description                          Ver.(hex)  DevId S:B    Status
=== ================================== ============ ===== ====== ==============
01) Intel(R) Ethernet Converged           N/A(N/A)   1563 00:037 Update not   
    Network Adapter X550-T2                                      available     
02) Intel(R) Ethernet Network Adapter   4.96(4.60)   1593 00:042 Update       
    E810-XXV-4                                                   available     

Options: Adapter Index List (comma-separated), [A]ll, e[X]it
Enter selection:
#7
Hello, 😊

I have a problem related to LAN link state events in OPNsense 26.1.8_5.

Environment:

* OPNsense 26.1.8_5-amd64
* FreeBSD 14.3-RELEASE-p12
* PPPoE WAN
* Digi Spain FTTH
* DHCPv6 PD (/56)
* Identity Association mode (not legacy Track Interface)
* KEA only for IPv4
* Classic RADVD RA

What works:

* WAN receives IPv6 correctly
* PD /56 delegated correctly
* LAN gets /64 correctly
* IPv6 routing works perfectly

The issue:
A simple physical LINK DOWN event on a LAN interface consistently breaks dhcp6c.

Reproduction is extremely reliable:

* OPNsense directly connected to a PC on a LAN interface ( OpnSense is the network core; everything connects to it. I don't use switches. OpnSense has a Mellanox X4 LX, a 4-port i226v, and an Intel X550 T2. And each PC is a separate LAN )

* Turn the PC OFF
* LAN link goes DOWN
* Immediately dhcp6c restarts and enters SOLICIT loops

Typical logs:

duplicated interface: pppoe0
remove a site prefix ...
remove an IA: PD-17
restarting
Sending Solicit on pppoe0
```

I also repeatedly observed:

* `/var/etc/radvd.conf` losing all `prefix .../64` entries
* only DNSSL remaining
* IA_PD disappearing temporarily
* IPv6 connectivity dying completely

Very important finding:
If I insert a dumb unmanaged Ethernet switch between OPNsense and the PC:

OPNsense <-> switch <-> PC

the problem disappears completely.

I can:

* turn the PC off/on repeatedly
* reboot the PC
* flap the client NIC
* and IPv6 remains stable forever

This strongly suggests the trigger is specifically the physical LAN interface link-state transition reaching OPNsense.

Additional things tested:

* Identity Association vs Track Interface
* Rapid Commit disabled
* Prefix Hint enabled/disabled
* Prevent Release enabled
* Shutdown Advertisement OFF
* Different prefix IDs
* Different MTUs

None solved the core issue.

In my case, after a LAN link event triggers dhcp6c into SOLICIT state, the delegated prefix gets cleared immediately and the whole IPv6 stack starts collapsing/rebuilding.

This issue seems extremely similar to older reports from 2023/2024 mentioning:

* LAN link-state events
* disappearing IA_PD
* duplicated interface: pppoe0
* recovery after manual interface reload
* radvd.conf losing prefixes

Log when starting a PC:

Noticedhcp6creset a timer on pppoe0, state=SOLICIT, timeo=2, retrans=4217 2026-05-26T00:49:38Noticedhcp6csend solicit to ff02::1:2%pppoe0 2026-05-26T00:49:38Noticedhcp6cset IA_PD 2026-05-26T00:49:38Noticedhcp6cset IA_PD prefix 2026-05-26T00:49:38Noticedhcp6cset elapsed time (len 2) 2026-05-26T00:49:38Noticedhcp6cset identity association 2026-05-26T00:49:38Noticedhcp6cset client ID (len 14) 2026-05-26T00:49:38Noticedhcp6cSending Solicit on pppoe0 2026-05-26T00:49:38Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure newwanip:rfc2136 (,[opt3]) 2026-05-26T00:49:36Noticedhcp6creset a timer on pppoe0, state=SOLICIT, timeo=1, retrans=2155 2026-05-26T00:49:36Noticedhcp6csend solicit to ff02::1:2%pppoe0 2026-05-26T00:49:36Noticedhcp6cset IA_PD 2026-05-26T00:49:36Noticedhcp6cset IA_PD prefix 2026-05-26T00:49:36Noticedhcp6cset elapsed time (len 2) 2026-05-26T00:49:36Noticedhcp6cset identity association 2026-05-26T00:49:36Noticedhcp6cset client ID (len 14) 2026-05-26T00:49:36Noticedhcp6cSending Solicit on pppoe0 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure dns (execute task : unbound_configure_do()) 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure dns (execute task : dnsmasq_configure_do()) 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure dns () 2026-05-26T00:49:35Warningradvdexiting, 1 sigterm(s) received 2026-05-26T00:49:35Warningopnsense/usr/local/etc/rc.linkup: radvd_configure_do(manual) found no suitable IPv6 address on opt3(igc1) 2026-05-26T00:49:35Warningopnsense/usr/local/etc/rc.linkup: radvd_configure_do(manual) found no suitable IPv6 address on opt11(mce0) 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure dhcp (execute task : radvd_configure_dhcp()) 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure dhcp () 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure ipsec (execute task : ipsec_configure_do(,opt3)) 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure ipsec (,opt3) 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure monitor (execute task : dpinger_configure_do(,[])) 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: plugins_configure monitor (,[]) 2026-05-26T00:49:35Noticedhcp6creset a timer on pppoe0, state=SOLICIT, timeo=0, retrans=1076 2026-05-26T00:49:35Noticedhcp6csend solicit to ff02::1:2%pppoe0 2026-05-26T00:49:35Noticedhcp6cset IA_PD 2026-05-26T00:49:35Noticedhcp6cset IA_PD prefix 2026-05-26T00:49:35Noticedhcp6cset elapsed time (len 2) 2026-05-26T00:49:35Noticedhcp6cset identity association 2026-05-26T00:49:35Noticedhcp6cset client ID (len 14) 2026-05-26T00:49:35Noticedhcp6ca new XID (69492) is generated 2026-05-26T00:49:35Noticedhcp6cSending Solicit on pppoe0 2026-05-26T00:49:35Noticeopnsense/usr/local/etc/rc.linkup: ROUTING: entering configure using opt3 2026-05-26T00:49:35Noticedhcp6creset a timer on pppoe0, state=INIT, timeo=0, retrans=215 2026-05-26T00:49:35Noticedhcp6cduplicated interface: pppoe0 2026-05-26T00:49:35Noticedhcp6cremove an address 2a0c:5a83:8500:5900::1/64 on mce0 2026-05-26T00:49:35Noticedhcp6cfailed to remove an address on igc1: Can't assign requested address 2026-05-26T00:49:35Noticedhcp6cremove a site prefix 2a0c:5a83:8500:5900::/56 2026-05-26T00:49:35Noticedhcp6cremove an IA: PD-17 2026-05-26T00:49:35Noticedhcp6cBypassing address release because of -n flag 2026-05-26T00:49:35Noticedhcp6cremove an address 2a0c:5a83:85ff:ffff::4f75:12d7/128 on pppoe0 2026-05-26T00:49:35Noticedhcp6cremove an address 2a0c:5a83:85ff:ffff::4f75:12d7 2026-05-26T00:49:35Noticedhcp6cremove an IA: NA-17 2026-05-26T00:49:35Noticedhcp6cBypassing address release because of -n flag 2026-05-26T00:49:35Noticedhcp6crestarting
I don't know what else to do.

Thanks for all the ongoing IPv6 work.
#8
I've also upgraded from RC1 to RC2 and everything works perfectly. I've ported the old rules to the new rules.

I also really like the categories in the new rules. 👌

Cheers  😊