Skip to content

Release 1.14.0 of bmv2

Compare
Choose a tag to compare
@antoninbas antoninbas released this 15 Sep 02:40

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 and access_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 and modify_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