Features
- Added generic cache invalidation for configuration models. Models can declare cache dependencies using
CacheDependency, and the newprint\_cache\_dependenciesmanagement command can be used to inspect the dependency graph. - Added notes to configuration templates.
- Added WHOIS lookup and geographic location estimation for devices, including WHOIS details in the admin UI, automatic refresh of stale WHOIS data, estimated-location notifications and warnings, and admin and API filters for estimated locations.
- Added WebSocket support for broadcasting all location updates.
- Added an API endpoint for retrieving indoor device coordinates for a location.
- Added location and floorplan filters to the device list API, allowing searches by location name and filtering by location or floorplan UUID.
- Allowed devices to update their name during re-registration.
Changes
Other changes
- Added VPN subnet and IP address details to the REST API.
- Allowed deleting organizations containing active devices while displaying a warning about the active devices that will be affected.
- Enforced the deactivated device state across OpenWISP Controller. Deactivated devices no longer receive configuration, management, remote command, registration, or automatic template operations, while necessary cleanup and security operations remain enabled.
- Replaced the third-party
jsonfieldimplementation with Django's built-inJSONField#1061, including migration handling for databases upgraded from older OpenWISP Controller versions. - Changed VPN synchronization errors and recovery events to use
generic\_messagenotifications #1049. - Improved command status visibility in the admin interface by highlighting statuses with different colors #812.
Dependencies
- Bumped
django-reversionfrom~=6.0.0to ~=6.3.0. - Bumped
django-redisfrom~=6.0.0to ~=7.0.0. - Bumped
netjsonconfigfrom~=1.2.0to ~=1.3.0. - Bumped
django-x509from~=1.3.0to ~=1.4.0. - Bumped
django-locifrom~=1.2.0to ~=1.3.0. - Bumped
django-flat-json-widgetfrom~=0.4.0to ~=0.5.0. - Bumped
openwisp-usersfrom~=1.2.0to ~=1.3.0. - Bumped
openwisp-utils[celery,channels]from~=1.2.0to ~=1.3.0. - Bumped
openwisp-notificationsfrom~=1.2.0to ~=1.3.0. - Bumped
openwisp-ipamfrom~=1.2.0to ~=1.3.0. - Bumped
djangorestframework-gisfrom~=1.2.0to ~=1.2.1. - Bumped
paramikofrom~=4.0.0to ~=5.0.0. - Bumped
scpfrom~=0.15.0to ~=0.16.1. - Bumped
django-import-exportfrom~=4.3.10to ~=4.4.1. - Added geoip2>=5.3.0,.
- Dropped support for Django
4.2. - Dropped support for Python
3.9.
Bugfixes
- Fixed subnet-division rules allocating addresses already in use by respecting existing child prefixes and pre-allocated IP addresses.
- Fixed background command and connection operations potentially restoring objects that had been deleted concurrently or causing foreign key errors.
- Fixed VPN client synchronization when switching VPN templates, preventing inconsistent client state during repeated template updates.
- Fixed SSH connections remaining open when
update\_config()failed. - Fixed malformed UUID URLs returning HTTP 500 instead of HTTP 404.
- Fixed the Device admin delete confirmation page when OpenWISP Controller is extended by downstream applications.
- Fixed a typo in the
update\_strategyvalidation error message.