# Changelog
## [1.0.0] - 2020-12-07
### New features
 - Manage state for route rules. (16c8fa9)
 - Support MAC VTAP. (4ffffa0)

### Bug fixes
 - Allow VRF port to hold IP information. (1455181)
 - Fix removing IPv6 route rules. (b14532c)
 - Use default mac address when an interface does not have one. (0738427)
 - Do not fail when reporting OVS interfaces using libnm through dbus. (8168645)
 - Do not remove unmanaged orphan interfaces. (3f88096)

### Breaking changes
 - Deprecate the `ports` for team interfaces, please use `port` instead. (dbb712e)
 - Nispor 1.0.0 or greater is now required. (6dec9a5)

## [0.4.1] - 2020-10-06
### New features
 - Support MAC VLAN. (963a04d)
 - Support IP over InfiniBand. (3ef8546)
 - Support Virtual Routing and Forwarding. (29fda8c)
 - Support of multiple gateways. (551df30)
 - Support ignoring specific interface via `state:ignore`. (dc13851)

### Bug fixes
 - Plugin with `NmstatePlugin.is_supplemental_only == True` will not
   add new interface to `libnmstate.show()` results. (fe2a0f9)
 - Allowing multiple dual stack DNS name servers. (0c3a64b)
 - Fix crash when OVS interface is using the same name of OVS bridge. (de3de71)
 - Change NetworkManager plugin as optional. (fc3b311)
 - Keep child interface when bond mode change. (4a7c174)
 - Don't reset bridge options for empty bridge options. (83fd948)
 - Sort routes base on metric and next_hop_address also. (da12b9b)
 - Do clean up even checkpoint rollback/destroy failed. (cda87df)
 - The vlan and vxlan interface cannot have ip when subordinated. (ff3b731)
 - Fix None con_profile race condition on SR-IOV interface. (7584d46)
 - Fix profile deletion on virtual interface. (b2ac0f4)
 - Fix timeout on profile deactivation. (0d8940d)
 - Ignore invalid bond optoin ad_actor_system=00:00:00:00:00:00. (1423258)

### Breaking changes
 - Make python3-varlink as hard requirement. (4637b60)
 - Deprecate the `Bond.SLAVES`, please use `Bond.PORT` instead. (b9d01752e)
 - Deprecate the `OVSBridge.Port.LinkAggregation.SLAVES_SUBTREE`, please use
   `OVSBridge.Port.LinkAggregation.PORT_SUBTREE` instead. (b9d01752e)
 - Deprecate the `OVSBridge.Port.LinkAggregation.Slave`, please use
   `OVSBridge.Port.LinkAggregation.Port` instead. (b9d01752e)
 - Do not raise `NmstateVerificationError` for bond option mismatch. (5b6f31f)

## [0.4.0] - 2020-08-28
### New features
 - Providing varlink interface via nmstatectl.
 - Support managing interfaces created by iproute tools.
 - The nmstatectl show <interface_name> could filter route table learn from
   DHCP/Autoconf.
 - Support modifying the route table ID for DHCP/Autoconf.

### Bug fixes
 - Could add route rule targeting route table learn from DHCP/Autoconf.
 - Fix verification failure on unknown interface.
 - Fix the logging of checkpoint creation.
 - Sort the OVS internal interfaces and OVS bond interfaces.
 - Improve performance by skipping reapply call on deactivated interface.
 - Default to `InterfaceState.UP` if not defined.

### Breaking changes
 - New dependency introduced `python3-nispor` for querying kernel runtime
   network state.

## [0.3.5] - 2020-08-28
### Bug fixes
 - Allowing remove all interfaces from OVS bridge.
 - Fix converting memory-only profile to persistent.
 - Fix adding OVS bond to existing OVS bridge.
 - Remove inactive profile for desired interface.
 - Do not report MTU if it is 0.

## [0.3.4] - 2020-07-24
### Bug fixes
 - Fix removing the DNS config.
 - Fix Linux Bridge integer option round up/down on 250HZ kernel.
 - Fix removing child interface.
 - Linux Bridge: Fix support replacing unmanaged ports.
 - SR-IOV: Raise an exception if the driver does not support a parameter.
 - Fix moving subordination from removed interface to new main interface.
 - Fix the failure when switching bond mode from 4(802.3ad) to 5(balance-tlb).

### Breaking changes
 - NetworkManager 1.26.0 or greater is now required.

## [0.3.3] - 2020-07-02
### Bug fixes
 - VLAN: Raise an error when VLAN MTU is greater than the base interface MTU.
 - Support IP network address with host bits(e.g. 192.0.2.251/24).
 - Show the OVS bond name first in nmstatectl show.
 - Fix random rollback timeout.
 - Fix error due to activation of unknown interface.
 - Fix the support of multiple state files when using nmstatectl.
 - Fix remove DNS config.
 - Improve the performance by eliminating the repeat check of ovs daemon status.

## [0.3.2] - 2020-06-15
### New features
 - Support third party plugin written in Python.
 - Support LLDP.
 - New OVS DB plugin for modifying OVS interface `external_ids`.
 - Expanded the support of linux bridge options.
 - Support applying desire state which only valid till next reboot.
 - Support OVS patch port (requires NeworkManager 1.22.16+ or 1.24.4+).

## [0.3.1] - 2020-06-08
### Bug fixes
 - Wait until the rollback is completed.
 - Fix base interfaces removal, VLAN/VXLAN interfaces will be removed automatically.
 - Fix all slaves removal of a master interface.
 - Interfaces state is not required when editting DNS/route/routerules.
 - Fix routes lose when editting DNS.
 - Interface is default to `state:up` when is not defined in desired state.
 - Differentiate DOWN and ABSENT state. DOWN is not removing the profile anymore.

## [0.3.0] - 2020-05-07
### New features
 - Linux Bridge: Support VLAN filtering.
 - Add --version and version command in nmstatectl.
 - Support 3+ single stack DNS nameservers: https://bugzilla.redhat.com/1816043
 - Allow route rule filtering by interface when showing.

### Bug Fixes
 - Bond: Fix switch between miimon and arp_interval: https://bugzilla.redhat.com/1806549
 - Bond: Fix switch bond mode from 1 (active-backup) to 5 (balance-tlb).
 - Bond: Allow miimon=100 when ethernet setting not included: https://bugzilla.redhat.com/1806549
 - Bond: Allow missing arp_ip_target when ARP monitoring is disabled.
 - SR-IOV: Properly return when the device not exists.
 - SR-IOV: Fix verification due to MAC address upper or lower cases: https://bugzilla.redhat.com/1818750
 - SR-IOV: Raise an exception when a SR-IOV parameter is not supported by driver: https://bugzilla.redhat.com/1819588
 - Fix verification errors due to outdated values.
 - Report DNS nameservers and domains only once: https://bugzilla.redhat.com/1806969
 - OVS: Raise an exception if the necessary services are not running.
 - Linux Bridge: Show unmanaged ports: https://bugzilla.redhat.com/1806452
 - Team: Fix verification error due to unsorted ports.
 - Raise an exception when IP configuration is enabled in slaves or ports.
 - Raise warning if interfaces exceeds 1000 in a single desired state.
 - Support route rule host without prefix length.

### Breaking Changes
 - Enforce keyword args for APIs functions.
 - Drop LinuxBridge_* constants support.

## [0.2.6] - 2020-02-24
### New Features
 - Linux Bonding: Support numeric values for options.

### Bug Fixes
 - Linux Bonding: Fix "fail_over_mac" support with active backup bond mode.
 - Linux Bonding: Fix "arp_ip_target" bond option support.
 - OVS Bridge VLAN: Use "unknown" value for unsupported modes.
 - Fix partial editting for DNS configuration.
 - Report only non-default bonding option values.
 - Fix switching from static IP to DHCP/Autoconf.


### Known Issues with NetworkManager Version 1.22.8
 - All changes to bridges might disrupt their connectivity.
 - Cannot detach a system port from an OVS bridge.
 - Sometimes, NetworkManager may throw a "Failed to find a compatible device for this connection" error.
 - Cannot set bond option with updelay=0,miimon=0.
 - Cannot set bond option with miimon=100,arp_interval=0.

## [0.2.5] - 2020-02-19
### Breaking changes
 - Deprecate specifying keyword arguments as positional arguments in the public methods.
   This will become a hard failure in Nmstate-0.3.0 and later and it affects the following functions:
   - "libnmstate.apply()"
   - "libnmstate.commit()"
   - "libnmstate.rollback()"
   - "libmstate.show()"

 - NetworkManager 1.22.8 or later is now required.

### New Features
 - Report missing NetworkManager plugin during validation.
 - Support OVS Link Aggregation (Bonding).

### Bug Fixes
 - Fix "AtributeError" when editing an existing OVS interface.
 - Do not remove slaves implicitly when removing the master interface.
 - Fix team interface port support.
 - Prevent virtual interface removal after DHCP or IPV6-RA timeout.
 - Get Linux Bonding options from kernel instead of reading the NetworkManager configuration.

### Known issues when using NetworkManager 1.22.8
 - All changes to bridges might disrupt their connectivity.
 - Cannot set Linux Bond option to "fail_over_mac=1".
 - Cannot detach a system port from an OVS bridge.
 - Sometimes, NetworkManager may throw a "Failed to find a compatible device for this connection" error.

## [0.2.4] - 2020-02-12
### Bug Fixes
 - Reduce minimal required MAC address length to 4 octets
 - Warn early when the same interface name is mentioned multiple times

### New Features
 - Raise NmstateTimeoutError on mainloop timeout

## [0.2.3] - 2020-02-05
### Bug Fixes
 - Reduce the delay before the verification step to 0.5 second.
 - Fix dynamic IP configuration with no server response.
 - Fix OVS port name limit.

## [0.2.2] - 2020-02-04
### Breaking changes
 - NetworkManager 1.22 is required now.

### New Features
 - Team interface support.

### Bug Fixes
 - Fix file descriptor leak.
 - Get SR-IOV VFs configuration from kernel instead of reading the NetworkManager configuration.
 - Fix DHCPv4 with static IPv6.
 - Wait a short time before verification to allow the network state to stabilize.
 - Properly delete ovs-port profiles.
 - Use dhcp-iaid='mac' on dynamic IPv6 configuration.

## [0.2.1] - 2020-01-13
### Breaking Changes
 - Deprecations in `libnmstate.schema`:
    - 'LinuxBridge.GROUP_FORWARD_MASK' -> 'LinuxBridge.Options.GROUP_FORWARD_MASK'
    - 'LinuxBridge.MAC_AGEING_TIME' -> 'LinuxBridge.Options.MAC_AGEING_TIME'
    - 'LinuxBridge.MULTICAST_SNOOPING' -> 'LinuxBridge.Options.MULTICAST_SNOOPING'

### New Features
 - Support SR-IOV VFs configuration.
 - Introduce libnmstate.__version__.

### Bug Fixes
 - Fix verification of route rules with 2+ route tables.
 - Support reapply on IPv6 changes.
 - Fix disable IP stack after enabled DHCP.
 - Fix MAC address pattern to support infiniband MAC addresses.
 - Report missing OVS NM plugin on profile activation.
 - Ignore existing unmanaged and unknown type bridge ports.
 - Fix bridge type interface state parsing.
 - Fix success check after interface deletion.
 - Read mac-address from sysfs when missing from NM (ovs-interface).
 - Get the SR-IOV total-vfs from sysfs instead from NM configuration.

## [0.2.0] - 2019-12-02
### Bug Fixes
 - Skip editing on unknown type interface

## [0.1.1] - 2019-12-01
### Breaking Changes
 - Removed the support of Python2. Require Python 3.6 or later version.
 - Increased minimum supported NetworkManager version to 1.20.
 - Deprecation in `libnmstate.schema`:
    - 'LinuxBridge.PORT_NAME' -> 'LinuxBridge.Port.NAME'
    - 'LinuxBridge.PORT_STP_HAIRPIN_MODE' -> 'LinuxBridge.Port.STP_HAIRPIN_MODE'
    - 'LinuxBridge.PORT_STP_PATH_COST' -> 'LinuxBridge.Port.STP_PATH_COST'
    - 'LinuxBridge.PORT_STP_PRIORITY' -> 'LinuxBridge.Port.STP_PRIORITY'
    - 'LinuxBridge.STP_ENABLED' -> 'LinuxBridge.STP.ENABLED'
    - 'LinuxBridge.STP_FORWARD_DELAY' -> 'LinuxBridge.STP.FORWARD_DELAY'
    - 'LinuxBridge.STP_HELLO_TIME' -> 'LinuxBridge.STP.HELLO_TIME'
    - 'LinuxBridge.STP_MAX_AGE' -> 'LinuxBridge.STP.MAX_AGE'
    - 'LinuxBridge.STP_PRIORITY' -> 'LinuxBridge.STP.PRIORITY'
    - 'OVSBridge.PORT_NAME' -> 'OVSBridge.Port.NAME'
    - 'OVSBridge.FAIL_MODE' -> 'OVSBridge.Options.FAIL_MODE'
    - 'OVSBridge.MCAST_SNOOPING_ENABLED' -> 'OVSBridge.Options.MCAST_SNOOPING_ENABLED'
    - 'OVSBridge.RSTP' -> 'OVSBridge.Options.RSTP'
    - 'OVSBridge.STP' -> 'OVSBridge.Options.STP'


### New Features
 - Support disabling IPv6 persistently.
 - Support compressed IPv6 address.
 - Support reapply on MTU changes.
 - Support activation interface without blocking on DHCP results.
 - Support SR-IOV.
 - Support source routing via route rule.
 - Support of VxLAN interface in schema without implementation.
 - Support of Team interface in schema without implementation.
 - Support of VLAN filtering in schema without implementation.
 - Support of OVS Bonding in schema without implementation.
 - Support of OVS VLAN in schema without implementation.

### Bug Fixes
 - Prioritize base iface activation before the vlan.
 - Ignore not active failure when deactivating.
 - Increase main loop timeout to support the linux bridge STP.
 - Detach slaves without deleting them.
 - Fix race problem on slave been deactivated by master.
 - Prioritize master interfaces activaction.
 - Don't disable IPv6 on down interface.
 - Raise exception when the NM service is not running.
 - Introduce nmstatectl man page.
 - Allow empty interface description.
 - Change DHCP and IPv6-RA address selction based on MAC address only.
 - Fix race problem when IPv6 is disabled.
 - Handle race problem when OVS bridge is deleting.
 - Handle bond get_info() while deleting.
 - Drop type attribute of OVS port.
 - Treat disabled IPv6 as OK to reapply.
 - Mark device as managed before activate.
 - Fix ActiveConnection.is_activating.
 - Fix the incorrect interface state when device in IP_CHECK state.
 - Discard IP stack when disabled for verification.
 - Explicitly remove any virtual device.
 - Delete inactive profiles when editting an interface.
 - Explicitly delete device even in DEACTIVATING state.

## [0.0.8] - 2019-07-25
### New Features
 - Support reapply configuration without link down when possible.
 - Relicensed to LGPL 2.1+.
 - Allow editing existing interface without specifying the type property in the
   desired state.

### Bug Fixes
 - Allow adding a port to the Linux bridge by specifying only its name.
 - Support IPv6 stack disable.
 - Allow enabling IPv6 with empty address.
 - Recover from an abnormal failure when libnmstate is re-used in a process.
 - DNS: Preserve DNS config with empty state.
 - Fix random failure on showing interface as done when creating bond/linux
   bridge
 - Do refresh in libnm on each call of show().
 - Allow removing slaves from parents while keeping their interfaces up.
 - Do not remove slaves that are mentioned with state UP.
 - Support slaves swap between masters.
 - API: Expose IP constants through libnmstate.schema.
 - PY3: Fix deprecation of array.tostring().
 - Fix IPv4 enabled criteria: When DHCP is enabled, it implies IPv4 is enabled.

## [0.0.7] - 2019-06-13
### New Features
 - Support editing DNS client configuration.
 - Support editing IP routes.
 - API: Promote the public API to libnmstate level:
    * libnmstate.show()
    * libnmstate.apply()
    * libnmstate.commit()
    * libnmstate.rollback()
    * libnmstate.error
    * libnmstate.schema

### Bug Fixes
 - Optimize new and existing interface processing when applying state.

## [0.0.6] - 2019-04-24
### New Features
 - Support manual transaction control.
 - Support querying DNS client configuration.
 - Support querying IP routes.
 - Support changing MAC address.

### Bug Fixes
 - nmstatectl: Handle state editing conflict.
 - apply: Handle commit/rollback errors.
 - nm.checkpoint: Handle DBusExceptions.
 - Fix build on old setuptools.
 - nm: Exit with a human readable error when missing libnm introspection.
 - state: Rebuild the ifaces state on each call to the state getter.
 - metadata: New created iface entry should include a name.
 - state: Relocate the remove func of absent/down ifaces into State.
 - apply: Pass the State object to the metadata generator.

## [0.0.5] - 2019-03-12
### New Features
 - Support Open vSwitch internal interface.
 - Support ignoring DNS/routes/gateways from DHCP/Autoconf.

### Bug Fixes
 - nm device: Include safety checks when deleting a device.
 - nm: Delete explicitly OVS type interfaces.
 - show: Do not include the mtu entry for ovs-bridge.
 - show: Do not include ipv4/6 entries for ovs-bridge.
 - Unify the Nmstate exceptions to error.py.
 - verify: Sort bridge ports by name.
 - nm device: Delete connection profiles with no device.
 - nm ovs: Fix slave interface detection.
 - nmclient: Explicitly create a new client object only in show.
 - apply: Remove unuseful leftover code.
 - Add option for ignoring auto DNS and routes.
 - nmstatectl: Allow to set multiple states.

## [0.0.4] - 2019-01-23
### New Features
 - Support Linux Bridge.

### Bug Fixes
 - nm, device: Retry if activation fails in specific cases.
 - nm, nmclient: Allow mainloop to run the last action again.
 - apply: Fix OVS proxy port handling in the edit step.
 - nm, connection: Enable autoconnect by default.
 - nm, device: Skip activation of an already activating device.
 - nm, device: Fix ActiveConnection.is_activating.
 - nm, device: Activate based on the device or connection object.
 - nmstatectl: Output yaml by default.
 - nmstatectl: Remove extra newline from yaml output.
 - show: Sort interface state.
 - nm.bridge: Set only specified port options.
 - nm: Do not raise explcitly within the checkpoint context.
 - nm: Reduce noise when logging actions execution.

## [0.0.3] - 2018-12-20
### New Features
 - Support IPv4/IPv6 DHCP.

### Bug Fixes
 - NM/device: Handle activation failures for connections.
 - apply: Ignore `down` state (for virt iface) in verification step.
 - device: use per-action cancellable for activate_connection_async().
 - mainloop: support multiple cancellables.
 - Don't copy existing config when disabling IPv4/v6.

## [0.0.2] - 2018-11-29
### New Features
 - Support bond interface.
 - Support VLAN interface.
 - Support dummy interface.
 - Support ethernet interface.
 - Support Open vSwitch bridge.

### Bug Fixes
 - Initial release.
