Capabilities ============ .. _doc_feature_capabilities: Overview -------- ByteBlower uses "capabilities" to indicate whether or not features are supported. A use case for these is adapting a test or script to use ByteBlower features when supported, but ignore parts of the script when the ByteBlower Endpoint runs on a system that does not support this feature. e.g. Skip the IPv6 flows when the Endpoint device does not support IPv6. Capabilities can have 3 different data types: - boolean: A feature is either supported or not - numberic: A feature can be limited in use. e.g. a ByteBlower Endpoint can only have 1 frame defined in a stream, whilst a ByteBlower Port can have an unlimited number of frames defined in a stream. - text: Everything else that cannot be expressed as a boolean or numeric value `Combine.L4Checksum.TxTimestamp` Indicates when the ByteBlower server supports TCP/UDP checksum correction whilst inserting latency timestamp injection. `Http.Request.Duration` Indicates whether the HTTP Client supports duration based HTTP sessions. .. versionadded:: 2.0.0 .. versionchanged:: 2.22.0 This capability was introduced. `Http.Request.Size` Indicates whether the HTTP Client supports size based HTTP sessions. .. versionadded:: 2.0.0 .. versionchanged:: 2.22.0 This capability was introduced. .. versionchanged:: 2.22.0 The ByteBlower Endpoint added support for size based HTTP sessions `Http.Request.Uri` Indicates whether the HTTP Client supports URL based HTTP sessions. .. versionadded:: 2.0.0 .. versionchanged:: 2.22.0 This capability was introduced. .. note:: The ByteBlower Endpoint application does not support this feature. `IPv4` Indicates whether or not the ByteBlower Port or ByteBlower Endpoint support traffic emulation over the Layer3 IPv4 protocol. `IPv6` Indicates whether or not the ByteBlower Port or ByteBlower Endpoint support traffic emulation over the Layer3 IPv6 protocol. On a ByteBlower Endpoint this capability can be disabled when e.g. the operating system does not have any IPv6 support. `Monitor.NetworkInfo` Indicates whether the ByteBlower Endpoint supports monitoring the Network Interfaces for changes in statistics. E.g. - Wi-Fi RSSI - IPv4 addresses - Link speed .. versionadded:: 2.11.0 `PacketDump` Indicates whether the ByteBlower server supports the PacketDump feature. :class:`byteblowerll.byteblower.PacketDump` is a feature allowing the user to capture bi-directional traffic on a ByteBlower Interface. .. versionadded:: 2.9.0 `Rx.Latency.Basic` Indicates whether or not the ByteBlower Port or ByteBlower Endpoint support basic processing latency measurement timestamps from received frames. Basic processing is calculating some basic statistics such as - Average Latency - Minimum Latency - Maximum Latency - Jitter .. versionchanged:: 2.6.0 ByteBlower Endpoint gained support for this. `Rx.Latency.Distribution` Indicates whether or not the ByteBlower Port or ByteBlower Endpoint support latency histogram measurements based on latency measurement timestamps from received frames. Next to latency histograms, this trigger also includes the basic latency measurements. .. versionchanged:: 2.13.0 ByteBlower Endpoint support for Latency Distribution triggers. `Rx.Latency.Distribution.OverTime` Indicates whether or not the ByteBlower Port or ByteBlower Endpoint support latency histogram measurements with results split per snapshot interval. .. versionadded:: 2.20.0 ByteBlower support for Latency Distribution results over time. `Rx.OutOfSequence.Basic` Indicates whether or not the ByteBlower Port or ByteBlower Endpoint support processing of incoming sequence numbers to detect packet reordering or real-time loss. .. versionadded:: 2.21.0 ByteBlower server support for real-time loss detection `Scenario.LiveResultUpdates` Indicates whether or not a ByteBlower Endpoint can report the intermediate results back to the MeetingPoint during a test. .. versionadded:: 2.21.0 `Scenario.Stop` Indicates whether or not a ByteBlower Endpoint supports stopping a running scenario through the ByteBlower API / ByteBlower GUI. .. versionadded:: 2.19.0 `Tcp.L4S` Indicates whether or not the ByteBlower Port or ByteBlower Endpoint support L4S measurements using TCP sessions. The ByteBlower Server and ByteBlower Endpoint on Linux support both Accurate ECN and a TCP Prague implementation. The ByteBlower Endpoint on macOS only supports Accurate ECN. .. versionadded:: 2.22.0 `Tcp.Restart` Indicates whether or not the ByteBlower Endpoint can be configured to automatically restart HTTP sessions which were interrupted. .. versionadded:: 2.10.0 `Tx.Latency` Indicates whether or not the ByteBlower Port or ByteBlower Endpoint support inserting latency measurement timestamps into transmitted frames. `Tx.OutOfSequence` Indicates whether or not the ByteBlower Port or ByteBlower Endpoint support inserting sequence numbers into transmitted frames. The feature is usually used in combination with a OutOfSequence trigger to detect packet reordering or real-time loss with the ByteBlower Port .. note:: The ByteBlower Endpoint does not support this feature. `Vlan.Stacking` Indicates how many VLAN headers can be stacked on a given ByteBlower Port. .. note:: ByteBlower Endpoint does not support dynamic VLAN configurations, and this value will always be 0. .. versionadded:: 2.3.0 `Unknown` The ByteBlower API installation does not know this capability yet. This usually means that the ByteBlower API should be updated in order to use the new ByteBlower features Using the Capabilities ---------------------- .. code-block:: python :caption: Listing the capabilities of a specific ByteBlower from byteblowerll import byteblower as api instance = api.ByteBlower.InstanceGet() meetingpoint = instance.MeetingPointAdd('10.10.1.202') for endpoint in meetingpoint.DeviceListGet(): given_name = endpoint.DeviceInfoGet().GivenNameGet() print(f"Endpoint: {given_name}" ) for capability in endpoint.CapabilityListGet(): print(f" - {capability.NameGet()}: {capability.ValueGet().DescriptionGet()") .. code-block:: python :caption: Skipping a pytest when a capability is not supported import pytest from byteblowerll import byteblower as api instance = api.ByteBlower.InstanceGet() def test_l4s(): instance = api.ByteBlower.InstanceGet() server = instance.ServerAdd('10.10.1.202') port = server.PortCreate('trunk-1-1') if port.CapabilityIsSupported('Tcp.L4S'): pytest.skip("This ByteBlower installation does not support L4S. " "Please update the API and/or ByteBlower Server") # ... do test.