There seem to be two issues:
1. Tentative addresses could have always been ignored for the wrong reasons
and we can savely move the delay to this script even though a small delay
will be the result (2 seconds with the default sysctl). Not sure why this
problem previously not mattered that much, but at least we can move the other
instance of the delay to here and avoid duplication since it will continue
to load this script anyway.
2. Due to overlaps and technical convolution these scripts can be run multile
times in a very short succession especially on a bootup. Since we have a delay
here now we force a lock prior to "catch" stray invocations. The only issue
I see is that we could lose the "force" flag in the process, but if that is
the case the log message will reveal and we can work around this sas well with
a two stage log perhaps.
The logger is responsible for database maintanance, when the storage version doesn't match on startup it should import the previous content from this directory so we are able to survive duckdb version upgrades.
For more information, see https://duckdb.org/internals/storage
Although the code is still a bit convoluted due to the dropdown being used for multiple purposes, it should make sense to always show the option to add a new one if none can be found and only show the related rule when it can.
To allow legacy services without a model to hook into the `ApiMutableServiceController`, we define a protected `serviceEnabled` function that by default checks the given `internalServiceEnabled` property to see if a service is enabled, but allows derived classes to override the functionality. We loosen the property restrictions in `initialize()` by moving the checks to their runtime implementations.
DHCPv4/v6 is modified here to hook into this change, but since the `actions_services` requires the keyword `service`, which isn't used by the mutable service controller, we define start/stop/restart/status actions in the `actions_dhcpd.conf` and the new `actions_dhcpd6.conf` files.
* dhcp6: add backend for listing dhcpv6 leases
* dhcp6: add leases view and controller
* dhcp6: lease deletion backend
* dhcp6: move to separate dhcpv6 directory to accomodate the service control UI
The process simply fires off N requests, with each request restarting the dhcp server. Aggregating the addresses is likely not worth the effort, so just drop the feature.
o Offer "Exclude console settings from import." option, enabled by default
o Make sure Interfaces->Assignments shows and validates non-existing configured interfaces to ease tracking down the changes
o use is_interface_mismatch() to signal probably incompatible change and signal the user in that case (postpone reboot)
- reworks the get_leases.py script to accomodate the "last declaration is the current one" logic from dhcpd.leases(5). (neither core nor plugins is currently using this action)
- includes binding states for failover setups in dhcpd.py lease file parsing. These are included in the leases page if show inactive is selected.
- adds small utility function in Firewall/Utility to check wheter a given IP (4 or 6) is within the bounds of a given CIDR block. Needed to bind a lease declaration to an interface in the front end.
- remove dhcpleaseinlocaltime property from services_dhcp.php. dhcpd.py works with epochs, so we only need to convert to a sensible local date in the controller.
- implements multiselect lease deletion
- implements multiselect interface filtering
- does not yet hook into ApiMutableServiceControllerBase, since the legacy configuration makes it a bit tricky.
o implement a sequence as sort order for https://github.com/opnsense/core/issues/6471
o support members split on spaces and on comma's in filter.lib.inc in case something goes wrong during migration.
While converting legacy code we do seem to have multiple static entries in different models, in which case we tend to overwrite ArrayField and extend the output with the static entries that are required for the model. These can either be defined in the legacy code (SPDField) or defined as static options (like the bogons in AliasField).
This commit adds a method getStaticChildren() which the derived class may overwrite in order to spawn new items to the list which can not be persisted. This should help avoid duplication of similar code constructs in various migrated areas. These items are constructed during the "post loading" event.