Releases: p4lang/behavioral-model
Releases · p4lang/behavioral-model
Release 1.15.0 of bmv2
bmv2 core:
- remove all dependencies on libJudy: libJudy is not very portable, is no actively longer maintained, and is not cross-compilation friendly; it was complicating the build and causing runtime issues for some users
- change return type of bm_get_config_md5() (Thrift RPC Service) to binary to fix issue occurring with recent Thrift versions
- use correct pcap files to dump ingress and egress traffic in BMI (files were previously swapped)
- print error code in logs for invalid runtime operations to facilitate troubleshooting
- move dataplane_interface.proto to common
services/
folder so that it can be used by all targets - fix IPv6 address parse error in runtime_CLI
- add the xor16 hash function to bm_sim
simple_switch / simple_switch_grpc:
- fix
standard_metadata.packet_length
for copies and update simple_switch documentation appropriately - document idle timeout implementation for match tables
- [simple_switch_grpc] switch default P4Runtime gRPC port to 9559 (IANA assigned port)
- [simple_switch_grpc] support SSL/TLS options for P4Runtime server, including mutual authentication
- [simple_switch_grpc] do not return an error in PI implementation if meter rates not set
- [simple_switch_grpc] reset meter rates when getting default meter spec from PI API
- [simple_switch_grpc] log an error in case of mismatch between device ids
- [simple_switch_grpc] do not ignore drop port value provided through the command-line
psa_switch:
- support for e2e cloning
- extern implementations:
Random
,InternetChecksum
,Hash
tools:
- all Python scripts now require Python 3
- update to dependencies:
- Thrift >= v0.11.0 and <= v0.13.0 supported
- CI updates:
- OS used for CI: Ubuntu 20.04
- C/C++ compilers used for CI: gcc9, clang-8, clang-10
- use Github workflows instead of Dockerhub to build and push container image (
p4lang/behavioral-model
) to Docker; workflow runs for every main branch update as well as periodically - drop unused
Dockerfile.grpc
- document dependencies for Ubuntu 20.04 and Fedora
Release 1.14.0 of bmv2
bmv2 core:
- support lvalue expressions: we can now handle assignments to complex lvalue expressions which do not statically resolve to a field / header / union, e.g. we can support assignments to a header stack field where the header stack member is resolved dynamically (#839)
- add new
advance
operation in parser, to support shifting by a variable number of bits - add support for
ParserInvalidArgument
parser error, which is part of core.p4 since P4_16 v1.2.0 - support for arbitrary uint32 port numbers; there is still an upper bound (by default 512) which can be changed using
--max-port-count
- fix SEGFAULT in BMI when removing a data plane port (#724)
- fix build with recent Protobuf (3.12) & gRPC (1.30) versions
- fix support for more recent Thrift library versions (tested up to 0.12.1)
- promote
exit
(P4_16 built-in statement) to bmv2 core (was a target-specific primitive) - support for
log_msg
: this is technically a v1model extern used for logging user-defined messages, but it may be useful across multiple architectures and is therefore added to bmv2 core - support for
assert
&assume
: these are technically v1model externs used for formal program verification, but they may be useful across multiple architectures and are therefore added to bmv2 core - add new RPCs for reading and clearing parser value-set contents to Thrift API
- add runtime CLI commands for manipulating parser value-sets:
pvs_add
,pvs_remove
,pvs_get
,pvs_clear
- fix undesired reordering in queueing logic (#903)
- ensure that bmv2 targets are notified in case of config swap and remove the historical assumption that targets are responsible for completing config swaps (#906)
- fix JSON parsing for unions and union stacks primitive arguments: JSON input was rejected even though these arguments were supported by the implementation
- fix type deduction for expressions using the
access_field
andaccess_union_header
operators when importing the JSON - improve logging for checksum verification
- remove
--with-p4thrift
configure option, now that the p4lang org does not maintain a custom Thrift version anymore - enhance runtime CLI documentation
- update README to point to reference p4c compiler and guide new users better
- document bmv2 performance limitations
simple_switch / simple_switch_grpc:
- implement v1model
mark_to_drop
- fix ingress thread deadlock for resubmit packets (#730)
- remove private "standard" metadata fields that were used by simple_switch for implementation reasons, but not part of v1model (#768)
- avoid crash in
modify_field_rng_uniform
andmodify_field_with_hash_based_offset
when preconditions are not met; log messages instead - custom drop port can be provided with
--drop-port
target-specific option; default is still 511 - enhance documentation:
const entries
behavior, restrictions on the contents of v1model parsers and controls, information about the implementation of some v1model externs, restrictions for metadata preservation (e.g. when cloning packets), target-specific command-line options for simple_switch_grpc,OPTIONAL
match kind (new in v1model), information on timestamp synchronization, ... - [simple_switch_grpc] support latest PI / P4Runtime (v1.2.0), including:
- support for watch ports
- implementation of PI functions used for reading individual table entries / action profile members / action profile groups
- support for ABI version check
OPTIONAL
match kind (new in v1model & P4Runtime)
- [simple_switch_grpc] use updated P4Runtime server C API
- [simple_switch_grpc] link libsimple_switch_grpc against libpip4info to prevent build failures
psa_switch:
- verify that PSA standard metadata fields are present in JSON, and set these fields as needed
- support for different packet paths: normal, multicast, resubmit, recirculate, i2e cloning
- extern implementations:
Counter
,Meter
tools:
- C/C++ compilers used for CI: gcc5, gcc7, clang3.8, clang6
- download Thrift from Github to simplify usage for Chinese users
- check for ethtool presence in Mininet benchmark script
- deploy bmv2 Doxygen documentation to AWS S3; up-to-date documentation is always available on bmv2.org
Release 1.13.0 of bmv2
List of new features:
bmv2 core:
- add 2 new hash functors:
round_robin
andround_robin_consistent
; this can be useful when the hash is used for an action selector, as a way to iterate through all possible members and obtain all possible outputs - support for periodically-called externs (functor is called whenever a timer fires)
- use config.h file generated but autoconf to "define" preprocessor flags, instead of using CPPFLAGS; this ensures that third-party projects which use the bmv2 library are compiled with the same flags that where used when the bmv2 library was compiled
- add new command-line options parser to be used for target-specific options:
TargetParserBasicWithDynModules
; this parse supports the--load-modules
option (to load shared objects at runtime) by default
simple_switch:
- introduce simpleswitch_runner library so that third-party projects can instantiate a
SimpleSwitch
instance - support for
intrinsic_metadata.egress_global_timestamp
- add bounds checking for indexed counters, meters, and register arrays (with appropriate error logs)
- support for
standard_metadata.parser_error
- support cloning to a multicast group: this is used to support the P4Runtime
CloneSessionEntry
message, which supports cloning to a set of ports - enhance documentation
- support for
standard_metadata.checksum_error
- unicast packets always begin egress with the instance type set to NORMAL, even packets which were originally resubmitted / recirculated
simple_switch_grpc:
- support latest PI / P4Runtime (v1.0.0), including support for cloning, digest and idle timeout
- add
is_dp_service_active()
API toSimpleSwitchGrpc
to return the current status of dataplaneinterface gRPC service - fix linking for
simple_switch_grpc
executable after observing some strange runtime errors - update supported sysrepo version
- clean-up "asynchronous" GTests
- support for
--load-modules
command-line option
psa_switch:
- add bounds checking for indexed counters, meters, and register arrays (with appropriate error logs)
tools:
- update veth_setup.sh to no longer use deprecated ifconfig command
- support for debugger (p4dbg) even when Thrift is not enabled: this means the debugger can be used with simple_switch_grpc
- enable runtime_CLI even when bmv2 is built without nanomsg support, ensuring that the CLI can be used with simple_switch_grpc (if Thrift enabled)
- fix code coverage reports in CI by using lcov instead of gcov directly
Release 1.12.0 of bmv2
List of new features:
bmv2 core:
- use
uint32_t
consistently for ports - support for saturating casts
- new macros to easily register floating C++ functions as extern functions which can be referenced in the JSON
simple_switch:
- new command line option
--load-modules
to dynamically load object files (which may include extern definitions)
simple_switch_grpc:
- support latest PI / P4Runtime; in particular support new P4Runtime package names (which include the major semantic version number)
- support for PI multicast functions
- new id field for
PacketStream
to identify packets sent to & from simple_switch_grpc on the dataplane gRPC stream (not to be confused with the P4Runtime packet IO stream) - better README
- respect exact P4Runtime definition of "priority" (for ternary matches) in implementation: 0 is not a valid priority and a higher priority value means a higher logical priority
psa_switch:
- skeleton for PSA implementation, not really usable at this stage (let's target this for 1.13)
Release 1.11.1 of bmv2
Notable bug fixes since 1.11.0:
- fix bug in implementation of register reset CLI command
- fix bug in parser code that was causing the
PacketTooShort
exception to be thrown inappropriately
Release 1.11.0 of bmv2
List of new features:
bmv2 core:
- new core assignment primitives for stacks (headers and unions) as it was not possible for the compiler to generate code for this without additional bmv2 support
- support for compile-time default entry for indirect tables
- ability to reset default entry to initial compile-time default entry (Thrift + runtime CLI + P4Runtime)
- as announced in previous minor release (1.10), strict-conformance with P4_16 specification for header stacks has been enabled by default. It can be disabled (revert to legacy behavior) with
configure
flag--disable-WP4-16-stacks
simple_switch:
N/A
simple_switch_grpc:
- support latest PI / P4 Runtime
- better support for openconfig-interfaces and openconfig-if-ethernet YANG models, including partial support for interface counters
- add one-way SetPortOperStatus RPC to DataplaneInterface gRPC service to simulate port-up / port-down events
- ability to optionally enable the Thrift server for simple_switch_grpc in order to be able to use the existing runtime CLI
Release 1.10.3 of bmv2
Notable bug fixes since 1.10.2:
- fix locking model in BMI
- fix table entry versioning
Release 1.10.2 of bmv2
Notable bug fixes since 1.10.1:
- fix race condition in action profile / action selector implementation
- other fixes for action profiles
Release 1.10.1 of bmv2
Notable bug fixes since 1.10.0:
- bug fix for ingress cloning in simple_switch
- fix extraction function for VL fields with bitwidth >= 32
- accept unique name suffixes as valid identifiers in runtime CLI after change in p4c to consistently use fully-qualified names in JSON
Release 1.10.0 of bmv2
List of new features:
bmv2 core:
- more checks in JSON parsing code to avoid crashes in case compiler produces incorrect JSON
- command-line option
--pcap
now takes an optional argument (target directory) - support for latest thrift library versions (0.11)
- strict-conformance with P4_16 specification for header stacks (push / pop operations) can be enabled with
configure
flag--enable-WP4-16-stacks
. The plan is to turn this on by-default in the next minor release (1.11).
simple_switch:
- support for
queueing_metadata.qid
- user-defined destructor for
SimpleSwitch
to join threads and properly clean-up resources
simple_switch_grpc:
- support latest PI / P4 Runtime
- initial support for gNMI / Openconfig YANG models using third-party sysrepo datastore
- move to single-threaded server for dataplane service to ensure a single client is being served