# NCC V2 Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Possible log types:
- [Update instructions] for essential requirements, instructions and information about the software update procedure
- [Added] for new features
- [Changed] for changes in existing functionality. Improvements should appear under the 'changed' section
- [Deprecated] for once-stable features removed in upcoming releases
- [Removed] for now removed in this release
- [Fixed] for any bug fixes
- [Security]  in case of vulnerabilities or other security related changes

## [1.5.0] - 2026-01-19

- `Added`: Finalize the firmware update concept. The device now automatically reboots after a successful firmware update and reverts back to the previous version in case something goes wrong (e.g. powered off during update). The update state is now communicated using alarms (`firmware-update-in-progress` and `firmware-update-failed`). 
- `Changed`: Rework webinterface layout, naming and features according to internal feedback. The UI now refreshes information automatically. Pages were reorganized to `Overview`, `Outputs`, `Time`, `Network`, `Supervision`, `Maintenance` and `Logs`.
- `Added`: Add individual timeouts for NTP client and clock line that trigger synchronization alarms.
- `Added`: Add SNMP functionality (read access, traps, SNMPv3 security).
- `Changed`: Simplify monitoring of clocks. MOBALine movement polarity no longer matters for single-sided clocks.

## [1.4.0] - 2025-12-01

- `Added`: Implement backup and restore mechanism for the device config.
- `Added`: Implement handling of LED driver power budget. The illumination output now limits the brightness according to the power available (PoE, PoE+, 230 VAC) and reports an error if insufficient power is available.
- `Changed`: Optimize RESTCONF and webinterface performance (rate limits, crypto optimizations, ...).
- `Added`: In the webinterface, add a UI element that allows the user to select the device timezone from a list of all supported values.
- `Fixed`: Fix DNS not working when DHCPv4 is enabled.
- `Added`: Add network statistics to the API (received / transmitted packets, ...).
- `Changed`: Improve device reliability (automatically reboot in case of irrecoverable errors, add timouts to initialization procedures, installation of firmware updates, ...).

Update instructions: The update needs to be installed twice when upgrading from an earlier version. The new firmware will only start running after the second installation.

## [1.3.0] - 2025-11-03

- `Added`: IPv6 / DHCPv6 are now fully functional and tested.
- `Fixed`: Prevent user from deactivating IPv4 and IPv6 at the same time.
- `Changed`: Show NTP reference timestamp instead of seconds since last synchronization.
- `Added`: Show IP of current NTP time source in UI.
- `Changed`: Optimize firmware image size by using a more aggressive compression algorithm.
- `Changed`: Prevent unhandled config errors from crashing the device on startup.
- `Security`: Harden the device against potential denial of service attacks by limiting the total amount of memory allocated to web uploads.

## [1.2.0] - 2025-10-16

Version for internal usability tests. Based on core v1.1.0.

- `Added`: Setup development and release workflow.
- `Fixed`: Fix id conflict in webinterface layout ("save" buttons for hostname and timezone would get mixed up).
- `Fixed`: Fix inaccurate time keeping.
- `Added`: Automatically charge the NCC V2 VB supercaps.
- `Security`: Update security-critical packages to latest versions.
- `Changed`: Simplify log file structure.
- `Changed`: Adjust parameter naming to match RESTCONF YANG naming convention.
- `Changed`: Rename "io" account to "operator".
- `Security`: Implement anti-rollback protection.

## [1.0.0] - 2025-08-20

Test build with core [v1.0.0](https://mbs-git.mobatime.com/products/slave-clocks/network-v2/core-module/firmware/network-slave-clock-core/-/releases/1.0.0). Upgrading from previous versions not supported.

- `Added`: Implemented monitoring for single- and double-sided clocks.
- `Added`: Add persistent log file storage (e.g. audit and alarm logs).
- `Added`: Loading of persistent parameters set during production (e.g. default password, serial numbers, ...).
- `Added`: Add support for the illumination schedule generated by the MOBA switch editor.
- `Added`: Implement different users and permissions.
- `Security`: Root login is disabled by default. Only unlock it when built on a development branch.
- `Security`: Boot chain is now locked down.

## [0.8.0] - 2025-05-01

Test build with [v0.9.0](https://mbs-git.mobatime.com/products/slave-clocks/network-v2/core-module/firmware/network-slave-clock-core/-/releases/0.9.0) of the core firmware.

- `Changed`: Adjust format of firmware version descriptor (currently only for non-release builds).
- `Fixed`: Fix MOBALine time wrong by 2 seconds.
- `Fixed`: Fix DNS server setting not working when a static IP configuration is used.
- `Security`: Implement defense in depth strategy (Firewall added, low-level linux parameters hardened) 

## [0.7.0] - 2025-04-01

- `Added`: Implement timezone handling for the clock line.

## [0.6.0] - 2025-03-31

Test build based on core version v0.7.0. Changes are mostly related to the core firmware / build process and don't affect functionality. See core changelog for full details. Downgrading to earlier versions is possible but not recommended.

## [0.5.0] - 2025-02-27

Test build based on core version v0.6.0.

- `Added`: Show link speed on the ethernet jack's yellow LED (on = 100 Mbps, off = 10 Mbps).
- `Added`: Implement secure update (using development keys for now).
- `Added`: FIT image authentication and encryption (using development keys for now).

## [0.4.0] - 2025-01-31

Test build based on core version v0.5.0. Encrypts sensitive user data on disk but doesn't yet support secure boot.

## [0.3.0] - 2024-12-19

Last version fully compatible to the non-secure MOBA SoM. Uses network slave clock core v0.3.0.

## [0.2.0] - 2024-11-22

NCC V2 firmware mockup based on core version v0.2.0.

## [0.1.0] - 2024-09-20

- `Added`: Initial repository setup and documentation.
