OPNSense/core a46d57csrc/opnsense/mvc/app/controllers/OPNsense/Interfaces AssignmentController.php, src/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api AssignmentController.php

Interfaces: Assignments - work in progress for https://github.com/opnsense/core/issues/9945

In order to migrate the interface assignments, we need to think of a way to use the differently named xml nodes for interfaces (wan, lan, ..) into something that closely resembles a standard model implementation.
Since we can't match these nodes in our statically defined model xmls, the main idea is to flush all via an in-memory model with a separate load [construct] and save hook.
DeltaFile
+77-0src/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api/AssignmentController.php
+48-0src/opnsense/mvc/app/models/OPNsense/Interfaces/Assignment.php
+45-0src/opnsense/mvc/app/views/OPNsense/Interface/assignment.volt
+40-0src/opnsense/mvc/app/controllers/OPNsense/Interfaces/AssignmentController.php
+10-0src/opnsense/mvc/app/models/OPNsense/Interfaces/Assignment.xml
+8-0src/opnsense/mvc/app/controllers/OPNsense/Interfaces/forms/dialogAssignment.xml
+228-01 files not shown
+234-07 files

OPNSense/core d81dcd3src/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api GifSettingsController.php GreSettingsController.php

Interfaces: add some missing config locks, reading the configuration requires it being locked first to ensure setBase() can't be raced with another caller.
DeltaFile
+1-0src/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api/GifSettingsController.php
+1-0src/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api/GreSettingsController.php
+1-0src/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api/LaggSettingsController.php
+1-0src/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api/VipSettingsController.php
+1-0src/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api/VlanSettingsController.php
+5-05 files

OPNSense/plugins aa77707security/q-feeds-connector/src/opnsense/www/js/widgets QFeeds.js

security/q-feeds-connector - add alert when license expired or invalid. closes https://github.com/opnsense/plugins/issues/5417
DeltaFile
+14-1security/q-feeds-connector/src/opnsense/www/js/widgets/QFeeds.js
+14-11 files

OPNSense/core f4a0759src/opnsense/mvc/app/models/OPNsense/Kea KeaDhcpv6.php

Add comment about issue if interfaces vanish or become deconfigured by the user, but the KEA config is not adjusted accordingly.
DeltaFile
+4-0src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv6.php
+4-01 files

OPNSense/core daed0e3src/opnsense/mvc/app/models/OPNsense/Kea KeaDhcpv6.php

Fix the NO_LEASES_PLEASE client-classes test
DeltaFile
+2-3src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv6.php
+2-31 files

OPNSense/core 9b93f84src/opnsense/mvc/app/controllers/OPNsense/Kea/Api LeasesController.php, src/opnsense/mvc/app/views/OPNsense/Kea leases6.volt leases4.volt

Services: Kea DHCPv4/6: Build reservation status from control socket output, so it matches the scope of individual subnet (#10276)

* Services: Kea DHCPv4/6: Build reservation status from control socket output, so it matches the scope of individual subnets as well. Add client-id since it's relevant for IPv4 leases as well in default configuration.

We return an array now, change frontend detection if it's dynamic or static lease

Missed a closing bracket

Typo in client_id

Remove unused imports in LeasesController

Add comment to build_reserved_matches() to explain why the subnet-id logic exists now

* Add state as well, helpful for troubleshooting

* Add a state formatter to convert number status into their documented meaning

* Some data-width micro management
DeltaFile
+63-2src/opnsense/scripts/kea/get_kea_leases.py
+0-37src/opnsense/mvc/app/controllers/OPNsense/Kea/Api/LeasesController.php
+16-5src/opnsense/mvc/app/views/OPNsense/Kea/leases6.volt
+15-3src/opnsense/mvc/app/views/OPNsense/Kea/leases4.volt
+94-474 files

OPNSense/core 48da1cesrc/opnsense/mvc/app/models/OPNsense/Unbound/ACL ACL.xml

Rename Unbound service display name in ACL.xml (#10278)
DeltaFile
+1-1src/opnsense/mvc/app/models/OPNsense/Unbound/ACL/ACL.xml
+1-11 files

OPNSense/core 6d94603src/opnsense/mvc/app/views/OPNsense/Diagnostics traffic.volt

Reporting: Traffic - add Max on Y axis for traffic graphs, closes https://github.com/opnsense/core/pull/10277
DeltaFile
+67-16src/opnsense/mvc/app/views/OPNsense/Diagnostics/traffic.volt
+67-161 files

OPNSense/core e6ccdb9src/opnsense/mvc/app/views/OPNsense/Kea leases4.volt leases6.volt

Some data-width micro management
DeltaFile
+2-2src/opnsense/mvc/app/views/OPNsense/Kea/leases4.volt
+2-2src/opnsense/mvc/app/views/OPNsense/Kea/leases6.volt
+4-42 files

OPNSense/core 5658743src/opnsense/mvc/app/views/OPNsense/Kea leases4.volt leases6.volt

Add a state formatter to convert number status into their documented meaning
DeltaFile
+12-2src/opnsense/mvc/app/views/OPNsense/Kea/leases4.volt
+12-2src/opnsense/mvc/app/views/OPNsense/Kea/leases6.volt
+24-42 files

OPNSense/tools eb160feconfig/26.1 make.conf

config: options stage complains about this

I expect they will swtich back at some point which would
break this but let's get rid of the error.
DeltaFile
+1-1config/26.1/make.conf
+1-11 files

OPNSense/tools 2564cf1config/26.1 aux.conf

config: change 1.24 for 1.26

lang/go124||2026-03-12|Has expired: End of life--please switch to go125 or go126
DeltaFile
+1-1config/26.1/aux.conf
+1-11 files

OPNSense/core 1bd4617src/opnsense/mvc/app/views/OPNsense/Kea leases4.volt leases6.volt, src/opnsense/scripts/kea get_kea_leases.py

Add state as well, helpful for troubleshooting
DeltaFile
+1-0src/opnsense/mvc/app/views/OPNsense/Kea/leases4.volt
+1-0src/opnsense/mvc/app/views/OPNsense/Kea/leases6.volt
+1-0src/opnsense/scripts/kea/get_kea_leases.py
+3-03 files

OPNSense/plugins 7f87ba3security/q-feeds-connector/src/opnsense/mvc/app/controllers/OPNsense/QFeeds/Api SettingsController.php, security/q-feeds-connector/src/opnsense/scripts/qfeeds/lib __init__.py

security/q-feeds-connector - use local file timestamp for feed updated_at, closes https://github.com/opnsense/plugins/issues/5415
DeltaFile
+4-1security/q-feeds-connector/src/opnsense/scripts/qfeeds/lib/__init__.py
+1-1security/q-feeds-connector/src/opnsense/mvc/app/controllers/OPNsense/QFeeds/Api/SettingsController.php
+5-22 files

OPNSense/core 8326012src/opnsense/scripts/captiveportal/lib ipfw.py

shorten this
DeltaFile
+2-8src/opnsense/scripts/captiveportal/lib/ipfw.py
+2-81 files

OPNSense/core ebcde59src/opnsense/scripts/captiveportal/lib ipfw.py

improve comment here
DeltaFile
+1-1src/opnsense/scripts/captiveportal/lib/ipfw.py
+1-11 files

OPNSense/core 5f53f22src/opnsense/scripts/captiveportal/lib ipfw.py arp.py

Captive Portal: arp entries overwritten here, do not check tables as it's not necessary
DeltaFile
+2-3src/opnsense/scripts/captiveportal/lib/ipfw.py
+3-1src/opnsense/scripts/captiveportal/lib/arp.py
+5-42 files

OPNSense/core 180fcb4src/opnsense/mvc/app/controllers/OPNsense/Kea/Api LeasesController.php, src/opnsense/mvc/app/views/OPNsense/Kea leases6.volt leases4.volt

Services: Kea DHCPv4/6: Build reservation status from control socket output, so it matches the scope of individual subnets as well. Add client-id since it's relevant for IPv4 leases as well in default configuration.

We return an array now, change frontend detection if it's dynamic or static lease

Missed a closing bracket

Typo in client_id

Remove unused imports in LeasesController

Add comment to build_reserved_matches() to explain why the subnet-id logic exists now
DeltaFile
+62-2src/opnsense/scripts/kea/get_kea_leases.py
+0-37src/opnsense/mvc/app/controllers/OPNsense/Kea/Api/LeasesController.php
+4-4src/opnsense/mvc/app/views/OPNsense/Kea/leases6.volt
+3-2src/opnsense/mvc/app/views/OPNsense/Kea/leases4.volt
+69-454 files

OPNSense/core 85af173src/opnsense/scripts/kea get_kea_leases.py

Add comment to build_reserved_matches() to explain why the subnet-id logic exists now
DeltaFile
+7-0src/opnsense/scripts/kea/get_kea_leases.py
+7-01 files

OPNSense/core 4c41fb9src/opnsense/mvc/app/controllers/OPNsense/Kea/Api LeasesController.php

Remove unused imports in LeasesController
DeltaFile
+0-2src/opnsense/mvc/app/controllers/OPNsense/Kea/Api/LeasesController.php
+0-21 files

OPNSense/core 4625ef7src/opnsense/mvc/app/views/OPNsense/Kea leases4.volt

Typo in client_id
DeltaFile
+1-1src/opnsense/mvc/app/views/OPNsense/Kea/leases4.volt
+1-11 files

OPNSense/core 01d1ae3src/opnsense/mvc/app/views/OPNsense/Kea leases6.volt

Missed a closing bracket
DeltaFile
+1-0src/opnsense/mvc/app/views/OPNsense/Kea/leases6.volt
+1-01 files

OPNSense/core fcfc206src/opnsense/mvc/app/views/OPNsense/Kea leases6.volt leases4.volt

We return an array now, change frontend detection if it's dynamic or static lease
DeltaFile
+4-5src/opnsense/mvc/app/views/OPNsense/Kea/leases6.volt
+2-2src/opnsense/mvc/app/views/OPNsense/Kea/leases4.volt
+6-72 files

OPNSense/core ba6883asrc/opnsense/mvc/app/controllers/OPNsense/Kea/Api LeasesController.php, src/opnsense/mvc/app/views/OPNsense/Kea leases4.volt

Services: Kea DHCPv4/6: Build reservation status from control socket output, so it matches the scope of individual subnets as well. Add client-id since it's relevant for IPv4 leases as well in default configuration.
DeltaFile
+55-2src/opnsense/scripts/kea/get_kea_leases.py
+0-35src/opnsense/mvc/app/controllers/OPNsense/Kea/Api/LeasesController.php
+1-0src/opnsense/mvc/app/views/OPNsense/Kea/leases4.volt
+56-373 files

OPNSense/core eeecb2dsrc/opnsense/scripts/captiveportal cp-background-process.py, src/opnsense/scripts/captiveportal/lib ipfw.py

Captive Portal: re-introduce hash lookup for accounting purposes

Table redirection allowed for constant time lookups, with the
migration to pf this was changed to a linear time lookup.

While here, fix a small edge case that kills states for ips
flipping primary IPs according to hostwatch. Also make sure
to include the set of ipfw keys to "registered addresses" to make
sure theyre properly cleaned up from the table
DeltaFile
+77-25src/opnsense/scripts/captiveportal/lib/ipfw.py
+26-0src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf
+13-10src/opnsense/scripts/captiveportal/cp-background-process.py
+116-353 files

OPNSense/tools 6701a0econfig/26.1 make.conf

config: this was changed recently
DeltaFile
+1-1config/26.1/make.conf
+1-11 files

OPNSense/core e382f17src/opnsense/mvc/app/models/OPNsense/Kea KeaDhcpv6.php

DHCPSRV_ONLY_IF_REQUIRED_DEPRECATED The parameter 'only-if-required' is deprecated. Use 'only-in-additional-list' instead
DeltaFile
+2-2src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv6.php
+2-21 files

OPNSense/core b00a50asrc/opnsense/scripts/kea kea_prefix_renew.py

Since KEA logs all commands issued to its socket anyway, we can reduce some of the kea_prefix_renew logging. Streamline the STDOUT result as well.
DeltaFile
+11-13src/opnsense/scripts/kea/kea_prefix_renew.py
+11-131 files

OPNSense/core 726a260src/etc/inc/plugins.inc.d kea.inc

Always run dhcpv6 newwanip hook script when dhcpv6 is enabled since it's cheap and essentially side effect free
DeltaFile
+1-2src/etc/inc/plugins.inc.d/kea.inc
+1-21 files

OPNSense/plugins 8ad516asecurity/q-feeds-connector/src/opnsense/scripts/qfeeds qfeedsctl.py

security/q-feeds-connector - add error message for https://github.com/opnsense/plugins/issues/5428
DeltaFile
+1-1security/q-feeds-connector/src/opnsense/scripts/qfeeds/qfeedsctl.py
+1-11 files