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