Get desktop application:
View/edit binary Protocol Buffers messages
Used in:
Used in:
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Documentation of the Param.
unset if not user-defined type.
Used in:
the ids of the tables sharing this action profile
true iff the action profile used dynamic selection
max number of member entries across all groups if the action profile does not have a selector. Otherwise, semantics as specified by `selector_size_semantics` below.
0 if the action profile does not have a selector. Otherwise, semantics as specified by `selector_size_semantics` below.
specifies the semantics of `size` and `max_group_size` above.
group size is the sum of the group's weights. Added in v1.4.0.
group size is the sum of the group's members. Added in v1.4.0.
Dictates whether the controller can specify weights for groups programmed in this ActionProfile. If `weights_disallowed` is true, then all weights must be absent. Unset (false) in action profiles without selectors. Added in v1.5.0.
indicates that `size` and `max_group_size` represent the maximum number of members that can be present across all selector groups and within a single selector group respectively. Added in v1.4.0.
Used in:
the maximum weight of each individual member in a group.
indicates that `size` and `max_group_size` represent the maximum sum of weights that can be present across all selector groups and within a single selector group respectively. Added in v1.4.0.
Used in:
(message has no fields)
used to list all possible actions in a Table
Used in:
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Used in:
Added in v1.6.0.
Any metadata associated with controller Packet-IO (Packet-In or Packet-Out) is modeled as P4 headers carrying special annotations @controller_header("packet_out") and @controller_header("packet_in") respectively. There can be at most one header each with these annotations. This message captures the info contained within these special headers, and used in p4runtime.proto to supply the metadata.
Used in:
preamble.name and preamble.id will specify header type ("packet_out" or "packet_in" for now).
Ordered based on header layout. This is a constraint on the generator of this P4Info.
Used in:
This is the name of the header field (not fully-qualified), similar to e.g. Action.Param.name.
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
unset if not user-defined type
Used in:
number of entries in the counter array
unset if index is not user-defined type
Used in: ,
Corresponds to 'type' constructor parameter for Counter / DirectCounter in PSA
Used in:
Used in:
Used in:
the id of the table to which the counter is attached
Used in:
the id of the table to which the meter is attached
Used in: , , ,
A brief description of something, e.g. one sentence
A more verbose description of something. Multiline is accepted. Markup format (if any) is TBD.
Used in: ,
Used in:
used to group all extern instances of the same type in one message
Used in:
the extern_type_id is unique for a given architecture and must be in the range [0x81, 0xfe].
Used in:
specific to the extern type, declared in a separate vendor-specific proto file
Used in:
Used in:
Used in: ,
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
used for architecture-specific match types which are not part of the core P4 language or of the PSA architecture.
Documentation of the match field
unset if not user-defined type
Used in:
Used in:
number of entries in the meter array
unset if index is not user-defined type
Used in: ,
Added in 1.4.0.
Used to restrict the MeterConfigs that can be used to instantiate the meter. Added in 1.4.0.
Used in:
As described in RFC 2698, allows meters to use two rates to split packets into three potential colors. MeterConfigs on table entries using this meter type MUST have `eburst == 0` (i.e. unset).
As described in RFC 2697, allows meters to use one rate with an Excess Burst Size (EBS) to split packets into three potential colors. MeterConfigs on table entries using this meter type MUST have `cir == pir && cburst == pburst`.
A simplified version of RFC 2697, restricting meters to using a single rate to split packets into only RED or GREEN, by not providing an Excess Burst Size (EBS). MeterConfigs on table entries using this meter type MUST have `cir == pir && cburst == pburst && eburst == 0` (i.e. unset).
Corresponds to 'type' constructor parameter for Meter / DirectMeter in PSA
Used in:
Used in: ,
Used in: ,
bit<W>
int<W>
varbit<W>
Useful to identify well-known types, such as IP address or Ethernet MAC address.
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Empty message as no type information needed, just used as a placeholder in the oneof to identify boolean types.
Used in:
(message has no fields)
Describes a P4_16 type.
Used in: , , , ,
For "safe" enums with no underlying representation and no member integer values.
Used in:
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Used in:
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Used in:
(message has no fields)
Similar to an enum, but there is always one and only one instance per P4 program.
Used in:
Used in:
Used in:
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Used in:
Used in:
Used in:
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Used in:
wrapping the enum in a message to avoid name collisions in C++, where "enum values are siblings of their type, not children of it"
(message has no fields)
ids are allocated in such a way that it is possible based on an id to deduce the resource type (e.g. table, action, counter, ...). The most-significant byte of the 32-bit id encodes the resource type. The purpose of this enum is to define which value is used as the most-significant byte for each resource type. The P4 compiler must use these values when allocating ids for P4 objects. Other users of P4Info can refer to this enum to identify a resource type based on its id.
P4 language built-ins
PSA externs
externs for other architectures (vendor extensions)
max value for an unsigned 8-bit byte
requires protoc >= 3.5.0 reserved 0x100 to max;
Used in:
Used in:
Used in: , , , , , , , , ,
New types introduced with the "type" keyword
Used in:
if no @p4runtime_translation annotation present
if @p4runtime_translation annotation present
for other annotations (not @p4runtime_translation)
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Used in:
the URI uniquely identifies the translation in order to enable the P4Runtime agent to perform value-mapping appropriately when required. It is recommended that the URI includes at least the P4 architecture name and the type name.
The object is either represented as an unsigned integer with a bitwidth of `sdn_bitwidth`, or as a string.
Used in:
(message has no fields)
For serializable (or "unsafe") enums, which have an underlying type. Note that as per the P4_16 specification, the underlying representation can only be a bit<W> type.
Used in:
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Used in:
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Used in:
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Used in:
From the P4_16 spec: "A tuple is similar to a struct, in that it holds multiple values. Unlike a struct type, tuples have no named fields."
Used in:
These P4 types (struct, header_type, header_union and enum) are guaranteed to have a fully-qualified name (e.g. you cannot use an anonymous struct to declare a variable like in C). Instead of duplicating the type spec for these every time the type is used, we include the type spec once in this P4TypeInfo message and refer to the types by name in the P4DataTypeSpec message. We also support annotations for these type specs which can be useful, e.g. to identify well-known headers (such as ipv4).
Used in:
Used in:
Top-level package documentation describing the forwarding pipeline config Can be used to manage multiple P4 packages.
Used in:
a definitive name for this configuration, e.g. switch.p4_v1.0
configuration version, free-format string
brief and detailed descriptions
Miscellaneous metadata, free-form; a way to extend PkgInfo
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
the target architecture, e.g. "psa"
organization which produced the configuration, e.g. "p4.org"
contact info for support,e.g. "tech-support@acme.org"
url for more information, e.g. "http://support.p4.org/ref/p4/switch.p4_v1.0"
Miscellaneous metadata, structured; a way to extend PkgInfo
If set, specifies the properties that the underlying platform should have. If the platform does not conform to these properties, the server should reject the P4Info when used with a SetForwardingPipelineConfigRequest. Added in 1.4.0
Used to describe the required properties of the underlying platform. Added in v1.4.0
Used in:
The minimum number of multicast entries (i.e. multicast groups) that the platform is required to support. If 0, there are no requirements.
The minimum number of replicas that the platform is required to support across all groups. If 0, there are no requirements.
The number of replicas that the platform is required to support per group/entry. If 0, `multicast_group_table_total_replicas` should be used. Must be no larger than `multicast_group_table_total_replicas`.
Used in: , , , , , , , , , , ,
ids share the same number-space; e.g. table ids cannot overlap with counter ids. Even though this is irrelevant to this proto definition, the ids are allocated in such a way that it is possible based on an id to deduce the resource type (e.g. table, action, counter, ...). This means that code using these ids can detect if the wrong resource type is used somewhere. This also means that ids of different types can be mixed (e.g. direct resource list for a table) without ambiguity. Note that id 0 is reserved and means "invalid id".
fully qualified name of the P4 object, e.g. c1.c2.ipv4_lpm
an alias (alternative name) for the P4 object, probably shorter than its fully qualified name. The only constraint is for it to be unique with respect to other P4 objects of the same type. By default, the compiler uses the shortest suffix of the name that uniquely identifies the object. For example if the P4 program contains two tables with names s.c1.t and s.c2.t, the default aliases will respectively be c1.t and c2.t. In the future, the P4 programmer may also be able to override the default alias for any P4 object (TBD).
Optional. If present, the location of `annotations[i]` is given by `annotation_locations[i]`.
Documentation of the entity
Used in:
unset if index is not user-defined type
Location of code relative to a given source file.
Used in: , , , , , , , , , , , , , , ,
Path to the source file (absolute or relative to the working directory).
Line and column numbers within the source file, 1-based.
Used in: , , , , , , , , , , , , , ,
Optional. Location of the '@' symbol of this annotation in the source code.
Used in:
even when the table is indirect (see implementation_id) below, this field includes all possible actions for the table; by using ActionRef instead of a repeated field of action ids, each action reference in a P4 table is able to have its own annotations
0 (default value) means that the table does not have a const default action
The initial default action of the table. This can be overridden at runtime. Added in 1.4.0.
P4 id of the "implementation" for this table (e.g. action profile id); 0 (default value) means that the table is a regular (direct) match table. As of today, only action profiles are supported but other table implementations may be added in the future
ids of the direct resources (if any) attached to this table; for now this includes only direct counters and direct meters, but other resources may be added in the future
max number of entries in table
is idle timeout supported for this table?
True if and only if the table's entries are immutable, i.e. defined using the 'const entries' table property in the P4 source code, and thus entries cannot be deleted, modified, or inserted at run time.
True if and only if the table has initial entries defined using the 'entries' table property in the P4 source code, either with or without the 'const' qualifier on 'entries', and there is at least one entry in that list. This field is false if the list of entries is empty in the P4 source code. Added in 1.4.0.
architecture-specific table properties which are not part of the core P4 language or of the PSA architecture.
this enum can be extended in the future with other behaviors, such as "HARD_EVICTION"
Used in:
A TableActionCall references a particular action id and executes the action with the supplied list of arguments. Arguments are matched to the id of the respective action parameter. TableActionCalls may be used as the default action call of a table implementation. Added in 1.4.0.
Used in:
Used in:
Used in:
number of entries in the value_set, as per the P4 constructor call.