+
+- Fix go 1.18 support
+- Fixed data race in core.Connection.Close()
+- Fix channel ID overlap
+
+## 0.4.0
+
+> _17 January 2022_
+
+### Binapi Generator
+
+- the generator code has been split into multiple packages:
+ - [vppapi](binapigen/vppapi) - parses VPP API (`.api.json`) files
+ - [binapigen](binapigen) - processes parsed VPP API files and handles code generation
+- added support for VPP enumflags type
+- previously required manual patches for generated code should no longer be needed
+- many generated aliases were removed and referenced to `*_types` files for simpler reading
+- any types imported from other VPP API (`*_types.api`) files are now automatically resolved for generated Go code
+- marshal/unmarshal methods for memory client messages are now generated
+- generated new helper methods for more convenient IP and MAC address conversion
+- RPC service code is now generated into a separated file (`*_rpc.ba.go`) in the same directory and uses a new low level
+ stream API
+- added option to generate HTTP handlers for RPC services
+- generated code now contains comments with information about versions of VPP and binapi-generator
+- in addition to the file name, the binapi generator now accepts full path (including extension,
+ e.g. `/usr/share/vpp/api/core/vpe.api.json`)
+- dependency on `github.com/lunixbochs/struc` was removed
+- generated helper methods for `vpe_types.Timestamp`
+- generated API messages comment may contain additional information about the given API development state (in progress,
+ deprecated)
+- type `[]bool` is now known to the generator
+- enhanced VPP version resolution - the generator is more reliable to evaluate installed VPP version
+
+### Features
+
+- [socketclient](adapter/socketclient) was optimized and received a new method to add client name
+- added new API [stream](api/api.go) for low-level access to VPP API
+ - the `Stream` API uses the same default values as the `Channel` API
+ - it supports the same functional options (request size, reply size, reply timeout)
+- [statsclient](adapter/statsclient) supports additional options (retry period, retry timeout)
+- the compatibility check error now contains a list of compatible and incompatible messages wrapped
+ as `CompatibilityError`
+- removed global binary API adapter. This change allows GoVPP to manage multiple VPP connections with different sockets
+ simultaneously
+- added support for the stats v2. The `statsclient` adapter recognizes the version automatically so the `StatsAPI`
+ remains unchanged. In relation to this change, the legacy support (i.e. stat segment v0) for VPP <=19.04 was dropped.
+- GoVPP now recognizes VPP state `NotResponding` which can be used to prevent disconnecting in case the VPP hangs or is
+ overloaded
+- added method `SetLogger()` for setting the global logger
+- `StatsAPI` has a new method `GetMemory()` retrieving values related to the statseg memory heap
+- the stats socket allows an option to connect asynchronously in the same manner as the API socket connection.
+ Use `AsyncConnectStats()` to receive `ConnectionEvent` notifications
+- Instead of a cumulative value, the `statsclient` error counter now provides a value per worker
+- `ListStats(patterns ...string)` returns `StatIdentifier` containing the message name and the ID (instead of the name
+ only)
+- added support for VPP stat symlinks
+- GoVPP received its own [API trace](api/trace.go). See the [example](examples/api-trace) for more details.
+
+### Fixes
+
+- `MsgCodec` will recover panic occurring during a message decoding
+- calling `Unsubscibe` will close the notification channel
+- GoVPP omits to send `sockclnt_delete` while cleaning up socket clients in order to remove VPP duplicated close
+ complaints - VPP handles it itself
+- fixed major bug causing GoVPP to not receive stats updates after VPP restart
+- fixed name conflict in generated union field constructors
+- the size of unions composed of other unions is now calculated correctly
+- fixed race condition in the VPP adapter mock
+- fixed crash caused by the return value of uint kind
+- fixed encoding/decoding of float64
+- fixed the stats reconnect procedure which occasionally failed re-enable the connection.
+- fixed occasional panic during disconnect
+- `statsclient` wait for socket procedure works properly
+- fixed memory leak in health check