Skip to content

Releases: p4lang/behavioral-model

Release 1.15.0 of bmv2

10 Feb 19:52
f745e1d
Compare
Choose a tag to compare

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

15 Sep 02:40
Compare
Choose a tag to compare

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

Release 1.13.0 of bmv2

21 Feb 21:49
Compare
Choose a tag to compare

List of new features:

bmv2 core:

  • add 2 new hash functors: round_robin and round_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 to SimpleSwitchGrpc 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

24 Jul 00:01
Compare
Choose a tag to compare

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

24 Jul 00:01
Compare
Choose a tag to compare

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

16 Mar 18:41
Compare
Choose a tag to compare

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

14 Mar 20:53
Compare
Choose a tag to compare

Notable bug fixes since 1.10.2:

  • fix locking model in BMI
  • fix table entry versioning

Release 1.10.2 of bmv2

14 Mar 20:22
Compare
Choose a tag to compare

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

14 Mar 18:42
Compare
Choose a tag to compare

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

04 Jan 18:41
Compare
Choose a tag to compare

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