From e553d88647a5640f8a4ef337c43d03bee25ede89 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 12 Apr 2023 18:17:10 -0700 Subject: [PATCH 01/42] Initial changes for generic tables --- proto/p4/config/v1/p4info.proto | 50 +++++++++++++++++++++++++ proto/p4/v1/p4data.proto | 18 +++++++++ proto/p4/v1/p4runtime.proto | 65 +++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+) diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index badddd92..90ff5c65 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -36,6 +36,7 @@ message P4Info { repeated ValueSet value_sets = 10; repeated Register registers = 11; repeated Digest digests = 12; + repeated GenericTable generic_tables = 13; repeated Extern externs = 100; P4TypeInfo type_info = 200; } @@ -224,6 +225,55 @@ message Table { google.protobuf.Any other_properties = 100; } +message GenericTable { + Preamble preamble = 1; + repeated MatchField match_fields = 2; + repeated UnionRef union_refs = 3; + // 0 (default value) means that the table does not have a const default action + uint32 const_default_union_id= 4; + int64 size = 5; // max number of entries in table + // Const table, cannot be modified at runtime + bool is_const_table = 6; + // architecture-specific table properties which are not part of the core P4 + // language or of the PSA architecture. + google.protobuf.Any other_properties = 100; +} + +// used to list all possible unions in a Table +message UnionRef { + uint32 id = 1; + enum Scope { + TABLE_AND_DEFAULT = 0; + TABLE_ONLY = 1; + DEFAULT_ONLY = 2; + } + Scope scope = 3; + repeated string annotations = 2; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 5; + repeated StructuredAnnotation structured_annotations = 4; +} + +message Union { + Preamble preamble = 1; + message Param { + uint32 id = 1; + string name = 2; + repeated string annotations = 3; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 8; + int32 bitwidth = 4; + // Documentation of the Param + Documentation doc = 5; + // unset if not user-defined type + P4NamedType type_name = 6; + repeated StructuredAnnotation structured_annotations = 7; + } + repeated Param params = 2; +} + // used to list all possible actions in a Table message ActionRef { uint32 id = 1; diff --git a/proto/p4/v1/p4data.proto b/proto/p4/v1/p4data.proto index f5b80a9e..84e5d6be 100644 --- a/proto/p4/v1/p4data.proto +++ b/proto/p4/v1/p4data.proto @@ -34,6 +34,24 @@ message P4Data { bytes enum_value = 12; // serializable enums only } } +message GenericData { + oneof data { + bytes bitstring = 1; + float float = 2; + bool bool = 3; + GenericStructLike generic_struct = 4; // one struct + GenericList generic_list = 5; // list of bytes/floats/bool/structs/strings/enums/enum_values. + string string = 6; // control plane arbitrary length string + string enum = 7; // safe (non-serializable) enums only + bytes enum_value = 8; // serializable enums only + } +} +message GenericStructLike { + repeated GenericData members = 1; +} +message GenericList { + repeated GenericStructLike members = 1; +} message P4Varbit { bytes bitstring = 1; diff --git a/proto/p4/v1/p4runtime.proto b/proto/p4/v1/p4runtime.proto index bcb9266b..1341f852 100755 --- a/proto/p4/v1/p4runtime.proto +++ b/proto/p4/v1/p4runtime.proto @@ -138,6 +138,7 @@ message Entity { ValueSetEntry value_set_entry = 10; RegisterEntry register_entry = 11; DigestEntry digest_entry = 12; + GenericTableEntry generic_table_entry = 13; } } @@ -252,6 +253,43 @@ message FieldMatch { .google.protobuf.Any other = 100; } } +message GenericFieldMatch { + uint32 field_id = 1; + + message Exact { + GenericData value = 1; + } + message Ternary { + bytes value = 1; + bytes mask = 2; + } + message LPM { + bytes value = 1; + int32 prefix_len = 2; // in bits + } + // A Range is logically a set that contains all values numerically between + // 'low' and 'high' inclusively. + message Range { + bytes low = 1; + bytes high = 2; + } + // If the Optional match should be a wildcard, the FieldMatch must be omitted. + // Otherwise, this behaves like an exact match. + message Optional { + GenericData value = 1; + } + + oneof field_match_type { + Exact exact = 2; + Ternary ternary = 3; + LPM lpm = 4; + Range range = 6; + Optional optional = 7; + // Architecture-specific match value; it corresponds to the other_match_type + // in the P4Info MatchField message. + .google.protobuf.Any other = 100; + } +} // table_actions ::= action_specification | action_profile_specification message TableAction { @@ -510,6 +548,33 @@ message DigestEntry { Config config = 2; } +message GenericTableEntry { + uint32 table_id = 1; + repeated GenericFieldMatch match = 2; + TableDataUnion table_data_union = 3; + // Should only be set if the match implies a TCAM lookup, i.e. at least one of + // the match fields is Optional, Ternary or Range. A higher number indicates + // higher priority. Only a highest priority entry that matches the packet + // must be selected. Multiple entries in the same table with the same + // priority value are permitted. See Section "TableEntry" in the + // specification for details of the behavior. + int32 priority = 4; + // Set to true if the table entry is being used to update the single default + // entry of the table. If true, the "match" field must be empty and + // the "data union" field must be populated with a valid data union. + bool is_default_entry = 5; + // Arbitrary metadata from the controller that is opaque to the target. + bytes metadata = 6; +} +message TableDataUnion { + uint32 union_id = 1; + message Param { + uint32 param_id = 2; + GenericData value = 3; + } + repeated Param params = 4; +} + //------------------------------------------------------------------------------ message StreamMessageRequest { oneof update { From 1d8eff5e8541eea91a8ce2e13d4e3ac4d4586dd4 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 12 Apr 2023 18:29:23 -0700 Subject: [PATCH 02/42] second changes --- docs/v1/P4Runtime-Spec.mdk | 12 ++++++++++++ proto/p4/config/v1/p4info.proto | 1 + 2 files changed, 13 insertions(+) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index dc6fcbc3..9fe4dd2f 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -2007,6 +2007,15 @@ The `Digest` message defines the following fields: notification using a `P4DataTypeSpec` message (see section on [Representation of Arbitrary P4 Types](#sec-representation-of-arbitrary-p4-types)). +### `GenericTable` { #sec-p4info-generic-table} +`GenericTable` messages are used to map non-PSA P4 externs or non-P4 target- +specific features to their implementation in a generic way. The same can be achieved +via Extern, but GenericTable provides a structured way in which every feature is +represented as a set of match-fields and data-fields. The data consists of unions +wihch are similar to actions. The best use of GenericTable in a server backend is +with TDI (Table Driven Interface), but targets can use Generic table to map to their +own specific feature implementations as well. + ### `Extern` { #sec-p4info-extern} `Extern` messages are used to specify all extern instances across all extern @@ -2042,6 +2051,9 @@ the following fields: If the P4 program does not include any instance of a given extern type, the `Extern` message instance for that type should be omitted from the P4Info. + + + ## Support for Arbitrary P4 Types with P4TypeInfo See section on [Representation of Arbitrary P4 diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index 90ff5c65..2bdd1e62 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -37,6 +37,7 @@ message P4Info { repeated Register registers = 11; repeated Digest digests = 12; repeated GenericTable generic_tables = 13; + repeated Union unions = 14; repeated Extern externs = 100; P4TypeInfo type_info = 200; } From 4690968acd8e747c2b36dfda15d28ce8403b8a56 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 13 Apr 2023 18:02:34 -0700 Subject: [PATCH 03/42] 3rd changes --- docs/v1/P4Runtime-Spec.mdk | 142 ++++++++++++++++++++++++++++++-- proto/p4/config/v1/p4info.proto | 37 +-------- 2 files changed, 134 insertions(+), 45 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 9fe4dd2f..0844f979 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -2008,13 +2008,47 @@ The `Digest` message defines the following fields: of Arbitrary P4 Types](#sec-representation-of-arbitrary-p4-types)). ### `GenericTable` { #sec-p4info-generic-table} -`GenericTable` messages are used to map non-PSA P4 externs or non-P4 target- -specific features to their implementation in a generic way. The same can be achieved -via Extern, but GenericTable provides a structured way in which every feature is +`GenericTable` messages are used to map non-PSA P4-externs or non-P4 target- +specific "fixed" features to their implementation in a generic way. The same can be achieved +via `Extern`, but GenericTable provides a structured way in which every feature is represented as a set of match-fields and data-fields. The data consists of unions -wihch are similar to actions. The best use of GenericTable in a server backend is -with TDI (Table Driven Interface), but targets can use Generic table to map to their -own specific feature implementations as well. +wihch are similar to actions. One use of GenericTable in a server backend is +with TDI [Table Driven Interface](https://github.com/p4lang/tdi), but targets +can use Generic table to map to their own specific feature implementations as +well. +It defines the following fields + +* `preamble`, a `Preamble` message with the ID, name, and alias of this + GenericTable. + +* `match_fields`, a repeated field of type `MatchField` representing the data to + be used to construct the lookup key matched in this table. For information check + the match_fields info in the [Table section](#sec-table) + +* `union_refs`, a repeated `UnionRef` field representing the set of possible + unions for this table. Functionally, it behaves same as that of ActionRefs. + Hence it has been kept as ActionRefs itself. + Please check the action_refs info in the [Table section](#sec-table) + +* `const_default_union_id`, if this table has a constant default union, this + field will carry the `uint32` identifier of that action, otherwise its value + will be 0. A default union is the data when the key is null. It is similar to + a default action for Match Tables. + Being constant means that the control plane cannot + set a different default union at runtime or change the default union's + arguments. + +* `size`, an `int64` describing the desired number of table entries that the + target should support for the table. See the "Size" subsection within the + "Table Properties" section of the P4~16~ language specification for details + [@P4TableProperties]. + +* `is_const_table`, a boolean flag indicating that the table cannot be modified + by the control plane at runtime. + +* `other_properties`, an `Any` Protobuf message [@ProtoAny] to embed + architecture-specific or target-specific table properties [@P4TableProperties] + that the target wants to convey. ### `Extern` { #sec-p4info-extern} @@ -2051,9 +2085,6 @@ the following fields: If the P4 program does not include any instance of a given extern type, the `Extern` message instance for that type should be omitted from the P4Info. - - - ## Support for Arbitrary P4 Types with P4TypeInfo See section on [Representation of Arbitrary P4 @@ -2945,6 +2976,26 @@ tables { } ~ End Prototext +### GenericData + +`GenericData` is an addition to p4data.proto- which aims at adding support for +data types which aren't covered by P4Data. This incorporates all the data types +used as primitive data types like bytes, float, strings. + + * bitstring : Bytes type used for simple unsigned integers or bytes + * float : Floating type values + * bool : Boolean type values + * generic_struct : Used to define a structure that can contain + one or more of the other members. So one structure can contain + different members of different types in GenericData + * generic_list : Used to define a list of same types. Even though the def + is same as that of generic_struct, this only allows for a variable list + of the same type. It can also be a list of generic_structs + * string : Used to define control plane strings. The max string length is + defined by the size + * enum : String representation with which safe enums are realized + * enum_val : bytes value with which unsafe/serializable enums are defined + # P4 Entity Messages { #sec-p4-entity-msgs} P4Runtime covers P4 entities that are either part of the P4~16~ language, or @@ -4799,6 +4850,79 @@ message should be defined in a separate architecture-specific Protobuf file. See section on [Extending P4Runtime for non-PSA Architectures](#sec-extending-p4runtime) for more information. +## `GenericTableEntry` { #sec-generic-table-entry} + +GenericTableEntry can be used to program non-PSA externs or non-P4 target-specific +"fixed" features to their implementation in a generic way. This provides an alternative +to `Extern` in a structured way and within p4runtime guidelines and semantics. +The idea has been borrowed from TDI [Table Driven Interface](https://github.com/p4lang/tdi), +that every state can be representated as a table or multiple tables. A table here is any +data structure with one or more entries and each entry can be represented as a set of +key fields and data fields. +Actions in P4 tables behave like unions and that has been borrowed here in GenericTable. +This can be potentially used targets to map to either TDI based backends, or even non-TDI +based backends. If using TDI, then potentially, for every new feature to be added, only +TDI backend support and remote client code will be required to make use of that function. +All other middle layers should theoretically remain unchanged. + +P4Runtime supports inserting, modifying, deleting and reading GenericTable entries with +the `GenericTableEntry` entity, which has the following fields: + +* `table_id`, which identifies the table instance; the `table_id` is determined + by the P4Info message. + +* `match`, a repeated field of `GenericFieldMatch` messages. Each element in the + repeated field is used to provide a value for the corresponding element in the + p4info. + +* `union`, which indicates which of the table's unions to execute in case of + match and with which argument values. + +* `priority`, a 32-bit integer used to order entries when the table's match key + includes an optional, ternary or range match. + +* `is_default_action`, a boolean flag which indicates whether the table entry is + the default entry for the table. See [Default entry](#sec-default-entry) + section for more information. + +* `metadata`, an arbitrary `bytes` value which is opaque to the + target. There is no requirement of where this is stored, but it must be + returned by the server along with the rest of the entry when the client + performs a read on the entry. + +The `priority` field must be set to a non-zero value if the match key includes a +ternary match (&ie; in the case of PSA if the P4Info entry for the table +indicates that one or more of its match fields has an `OPTIONAL`, `TERNARY` or +`RANGE` match +type) or to zero otherwise. A higher priority number indicates that the entry +must be given higher priority when performing a table lookup. Clients must allow +multiple entries to be added with the same priority value. If a packet can +match multiple entries with the same priority, it is not deterministic in the +data plane which entry a packet will match. If a client wishes to make the +matching behavior deterministic, it must use different priority values for any +pair of table entries that the same packet matches. + +The `match` and `priority` fields are used to uniquely identify an entry within +a table. Therefore, these fields cannot be modified after the entry has been +inserted and must be provided for `MODIFY` and `DELETE` updates. When deleting +an entry, these key fields (along with `is_default_action`) are the only fields +considered by the server. All other fields must be ignored, even if they have +nonsensical values (such as an invalid action field). In the case of a *keyless* +table (the table has an empty match key), the server must reject all attempts to +`INSERT` a match entry and return an `INVALID_ARGUMENT` error. + +The number of match entries that a table *should* support is indicated in P4Info +(`size` field of `Table` message). The guarantees provided to the P4Runtime +client are the same as the ones described in the P4~16~ specification for the +`size` property [@P4TableProperties]. In particular, some implementations may +not be able to always accommodate an arbitrary set of entries up to the +requested size, and other implementations may provide the P4Runtime client with +more entries than requested. The P4Runtime server must return +`RESOURCE_EXHAUSTED` when a table entry cannot be inserted because of a size +limitation. It is recommended that, for the sake of portability, P4Runtime +clients do not try to insert additional entries once the size indicated in +P4Info has been reached. + # Error Reporting Messages { #sec-error-reporting-messages} P4Runtime is based on gRPC and all RPCs return a status to indicate success or diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index 2bdd1e62..4112319e 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -229,7 +229,7 @@ message Table { message GenericTable { Preamble preamble = 1; repeated MatchField match_fields = 2; - repeated UnionRef union_refs = 3; + repeated ActionRef union_refs = 3; // 0 (default value) means that the table does not have a const default action uint32 const_default_union_id= 4; int64 size = 5; // max number of entries in table @@ -240,41 +240,6 @@ message GenericTable { google.protobuf.Any other_properties = 100; } -// used to list all possible unions in a Table -message UnionRef { - uint32 id = 1; - enum Scope { - TABLE_AND_DEFAULT = 0; - TABLE_ONLY = 1; - DEFAULT_ONLY = 2; - } - Scope scope = 3; - repeated string annotations = 2; - // Optional. If present, the location of `annotations[i]` is given by - // `annotation_locations[i]`. - repeated SourceLocation annotation_locations = 5; - repeated StructuredAnnotation structured_annotations = 4; -} - -message Union { - Preamble preamble = 1; - message Param { - uint32 id = 1; - string name = 2; - repeated string annotations = 3; - // Optional. If present, the location of `annotations[i]` is given by - // `annotation_locations[i]`. - repeated SourceLocation annotation_locations = 8; - int32 bitwidth = 4; - // Documentation of the Param - Documentation doc = 5; - // unset if not user-defined type - P4NamedType type_name = 6; - repeated StructuredAnnotation structured_annotations = 7; - } - repeated Param params = 2; -} - // used to list all possible actions in a Table message ActionRef { uint32 id = 1; From 55bf9be7f65e5bcc7db400ca350109de8253dbc1 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 13 Apr 2023 18:04:11 -0700 Subject: [PATCH 04/42] 4th changes --- proto/p4/v1/p4data.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/p4/v1/p4data.proto b/proto/p4/v1/p4data.proto index 84e5d6be..6b8843ea 100644 --- a/proto/p4/v1/p4data.proto +++ b/proto/p4/v1/p4data.proto @@ -50,7 +50,7 @@ message GenericStructLike { repeated GenericData members = 1; } message GenericList { - repeated GenericStructLike members = 1; + repeated GenericData members = 1; } message P4Varbit { From f775ddc68a55334f683d536c1c450fdcb71c40f2 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 13 Apr 2023 18:07:58 -0700 Subject: [PATCH 05/42] 5th changes --- proto/p4/config/v1/p4info.proto | 1 - 1 file changed, 1 deletion(-) diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index 4112319e..e2a833d2 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -37,7 +37,6 @@ message P4Info { repeated Register registers = 11; repeated Digest digests = 12; repeated GenericTable generic_tables = 13; - repeated Union unions = 14; repeated Extern externs = 100; P4TypeInfo type_info = 200; } From 07b2da68bc757563fdc7af9cbeeeaf1e13122ac2 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 11 May 2023 18:50:06 -0700 Subject: [PATCH 06/42] Adding p4types and p4info changes for GenericData (#4) Adding another enum alongside P4IDs for generic tables as well --- proto/p4/config/v1/p4info.proto | 114 +++++++++++++++++++--- proto/p4/config/v1/p4types.proto | 156 +++++++++++++++++++++++++++++++ 2 files changed, 256 insertions(+), 14 deletions(-) diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index e2a833d2..cfaf5ee5 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -37,6 +37,7 @@ message P4Info { repeated Register registers = 11; repeated Digest digests = 12; repeated GenericTable generic_tables = 13; + repeated Union unions = 14; repeated Extern externs = 100; P4TypeInfo type_info = 200; } @@ -104,6 +105,7 @@ message P4Ids { DIRECT_METER = 0x15; REGISTER = 0x16; DIGEST = 0x17; + GENERIC_TABLE = 0x18; // externs for other architectures (vendor extensions) OTHER_EXTERNS_START = 0x80; @@ -115,6 +117,22 @@ message P4Ids { } } +// A subtype of P4IDs for GenericTables +message GenericTableType { + // The ID space is for Generic tables. In the Preamble ID, the MSB will be + // 0x18 but the next MSB is reserved for this enum. This shortens the ID + // space for tables in each type but it is still 64k (16 bits) for each table + enum Prefix { + + GENERIC_TABLES_START = 0x00; + + // max value for an unsigned 8-bit byte + MAX = 0xff; + // requires protoc >= 3.5.0 + // reserved 0x100 to max; + } +} + message Preamble { // 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 @@ -225,20 +243,6 @@ message Table { google.protobuf.Any other_properties = 100; } -message GenericTable { - Preamble preamble = 1; - repeated MatchField match_fields = 2; - repeated ActionRef union_refs = 3; - // 0 (default value) means that the table does not have a const default action - uint32 const_default_union_id= 4; - int64 size = 5; // max number of entries in table - // Const table, cannot be modified at runtime - bool is_const_table = 6; - // architecture-specific table properties which are not part of the core P4 - // language or of the PSA architecture. - google.protobuf.Any other_properties = 100; -} - // used to list all possible actions in a Table message ActionRef { uint32 id = 1; @@ -412,3 +416,85 @@ message Digest { Preamble preamble = 1; P4DataTypeSpec type_spec = 2; } + +message GenericMatchField { + uint32 id = 1; + string name = 2; + repeated string annotations = 3; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 10; + GenericDataTypeSpec type_spec = 4; + enum MatchType { + UNSPECIFIED = 0; + EXACT = 2; + LPM = 3; + TERNARY = 4; + RANGE = 5; + OPTIONAL = 6; + } + oneof match { + MatchType match_type = 5; + // used for architecture-specific match types which are not part of the core + // P4 language or of the PSA architecture. + string other_match_type = 7; + } + // Documentation of the match field + Documentation doc = 6; + repeated StructuredAnnotation structured_annotations = 9; +} + +// used to list all possible unions in a Table +message UnionRef { + uint32 id = 1; + enum Scope { + TABLE_AND_DEFAULT = 0; + TABLE_ONLY = 1; + DEFAULT_ONLY = 2; + } + Scope scope = 3; + repeated string annotations = 2; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 5; + repeated StructuredAnnotation structured_annotations = 4; +} + +message Union { + Preamble preamble = 1; + message Param { + uint32 id = 1; + string name = 2; + repeated string annotations = 3; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + GenericDataTypeSpec type_spec = 4; + repeated SourceLocation annotation_locations = 7; + // Documentation of the Param + Documentation doc = 5; + repeated StructuredAnnotation structured_annotations = 6; + } + repeated Param params = 2; +} + +// All Tables of one type will be grouped in one message. +message GenericTable { + uint32 generic_table_type_id = 1; + string generic_table_type_name = 2; + repeated GenericTableInstance instances = 3; +} + +message GenericTableInstance { + Preamble preamble = 1; + repeated GenericMatchField match_fields = 2; + repeated UnionRef union_refs = 3; + // 0 (default value) means that the table does not have a const default action + uint32 const_default_union_id= 4; + int64 size = 5; // max number of entries in table + // Const table, cannot be modified at runtime + bool is_const_table = 6; + // architecture-specific table properties which are not part of the core P4 + // language or of the PSA architecture. + google.protobuf.Any other_properties = 100; +} + diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index ff317b68..e26be71e 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -292,4 +292,160 @@ message P4NewTypeSpec { repeated StructuredAnnotation structured_annotations = 4; } +//////// Generic Data types + +// Instead of duplicating the type spec for these +// every time the type is used, we include the type spec once in this +// GenericTypeInfo message and refer to the types by name in the +// GenericDataTypeSpec message. We also +// support annotations for these type specs which can be useful, e.g. to +// identify well-known headers (such as ipv4). +message GenericTypeInfo { + map structs = 1; + map lists = 2; + map enums = 3; + map serializable_enums = 4; + map new_types = 5; +} + +// Describes Generic Data types. +message GenericDataTypeSpec { + oneof type_spec { + GenericBitstringLikeTypeSpec bitstring = 1; + GenericFloatType float = 2; + GenericBoolType bool = 3; + GenericNamedType struct = 4; + GenericNamedType list = 5; + GenericNamedType string = 6; + GenericNamedType enum = 7; + GenericNamedType serializable_enum = 8; + GenericNamedType new_type = 12; + } +} + +message GenericNamedType { + string name = 1; +} + +// Empty message as no type information needed, just used as a placeholder in +// the oneof to identify boolean types. +message GenericBoolType { } +message GenericFloatType { } + +message GenericBitstringLikeTypeSpec { + oneof type_spec { // Variable bit isn't required since list can be used for the same + GenericBitTypeSpec bit = 1; // bit + GenericIntTypeSpec int = 2; // int + } + // Useful to identify well-known types, such as IP address or Ethernet MAC + // address. + repeated string annotations = 3; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 4; + repeated StructuredAnnotation structured_annotations = 5; +} + +message GenericBitTypeSpec { + int32 bitwidth = 1; +} + +message GenericIntTypeSpec { + int32 bitwidth = 1; +} + +message GenericStructTypeSpec { + message Member { + string name = 1; + GenericDataTypeSpec type_spec = 2; + } + repeated Member members = 1; + repeated string annotations = 2; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 5; + repeated StructuredAnnotation structured_annotations = 6; +} + +message GenericListTypeSpec { + message Member { + string name = 1; + GenericDataTypeSpec type_spec = 2; + } + repeated Member members = 1; + repeated string annotations = 2; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + int32 min_size = 4; + int32 max_size = 5; + repeated SourceLocation annotation_locations = 6; + repeated StructuredAnnotation structured_annotations = 7; +} +message GenericEnumTypeSpec { + message Member { + string name = 1; + repeated string annotations = 2; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 4; + repeated StructuredAnnotation structured_annotations = 3; + } + repeated Member members = 1; + repeated string annotations = 2; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 4; + repeated StructuredAnnotation structured_annotations = 3; +} +message GenericSerializableEnumTypeSpec { + message Member { + string name = 1; + bytes value = 2; + repeated string annotations = 3; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 5; + repeated StructuredAnnotation structured_annotations = 4; + } + GenericBitTypeSpec underlying_type = 1; + repeated Member members = 2; + repeated string annotations = 3; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 5; + repeated StructuredAnnotation structured_annotations = 4; +} + +// User defined types +message GenericNewTypeTranslation { + message SdnString {} + + // 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. In case of target specific types, target_name should be included + string uri = 1; + + // The object is either represented as an unsigned integer with a bitwidth of + // `sdn_bitwidth`, or as a string. + oneof sdn_type { + int32 sdn_bitwidth = 2; + SdnString sdn_string = 3; + } +} +message GenericNewTypeSpec { + oneof representation { + // if no @p4runtime_translation annotation present + GenericDataTypeSpec original_type = 1; + // if @p4runtime_translation annotation present + GenericNewTypeTranslation translated_type = 2; + } + // for other annotations (not @p4runtime_translation) + repeated string annotations = 3; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 5; + repeated StructuredAnnotation structured_annotations = 4; +} + // End of P4 type specs -------------------------------------------------------- From e4a5309e65d2605a6a67b4533fb5eac9150986d8 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 12 May 2023 09:28:46 -0700 Subject: [PATCH 07/42] Adding varbits and a readme writeup (#5) * Adding varbit and a writeup --- proto/p4/GenericTable.md | 108 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 proto/p4/GenericTable.md diff --git a/proto/p4/GenericTable.md b/proto/p4/GenericTable.md new file mode 100644 index 00000000..e6fc1b8c --- /dev/null +++ b/proto/p4/GenericTable.md @@ -0,0 +1,108 @@ +# GenericTable example p4info + +Below is an example for realizing MulticastGroupEntry as a GenericTable. +The key (MatchFields) comprise of only the group_id. 2 different ways of +defining the data fields has been presented. Only 1 of them is required. + +``` +generic_tables { + generic_table_type_id : 145 + generic_table_type_name : "MulticastGroup" + preamble { + id: 45332650 + name: "MulticastGroup" + alias: "multicast_group" + } + generic_match_fields { + id: 1 + name: "multicast_group_id" + match_type: EXACT + type { + type : "bytes" + width : 32 + } + } + union_refs { + id: 23557840 + } + size: 1024 +} +``` + +In the below one, both `instance` and `port` are separate +repeated fields. So the check on `len(instance_array) == len(port_array)` +needs to be a runtime check. This however keeps implementation simpler +and faster since we avoid further recursive nesting. + +`port` is a varbytes of max size 64 bits each. The field is repeated so it +is defined as list of varbits through p4info. + +``` +unions { + preamble { + id: 23557840 + name: "multicast_group_member_add" + alias: "multicast_group_member_add" + } + params { + id: 1 + name: "instance" + repeated: true + type { + type : "bytes" + width : 32 + } + } + params { + id: 2 + name: "port" + repeated: true + type { + type : "varbytes" + max_bit_width : 64 + } + } +} + +``` + +The below one is similar to the above but both `instance` and `port` have +been converted to a list of structs. + +``` +unions { + preamble { + id: 23557841 + name: "multicast_group_member_add_2" + alias: "multicast_group_member_add_2" + } + params { + id: 1 + name: "replica" + repeated: true + type { + type : "list" + } + params { + param { + id: 1 + name: "instance" + repeated: true + type { + type : "bytes" + width : 32 + } + } + param : { + id: 2 + name: "port" + repeated: true + type { + type : "varbytes" + max_bit_width : 64 + } + } + } + } +} +``` From fd132e7db98580120580a1631a4d48adee619d1d Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 12 May 2023 09:52:18 -0700 Subject: [PATCH 08/42] Adding proto changes --- proto/p4/config/v1/p4info.proto | 26 ++++++++++++++------------ proto/p4/config/v1/p4types.proto | 17 +++++++++++------ proto/p4/v1/p4data.proto | 20 +++++++++++++------- 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index cfaf5ee5..160f3e99 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -420,10 +420,7 @@ message Digest { message GenericMatchField { uint32 id = 1; string name = 2; - repeated string annotations = 3; - // Optional. If present, the location of `annotations[i]` is given by - // `annotation_locations[i]`. - repeated SourceLocation annotation_locations = 10; + bool repeated = 3; GenericDataTypeSpec type_spec = 4; enum MatchType { UNSPECIFIED = 0; @@ -437,11 +434,15 @@ message GenericMatchField { MatchType match_type = 5; // used for architecture-specific match types which are not part of the core // P4 language or of the PSA architecture. - string other_match_type = 7; + string other_match_type = 6; } // Documentation of the match field - Documentation doc = 6; + Documentation doc = 7; + repeated string annotations = 8; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. repeated StructuredAnnotation structured_annotations = 9; + repeated SourceLocation annotation_locations = 10; } // used to list all possible unions in a Table @@ -465,14 +466,15 @@ message Union { message Param { uint32 id = 1; string name = 2; - repeated string annotations = 3; + bool repeated = 3; + repeated string annotations = 4; + GenericDataTypeSpec type_spec = 5; + // Documentation of the Param + Documentation doc = 6; + repeated StructuredAnnotation structured_annotations = 7; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - GenericDataTypeSpec type_spec = 4; - repeated SourceLocation annotation_locations = 7; - // Documentation of the Param - Documentation doc = 5; - repeated StructuredAnnotation structured_annotations = 6; + repeated SourceLocation annotation_locations = 8; } repeated Param params = 2; } diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index e26be71e..ed19b4ab 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -333,17 +333,18 @@ message GenericBoolType { } message GenericFloatType { } message GenericBitstringLikeTypeSpec { - oneof type_spec { // Variable bit isn't required since list can be used for the same + oneof type_spec { GenericBitTypeSpec bit = 1; // bit GenericIntTypeSpec int = 2; // int + GenericVarbitTypeSpec varbit = 3; // varbit } // Useful to identify well-known types, such as IP address or Ethernet MAC // address. - repeated string annotations = 3; + repeated string annotations = 4; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - repeated SourceLocation annotation_locations = 4; - repeated StructuredAnnotation structured_annotations = 5; + repeated SourceLocation annotation_locations = 5; + repeated StructuredAnnotation structured_annotations = 6; } message GenericBitTypeSpec { @@ -354,6 +355,9 @@ message GenericIntTypeSpec { int32 bitwidth = 1; } +message GenericVarbitTypeSpec { + int32 max_bitwidth = 1; +} message GenericStructTypeSpec { message Member { string name = 1; @@ -367,6 +371,7 @@ message GenericStructTypeSpec { repeated StructuredAnnotation structured_annotations = 6; } +// If a field is of type list, then repeated = true in p4info message GenericListTypeSpec { message Member { string name = 1; @@ -376,8 +381,8 @@ message GenericListTypeSpec { repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - int32 min_size = 4; - int32 max_size = 5; + int32 min_size = 4; // 0 if not present + int32 max_size = 5; // no max size defined if not present repeated SourceLocation annotation_locations = 6; repeated StructuredAnnotation structured_annotations = 7; } diff --git a/proto/p4/v1/p4data.proto b/proto/p4/v1/p4data.proto index 6b8843ea..300b8f87 100644 --- a/proto/p4/v1/p4data.proto +++ b/proto/p4/v1/p4data.proto @@ -37,13 +37,14 @@ message P4Data { message GenericData { oneof data { bytes bitstring = 1; - float float = 2; - bool bool = 3; - GenericStructLike generic_struct = 4; // one struct - GenericList generic_list = 5; // list of bytes/floats/bool/structs/strings/enums/enum_values. - string string = 6; // control plane arbitrary length string - string enum = 7; // safe (non-serializable) enums only - bytes enum_value = 8; // serializable enums only + GenericVarbit varbitstring = 2; + float float = 3; + bool bool = 4; + GenericStructLike generic_struct = 5; // one struct + GenericList generic_list = 6; // list of bytes/floats/bool/structs/strings/enums/enum_values. + string string = 7; // control plane arbitrary length string + string enum = 8; // safe (non-serializable) enums only + bytes enum_value = 9; // serializable enums only } } message GenericStructLike { @@ -53,6 +54,11 @@ message GenericList { repeated GenericData members = 1; } +message GenericVarbit { + bytes bitstring = 1; + int32 bitwidth = 2; // dynamic bitwidth of the field +} + message P4Varbit { bytes bitstring = 1; int32 bitwidth = 2; // dynamic bitwidth of the field From 2a5eae6c3eee50c9f7b63ae04629b98270567f8a Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 19 May 2023 08:40:01 -0700 Subject: [PATCH 09/42] Adding genericTable for direct resources. Adding P4datatypespec to genericdatatype in p4types --- proto/p4/config/v1/p4types.proto | 13 +++++++------ proto/p4/v1/p4runtime.proto | 5 +++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index ed19b4ab..1becd35f 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -319,7 +319,12 @@ message GenericDataTypeSpec { GenericNamedType string = 6; GenericNamedType enum = 7; GenericNamedType serializable_enum = 8; - GenericNamedType new_type = 12; + GenericNamedType new_type = 9; + // P4 data type spec can help achieve parity with types being used + // in P4 externs. For example, if Register is using a type in P4 + // Data type spec, then it will make it easier to map here when using + // GenericTables + P4DataTypeSpec p4_type = 10; } } @@ -373,11 +378,7 @@ message GenericStructTypeSpec { // If a field is of type list, then repeated = true in p4info message GenericListTypeSpec { - message Member { - string name = 1; - GenericDataTypeSpec type_spec = 2; - } - repeated Member members = 1; + GenericDataTypeSpec type_spec = 1; repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. diff --git a/proto/p4/v1/p4runtime.proto b/proto/p4/v1/p4runtime.proto index 1341f852..bd683dcd 100755 --- a/proto/p4/v1/p4runtime.proto +++ b/proto/p4/v1/p4runtime.proto @@ -211,6 +211,10 @@ message TableEntry { IdleTimeout time_since_last_hit = 10; // Arbitrary metadata from the controller that is opaque to the target. bytes metadata = 11; + // list of GenericTableEntry + // The match fields aren't used. + // Only the union fields and priority + repeated GenericTableEntry resources = 13; } // field_match_type ::= exact | ternary | lpm | range | optional @@ -566,6 +570,7 @@ message GenericTableEntry { // Arbitrary metadata from the controller that is opaque to the target. bytes metadata = 6; } + message TableDataUnion { uint32 union_id = 1; message Param { From 35dc65aa78739c4826b35f8c885e33f8cab2948b Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 26 May 2023 08:24:39 -0700 Subject: [PATCH 10/42] * Adding more container types ** list ** bag ** set ** ordered_set * Moving GenericTable spec update to one big section to keep it organized --- docs/v1/P4Runtime-Spec.mdk | 285 +++++++++++++++++-------------- proto/p4/GenericTable.md | 16 +- proto/p4/config/v1/p4types.proto | 61 ++++++- 3 files changed, 215 insertions(+), 147 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 0844f979..ba10ea1c 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -2008,47 +2008,7 @@ The `Digest` message defines the following fields: of Arbitrary P4 Types](#sec-representation-of-arbitrary-p4-types)). ### `GenericTable` { #sec-p4info-generic-table} -`GenericTable` messages are used to map non-PSA P4-externs or non-P4 target- -specific "fixed" features to their implementation in a generic way. The same can be achieved -via `Extern`, but GenericTable provides a structured way in which every feature is -represented as a set of match-fields and data-fields. The data consists of unions -wihch are similar to actions. One use of GenericTable in a server backend is -with TDI [Table Driven Interface](https://github.com/p4lang/tdi), but targets -can use Generic table to map to their own specific feature implementations as -well. -It defines the following fields - -* `preamble`, a `Preamble` message with the ID, name, and alias of this - GenericTable. - -* `match_fields`, a repeated field of type `MatchField` representing the data to - be used to construct the lookup key matched in this table. For information check - the match_fields info in the [Table section](#sec-table) - -* `union_refs`, a repeated `UnionRef` field representing the set of possible - unions for this table. Functionally, it behaves same as that of ActionRefs. - Hence it has been kept as ActionRefs itself. - Please check the action_refs info in the [Table section](#sec-table) - -* `const_default_union_id`, if this table has a constant default union, this - field will carry the `uint32` identifier of that action, otherwise its value - will be 0. A default union is the data when the key is null. It is similar to - a default action for Match Tables. - Being constant means that the control plane cannot - set a different default union at runtime or change the default union's - arguments. - -* `size`, an `int64` describing the desired number of table entries that the - target should support for the table. See the "Size" subsection within the - "Table Properties" section of the P4~16~ language specification for details - [@P4TableProperties]. - -* `is_const_table`, a boolean flag indicating that the table cannot be modified - by the control plane at runtime. - -* `other_properties`, an `Any` Protobuf message [@ProtoAny] to embed - architecture-specific or target-specific table properties [@P4TableProperties] - that the target wants to convey. +See section [GenericTable p4info](#sec-p4info-generic-table) for more info ### `Extern` { #sec-p4info-extern} @@ -2977,24 +2937,8 @@ tables { ~ End Prototext ### GenericData - -`GenericData` is an addition to p4data.proto- which aims at adding support for -data types which aren't covered by P4Data. This incorporates all the data types -used as primitive data types like bytes, float, strings. - - * bitstring : Bytes type used for simple unsigned integers or bytes - * float : Floating type values - * bool : Boolean type values - * generic_struct : Used to define a structure that can contain - one or more of the other members. So one structure can contain - different members of different types in GenericData - * generic_list : Used to define a list of same types. Even though the def - is same as that of generic_struct, this only allows for a variable list - of the same type. It can also be a list of generic_structs - * string : Used to define control plane strings. The max string length is - defined by the size - * enum : String representation with which safe enums are realized - * enum_val : bytes value with which unsafe/serializable enums are defined +See section [GenericData p4types](#sec-p4data-generic-data) for more info on the info type. +See section [GenericData p4data](#sec-p4types-generic-data) for more info on the runtime type. # P4 Entity Messages { #sec-p4-entity-msgs} @@ -4850,78 +4794,8 @@ message should be defined in a separate architecture-specific Protobuf file. See section on [Extending P4Runtime for non-PSA Architectures](#sec-extending-p4runtime) for more information. -## `GenericTableEntry` { #sec-generic-table-entry} - -GenericTableEntry can be used to program non-PSA externs or non-P4 target-specific -"fixed" features to their implementation in a generic way. This provides an alternative -to `Extern` in a structured way and within p4runtime guidelines and semantics. -The idea has been borrowed from TDI [Table Driven Interface](https://github.com/p4lang/tdi), -that every state can be representated as a table or multiple tables. A table here is any -data structure with one or more entries and each entry can be represented as a set of -key fields and data fields. -Actions in P4 tables behave like unions and that has been borrowed here in GenericTable. -This can be potentially used targets to map to either TDI based backends, or even non-TDI -based backends. If using TDI, then potentially, for every new feature to be added, only -TDI backend support and remote client code will be required to make use of that function. -All other middle layers should theoretically remain unchanged. - -P4Runtime supports inserting, modifying, deleting and reading GenericTable entries with -the `GenericTableEntry` entity, which has the following fields: - -* `table_id`, which identifies the table instance; the `table_id` is determined - by the P4Info message. - -* `match`, a repeated field of `GenericFieldMatch` messages. Each element in the - repeated field is used to provide a value for the corresponding element in the - p4info. - -* `union`, which indicates which of the table's unions to execute in case of - match and with which argument values. - -* `priority`, a 32-bit integer used to order entries when the table's match key - includes an optional, ternary or range match. - -* `is_default_action`, a boolean flag which indicates whether the table entry is - the default entry for the table. See [Default entry](#sec-default-entry) - section for more information. - -* `metadata`, an arbitrary `bytes` value which is opaque to the - target. There is no requirement of where this is stored, but it must be - returned by the server along with the rest of the entry when the client - performs a read on the entry. - -The `priority` field must be set to a non-zero value if the match key includes a -ternary match (&ie; in the case of PSA if the P4Info entry for the table -indicates that one or more of its match fields has an `OPTIONAL`, `TERNARY` or -`RANGE` match -type) or to zero otherwise. A higher priority number indicates that the entry -must be given higher priority when performing a table lookup. Clients must allow -multiple entries to be added with the same priority value. If a packet can -match multiple entries with the same priority, it is not deterministic in the -data plane which entry a packet will match. If a client wishes to make the -matching behavior deterministic, it must use different priority values for any -pair of table entries that the same packet matches. - -The `match` and `priority` fields are used to uniquely identify an entry within -a table. Therefore, these fields cannot be modified after the entry has been -inserted and must be provided for `MODIFY` and `DELETE` updates. When deleting -an entry, these key fields (along with `is_default_action`) are the only fields -considered by the server. All other fields must be ignored, even if they have -nonsensical values (such as an invalid action field). In the case of a *keyless* -table (the table has an empty match key), the server must reject all attempts to -`INSERT` a match entry and return an `INVALID_ARGUMENT` error. - -The number of match entries that a table *should* support is indicated in P4Info -(`size` field of `Table` message). The guarantees provided to the P4Runtime -client are the same as the ones described in the P4~16~ specification for the -`size` property [@P4TableProperties]. In particular, some implementations may -not be able to always accommodate an arbitrary set of entries up to the -requested size, and other implementations may provide the P4Runtime client with -more entries than requested. The P4Runtime server must return -`RESOURCE_EXHAUSTED` when a table entry cannot be inserted because of a size -limitation. It is recommended that, for the sake of portability, P4Runtime -clients do not try to insert additional entries once the size indicated in -P4Info has been reached. +## `GenericTableEntry` +See section [GenericTableEntry p4runtime](#sec-p4runtime-generic-table-entry) for more info # Error Reporting Messages { #sec-error-reporting-messages} @@ -6405,6 +6279,155 @@ field [@ProtoAny]. At the moment, there is not any mechanism to extend the `p4.v1.TableEntry` message based on the value of architecture-specific table properties, but we may include on in future versions of the API. +# GenericTable { #sec-generic-table} + +## GenericTable p4info { #sec-p4info-generic-table} + +`GenericTable` messages are used to map non-PSA P4-externs or non-P4 target- +specific "fixed" features to their implementation in a generic way. The same can be achieved +via `Extern`, but GenericTable provides a structured way in which every feature is +represented as a set of match-fields and data-fields. The data consists of unions +wihch are similar to actions. One use of GenericTable in a server backend is +with TDI [Table Driven Interface](https://github.com/p4lang/tdi), but targets +can use Generic table to map to their own specific feature implementations as +well. +It defines the following fields + +* `preamble`, a `Preamble` message with the ID, name, and alias of this + GenericTable. + +* `match_fields`, a repeated field of type `MatchField` representing the data to + be used to construct the lookup key matched in this table. For information check + the match_fields info in the [Table section](#sec-table) + +* `union_refs`, a repeated `UnionRef` field representing the set of possible + unions for this table. Functionally, it behaves same as that of ActionRefs. + Hence it has been kept as ActionRefs itself. + Please check the action_refs info in the [Table section](#sec-table) + +* `const_default_union_id`, if this table has a constant default union, this + field will carry the `uint32` identifier of that action, otherwise its value + will be 0. A default union is the data when the key is null. It is similar to + a default action for Match Tables. + Being constant means that the control plane cannot + set a different default union at runtime or change the default union's + arguments. + +* `size`, an `int64` describing the desired number of table entries that the + target should support for the table. See the "Size" subsection within the + "Table Properties" section of the P4~16~ language specification for details + [@P4TableProperties]. + +* `is_const_table`, a boolean flag indicating that the table cannot be modified + by the control plane at runtime. + +* `other_properties`, an `Any` Protobuf message [@ProtoAny] to embed + architecture-specific or target-specific table properties [@P4TableProperties] + that the target wants to convey. + +### `GenericData` { #sec-p4data-generic-data} + +`GenericData` is an addition to p4data.proto- which aims at adding support for +data types which aren't covered by P4Data. This incorporates all the data types +used as primitive data types like bytes, float, strings. It contains P + + * bitstring : Bytes type used for simple unsigned integers or bytes + * float : Floating type values + * bool : Boolean type values + * generic_struct : Used to define a structure that can contain + one or more of the other members. So one structure can contain + different members of different types in GenericData + * generic_list : Used to define a list of same types. Even though the def + is same as that of generic_struct, this only allows for a variable list + of the same type. It can also be a list of generic_structs + * string : Used to define control plane strings. The max string length is + defined by the size + * enum : String representation with which safe enums are realized + * enum_val : bytes value with which unsafe/serializable enums are defined + +### `GenericTableEntry` { #sec-generic-table-entry} +See section [GenericTableEntry p4runtime](#sec-p4runtime-generic-table-entry) for more info + +GenericTableEntry can be used to program non-PSA externs or non-P4 target-specific +"fixed" features to their implementation in a generic way. This provides an alternative +to `Extern` in a structured way and within p4runtime guidelines and semantics. +The idea has been borrowed from TDI [Table Driven Interface](https://github.com/p4lang/tdi), +that every state can be representated as a table or multiple tables. A table here is any +data structure with one or more entries and each entry can be represented as a set of +key fields and data fields. +Actions in P4 tables behave like unions and that has been borrowed here in GenericTable. +This can be potentially used targets to map to either TDI based backends, or even non-TDI +based backends. If using TDI, then potentially, for every new feature to be added, only +TDI backend support and remote client code will be required to make use of that function. +All other middle layers should theoretically remain unchanged. + +P4Runtime supports inserting, modifying, deleting and reading GenericTable entries with +the `GenericTableEntry` entity, which has the following fields: + +* `table_id`, which identifies the table instance; the `table_id` is determined + by the P4Info message. + +* `match`, a repeated field of `GenericFieldMatch` messages. Each element in the + repeated field is used to provide a value for the corresponding element in the + p4info. + +* `union`, which indicates which of the table's unions to execute in case of + match and with which argument values. + +* `priority`, a 32-bit integer used to order entries when the table's match key + includes an optional, ternary or range match. + +* `is_default_action`, a boolean flag which indicates whether the table entry is + the default entry for the table. See [Default entry](#sec-default-entry) + section for more information. + +* `metadata`, an arbitrary `bytes` value which is opaque to the + target. There is no requirement of where this is stored, but it must be + returned by the server along with the rest of the entry when the client + performs a read on the entry. + +The `priority` field must be set to a non-zero value if the match key includes a +ternary match (&ie; in the case of PSA if the P4Info entry for the table +indicates that one or more of its match fields has an `OPTIONAL`, `TERNARY` or +`RANGE` match +type) or to zero otherwise. A higher priority number indicates that the entry +must be given higher priority when performing a table lookup. Clients must allow +multiple entries to be added with the same priority value. If a packet can +match multiple entries with the same priority, it is not deterministic in the +data plane which entry a packet will match. If a client wishes to make the +matching behavior deterministic, it must use different priority values for any +pair of table entries that the same packet matches. + +The `match` and `priority` fields are used to uniquely identify an entry within +a table. Therefore, these fields cannot be modified after the entry has been +inserted and must be provided for `MODIFY` and `DELETE` updates. When deleting +an entry, these key fields (along with `is_default_action`) are the only fields +considered by the server. All other fields must be ignored, even if they have +nonsensical values (such as an invalid action field). In the case of a *keyless* +table (the table has an empty match key), the server must reject all attempts to +`INSERT` a match entry and return an `INVALID_ARGUMENT` error. + +The number of match entries that a table *should* support is indicated in P4Info +(`size` field of `Table` message). The guarantees provided to the P4Runtime +client are the same as the ones described in the P4~16~ specification for the +`size` property [@P4TableProperties]. In particular, some implementations may +not be able to always accommodate an arbitrary set of entries up to the +requested size, and other implementations may provide the P4Runtime client with +more entries than requested. The P4Runtime server must return +`RESOURCE_EXHAUSTED` when a table entry cannot be inserted because of a size +limitation. It is recommended that, for the sake of portability, P4Runtime +clients do not try to insert additional entries once the size indicated in +P4Info has been reached. + + + + + + + + + + # Known Limitations of Current P4Runtime Version * `FieldMatch`, action `Param`, and controller packet metadata fields only diff --git a/proto/p4/GenericTable.md b/proto/p4/GenericTable.md index e6fc1b8c..45ce101a 100644 --- a/proto/p4/GenericTable.md +++ b/proto/p4/GenericTable.md @@ -34,8 +34,8 @@ repeated fields. So the check on `len(instance_array) == len(port_array)` needs to be a runtime check. This however keeps implementation simpler and faster since we avoid further recursive nesting. -`port` is a varbytes of max size 64 bits each. The field is repeated so it -is defined as list of varbits through p4info. +`port` is a varbytes of max size 64 bits each. The field has a `repeated_type` +as well, so it is defined as list of varbits through p4info. ``` unions { @@ -47,8 +47,9 @@ unions { params { id: 1 name: "instance" - repeated: true type { + repetition_type : "list" + repetition_max_size : 10 type : "bytes" width : 32 } @@ -56,8 +57,9 @@ unions { params { id: 2 name: "port" - repeated: true type { + repetition_type : "list" + repetition_max_size : 10 type : "varbytes" max_bit_width : 64 } @@ -79,15 +81,14 @@ unions { params { id: 1 name: "replica" - repeated: true type { - type : "list" + repetition_type : "list" + type : "struct" } params { param { id: 1 name: "instance" - repeated: true type { type : "bytes" width : 32 @@ -96,7 +97,6 @@ unions { param : { id: 2 name: "port" - repeated: true type { type : "varbytes" max_bit_width : 64 diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index 1becd35f..8675ff52 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -315,16 +315,19 @@ message GenericDataTypeSpec { GenericFloatType float = 2; GenericBoolType bool = 3; GenericNamedType struct = 4; - GenericNamedType list = 5; - GenericNamedType string = 6; - GenericNamedType enum = 7; - GenericNamedType serializable_enum = 8; - GenericNamedType new_type = 9; + GenericNamedType bag = 5; + GenericNamedType list = 6; + GenericNamedType set = 7; + GenericNamedType ordered_set = 8; + GenericNamedType string = 9; + GenericNamedType enum = 10; + GenericNamedType serializable_enum = 11; + GenericNamedType new_type = 12; // P4 data type spec can help achieve parity with types being used // in P4 externs. For example, if Register is using a type in P4 // Data type spec, then it will make it easier to map here when using // GenericTables - P4DataTypeSpec p4_type = 10; + P4DataTypeSpec p4_type = 13; } } @@ -376,9 +379,51 @@ message GenericStructTypeSpec { repeated StructuredAnnotation structured_annotations = 6; } -// If a field is of type list, then repeated = true in p4info +// If a field is of type bag, then container_type is in p4info +// and value == "bag" +// unordered and duplicates_allowed +message GenericBagTypeSpec { + GenericDataTypeSpec type_spec = 1;// The container_type + repeated string annotations = 2; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + int32 min_size = 4; // 0 if not present + int32 max_size = 5; // no max size defined if not present + repeated SourceLocation annotation_locations = 6; + repeated StructuredAnnotation structured_annotations = 7; +} +// If a field is of type list, then container_type is in p4info +// and value == "list" +// ordered and duplicates allowed. +// If max_size and min_size are equal, then fixed size. message GenericListTypeSpec { - GenericDataTypeSpec type_spec = 1; + GenericDataTypeSpec type_spec = 1;// The container_type + repeated string annotations = 2; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + int32 min_size = 4; // 0 if not present + int32 max_size = 5; // no max size defined if not present + repeated SourceLocation annotation_locations = 6; + repeated StructuredAnnotation structured_annotations = 7; +} +// If a field is of type set, then container_type is in p4info +// and value == "set" +// Unordered and duplicates not allowed +message GenericSetTypeSpec { + GenericDataTypeSpec type_spec = 1;// The container_type + repeated string annotations = 2; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + int32 min_size = 4; // 0 if not present + int32 max_size = 5; // no max size defined if not present + repeated SourceLocation annotation_locations = 6; + repeated StructuredAnnotation structured_annotations = 7; +} +// If a field is of type "unordered_set", then container_type is in p4info +// value == "unordered_set" +// ordered and duplicates not allowed +message GenericUnorderedSetTypeSpec { + GenericDataTypeSpec type_spec = 1;// The container_type repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. From 6e7c5f1aa87aad70165ed9646c132d514c219d55 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 26 May 2023 09:14:57 -0700 Subject: [PATCH 11/42] * Add Table categories introduction --- docs/v1/P4Runtime-Spec.mdk | 48 +++++++++++++++++++++++++++++++------- proto/p4/GenericTable.md | 10 ++++---- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index ba10ea1c..9ec77673 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6293,6 +6293,24 @@ can use Generic table to map to their own specific feature implementations as well. It defines the following fields +* `generic_table_type_id`, a 8-bit unsigned integer which uniquely identifies the + generic_table_type in the context of the architecture. + This value is in the range of `[0x00, 0xff]`. + The ID in the preamble is created as `0x18` `generic_table_type_id` `16 bits of + genereted ID`. + Note that this value does not need + to be unique across all architectures from all organizations, since at any + given time every device managed by a P4Runtime server maps to a single P4Info + message and a single architecture. + +* `generic_table_type_name`, which specifies the fully-qualified P4 name of the + generic_table in case of P4 entities. In cases of non-P4 entities, it is a + name which uniquely identifies this entity in the entire space including P4 + objects + +* `generic_table_category_type`, please check section [GenericTable categories](#sec-generic-table-categories) for more details + + * `preamble`, a `Preamble` message with the ID, name, and alias of this GenericTable. @@ -6325,7 +6343,7 @@ It defines the following fields architecture-specific or target-specific table properties [@P4TableProperties] that the target wants to convey. -### `GenericData` { #sec-p4data-generic-data} +## `GenericData` { #sec-p4data-generic-data} `GenericData` is an addition to p4data.proto- which aims at adding support for data types which aren't covered by P4Data. This incorporates all the data types @@ -6345,7 +6363,7 @@ used as primitive data types like bytes, float, strings. It contains P * enum : String representation with which safe enums are realized * enum_val : bytes value with which unsafe/serializable enums are defined -### `GenericTableEntry` { #sec-generic-table-entry} +## `GenericTableEntry` { #sec-generic-table-entry} See section [GenericTableEntry p4runtime](#sec-p4runtime-generic-table-entry) for more info GenericTableEntry can be used to program non-PSA externs or non-P4 target-specific @@ -6419,13 +6437,25 @@ limitation. It is recommended that, for the sake of portability, P4Runtime clients do not try to insert additional entries once the size indicated in P4Info has been reached. - - - - - - - +## GenericTable Categories + +All tables fall into certain "categories" which define what APIs are +applicable on the table and the APIs. + + * Regular tables: Read, INSERT, MODIFY, DELETE work as intended. Entries in + a table can be inserted, modified and deleted. + + * Modify-only tables: Entries exists from the time of initialization. Entries + cannot be inserted but only modified. Delete resets the entry to init time. + Read works as intended. + + * Read-only tables: Entries can only be read. Write RPC doesn't work. + + * Calculation tables: Entries can only be read. However different from + Read-only in the sense that there is no defined size of the table since + the possible range of matchfields can be immense. For example, hash + calculation tables where matchfields are the field values and the union + data contains the hash value. # Known Limitations of Current P4Runtime Version diff --git a/proto/p4/GenericTable.md b/proto/p4/GenericTable.md index 45ce101a..d6318c0e 100644 --- a/proto/p4/GenericTable.md +++ b/proto/p4/GenericTable.md @@ -48,8 +48,8 @@ unions { id: 1 name: "instance" type { - repetition_type : "list" - repetition_max_size : 10 + container_type : "list" + container_max_size : 10 type : "bytes" width : 32 } @@ -58,8 +58,8 @@ unions { id: 2 name: "port" type { - repetition_type : "list" - repetition_max_size : 10 + container_type : "list" + container_max_size : 10 type : "varbytes" max_bit_width : 64 } @@ -82,7 +82,7 @@ unions { id: 1 name: "replica" type { - repetition_type : "list" + container_type : "list" type : "struct" } params { From d6e042b8352efe6ada50dfecfc40d20152634b58 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 2 Jun 2023 09:26:32 -0700 Subject: [PATCH 12/42] * Adding 3-level property details (Table, Entry, field) * Adding more text on the data types in the spec * Adding Details on Operations in the Table categories --- docs/v1/P4Runtime-Spec.mdk | 88 +++++++++++++++++++++++++++++++++++--- 1 file changed, 83 insertions(+), 5 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 9ec77673..60cede2f 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6353,15 +6353,27 @@ used as primitive data types like bytes, float, strings. It contains P * float : Floating type values * bool : Boolean type values * generic_struct : Used to define a structure that can contain - one or more of the other members. So one structure can contain - different members of different types in GenericData - * generic_list : Used to define a list of same types. Even though the def - is same as that of generic_struct, this only allows for a variable list - of the same type. It can also be a list of generic_structs + one or more of the other members as named. One structure can contain + different members of different types in GenericData. + * generic_bag : Unordered collection of members of same type. Duplicates + are allowed. + * generic_list : Used to define a list of same types. Only allows for a + collection of the same type. It can also be a list of generic_structs. + Members are ordered and duplicates are allowed. + * generic_set : Used to define a set of same types. It can also be a set + of generic_structs. Members are unordered and duplicates are not allowed. + * generic_ordered_set : Used to define an ordered set of same types. + It can also be a set of generic_structs. Members are ordered and + duplicates are not allowed. * string : Used to define control plane strings. The max string length is defined by the size * enum : String representation with which safe enums are realized * enum_val : bytes value with which unsafe/serializable enums are defined + * p4_type : This is the same type as P4DataTypeSpec. This helps in achieving + parity with P4 types if the GenericTable is being generated from a P4 extern. + There are a few overlaps like bool, enums, new_type, bitstring. If the + entity is from a P4 extern and a P4 data type exists, then the p4_type is + used. Otherwise, the GenericDataType is used ## `GenericTableEntry` { #sec-generic-table-entry} See section [GenericTableEntry p4runtime](#sec-p4runtime-generic-table-entry) for more info @@ -6444,10 +6456,33 @@ applicable on the table and the APIs. * Regular tables: Read, INSERT, MODIFY, DELETE work as intended. Entries in a table can be inserted, modified and deleted. + * `INSERT` : The union field must be set for every `INSERT` update. If + another entry with same match key exists, then `ALREADY_EXISTS` is + returned. + * `MODIFY` : Union field must be set since all data fields are under a + union. Modifies the union spec to new union or new field values if + same union. + * `DELETE` : Only Match fields must be set. `NOT_FOUND` is returned if + the entry isn't found. If no Match fields are given, then all entries + are rdeleted (wildcard delete). If the table contained init entries, they + are restored to initial state with their original union and union field + values. * Modify-only tables: Entries exists from the time of initialization. Entries cannot be inserted but only modified. Delete resets the entry to init time. Read works as intended. + * `INSERT` : Not supported. Returns `NOT_SUPPORTED` error + * `MODIFY` : Union field must be set since all data fields are under a + union. Modifies the union spec to new union or new field values if + same union. + * `DELETE` : Instead of deleting, this operation resets the entry with + default values for every field. The union field values are changed + but the union itself isn't changed. + Only Match fields must be set. `NOT_FOUND` is returned if + the entry isn't found. If no Match fields are given, then all entries + are reset (wildcard reset). If the table contained init entries, they + are restored to initial state with their original union and union field + values. * Read-only tables: Entries can only be read. Write RPC doesn't work. @@ -6457,6 +6492,49 @@ applicable on the table and the APIs. calculation tables where matchfields are the field values and the union data contains the hash value. + * Indexed tables : Entries are ordered. + + * Reset-only tables : + * `INSERT` : Not supported. Returns `NOT_SUPPORTED` error + * `MODIFY` : Not supported. Returns `NOT_SUPPORTED` error + * `DELETE` : Instead of deleting, this operation resets the entry with + default values for every field. + Only Match fields must be set. `NOT_FOUND` is returned if + the entry isn't found. If no Match fields are given, then all entries + are reset (wildcard reset). If the table contained init entries, they + are restored to initial state with their original union and union field + values. + + +## GenericTable properties + +Properties exist at 3 different levels - Table, entry and field (match or union) + +### Table properties + +Table properties are at table level. A combination of these define a certain +table category + +* Read-only +* Modify-only +* Reset-only +* Indexed +* Keyless +* Calculation + +### Entry permissions + +* Const (read-only) +* Non-const init +* Modify-only +* Reset-only + +### Field permissions + +* Read-only +* Modify-only +* Reset-only +* Mandatory # Known Limitations of Current P4Runtime Version From 53b105f65361cfe714687124eadf5299a050c7d6 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 9 Jun 2023 09:24:41 -0700 Subject: [PATCH 13/42] * Adding Read RPC details in table categories * Adding a table to show valid combinations of table properties * Adding default entry rules --- docs/v1/P4Runtime-Spec.mdk | 91 +++++++++++++++++++++++++------- proto/p4/config/v1/p4types.proto | 8 +-- 2 files changed, 75 insertions(+), 24 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 60cede2f..32da8af6 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6407,7 +6407,7 @@ the `GenericTableEntry` entity, which has the following fields: * `priority`, a 32-bit integer used to order entries when the table's match key includes an optional, ternary or range match. -* `is_default_action`, a boolean flag which indicates whether the table entry is +* `is_default_entry`, a boolean flag which indicates whether the table entry is the default entry for the table. See [Default entry](#sec-default-entry) section for more information. @@ -6459,22 +6459,36 @@ applicable on the table and the APIs. * `INSERT` : The union field must be set for every `INSERT` update. If another entry with same match key exists, then `ALREADY_EXISTS` is returned. + If `default_entry` is true, then it is treated as a MODIFY. Const + default union rules apply. Match fields and priority should not be set. * `MODIFY` : Union field must be set since all data fields are under a union. Modifies the union spec to new union or new field values if same union. + If `default_entry` is true, then the default entry is modified. Match + fields and priority should not be set. Const default union rules apply. * `DELETE` : Only Match fields must be set. `NOT_FOUND` is returned if the entry isn't found. If no Match fields are given, then all entries - are rdeleted (wildcard delete). If the table contained init entries, they + are deleted (wildcard delete). If the table contained init entries, they are restored to initial state with their original union and union field values. + If `default_entry` is true, then the default entry is reset to initial + values. Const union rules apply. + Wildcard doesn't apply to default_entry. + * `READ` : The Read RPC. All entries can be read. If no entities are + provided in request, then all entries are read, AKA wildcard read. + If `default_entry` is true, then the default entry is returned. Match + fields should not be set in this case. + Wildcard read does NOT return default entry. * Modify-only tables: Entries exists from the time of initialization. Entries cannot be inserted but only modified. Delete resets the entry to init time. Read works as intended. - * `INSERT` : Not supported. Returns `NOT_SUPPORTED` error + * `INSERT` : Not supported. Returns `NOT_SUPPORTED` error. * `MODIFY` : Union field must be set since all data fields are under a union. Modifies the union spec to new union or new field values if same union. + If `default_entry` is true, then the default entry is modified. Match + fields and priority should not be set. Const default union rules apply. * `DELETE` : Instead of deleting, this operation resets the entry with default values for every field. The union field values are changed but the union itself isn't changed. @@ -6483,16 +6497,21 @@ applicable on the table and the APIs. are reset (wildcard reset). If the table contained init entries, they are restored to initial state with their original union and union field values. + If `default_entry` is true, then the default entry is reset to initial + values. Const union rules apply. + Wildcard doesn't apply to default_entry. + * `READ` : The Read RPC. All entries can be read. If no entities are + provided in request, then all entries are read, AKA wildcard read. + If `default_entry` is true, then the default entry is returned. Match + fields should not be set in this case. + Wildcard read does NOT return default entry. * Read-only tables: Entries can only be read. Write RPC doesn't work. - - * Calculation tables: Entries can only be read. However different from - Read-only in the sense that there is no defined size of the table since - the possible range of matchfields can be immense. For example, hash - calculation tables where matchfields are the field values and the union - data contains the hash value. - - * Indexed tables : Entries are ordered. + * `READ` : The Read RPC. All entries can be read. If no entities are + provided in request, then all entries are read, AKA wildcard read. + If `default_entry` is true, then the default entry is returned. Match + fields should not be set in this case. + Wildcard read does NOT return default entry. * Reset-only tables : * `INSERT` : Not supported. Returns `NOT_SUPPORTED` error @@ -6504,6 +6523,24 @@ applicable on the table and the APIs. are reset (wildcard reset). If the table contained init entries, they are restored to initial state with their original union and union field values. + If `default_entry` is true, then the default entry is reset to initial + values. Const union rules apply. + Wildcard doesn't apply to default_entry. + * `READ` : The Read RPC. All entries can be read. If no entities are + provided in request, then all entries are read, AKA wildcard read. + If `default_entry` is true, then the default entry is returned. Match + fields should not be set in this case. + Wildcard read does NOT return default entry. + + * Calculation tables: Entries can only be read. However different from + Read-only in the sense that there is no defined size of the table since + the possible range of matchfields can be immense. For example, hash + calculation tables where matchfields are the field values and the union + data contains the hash value. There is no default_entry for such tables. + * `READ` : The Read RPC. Wildcard read doesn't exist for this table. + Match fields should always be set + + * Indexed tables : Entries are ordered. ## GenericTable properties @@ -6513,28 +6550,42 @@ Properties exist at 3 different levels - Table, entry and field (match or union) ### Table properties Table properties are at table level. A combination of these define a certain -table category +table category. By default, if absent, they are all always false + +* Read-only : No Add/Del/Mod work +* Modify-only : Table entries can only be modifed +* Reset-only : Table can only be reset. Either entire table or individual entries. +* Indexed : The entries are ordered. Handles define the indexes. +* Keyless : Only one entry, i.e., default entry exists. +* Calculation : No defined range of key values. For example, hash calculation table + for a set of field values. +* Volatile : Data plane can Add/Del/Mod entries. Example, Add-on-miss in PNA + +#### Combinations that are possible + +|Table Cat name| Read-only | Modify-only | Reset-only | Indexed | Keyless | Calculation | Volatile | +| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | +| Read-Only | True | False | False | T/F | T/F | T/F | T/F | +| Modify-Only | False | True | False | T/F | T/F | False | T/F | +| Reset-Only | False | False | True | T/F | T/F | False | T/F | +| Indexed | T/F | T/F | T/F | T/F | False | False | T/F | +| Calculation | True | False | False | False | False | True | False | -* Read-only -* Modify-only -* Reset-only -* Indexed -* Keyless -* Calculation -### Entry permissions +### Entry properties * Const (read-only) * Non-const init * Modify-only * Reset-only -### Field permissions +### Field properties * Read-only * Modify-only * Reset-only * Mandatory +* Volatile : Data plane volatile. Example counter bytes. # Known Limitations of Current P4Runtime Version diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index 8675ff52..b651f8ba 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -383,7 +383,7 @@ message GenericStructTypeSpec { // and value == "bag" // unordered and duplicates_allowed message GenericBagTypeSpec { - GenericDataTypeSpec type_spec = 1;// The container_type + GenericDataTypeSpec type_spec = 1;// The element_type repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. @@ -397,7 +397,7 @@ message GenericBagTypeSpec { // ordered and duplicates allowed. // If max_size and min_size are equal, then fixed size. message GenericListTypeSpec { - GenericDataTypeSpec type_spec = 1;// The container_type + GenericDataTypeSpec type_spec = 1;// The element_type repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. @@ -410,7 +410,7 @@ message GenericListTypeSpec { // and value == "set" // Unordered and duplicates not allowed message GenericSetTypeSpec { - GenericDataTypeSpec type_spec = 1;// The container_type + GenericDataTypeSpec type_spec = 1;// The element_type repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. @@ -423,7 +423,7 @@ message GenericSetTypeSpec { // value == "unordered_set" // ordered and duplicates not allowed message GenericUnorderedSetTypeSpec { - GenericDataTypeSpec type_spec = 1;// The container_type + GenericDataTypeSpec type_spec = 1;// The element_type repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. From b0c29d29e638fdcdfdc333947fcc6b70373d82e8 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 16 Jun 2023 09:20:26 -0700 Subject: [PATCH 14/42] Expanding combinations --- docs/v1/P4Runtime-Spec.mdk | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 32da8af6..62d2add3 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6565,9 +6565,19 @@ table category. By default, if absent, they are all always false |Table Cat name| Read-only | Modify-only | Reset-only | Indexed | Keyless | Calculation | Volatile | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| Read-Only | True | False | False | T/F | T/F | T/F | T/F | -| Modify-Only | False | True | False | T/F | T/F | False | T/F | -| Reset-Only | False | False | True | T/F | T/F | False | T/F | +| Read-Only | True | False | False | True | False | False | T/F | +| Read-Only | True | False | False | False | True | False | T/F | +| Read-Only | True | False | False | False | False | False | T/F | +| Read-Only-Cal| True | False | False | False | False | True | False | + +| Modify-Only | False | True | False | True | False | False | T/F | +| Modify-Only | False | True | False | False | True | False | T/F | +| Modify-Only | False | True | False | False | False | False | T/F | + +| Reset-Only | False | False | True | True | False | False | T/F | +| Reset-Only | False | False | True | False | True | False | T/F | +| Reset-Only | False | False | True | False | False | False | T/F | + | Indexed | T/F | T/F | T/F | T/F | False | False | T/F | | Calculation | True | False | False | False | False | True | False | From 4ab754602c0808683b46b6cf78605c588c2132fd Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 23 Jun 2023 09:05:11 -0700 Subject: [PATCH 15/42] review comments --- docs/v1/P4Runtime-Spec.mdk | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 62d2add3..feff2369 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6287,7 +6287,7 @@ properties, but we may include on in future versions of the API. specific "fixed" features to their implementation in a generic way. The same can be achieved via `Extern`, but GenericTable provides a structured way in which every feature is represented as a set of match-fields and data-fields. The data consists of unions -wihch are similar to actions. One use of GenericTable in a server backend is +which are similar to actions. One use of GenericTable in a server backend is with TDI [Table Driven Interface](https://github.com/p4lang/tdi), but targets can use Generic table to map to their own specific feature implementations as well. @@ -6297,7 +6297,7 @@ It defines the following fields generic_table_type in the context of the architecture. This value is in the range of `[0x00, 0xff]`. The ID in the preamble is created as `0x18` `generic_table_type_id` `16 bits of - genereted ID`. + generated ID`. Note that this value does not need to be unique across all architectures from all organizations, since at any given time every device managed by a P4Runtime server maps to a single P4Info @@ -6347,10 +6347,13 @@ It defines the following fields `GenericData` is an addition to p4data.proto- which aims at adding support for data types which aren't covered by P4Data. This incorporates all the data types -used as primitive data types like bytes, float, strings. It contains P +used as primitive data types like bytes, float, strings. It contains p4type as +well. P4type is to be used for any data type present in P4. If there is a +conflict, like bool, then the P4 data type should be used. * bitstring : Bytes type used for simple unsigned integers or bytes - * float : Floating type values + * float : Floating type values. Target might return a lower-precision + ceiled value even if field is non-volatile. * bool : Boolean type values * generic_struct : Used to define a structure that can contain one or more of the other members as named. One structure can contain @@ -6386,9 +6389,9 @@ that every state can be representated as a table or multiple tables. A table her data structure with one or more entries and each entry can be represented as a set of key fields and data fields. Actions in P4 tables behave like unions and that has been borrowed here in GenericTable. -This can be potentially used targets to map to either TDI based backends, or even non-TDI -based backends. If using TDI, then potentially, for every new feature to be added, only -TDI backend support and remote client code will be required to make use of that function. +This can be potentially used targets to map to either TDI based targets, or even non-TDI +based targets. If using TDI, then potentially, for every new feature to be added, only +TDI target support and remote client code will be required to make use of that function. All other middle layers should theoretically remain unchanged. P4Runtime supports inserting, modifying, deleting and reading GenericTable entries with @@ -6456,9 +6459,10 @@ applicable on the table and the APIs. * Regular tables: Read, INSERT, MODIFY, DELETE work as intended. Entries in a table can be inserted, modified and deleted. - * `INSERT` : The union field must be set for every `INSERT` update. If - another entry with same match key exists, then `ALREADY_EXISTS` is - returned. + * `INSERT` : If another entry with same match key exists, then + `ALREADY_EXISTS` is returned. If no union has been defined, then the + union from the default entry of the table is used. Some tables might + not have a default entry, then the union is required to be set. If `default_entry` is true, then it is treated as a MODIFY. Const default union rules apply. Match fields and priority should not be set. * `MODIFY` : Union field must be set since all data fields are under a @@ -6506,7 +6510,8 @@ applicable on the table and the APIs. fields should not be set in this case. Wildcard read does NOT return default entry. - * Read-only tables: Entries can only be read. Write RPC doesn't work. + * Read-only tables: Entries can only be read. Write RPC doesn't work and + `NOT_SUPPORTED` is returned. * `READ` : The Read RPC. All entries can be read. If no entities are provided in request, then all entries are read, AKA wildcard read. If `default_entry` is true, then the default entry is returned. Match @@ -6537,8 +6542,10 @@ applicable on the table and the APIs. the possible range of matchfields can be immense. For example, hash calculation tables where matchfields are the field values and the union data contains the hash value. There is no default_entry for such tables. + Write RPC returns `NOT_SUPPORTED`. * `READ` : The Read RPC. Wildcard read doesn't exist for this table. - Match fields should always be set + `NOT_SUPPORTED` is returned if wildcard read is attempted. + If match fields aren't set, then default values for the fields are used. * Indexed tables : Entries are ordered. @@ -6594,9 +6601,11 @@ table category. By default, if absent, they are all always false * Read-only * Modify-only * Reset-only -* Mandatory +* Mandatory : Whether user is required to provide value + during `INSERT`. Can be skipped on `MODIFY`. * Volatile : Data plane volatile. Example counter bytes. + # Known Limitations of Current P4Runtime Version * `FieldMatch`, action `Param`, and controller packet metadata fields only From 88a0dd185d6c9153b8985f0db519a3730ea4e82a Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 29 Jun 2023 14:06:11 -0700 Subject: [PATCH 16/42] * Explain more on indexed tables. How are duplicates handled * Add regular tables in the truth table * Calculation table can be volatile * Add column to lay out some examples for the table categories * Mention that the entry properties do not go in p4info * Flow chart to show INSERT decision flow. Added PNG file * Add in float more verbiage regarding volatile * Renamed generic_set to generic_unordered_set * Removed bag and ordered_set * Add p4type for string with min/max size --- docs/v1/P4Runtime-Spec.mdk | 71 ++++++++++++------ docs/v1/assets/generic-tables-insert-flow.png | Bin 0 -> 246755 bytes proto/p4/config/v1/p4types.proto | 57 +++++--------- 3 files changed, 67 insertions(+), 61 deletions(-) create mode 100644 docs/v1/assets/generic-tables-insert-flow.png diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index feff2369..b7cf93c5 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6353,21 +6353,18 @@ conflict, like bool, then the P4 data type should be used. * bitstring : Bytes type used for simple unsigned integers or bytes * float : Floating type values. Target might return a lower-precision - ceiled value even if field is non-volatile. + ceiled value even if field is non-volatile. Target might choose to show a + field as volatile if it allows user to insert a certain value but does its + own modifications to the value when writing to hardware. * bool : Boolean type values * generic_struct : Used to define a structure that can contain one or more of the other members as named. One structure can contain different members of different types in GenericData. - * generic_bag : Unordered collection of members of same type. Duplicates - are allowed. * generic_list : Used to define a list of same types. Only allows for a collection of the same type. It can also be a list of generic_structs. Members are ordered and duplicates are allowed. - * generic_set : Used to define a set of same types. It can also be a set + * generic_unordered_set : Used to define a set of same types. It can also be a set of generic_structs. Members are unordered and duplicates are not allowed. - * generic_ordered_set : Used to define an ordered set of same types. - It can also be a set of generic_structs. Members are ordered and - duplicates are not allowed. * string : Used to define control plane strings. The max string length is defined by the size * enum : String representation with which safe enums are realized @@ -6465,6 +6462,15 @@ applicable on the table and the APIs. not have a default entry, then the union is required to be set. If `default_entry` is true, then it is treated as a MODIFY. Const default union rules apply. Match fields and priority should not be set. + +~ Figure { #fig-generic-tables-insert-flow; \ +caption: "Generic Tables : INSERT decision flow" } +![generic-tables-insert-flow] +~ +[generic-tables-insert-flow]: \ +build/generic-tables-insert-flow.[svg,png] \ +{ height: 7cm; page-align: forcehere } + * `MODIFY` : Union field must be set since all data fields are under a union. Modifies the union spec to new union or new field values if same union. @@ -6543,12 +6549,13 @@ applicable on the table and the APIs. calculation tables where matchfields are the field values and the union data contains the hash value. There is no default_entry for such tables. Write RPC returns `NOT_SUPPORTED`. + They can be volatile as well. It is possible that the returned values aren't + always the same. For example, the hash calc table can return different + values depending upon if the hash configuration has been changed. * `READ` : The Read RPC. Wildcard read doesn't exist for this table. `NOT_SUPPORTED` is returned if wildcard read is attempted. If match fields aren't set, then default values for the fields are used. - * Indexed tables : Entries are ordered. - ## GenericTable properties @@ -6562,7 +6569,13 @@ table category. By default, if absent, they are all always false * Read-only : No Add/Del/Mod work * Modify-only : Table entries can only be modifed * Reset-only : Table can only be reset. Either entire table or individual entries. -* Indexed : The entries are ordered. Handles define the indexes. +* Indexed : The entries are ordered. Every entry has an index associated with + it. Indexed tables can be either of modify-only, read-only, reset-only or + regular tables. If regular tables, then the target is expected to fill up gaps + when deleting and then adding entries again. Duplicate entries can exist or + not depending upon the table restrictions. Duplicate entries cannot be present + in regular tables because there is no way to differentiate between the added + entries. * Keyless : Only one entry, i.e., default entry exists. * Calculation : No defined range of key values. For example, hash calculation table for a set of field values. @@ -6570,27 +6583,37 @@ table category. By default, if absent, they are all always false #### Combinations that are possible -|Table Cat name| Read-only | Modify-only | Reset-only | Indexed | Keyless | Calculation | Volatile | -| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| Read-Only | True | False | False | True | False | False | T/F | -| Read-Only | True | False | False | False | True | False | T/F | -| Read-Only | True | False | False | False | False | False | T/F | -| Read-Only-Cal| True | False | False | False | False | True | False | +|Table Cat name | Read-only | Modify-only | Reset-only | Indexed | Keyless | Calculation | Volatile | Example | +| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | +| Regular | False | False | False | False | False | False | T/F | MatchActionTable | +| Regular-In | False | False | False | True | False | False | T/F | MatchActionTable with indexes | -| Modify-Only | False | True | False | True | False | False | T/F | -| Modify-Only | False | True | False | False | True | False | T/F | -| Modify-Only | False | True | False | False | False | False | T/F | +| Read-Only | True | False | False | False | False | False | T/F | Port ID to name map | +| Read-Only-Kl | True | False | False | False | True | False | T/F | Target Efuse information table | +| Read-Only-In | True | False | False | True | False | False | T/F | Virtual port ID to name map | +| Read-Only-Cal | True | False | False | False | False | True | T/F | Hash calc table for field values | -| Reset-Only | False | False | True | True | False | False | T/F | -| Reset-Only | False | False | True | False | True | False | T/F | -| Reset-Only | False | False | True | False | False | False | T/F | +| Modify-Only | False | True | False | False | False | False | T/F | | +| Modify-Only-Kl| False | True | False | False | True | False | T/F | Target configuration table | +| Modify-Only-In| False | True | False | True | False | False | T/F | Counter table | + +| Reset-Only | False | False | True | False | False | False | T/F | Port stats | +| Reset-Only-Kl | False | False | True | False | True | False | T/F | Target stats | +| Reset-Only-In | False | False | True | True | False | False | T/F | Virtual port stats | -| Indexed | T/F | T/F | T/F | T/F | False | False | T/F | -| Calculation | True | False | False | False | False | True | False | +Where, +Kl - Keyless +In - Indexed +Cal - Calculation +In the above examples, Virtual ports have been considered to be an example where they are indexed but ports aren't. ### Entry properties +These properties do not go as part of p4info since these are entry-specific and +not table specific. They go in as part of the entries fiel generated by the +compiler. + * Const (read-only) * Non-const init * Modify-only diff --git a/docs/v1/assets/generic-tables-insert-flow.png b/docs/v1/assets/generic-tables-insert-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..25d629a359487bc7d2392bbe81870bd61c8501ec GIT binary patch literal 246755 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

iG_Q96xqNu<;&b-B_tO4}L)QGVc1tY`l1YQv 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 RAJAgd_8;Ass%m=q{{YtDNW}mE diff --git a/docs/v1/assets/generic-tables-insert-flow.svg b/docs/v1/assets/generic-tables-insert-flow.svg new file mode 100644 index 00000000..144c97bc --- /dev/null +++ b/docs/v1/assets/generic-tables-insert-flow.svg @@ -0,0 +1,4 @@ + + + +
Does entry specify union ID?
Does entry spec...

Does table have Default entry?

Does table have...

Process every data field that has been specified

Process every dat...

Use union from default entry

Use union from de...

Error

Error

INSERT

INSERT

Is data field read-only, modify-only or reset-only?

Is data field r...

Specified data fields left?

Specified data...

Process unspecified regular data fields

Process unspecifi...

Is it mandatory?

Is it mandatory...

Process field

Process field

Process field and use default value

Process field and...

Unspecified data fields left?

Unspecified dat...

Finish

Finish

yes

yes

no

no

no

no

yes

yes

yes

yes

yes

yes

No

No

Yes

Yes

Yes

Yes

no

no

no

no

no

no
Text is not SVG - cannot display
\ No newline at end of file diff --git a/proto/p4/GenericTable.md b/proto/p4/GenericTable.md index c14cb4af..6513f040 100644 --- a/proto/p4/GenericTable.md +++ b/proto/p4/GenericTable.md @@ -8,7 +8,6 @@ defining the data fields has been presented. Only 1 of them is required. generic_tables { generic_table_type_id : 145 generic_table_type_name : "MulticastGroup" - generic_table_category : "Regular-In" generic_table_properties : { read-only : False } diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index 283b72c8..03a3d5b5 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -485,20 +485,17 @@ message Union { message GenericTable { uint32 generic_table_type_id = 1; string generic_table_type_name = 2; - string generic_table_category = 3; - repeated string generic_table_properties = 4 - repeated GenericTableInstance instances = 5; + repeated string generic_table_properties = 3 + repeated GenericTableInstance instances = 4; } message GenericTableInstance { Preamble preamble = 1; - repeated GenericMatchField match_fields = 2; + repeated GenericMatchField generic_match_fields = 2; repeated UnionRef union_refs = 3; // 0 (default value) means that the table does not have a const default action uint32 const_default_union_id= 4; int64 size = 5; // max number of entries in table - // Const table, cannot be modified at runtime - bool is_const_table = 6; // architecture-specific table properties which are not part of the core P4 // language or of the PSA architecture. google.protobuf.Any other_properties = 100; From 1131a7550046077dc7e0777fd428977110ae019e Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 21 Jul 2023 09:49:25 -0700 Subject: [PATCH 21/42] Adding space for dummy commit --- docs/v1/P4Runtime-Spec.mdk | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 14412ae4..0c7fa48d 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6568,6 +6568,7 @@ build/generic-tables-insert-flow.[svg,png] \ If match fields aren't set, then default values for the fields are used. + ## GenericTable properties Properties exist at 3 different levels - Table, entry and field (match or union) From eef4daf28169faa3476a2e89ddfd8fb528be215b Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 3 Aug 2023 13:58:15 -0700 Subject: [PATCH 22/42] Correcting typo --- proto/p4/config/v1/p4info.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index 03a3d5b5..23e59d7c 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -485,7 +485,7 @@ message Union { message GenericTable { uint32 generic_table_type_id = 1; string generic_table_type_name = 2; - repeated string generic_table_properties = 3 + repeated string generic_table_properties = 3; repeated GenericTableInstance instances = 4; } From 0e2fb58683b39ac361fe544336b4553ae2d352b0 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 4 Aug 2023 13:37:16 -0700 Subject: [PATCH 23/42] Adding dev branches to workflows (#443) --- .github/workflows/ci-build-proto.yml | 8 ++++++-- .github/workflows/codegen.yml | 2 ++ .github/workflows/spec.yml | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build-proto.yml b/.github/workflows/ci-build-proto.yml index 37786295..519be7dd 100644 --- a/.github/workflows/ci-build-proto.yml +++ b/.github/workflows/ci-build-proto.yml @@ -2,9 +2,13 @@ name: "build protobufs" on: push: - branches: [ main ] + branches: + - main + - '*-dev' pull_request: - branches: [ main ] + branches: + - main + - '*-dev' schedule: - cron: "0 0 * * *" diff --git a/.github/workflows/codegen.yml b/.github/workflows/codegen.yml index 5d591195..8f612ab3 100644 --- a/.github/workflows/codegen.yml +++ b/.github/workflows/codegen.yml @@ -4,9 +4,11 @@ on: push: branches: - main + - "*-dev" pull_request: branches: - main + - "*-dev" jobs: check-codegen: diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml index 9772ad3a..cc1983ae 100644 --- a/.github/workflows/spec.yml +++ b/.github/workflows/spec.yml @@ -4,9 +4,11 @@ on: push: branches: - main + - '*-dev' pull_request: branches: - main + - '*-dev' jobs: madoko-lint: From e9e996e6229b35d05d571c7ec11285f2ac340fc9 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Tue, 8 Aug 2023 16:30:03 -0700 Subject: [PATCH 24/42] Correcting linter errors --- docs/v1/P4Runtime-Spec.mdk | 160 ++++++++++++++++++++----------------- 1 file changed, 87 insertions(+), 73 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 1ee593f9..5c49a55d 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -2951,8 +2951,9 @@ tables { ~ End Prototext ### GenericData -See section [GenericData p4types](#sec-p4data-generic-data) for more info on the info type. -See section [GenericData p4data](#sec-p4types-generic-data) for more info on the runtime type. +See section [GenericData p4types](#sec-p4data-generic-data) for more info on the +info type. See section [GenericData p4data](#sec-p4types-generic-data) for more +info on the runtime type. # P4 Entity Messages { #sec-p4-entity-msgs} @@ -4809,7 +4810,8 @@ section on [Extending P4Runtime for non-PSA Architectures](#sec-extending-p4runtime) for more information. ## `GenericTableEntry` -See section [GenericTableEntry p4runtime](#sec-generic-table-entry) for more info +See section [GenericTableEntry p4runtime](#sec-generic-table-entry) for more +info # Error Reporting Messages { #sec-error-reporting-messages} @@ -6319,18 +6321,18 @@ properties, but we may include on in future versions of the API. ## GenericTable p4info { #sec-p4info-generic-table} `GenericTable` messages are used to map non-PSA P4-externs or non-P4 target- -specific "fixed" features to their implementation in a generic way. The same can be achieved -via `Extern`, but GenericTable provides a structured way in which every feature is -represented as a set of match-fields and data-fields. The data consists of unions -which are similar to actions. One use of GenericTable in a server backend is -with TDI [Table Driven Interface](https://github.com/p4lang/tdi), but targets -can use Generic table to map to their own specific feature implementations as -well. -It defines the following fields +specific "fixed" features to their implementation in a generic way. The same can +be achieved via `Extern`, but GenericTable provides a structured way in which +every feature is represented as a set of match-fields and data-fields. The data +consists of unions which are similar to actions. One use of GenericTable in a +server backend is with TDI [Table Driven +Interface](https://github.com/p4lang/tdi), but targets can use Generic table to +map to their own specific feature implementations as well. It defines the +following fields * `generic_table_type_id`, an 8-bit unsigned integer which uniquely identifies the generic_table_type in the context of the architecture. - This value is in the range of `[0x00, 0xff]`. + This value is in the range of `[0x00, 0xff]`. The ID in the preamble is created as `0x18 + generic_table_type_id + 16 bits of generated ID by compiler`. The `generic_table_type` depicts a new table "type" which would have similar properties. The organization of the table @@ -6360,13 +6362,13 @@ It defines the following fields a generic-table-type. All tables of one type are grouped under this. GenericTableInstance -* `preamble`, a `Preamble` message with the ID, name, and alias of this +* `preamble`, a `Preamble` message with the ID, name, and alias of this GenericTable. -* `generic_match_fields`, a repeated field of type `GenericMatchField` representing - the data to be used to construct the lookup key matched in this table. For - information check the generic_match_fields info in the [Generic Table section] - (#sec-generic-table-entry) +* `generic_match_fields`, a repeated field of type `GenericMatchField` + representing the data to be used to construct the lookup key matched in this + table. For information check the generic_match_fields info in the [Generic + Table section](#sec-generic-table-entry) * `union_refs`, a repeated `UnionRef` field representing the set of possible unions for this table. Functionally, it behaves same as that of ActionRefs. @@ -6410,35 +6412,37 @@ conflict, like bool, then the P4 data type should be used. * generic_list : Used to define a list of same types. Only allows for a collection of the same type. It can also be a list of generic_structs. Members are ordered and duplicates are allowed. - * generic_unordered_set : Used to define a set of same types. It can also be a set - of generic_structs. Members are unordered and duplicates are not allowed. + * generic_unordered_set : Used to define a set of same types. It can also be + a set of generic_structs. Members are unordered and duplicates are not + allowed. * string : Used to define control plane strings. The max string length is defined by the size * enum : String representation with which safe enums are realized * enum_val : bytes value with which unsafe/serializable enums are defined * p4_type : This is the same type as P4DataTypeSpec. This helps in achieving - parity with P4 types if the GenericTable is being generated from a P4 extern. - There are a few overlaps like bool, enums, new_type, bitstring. If the - entity is from a P4 extern and a P4 data type exists, then the p4_type is - used. Otherwise, the GenericDataType is used + parity with P4 types if the GenericTable is being generated from a P4 + extern. There are a few overlaps like bool, enums, new_type, bitstring. + If the entity is from a P4 extern and a P4 data type exists, then the + p4_type is used. Otherwise, the GenericDataType is used ## `GenericTableEntry` { #sec-generic-table-entry} -GenericTableEntry can be used to program non-PSA externs or non-P4 target-specific -"fixed" features to their implementation in a generic way. This provides an alternative -to `Extern` in a structured way and within p4runtime guidelines and semantics. -The idea has been borrowed from TDI [Table Driven Interface](https://github.com/p4lang/tdi), -that every state can be representated as a table or multiple tables. A table here is any -data structure with one or more entries and each entry can be represented as a set of -key fields and data fields. -Actions in P4 tables behave like unions and that has been borrowed here in GenericTable. -This can be potentially used targets to map to either TDI based targets, or even non-TDI -based targets. If using TDI, then potentially, for every new feature to be added, only -TDI target support and remote client code will be required to make use of that function. -All other middle layers should theoretically remain unchanged. - -P4Runtime supports inserting, modifying, deleting and reading GenericTable entries with -the `GenericTableEntry` entity, which has the following fields: +GenericTableEntry can be used to program non-PSA externs or non-P4 +target-specific "fixed" features to their implementation in a generic way. This +provides an alternative to `Extern` in a structured way and within p4runtime +guidelines and semantics. The idea has been borrowed from TDI [Table Driven +Interface](https://github.com/p4lang/tdi), that every state can be representated +as a table or multiple tables. A table here is any data structure with one or +more entries and each entry can be represented as a set of key fields and data +fields. Actions in P4 tables behave like unions and that has been borrowed here +in GenericTable. This can be potentially used targets to map to either TDI +based targets, or even non-TDI based targets. If using TDI, then potentially, +for every new feature to be added, only TDI target support and remote client +code will be required to make use of that function. All other middle layers +should theoretically remain unchanged. + +P4Runtime supports inserting, modifying, deleting and reading GenericTable +entries with the `GenericTableEntry` entity, which has the following fields: * `table_id`, which identifies the table instance; the `table_id` is determined by the P4Info message. @@ -6465,14 +6469,13 @@ the `GenericTableEntry` entity, which has the following fields: The `priority` field must be set to a non-zero value if the match key includes a ternary match (&ie; in the case of PSA if the P4Info entry for the table indicates that one or more of its match fields has an `OPTIONAL`, `TERNARY` or -`RANGE` match -type) or to zero otherwise. A higher priority number indicates that the entry -must be given higher priority when performing a table lookup. Clients must allow -multiple entries to be added with the same priority value. If a packet can -match multiple entries with the same priority, it is not deterministic in the -data plane which entry a packet will match. If a client wishes to make the -matching behavior deterministic, it must use different priority values for any -pair of table entries that the same packet matches. +`RANGE` match type) or to zero otherwise. A higher priority number indicates +that the entry must be given higher priority when performing a table lookup. +Clients must allow multiple entries to be added with the same priority value. +If a packet can match multiple entries with the same priority, it is not +deterministic in the data plane which entry a packet will match. If a client +wishes to make the matching behavior deterministic, it must use different +priority values for any pair of table entries that the same packet matches. The `match` and `priority` fields are used to uniquely identify an entry within a table. Therefore, these fields cannot be modified after the entry has been @@ -6561,7 +6564,7 @@ build/generic-tables-insert-flow.[svg,png] \ If `default_entry` is true, then the default entry is returned. Match fields should not be set in this case. Wildcard read does NOT return default entry. - + * Read-only tables: Entries can only be read. Write RPC doesn't work and `NOT_SUPPORTED` is returned. * `READ` : The Read RPC. All entries can be read. If no entities are @@ -6588,7 +6591,7 @@ build/generic-tables-insert-flow.[svg,png] \ If `default_entry` is true, then the default entry is returned. Match fields should not be set in this case. Wildcard read does NOT return default entry. - + * Calculation tables: Entries can only be read. However different from Read-only in the sense that there is no defined size of the table since the possible range of matchfields can be immense. For example, hash @@ -6613,47 +6616,58 @@ Properties exist at 3 different levels - Table, entry and field (match or union) Table properties are at table level. A combination of these define a certain table category. By default, if absent, they are all always false -* Read-only : No Add/Del/Mod work -* Modify-only : Table entries can only be modifed -* Reset-only : Table can only be reset. Either entire table or individual entries. -* Indexed : The entries are ordered. Every entry has an index associated with +* Read-only : No Add/Del/Mod work Modify-only : Table entries can only be +* modifed Reset-only : Table can only be reset. Either entire table or +* individual entries. Indexed : The entries are ordered. Every entry has an +* index associated with it. Indexed tables can be either of modify-only, read-only, reset-only or regular tables. If regular tables, then the target is expected to fill up gaps when deleting and then adding entries again. Duplicate entries can exist or not depending upon the table restrictions. Duplicate entries cannot be present in regular tables because there is no way to differentiate between the added entries. -* Keyless : Only one entry, i.e., default entry exists. -* Calculation : No defined range of key values. For example, hash calculation table - for a set of field values. +* Keyless : Only one entry, &i.e; default entry exists. Calculation : No +* defined range of key values. For example, hash calculation + table for a set of field values. * Volatile : Data plane can Add/Del/Mod entries. Example, Add-on-miss in PNA #### Combinations that are possible -|Table Cat name | Read-only | Modify-only | Reset-only | Indexed | Keyless | Calculation | Volatile | Example | -| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| Regular | False | False | False | False | False | False | T/F | MatchActionTable | -| Regular-In | False | False | False | True | False | False | T/F | MatchActionTable with indexes | - -| Read-Only | True | False | False | False | False | False | T/F | Port ID to name map | -| Read-Only-Kl | True | False | False | False | True | False | T/F | Target Efuse information table | -| Read-Only-In | True | False | False | True | False | False | T/F | Virtual port ID to name map | -| Read-Only-Cal | True | False | False | False | False | True | T/F | Hash calc table for field values | - -| Modify-Only | False | True | False | False | False | False | T/F | | -| Modify-Only-Kl| False | True | False | False | True | False | T/F | Target configuration table | -| Modify-Only-In| False | True | False | True | False | False | T/F | Counter table | - -| Reset-Only | False | False | True | False | False | False | T/F | Port stats | -| Reset-Only-Kl | False | False | True | False | True | False | T/F | Target stats | -| Reset-Only-In | False | False | True | True | False | False | T/F | Virtual port stats | +|Table Cat name | Read-only | Modify-only | Reset-only | Indexed | Keyless | +Calculation | Volatile | Example | | ---- | ---- | ---- | +---- | ---- | ---- | ---- | ---- | ---- | | Regular +| False | False | False | False | False | False | T/F +| MatchActionTable | | Regular-In | False | False | +False | True | False | False | T/F | MatchActionTable with +indexes | + +| Read-Only | True | False | False | False | False | +False | T/F | Port ID to name map | | Read-Only-Kl | +True | False | False | False | True | False | T/F +| Target Efuse information table | | Read-Only-In | True | False | +False | True | False | False | T/F | Virtual port ID to +name map | | Read-Only-Cal | True | False | False | False +| False | True | T/F | Hash calc table for field values | + +| Modify-Only | False | True | False | False | False | +False | T/F | | | Modify-Only-Kl| +False | True | False | False | True | False | T/F +| Target configuration table | | Modify-Only-In| False | True | +False | True | False | False | T/F | Counter table +| | Reset-Only | False | False | True | False | False | +False | T/F | Port stats | | Reset-Only-Kl | +False | False | True | False | True | False | T/F +| Target stats | | Reset-Only-In | False | False | +True | True | False | False | T/F | Virtual port stats +| Where, Kl - Keyless In - Indexed Cal - Calculation -In the above examples, Virtual ports have been considered to be an example where they are indexed but ports aren't. +In the above examples, Virtual ports have been considered to be an example +where they are indexed but ports aren't. ### Entry properties From 3a5f4e45c26d6af68b4d6181050ec4822255bba6 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Tue, 8 Aug 2023 16:47:36 -0700 Subject: [PATCH 25/42] Generating go and py files --- go/p4/config/v1/p4info.pb.go | 2094 ++++++++++++++++++------- go/p4/config/v1/p4types.pb.go | 2606 ++++++++++++++++++++++++++++++-- go/p4/v1/p4data.pb.go | 455 +++++- go/p4/v1/p4runtime.pb.go | 2222 ++++++++++++++++++--------- py/p4/config/v1/p4info_pb2.py | 769 +++++++++- py/p4/config/v1/p4types_pb2.py | 1630 +++++++++++++++++++- py/p4/v1/p4data_pb2.py | 262 +++- py/p4/v1/p4runtime_pb2.py | 778 ++++++++-- 8 files changed, 9291 insertions(+), 1525 deletions(-) diff --git a/go/p4/config/v1/p4info.pb.go b/go/p4/config/v1/p4info.pb.go index e8aedad1..dc0c1223 100644 --- a/go/p4/config/v1/p4info.pb.go +++ b/go/p4/config/v1/p4info.pb.go @@ -62,6 +62,7 @@ const ( P4Ids_DIRECT_METER P4Ids_Prefix = 21 P4Ids_REGISTER P4Ids_Prefix = 22 P4Ids_DIGEST P4Ids_Prefix = 23 + P4Ids_GENERIC_TABLE P4Ids_Prefix = 24 // externs for other architectures (vendor extensions) P4Ids_OTHER_EXTERNS_START P4Ids_Prefix = 128 // max value for an unsigned 8-bit byte @@ -84,6 +85,7 @@ var ( 21: "DIRECT_METER", 22: "REGISTER", 23: "DIGEST", + 24: "GENERIC_TABLE", 128: "OTHER_EXTERNS_START", 255: "MAX", } @@ -101,6 +103,7 @@ var ( "DIRECT_METER": 21, "REGISTER": 22, "DIGEST": 23, + "GENERIC_TABLE": 24, "OTHER_EXTERNS_START": 128, "MAX": 255, } @@ -133,6 +136,56 @@ func (P4Ids_Prefix) EnumDescriptor() ([]byte, []int) { return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{3, 0} } +// The ID space is for Generic tables. In the Preamble ID, the MSB will be +// 0x18 but the next MSB is reserved for this enum. This shortens the ID +// space for tables in each type but it is still 64k (16 bits) for each table +type GenericTableType_Prefix int32 + +const ( + GenericTableType_GENERIC_TABLES_START GenericTableType_Prefix = 0 + // max value for an unsigned 8-bit byte + GenericTableType_MAX GenericTableType_Prefix = 255 +) + +// Enum value maps for GenericTableType_Prefix. +var ( + GenericTableType_Prefix_name = map[int32]string{ + 0: "GENERIC_TABLES_START", + 255: "MAX", + } + GenericTableType_Prefix_value = map[string]int32{ + "GENERIC_TABLES_START": 0, + "MAX": 255, + } +) + +func (x GenericTableType_Prefix) Enum() *GenericTableType_Prefix { + p := new(GenericTableType_Prefix) + *p = x + return p +} + +func (x GenericTableType_Prefix) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GenericTableType_Prefix) Descriptor() protoreflect.EnumDescriptor { + return file_p4_config_v1_p4info_proto_enumTypes[1].Descriptor() +} + +func (GenericTableType_Prefix) Type() protoreflect.EnumType { + return &file_p4_config_v1_p4info_proto_enumTypes[1] +} + +func (x GenericTableType_Prefix) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GenericTableType_Prefix.Descriptor instead. +func (GenericTableType_Prefix) EnumDescriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{4, 0} +} + type MatchField_MatchType int32 const ( @@ -175,11 +228,11 @@ func (x MatchField_MatchType) String() string { } func (MatchField_MatchType) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[1].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[2].Descriptor() } func (MatchField_MatchType) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[1] + return &file_p4_config_v1_p4info_proto_enumTypes[2] } func (x MatchField_MatchType) Number() protoreflect.EnumNumber { @@ -188,7 +241,7 @@ func (x MatchField_MatchType) Number() protoreflect.EnumNumber { // Deprecated: Use MatchField_MatchType.Descriptor instead. func (MatchField_MatchType) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{7, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{8, 0} } // this enum can be extended in the future with other behaviors, such as @@ -223,11 +276,11 @@ func (x Table_IdleTimeoutBehavior) String() string { } func (Table_IdleTimeoutBehavior) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[2].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[3].Descriptor() } func (Table_IdleTimeoutBehavior) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[2] + return &file_p4_config_v1_p4info_proto_enumTypes[3] } func (x Table_IdleTimeoutBehavior) Number() protoreflect.EnumNumber { @@ -236,7 +289,7 @@ func (x Table_IdleTimeoutBehavior) Number() protoreflect.EnumNumber { // Deprecated: Use Table_IdleTimeoutBehavior.Descriptor instead. func (Table_IdleTimeoutBehavior) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{8, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{9, 0} } type ActionRef_Scope int32 @@ -272,11 +325,11 @@ func (x ActionRef_Scope) String() string { } func (ActionRef_Scope) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[3].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[4].Descriptor() } func (ActionRef_Scope) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[3] + return &file_p4_config_v1_p4info_proto_enumTypes[4] } func (x ActionRef_Scope) Number() protoreflect.EnumNumber { @@ -285,7 +338,7 @@ func (x ActionRef_Scope) Number() protoreflect.EnumNumber { // Deprecated: Use ActionRef_Scope.Descriptor instead. func (ActionRef_Scope) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{9, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{10, 0} } // Corresponds to 'type' constructor parameter for Counter / DirectCounter in @@ -326,11 +379,11 @@ func (x CounterSpec_Unit) String() string { } func (CounterSpec_Unit) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[4].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[5].Descriptor() } func (CounterSpec_Unit) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[4] + return &file_p4_config_v1_p4info_proto_enumTypes[5] } func (x CounterSpec_Unit) Number() protoreflect.EnumNumber { @@ -339,7 +392,7 @@ func (x CounterSpec_Unit) Number() protoreflect.EnumNumber { // Deprecated: Use CounterSpec_Unit.Descriptor instead. func (CounterSpec_Unit) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{13, 0} } // Corresponds to 'type' constructor parameter for Meter / DirectMeter in PSA @@ -376,11 +429,11 @@ func (x MeterSpec_Unit) String() string { } func (MeterSpec_Unit) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[5].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[6].Descriptor() } func (MeterSpec_Unit) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[5] + return &file_p4_config_v1_p4info_proto_enumTypes[6] } func (x MeterSpec_Unit) Number() protoreflect.EnumNumber { @@ -389,7 +442,114 @@ func (x MeterSpec_Unit) Number() protoreflect.EnumNumber { // Deprecated: Use MeterSpec_Unit.Descriptor instead. func (MeterSpec_Unit) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{15, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{16, 0} +} + +type GenericMatchField_MatchType int32 + +const ( + GenericMatchField_UNSPECIFIED GenericMatchField_MatchType = 0 + GenericMatchField_EXACT GenericMatchField_MatchType = 2 + GenericMatchField_LPM GenericMatchField_MatchType = 3 + GenericMatchField_TERNARY GenericMatchField_MatchType = 4 + GenericMatchField_RANGE GenericMatchField_MatchType = 5 + GenericMatchField_OPTIONAL GenericMatchField_MatchType = 6 +) + +// Enum value maps for GenericMatchField_MatchType. +var ( + GenericMatchField_MatchType_name = map[int32]string{ + 0: "UNSPECIFIED", + 2: "EXACT", + 3: "LPM", + 4: "TERNARY", + 5: "RANGE", + 6: "OPTIONAL", + } + GenericMatchField_MatchType_value = map[string]int32{ + "UNSPECIFIED": 0, + "EXACT": 2, + "LPM": 3, + "TERNARY": 4, + "RANGE": 5, + "OPTIONAL": 6, + } +) + +func (x GenericMatchField_MatchType) Enum() *GenericMatchField_MatchType { + p := new(GenericMatchField_MatchType) + *p = x + return p +} + +func (x GenericMatchField_MatchType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GenericMatchField_MatchType) Descriptor() protoreflect.EnumDescriptor { + return file_p4_config_v1_p4info_proto_enumTypes[7].Descriptor() +} + +func (GenericMatchField_MatchType) Type() protoreflect.EnumType { + return &file_p4_config_v1_p4info_proto_enumTypes[7] +} + +func (x GenericMatchField_MatchType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GenericMatchField_MatchType.Descriptor instead. +func (GenericMatchField_MatchType) EnumDescriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{23, 0} +} + +type UnionRef_Scope int32 + +const ( + UnionRef_TABLE_AND_DEFAULT UnionRef_Scope = 0 + UnionRef_TABLE_ONLY UnionRef_Scope = 1 + UnionRef_DEFAULT_ONLY UnionRef_Scope = 2 +) + +// Enum value maps for UnionRef_Scope. +var ( + UnionRef_Scope_name = map[int32]string{ + 0: "TABLE_AND_DEFAULT", + 1: "TABLE_ONLY", + 2: "DEFAULT_ONLY", + } + UnionRef_Scope_value = map[string]int32{ + "TABLE_AND_DEFAULT": 0, + "TABLE_ONLY": 1, + "DEFAULT_ONLY": 2, + } +) + +func (x UnionRef_Scope) Enum() *UnionRef_Scope { + p := new(UnionRef_Scope) + *p = x + return p +} + +func (x UnionRef_Scope) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (UnionRef_Scope) Descriptor() protoreflect.EnumDescriptor { + return file_p4_config_v1_p4info_proto_enumTypes[8].Descriptor() +} + +func (UnionRef_Scope) Type() protoreflect.EnumType { + return &file_p4_config_v1_p4info_proto_enumTypes[8] +} + +func (x UnionRef_Scope) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use UnionRef_Scope.Descriptor instead. +func (UnionRef_Scope) EnumDescriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{24, 0} } type P4Info struct { @@ -409,6 +569,8 @@ type P4Info struct { ValueSets []*ValueSet `protobuf:"bytes,10,rep,name=value_sets,json=valueSets,proto3" json:"value_sets,omitempty"` Registers []*Register `protobuf:"bytes,11,rep,name=registers,proto3" json:"registers,omitempty"` Digests []*Digest `protobuf:"bytes,12,rep,name=digests,proto3" json:"digests,omitempty"` + GenericTables []*GenericTable `protobuf:"bytes,13,rep,name=generic_tables,json=genericTables,proto3" json:"generic_tables,omitempty"` + Unions []*Union `protobuf:"bytes,14,rep,name=unions,proto3" json:"unions,omitempty"` Externs []*Extern `protobuf:"bytes,100,rep,name=externs,proto3" json:"externs,omitempty"` TypeInfo *P4TypeInfo `protobuf:"bytes,200,opt,name=type_info,json=typeInfo,proto3" json:"type_info,omitempty"` } @@ -529,6 +691,20 @@ func (x *P4Info) GetDigests() []*Digest { return nil } +func (x *P4Info) GetGenericTables() []*GenericTable { + if x != nil { + return x.GenericTables + } + return nil +} + +func (x *P4Info) GetUnions() []*Union { + if x != nil { + return x.Unions + } + return nil +} + func (x *P4Info) GetExterns() []*Extern { if x != nil { return x.Externs @@ -774,6 +950,45 @@ func (*P4Ids) Descriptor() ([]byte, []int) { return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{3} } +// A subtype of P4IDs for GenericTables +type GenericTableType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GenericTableType) Reset() { + *x = GenericTableType{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericTableType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericTableType) ProtoMessage() {} + +func (x *GenericTableType) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericTableType.ProtoReflect.Descriptor instead. +func (*GenericTableType) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{4} +} + type Preamble struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -811,7 +1026,7 @@ type Preamble struct { func (x *Preamble) Reset() { *x = Preamble{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[4] + mi := &file_p4_config_v1_p4info_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -824,7 +1039,7 @@ func (x *Preamble) String() string { func (*Preamble) ProtoMessage() {} func (x *Preamble) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[4] + mi := &file_p4_config_v1_p4info_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -837,7 +1052,7 @@ func (x *Preamble) ProtoReflect() protoreflect.Message { // Deprecated: Use Preamble.ProtoReflect.Descriptor instead. func (*Preamble) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{4} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{5} } func (x *Preamble) GetId() uint32 { @@ -905,7 +1120,7 @@ type Extern struct { func (x *Extern) Reset() { *x = Extern{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[5] + mi := &file_p4_config_v1_p4info_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -918,7 +1133,7 @@ func (x *Extern) String() string { func (*Extern) ProtoMessage() {} func (x *Extern) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[5] + mi := &file_p4_config_v1_p4info_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -931,7 +1146,7 @@ func (x *Extern) ProtoReflect() protoreflect.Message { // Deprecated: Use Extern.ProtoReflect.Descriptor instead. func (*Extern) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{5} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{6} } func (x *Extern) GetExternTypeId() uint32 { @@ -969,7 +1184,7 @@ type ExternInstance struct { func (x *ExternInstance) Reset() { *x = ExternInstance{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[6] + mi := &file_p4_config_v1_p4info_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -982,7 +1197,7 @@ func (x *ExternInstance) String() string { func (*ExternInstance) ProtoMessage() {} func (x *ExternInstance) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[6] + mi := &file_p4_config_v1_p4info_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -995,7 +1210,7 @@ func (x *ExternInstance) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternInstance.ProtoReflect.Descriptor instead. func (*ExternInstance) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{6} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{7} } func (x *ExternInstance) GetPreamble() *Preamble { @@ -1039,7 +1254,7 @@ type MatchField struct { func (x *MatchField) Reset() { *x = MatchField{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[7] + mi := &file_p4_config_v1_p4info_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1052,7 +1267,7 @@ func (x *MatchField) String() string { func (*MatchField) ProtoMessage() {} func (x *MatchField) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[7] + mi := &file_p4_config_v1_p4info_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1065,7 +1280,7 @@ func (x *MatchField) ProtoReflect() protoreflect.Message { // Deprecated: Use MatchField.ProtoReflect.Descriptor instead. func (*MatchField) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{7} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{8} } func (x *MatchField) GetId() uint32 { @@ -1199,7 +1414,7 @@ type Table struct { func (x *Table) Reset() { *x = Table{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[8] + mi := &file_p4_config_v1_p4info_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1212,7 +1427,7 @@ func (x *Table) String() string { func (*Table) ProtoMessage() {} func (x *Table) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[8] + mi := &file_p4_config_v1_p4info_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1225,7 +1440,7 @@ func (x *Table) ProtoReflect() protoreflect.Message { // Deprecated: Use Table.ProtoReflect.Descriptor instead. func (*Table) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{8} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{9} } func (x *Table) GetPreamble() *Preamble { @@ -1316,7 +1531,7 @@ type ActionRef struct { func (x *ActionRef) Reset() { *x = ActionRef{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[9] + mi := &file_p4_config_v1_p4info_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1329,7 +1544,7 @@ func (x *ActionRef) String() string { func (*ActionRef) ProtoMessage() {} func (x *ActionRef) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[9] + mi := &file_p4_config_v1_p4info_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1342,7 +1557,7 @@ func (x *ActionRef) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionRef.ProtoReflect.Descriptor instead. func (*ActionRef) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{9} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{10} } func (x *ActionRef) GetId() uint32 { @@ -1392,7 +1607,7 @@ type Action struct { func (x *Action) Reset() { *x = Action{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[10] + mi := &file_p4_config_v1_p4info_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1405,7 +1620,7 @@ func (x *Action) String() string { func (*Action) ProtoMessage() {} func (x *Action) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[10] + mi := &file_p4_config_v1_p4info_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1418,7 +1633,7 @@ func (x *Action) ProtoReflect() protoreflect.Message { // Deprecated: Use Action.ProtoReflect.Descriptor instead. func (*Action) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{10} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11} } func (x *Action) GetPreamble() *Preamble { @@ -1464,7 +1679,7 @@ type ActionProfile struct { func (x *ActionProfile) Reset() { *x = ActionProfile{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[11] + mi := &file_p4_config_v1_p4info_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1477,7 +1692,7 @@ func (x *ActionProfile) String() string { func (*ActionProfile) ProtoMessage() {} func (x *ActionProfile) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[11] + mi := &file_p4_config_v1_p4info_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1490,7 +1705,7 @@ func (x *ActionProfile) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionProfile.ProtoReflect.Descriptor instead. func (*ActionProfile) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12} } func (x *ActionProfile) GetPreamble() *Preamble { @@ -1578,7 +1793,7 @@ type CounterSpec struct { func (x *CounterSpec) Reset() { *x = CounterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[12] + mi := &file_p4_config_v1_p4info_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1591,7 +1806,7 @@ func (x *CounterSpec) String() string { func (*CounterSpec) ProtoMessage() {} func (x *CounterSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[12] + mi := &file_p4_config_v1_p4info_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1604,7 +1819,7 @@ func (x *CounterSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use CounterSpec.ProtoReflect.Descriptor instead. func (*CounterSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{13} } func (x *CounterSpec) GetUnit() CounterSpec_Unit { @@ -1630,7 +1845,7 @@ type Counter struct { func (x *Counter) Reset() { *x = Counter{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[13] + mi := &file_p4_config_v1_p4info_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1643,7 +1858,7 @@ func (x *Counter) String() string { func (*Counter) ProtoMessage() {} func (x *Counter) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[13] + mi := &file_p4_config_v1_p4info_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1656,7 +1871,7 @@ func (x *Counter) ProtoReflect() protoreflect.Message { // Deprecated: Use Counter.ProtoReflect.Descriptor instead. func (*Counter) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{13} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{14} } func (x *Counter) GetPreamble() *Preamble { @@ -1701,7 +1916,7 @@ type DirectCounter struct { func (x *DirectCounter) Reset() { *x = DirectCounter{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[14] + mi := &file_p4_config_v1_p4info_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1714,7 +1929,7 @@ func (x *DirectCounter) String() string { func (*DirectCounter) ProtoMessage() {} func (x *DirectCounter) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[14] + mi := &file_p4_config_v1_p4info_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1727,7 +1942,7 @@ func (x *DirectCounter) ProtoReflect() protoreflect.Message { // Deprecated: Use DirectCounter.ProtoReflect.Descriptor instead. func (*DirectCounter) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{14} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{15} } func (x *DirectCounter) GetPreamble() *Preamble { @@ -1762,7 +1977,7 @@ type MeterSpec struct { func (x *MeterSpec) Reset() { *x = MeterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[15] + mi := &file_p4_config_v1_p4info_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1775,7 +1990,7 @@ func (x *MeterSpec) String() string { func (*MeterSpec) ProtoMessage() {} func (x *MeterSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[15] + mi := &file_p4_config_v1_p4info_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1788,7 +2003,7 @@ func (x *MeterSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use MeterSpec.ProtoReflect.Descriptor instead. func (*MeterSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{15} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{16} } func (x *MeterSpec) GetUnit() MeterSpec_Unit { @@ -1814,7 +2029,7 @@ type Meter struct { func (x *Meter) Reset() { *x = Meter{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[16] + mi := &file_p4_config_v1_p4info_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1827,7 +2042,7 @@ func (x *Meter) String() string { func (*Meter) ProtoMessage() {} func (x *Meter) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[16] + mi := &file_p4_config_v1_p4info_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1840,7 +2055,7 @@ func (x *Meter) ProtoReflect() protoreflect.Message { // Deprecated: Use Meter.ProtoReflect.Descriptor instead. func (*Meter) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{16} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{17} } func (x *Meter) GetPreamble() *Preamble { @@ -1885,7 +2100,7 @@ type DirectMeter struct { func (x *DirectMeter) Reset() { *x = DirectMeter{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[17] + mi := &file_p4_config_v1_p4info_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1898,7 +2113,7 @@ func (x *DirectMeter) String() string { func (*DirectMeter) ProtoMessage() {} func (x *DirectMeter) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[17] + mi := &file_p4_config_v1_p4info_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1911,7 +2126,7 @@ func (x *DirectMeter) ProtoReflect() protoreflect.Message { // Deprecated: Use DirectMeter.ProtoReflect.Descriptor instead. func (*DirectMeter) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{17} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{18} } func (x *DirectMeter) GetPreamble() *Preamble { @@ -1957,7 +2172,7 @@ type ControllerPacketMetadata struct { func (x *ControllerPacketMetadata) Reset() { *x = ControllerPacketMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[18] + mi := &file_p4_config_v1_p4info_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1970,7 +2185,7 @@ func (x *ControllerPacketMetadata) String() string { func (*ControllerPacketMetadata) ProtoMessage() {} func (x *ControllerPacketMetadata) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[18] + mi := &file_p4_config_v1_p4info_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1983,7 +2198,7 @@ func (x *ControllerPacketMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ControllerPacketMetadata.ProtoReflect.Descriptor instead. func (*ControllerPacketMetadata) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{18} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{19} } func (x *ControllerPacketMetadata) GetPreamble() *Preamble { @@ -2014,7 +2229,7 @@ type ValueSet struct { func (x *ValueSet) Reset() { *x = ValueSet{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[19] + mi := &file_p4_config_v1_p4info_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2027,7 +2242,7 @@ func (x *ValueSet) String() string { func (*ValueSet) ProtoMessage() {} func (x *ValueSet) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[19] + mi := &file_p4_config_v1_p4info_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2040,7 +2255,7 @@ func (x *ValueSet) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueSet.ProtoReflect.Descriptor instead. func (*ValueSet) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{19} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{20} } func (x *ValueSet) GetPreamble() *Preamble { @@ -2079,7 +2294,7 @@ type Register struct { func (x *Register) Reset() { *x = Register{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[20] + mi := &file_p4_config_v1_p4info_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2092,7 +2307,7 @@ func (x *Register) String() string { func (*Register) ProtoMessage() {} func (x *Register) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[20] + mi := &file_p4_config_v1_p4info_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2105,7 +2320,7 @@ func (x *Register) ProtoReflect() protoreflect.Message { // Deprecated: Use Register.ProtoReflect.Descriptor instead. func (*Register) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{20} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{21} } func (x *Register) GetPreamble() *Preamble { @@ -2148,7 +2363,7 @@ type Digest struct { func (x *Digest) Reset() { *x = Digest{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[21] + mi := &file_p4_config_v1_p4info_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2161,7 +2376,7 @@ func (x *Digest) String() string { func (*Digest) ProtoMessage() {} func (x *Digest) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[21] + mi := &file_p4_config_v1_p4info_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2174,19 +2389,468 @@ func (x *Digest) ProtoReflect() protoreflect.Message { // Deprecated: Use Digest.ProtoReflect.Descriptor instead. func (*Digest) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{21} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{22} } func (x *Digest) GetPreamble() *Preamble { if x != nil { return x.Preamble } - return nil + return nil +} + +func (x *Digest) GetTypeSpec() *P4DataTypeSpec { + if x != nil { + return x.TypeSpec + } + return nil +} + +type GenericMatchField struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Repeated bool `protobuf:"varint,3,opt,name=repeated,proto3" json:"repeated,omitempty"` + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,4,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` + // Types that are assignable to Match: + // + // *GenericMatchField_MatchType_ + // *GenericMatchField_OtherMatchType + Match isGenericMatchField_Match `protobuf_oneof:"match"` + // Documentation of the match field + Doc *Documentation `protobuf:"bytes,7,opt,name=doc,proto3" json:"doc,omitempty"` + Annotations []string `protobuf:"bytes,8,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,9,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` + AnnotationLocations []*SourceLocation `protobuf:"bytes,10,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` +} + +func (x *GenericMatchField) Reset() { + *x = GenericMatchField{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericMatchField) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericMatchField) ProtoMessage() {} + +func (x *GenericMatchField) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericMatchField.ProtoReflect.Descriptor instead. +func (*GenericMatchField) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{23} +} + +func (x *GenericMatchField) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *GenericMatchField) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GenericMatchField) GetRepeated() bool { + if x != nil { + return x.Repeated + } + return false +} + +func (x *GenericMatchField) GetTypeSpec() *GenericDataTypeSpec { + if x != nil { + return x.TypeSpec + } + return nil +} + +func (m *GenericMatchField) GetMatch() isGenericMatchField_Match { + if m != nil { + return m.Match + } + return nil +} + +func (x *GenericMatchField) GetMatchType() GenericMatchField_MatchType { + if x, ok := x.GetMatch().(*GenericMatchField_MatchType_); ok { + return x.MatchType + } + return GenericMatchField_UNSPECIFIED +} + +func (x *GenericMatchField) GetOtherMatchType() string { + if x, ok := x.GetMatch().(*GenericMatchField_OtherMatchType); ok { + return x.OtherMatchType + } + return "" +} + +func (x *GenericMatchField) GetDoc() *Documentation { + if x != nil { + return x.Doc + } + return nil +} + +func (x *GenericMatchField) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericMatchField) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +func (x *GenericMatchField) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +type isGenericMatchField_Match interface { + isGenericMatchField_Match() +} + +type GenericMatchField_MatchType_ struct { + MatchType GenericMatchField_MatchType `protobuf:"varint,5,opt,name=match_type,json=matchType,proto3,enum=p4.config.v1.GenericMatchField_MatchType,oneof"` +} + +type GenericMatchField_OtherMatchType struct { + // used for architecture-specific match types which are not part of the core + // P4 language or of the PSA architecture. + OtherMatchType string `protobuf:"bytes,6,opt,name=other_match_type,json=otherMatchType,proto3,oneof"` +} + +func (*GenericMatchField_MatchType_) isGenericMatchField_Match() {} + +func (*GenericMatchField_OtherMatchType) isGenericMatchField_Match() {} + +// used to list all possible unions in a Table +type UnionRef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Scope UnionRef_Scope `protobuf:"varint,3,opt,name=scope,proto3,enum=p4.config.v1.UnionRef_Scope" json:"scope,omitempty"` + Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,5,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,4,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *UnionRef) Reset() { + *x = UnionRef{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnionRef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnionRef) ProtoMessage() {} + +func (x *UnionRef) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnionRef.ProtoReflect.Descriptor instead. +func (*UnionRef) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{24} +} + +func (x *UnionRef) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UnionRef) GetScope() UnionRef_Scope { + if x != nil { + return x.Scope + } + return UnionRef_TABLE_AND_DEFAULT +} + +func (x *UnionRef) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *UnionRef) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *UnionRef) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +type Union struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Preamble *Preamble `protobuf:"bytes,1,opt,name=preamble,proto3" json:"preamble,omitempty"` + Params []*Union_Param `protobuf:"bytes,2,rep,name=params,proto3" json:"params,omitempty"` +} + +func (x *Union) Reset() { + *x = Union{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Union) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Union) ProtoMessage() {} + +func (x *Union) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Union.ProtoReflect.Descriptor instead. +func (*Union) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{25} +} + +func (x *Union) GetPreamble() *Preamble { + if x != nil { + return x.Preamble + } + return nil +} + +func (x *Union) GetParams() []*Union_Param { + if x != nil { + return x.Params + } + return nil +} + +// All Tables of one type will be grouped in one message. +type GenericTable struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GenericTableTypeId uint32 `protobuf:"varint,1,opt,name=generic_table_type_id,json=genericTableTypeId,proto3" json:"generic_table_type_id,omitempty"` + GenericTableTypeName string `protobuf:"bytes,2,opt,name=generic_table_type_name,json=genericTableTypeName,proto3" json:"generic_table_type_name,omitempty"` + GenericTableProperties []string `protobuf:"bytes,3,rep,name=generic_table_properties,json=genericTableProperties,proto3" json:"generic_table_properties,omitempty"` + Instances []*GenericTableInstance `protobuf:"bytes,4,rep,name=instances,proto3" json:"instances,omitempty"` +} + +func (x *GenericTable) Reset() { + *x = GenericTable{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericTable) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericTable) ProtoMessage() {} + +func (x *GenericTable) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericTable.ProtoReflect.Descriptor instead. +func (*GenericTable) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{26} +} + +func (x *GenericTable) GetGenericTableTypeId() uint32 { + if x != nil { + return x.GenericTableTypeId + } + return 0 +} + +func (x *GenericTable) GetGenericTableTypeName() string { + if x != nil { + return x.GenericTableTypeName + } + return "" +} + +func (x *GenericTable) GetGenericTableProperties() []string { + if x != nil { + return x.GenericTableProperties + } + return nil +} + +func (x *GenericTable) GetInstances() []*GenericTableInstance { + if x != nil { + return x.Instances + } + return nil +} + +type GenericTableInstance struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Preamble *Preamble `protobuf:"bytes,1,opt,name=preamble,proto3" json:"preamble,omitempty"` + GenericMatchFields []*GenericMatchField `protobuf:"bytes,2,rep,name=generic_match_fields,json=genericMatchFields,proto3" json:"generic_match_fields,omitempty"` + UnionRefs []*UnionRef `protobuf:"bytes,3,rep,name=union_refs,json=unionRefs,proto3" json:"union_refs,omitempty"` + // 0 (default value) means that the table does not have a const default action + ConstDefaultUnionId uint32 `protobuf:"varint,4,opt,name=const_default_union_id,json=constDefaultUnionId,proto3" json:"const_default_union_id,omitempty"` + Size int64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` // max number of entries in table + // architecture-specific table properties which are not part of the core P4 + // language or of the PSA architecture. + OtherProperties *anypb.Any `protobuf:"bytes,100,opt,name=other_properties,json=otherProperties,proto3" json:"other_properties,omitempty"` +} + +func (x *GenericTableInstance) Reset() { + *x = GenericTableInstance{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericTableInstance) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericTableInstance) ProtoMessage() {} + +func (x *GenericTableInstance) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericTableInstance.ProtoReflect.Descriptor instead. +func (*GenericTableInstance) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{27} +} + +func (x *GenericTableInstance) GetPreamble() *Preamble { + if x != nil { + return x.Preamble + } + return nil +} + +func (x *GenericTableInstance) GetGenericMatchFields() []*GenericMatchField { + if x != nil { + return x.GenericMatchFields + } + return nil +} + +func (x *GenericTableInstance) GetUnionRefs() []*UnionRef { + if x != nil { + return x.UnionRefs + } + return nil +} + +func (x *GenericTableInstance) GetConstDefaultUnionId() uint32 { + if x != nil { + return x.ConstDefaultUnionId + } + return 0 +} + +func (x *GenericTableInstance) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 } -func (x *Digest) GetTypeSpec() *P4DataTypeSpec { +func (x *GenericTableInstance) GetOtherProperties() *anypb.Any { if x != nil { - return x.TypeSpec + return x.OtherProperties } return nil } @@ -2213,7 +2877,7 @@ type Action_Param struct { func (x *Action_Param) Reset() { *x = Action_Param{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[22] + mi := &file_p4_config_v1_p4info_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2226,7 +2890,7 @@ func (x *Action_Param) String() string { func (*Action_Param) ProtoMessage() {} func (x *Action_Param) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[22] + mi := &file_p4_config_v1_p4info_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2239,7 +2903,7 @@ func (x *Action_Param) ProtoReflect() protoreflect.Message { // Deprecated: Use Action_Param.ProtoReflect.Descriptor instead. func (*Action_Param) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{10, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11, 0} } func (x *Action_Param) GetId() uint32 { @@ -2310,7 +2974,7 @@ type ActionProfile_SumOfWeights struct { func (x *ActionProfile_SumOfWeights) Reset() { *x = ActionProfile_SumOfWeights{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[23] + mi := &file_p4_config_v1_p4info_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2323,7 +2987,7 @@ func (x *ActionProfile_SumOfWeights) String() string { func (*ActionProfile_SumOfWeights) ProtoMessage() {} func (x *ActionProfile_SumOfWeights) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[23] + mi := &file_p4_config_v1_p4info_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2336,7 +3000,7 @@ func (x *ActionProfile_SumOfWeights) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionProfile_SumOfWeights.ProtoReflect.Descriptor instead. func (*ActionProfile_SumOfWeights) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12, 0} } // indicates that `size` and `max_group_size` represent the maximum number @@ -2354,7 +3018,7 @@ type ActionProfile_SumOfMembers struct { func (x *ActionProfile_SumOfMembers) Reset() { *x = ActionProfile_SumOfMembers{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[24] + mi := &file_p4_config_v1_p4info_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2367,7 +3031,7 @@ func (x *ActionProfile_SumOfMembers) String() string { func (*ActionProfile_SumOfMembers) ProtoMessage() {} func (x *ActionProfile_SumOfMembers) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[24] + mi := &file_p4_config_v1_p4info_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2380,7 +3044,7 @@ func (x *ActionProfile_SumOfMembers) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionProfile_SumOfMembers.ProtoReflect.Descriptor instead. func (*ActionProfile_SumOfMembers) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11, 1} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12, 1} } func (x *ActionProfile_SumOfMembers) GetMaxMemberWeight() int32 { @@ -2412,7 +3076,7 @@ type ControllerPacketMetadata_Metadata struct { func (x *ControllerPacketMetadata_Metadata) Reset() { *x = ControllerPacketMetadata_Metadata{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[25] + mi := &file_p4_config_v1_p4info_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2425,7 +3089,7 @@ func (x *ControllerPacketMetadata_Metadata) String() string { func (*ControllerPacketMetadata_Metadata) ProtoMessage() {} func (x *ControllerPacketMetadata_Metadata) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[25] + mi := &file_p4_config_v1_p4info_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2438,7 +3102,7 @@ func (x *ControllerPacketMetadata_Metadata) ProtoReflect() protoreflect.Message // Deprecated: Use ControllerPacketMetadata_Metadata.ProtoReflect.Descriptor instead. func (*ControllerPacketMetadata_Metadata) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{18, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{19, 0} } func (x *ControllerPacketMetadata_Metadata) GetId() uint32 { @@ -2490,6 +3154,112 @@ func (x *ControllerPacketMetadata_Metadata) GetStructuredAnnotations() []*Struct return nil } +type Union_Param struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Repeated bool `protobuf:"varint,3,opt,name=repeated,proto3" json:"repeated,omitempty"` + Annotations []string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty"` + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,5,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` + // Documentation of the Param + Doc *Documentation `protobuf:"bytes,6,opt,name=doc,proto3" json:"doc,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,7,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,8,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` +} + +func (x *Union_Param) Reset() { + *x = Union_Param{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Union_Param) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Union_Param) ProtoMessage() {} + +func (x *Union_Param) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Union_Param.ProtoReflect.Descriptor instead. +func (*Union_Param) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{25, 0} +} + +func (x *Union_Param) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Union_Param) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Union_Param) GetRepeated() bool { + if x != nil { + return x.Repeated + } + return false +} + +func (x *Union_Param) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *Union_Param) GetTypeSpec() *GenericDataTypeSpec { + if x != nil { + return x.TypeSpec + } + return nil +} + +func (x *Union_Param) GetDoc() *Documentation { + if x != nil { + return x.Doc + } + return nil +} + +func (x *Union_Param) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +func (x *Union_Param) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + var File_p4_config_v1_p4info_proto protoreflect.FileDescriptor var file_p4_config_v1_p4info_proto_rawDesc = []byte{ @@ -2499,7 +3269,7 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x34, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xae, 0x06, 0x0a, 0x06, 0x50, 0x34, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x08, 0x70, + 0x22, 0x9e, 0x07, 0x0a, 0x06, 0x50, 0x34, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6b, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, @@ -2543,7 +3313,14 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x52, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x65, 0x78, 0x74, + 0x52, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0d, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x06, + 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, + 0x6e, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x64, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x52, 0x07, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, @@ -2580,8 +3357,8 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x87, 0x02, 0x0a, 0x05, 0x50, 0x34, 0x49, 0x64, 0x73, 0x22, - 0xfd, 0x01, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9a, 0x02, 0x0a, 0x05, 0x50, 0x34, 0x49, 0x64, 0x73, 0x22, + 0x90, 0x02, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x10, @@ -2594,327 +3371,462 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x45, 0x52, 0x10, 0x13, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x14, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x15, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x10, 0x16, 0x12, - 0x0a, 0x0a, 0x06, 0x44, 0x49, 0x47, 0x45, 0x53, 0x54, 0x10, 0x17, 0x12, 0x18, 0x0a, 0x13, 0x4f, - 0x54, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x53, 0x5f, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x10, 0x80, 0x01, 0x12, 0x08, 0x0a, 0x03, 0x4d, 0x41, 0x58, 0x10, 0xff, 0x01, 0x22, - 0xc1, 0x02, 0x0a, 0x08, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x24, - 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, - 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x0e, 0x45, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, - 0x12, 0x28, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xd3, 0x04, 0x0a, 0x0a, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x43, 0x0a, 0x0a, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, - 0x03, 0x64, 0x6f, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x36, 0x0a, 0x09, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x56, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, - 0x05, 0x45, 0x58, 0x41, 0x43, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x10, - 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x04, 0x12, 0x09, - 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x50, 0x54, - 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x06, 0x42, 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x22, 0xd9, 0x04, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, - 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x3b, - 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0b, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x11, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x5b, 0x0a, - 0x15, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x62, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x65, 0x68, - 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x13, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, - 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x22, 0x39, 0x0a, 0x13, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x54, - 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x54, 0x49, - 0x46, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x10, 0x01, 0x22, 0xe0, 0x02, 0x0a, - 0x09, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x40, 0x0a, - 0x05, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, - 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, - 0x0a, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x10, 0x0a, - 0x0c, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x22, - 0xef, 0x03, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, - 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x32, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x1a, 0xfc, 0x02, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, - 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x36, - 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x74, 0x79, - 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0xe5, 0x03, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x69, 0x74, - 0x68, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x50, 0x0a, 0x0e, 0x73, 0x75, 0x6d, 0x5f, 0x6f, 0x66, 0x5f, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x34, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x75, 0x6d, 0x4f, 0x66, 0x57, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, 0x6d, 0x4f, 0x66, 0x57, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0e, 0x73, 0x75, 0x6d, 0x5f, 0x6f, 0x66, 0x5f, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x75, 0x6d, 0x4f, 0x66, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, 0x6d, 0x4f, 0x66, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x1a, 0x0e, 0x0a, 0x0c, 0x53, 0x75, 0x6d, 0x4f, 0x66, - 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x1a, 0x55, 0x0a, 0x0c, 0x53, 0x75, 0x6d, 0x4f, 0x66, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x57, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6d, 0x61, 0x78, - 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x42, 0x19, - 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, - 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x22, 0x7c, 0x0a, 0x0b, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x32, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x39, 0x0a, 0x04, - 0x55, 0x6e, 0x69, 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x53, 0x10, 0x02, 0x12, 0x08, 0x0a, - 0x04, 0x42, 0x4f, 0x54, 0x48, 0x10, 0x03, 0x22, 0xc3, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x41, 0x0a, 0x0f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x9a, 0x01, - 0x0a, 0x0d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, + 0x0a, 0x0a, 0x06, 0x44, 0x49, 0x47, 0x45, 0x53, 0x54, 0x10, 0x17, 0x12, 0x11, 0x0a, 0x0d, 0x47, + 0x45, 0x4e, 0x45, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x18, 0x12, 0x18, + 0x0a, 0x13, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x53, 0x5f, + 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x80, 0x01, 0x12, 0x08, 0x0a, 0x03, 0x4d, 0x41, 0x58, 0x10, + 0xff, 0x01, 0x22, 0x40, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x12, 0x18, 0x0a, 0x14, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x41, 0x42, 0x4c, + 0x45, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x03, 0x4d, 0x41, + 0x58, 0x10, 0xff, 0x01, 0x22, 0xc1, 0x02, 0x0a, 0x08, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, + 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, + 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x59, 0x0a, + 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, + 0x6e, 0x0a, 0x0e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, + 0xd3, 0x04, 0x0a, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x12, 0x43, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x2e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, + 0x63, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x56, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x41, 0x43, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, + 0x03, 0x4c, 0x50, 0x4d, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x52, + 0x59, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x05, 0x12, 0x0c, + 0x0a, 0x08, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x06, 0x42, 0x07, 0x0a, 0x05, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xd9, 0x04, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, - 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x09, 0x4d, 0x65, - 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x30, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x55, - 0x6e, 0x69, 0x74, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x2f, 0x0a, 0x04, 0x55, 0x6e, 0x69, - 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a, - 0x07, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x53, 0x10, 0x02, 0x22, 0xbf, 0x01, 0x0a, 0x05, 0x4d, - 0x65, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, - 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x41, 0x0a, 0x0f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x96, 0x01, 0x0a, - 0x0b, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, - 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x26, 0x0a, - 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0xee, 0x03, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, - 0x65, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x1a, 0xd0, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x62, 0x6c, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x12, 0x38, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x52, 0x0a, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, + 0x0a, 0x13, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x5b, 0x0a, 0x15, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x27, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x13, 0x69, 0x64, 0x6c, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, + 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x74, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x39, 0x0a, 0x13, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x0e, 0x0a, + 0x0a, 0x4e, 0x4f, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, + 0x0e, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x10, + 0x01, 0x22, 0xe0, 0x02, 0x0a, 0x09, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x33, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x40, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x54, + 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, + 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, + 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4f, 0x4e, + 0x4c, 0x59, 0x10, 0x02, 0x22, 0xef, 0x03, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, + 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0xfc, 0x02, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, + 0x64, 0x6f, 0x63, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x53, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x08, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe5, 0x03, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, - 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x09, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, - 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x41, 0x0a, 0x0f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x77, - 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, + 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x69, 0x74, + 0x68, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x77, 0x69, 0x74, 0x68, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x50, 0x0a, 0x0e, 0x73, 0x75, 0x6d, 0x5f, + 0x6f, 0x66, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x75, + 0x6d, 0x4f, 0x66, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, + 0x6d, 0x4f, 0x66, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0e, 0x73, 0x75, + 0x6d, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, + 0x53, 0x75, 0x6d, 0x4f, 0x66, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0c, + 0x73, 0x75, 0x6d, 0x4f, 0x66, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x1a, 0x0e, 0x0a, 0x0c, + 0x53, 0x75, 0x6d, 0x4f, 0x66, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x1a, 0x55, 0x0a, 0x0c, + 0x53, 0x75, 0x6d, 0x4f, 0x66, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x0a, 0x11, + 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, + 0x12, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x42, 0x19, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x22, 0x7c, + 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x32, 0x0a, + 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x04, 0x75, 0x6e, 0x69, + 0x74, 0x22, 0x39, 0x0a, 0x04, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, + 0x54, 0x45, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x53, + 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x54, 0x48, 0x10, 0x03, 0x22, 0xc3, 0x01, 0x0a, + 0x07, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, + 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, + 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x04, + 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x41, 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x0d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, + 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, + 0x6e, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x30, 0x0a, 0x04, + 0x75, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x70, 0x65, 0x63, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x2f, + 0x0a, 0x04, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, 0x54, 0x45, 0x53, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x53, 0x10, 0x02, 0x22, + 0xbf, 0x01, 0x0a, 0x05, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, + 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2b, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x41, + 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x96, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x65, + 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, + 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0xee, 0x03, 0x0a, 0x18, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, + 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xd0, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, + 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x08, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, - 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x09, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, - 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x05, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x22, 0xd0, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, + 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x12, 0x39, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x12, 0x41, 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x77, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, + 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x12, 0x39, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xe9, 0x04, 0x0a, + 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, + 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, + 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, + 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x56, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x41, 0x43, 0x54, 0x10, 0x02, + 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x45, 0x52, + 0x4e, 0x41, 0x52, 0x59, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, + 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x06, 0x42, + 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xde, 0x02, 0x0a, 0x08, 0x55, 0x6e, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x2e, 0x53, 0x63, 0x6f, + 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x40, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, + 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x41, 0x42, 0x4c, 0x45, + 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x46, 0x41, 0x55, + 0x4c, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x22, 0xf5, 0x03, 0x0a, 0x05, 0x55, 0x6e, + 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, + 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x84, 0x03, 0x0a, 0x05, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, + 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0xf4, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xde, 0x02, 0x0a, 0x14, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x51, 0x0a, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x52, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x35, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x66, 0x52, 0x09, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, + 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x13, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, + 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2929,123 +3841,155 @@ func file_p4_config_v1_p4info_proto_rawDescGZIP() []byte { return file_p4_config_v1_p4info_proto_rawDescData } -var file_p4_config_v1_p4info_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_p4_config_v1_p4info_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_p4_config_v1_p4info_proto_enumTypes = make([]protoimpl.EnumInfo, 9) +var file_p4_config_v1_p4info_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_p4_config_v1_p4info_proto_goTypes = []interface{}{ (P4Ids_Prefix)(0), // 0: p4.config.v1.P4Ids.Prefix - (MatchField_MatchType)(0), // 1: p4.config.v1.MatchField.MatchType - (Table_IdleTimeoutBehavior)(0), // 2: p4.config.v1.Table.IdleTimeoutBehavior - (ActionRef_Scope)(0), // 3: p4.config.v1.ActionRef.Scope - (CounterSpec_Unit)(0), // 4: p4.config.v1.CounterSpec.Unit - (MeterSpec_Unit)(0), // 5: p4.config.v1.MeterSpec.Unit - (*P4Info)(nil), // 6: p4.config.v1.P4Info - (*Documentation)(nil), // 7: p4.config.v1.Documentation - (*PkgInfo)(nil), // 8: p4.config.v1.PkgInfo - (*P4Ids)(nil), // 9: p4.config.v1.P4Ids - (*Preamble)(nil), // 10: p4.config.v1.Preamble - (*Extern)(nil), // 11: p4.config.v1.Extern - (*ExternInstance)(nil), // 12: p4.config.v1.ExternInstance - (*MatchField)(nil), // 13: p4.config.v1.MatchField - (*Table)(nil), // 14: p4.config.v1.Table - (*ActionRef)(nil), // 15: p4.config.v1.ActionRef - (*Action)(nil), // 16: p4.config.v1.Action - (*ActionProfile)(nil), // 17: p4.config.v1.ActionProfile - (*CounterSpec)(nil), // 18: p4.config.v1.CounterSpec - (*Counter)(nil), // 19: p4.config.v1.Counter - (*DirectCounter)(nil), // 20: p4.config.v1.DirectCounter - (*MeterSpec)(nil), // 21: p4.config.v1.MeterSpec - (*Meter)(nil), // 22: p4.config.v1.Meter - (*DirectMeter)(nil), // 23: p4.config.v1.DirectMeter - (*ControllerPacketMetadata)(nil), // 24: p4.config.v1.ControllerPacketMetadata - (*ValueSet)(nil), // 25: p4.config.v1.ValueSet - (*Register)(nil), // 26: p4.config.v1.Register - (*Digest)(nil), // 27: p4.config.v1.Digest - (*Action_Param)(nil), // 28: p4.config.v1.Action.Param - (*ActionProfile_SumOfWeights)(nil), // 29: p4.config.v1.ActionProfile.SumOfWeights - (*ActionProfile_SumOfMembers)(nil), // 30: p4.config.v1.ActionProfile.SumOfMembers - (*ControllerPacketMetadata_Metadata)(nil), // 31: p4.config.v1.ControllerPacketMetadata.Metadata - (*P4TypeInfo)(nil), // 32: p4.config.v1.P4TypeInfo - (*SourceLocation)(nil), // 33: p4.config.v1.SourceLocation - (*StructuredAnnotation)(nil), // 34: p4.config.v1.StructuredAnnotation - (*anypb.Any)(nil), // 35: google.protobuf.Any - (*P4NamedType)(nil), // 36: p4.config.v1.P4NamedType - (*P4DataTypeSpec)(nil), // 37: p4.config.v1.P4DataTypeSpec + (GenericTableType_Prefix)(0), // 1: p4.config.v1.GenericTableType.Prefix + (MatchField_MatchType)(0), // 2: p4.config.v1.MatchField.MatchType + (Table_IdleTimeoutBehavior)(0), // 3: p4.config.v1.Table.IdleTimeoutBehavior + (ActionRef_Scope)(0), // 4: p4.config.v1.ActionRef.Scope + (CounterSpec_Unit)(0), // 5: p4.config.v1.CounterSpec.Unit + (MeterSpec_Unit)(0), // 6: p4.config.v1.MeterSpec.Unit + (GenericMatchField_MatchType)(0), // 7: p4.config.v1.GenericMatchField.MatchType + (UnionRef_Scope)(0), // 8: p4.config.v1.UnionRef.Scope + (*P4Info)(nil), // 9: p4.config.v1.P4Info + (*Documentation)(nil), // 10: p4.config.v1.Documentation + (*PkgInfo)(nil), // 11: p4.config.v1.PkgInfo + (*P4Ids)(nil), // 12: p4.config.v1.P4Ids + (*GenericTableType)(nil), // 13: p4.config.v1.GenericTableType + (*Preamble)(nil), // 14: p4.config.v1.Preamble + (*Extern)(nil), // 15: p4.config.v1.Extern + (*ExternInstance)(nil), // 16: p4.config.v1.ExternInstance + (*MatchField)(nil), // 17: p4.config.v1.MatchField + (*Table)(nil), // 18: p4.config.v1.Table + (*ActionRef)(nil), // 19: p4.config.v1.ActionRef + (*Action)(nil), // 20: p4.config.v1.Action + (*ActionProfile)(nil), // 21: p4.config.v1.ActionProfile + (*CounterSpec)(nil), // 22: p4.config.v1.CounterSpec + (*Counter)(nil), // 23: p4.config.v1.Counter + (*DirectCounter)(nil), // 24: p4.config.v1.DirectCounter + (*MeterSpec)(nil), // 25: p4.config.v1.MeterSpec + (*Meter)(nil), // 26: p4.config.v1.Meter + (*DirectMeter)(nil), // 27: p4.config.v1.DirectMeter + (*ControllerPacketMetadata)(nil), // 28: p4.config.v1.ControllerPacketMetadata + (*ValueSet)(nil), // 29: p4.config.v1.ValueSet + (*Register)(nil), // 30: p4.config.v1.Register + (*Digest)(nil), // 31: p4.config.v1.Digest + (*GenericMatchField)(nil), // 32: p4.config.v1.GenericMatchField + (*UnionRef)(nil), // 33: p4.config.v1.UnionRef + (*Union)(nil), // 34: p4.config.v1.Union + (*GenericTable)(nil), // 35: p4.config.v1.GenericTable + (*GenericTableInstance)(nil), // 36: p4.config.v1.GenericTableInstance + (*Action_Param)(nil), // 37: p4.config.v1.Action.Param + (*ActionProfile_SumOfWeights)(nil), // 38: p4.config.v1.ActionProfile.SumOfWeights + (*ActionProfile_SumOfMembers)(nil), // 39: p4.config.v1.ActionProfile.SumOfMembers + (*ControllerPacketMetadata_Metadata)(nil), // 40: p4.config.v1.ControllerPacketMetadata.Metadata + (*Union_Param)(nil), // 41: p4.config.v1.Union.Param + (*P4TypeInfo)(nil), // 42: p4.config.v1.P4TypeInfo + (*SourceLocation)(nil), // 43: p4.config.v1.SourceLocation + (*StructuredAnnotation)(nil), // 44: p4.config.v1.StructuredAnnotation + (*anypb.Any)(nil), // 45: google.protobuf.Any + (*P4NamedType)(nil), // 46: p4.config.v1.P4NamedType + (*P4DataTypeSpec)(nil), // 47: p4.config.v1.P4DataTypeSpec + (*GenericDataTypeSpec)(nil), // 48: p4.config.v1.GenericDataTypeSpec } var file_p4_config_v1_p4info_proto_depIdxs = []int32{ - 8, // 0: p4.config.v1.P4Info.pkg_info:type_name -> p4.config.v1.PkgInfo - 14, // 1: p4.config.v1.P4Info.tables:type_name -> p4.config.v1.Table - 16, // 2: p4.config.v1.P4Info.actions:type_name -> p4.config.v1.Action - 17, // 3: p4.config.v1.P4Info.action_profiles:type_name -> p4.config.v1.ActionProfile - 19, // 4: p4.config.v1.P4Info.counters:type_name -> p4.config.v1.Counter - 20, // 5: p4.config.v1.P4Info.direct_counters:type_name -> p4.config.v1.DirectCounter - 22, // 6: p4.config.v1.P4Info.meters:type_name -> p4.config.v1.Meter - 23, // 7: p4.config.v1.P4Info.direct_meters:type_name -> p4.config.v1.DirectMeter - 24, // 8: p4.config.v1.P4Info.controller_packet_metadata:type_name -> p4.config.v1.ControllerPacketMetadata - 25, // 9: p4.config.v1.P4Info.value_sets:type_name -> p4.config.v1.ValueSet - 26, // 10: p4.config.v1.P4Info.registers:type_name -> p4.config.v1.Register - 27, // 11: p4.config.v1.P4Info.digests:type_name -> p4.config.v1.Digest - 11, // 12: p4.config.v1.P4Info.externs:type_name -> p4.config.v1.Extern - 32, // 13: p4.config.v1.P4Info.type_info:type_name -> p4.config.v1.P4TypeInfo - 7, // 14: p4.config.v1.PkgInfo.doc:type_name -> p4.config.v1.Documentation - 33, // 15: p4.config.v1.PkgInfo.annotation_locations:type_name -> p4.config.v1.SourceLocation - 34, // 16: p4.config.v1.PkgInfo.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 33, // 17: p4.config.v1.Preamble.annotation_locations:type_name -> p4.config.v1.SourceLocation - 7, // 18: p4.config.v1.Preamble.doc:type_name -> p4.config.v1.Documentation - 34, // 19: p4.config.v1.Preamble.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 12, // 20: p4.config.v1.Extern.instances:type_name -> p4.config.v1.ExternInstance - 10, // 21: p4.config.v1.ExternInstance.preamble:type_name -> p4.config.v1.Preamble - 35, // 22: p4.config.v1.ExternInstance.info:type_name -> google.protobuf.Any - 33, // 23: p4.config.v1.MatchField.annotation_locations:type_name -> p4.config.v1.SourceLocation - 1, // 24: p4.config.v1.MatchField.match_type:type_name -> p4.config.v1.MatchField.MatchType - 7, // 25: p4.config.v1.MatchField.doc:type_name -> p4.config.v1.Documentation - 36, // 26: p4.config.v1.MatchField.type_name:type_name -> p4.config.v1.P4NamedType - 34, // 27: p4.config.v1.MatchField.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 10, // 28: p4.config.v1.Table.preamble:type_name -> p4.config.v1.Preamble - 13, // 29: p4.config.v1.Table.match_fields:type_name -> p4.config.v1.MatchField - 15, // 30: p4.config.v1.Table.action_refs:type_name -> p4.config.v1.ActionRef - 2, // 31: p4.config.v1.Table.idle_timeout_behavior:type_name -> p4.config.v1.Table.IdleTimeoutBehavior - 35, // 32: p4.config.v1.Table.other_properties:type_name -> google.protobuf.Any - 3, // 33: p4.config.v1.ActionRef.scope:type_name -> p4.config.v1.ActionRef.Scope - 33, // 34: p4.config.v1.ActionRef.annotation_locations:type_name -> p4.config.v1.SourceLocation - 34, // 35: p4.config.v1.ActionRef.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 10, // 36: p4.config.v1.Action.preamble:type_name -> p4.config.v1.Preamble - 28, // 37: p4.config.v1.Action.params:type_name -> p4.config.v1.Action.Param - 10, // 38: p4.config.v1.ActionProfile.preamble:type_name -> p4.config.v1.Preamble - 29, // 39: p4.config.v1.ActionProfile.sum_of_weights:type_name -> p4.config.v1.ActionProfile.SumOfWeights - 30, // 40: p4.config.v1.ActionProfile.sum_of_members:type_name -> p4.config.v1.ActionProfile.SumOfMembers - 4, // 41: p4.config.v1.CounterSpec.unit:type_name -> p4.config.v1.CounterSpec.Unit - 10, // 42: p4.config.v1.Counter.preamble:type_name -> p4.config.v1.Preamble - 18, // 43: p4.config.v1.Counter.spec:type_name -> p4.config.v1.CounterSpec - 36, // 44: p4.config.v1.Counter.index_type_name:type_name -> p4.config.v1.P4NamedType - 10, // 45: p4.config.v1.DirectCounter.preamble:type_name -> p4.config.v1.Preamble - 18, // 46: p4.config.v1.DirectCounter.spec:type_name -> p4.config.v1.CounterSpec - 5, // 47: p4.config.v1.MeterSpec.unit:type_name -> p4.config.v1.MeterSpec.Unit - 10, // 48: p4.config.v1.Meter.preamble:type_name -> p4.config.v1.Preamble - 21, // 49: p4.config.v1.Meter.spec:type_name -> p4.config.v1.MeterSpec - 36, // 50: p4.config.v1.Meter.index_type_name:type_name -> p4.config.v1.P4NamedType - 10, // 51: p4.config.v1.DirectMeter.preamble:type_name -> p4.config.v1.Preamble - 21, // 52: p4.config.v1.DirectMeter.spec:type_name -> p4.config.v1.MeterSpec - 10, // 53: p4.config.v1.ControllerPacketMetadata.preamble:type_name -> p4.config.v1.Preamble - 31, // 54: p4.config.v1.ControllerPacketMetadata.metadata:type_name -> p4.config.v1.ControllerPacketMetadata.Metadata - 10, // 55: p4.config.v1.ValueSet.preamble:type_name -> p4.config.v1.Preamble - 13, // 56: p4.config.v1.ValueSet.match:type_name -> p4.config.v1.MatchField - 10, // 57: p4.config.v1.Register.preamble:type_name -> p4.config.v1.Preamble - 37, // 58: p4.config.v1.Register.type_spec:type_name -> p4.config.v1.P4DataTypeSpec - 36, // 59: p4.config.v1.Register.index_type_name:type_name -> p4.config.v1.P4NamedType - 10, // 60: p4.config.v1.Digest.preamble:type_name -> p4.config.v1.Preamble - 37, // 61: p4.config.v1.Digest.type_spec:type_name -> p4.config.v1.P4DataTypeSpec - 33, // 62: p4.config.v1.Action.Param.annotation_locations:type_name -> p4.config.v1.SourceLocation - 7, // 63: p4.config.v1.Action.Param.doc:type_name -> p4.config.v1.Documentation - 36, // 64: p4.config.v1.Action.Param.type_name:type_name -> p4.config.v1.P4NamedType - 34, // 65: p4.config.v1.Action.Param.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 33, // 66: p4.config.v1.ControllerPacketMetadata.Metadata.annotation_locations:type_name -> p4.config.v1.SourceLocation - 36, // 67: p4.config.v1.ControllerPacketMetadata.Metadata.type_name:type_name -> p4.config.v1.P4NamedType - 34, // 68: p4.config.v1.ControllerPacketMetadata.Metadata.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 69, // [69:69] is the sub-list for method output_type - 69, // [69:69] is the sub-list for method input_type - 69, // [69:69] is the sub-list for extension type_name - 69, // [69:69] is the sub-list for extension extendee - 0, // [0:69] is the sub-list for field type_name + 11, // 0: p4.config.v1.P4Info.pkg_info:type_name -> p4.config.v1.PkgInfo + 18, // 1: p4.config.v1.P4Info.tables:type_name -> p4.config.v1.Table + 20, // 2: p4.config.v1.P4Info.actions:type_name -> p4.config.v1.Action + 21, // 3: p4.config.v1.P4Info.action_profiles:type_name -> p4.config.v1.ActionProfile + 23, // 4: p4.config.v1.P4Info.counters:type_name -> p4.config.v1.Counter + 24, // 5: p4.config.v1.P4Info.direct_counters:type_name -> p4.config.v1.DirectCounter + 26, // 6: p4.config.v1.P4Info.meters:type_name -> p4.config.v1.Meter + 27, // 7: p4.config.v1.P4Info.direct_meters:type_name -> p4.config.v1.DirectMeter + 28, // 8: p4.config.v1.P4Info.controller_packet_metadata:type_name -> p4.config.v1.ControllerPacketMetadata + 29, // 9: p4.config.v1.P4Info.value_sets:type_name -> p4.config.v1.ValueSet + 30, // 10: p4.config.v1.P4Info.registers:type_name -> p4.config.v1.Register + 31, // 11: p4.config.v1.P4Info.digests:type_name -> p4.config.v1.Digest + 35, // 12: p4.config.v1.P4Info.generic_tables:type_name -> p4.config.v1.GenericTable + 34, // 13: p4.config.v1.P4Info.unions:type_name -> p4.config.v1.Union + 15, // 14: p4.config.v1.P4Info.externs:type_name -> p4.config.v1.Extern + 42, // 15: p4.config.v1.P4Info.type_info:type_name -> p4.config.v1.P4TypeInfo + 10, // 16: p4.config.v1.PkgInfo.doc:type_name -> p4.config.v1.Documentation + 43, // 17: p4.config.v1.PkgInfo.annotation_locations:type_name -> p4.config.v1.SourceLocation + 44, // 18: p4.config.v1.PkgInfo.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 43, // 19: p4.config.v1.Preamble.annotation_locations:type_name -> p4.config.v1.SourceLocation + 10, // 20: p4.config.v1.Preamble.doc:type_name -> p4.config.v1.Documentation + 44, // 21: p4.config.v1.Preamble.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 16, // 22: p4.config.v1.Extern.instances:type_name -> p4.config.v1.ExternInstance + 14, // 23: p4.config.v1.ExternInstance.preamble:type_name -> p4.config.v1.Preamble + 45, // 24: p4.config.v1.ExternInstance.info:type_name -> google.protobuf.Any + 43, // 25: p4.config.v1.MatchField.annotation_locations:type_name -> p4.config.v1.SourceLocation + 2, // 26: p4.config.v1.MatchField.match_type:type_name -> p4.config.v1.MatchField.MatchType + 10, // 27: p4.config.v1.MatchField.doc:type_name -> p4.config.v1.Documentation + 46, // 28: p4.config.v1.MatchField.type_name:type_name -> p4.config.v1.P4NamedType + 44, // 29: p4.config.v1.MatchField.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 14, // 30: p4.config.v1.Table.preamble:type_name -> p4.config.v1.Preamble + 17, // 31: p4.config.v1.Table.match_fields:type_name -> p4.config.v1.MatchField + 19, // 32: p4.config.v1.Table.action_refs:type_name -> p4.config.v1.ActionRef + 3, // 33: p4.config.v1.Table.idle_timeout_behavior:type_name -> p4.config.v1.Table.IdleTimeoutBehavior + 45, // 34: p4.config.v1.Table.other_properties:type_name -> google.protobuf.Any + 4, // 35: p4.config.v1.ActionRef.scope:type_name -> p4.config.v1.ActionRef.Scope + 43, // 36: p4.config.v1.ActionRef.annotation_locations:type_name -> p4.config.v1.SourceLocation + 44, // 37: p4.config.v1.ActionRef.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 14, // 38: p4.config.v1.Action.preamble:type_name -> p4.config.v1.Preamble + 37, // 39: p4.config.v1.Action.params:type_name -> p4.config.v1.Action.Param + 14, // 40: p4.config.v1.ActionProfile.preamble:type_name -> p4.config.v1.Preamble + 38, // 41: p4.config.v1.ActionProfile.sum_of_weights:type_name -> p4.config.v1.ActionProfile.SumOfWeights + 39, // 42: p4.config.v1.ActionProfile.sum_of_members:type_name -> p4.config.v1.ActionProfile.SumOfMembers + 5, // 43: p4.config.v1.CounterSpec.unit:type_name -> p4.config.v1.CounterSpec.Unit + 14, // 44: p4.config.v1.Counter.preamble:type_name -> p4.config.v1.Preamble + 22, // 45: p4.config.v1.Counter.spec:type_name -> p4.config.v1.CounterSpec + 46, // 46: p4.config.v1.Counter.index_type_name:type_name -> p4.config.v1.P4NamedType + 14, // 47: p4.config.v1.DirectCounter.preamble:type_name -> p4.config.v1.Preamble + 22, // 48: p4.config.v1.DirectCounter.spec:type_name -> p4.config.v1.CounterSpec + 6, // 49: p4.config.v1.MeterSpec.unit:type_name -> p4.config.v1.MeterSpec.Unit + 14, // 50: p4.config.v1.Meter.preamble:type_name -> p4.config.v1.Preamble + 25, // 51: p4.config.v1.Meter.spec:type_name -> p4.config.v1.MeterSpec + 46, // 52: p4.config.v1.Meter.index_type_name:type_name -> p4.config.v1.P4NamedType + 14, // 53: p4.config.v1.DirectMeter.preamble:type_name -> p4.config.v1.Preamble + 25, // 54: p4.config.v1.DirectMeter.spec:type_name -> p4.config.v1.MeterSpec + 14, // 55: p4.config.v1.ControllerPacketMetadata.preamble:type_name -> p4.config.v1.Preamble + 40, // 56: p4.config.v1.ControllerPacketMetadata.metadata:type_name -> p4.config.v1.ControllerPacketMetadata.Metadata + 14, // 57: p4.config.v1.ValueSet.preamble:type_name -> p4.config.v1.Preamble + 17, // 58: p4.config.v1.ValueSet.match:type_name -> p4.config.v1.MatchField + 14, // 59: p4.config.v1.Register.preamble:type_name -> p4.config.v1.Preamble + 47, // 60: p4.config.v1.Register.type_spec:type_name -> p4.config.v1.P4DataTypeSpec + 46, // 61: p4.config.v1.Register.index_type_name:type_name -> p4.config.v1.P4NamedType + 14, // 62: p4.config.v1.Digest.preamble:type_name -> p4.config.v1.Preamble + 47, // 63: p4.config.v1.Digest.type_spec:type_name -> p4.config.v1.P4DataTypeSpec + 48, // 64: p4.config.v1.GenericMatchField.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec + 7, // 65: p4.config.v1.GenericMatchField.match_type:type_name -> p4.config.v1.GenericMatchField.MatchType + 10, // 66: p4.config.v1.GenericMatchField.doc:type_name -> p4.config.v1.Documentation + 44, // 67: p4.config.v1.GenericMatchField.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 43, // 68: p4.config.v1.GenericMatchField.annotation_locations:type_name -> p4.config.v1.SourceLocation + 8, // 69: p4.config.v1.UnionRef.scope:type_name -> p4.config.v1.UnionRef.Scope + 43, // 70: p4.config.v1.UnionRef.annotation_locations:type_name -> p4.config.v1.SourceLocation + 44, // 71: p4.config.v1.UnionRef.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 14, // 72: p4.config.v1.Union.preamble:type_name -> p4.config.v1.Preamble + 41, // 73: p4.config.v1.Union.params:type_name -> p4.config.v1.Union.Param + 36, // 74: p4.config.v1.GenericTable.instances:type_name -> p4.config.v1.GenericTableInstance + 14, // 75: p4.config.v1.GenericTableInstance.preamble:type_name -> p4.config.v1.Preamble + 32, // 76: p4.config.v1.GenericTableInstance.generic_match_fields:type_name -> p4.config.v1.GenericMatchField + 33, // 77: p4.config.v1.GenericTableInstance.union_refs:type_name -> p4.config.v1.UnionRef + 45, // 78: p4.config.v1.GenericTableInstance.other_properties:type_name -> google.protobuf.Any + 43, // 79: p4.config.v1.Action.Param.annotation_locations:type_name -> p4.config.v1.SourceLocation + 10, // 80: p4.config.v1.Action.Param.doc:type_name -> p4.config.v1.Documentation + 46, // 81: p4.config.v1.Action.Param.type_name:type_name -> p4.config.v1.P4NamedType + 44, // 82: p4.config.v1.Action.Param.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 43, // 83: p4.config.v1.ControllerPacketMetadata.Metadata.annotation_locations:type_name -> p4.config.v1.SourceLocation + 46, // 84: p4.config.v1.ControllerPacketMetadata.Metadata.type_name:type_name -> p4.config.v1.P4NamedType + 44, // 85: p4.config.v1.ControllerPacketMetadata.Metadata.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 48, // 86: p4.config.v1.Union.Param.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec + 10, // 87: p4.config.v1.Union.Param.doc:type_name -> p4.config.v1.Documentation + 44, // 88: p4.config.v1.Union.Param.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 43, // 89: p4.config.v1.Union.Param.annotation_locations:type_name -> p4.config.v1.SourceLocation + 90, // [90:90] is the sub-list for method output_type + 90, // [90:90] is the sub-list for method input_type + 90, // [90:90] is the sub-list for extension type_name + 90, // [90:90] is the sub-list for extension extendee + 0, // [0:90] is the sub-list for field type_name } func init() { file_p4_config_v1_p4info_proto_init() } @@ -3104,7 +4048,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Preamble); i { + switch v := v.(*GenericTableType); i { case 0: return &v.state case 1: @@ -3116,7 +4060,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Extern); i { + switch v := v.(*Preamble); i { case 0: return &v.state case 1: @@ -3128,7 +4072,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExternInstance); i { + switch v := v.(*Extern); i { case 0: return &v.state case 1: @@ -3140,7 +4084,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MatchField); i { + switch v := v.(*ExternInstance); i { case 0: return &v.state case 1: @@ -3152,7 +4096,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Table); i { + switch v := v.(*MatchField); i { case 0: return &v.state case 1: @@ -3164,7 +4108,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionRef); i { + switch v := v.(*Table); i { case 0: return &v.state case 1: @@ -3176,7 +4120,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Action); i { + switch v := v.(*ActionRef); i { case 0: return &v.state case 1: @@ -3188,7 +4132,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionProfile); i { + switch v := v.(*Action); i { case 0: return &v.state case 1: @@ -3200,7 +4144,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CounterSpec); i { + switch v := v.(*ActionProfile); i { case 0: return &v.state case 1: @@ -3212,7 +4156,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Counter); i { + switch v := v.(*CounterSpec); i { case 0: return &v.state case 1: @@ -3224,7 +4168,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DirectCounter); i { + switch v := v.(*Counter); i { case 0: return &v.state case 1: @@ -3236,7 +4180,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeterSpec); i { + switch v := v.(*DirectCounter); i { case 0: return &v.state case 1: @@ -3248,7 +4192,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Meter); i { + switch v := v.(*MeterSpec); i { case 0: return &v.state case 1: @@ -3260,7 +4204,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DirectMeter); i { + switch v := v.(*Meter); i { case 0: return &v.state case 1: @@ -3272,7 +4216,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ControllerPacketMetadata); i { + switch v := v.(*DirectMeter); i { case 0: return &v.state case 1: @@ -3284,7 +4228,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValueSet); i { + switch v := v.(*ControllerPacketMetadata); i { case 0: return &v.state case 1: @@ -3296,7 +4240,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Register); i { + switch v := v.(*ValueSet); i { case 0: return &v.state case 1: @@ -3308,7 +4252,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Digest); i { + switch v := v.(*Register); i { case 0: return &v.state case 1: @@ -3320,7 +4264,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Action_Param); i { + switch v := v.(*Digest); i { case 0: return &v.state case 1: @@ -3332,7 +4276,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionProfile_SumOfWeights); i { + switch v := v.(*GenericMatchField); i { case 0: return &v.state case 1: @@ -3344,7 +4288,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionProfile_SumOfMembers); i { + switch v := v.(*UnionRef); i { case 0: return &v.state case 1: @@ -3356,6 +4300,78 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Union); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericTable); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericTableInstance); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Action_Param); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActionProfile_SumOfWeights); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActionProfile_SumOfMembers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControllerPacketMetadata_Metadata); i { case 0: return &v.state @@ -3367,23 +4383,39 @@ func file_p4_config_v1_p4info_proto_init() { return nil } } + file_p4_config_v1_p4info_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Union_Param); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } - file_p4_config_v1_p4info_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_p4_config_v1_p4info_proto_msgTypes[8].OneofWrappers = []interface{}{ (*MatchField_MatchType_)(nil), (*MatchField_OtherMatchType)(nil), } - file_p4_config_v1_p4info_proto_msgTypes[11].OneofWrappers = []interface{}{ + file_p4_config_v1_p4info_proto_msgTypes[12].OneofWrappers = []interface{}{ (*ActionProfile_SumOfWeights_)(nil), (*ActionProfile_SumOfMembers_)(nil), } - file_p4_config_v1_p4info_proto_msgTypes[24].OneofWrappers = []interface{}{} + file_p4_config_v1_p4info_proto_msgTypes[23].OneofWrappers = []interface{}{ + (*GenericMatchField_MatchType_)(nil), + (*GenericMatchField_OtherMatchType)(nil), + } + file_p4_config_v1_p4info_proto_msgTypes[30].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p4_config_v1_p4info_proto_rawDesc, - NumEnums: 6, - NumMessages: 26, + NumEnums: 9, + NumMessages: 33, NumExtensions: 0, NumServices: 0, }, diff --git a/go/p4/config/v1/p4types.pb.go b/go/p4/config/v1/p4types.pb.go index fff41698..37565e53 100644 --- a/go/p4/config/v1/p4types.pb.go +++ b/go/p4/config/v1/p4types.pb.go @@ -1948,6 +1948,1424 @@ func (*P4NewTypeSpec_OriginalType) isP4NewTypeSpec_Representation() {} func (*P4NewTypeSpec_TranslatedType) isP4NewTypeSpec_Representation() {} +// Instead of duplicating the type spec for these +// every time the type is used, we include the type spec once in this +// GenericTypeInfo message and refer to the types by name in the +// GenericDataTypeSpec message. We also +// support annotations for these type specs which can be useful, e.g. to +// identify well-known headers (such as ipv4). +type GenericTypeInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Structs map[string]*GenericStructTypeSpec `protobuf:"bytes,1,rep,name=structs,proto3" json:"structs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Lists map[string]*GenericListTypeSpec `protobuf:"bytes,2,rep,name=lists,proto3" json:"lists,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Enums map[string]*GenericEnumTypeSpec `protobuf:"bytes,3,rep,name=enums,proto3" json:"enums,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SerializableEnums map[string]*GenericSerializableEnumTypeSpec `protobuf:"bytes,4,rep,name=serializable_enums,json=serializableEnums,proto3" json:"serializable_enums,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + NewTypes map[string]*GenericNewTypeSpec `protobuf:"bytes,5,rep,name=new_types,json=newTypes,proto3" json:"new_types,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *GenericTypeInfo) Reset() { + *x = GenericTypeInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericTypeInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericTypeInfo) ProtoMessage() {} + +func (x *GenericTypeInfo) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericTypeInfo.ProtoReflect.Descriptor instead. +func (*GenericTypeInfo) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{26} +} + +func (x *GenericTypeInfo) GetStructs() map[string]*GenericStructTypeSpec { + if x != nil { + return x.Structs + } + return nil +} + +func (x *GenericTypeInfo) GetLists() map[string]*GenericListTypeSpec { + if x != nil { + return x.Lists + } + return nil +} + +func (x *GenericTypeInfo) GetEnums() map[string]*GenericEnumTypeSpec { + if x != nil { + return x.Enums + } + return nil +} + +func (x *GenericTypeInfo) GetSerializableEnums() map[string]*GenericSerializableEnumTypeSpec { + if x != nil { + return x.SerializableEnums + } + return nil +} + +func (x *GenericTypeInfo) GetNewTypes() map[string]*GenericNewTypeSpec { + if x != nil { + return x.NewTypes + } + return nil +} + +// Describes Generic Data types. +type GenericDataTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to TypeSpec: + // + // *GenericDataTypeSpec_Bitstring + // *GenericDataTypeSpec_Float + // *GenericDataTypeSpec_Bool + // *GenericDataTypeSpec_Struct + // *GenericDataTypeSpec_List + // *GenericDataTypeSpec_UnorderedSet + // *GenericDataTypeSpec_String_ + // *GenericDataTypeSpec_Enum + // *GenericDataTypeSpec_SerializableEnum + // *GenericDataTypeSpec_NewType + // *GenericDataTypeSpec_P4Type + TypeSpec isGenericDataTypeSpec_TypeSpec `protobuf_oneof:"type_spec"` +} + +func (x *GenericDataTypeSpec) Reset() { + *x = GenericDataTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericDataTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericDataTypeSpec) ProtoMessage() {} + +func (x *GenericDataTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericDataTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericDataTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{27} +} + +func (m *GenericDataTypeSpec) GetTypeSpec() isGenericDataTypeSpec_TypeSpec { + if m != nil { + return m.TypeSpec + } + return nil +} + +func (x *GenericDataTypeSpec) GetBitstring() *GenericBitstringLikeTypeSpec { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_Bitstring); ok { + return x.Bitstring + } + return nil +} + +func (x *GenericDataTypeSpec) GetFloat() *GenericFloatType { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_Float); ok { + return x.Float + } + return nil +} + +func (x *GenericDataTypeSpec) GetBool() *GenericBoolType { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_Bool); ok { + return x.Bool + } + return nil +} + +func (x *GenericDataTypeSpec) GetStruct() *GenericNamedType { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_Struct); ok { + return x.Struct + } + return nil +} + +func (x *GenericDataTypeSpec) GetList() *GenericNamedType { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_List); ok { + return x.List + } + return nil +} + +func (x *GenericDataTypeSpec) GetUnorderedSet() *GenericNamedType { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_UnorderedSet); ok { + return x.UnorderedSet + } + return nil +} + +func (x *GenericDataTypeSpec) GetString_() *GenericNamedType { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_String_); ok { + return x.String_ + } + return nil +} + +func (x *GenericDataTypeSpec) GetEnum() *GenericNamedType { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_Enum); ok { + return x.Enum + } + return nil +} + +func (x *GenericDataTypeSpec) GetSerializableEnum() *GenericNamedType { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_SerializableEnum); ok { + return x.SerializableEnum + } + return nil +} + +func (x *GenericDataTypeSpec) GetNewType() *GenericNamedType { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_NewType); ok { + return x.NewType + } + return nil +} + +func (x *GenericDataTypeSpec) GetP4Type() *P4DataTypeSpec { + if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_P4Type); ok { + return x.P4Type + } + return nil +} + +type isGenericDataTypeSpec_TypeSpec interface { + isGenericDataTypeSpec_TypeSpec() +} + +type GenericDataTypeSpec_Bitstring struct { + Bitstring *GenericBitstringLikeTypeSpec `protobuf:"bytes,1,opt,name=bitstring,proto3,oneof"` +} + +type GenericDataTypeSpec_Float struct { + Float *GenericFloatType `protobuf:"bytes,2,opt,name=float,proto3,oneof"` +} + +type GenericDataTypeSpec_Bool struct { + Bool *GenericBoolType `protobuf:"bytes,3,opt,name=bool,proto3,oneof"` +} + +type GenericDataTypeSpec_Struct struct { + Struct *GenericNamedType `protobuf:"bytes,4,opt,name=struct,proto3,oneof"` +} + +type GenericDataTypeSpec_List struct { + List *GenericNamedType `protobuf:"bytes,5,opt,name=list,proto3,oneof"` +} + +type GenericDataTypeSpec_UnorderedSet struct { + UnorderedSet *GenericNamedType `protobuf:"bytes,6,opt,name=unordered_set,json=unorderedSet,proto3,oneof"` +} + +type GenericDataTypeSpec_String_ struct { + String_ *GenericNamedType `protobuf:"bytes,7,opt,name=string,proto3,oneof"` +} + +type GenericDataTypeSpec_Enum struct { + Enum *GenericNamedType `protobuf:"bytes,8,opt,name=enum,proto3,oneof"` +} + +type GenericDataTypeSpec_SerializableEnum struct { + SerializableEnum *GenericNamedType `protobuf:"bytes,9,opt,name=serializable_enum,json=serializableEnum,proto3,oneof"` +} + +type GenericDataTypeSpec_NewType struct { + NewType *GenericNamedType `protobuf:"bytes,10,opt,name=new_type,json=newType,proto3,oneof"` +} + +type GenericDataTypeSpec_P4Type struct { + // P4 data type spec can help achieve parity with types being used + // in P4 externs. For example, if Register is using a type in P4 + // Data type spec, then it will make it easier to map here when using + // GenericTables + P4Type *P4DataTypeSpec `protobuf:"bytes,11,opt,name=p4_type,json=p4Type,proto3,oneof"` +} + +func (*GenericDataTypeSpec_Bitstring) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_Float) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_Bool) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_Struct) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_List) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_UnorderedSet) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_String_) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_Enum) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_SerializableEnum) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_NewType) isGenericDataTypeSpec_TypeSpec() {} + +func (*GenericDataTypeSpec_P4Type) isGenericDataTypeSpec_TypeSpec() {} + +type GenericNamedType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GenericNamedType) Reset() { + *x = GenericNamedType{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericNamedType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericNamedType) ProtoMessage() {} + +func (x *GenericNamedType) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericNamedType.ProtoReflect.Descriptor instead. +func (*GenericNamedType) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{28} +} + +func (x *GenericNamedType) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Empty message as no type information needed, just used as a placeholder in +// the oneof to identify boolean types. +type GenericBoolType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GenericBoolType) Reset() { + *x = GenericBoolType{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericBoolType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericBoolType) ProtoMessage() {} + +func (x *GenericBoolType) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericBoolType.ProtoReflect.Descriptor instead. +func (*GenericBoolType) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{29} +} + +type GenericFloatType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GenericFloatType) Reset() { + *x = GenericFloatType{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFloatType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFloatType) ProtoMessage() {} + +func (x *GenericFloatType) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFloatType.ProtoReflect.Descriptor instead. +func (*GenericFloatType) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{30} +} + +type GenericBitstringLikeTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to TypeSpec: + // + // *GenericBitstringLikeTypeSpec_Bit + // *GenericBitstringLikeTypeSpec_Int + // *GenericBitstringLikeTypeSpec_Varbit + TypeSpec isGenericBitstringLikeTypeSpec_TypeSpec `protobuf_oneof:"type_spec"` + // Useful to identify well-known types, such as IP address or Ethernet MAC + // address. + Annotations []string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,5,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,6,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericBitstringLikeTypeSpec) Reset() { + *x = GenericBitstringLikeTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericBitstringLikeTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericBitstringLikeTypeSpec) ProtoMessage() {} + +func (x *GenericBitstringLikeTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericBitstringLikeTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericBitstringLikeTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{31} +} + +func (m *GenericBitstringLikeTypeSpec) GetTypeSpec() isGenericBitstringLikeTypeSpec_TypeSpec { + if m != nil { + return m.TypeSpec + } + return nil +} + +func (x *GenericBitstringLikeTypeSpec) GetBit() *GenericBitTypeSpec { + if x, ok := x.GetTypeSpec().(*GenericBitstringLikeTypeSpec_Bit); ok { + return x.Bit + } + return nil +} + +func (x *GenericBitstringLikeTypeSpec) GetInt() *GenericIntTypeSpec { + if x, ok := x.GetTypeSpec().(*GenericBitstringLikeTypeSpec_Int); ok { + return x.Int + } + return nil +} + +func (x *GenericBitstringLikeTypeSpec) GetVarbit() *GenericVarbitTypeSpec { + if x, ok := x.GetTypeSpec().(*GenericBitstringLikeTypeSpec_Varbit); ok { + return x.Varbit + } + return nil +} + +func (x *GenericBitstringLikeTypeSpec) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericBitstringLikeTypeSpec) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericBitstringLikeTypeSpec) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +type isGenericBitstringLikeTypeSpec_TypeSpec interface { + isGenericBitstringLikeTypeSpec_TypeSpec() +} + +type GenericBitstringLikeTypeSpec_Bit struct { + Bit *GenericBitTypeSpec `protobuf:"bytes,1,opt,name=bit,proto3,oneof"` // bit +} + +type GenericBitstringLikeTypeSpec_Int struct { + Int *GenericIntTypeSpec `protobuf:"bytes,2,opt,name=int,proto3,oneof"` // int +} + +type GenericBitstringLikeTypeSpec_Varbit struct { + Varbit *GenericVarbitTypeSpec `protobuf:"bytes,3,opt,name=varbit,proto3,oneof"` // varbit +} + +func (*GenericBitstringLikeTypeSpec_Bit) isGenericBitstringLikeTypeSpec_TypeSpec() {} + +func (*GenericBitstringLikeTypeSpec_Int) isGenericBitstringLikeTypeSpec_TypeSpec() {} + +func (*GenericBitstringLikeTypeSpec_Varbit) isGenericBitstringLikeTypeSpec_TypeSpec() {} + +type GenericBitTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Bitwidth int32 `protobuf:"varint,1,opt,name=bitwidth,proto3" json:"bitwidth,omitempty"` + DefaultValue int32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` +} + +func (x *GenericBitTypeSpec) Reset() { + *x = GenericBitTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericBitTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericBitTypeSpec) ProtoMessage() {} + +func (x *GenericBitTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericBitTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericBitTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{32} +} + +func (x *GenericBitTypeSpec) GetBitwidth() int32 { + if x != nil { + return x.Bitwidth + } + return 0 +} + +func (x *GenericBitTypeSpec) GetDefaultValue() int32 { + if x != nil { + return x.DefaultValue + } + return 0 +} + +type GenericIntTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Bitwidth int32 `protobuf:"varint,1,opt,name=bitwidth,proto3" json:"bitwidth,omitempty"` + DefaultValue int32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` +} + +func (x *GenericIntTypeSpec) Reset() { + *x = GenericIntTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericIntTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericIntTypeSpec) ProtoMessage() {} + +func (x *GenericIntTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericIntTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericIntTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{33} +} + +func (x *GenericIntTypeSpec) GetBitwidth() int32 { + if x != nil { + return x.Bitwidth + } + return 0 +} + +func (x *GenericIntTypeSpec) GetDefaultValue() int32 { + if x != nil { + return x.DefaultValue + } + return 0 +} + +type GenericVarbitTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxBitwidth int32 `protobuf:"varint,1,opt,name=max_bitwidth,json=maxBitwidth,proto3" json:"max_bitwidth,omitempty"` + DefaultValue int32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` +} + +func (x *GenericVarbitTypeSpec) Reset() { + *x = GenericVarbitTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericVarbitTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericVarbitTypeSpec) ProtoMessage() {} + +func (x *GenericVarbitTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericVarbitTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericVarbitTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{34} +} + +func (x *GenericVarbitTypeSpec) GetMaxBitwidth() int32 { + if x != nil { + return x.MaxBitwidth + } + return 0 +} + +func (x *GenericVarbitTypeSpec) GetDefaultValue() int32 { + if x != nil { + return x.DefaultValue + } + return 0 +} + +type GenericStructTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Members []*GenericStructTypeSpec_Member `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` + Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,5,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,6,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericStructTypeSpec) Reset() { + *x = GenericStructTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericStructTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericStructTypeSpec) ProtoMessage() {} + +func (x *GenericStructTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericStructTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericStructTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{35} +} + +func (x *GenericStructTypeSpec) GetMembers() []*GenericStructTypeSpec_Member { + if x != nil { + return x.Members + } + return nil +} + +func (x *GenericStructTypeSpec) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericStructTypeSpec) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericStructTypeSpec) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +// If a field is of type list, then container_type is in p4info +// and value == "list" +// ordered and duplicates allowed. +// If max_size and min_size are equal, then fixed size. +type GenericListTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,1,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` // The element_type + Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + MinSize int32 `protobuf:"varint,4,opt,name=min_size,json=minSize,proto3" json:"min_size,omitempty"` // 0 if not present + MaxSize int32 `protobuf:"varint,5,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` // no max size defined if not present + AnnotationLocations []*SourceLocation `protobuf:"bytes,6,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,7,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericListTypeSpec) Reset() { + *x = GenericListTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericListTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericListTypeSpec) ProtoMessage() {} + +func (x *GenericListTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericListTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericListTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{36} +} + +func (x *GenericListTypeSpec) GetTypeSpec() *GenericDataTypeSpec { + if x != nil { + return x.TypeSpec + } + return nil +} + +func (x *GenericListTypeSpec) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericListTypeSpec) GetMinSize() int32 { + if x != nil { + return x.MinSize + } + return 0 +} + +func (x *GenericListTypeSpec) GetMaxSize() int32 { + if x != nil { + return x.MaxSize + } + return 0 +} + +func (x *GenericListTypeSpec) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericListTypeSpec) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +// If a field is of type "unordered_set", then container_type is in p4info +// value == "unordered_set" +// Unordered and duplicates not allowed +type GenericUnorderedSetTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,1,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` // The element_type + Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + MinSize int32 `protobuf:"varint,4,opt,name=min_size,json=minSize,proto3" json:"min_size,omitempty"` // 0 if not present + MaxSize int32 `protobuf:"varint,5,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` // no max size defined if not present + AnnotationLocations []*SourceLocation `protobuf:"bytes,6,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,7,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericUnorderedSetTypeSpec) Reset() { + *x = GenericUnorderedSetTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericUnorderedSetTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericUnorderedSetTypeSpec) ProtoMessage() {} + +func (x *GenericUnorderedSetTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericUnorderedSetTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericUnorderedSetTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{37} +} + +func (x *GenericUnorderedSetTypeSpec) GetTypeSpec() *GenericDataTypeSpec { + if x != nil { + return x.TypeSpec + } + return nil +} + +func (x *GenericUnorderedSetTypeSpec) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericUnorderedSetTypeSpec) GetMinSize() int32 { + if x != nil { + return x.MinSize + } + return 0 +} + +func (x *GenericUnorderedSetTypeSpec) GetMaxSize() int32 { + if x != nil { + return x.MaxSize + } + return 0 +} + +func (x *GenericUnorderedSetTypeSpec) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericUnorderedSetTypeSpec) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +type GenericStringSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + MinSize int32 `protobuf:"varint,2,opt,name=min_size,json=minSize,proto3" json:"min_size,omitempty"` // 0 if not present + MaxSize int32 `protobuf:"varint,3,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` // no max size defined if not present + Annotations []string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,5,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,6,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericStringSpec) Reset() { + *x = GenericStringSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericStringSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericStringSpec) ProtoMessage() {} + +func (x *GenericStringSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericStringSpec.ProtoReflect.Descriptor instead. +func (*GenericStringSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{38} +} + +func (x *GenericStringSpec) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GenericStringSpec) GetMinSize() int32 { + if x != nil { + return x.MinSize + } + return 0 +} + +func (x *GenericStringSpec) GetMaxSize() int32 { + if x != nil { + return x.MaxSize + } + return 0 +} + +func (x *GenericStringSpec) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericStringSpec) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericStringSpec) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +type GenericEnumTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Members []*GenericEnumTypeSpec_Member `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` + Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,3,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,4,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericEnumTypeSpec) Reset() { + *x = GenericEnumTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericEnumTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericEnumTypeSpec) ProtoMessage() {} + +func (x *GenericEnumTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericEnumTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericEnumTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{39} +} + +func (x *GenericEnumTypeSpec) GetMembers() []*GenericEnumTypeSpec_Member { + if x != nil { + return x.Members + } + return nil +} + +func (x *GenericEnumTypeSpec) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericEnumTypeSpec) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericEnumTypeSpec) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +type GenericSerializableEnumTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UnderlyingType *GenericBitTypeSpec `protobuf:"bytes,1,opt,name=underlying_type,json=underlyingType,proto3" json:"underlying_type,omitempty"` + Members []*GenericSerializableEnumTypeSpec_Member `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"` + Annotations []string `protobuf:"bytes,3,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,4,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,5,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericSerializableEnumTypeSpec) Reset() { + *x = GenericSerializableEnumTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericSerializableEnumTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericSerializableEnumTypeSpec) ProtoMessage() {} + +func (x *GenericSerializableEnumTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericSerializableEnumTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericSerializableEnumTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{40} +} + +func (x *GenericSerializableEnumTypeSpec) GetUnderlyingType() *GenericBitTypeSpec { + if x != nil { + return x.UnderlyingType + } + return nil +} + +func (x *GenericSerializableEnumTypeSpec) GetMembers() []*GenericSerializableEnumTypeSpec_Member { + if x != nil { + return x.Members + } + return nil +} + +func (x *GenericSerializableEnumTypeSpec) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericSerializableEnumTypeSpec) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericSerializableEnumTypeSpec) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +// User defined types +type GenericNewTypeTranslation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // 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. In case of target specific types, target_name should be included + Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` + // The object is either represented as an unsigned integer with a bitwidth of + // `sdn_bitwidth`, or as a string. + // + // Types that are assignable to SdnType: + // + // *GenericNewTypeTranslation_SdnBitwidth + // *GenericNewTypeTranslation_SdnString_ + SdnType isGenericNewTypeTranslation_SdnType `protobuf_oneof:"sdn_type"` +} + +func (x *GenericNewTypeTranslation) Reset() { + *x = GenericNewTypeTranslation{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericNewTypeTranslation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericNewTypeTranslation) ProtoMessage() {} + +func (x *GenericNewTypeTranslation) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericNewTypeTranslation.ProtoReflect.Descriptor instead. +func (*GenericNewTypeTranslation) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{41} +} + +func (x *GenericNewTypeTranslation) GetUri() string { + if x != nil { + return x.Uri + } + return "" +} + +func (m *GenericNewTypeTranslation) GetSdnType() isGenericNewTypeTranslation_SdnType { + if m != nil { + return m.SdnType + } + return nil +} + +func (x *GenericNewTypeTranslation) GetSdnBitwidth() int32 { + if x, ok := x.GetSdnType().(*GenericNewTypeTranslation_SdnBitwidth); ok { + return x.SdnBitwidth + } + return 0 +} + +func (x *GenericNewTypeTranslation) GetSdnString() *GenericNewTypeTranslation_SdnString { + if x, ok := x.GetSdnType().(*GenericNewTypeTranslation_SdnString_); ok { + return x.SdnString + } + return nil +} + +type isGenericNewTypeTranslation_SdnType interface { + isGenericNewTypeTranslation_SdnType() +} + +type GenericNewTypeTranslation_SdnBitwidth struct { + SdnBitwidth int32 `protobuf:"varint,2,opt,name=sdn_bitwidth,json=sdnBitwidth,proto3,oneof"` +} + +type GenericNewTypeTranslation_SdnString_ struct { + SdnString *GenericNewTypeTranslation_SdnString `protobuf:"bytes,3,opt,name=sdn_string,json=sdnString,proto3,oneof"` +} + +func (*GenericNewTypeTranslation_SdnBitwidth) isGenericNewTypeTranslation_SdnType() {} + +func (*GenericNewTypeTranslation_SdnString_) isGenericNewTypeTranslation_SdnType() {} + +type GenericNewTypeSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Representation: + // + // *GenericNewTypeSpec_OriginalType + // *GenericNewTypeSpec_TranslatedType + Representation isGenericNewTypeSpec_Representation `protobuf_oneof:"representation"` + // for other annotations (not @p4runtime_translation) + Annotations []string `protobuf:"bytes,3,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,5,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,4,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericNewTypeSpec) Reset() { + *x = GenericNewTypeSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericNewTypeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericNewTypeSpec) ProtoMessage() {} + +func (x *GenericNewTypeSpec) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericNewTypeSpec.ProtoReflect.Descriptor instead. +func (*GenericNewTypeSpec) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{42} +} + +func (m *GenericNewTypeSpec) GetRepresentation() isGenericNewTypeSpec_Representation { + if m != nil { + return m.Representation + } + return nil +} + +func (x *GenericNewTypeSpec) GetOriginalType() *GenericDataTypeSpec { + if x, ok := x.GetRepresentation().(*GenericNewTypeSpec_OriginalType); ok { + return x.OriginalType + } + return nil +} + +func (x *GenericNewTypeSpec) GetTranslatedType() *GenericNewTypeTranslation { + if x, ok := x.GetRepresentation().(*GenericNewTypeSpec_TranslatedType); ok { + return x.TranslatedType + } + return nil +} + +func (x *GenericNewTypeSpec) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericNewTypeSpec) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericNewTypeSpec) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +type isGenericNewTypeSpec_Representation interface { + isGenericNewTypeSpec_Representation() +} + +type GenericNewTypeSpec_OriginalType struct { + // if no @p4runtime_translation annotation present + OriginalType *GenericDataTypeSpec `protobuf:"bytes,1,opt,name=original_type,json=originalType,proto3,oneof"` +} + +type GenericNewTypeSpec_TranslatedType struct { + // if @p4runtime_translation annotation present + TranslatedType *GenericNewTypeTranslation `protobuf:"bytes,2,opt,name=translated_type,json=translatedType,proto3,oneof"` +} + +func (*GenericNewTypeSpec_OriginalType) isGenericNewTypeSpec_Representation() {} + +func (*GenericNewTypeSpec_TranslatedType) isGenericNewTypeSpec_Representation() {} + type P4StructTypeSpec_Member struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1960,7 +3378,7 @@ type P4StructTypeSpec_Member struct { func (x *P4StructTypeSpec_Member) Reset() { *x = P4StructTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[32] + mi := &file_p4_config_v1_p4types_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1973,7 +3391,7 @@ func (x *P4StructTypeSpec_Member) String() string { func (*P4StructTypeSpec_Member) ProtoMessage() {} func (x *P4StructTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[32] + mi := &file_p4_config_v1_p4types_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2015,7 +3433,7 @@ type P4HeaderTypeSpec_Member struct { func (x *P4HeaderTypeSpec_Member) Reset() { *x = P4HeaderTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[33] + mi := &file_p4_config_v1_p4types_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2028,7 +3446,7 @@ func (x *P4HeaderTypeSpec_Member) String() string { func (*P4HeaderTypeSpec_Member) ProtoMessage() {} func (x *P4HeaderTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[33] + mi := &file_p4_config_v1_p4types_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2070,7 +3488,7 @@ type P4HeaderUnionTypeSpec_Member struct { func (x *P4HeaderUnionTypeSpec_Member) Reset() { *x = P4HeaderUnionTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[34] + mi := &file_p4_config_v1_p4types_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2083,7 +3501,7 @@ func (x *P4HeaderUnionTypeSpec_Member) String() string { func (*P4HeaderUnionTypeSpec_Member) ProtoMessage() {} func (x *P4HeaderUnionTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[34] + mi := &file_p4_config_v1_p4types_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2129,7 +3547,7 @@ type P4EnumTypeSpec_Member struct { func (x *P4EnumTypeSpec_Member) Reset() { *x = P4EnumTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[35] + mi := &file_p4_config_v1_p4types_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2142,7 +3560,7 @@ func (x *P4EnumTypeSpec_Member) String() string { func (*P4EnumTypeSpec_Member) ProtoMessage() {} func (x *P4EnumTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[35] + mi := &file_p4_config_v1_p4types_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2203,7 +3621,7 @@ type P4SerializableEnumTypeSpec_Member struct { func (x *P4SerializableEnumTypeSpec_Member) Reset() { *x = P4SerializableEnumTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[36] + mi := &file_p4_config_v1_p4types_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2216,7 +3634,7 @@ func (x *P4SerializableEnumTypeSpec_Member) String() string { func (*P4SerializableEnumTypeSpec_Member) ProtoMessage() {} func (x *P4SerializableEnumTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[36] + mi := &file_p4_config_v1_p4types_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2276,7 +3694,7 @@ type P4NewTypeTranslation_SdnString struct { func (x *P4NewTypeTranslation_SdnString) Reset() { *x = P4NewTypeTranslation_SdnString{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[37] + mi := &file_p4_config_v1_p4types_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2289,7 +3707,7 @@ func (x *P4NewTypeTranslation_SdnString) String() string { func (*P4NewTypeTranslation_SdnString) ProtoMessage() {} func (x *P4NewTypeTranslation_SdnString) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[37] + mi := &file_p4_config_v1_p4types_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2305,6 +3723,269 @@ func (*P4NewTypeTranslation_SdnString) Descriptor() ([]byte, []int) { return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{24, 0} } +type GenericStructTypeSpec_Member struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,2,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` +} + +func (x *GenericStructTypeSpec_Member) Reset() { + *x = GenericStructTypeSpec_Member{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericStructTypeSpec_Member) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericStructTypeSpec_Member) ProtoMessage() {} + +func (x *GenericStructTypeSpec_Member) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[60] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericStructTypeSpec_Member.ProtoReflect.Descriptor instead. +func (*GenericStructTypeSpec_Member) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{35, 0} +} + +func (x *GenericStructTypeSpec_Member) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GenericStructTypeSpec_Member) GetTypeSpec() *GenericDataTypeSpec { + if x != nil { + return x.TypeSpec + } + return nil +} + +type GenericEnumTypeSpec_Member struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + DefaultValue int32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + Annotations []string `protobuf:"bytes,3,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,4,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,5,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericEnumTypeSpec_Member) Reset() { + *x = GenericEnumTypeSpec_Member{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericEnumTypeSpec_Member) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericEnumTypeSpec_Member) ProtoMessage() {} + +func (x *GenericEnumTypeSpec_Member) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[61] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericEnumTypeSpec_Member.ProtoReflect.Descriptor instead. +func (*GenericEnumTypeSpec_Member) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{39, 0} +} + +func (x *GenericEnumTypeSpec_Member) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GenericEnumTypeSpec_Member) GetDefaultValue() int32 { + if x != nil { + return x.DefaultValue + } + return 0 +} + +func (x *GenericEnumTypeSpec_Member) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericEnumTypeSpec_Member) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericEnumTypeSpec_Member) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +type GenericSerializableEnumTypeSpec_Member struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + DefaultValue int32 `protobuf:"varint,3,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + Annotations []string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,5,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,6,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *GenericSerializableEnumTypeSpec_Member) Reset() { + *x = GenericSerializableEnumTypeSpec_Member{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericSerializableEnumTypeSpec_Member) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericSerializableEnumTypeSpec_Member) ProtoMessage() {} + +func (x *GenericSerializableEnumTypeSpec_Member) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[62] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericSerializableEnumTypeSpec_Member.ProtoReflect.Descriptor instead. +func (*GenericSerializableEnumTypeSpec_Member) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{40, 0} +} + +func (x *GenericSerializableEnumTypeSpec_Member) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GenericSerializableEnumTypeSpec_Member) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +func (x *GenericSerializableEnumTypeSpec_Member) GetDefaultValue() int32 { + if x != nil { + return x.DefaultValue + } + return 0 +} + +func (x *GenericSerializableEnumTypeSpec_Member) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericSerializableEnumTypeSpec_Member) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *GenericSerializableEnumTypeSpec_Member) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +type GenericNewTypeTranslation_SdnString struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GenericNewTypeTranslation_SdnString) Reset() { + *x = GenericNewTypeTranslation_SdnString{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4types_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericNewTypeTranslation_SdnString) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericNewTypeTranslation_SdnString) ProtoMessage() {} + +func (x *GenericNewTypeTranslation_SdnString) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4types_proto_msgTypes[63] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericNewTypeTranslation_SdnString.ProtoReflect.Descriptor instead. +func (*GenericNewTypeTranslation_SdnString) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{41, 0} +} + var File_p4_config_v1_p4types_proto protoreflect.FileDescriptor var file_p4_config_v1_p4types_proto_rawDesc = []byte{ @@ -2710,10 +4391,363 @@ var file_p4_config_v1_p4types_proto_rawDesc = []byte{ 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x22, 0xf5, 0x06, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, + 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, + 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x12, 0x3e, 0x0a, + 0x05, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x3e, 0x0a, + 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x63, 0x0a, + 0x12, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, + 0x6d, 0x73, 0x12, 0x48, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x5f, 0x0a, 0x0c, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, + 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x0a, 0x45, 0x6e, + 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0d, + 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc7, 0x05, 0x0a, 0x13, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6b, 0x65, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x48, 0x00, 0x52, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, + 0x36, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, + 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x6f, 0x6f, 0x6c, + 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x06, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x06, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x0d, + 0x75, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, + 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, + 0x53, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, + 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x34, 0x0a, + 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x65, + 0x6e, 0x75, 0x6d, 0x12, 0x4d, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, + 0x52, 0x10, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x3b, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x37, 0x0a, 0x07, 0x70, 0x34, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, + 0x52, 0x06, 0x70, 0x34, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, + 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, 0x26, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x11, 0x0a, + 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, + 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x6c, 0x6f, 0x61, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x22, 0xa4, 0x03, 0x0a, 0x1c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x42, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6b, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x34, 0x0a, 0x03, 0x62, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x03, 0x62, 0x69, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x69, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x49, + 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, + 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x76, 0x61, 0x72, 0x62, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x06, 0x76, 0x61, 0x72, 0x62, 0x69, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0b, + 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, 0x55, 0x0a, 0x12, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, + 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x55, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x49, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5f, 0x0a, 0x15, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x42, 0x69, 0x74, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x03, 0x0a, 0x15, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, + 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5c, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, + 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xd9, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3e, + 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x20, + 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, + 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, + 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0xe1, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x55, 0x6e, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x53, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, + 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, + 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x04, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x8f, + 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0xb2, 0x05, 0x0a, 0x1f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x49, 0x0a, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, + 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x0e, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x4e, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, + 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xa5, 0x02, + 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x64, 0x6e, 0x5f, 0x62, 0x69, 0x74, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0b, 0x73, + 0x64, 0x6e, 0x42, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x52, 0x0a, 0x0a, 0x73, 0x64, + 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x48, 0x00, 0x52, 0x09, 0x73, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x0b, + 0x0a, 0x09, 0x53, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x0a, 0x0a, 0x08, 0x73, + 0x64, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x92, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x48, + 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, + 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x72, 0x65, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x2d, 0x5a, 0x2b, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, + 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, + 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -2728,7 +4762,7 @@ func file_p4_config_v1_p4types_proto_rawDescGZIP() []byte { return file_p4_config_v1_p4types_proto_rawDescData } -var file_p4_config_v1_p4types_proto_msgTypes = make([]protoimpl.MessageInfo, 38) +var file_p4_config_v1_p4types_proto_msgTypes = make([]protoimpl.MessageInfo, 64) var file_p4_config_v1_p4types_proto_goTypes = []interface{}{ (*P4TypeInfo)(nil), // 0: p4.config.v1.P4TypeInfo (*P4DataTypeSpec)(nil), // 1: p4.config.v1.P4DataTypeSpec @@ -2756,92 +4790,172 @@ var file_p4_config_v1_p4types_proto_goTypes = []interface{}{ (*P4ErrorTypeSpec)(nil), // 23: p4.config.v1.P4ErrorTypeSpec (*P4NewTypeTranslation)(nil), // 24: p4.config.v1.P4NewTypeTranslation (*P4NewTypeSpec)(nil), // 25: p4.config.v1.P4NewTypeSpec - nil, // 26: p4.config.v1.P4TypeInfo.StructsEntry - nil, // 27: p4.config.v1.P4TypeInfo.HeadersEntry - nil, // 28: p4.config.v1.P4TypeInfo.HeaderUnionsEntry - nil, // 29: p4.config.v1.P4TypeInfo.EnumsEntry - nil, // 30: p4.config.v1.P4TypeInfo.SerializableEnumsEntry - nil, // 31: p4.config.v1.P4TypeInfo.NewTypesEntry - (*P4StructTypeSpec_Member)(nil), // 32: p4.config.v1.P4StructTypeSpec.Member - (*P4HeaderTypeSpec_Member)(nil), // 33: p4.config.v1.P4HeaderTypeSpec.Member - (*P4HeaderUnionTypeSpec_Member)(nil), // 34: p4.config.v1.P4HeaderUnionTypeSpec.Member - (*P4EnumTypeSpec_Member)(nil), // 35: p4.config.v1.P4EnumTypeSpec.Member - (*P4SerializableEnumTypeSpec_Member)(nil), // 36: p4.config.v1.P4SerializableEnumTypeSpec.Member - (*P4NewTypeTranslation_SdnString)(nil), // 37: p4.config.v1.P4NewTypeTranslation.SdnString + (*GenericTypeInfo)(nil), // 26: p4.config.v1.GenericTypeInfo + (*GenericDataTypeSpec)(nil), // 27: p4.config.v1.GenericDataTypeSpec + (*GenericNamedType)(nil), // 28: p4.config.v1.GenericNamedType + (*GenericBoolType)(nil), // 29: p4.config.v1.GenericBoolType + (*GenericFloatType)(nil), // 30: p4.config.v1.GenericFloatType + (*GenericBitstringLikeTypeSpec)(nil), // 31: p4.config.v1.GenericBitstringLikeTypeSpec + (*GenericBitTypeSpec)(nil), // 32: p4.config.v1.GenericBitTypeSpec + (*GenericIntTypeSpec)(nil), // 33: p4.config.v1.GenericIntTypeSpec + (*GenericVarbitTypeSpec)(nil), // 34: p4.config.v1.GenericVarbitTypeSpec + (*GenericStructTypeSpec)(nil), // 35: p4.config.v1.GenericStructTypeSpec + (*GenericListTypeSpec)(nil), // 36: p4.config.v1.GenericListTypeSpec + (*GenericUnorderedSetTypeSpec)(nil), // 37: p4.config.v1.GenericUnorderedSetTypeSpec + (*GenericStringSpec)(nil), // 38: p4.config.v1.GenericStringSpec + (*GenericEnumTypeSpec)(nil), // 39: p4.config.v1.GenericEnumTypeSpec + (*GenericSerializableEnumTypeSpec)(nil), // 40: p4.config.v1.GenericSerializableEnumTypeSpec + (*GenericNewTypeTranslation)(nil), // 41: p4.config.v1.GenericNewTypeTranslation + (*GenericNewTypeSpec)(nil), // 42: p4.config.v1.GenericNewTypeSpec + nil, // 43: p4.config.v1.P4TypeInfo.StructsEntry + nil, // 44: p4.config.v1.P4TypeInfo.HeadersEntry + nil, // 45: p4.config.v1.P4TypeInfo.HeaderUnionsEntry + nil, // 46: p4.config.v1.P4TypeInfo.EnumsEntry + nil, // 47: p4.config.v1.P4TypeInfo.SerializableEnumsEntry + nil, // 48: p4.config.v1.P4TypeInfo.NewTypesEntry + (*P4StructTypeSpec_Member)(nil), // 49: p4.config.v1.P4StructTypeSpec.Member + (*P4HeaderTypeSpec_Member)(nil), // 50: p4.config.v1.P4HeaderTypeSpec.Member + (*P4HeaderUnionTypeSpec_Member)(nil), // 51: p4.config.v1.P4HeaderUnionTypeSpec.Member + (*P4EnumTypeSpec_Member)(nil), // 52: p4.config.v1.P4EnumTypeSpec.Member + (*P4SerializableEnumTypeSpec_Member)(nil), // 53: p4.config.v1.P4SerializableEnumTypeSpec.Member + (*P4NewTypeTranslation_SdnString)(nil), // 54: p4.config.v1.P4NewTypeTranslation.SdnString + nil, // 55: p4.config.v1.GenericTypeInfo.StructsEntry + nil, // 56: p4.config.v1.GenericTypeInfo.ListsEntry + nil, // 57: p4.config.v1.GenericTypeInfo.EnumsEntry + nil, // 58: p4.config.v1.GenericTypeInfo.SerializableEnumsEntry + nil, // 59: p4.config.v1.GenericTypeInfo.NewTypesEntry + (*GenericStructTypeSpec_Member)(nil), // 60: p4.config.v1.GenericStructTypeSpec.Member + (*GenericEnumTypeSpec_Member)(nil), // 61: p4.config.v1.GenericEnumTypeSpec.Member + (*GenericSerializableEnumTypeSpec_Member)(nil), // 62: p4.config.v1.GenericSerializableEnumTypeSpec.Member + (*GenericNewTypeTranslation_SdnString)(nil), // 63: p4.config.v1.GenericNewTypeTranslation.SdnString } var file_p4_config_v1_p4types_proto_depIdxs = []int32{ - 26, // 0: p4.config.v1.P4TypeInfo.structs:type_name -> p4.config.v1.P4TypeInfo.StructsEntry - 27, // 1: p4.config.v1.P4TypeInfo.headers:type_name -> p4.config.v1.P4TypeInfo.HeadersEntry - 28, // 2: p4.config.v1.P4TypeInfo.header_unions:type_name -> p4.config.v1.P4TypeInfo.HeaderUnionsEntry - 29, // 3: p4.config.v1.P4TypeInfo.enums:type_name -> p4.config.v1.P4TypeInfo.EnumsEntry - 23, // 4: p4.config.v1.P4TypeInfo.error:type_name -> p4.config.v1.P4ErrorTypeSpec - 30, // 5: p4.config.v1.P4TypeInfo.serializable_enums:type_name -> p4.config.v1.P4TypeInfo.SerializableEnumsEntry - 31, // 6: p4.config.v1.P4TypeInfo.new_types:type_name -> p4.config.v1.P4TypeInfo.NewTypesEntry - 5, // 7: p4.config.v1.P4DataTypeSpec.bitstring:type_name -> p4.config.v1.P4BitstringLikeTypeSpec - 3, // 8: p4.config.v1.P4DataTypeSpec.bool:type_name -> p4.config.v1.P4BoolType - 9, // 9: p4.config.v1.P4DataTypeSpec.tuple:type_name -> p4.config.v1.P4TupleTypeSpec - 2, // 10: p4.config.v1.P4DataTypeSpec.struct:type_name -> p4.config.v1.P4NamedType - 2, // 11: p4.config.v1.P4DataTypeSpec.header:type_name -> p4.config.v1.P4NamedType - 2, // 12: p4.config.v1.P4DataTypeSpec.header_union:type_name -> p4.config.v1.P4NamedType - 13, // 13: p4.config.v1.P4DataTypeSpec.header_stack:type_name -> p4.config.v1.P4HeaderStackTypeSpec - 14, // 14: p4.config.v1.P4DataTypeSpec.header_union_stack:type_name -> p4.config.v1.P4HeaderUnionStackTypeSpec - 2, // 15: p4.config.v1.P4DataTypeSpec.enum:type_name -> p4.config.v1.P4NamedType - 4, // 16: p4.config.v1.P4DataTypeSpec.error:type_name -> p4.config.v1.P4ErrorType - 2, // 17: p4.config.v1.P4DataTypeSpec.serializable_enum:type_name -> p4.config.v1.P4NamedType - 2, // 18: p4.config.v1.P4DataTypeSpec.new_type:type_name -> p4.config.v1.P4NamedType - 6, // 19: p4.config.v1.P4BitstringLikeTypeSpec.bit:type_name -> p4.config.v1.P4BitTypeSpec - 7, // 20: p4.config.v1.P4BitstringLikeTypeSpec.int:type_name -> p4.config.v1.P4IntTypeSpec - 8, // 21: p4.config.v1.P4BitstringLikeTypeSpec.varbit:type_name -> p4.config.v1.P4VarbitTypeSpec - 20, // 22: p4.config.v1.P4BitstringLikeTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 23: p4.config.v1.P4BitstringLikeTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 1, // 24: p4.config.v1.P4TupleTypeSpec.members:type_name -> p4.config.v1.P4DataTypeSpec - 32, // 25: p4.config.v1.P4StructTypeSpec.members:type_name -> p4.config.v1.P4StructTypeSpec.Member - 20, // 26: p4.config.v1.P4StructTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 27: p4.config.v1.P4StructTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 33, // 28: p4.config.v1.P4HeaderTypeSpec.members:type_name -> p4.config.v1.P4HeaderTypeSpec.Member - 20, // 29: p4.config.v1.P4HeaderTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 30: p4.config.v1.P4HeaderTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 34, // 31: p4.config.v1.P4HeaderUnionTypeSpec.members:type_name -> p4.config.v1.P4HeaderUnionTypeSpec.Member - 20, // 32: p4.config.v1.P4HeaderUnionTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 33: p4.config.v1.P4HeaderUnionTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 2, // 34: p4.config.v1.P4HeaderStackTypeSpec.header:type_name -> p4.config.v1.P4NamedType - 2, // 35: p4.config.v1.P4HeaderUnionStackTypeSpec.header_union:type_name -> p4.config.v1.P4NamedType - 17, // 36: p4.config.v1.KeyValuePair.value:type_name -> p4.config.v1.Expression - 15, // 37: p4.config.v1.KeyValuePairList.kv_pairs:type_name -> p4.config.v1.KeyValuePair - 17, // 38: p4.config.v1.ExpressionList.expressions:type_name -> p4.config.v1.Expression - 18, // 39: p4.config.v1.StructuredAnnotation.expression_list:type_name -> p4.config.v1.ExpressionList - 16, // 40: p4.config.v1.StructuredAnnotation.kv_pair_list:type_name -> p4.config.v1.KeyValuePairList - 20, // 41: p4.config.v1.StructuredAnnotation.source_location:type_name -> p4.config.v1.SourceLocation - 35, // 42: p4.config.v1.P4EnumTypeSpec.members:type_name -> p4.config.v1.P4EnumTypeSpec.Member - 20, // 43: p4.config.v1.P4EnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 44: p4.config.v1.P4EnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 6, // 45: p4.config.v1.P4SerializableEnumTypeSpec.underlying_type:type_name -> p4.config.v1.P4BitTypeSpec - 36, // 46: p4.config.v1.P4SerializableEnumTypeSpec.members:type_name -> p4.config.v1.P4SerializableEnumTypeSpec.Member - 20, // 47: p4.config.v1.P4SerializableEnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 48: p4.config.v1.P4SerializableEnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 37, // 49: p4.config.v1.P4NewTypeTranslation.sdn_string:type_name -> p4.config.v1.P4NewTypeTranslation.SdnString - 1, // 50: p4.config.v1.P4NewTypeSpec.original_type:type_name -> p4.config.v1.P4DataTypeSpec - 24, // 51: p4.config.v1.P4NewTypeSpec.translated_type:type_name -> p4.config.v1.P4NewTypeTranslation - 20, // 52: p4.config.v1.P4NewTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 53: p4.config.v1.P4NewTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 10, // 54: p4.config.v1.P4TypeInfo.StructsEntry.value:type_name -> p4.config.v1.P4StructTypeSpec - 11, // 55: p4.config.v1.P4TypeInfo.HeadersEntry.value:type_name -> p4.config.v1.P4HeaderTypeSpec - 12, // 56: p4.config.v1.P4TypeInfo.HeaderUnionsEntry.value:type_name -> p4.config.v1.P4HeaderUnionTypeSpec - 21, // 57: p4.config.v1.P4TypeInfo.EnumsEntry.value:type_name -> p4.config.v1.P4EnumTypeSpec - 22, // 58: p4.config.v1.P4TypeInfo.SerializableEnumsEntry.value:type_name -> p4.config.v1.P4SerializableEnumTypeSpec - 25, // 59: p4.config.v1.P4TypeInfo.NewTypesEntry.value:type_name -> p4.config.v1.P4NewTypeSpec - 1, // 60: p4.config.v1.P4StructTypeSpec.Member.type_spec:type_name -> p4.config.v1.P4DataTypeSpec - 5, // 61: p4.config.v1.P4HeaderTypeSpec.Member.type_spec:type_name -> p4.config.v1.P4BitstringLikeTypeSpec - 2, // 62: p4.config.v1.P4HeaderUnionTypeSpec.Member.header:type_name -> p4.config.v1.P4NamedType - 20, // 63: p4.config.v1.P4EnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 64: p4.config.v1.P4EnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 20, // 65: p4.config.v1.P4SerializableEnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 66: p4.config.v1.P4SerializableEnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 67, // [67:67] is the sub-list for method output_type - 67, // [67:67] is the sub-list for method input_type - 67, // [67:67] is the sub-list for extension type_name - 67, // [67:67] is the sub-list for extension extendee - 0, // [0:67] is the sub-list for field type_name + 43, // 0: p4.config.v1.P4TypeInfo.structs:type_name -> p4.config.v1.P4TypeInfo.StructsEntry + 44, // 1: p4.config.v1.P4TypeInfo.headers:type_name -> p4.config.v1.P4TypeInfo.HeadersEntry + 45, // 2: p4.config.v1.P4TypeInfo.header_unions:type_name -> p4.config.v1.P4TypeInfo.HeaderUnionsEntry + 46, // 3: p4.config.v1.P4TypeInfo.enums:type_name -> p4.config.v1.P4TypeInfo.EnumsEntry + 23, // 4: p4.config.v1.P4TypeInfo.error:type_name -> p4.config.v1.P4ErrorTypeSpec + 47, // 5: p4.config.v1.P4TypeInfo.serializable_enums:type_name -> p4.config.v1.P4TypeInfo.SerializableEnumsEntry + 48, // 6: p4.config.v1.P4TypeInfo.new_types:type_name -> p4.config.v1.P4TypeInfo.NewTypesEntry + 5, // 7: p4.config.v1.P4DataTypeSpec.bitstring:type_name -> p4.config.v1.P4BitstringLikeTypeSpec + 3, // 8: p4.config.v1.P4DataTypeSpec.bool:type_name -> p4.config.v1.P4BoolType + 9, // 9: p4.config.v1.P4DataTypeSpec.tuple:type_name -> p4.config.v1.P4TupleTypeSpec + 2, // 10: p4.config.v1.P4DataTypeSpec.struct:type_name -> p4.config.v1.P4NamedType + 2, // 11: p4.config.v1.P4DataTypeSpec.header:type_name -> p4.config.v1.P4NamedType + 2, // 12: p4.config.v1.P4DataTypeSpec.header_union:type_name -> p4.config.v1.P4NamedType + 13, // 13: p4.config.v1.P4DataTypeSpec.header_stack:type_name -> p4.config.v1.P4HeaderStackTypeSpec + 14, // 14: p4.config.v1.P4DataTypeSpec.header_union_stack:type_name -> p4.config.v1.P4HeaderUnionStackTypeSpec + 2, // 15: p4.config.v1.P4DataTypeSpec.enum:type_name -> p4.config.v1.P4NamedType + 4, // 16: p4.config.v1.P4DataTypeSpec.error:type_name -> p4.config.v1.P4ErrorType + 2, // 17: p4.config.v1.P4DataTypeSpec.serializable_enum:type_name -> p4.config.v1.P4NamedType + 2, // 18: p4.config.v1.P4DataTypeSpec.new_type:type_name -> p4.config.v1.P4NamedType + 6, // 19: p4.config.v1.P4BitstringLikeTypeSpec.bit:type_name -> p4.config.v1.P4BitTypeSpec + 7, // 20: p4.config.v1.P4BitstringLikeTypeSpec.int:type_name -> p4.config.v1.P4IntTypeSpec + 8, // 21: p4.config.v1.P4BitstringLikeTypeSpec.varbit:type_name -> p4.config.v1.P4VarbitTypeSpec + 20, // 22: p4.config.v1.P4BitstringLikeTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 23: p4.config.v1.P4BitstringLikeTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 1, // 24: p4.config.v1.P4TupleTypeSpec.members:type_name -> p4.config.v1.P4DataTypeSpec + 49, // 25: p4.config.v1.P4StructTypeSpec.members:type_name -> p4.config.v1.P4StructTypeSpec.Member + 20, // 26: p4.config.v1.P4StructTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 27: p4.config.v1.P4StructTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 50, // 28: p4.config.v1.P4HeaderTypeSpec.members:type_name -> p4.config.v1.P4HeaderTypeSpec.Member + 20, // 29: p4.config.v1.P4HeaderTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 30: p4.config.v1.P4HeaderTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 51, // 31: p4.config.v1.P4HeaderUnionTypeSpec.members:type_name -> p4.config.v1.P4HeaderUnionTypeSpec.Member + 20, // 32: p4.config.v1.P4HeaderUnionTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 33: p4.config.v1.P4HeaderUnionTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 2, // 34: p4.config.v1.P4HeaderStackTypeSpec.header:type_name -> p4.config.v1.P4NamedType + 2, // 35: p4.config.v1.P4HeaderUnionStackTypeSpec.header_union:type_name -> p4.config.v1.P4NamedType + 17, // 36: p4.config.v1.KeyValuePair.value:type_name -> p4.config.v1.Expression + 15, // 37: p4.config.v1.KeyValuePairList.kv_pairs:type_name -> p4.config.v1.KeyValuePair + 17, // 38: p4.config.v1.ExpressionList.expressions:type_name -> p4.config.v1.Expression + 18, // 39: p4.config.v1.StructuredAnnotation.expression_list:type_name -> p4.config.v1.ExpressionList + 16, // 40: p4.config.v1.StructuredAnnotation.kv_pair_list:type_name -> p4.config.v1.KeyValuePairList + 20, // 41: p4.config.v1.StructuredAnnotation.source_location:type_name -> p4.config.v1.SourceLocation + 52, // 42: p4.config.v1.P4EnumTypeSpec.members:type_name -> p4.config.v1.P4EnumTypeSpec.Member + 20, // 43: p4.config.v1.P4EnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 44: p4.config.v1.P4EnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 6, // 45: p4.config.v1.P4SerializableEnumTypeSpec.underlying_type:type_name -> p4.config.v1.P4BitTypeSpec + 53, // 46: p4.config.v1.P4SerializableEnumTypeSpec.members:type_name -> p4.config.v1.P4SerializableEnumTypeSpec.Member + 20, // 47: p4.config.v1.P4SerializableEnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 48: p4.config.v1.P4SerializableEnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 54, // 49: p4.config.v1.P4NewTypeTranslation.sdn_string:type_name -> p4.config.v1.P4NewTypeTranslation.SdnString + 1, // 50: p4.config.v1.P4NewTypeSpec.original_type:type_name -> p4.config.v1.P4DataTypeSpec + 24, // 51: p4.config.v1.P4NewTypeSpec.translated_type:type_name -> p4.config.v1.P4NewTypeTranslation + 20, // 52: p4.config.v1.P4NewTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 53: p4.config.v1.P4NewTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 55, // 54: p4.config.v1.GenericTypeInfo.structs:type_name -> p4.config.v1.GenericTypeInfo.StructsEntry + 56, // 55: p4.config.v1.GenericTypeInfo.lists:type_name -> p4.config.v1.GenericTypeInfo.ListsEntry + 57, // 56: p4.config.v1.GenericTypeInfo.enums:type_name -> p4.config.v1.GenericTypeInfo.EnumsEntry + 58, // 57: p4.config.v1.GenericTypeInfo.serializable_enums:type_name -> p4.config.v1.GenericTypeInfo.SerializableEnumsEntry + 59, // 58: p4.config.v1.GenericTypeInfo.new_types:type_name -> p4.config.v1.GenericTypeInfo.NewTypesEntry + 31, // 59: p4.config.v1.GenericDataTypeSpec.bitstring:type_name -> p4.config.v1.GenericBitstringLikeTypeSpec + 30, // 60: p4.config.v1.GenericDataTypeSpec.float:type_name -> p4.config.v1.GenericFloatType + 29, // 61: p4.config.v1.GenericDataTypeSpec.bool:type_name -> p4.config.v1.GenericBoolType + 28, // 62: p4.config.v1.GenericDataTypeSpec.struct:type_name -> p4.config.v1.GenericNamedType + 28, // 63: p4.config.v1.GenericDataTypeSpec.list:type_name -> p4.config.v1.GenericNamedType + 28, // 64: p4.config.v1.GenericDataTypeSpec.unordered_set:type_name -> p4.config.v1.GenericNamedType + 28, // 65: p4.config.v1.GenericDataTypeSpec.string:type_name -> p4.config.v1.GenericNamedType + 28, // 66: p4.config.v1.GenericDataTypeSpec.enum:type_name -> p4.config.v1.GenericNamedType + 28, // 67: p4.config.v1.GenericDataTypeSpec.serializable_enum:type_name -> p4.config.v1.GenericNamedType + 28, // 68: p4.config.v1.GenericDataTypeSpec.new_type:type_name -> p4.config.v1.GenericNamedType + 1, // 69: p4.config.v1.GenericDataTypeSpec.p4_type:type_name -> p4.config.v1.P4DataTypeSpec + 32, // 70: p4.config.v1.GenericBitstringLikeTypeSpec.bit:type_name -> p4.config.v1.GenericBitTypeSpec + 33, // 71: p4.config.v1.GenericBitstringLikeTypeSpec.int:type_name -> p4.config.v1.GenericIntTypeSpec + 34, // 72: p4.config.v1.GenericBitstringLikeTypeSpec.varbit:type_name -> p4.config.v1.GenericVarbitTypeSpec + 20, // 73: p4.config.v1.GenericBitstringLikeTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 74: p4.config.v1.GenericBitstringLikeTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 60, // 75: p4.config.v1.GenericStructTypeSpec.members:type_name -> p4.config.v1.GenericStructTypeSpec.Member + 20, // 76: p4.config.v1.GenericStructTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 77: p4.config.v1.GenericStructTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 27, // 78: p4.config.v1.GenericListTypeSpec.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec + 20, // 79: p4.config.v1.GenericListTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 80: p4.config.v1.GenericListTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 27, // 81: p4.config.v1.GenericUnorderedSetTypeSpec.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec + 20, // 82: p4.config.v1.GenericUnorderedSetTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 83: p4.config.v1.GenericUnorderedSetTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 20, // 84: p4.config.v1.GenericStringSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 85: p4.config.v1.GenericStringSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 61, // 86: p4.config.v1.GenericEnumTypeSpec.members:type_name -> p4.config.v1.GenericEnumTypeSpec.Member + 20, // 87: p4.config.v1.GenericEnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 88: p4.config.v1.GenericEnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 32, // 89: p4.config.v1.GenericSerializableEnumTypeSpec.underlying_type:type_name -> p4.config.v1.GenericBitTypeSpec + 62, // 90: p4.config.v1.GenericSerializableEnumTypeSpec.members:type_name -> p4.config.v1.GenericSerializableEnumTypeSpec.Member + 20, // 91: p4.config.v1.GenericSerializableEnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 92: p4.config.v1.GenericSerializableEnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 63, // 93: p4.config.v1.GenericNewTypeTranslation.sdn_string:type_name -> p4.config.v1.GenericNewTypeTranslation.SdnString + 27, // 94: p4.config.v1.GenericNewTypeSpec.original_type:type_name -> p4.config.v1.GenericDataTypeSpec + 41, // 95: p4.config.v1.GenericNewTypeSpec.translated_type:type_name -> p4.config.v1.GenericNewTypeTranslation + 20, // 96: p4.config.v1.GenericNewTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 97: p4.config.v1.GenericNewTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 10, // 98: p4.config.v1.P4TypeInfo.StructsEntry.value:type_name -> p4.config.v1.P4StructTypeSpec + 11, // 99: p4.config.v1.P4TypeInfo.HeadersEntry.value:type_name -> p4.config.v1.P4HeaderTypeSpec + 12, // 100: p4.config.v1.P4TypeInfo.HeaderUnionsEntry.value:type_name -> p4.config.v1.P4HeaderUnionTypeSpec + 21, // 101: p4.config.v1.P4TypeInfo.EnumsEntry.value:type_name -> p4.config.v1.P4EnumTypeSpec + 22, // 102: p4.config.v1.P4TypeInfo.SerializableEnumsEntry.value:type_name -> p4.config.v1.P4SerializableEnumTypeSpec + 25, // 103: p4.config.v1.P4TypeInfo.NewTypesEntry.value:type_name -> p4.config.v1.P4NewTypeSpec + 1, // 104: p4.config.v1.P4StructTypeSpec.Member.type_spec:type_name -> p4.config.v1.P4DataTypeSpec + 5, // 105: p4.config.v1.P4HeaderTypeSpec.Member.type_spec:type_name -> p4.config.v1.P4BitstringLikeTypeSpec + 2, // 106: p4.config.v1.P4HeaderUnionTypeSpec.Member.header:type_name -> p4.config.v1.P4NamedType + 20, // 107: p4.config.v1.P4EnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 108: p4.config.v1.P4EnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 20, // 109: p4.config.v1.P4SerializableEnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 110: p4.config.v1.P4SerializableEnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 35, // 111: p4.config.v1.GenericTypeInfo.StructsEntry.value:type_name -> p4.config.v1.GenericStructTypeSpec + 36, // 112: p4.config.v1.GenericTypeInfo.ListsEntry.value:type_name -> p4.config.v1.GenericListTypeSpec + 39, // 113: p4.config.v1.GenericTypeInfo.EnumsEntry.value:type_name -> p4.config.v1.GenericEnumTypeSpec + 40, // 114: p4.config.v1.GenericTypeInfo.SerializableEnumsEntry.value:type_name -> p4.config.v1.GenericSerializableEnumTypeSpec + 42, // 115: p4.config.v1.GenericTypeInfo.NewTypesEntry.value:type_name -> p4.config.v1.GenericNewTypeSpec + 27, // 116: p4.config.v1.GenericStructTypeSpec.Member.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec + 20, // 117: p4.config.v1.GenericEnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 118: p4.config.v1.GenericEnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 20, // 119: p4.config.v1.GenericSerializableEnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 120: p4.config.v1.GenericSerializableEnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 121, // [121:121] is the sub-list for method output_type + 121, // [121:121] is the sub-list for method input_type + 121, // [121:121] is the sub-list for extension type_name + 121, // [121:121] is the sub-list for extension extendee + 0, // [0:121] is the sub-list for field type_name } func init() { file_p4_config_v1_p4types_proto_init() } @@ -3162,8 +5276,80 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } + file_p4_config_v1_p4types_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericTypeInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericDataTypeSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericNamedType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericBoolType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFloatType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericBitstringLikeTypeSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } file_p4_config_v1_p4types_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*P4StructTypeSpec_Member); i { + switch v := v.(*GenericBitTypeSpec); i { case 0: return &v.state case 1: @@ -3175,7 +5361,7 @@ func file_p4_config_v1_p4types_proto_init() { } } file_p4_config_v1_p4types_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*P4HeaderTypeSpec_Member); i { + switch v := v.(*GenericIntTypeSpec); i { case 0: return &v.state case 1: @@ -3187,7 +5373,7 @@ func file_p4_config_v1_p4types_proto_init() { } } file_p4_config_v1_p4types_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*P4HeaderUnionTypeSpec_Member); i { + switch v := v.(*GenericVarbitTypeSpec); i { case 0: return &v.state case 1: @@ -3199,7 +5385,7 @@ func file_p4_config_v1_p4types_proto_init() { } } file_p4_config_v1_p4types_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*P4EnumTypeSpec_Member); i { + switch v := v.(*GenericStructTypeSpec); i { case 0: return &v.state case 1: @@ -3211,7 +5397,7 @@ func file_p4_config_v1_p4types_proto_init() { } } file_p4_config_v1_p4types_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*P4SerializableEnumTypeSpec_Member); i { + switch v := v.(*GenericListTypeSpec); i { case 0: return &v.state case 1: @@ -3223,6 +5409,138 @@ func file_p4_config_v1_p4types_proto_init() { } } file_p4_config_v1_p4types_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericUnorderedSetTypeSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericStringSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericEnumTypeSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericSerializableEnumTypeSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericNewTypeTranslation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericNewTypeSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*P4StructTypeSpec_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*P4HeaderTypeSpec_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*P4HeaderUnionTypeSpec_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*P4EnumTypeSpec_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*P4SerializableEnumTypeSpec_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*P4NewTypeTranslation_SdnString); i { case 0: return &v.state @@ -3234,6 +5552,54 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } + file_p4_config_v1_p4types_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericStructTypeSpec_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericEnumTypeSpec_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericSerializableEnumTypeSpec_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4types_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericNewTypeTranslation_SdnString); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_p4_config_v1_p4types_proto_msgTypes[1].OneofWrappers = []interface{}{ (*P4DataTypeSpec_Bitstring)(nil), @@ -3271,13 +5637,39 @@ func file_p4_config_v1_p4types_proto_init() { (*P4NewTypeSpec_OriginalType)(nil), (*P4NewTypeSpec_TranslatedType)(nil), } + file_p4_config_v1_p4types_proto_msgTypes[27].OneofWrappers = []interface{}{ + (*GenericDataTypeSpec_Bitstring)(nil), + (*GenericDataTypeSpec_Float)(nil), + (*GenericDataTypeSpec_Bool)(nil), + (*GenericDataTypeSpec_Struct)(nil), + (*GenericDataTypeSpec_List)(nil), + (*GenericDataTypeSpec_UnorderedSet)(nil), + (*GenericDataTypeSpec_String_)(nil), + (*GenericDataTypeSpec_Enum)(nil), + (*GenericDataTypeSpec_SerializableEnum)(nil), + (*GenericDataTypeSpec_NewType)(nil), + (*GenericDataTypeSpec_P4Type)(nil), + } + file_p4_config_v1_p4types_proto_msgTypes[31].OneofWrappers = []interface{}{ + (*GenericBitstringLikeTypeSpec_Bit)(nil), + (*GenericBitstringLikeTypeSpec_Int)(nil), + (*GenericBitstringLikeTypeSpec_Varbit)(nil), + } + file_p4_config_v1_p4types_proto_msgTypes[41].OneofWrappers = []interface{}{ + (*GenericNewTypeTranslation_SdnBitwidth)(nil), + (*GenericNewTypeTranslation_SdnString_)(nil), + } + file_p4_config_v1_p4types_proto_msgTypes[42].OneofWrappers = []interface{}{ + (*GenericNewTypeSpec_OriginalType)(nil), + (*GenericNewTypeSpec_TranslatedType)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p4_config_v1_p4types_proto_rawDesc, NumEnums: 0, - NumMessages: 38, + NumMessages: 64, NumExtensions: 0, NumServices: 0, }, diff --git a/go/p4/v1/p4data.pb.go b/go/p4/v1/p4data.pb.go index f287fb09..c28c75f4 100644 --- a/go/p4/v1/p4data.pb.go +++ b/go/p4/v1/p4data.pb.go @@ -569,6 +569,335 @@ func (x *P4HeaderUnionStack) GetEntries() []*P4HeaderUnion { return nil } +// //// Begin : GenericTables messages +type GenericData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Data: + // + // *GenericData_Bitstring + // *GenericData_Varbitstring + // *GenericData_Float + // *GenericData_Bool + // *GenericData_GenericStruct + // *GenericData_GenericList + // *GenericData_String_ + // *GenericData_Enum + // *GenericData_EnumValue + Data isGenericData_Data `protobuf_oneof:"data"` +} + +func (x *GenericData) Reset() { + *x = GenericData{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4data_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericData) ProtoMessage() {} + +func (x *GenericData) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4data_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericData.ProtoReflect.Descriptor instead. +func (*GenericData) Descriptor() ([]byte, []int) { + return file_p4_v1_p4data_proto_rawDescGZIP(), []int{7} +} + +func (m *GenericData) GetData() isGenericData_Data { + if m != nil { + return m.Data + } + return nil +} + +func (x *GenericData) GetBitstring() []byte { + if x, ok := x.GetData().(*GenericData_Bitstring); ok { + return x.Bitstring + } + return nil +} + +func (x *GenericData) GetVarbitstring() *GenericVarbit { + if x, ok := x.GetData().(*GenericData_Varbitstring); ok { + return x.Varbitstring + } + return nil +} + +func (x *GenericData) GetFloat() float32 { + if x, ok := x.GetData().(*GenericData_Float); ok { + return x.Float + } + return 0 +} + +func (x *GenericData) GetBool() bool { + if x, ok := x.GetData().(*GenericData_Bool); ok { + return x.Bool + } + return false +} + +func (x *GenericData) GetGenericStruct() *GenericStructLike { + if x, ok := x.GetData().(*GenericData_GenericStruct); ok { + return x.GenericStruct + } + return nil +} + +func (x *GenericData) GetGenericList() *GenericList { + if x, ok := x.GetData().(*GenericData_GenericList); ok { + return x.GenericList + } + return nil +} + +func (x *GenericData) GetString_() string { + if x, ok := x.GetData().(*GenericData_String_); ok { + return x.String_ + } + return "" +} + +func (x *GenericData) GetEnum() string { + if x, ok := x.GetData().(*GenericData_Enum); ok { + return x.Enum + } + return "" +} + +func (x *GenericData) GetEnumValue() []byte { + if x, ok := x.GetData().(*GenericData_EnumValue); ok { + return x.EnumValue + } + return nil +} + +type isGenericData_Data interface { + isGenericData_Data() +} + +type GenericData_Bitstring struct { + Bitstring []byte `protobuf:"bytes,1,opt,name=bitstring,proto3,oneof"` +} + +type GenericData_Varbitstring struct { + Varbitstring *GenericVarbit `protobuf:"bytes,2,opt,name=varbitstring,proto3,oneof"` +} + +type GenericData_Float struct { + Float float32 `protobuf:"fixed32,3,opt,name=float,proto3,oneof"` +} + +type GenericData_Bool struct { + Bool bool `protobuf:"varint,4,opt,name=bool,proto3,oneof"` +} + +type GenericData_GenericStruct struct { + GenericStruct *GenericStructLike `protobuf:"bytes,5,opt,name=generic_struct,json=genericStruct,proto3,oneof"` // one struct +} + +type GenericData_GenericList struct { + GenericList *GenericList `protobuf:"bytes,6,opt,name=generic_list,json=genericList,proto3,oneof"` // list of bytes/floats/bool/structs/strings/enums/enum_values. +} + +type GenericData_String_ struct { + String_ string `protobuf:"bytes,7,opt,name=string,proto3,oneof"` // control plane arbitrary length string +} + +type GenericData_Enum struct { + Enum string `protobuf:"bytes,8,opt,name=enum,proto3,oneof"` // safe (non-serializable) enums only +} + +type GenericData_EnumValue struct { + EnumValue []byte `protobuf:"bytes,9,opt,name=enum_value,json=enumValue,proto3,oneof"` // serializable enums only +} + +func (*GenericData_Bitstring) isGenericData_Data() {} + +func (*GenericData_Varbitstring) isGenericData_Data() {} + +func (*GenericData_Float) isGenericData_Data() {} + +func (*GenericData_Bool) isGenericData_Data() {} + +func (*GenericData_GenericStruct) isGenericData_Data() {} + +func (*GenericData_GenericList) isGenericData_Data() {} + +func (*GenericData_String_) isGenericData_Data() {} + +func (*GenericData_Enum) isGenericData_Data() {} + +func (*GenericData_EnumValue) isGenericData_Data() {} + +type GenericStructLike struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Members []*GenericData `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` +} + +func (x *GenericStructLike) Reset() { + *x = GenericStructLike{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4data_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericStructLike) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericStructLike) ProtoMessage() {} + +func (x *GenericStructLike) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4data_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericStructLike.ProtoReflect.Descriptor instead. +func (*GenericStructLike) Descriptor() ([]byte, []int) { + return file_p4_v1_p4data_proto_rawDescGZIP(), []int{8} +} + +func (x *GenericStructLike) GetMembers() []*GenericData { + if x != nil { + return x.Members + } + return nil +} + +type GenericList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Members []*GenericData `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` +} + +func (x *GenericList) Reset() { + *x = GenericList{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4data_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericList) ProtoMessage() {} + +func (x *GenericList) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4data_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericList.ProtoReflect.Descriptor instead. +func (*GenericList) Descriptor() ([]byte, []int) { + return file_p4_v1_p4data_proto_rawDescGZIP(), []int{9} +} + +func (x *GenericList) GetMembers() []*GenericData { + if x != nil { + return x.Members + } + return nil +} + +type GenericVarbit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Bitstring []byte `protobuf:"bytes,1,opt,name=bitstring,proto3" json:"bitstring,omitempty"` + Bitwidth int32 `protobuf:"varint,2,opt,name=bitwidth,proto3" json:"bitwidth,omitempty"` // dynamic bitwidth of the field +} + +func (x *GenericVarbit) Reset() { + *x = GenericVarbit{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4data_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericVarbit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericVarbit) ProtoMessage() {} + +func (x *GenericVarbit) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4data_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericVarbit.ProtoReflect.Descriptor instead. +func (*GenericVarbit) Descriptor() ([]byte, []int) { + return file_p4_v1_p4data_proto_rawDescGZIP(), []int{10} +} + +func (x *GenericVarbit) GetBitstring() []byte { + if x != nil { + return x.Bitstring + } + return nil +} + +func (x *GenericVarbit) GetBitwidth() int32 { + if x != nil { + return x.Bitwidth + } + return 0 +} + var File_p4_v1_p4data_proto protoreflect.FileDescriptor var file_p4_v1_p4data_proto_rawDesc = []byte{ @@ -633,10 +962,46 @@ var file_p4_v1_p4data_proto_rawDesc = []byte{ 0x65, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x2e, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, - 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, - 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, - 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, + 0xec, 0x02, 0x0a, 0x0b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x1e, 0x0a, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, + 0x3a, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x76, + 0x61, 0x72, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x05, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x05, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x41, 0x0a, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x69, 0x6b, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x37, 0x0a, 0x0c, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, + 0x14, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1f, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6e, 0x75, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x41, + 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, + 0x69, 0x6b, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x22, 0x3b, 0x0a, 0x0b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x2c, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x49, + 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, + 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, + 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -651,7 +1016,7 @@ func file_p4_v1_p4data_proto_rawDescGZIP() []byte { return file_p4_v1_p4data_proto_rawDescData } -var file_p4_v1_p4data_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_p4_v1_p4data_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_p4_v1_p4data_proto_goTypes = []interface{}{ (*P4Data)(nil), // 0: p4.v1.P4Data (*P4Varbit)(nil), // 1: p4.v1.P4Varbit @@ -660,6 +1025,10 @@ var file_p4_v1_p4data_proto_goTypes = []interface{}{ (*P4HeaderUnion)(nil), // 4: p4.v1.P4HeaderUnion (*P4HeaderStack)(nil), // 5: p4.v1.P4HeaderStack (*P4HeaderUnionStack)(nil), // 6: p4.v1.P4HeaderUnionStack + (*GenericData)(nil), // 7: p4.v1.GenericData + (*GenericStructLike)(nil), // 8: p4.v1.GenericStructLike + (*GenericList)(nil), // 9: p4.v1.GenericList + (*GenericVarbit)(nil), // 10: p4.v1.GenericVarbit } var file_p4_v1_p4data_proto_depIdxs = []int32{ 1, // 0: p4.v1.P4Data.varbit:type_name -> p4.v1.P4Varbit @@ -673,11 +1042,16 @@ var file_p4_v1_p4data_proto_depIdxs = []int32{ 3, // 8: p4.v1.P4HeaderUnion.valid_header:type_name -> p4.v1.P4Header 3, // 9: p4.v1.P4HeaderStack.entries:type_name -> p4.v1.P4Header 4, // 10: p4.v1.P4HeaderUnionStack.entries:type_name -> p4.v1.P4HeaderUnion - 11, // [11:11] is the sub-list for method output_type - 11, // [11:11] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 10, // 11: p4.v1.GenericData.varbitstring:type_name -> p4.v1.GenericVarbit + 8, // 12: p4.v1.GenericData.generic_struct:type_name -> p4.v1.GenericStructLike + 9, // 13: p4.v1.GenericData.generic_list:type_name -> p4.v1.GenericList + 7, // 14: p4.v1.GenericStructLike.members:type_name -> p4.v1.GenericData + 7, // 15: p4.v1.GenericList.members:type_name -> p4.v1.GenericData + 16, // [16:16] is the sub-list for method output_type + 16, // [16:16] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name } func init() { file_p4_v1_p4data_proto_init() } @@ -770,6 +1144,54 @@ func file_p4_v1_p4data_proto_init() { return nil } } + file_p4_v1_p4data_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4data_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericStructLike); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4data_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4data_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericVarbit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_p4_v1_p4data_proto_msgTypes[0].OneofWrappers = []interface{}{ (*P4Data_Bitstring)(nil), @@ -785,13 +1207,24 @@ func file_p4_v1_p4data_proto_init() { (*P4Data_Error)(nil), (*P4Data_EnumValue)(nil), } + file_p4_v1_p4data_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*GenericData_Bitstring)(nil), + (*GenericData_Varbitstring)(nil), + (*GenericData_Float)(nil), + (*GenericData_Bool)(nil), + (*GenericData_GenericStruct)(nil), + (*GenericData_GenericList)(nil), + (*GenericData_String_)(nil), + (*GenericData_Enum)(nil), + (*GenericData_EnumValue)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p4_v1_p4data_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 11, NumExtensions: 0, NumServices: 0, }, diff --git a/go/p4/v1/p4runtime.pb.go b/go/p4/v1/p4runtime.pb.go index 9dfadf7e..e3626a71 100644 --- a/go/p4/v1/p4runtime.pb.go +++ b/go/p4/v1/p4runtime.pb.go @@ -679,6 +679,7 @@ type Entity struct { // *Entity_ValueSetEntry // *Entity_RegisterEntry // *Entity_DigestEntry + // *Entity_GenericTableEntry Entity isEntity_Entity `protobuf_oneof:"entity"` } @@ -805,6 +806,13 @@ func (x *Entity) GetDigestEntry() *DigestEntry { return nil } +func (x *Entity) GetGenericTableEntry() *GenericTableEntry { + if x, ok := x.GetEntity().(*Entity_GenericTableEntry); ok { + return x.GenericTableEntry + } + return nil +} + type isEntity_Entity interface { isEntity_Entity() } @@ -857,6 +865,10 @@ type Entity_DigestEntry struct { DigestEntry *DigestEntry `protobuf:"bytes,12,opt,name=digest_entry,json=digestEntry,proto3,oneof"` } +type Entity_GenericTableEntry struct { + GenericTableEntry *GenericTableEntry `protobuf:"bytes,13,opt,name=generic_table_entry,json=genericTableEntry,proto3,oneof"` +} + func (*Entity_ExternEntry) isEntity_Entity() {} func (*Entity_TableEntry) isEntity_Entity() {} @@ -881,6 +893,8 @@ func (*Entity_RegisterEntry) isEntity_Entity() {} func (*Entity_DigestEntry) isEntity_Entity() {} +func (*Entity_GenericTableEntry) isEntity_Entity() {} + type ExternEntry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1009,6 +1023,10 @@ type TableEntry struct { TimeSinceLastHit *TableEntry_IdleTimeout `protobuf:"bytes,10,opt,name=time_since_last_hit,json=timeSinceLastHit,proto3" json:"time_since_last_hit,omitempty"` // Arbitrary metadata from the controller that is opaque to the target. Metadata []byte `protobuf:"bytes,11,opt,name=metadata,proto3" json:"metadata,omitempty"` + // list of GenericTableEntry + // The match fields aren't used. + // Only the union fields and priority + Resources []*GenericTableEntry `protobuf:"bytes,13,rep,name=resources,proto3" json:"resources,omitempty"` } func (x *TableEntry) Reset() { @@ -1128,6 +1146,13 @@ func (x *TableEntry) GetMetadata() []byte { return nil } +func (x *TableEntry) GetResources() []*GenericTableEntry { + if x != nil { + return x.Resources + } + return nil +} + // field_match_type ::= exact | ternary | lpm | range | optional type FieldMatch struct { state protoimpl.MessageState @@ -4418,6 +4443,306 @@ func (x *CapabilitiesResponse) GetP4RuntimeApiVersion() string { return "" } +// //// Begin : GenericTables messages +type GenericFieldMatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FieldId uint32 `protobuf:"varint,1,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"` + // Types that are assignable to FieldMatchType: + // + // *GenericFieldMatch_Exact_ + // *GenericFieldMatch_Ternary_ + // *GenericFieldMatch_Lpm + // *GenericFieldMatch_Range_ + // *GenericFieldMatch_Optional_ + // *GenericFieldMatch_Other + FieldMatchType isGenericFieldMatch_FieldMatchType `protobuf_oneof:"field_match_type"` +} + +func (x *GenericFieldMatch) Reset() { + *x = GenericFieldMatch{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch) ProtoMessage() {} + +func (x *GenericFieldMatch) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54} +} + +func (x *GenericFieldMatch) GetFieldId() uint32 { + if x != nil { + return x.FieldId + } + return 0 +} + +func (m *GenericFieldMatch) GetFieldMatchType() isGenericFieldMatch_FieldMatchType { + if m != nil { + return m.FieldMatchType + } + return nil +} + +func (x *GenericFieldMatch) GetExact() *GenericFieldMatch_Exact { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Exact_); ok { + return x.Exact + } + return nil +} + +func (x *GenericFieldMatch) GetTernary() *GenericFieldMatch_Ternary { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Ternary_); ok { + return x.Ternary + } + return nil +} + +func (x *GenericFieldMatch) GetLpm() *GenericFieldMatch_LPM { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Lpm); ok { + return x.Lpm + } + return nil +} + +func (x *GenericFieldMatch) GetRange() *GenericFieldMatch_Range { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Range_); ok { + return x.Range + } + return nil +} + +func (x *GenericFieldMatch) GetOptional() *GenericFieldMatch_Optional { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Optional_); ok { + return x.Optional + } + return nil +} + +func (x *GenericFieldMatch) GetOther() *anypb.Any { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Other); ok { + return x.Other + } + return nil +} + +type isGenericFieldMatch_FieldMatchType interface { + isGenericFieldMatch_FieldMatchType() +} + +type GenericFieldMatch_Exact_ struct { + Exact *GenericFieldMatch_Exact `protobuf:"bytes,2,opt,name=exact,proto3,oneof"` +} + +type GenericFieldMatch_Ternary_ struct { + Ternary *GenericFieldMatch_Ternary `protobuf:"bytes,3,opt,name=ternary,proto3,oneof"` +} + +type GenericFieldMatch_Lpm struct { + Lpm *GenericFieldMatch_LPM `protobuf:"bytes,4,opt,name=lpm,proto3,oneof"` +} + +type GenericFieldMatch_Range_ struct { + Range *GenericFieldMatch_Range `protobuf:"bytes,6,opt,name=range,proto3,oneof"` +} + +type GenericFieldMatch_Optional_ struct { + Optional *GenericFieldMatch_Optional `protobuf:"bytes,7,opt,name=optional,proto3,oneof"` +} + +type GenericFieldMatch_Other struct { + // Architecture-specific match value; it corresponds to the other_match_type + // in the P4Info MatchField message. + Other *anypb.Any `protobuf:"bytes,100,opt,name=other,proto3,oneof"` +} + +func (*GenericFieldMatch_Exact_) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Ternary_) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Lpm) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Range_) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Optional_) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Other) isGenericFieldMatch_FieldMatchType() {} + +type GenericTableEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TableId uint32 `protobuf:"varint,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"` + Match []*GenericFieldMatch `protobuf:"bytes,2,rep,name=match,proto3" json:"match,omitempty"` + TableDataUnion *TableDataUnion `protobuf:"bytes,3,opt,name=table_data_union,json=tableDataUnion,proto3" json:"table_data_union,omitempty"` + // Should only be set if the match implies a TCAM lookup, i.e. at least one of + // the match fields is Optional, Ternary or Range. A higher number indicates + // higher priority. Only a highest priority entry that matches the packet + // must be selected. Multiple entries in the same table with the same + // priority value are permitted. See Section "TableEntry" in the + // specification for details of the behavior. + Priority int32 `protobuf:"varint,4,opt,name=priority,proto3" json:"priority,omitempty"` + // Set to true if the table entry is being used to update the single default + // entry of the table. If true, the "match" field must be empty and + // the "data union" field must be populated with a valid data union. + IsDefaultEntry bool `protobuf:"varint,5,opt,name=is_default_entry,json=isDefaultEntry,proto3" json:"is_default_entry,omitempty"` + // Arbitrary metadata from the controller that is opaque to the target. + Metadata []byte `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *GenericTableEntry) Reset() { + *x = GenericTableEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericTableEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericTableEntry) ProtoMessage() {} + +func (x *GenericTableEntry) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericTableEntry.ProtoReflect.Descriptor instead. +func (*GenericTableEntry) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{55} +} + +func (x *GenericTableEntry) GetTableId() uint32 { + if x != nil { + return x.TableId + } + return 0 +} + +func (x *GenericTableEntry) GetMatch() []*GenericFieldMatch { + if x != nil { + return x.Match + } + return nil +} + +func (x *GenericTableEntry) GetTableDataUnion() *TableDataUnion { + if x != nil { + return x.TableDataUnion + } + return nil +} + +func (x *GenericTableEntry) GetPriority() int32 { + if x != nil { + return x.Priority + } + return 0 +} + +func (x *GenericTableEntry) GetIsDefaultEntry() bool { + if x != nil { + return x.IsDefaultEntry + } + return false +} + +func (x *GenericTableEntry) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +type TableDataUnion struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UnionId uint32 `protobuf:"varint,1,opt,name=union_id,json=unionId,proto3" json:"union_id,omitempty"` + Params []*TableDataUnion_Param `protobuf:"bytes,4,rep,name=params,proto3" json:"params,omitempty"` +} + +func (x *TableDataUnion) Reset() { + *x = TableDataUnion{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TableDataUnion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TableDataUnion) ProtoMessage() {} + +func (x *TableDataUnion) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TableDataUnion.ProtoReflect.Descriptor instead. +func (*TableDataUnion) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{56} +} + +func (x *TableDataUnion) GetUnionId() uint32 { + if x != nil { + return x.UnionId + } + return 0 +} + +func (x *TableDataUnion) GetParams() []*TableDataUnion_Param { + if x != nil { + return x.Params + } + return nil +} + type TableEntry_IdleTimeout struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4431,7 +4756,7 @@ type TableEntry_IdleTimeout struct { func (x *TableEntry_IdleTimeout) Reset() { *x = TableEntry_IdleTimeout{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[54] + mi := &file_p4_v1_p4runtime_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4444,7 +4769,7 @@ func (x *TableEntry_IdleTimeout) String() string { func (*TableEntry_IdleTimeout) ProtoMessage() {} func (x *TableEntry_IdleTimeout) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[54] + mi := &file_p4_v1_p4runtime_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4480,7 +4805,7 @@ type FieldMatch_Exact struct { func (x *FieldMatch_Exact) Reset() { *x = FieldMatch_Exact{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[55] + mi := &file_p4_v1_p4runtime_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4493,7 +4818,7 @@ func (x *FieldMatch_Exact) String() string { func (*FieldMatch_Exact) ProtoMessage() {} func (x *FieldMatch_Exact) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[55] + mi := &file_p4_v1_p4runtime_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4528,7 +4853,7 @@ type FieldMatch_Ternary struct { func (x *FieldMatch_Ternary) Reset() { *x = FieldMatch_Ternary{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[56] + mi := &file_p4_v1_p4runtime_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4541,7 +4866,7 @@ func (x *FieldMatch_Ternary) String() string { func (*FieldMatch_Ternary) ProtoMessage() {} func (x *FieldMatch_Ternary) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[56] + mi := &file_p4_v1_p4runtime_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4583,7 +4908,7 @@ type FieldMatch_LPM struct { func (x *FieldMatch_LPM) Reset() { *x = FieldMatch_LPM{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[57] + mi := &file_p4_v1_p4runtime_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4596,7 +4921,7 @@ func (x *FieldMatch_LPM) String() string { func (*FieldMatch_LPM) ProtoMessage() {} func (x *FieldMatch_LPM) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[57] + mi := &file_p4_v1_p4runtime_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4640,7 +4965,7 @@ type FieldMatch_Range struct { func (x *FieldMatch_Range) Reset() { *x = FieldMatch_Range{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[58] + mi := &file_p4_v1_p4runtime_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4653,7 +4978,7 @@ func (x *FieldMatch_Range) String() string { func (*FieldMatch_Range) ProtoMessage() {} func (x *FieldMatch_Range) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[58] + mi := &file_p4_v1_p4runtime_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4696,7 +5021,7 @@ type FieldMatch_Optional struct { func (x *FieldMatch_Optional) Reset() { *x = FieldMatch_Optional{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[59] + mi := &file_p4_v1_p4runtime_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4709,7 +5034,7 @@ func (x *FieldMatch_Optional) String() string { func (*FieldMatch_Optional) ProtoMessage() {} func (x *FieldMatch_Optional) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[59] + mi := &file_p4_v1_p4runtime_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4744,7 +5069,7 @@ type Action_Param struct { func (x *Action_Param) Reset() { *x = Action_Param{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[60] + mi := &file_p4_v1_p4runtime_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4757,7 +5082,7 @@ func (x *Action_Param) String() string { func (*Action_Param) ProtoMessage() {} func (x *Action_Param) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[60] + mi := &file_p4_v1_p4runtime_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4804,7 +5129,7 @@ type ActionProfileGroup_Member struct { func (x *ActionProfileGroup_Member) Reset() { *x = ActionProfileGroup_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[61] + mi := &file_p4_v1_p4runtime_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4817,7 +5142,7 @@ func (x *ActionProfileGroup_Member) String() string { func (*ActionProfileGroup_Member) ProtoMessage() {} func (x *ActionProfileGroup_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[61] + mi := &file_p4_v1_p4runtime_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4906,7 +5231,7 @@ type DigestEntry_Config struct { func (x *DigestEntry_Config) Reset() { *x = DigestEntry_Config{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[62] + mi := &file_p4_v1_p4runtime_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4919,7 +5244,7 @@ func (x *DigestEntry_Config) String() string { func (*DigestEntry_Config) ProtoMessage() {} func (x *DigestEntry_Config) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[62] + mi := &file_p4_v1_p4runtime_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4974,7 +5299,7 @@ type ForwardingPipelineConfig_Cookie struct { func (x *ForwardingPipelineConfig_Cookie) Reset() { *x = ForwardingPipelineConfig_Cookie{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[63] + mi := &file_p4_v1_p4runtime_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4987,7 +5312,7 @@ func (x *ForwardingPipelineConfig_Cookie) String() string { func (*ForwardingPipelineConfig_Cookie) ProtoMessage() {} func (x *ForwardingPipelineConfig_Cookie) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[63] + mi := &file_p4_v1_p4runtime_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5010,6 +5335,324 @@ func (x *ForwardingPipelineConfig_Cookie) GetCookie() uint64 { return 0 } +type GenericFieldMatch_Exact struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value *GenericData `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *GenericFieldMatch_Exact) Reset() { + *x = GenericFieldMatch_Exact{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_Exact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_Exact) ProtoMessage() {} + +func (x *GenericFieldMatch_Exact) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[67] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_Exact.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_Exact) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 0} +} + +func (x *GenericFieldMatch_Exact) GetValue() *GenericData { + if x != nil { + return x.Value + } + return nil +} + +type GenericFieldMatch_Ternary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + Mask []byte `protobuf:"bytes,2,opt,name=mask,proto3" json:"mask,omitempty"` +} + +func (x *GenericFieldMatch_Ternary) Reset() { + *x = GenericFieldMatch_Ternary{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_Ternary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_Ternary) ProtoMessage() {} + +func (x *GenericFieldMatch_Ternary) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[68] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_Ternary.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_Ternary) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 1} +} + +func (x *GenericFieldMatch_Ternary) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +func (x *GenericFieldMatch_Ternary) GetMask() []byte { + if x != nil { + return x.Mask + } + return nil +} + +type GenericFieldMatch_LPM struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + PrefixLen int32 `protobuf:"varint,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` // in bits +} + +func (x *GenericFieldMatch_LPM) Reset() { + *x = GenericFieldMatch_LPM{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_LPM) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_LPM) ProtoMessage() {} + +func (x *GenericFieldMatch_LPM) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[69] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_LPM.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_LPM) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 2} +} + +func (x *GenericFieldMatch_LPM) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +func (x *GenericFieldMatch_LPM) GetPrefixLen() int32 { + if x != nil { + return x.PrefixLen + } + return 0 +} + +// A Range is logically a set that contains all values numerically between +// 'low' and 'high' inclusively. +type GenericFieldMatch_Range struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Low []byte `protobuf:"bytes,1,opt,name=low,proto3" json:"low,omitempty"` + High []byte `protobuf:"bytes,2,opt,name=high,proto3" json:"high,omitempty"` +} + +func (x *GenericFieldMatch_Range) Reset() { + *x = GenericFieldMatch_Range{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_Range) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_Range) ProtoMessage() {} + +func (x *GenericFieldMatch_Range) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[70] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_Range.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_Range) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 3} +} + +func (x *GenericFieldMatch_Range) GetLow() []byte { + if x != nil { + return x.Low + } + return nil +} + +func (x *GenericFieldMatch_Range) GetHigh() []byte { + if x != nil { + return x.High + } + return nil +} + +// If the Optional match should be a wildcard, the FieldMatch must be omitted. +// Otherwise, this behaves like an exact match. +type GenericFieldMatch_Optional struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value *GenericData `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *GenericFieldMatch_Optional) Reset() { + *x = GenericFieldMatch_Optional{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_Optional) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_Optional) ProtoMessage() {} + +func (x *GenericFieldMatch_Optional) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[71] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_Optional.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_Optional) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 4} +} + +func (x *GenericFieldMatch_Optional) GetValue() *GenericData { + if x != nil { + return x.Value + } + return nil +} + +type TableDataUnion_Param struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ParamId uint32 `protobuf:"varint,2,opt,name=param_id,json=paramId,proto3" json:"param_id,omitempty"` + Value *GenericData `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *TableDataUnion_Param) Reset() { + *x = TableDataUnion_Param{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TableDataUnion_Param) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TableDataUnion_Param) ProtoMessage() {} + +func (x *TableDataUnion_Param) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[72] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TableDataUnion_Param.ProtoReflect.Descriptor instead. +func (*TableDataUnion_Param) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{56, 0} +} + +func (x *TableDataUnion_Param) GetParamId() uint32 { + if x != nil { + return x.ParamId + } + return 0 +} + +func (x *TableDataUnion_Param) GetValue() *GenericData { + if x != nil { + return x.Value + } + return nil +} + var File_p4_v1_p4runtime_proto protoreflect.FileDescriptor var file_p4_v1_p4runtime_proto_rawDesc = []byte{ @@ -5062,7 +5705,7 @@ var file_p4_v1_p4runtime_proto_rawDesc = []byte{ 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4e, 0x53, 0x45, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x22, 0xd2, 0x06, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x22, 0x9e, 0x07, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x37, 0x0a, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x65, @@ -5115,77 +5758,534 @@ var file_p4_v1_p4runtime_proto_rawDesc = []byte{ 0x73, 0x74, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x42, 0x08, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x7c, 0x0a, 0x0b, 0x45, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, + 0x79, 0x12, 0x4a, 0x0a, 0x13, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x08, 0x0a, + 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x7c, 0x0a, 0x0b, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x6e, 0x74, + 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0xa6, 0x05, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, + 0x27, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2a, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x12, 0x33, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x0b, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, 0x0a, 0x0c, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x45, 0x0a, 0x12, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x73, + 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x12, 0x4c, + 0x0a, 0x13, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x49, + 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x10, 0x74, 0x69, 0x6d, 0x65, + 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x1a, 0x2c, 0x0a, 0x0b, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x4e, 0x73, 0x22, 0xc8, + 0x04, 0x0a, 0x0a, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x19, 0x0a, + 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x63, 0x74, + 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x54, 0x65, + 0x72, 0x6e, 0x61, 0x72, 0x79, 0x48, 0x00, 0x52, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, + 0x12, 0x29, 0x0a, 0x03, 0x6c, 0x70, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x2e, 0x4c, 0x50, 0x4d, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x70, 0x6d, 0x12, 0x2f, 0x0a, 0x05, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x61, + 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x08, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, + 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x1a, 0x1d, 0x0a, 0x05, 0x45, 0x78, 0x61, 0x63, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x1a, 0x33, 0x0a, 0x07, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x1a, 0x3a, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, + 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x4c, 0x65, 0x6e, 0x1a, 0x2d, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x12, + 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, + 0x69, 0x67, 0x68, 0x1a, 0x20, 0x0a, 0x08, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x8e, 0x02, 0x0a, 0x0b, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x18, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x15, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, + 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, + 0x52, 0x14, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x5a, 0x0a, 0x19, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x06, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, + 0x38, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6a, 0x0a, 0x16, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x74, 0x12, 0x50, 0x0a, 0x16, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x14, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x05, + 0x77, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x48, + 0x00, 0x52, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, + 0x68, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, + 0x77, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0xbd, 0x02, 0x0a, 0x12, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x3a, 0x0a, + 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, + 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x88, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, + 0x12, 0x1f, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x77, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x72, + 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, + 0x1d, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xb3, + 0x01, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2a, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x22, 0xae, 0x01, 0x0a, 0x10, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, + 0x65, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2a, 0x0a, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x0c, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x61, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x63, 0x69, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x62, 0x75, 0x72, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x62, 0x75, 0x72, 0x73, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x70, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x70, 0x69, 0x72, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x62, 0x75, 0x72, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x70, 0x62, 0x75, 0x72, 0x73, 0x74, 0x22, 0x79, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x70, 0x0a, 0x12, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x26, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4f, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x79, 0x74, 0x65, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x65, 0x72, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, 0x67, + 0x72, 0x65, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, + 0x67, 0x72, 0x65, 0x65, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x79, 0x65, 0x6c, 0x6c, 0x6f, + 0x77, 0x12, 0x24, 0x0a, 0x03, 0x72, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x03, 0x72, 0x65, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1c, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x50, 0x0a, 0x15, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x4a, 0x0a, 0x13, 0x63, 0x6c, + 0x6f, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x48, 0x00, 0x52, 0x11, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x6f, + 0x0a, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x25, 0x0a, 0x0b, 0x65, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, + 0x18, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x72, 0x74, + 0x12, 0x14, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, + 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, + 0x6f, 0x0a, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, + 0x22, 0xb8, 0x01, 0x0a, 0x11, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x39, 0x0a, 0x0e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x27, 0x0a, + 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x62, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, + 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x77, 0x0a, 0x0d, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0xd7, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x64, + 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x1a, 0x78, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, + 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x4e, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x63, 0x6b, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x61, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x22, 0xf5, 0x01, + 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x72, 0x62, 0x69, 0x74, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x61, + 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x48, 0x00, 0x52, 0x06, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, + 0x48, 0x00, 0x52, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x12, 0x2c, 0x0a, + 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, - 0x6e, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0xee, 0x04, 0x0a, 0x0a, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2a, 0x0a, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, - 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, - 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x0c, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x35, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x45, 0x0a, 0x12, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, - 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, - 0x0a, 0x11, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x64, - 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x4e, 0x73, 0x12, 0x4c, 0x0a, 0x13, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, - 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x10, - 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x69, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x2c, 0x0a, 0x0b, - 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, - 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x4e, 0x73, 0x22, 0xc8, 0x04, 0x0a, 0x0a, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x58, 0x0a, 0x09, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, + 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x45, 0x0a, 0x0d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, + 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, + 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x22, 0xf5, 0x02, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, + 0x73, 0x74, 0x65, 0x72, 0x41, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x49, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, + 0x2b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5c, 0x0a, 0x19, + 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x17, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, + 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x57, + 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x83, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x47, 0x0a, + 0x0e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x17, 0x4d, 0x61, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, + 0x12, 0x2f, 0x0a, 0x0b, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x69, + 0x6e, 0x74, 0x31, 0x32, 0x38, 0x52, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5c, 0x0a, + 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x41, 0x6e, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x6b, 0x0a, 0x17, 0x49, + 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xb1, 0x02, 0x0a, 0x0b, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x6f, + 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x75, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, + 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x12, 0x43, 0x0a, 0x0f, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, + 0x00, 0x52, 0x0d, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, + 0x12, 0x2f, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x74, + 0x68, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x42, 0x09, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x41, 0x0a, 0x0e, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2f, + 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x4f, 0x75, 0x74, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x22, + 0x52, 0x0a, 0x12, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3c, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x63, 0x6b, 0x52, 0x0d, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x63, 0x6b, 0x22, 0x3e, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x74, 0x68, + 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x22, 0x2f, 0x0a, 0x07, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x12, 0x12, + 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x69, + 0x67, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x03, 0x6c, 0x6f, 0x77, 0x22, 0x9f, 0x03, 0x0a, 0x22, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x72, + 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x0b, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x52, 0x0a, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, + 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x77, 0x0a, + 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x52, 0x49, + 0x46, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x41, + 0x4e, 0x44, 0x5f, 0x53, 0x41, 0x56, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x45, 0x52, + 0x49, 0x46, 0x59, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, + 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, + 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x43, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, + 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x05, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, + 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd4, 0x01, + 0x0a, 0x18, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x06, 0x70, 0x34, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x06, 0x70, 0x34, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x34, 0x5f, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x34, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x3e, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x6b, + 0x69, 0x65, 0x1a, 0x20, 0x0a, 0x06, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x6f, + 0x6f, 0x6b, 0x69, 0x65, 0x22, 0xfd, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x36, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x5d, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0f, + 0x0a, 0x0b, 0x43, 0x4f, 0x4f, 0x4b, 0x49, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, + 0x15, 0x0a, 0x11, 0x50, 0x34, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, + 0x4f, 0x4b, 0x49, 0x45, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, + 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4f, 0x4b, + 0x49, 0x45, 0x10, 0x03, 0x22, 0x5e, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa2, 0x01, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, + 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, + 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x61, 0x70, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x4a, 0x0a, 0x14, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x34, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x05, 0x0a, + 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x36, 0x0a, + 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x05, - 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, - 0x79, 0x48, 0x00, 0x52, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x03, - 0x6c, 0x70, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, - 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4c, 0x50, 0x4d, - 0x48, 0x00, 0x52, 0x03, 0x6c, 0x70, 0x6d, 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x64, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x1a, 0x1d, 0x0a, 0x05, 0x45, 0x78, 0x61, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, + 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x2e, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x48, 0x00, 0x52, 0x07, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x72, 0x79, 0x12, 0x30, 0x0a, 0x03, 0x6c, 0x70, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4c, 0x50, 0x4d, 0x48, 0x00, + 0x52, 0x03, 0x6c, 0x70, 0x6d, 0x12, 0x36, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x3f, 0x0a, + 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x2c, + 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x1a, 0x31, 0x0a, 0x05, + 0x45, 0x78, 0x61, 0x63, 0x74, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x33, 0x0a, 0x07, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, @@ -5196,462 +6296,83 @@ var file_p4_v1_p4runtime_proto_rawDesc = []byte{ 0x1a, 0x2d, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x1a, - 0x20, 0x0a, 0x08, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x12, 0x0a, 0x10, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x8e, 0x02, 0x0a, 0x0b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, - 0x0a, 0x18, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x48, 0x00, 0x52, 0x15, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x17, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x14, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x12, 0x5a, 0x0a, 0x19, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x42, 0x06, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2b, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x38, 0x0a, 0x05, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6a, 0x0a, 0x16, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, - 0x50, 0x0a, 0x16, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x05, 0x77, 0x61, 0x74, 0x63, - 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x05, 0x77, - 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x77, 0x61, 0x74, 0x63, - 0x68, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6b, - 0x69, 0x6e, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbd, 0x02, 0x0a, 0x12, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, - 0x1a, 0x88, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x12, 0x1a, 0x0a, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, - 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0a, - 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, - 0x48, 0x00, 0x52, 0x09, 0x77, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x0c, 0x0a, - 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x1d, 0x0a, 0x05, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xb3, 0x01, 0x0a, 0x0a, 0x4d, - 0x65, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x22, 0xae, 0x01, 0x0a, 0x10, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x65, 0x72, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x22, 0x61, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x63, - 0x69, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x62, 0x75, 0x72, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x63, 0x62, 0x75, 0x72, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x70, 0x69, 0x72, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x62, 0x75, 0x72, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x62, - 0x75, 0x72, 0x73, 0x74, 0x22, 0x79, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x70, 0x0a, 0x12, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x4f, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x79, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, 0x67, 0x72, 0x65, 0x65, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x67, 0x72, 0x65, 0x65, - 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x24, 0x0a, - 0x03, 0x72, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x03, - 0x72, 0x65, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x50, 0x0a, 0x15, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, - 0x00, 0x52, 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x4a, 0x0a, 0x13, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, - 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, - 0x11, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x6f, 0x0a, 0x07, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x25, 0x0a, 0x0b, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, - 0x52, 0x0a, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x04, - 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x0b, - 0x0a, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x6f, 0x0a, 0x13, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0xb8, 0x01, 0x0a, - 0x11, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x28, 0x0a, - 0x10, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4f, 0x66, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x39, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x05, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x22, 0x62, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x73, 0x65, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x77, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0xd7, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x08, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, - 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, - 0x78, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x63, 0x6b, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x22, 0xf5, 0x01, 0x0a, 0x14, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x09, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, - 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x22, 0x58, 0x0a, 0x09, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x45, 0x0a, 0x0d, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x08, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x69, 0x73, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x69, 0x73, 0x74, - 0x49, 0x64, 0x22, 0xf5, 0x02, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0b, - 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, - 0x41, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x29, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, - 0x6e, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5c, 0x0a, 0x19, 0x69, 0x64, 0x6c, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x17, 0x69, - 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x42, 0x08, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x57, 0x0a, 0x08, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x49, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x83, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x34, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x47, 0x0a, 0x0e, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x17, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x72, 0x62, - 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x34, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x0b, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, - 0x38, 0x52, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5c, 0x0a, 0x04, 0x52, 0x6f, 0x6c, - 0x65, 0x12, 0x12, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, - 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x6b, 0x0a, 0x17, 0x49, 0x64, 0x6c, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, - 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x22, 0xb1, 0x02, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, - 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x61, - 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x36, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x4f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x12, 0x43, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x12, 0x2f, 0x0a, 0x05, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x42, 0x09, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x41, 0x0a, 0x0e, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x4f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x0a, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, - 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x22, 0x52, 0x0a, 0x12, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x3c, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, - 0x52, 0x0d, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x22, - 0x3e, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x22, - 0x2f, 0x0a, 0x07, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, - 0x67, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x12, 0x10, - 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6c, 0x6f, 0x77, - 0x22, 0x9f, 0x03, 0x0a, 0x22, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x0b, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x52, 0x0a, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x77, 0x0a, 0x06, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x10, 0x01, - 0x12, 0x13, 0x0a, 0x0f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x53, - 0x41, 0x56, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, - 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, - 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x43, 0x4f, - 0x4e, 0x43, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, - 0x10, 0x05, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd4, 0x01, 0x0a, 0x18, 0x46, 0x6f, - 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x06, 0x70, 0x34, 0x69, 0x6e, 0x66, 0x6f, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x70, 0x34, - 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x34, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, - 0x70, 0x34, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, - 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x1a, 0x20, - 0x0a, 0x06, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, - 0x69, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x22, 0xfd, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x34, + 0x34, 0x0a, 0x08, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x28, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x81, 0x02, 0x0a, 0x11, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x19, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x3f, 0x0a, 0x10, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xae, 0x01, + 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x55, 0x6e, 0x69, 0x6f, 0x6e, + 0x12, 0x19, 0x0a, 0x08, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x55, 0x6e, 0x69, + 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x1a, 0x4c, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x8a, + 0x01, 0x0a, 0x07, 0x53, 0x64, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x44, + 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x49, 0x4e, + 0x10, 0x01, 0x12, 0x19, 0x0a, 0x0c, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, + 0x41, 0x58, 0x10, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x21, 0x0a, + 0x14, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x49, 0x52, 0x43, + 0x55, 0x4c, 0x41, 0x54, 0x45, 0x10, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x12, 0x19, 0x0a, 0x0c, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x43, 0x50, 0x55, + 0x10, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x32, 0x83, 0x04, 0x0a, 0x09, + 0x50, 0x34, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x33, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x46, + 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x1b, + 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x22, 0x5d, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, - 0x4f, 0x4b, 0x49, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x50, - 0x34, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4f, 0x4b, 0x49, 0x45, - 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, - 0x46, 0x49, 0x47, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4f, 0x4b, 0x49, 0x45, 0x10, 0x03, - 0x22, 0x5e, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, - 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x22, 0xa2, 0x01, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, - 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x14, - 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x70, - 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x8a, 0x01, 0x0a, 0x07, 0x53, 0x64, 0x6e, - 0x50, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, - 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x44, - 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x0c, - 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0xff, 0xfd, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x21, 0x0a, 0x14, 0x53, 0x44, 0x4e, 0x5f, 0x50, - 0x4f, 0x52, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x49, 0x52, 0x43, 0x55, 0x4c, 0x41, 0x54, 0x45, 0x10, - 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x19, 0x0a, 0x0c, 0x53, 0x44, - 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x43, 0x50, 0x55, 0x10, 0xfd, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x01, 0x32, 0x83, 0x04, 0x0a, 0x09, 0x50, 0x34, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x70, - 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x04, 0x52, 0x65, 0x61, - 0x64, 0x12, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x76, - 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, - 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, - 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, - 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, - 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, - 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, - 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x49, 0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x12, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, - 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x29, 0x5a, 0x24, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, - 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, - 0x2f, 0x76, 0x31, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x42, 0x29, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x76, 0x31, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5667,7 +6388,7 @@ func file_p4_v1_p4runtime_proto_rawDescGZIP() []byte { } var file_p4_v1_p4runtime_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_p4_v1_p4runtime_proto_msgTypes = make([]protoimpl.MessageInfo, 64) +var file_p4_v1_p4runtime_proto_msgTypes = make([]protoimpl.MessageInfo, 73) var file_p4_v1_p4runtime_proto_goTypes = []interface{}{ (SdnPort)(0), // 0: p4.v1.SdnPort (WriteRequest_Atomicity)(0), // 1: p4.v1.WriteRequest.Atomicity @@ -5728,132 +6449,156 @@ var file_p4_v1_p4runtime_proto_goTypes = []interface{}{ (*Error)(nil), // 56: p4.v1.Error (*CapabilitiesRequest)(nil), // 57: p4.v1.CapabilitiesRequest (*CapabilitiesResponse)(nil), // 58: p4.v1.CapabilitiesResponse - (*TableEntry_IdleTimeout)(nil), // 59: p4.v1.TableEntry.IdleTimeout - (*FieldMatch_Exact)(nil), // 60: p4.v1.FieldMatch.Exact - (*FieldMatch_Ternary)(nil), // 61: p4.v1.FieldMatch.Ternary - (*FieldMatch_LPM)(nil), // 62: p4.v1.FieldMatch.LPM - (*FieldMatch_Range)(nil), // 63: p4.v1.FieldMatch.Range - (*FieldMatch_Optional)(nil), // 64: p4.v1.FieldMatch.Optional - (*Action_Param)(nil), // 65: p4.v1.Action.Param - (*ActionProfileGroup_Member)(nil), // 66: p4.v1.ActionProfileGroup.Member - (*DigestEntry_Config)(nil), // 67: p4.v1.DigestEntry.Config - (*ForwardingPipelineConfig_Cookie)(nil), // 68: p4.v1.ForwardingPipelineConfig.Cookie - (*anypb.Any)(nil), // 69: google.protobuf.Any - (*P4Data)(nil), // 70: p4.v1.P4Data - (*status.Status)(nil), // 71: google.rpc.Status - (*v1.P4Info)(nil), // 72: p4.config.v1.P4Info + (*GenericFieldMatch)(nil), // 59: p4.v1.GenericFieldMatch + (*GenericTableEntry)(nil), // 60: p4.v1.GenericTableEntry + (*TableDataUnion)(nil), // 61: p4.v1.TableDataUnion + (*TableEntry_IdleTimeout)(nil), // 62: p4.v1.TableEntry.IdleTimeout + (*FieldMatch_Exact)(nil), // 63: p4.v1.FieldMatch.Exact + (*FieldMatch_Ternary)(nil), // 64: p4.v1.FieldMatch.Ternary + (*FieldMatch_LPM)(nil), // 65: p4.v1.FieldMatch.LPM + (*FieldMatch_Range)(nil), // 66: p4.v1.FieldMatch.Range + (*FieldMatch_Optional)(nil), // 67: p4.v1.FieldMatch.Optional + (*Action_Param)(nil), // 68: p4.v1.Action.Param + (*ActionProfileGroup_Member)(nil), // 69: p4.v1.ActionProfileGroup.Member + (*DigestEntry_Config)(nil), // 70: p4.v1.DigestEntry.Config + (*ForwardingPipelineConfig_Cookie)(nil), // 71: p4.v1.ForwardingPipelineConfig.Cookie + (*GenericFieldMatch_Exact)(nil), // 72: p4.v1.GenericFieldMatch.Exact + (*GenericFieldMatch_Ternary)(nil), // 73: p4.v1.GenericFieldMatch.Ternary + (*GenericFieldMatch_LPM)(nil), // 74: p4.v1.GenericFieldMatch.LPM + (*GenericFieldMatch_Range)(nil), // 75: p4.v1.GenericFieldMatch.Range + (*GenericFieldMatch_Optional)(nil), // 76: p4.v1.GenericFieldMatch.Optional + (*TableDataUnion_Param)(nil), // 77: p4.v1.TableDataUnion.Param + (*anypb.Any)(nil), // 78: google.protobuf.Any + (*P4Data)(nil), // 79: p4.v1.P4Data + (*status.Status)(nil), // 80: google.rpc.Status + (*v1.P4Info)(nil), // 81: p4.config.v1.P4Info + (*GenericData)(nil), // 82: p4.v1.GenericData } var file_p4_v1_p4runtime_proto_depIdxs = []int32{ - 50, // 0: p4.v1.WriteRequest.election_id:type_name -> p4.v1.Uint128 - 9, // 1: p4.v1.WriteRequest.updates:type_name -> p4.v1.Update - 1, // 2: p4.v1.WriteRequest.atomicity:type_name -> p4.v1.WriteRequest.Atomicity - 10, // 3: p4.v1.ReadRequest.entities:type_name -> p4.v1.Entity - 10, // 4: p4.v1.ReadResponse.entities:type_name -> p4.v1.Entity - 2, // 5: p4.v1.Update.type:type_name -> p4.v1.Update.Type - 10, // 6: p4.v1.Update.entity:type_name -> p4.v1.Entity - 11, // 7: p4.v1.Entity.extern_entry:type_name -> p4.v1.ExternEntry - 12, // 8: p4.v1.Entity.table_entry:type_name -> p4.v1.TableEntry - 18, // 9: p4.v1.Entity.action_profile_member:type_name -> p4.v1.ActionProfileMember - 19, // 10: p4.v1.Entity.action_profile_group:type_name -> p4.v1.ActionProfileGroup - 21, // 11: p4.v1.Entity.meter_entry:type_name -> p4.v1.MeterEntry - 22, // 12: p4.v1.Entity.direct_meter_entry:type_name -> p4.v1.DirectMeterEntry - 24, // 13: p4.v1.Entity.counter_entry:type_name -> p4.v1.CounterEntry - 25, // 14: p4.v1.Entity.direct_counter_entry:type_name -> p4.v1.DirectCounterEntry - 28, // 15: p4.v1.Entity.packet_replication_engine_entry:type_name -> p4.v1.PacketReplicationEngineEntry - 33, // 16: p4.v1.Entity.value_set_entry:type_name -> p4.v1.ValueSetEntry - 34, // 17: p4.v1.Entity.register_entry:type_name -> p4.v1.RegisterEntry - 35, // 18: p4.v1.Entity.digest_entry:type_name -> p4.v1.DigestEntry - 69, // 19: p4.v1.ExternEntry.entry:type_name -> google.protobuf.Any - 13, // 20: p4.v1.TableEntry.match:type_name -> p4.v1.FieldMatch - 14, // 21: p4.v1.TableEntry.action:type_name -> p4.v1.TableAction - 23, // 22: p4.v1.TableEntry.meter_config:type_name -> p4.v1.MeterConfig - 26, // 23: p4.v1.TableEntry.counter_data:type_name -> p4.v1.CounterData - 27, // 24: p4.v1.TableEntry.meter_counter_data:type_name -> p4.v1.MeterCounterData - 59, // 25: p4.v1.TableEntry.time_since_last_hit:type_name -> p4.v1.TableEntry.IdleTimeout - 60, // 26: p4.v1.FieldMatch.exact:type_name -> p4.v1.FieldMatch.Exact - 61, // 27: p4.v1.FieldMatch.ternary:type_name -> p4.v1.FieldMatch.Ternary - 62, // 28: p4.v1.FieldMatch.lpm:type_name -> p4.v1.FieldMatch.LPM - 63, // 29: p4.v1.FieldMatch.range:type_name -> p4.v1.FieldMatch.Range - 64, // 30: p4.v1.FieldMatch.optional:type_name -> p4.v1.FieldMatch.Optional - 69, // 31: p4.v1.FieldMatch.other:type_name -> google.protobuf.Any - 15, // 32: p4.v1.TableAction.action:type_name -> p4.v1.Action - 16, // 33: p4.v1.TableAction.action_profile_action_set:type_name -> p4.v1.ActionProfileActionSet - 65, // 34: p4.v1.Action.params:type_name -> p4.v1.Action.Param - 17, // 35: p4.v1.ActionProfileActionSet.action_profile_actions:type_name -> p4.v1.ActionProfileAction - 15, // 36: p4.v1.ActionProfileAction.action:type_name -> p4.v1.Action - 15, // 37: p4.v1.ActionProfileMember.action:type_name -> p4.v1.Action - 66, // 38: p4.v1.ActionProfileGroup.members:type_name -> p4.v1.ActionProfileGroup.Member - 20, // 39: p4.v1.MeterEntry.index:type_name -> p4.v1.Index - 23, // 40: p4.v1.MeterEntry.config:type_name -> p4.v1.MeterConfig - 27, // 41: p4.v1.MeterEntry.counter_data:type_name -> p4.v1.MeterCounterData - 12, // 42: p4.v1.DirectMeterEntry.table_entry:type_name -> p4.v1.TableEntry - 23, // 43: p4.v1.DirectMeterEntry.config:type_name -> p4.v1.MeterConfig - 27, // 44: p4.v1.DirectMeterEntry.counter_data:type_name -> p4.v1.MeterCounterData - 20, // 45: p4.v1.CounterEntry.index:type_name -> p4.v1.Index - 26, // 46: p4.v1.CounterEntry.data:type_name -> p4.v1.CounterData - 12, // 47: p4.v1.DirectCounterEntry.table_entry:type_name -> p4.v1.TableEntry - 26, // 48: p4.v1.DirectCounterEntry.data:type_name -> p4.v1.CounterData - 26, // 49: p4.v1.MeterCounterData.green:type_name -> p4.v1.CounterData - 26, // 50: p4.v1.MeterCounterData.yellow:type_name -> p4.v1.CounterData - 26, // 51: p4.v1.MeterCounterData.red:type_name -> p4.v1.CounterData - 30, // 52: p4.v1.PacketReplicationEngineEntry.multicast_group_entry:type_name -> p4.v1.MulticastGroupEntry - 31, // 53: p4.v1.PacketReplicationEngineEntry.clone_session_entry:type_name -> p4.v1.CloneSessionEntry - 29, // 54: p4.v1.MulticastGroupEntry.replicas:type_name -> p4.v1.Replica - 29, // 55: p4.v1.CloneSessionEntry.replicas:type_name -> p4.v1.Replica - 13, // 56: p4.v1.ValueSetMember.match:type_name -> p4.v1.FieldMatch - 32, // 57: p4.v1.ValueSetEntry.members:type_name -> p4.v1.ValueSetMember - 20, // 58: p4.v1.RegisterEntry.index:type_name -> p4.v1.Index - 70, // 59: p4.v1.RegisterEntry.data:type_name -> p4.v1.P4Data - 67, // 60: p4.v1.DigestEntry.config:type_name -> p4.v1.DigestEntry.Config - 43, // 61: p4.v1.StreamMessageRequest.arbitration:type_name -> p4.v1.MasterArbitrationUpdate - 37, // 62: p4.v1.StreamMessageRequest.packet:type_name -> p4.v1.PacketOut - 38, // 63: p4.v1.StreamMessageRequest.digest_ack:type_name -> p4.v1.DigestListAck - 69, // 64: p4.v1.StreamMessageRequest.other:type_name -> google.protobuf.Any - 42, // 65: p4.v1.PacketOut.metadata:type_name -> p4.v1.PacketMetadata - 43, // 66: p4.v1.StreamMessageResponse.arbitration:type_name -> p4.v1.MasterArbitrationUpdate - 40, // 67: p4.v1.StreamMessageResponse.packet:type_name -> p4.v1.PacketIn - 41, // 68: p4.v1.StreamMessageResponse.digest:type_name -> p4.v1.DigestList - 45, // 69: p4.v1.StreamMessageResponse.idle_timeout_notification:type_name -> p4.v1.IdleTimeoutNotification - 69, // 70: p4.v1.StreamMessageResponse.other:type_name -> google.protobuf.Any - 46, // 71: p4.v1.StreamMessageResponse.error:type_name -> p4.v1.StreamError - 42, // 72: p4.v1.PacketIn.metadata:type_name -> p4.v1.PacketMetadata - 70, // 73: p4.v1.DigestList.data:type_name -> p4.v1.P4Data - 44, // 74: p4.v1.MasterArbitrationUpdate.role:type_name -> p4.v1.Role - 50, // 75: p4.v1.MasterArbitrationUpdate.election_id:type_name -> p4.v1.Uint128 - 71, // 76: p4.v1.MasterArbitrationUpdate.status:type_name -> google.rpc.Status - 69, // 77: p4.v1.Role.config:type_name -> google.protobuf.Any - 12, // 78: p4.v1.IdleTimeoutNotification.table_entry:type_name -> p4.v1.TableEntry - 47, // 79: p4.v1.StreamError.packet_out:type_name -> p4.v1.PacketOutError - 48, // 80: p4.v1.StreamError.digest_list_ack:type_name -> p4.v1.DigestListAckError - 49, // 81: p4.v1.StreamError.other:type_name -> p4.v1.StreamOtherError - 37, // 82: p4.v1.PacketOutError.packet_out:type_name -> p4.v1.PacketOut - 38, // 83: p4.v1.DigestListAckError.digest_list_ack:type_name -> p4.v1.DigestListAck - 69, // 84: p4.v1.StreamOtherError.other:type_name -> google.protobuf.Any - 50, // 85: p4.v1.SetForwardingPipelineConfigRequest.election_id:type_name -> p4.v1.Uint128 - 3, // 86: p4.v1.SetForwardingPipelineConfigRequest.action:type_name -> p4.v1.SetForwardingPipelineConfigRequest.Action - 53, // 87: p4.v1.SetForwardingPipelineConfigRequest.config:type_name -> p4.v1.ForwardingPipelineConfig - 72, // 88: p4.v1.ForwardingPipelineConfig.p4info:type_name -> p4.config.v1.P4Info - 68, // 89: p4.v1.ForwardingPipelineConfig.cookie:type_name -> p4.v1.ForwardingPipelineConfig.Cookie - 4, // 90: p4.v1.GetForwardingPipelineConfigRequest.response_type:type_name -> p4.v1.GetForwardingPipelineConfigRequest.ResponseType - 53, // 91: p4.v1.GetForwardingPipelineConfigResponse.config:type_name -> p4.v1.ForwardingPipelineConfig - 69, // 92: p4.v1.Error.details:type_name -> google.protobuf.Any - 5, // 93: p4.v1.P4Runtime.Write:input_type -> p4.v1.WriteRequest - 7, // 94: p4.v1.P4Runtime.Read:input_type -> p4.v1.ReadRequest - 51, // 95: p4.v1.P4Runtime.SetForwardingPipelineConfig:input_type -> p4.v1.SetForwardingPipelineConfigRequest - 54, // 96: p4.v1.P4Runtime.GetForwardingPipelineConfig:input_type -> p4.v1.GetForwardingPipelineConfigRequest - 36, // 97: p4.v1.P4Runtime.StreamChannel:input_type -> p4.v1.StreamMessageRequest - 57, // 98: p4.v1.P4Runtime.Capabilities:input_type -> p4.v1.CapabilitiesRequest - 6, // 99: p4.v1.P4Runtime.Write:output_type -> p4.v1.WriteResponse - 8, // 100: p4.v1.P4Runtime.Read:output_type -> p4.v1.ReadResponse - 52, // 101: p4.v1.P4Runtime.SetForwardingPipelineConfig:output_type -> p4.v1.SetForwardingPipelineConfigResponse - 55, // 102: p4.v1.P4Runtime.GetForwardingPipelineConfig:output_type -> p4.v1.GetForwardingPipelineConfigResponse - 39, // 103: p4.v1.P4Runtime.StreamChannel:output_type -> p4.v1.StreamMessageResponse - 58, // 104: p4.v1.P4Runtime.Capabilities:output_type -> p4.v1.CapabilitiesResponse - 99, // [99:105] is the sub-list for method output_type - 93, // [93:99] is the sub-list for method input_type - 93, // [93:93] is the sub-list for extension type_name - 93, // [93:93] is the sub-list for extension extendee - 0, // [0:93] is the sub-list for field type_name + 50, // 0: p4.v1.WriteRequest.election_id:type_name -> p4.v1.Uint128 + 9, // 1: p4.v1.WriteRequest.updates:type_name -> p4.v1.Update + 1, // 2: p4.v1.WriteRequest.atomicity:type_name -> p4.v1.WriteRequest.Atomicity + 10, // 3: p4.v1.ReadRequest.entities:type_name -> p4.v1.Entity + 10, // 4: p4.v1.ReadResponse.entities:type_name -> p4.v1.Entity + 2, // 5: p4.v1.Update.type:type_name -> p4.v1.Update.Type + 10, // 6: p4.v1.Update.entity:type_name -> p4.v1.Entity + 11, // 7: p4.v1.Entity.extern_entry:type_name -> p4.v1.ExternEntry + 12, // 8: p4.v1.Entity.table_entry:type_name -> p4.v1.TableEntry + 18, // 9: p4.v1.Entity.action_profile_member:type_name -> p4.v1.ActionProfileMember + 19, // 10: p4.v1.Entity.action_profile_group:type_name -> p4.v1.ActionProfileGroup + 21, // 11: p4.v1.Entity.meter_entry:type_name -> p4.v1.MeterEntry + 22, // 12: p4.v1.Entity.direct_meter_entry:type_name -> p4.v1.DirectMeterEntry + 24, // 13: p4.v1.Entity.counter_entry:type_name -> p4.v1.CounterEntry + 25, // 14: p4.v1.Entity.direct_counter_entry:type_name -> p4.v1.DirectCounterEntry + 28, // 15: p4.v1.Entity.packet_replication_engine_entry:type_name -> p4.v1.PacketReplicationEngineEntry + 33, // 16: p4.v1.Entity.value_set_entry:type_name -> p4.v1.ValueSetEntry + 34, // 17: p4.v1.Entity.register_entry:type_name -> p4.v1.RegisterEntry + 35, // 18: p4.v1.Entity.digest_entry:type_name -> p4.v1.DigestEntry + 60, // 19: p4.v1.Entity.generic_table_entry:type_name -> p4.v1.GenericTableEntry + 78, // 20: p4.v1.ExternEntry.entry:type_name -> google.protobuf.Any + 13, // 21: p4.v1.TableEntry.match:type_name -> p4.v1.FieldMatch + 14, // 22: p4.v1.TableEntry.action:type_name -> p4.v1.TableAction + 23, // 23: p4.v1.TableEntry.meter_config:type_name -> p4.v1.MeterConfig + 26, // 24: p4.v1.TableEntry.counter_data:type_name -> p4.v1.CounterData + 27, // 25: p4.v1.TableEntry.meter_counter_data:type_name -> p4.v1.MeterCounterData + 62, // 26: p4.v1.TableEntry.time_since_last_hit:type_name -> p4.v1.TableEntry.IdleTimeout + 60, // 27: p4.v1.TableEntry.resources:type_name -> p4.v1.GenericTableEntry + 63, // 28: p4.v1.FieldMatch.exact:type_name -> p4.v1.FieldMatch.Exact + 64, // 29: p4.v1.FieldMatch.ternary:type_name -> p4.v1.FieldMatch.Ternary + 65, // 30: p4.v1.FieldMatch.lpm:type_name -> p4.v1.FieldMatch.LPM + 66, // 31: p4.v1.FieldMatch.range:type_name -> p4.v1.FieldMatch.Range + 67, // 32: p4.v1.FieldMatch.optional:type_name -> p4.v1.FieldMatch.Optional + 78, // 33: p4.v1.FieldMatch.other:type_name -> google.protobuf.Any + 15, // 34: p4.v1.TableAction.action:type_name -> p4.v1.Action + 16, // 35: p4.v1.TableAction.action_profile_action_set:type_name -> p4.v1.ActionProfileActionSet + 68, // 36: p4.v1.Action.params:type_name -> p4.v1.Action.Param + 17, // 37: p4.v1.ActionProfileActionSet.action_profile_actions:type_name -> p4.v1.ActionProfileAction + 15, // 38: p4.v1.ActionProfileAction.action:type_name -> p4.v1.Action + 15, // 39: p4.v1.ActionProfileMember.action:type_name -> p4.v1.Action + 69, // 40: p4.v1.ActionProfileGroup.members:type_name -> p4.v1.ActionProfileGroup.Member + 20, // 41: p4.v1.MeterEntry.index:type_name -> p4.v1.Index + 23, // 42: p4.v1.MeterEntry.config:type_name -> p4.v1.MeterConfig + 27, // 43: p4.v1.MeterEntry.counter_data:type_name -> p4.v1.MeterCounterData + 12, // 44: p4.v1.DirectMeterEntry.table_entry:type_name -> p4.v1.TableEntry + 23, // 45: p4.v1.DirectMeterEntry.config:type_name -> p4.v1.MeterConfig + 27, // 46: p4.v1.DirectMeterEntry.counter_data:type_name -> p4.v1.MeterCounterData + 20, // 47: p4.v1.CounterEntry.index:type_name -> p4.v1.Index + 26, // 48: p4.v1.CounterEntry.data:type_name -> p4.v1.CounterData + 12, // 49: p4.v1.DirectCounterEntry.table_entry:type_name -> p4.v1.TableEntry + 26, // 50: p4.v1.DirectCounterEntry.data:type_name -> p4.v1.CounterData + 26, // 51: p4.v1.MeterCounterData.green:type_name -> p4.v1.CounterData + 26, // 52: p4.v1.MeterCounterData.yellow:type_name -> p4.v1.CounterData + 26, // 53: p4.v1.MeterCounterData.red:type_name -> p4.v1.CounterData + 30, // 54: p4.v1.PacketReplicationEngineEntry.multicast_group_entry:type_name -> p4.v1.MulticastGroupEntry + 31, // 55: p4.v1.PacketReplicationEngineEntry.clone_session_entry:type_name -> p4.v1.CloneSessionEntry + 29, // 56: p4.v1.MulticastGroupEntry.replicas:type_name -> p4.v1.Replica + 29, // 57: p4.v1.CloneSessionEntry.replicas:type_name -> p4.v1.Replica + 13, // 58: p4.v1.ValueSetMember.match:type_name -> p4.v1.FieldMatch + 32, // 59: p4.v1.ValueSetEntry.members:type_name -> p4.v1.ValueSetMember + 20, // 60: p4.v1.RegisterEntry.index:type_name -> p4.v1.Index + 79, // 61: p4.v1.RegisterEntry.data:type_name -> p4.v1.P4Data + 70, // 62: p4.v1.DigestEntry.config:type_name -> p4.v1.DigestEntry.Config + 43, // 63: p4.v1.StreamMessageRequest.arbitration:type_name -> p4.v1.MasterArbitrationUpdate + 37, // 64: p4.v1.StreamMessageRequest.packet:type_name -> p4.v1.PacketOut + 38, // 65: p4.v1.StreamMessageRequest.digest_ack:type_name -> p4.v1.DigestListAck + 78, // 66: p4.v1.StreamMessageRequest.other:type_name -> google.protobuf.Any + 42, // 67: p4.v1.PacketOut.metadata:type_name -> p4.v1.PacketMetadata + 43, // 68: p4.v1.StreamMessageResponse.arbitration:type_name -> p4.v1.MasterArbitrationUpdate + 40, // 69: p4.v1.StreamMessageResponse.packet:type_name -> p4.v1.PacketIn + 41, // 70: p4.v1.StreamMessageResponse.digest:type_name -> p4.v1.DigestList + 45, // 71: p4.v1.StreamMessageResponse.idle_timeout_notification:type_name -> p4.v1.IdleTimeoutNotification + 78, // 72: p4.v1.StreamMessageResponse.other:type_name -> google.protobuf.Any + 46, // 73: p4.v1.StreamMessageResponse.error:type_name -> p4.v1.StreamError + 42, // 74: p4.v1.PacketIn.metadata:type_name -> p4.v1.PacketMetadata + 79, // 75: p4.v1.DigestList.data:type_name -> p4.v1.P4Data + 44, // 76: p4.v1.MasterArbitrationUpdate.role:type_name -> p4.v1.Role + 50, // 77: p4.v1.MasterArbitrationUpdate.election_id:type_name -> p4.v1.Uint128 + 80, // 78: p4.v1.MasterArbitrationUpdate.status:type_name -> google.rpc.Status + 78, // 79: p4.v1.Role.config:type_name -> google.protobuf.Any + 12, // 80: p4.v1.IdleTimeoutNotification.table_entry:type_name -> p4.v1.TableEntry + 47, // 81: p4.v1.StreamError.packet_out:type_name -> p4.v1.PacketOutError + 48, // 82: p4.v1.StreamError.digest_list_ack:type_name -> p4.v1.DigestListAckError + 49, // 83: p4.v1.StreamError.other:type_name -> p4.v1.StreamOtherError + 37, // 84: p4.v1.PacketOutError.packet_out:type_name -> p4.v1.PacketOut + 38, // 85: p4.v1.DigestListAckError.digest_list_ack:type_name -> p4.v1.DigestListAck + 78, // 86: p4.v1.StreamOtherError.other:type_name -> google.protobuf.Any + 50, // 87: p4.v1.SetForwardingPipelineConfigRequest.election_id:type_name -> p4.v1.Uint128 + 3, // 88: p4.v1.SetForwardingPipelineConfigRequest.action:type_name -> p4.v1.SetForwardingPipelineConfigRequest.Action + 53, // 89: p4.v1.SetForwardingPipelineConfigRequest.config:type_name -> p4.v1.ForwardingPipelineConfig + 81, // 90: p4.v1.ForwardingPipelineConfig.p4info:type_name -> p4.config.v1.P4Info + 71, // 91: p4.v1.ForwardingPipelineConfig.cookie:type_name -> p4.v1.ForwardingPipelineConfig.Cookie + 4, // 92: p4.v1.GetForwardingPipelineConfigRequest.response_type:type_name -> p4.v1.GetForwardingPipelineConfigRequest.ResponseType + 53, // 93: p4.v1.GetForwardingPipelineConfigResponse.config:type_name -> p4.v1.ForwardingPipelineConfig + 78, // 94: p4.v1.Error.details:type_name -> google.protobuf.Any + 72, // 95: p4.v1.GenericFieldMatch.exact:type_name -> p4.v1.GenericFieldMatch.Exact + 73, // 96: p4.v1.GenericFieldMatch.ternary:type_name -> p4.v1.GenericFieldMatch.Ternary + 74, // 97: p4.v1.GenericFieldMatch.lpm:type_name -> p4.v1.GenericFieldMatch.LPM + 75, // 98: p4.v1.GenericFieldMatch.range:type_name -> p4.v1.GenericFieldMatch.Range + 76, // 99: p4.v1.GenericFieldMatch.optional:type_name -> p4.v1.GenericFieldMatch.Optional + 78, // 100: p4.v1.GenericFieldMatch.other:type_name -> google.protobuf.Any + 59, // 101: p4.v1.GenericTableEntry.match:type_name -> p4.v1.GenericFieldMatch + 61, // 102: p4.v1.GenericTableEntry.table_data_union:type_name -> p4.v1.TableDataUnion + 77, // 103: p4.v1.TableDataUnion.params:type_name -> p4.v1.TableDataUnion.Param + 82, // 104: p4.v1.GenericFieldMatch.Exact.value:type_name -> p4.v1.GenericData + 82, // 105: p4.v1.GenericFieldMatch.Optional.value:type_name -> p4.v1.GenericData + 82, // 106: p4.v1.TableDataUnion.Param.value:type_name -> p4.v1.GenericData + 5, // 107: p4.v1.P4Runtime.Write:input_type -> p4.v1.WriteRequest + 7, // 108: p4.v1.P4Runtime.Read:input_type -> p4.v1.ReadRequest + 51, // 109: p4.v1.P4Runtime.SetForwardingPipelineConfig:input_type -> p4.v1.SetForwardingPipelineConfigRequest + 54, // 110: p4.v1.P4Runtime.GetForwardingPipelineConfig:input_type -> p4.v1.GetForwardingPipelineConfigRequest + 36, // 111: p4.v1.P4Runtime.StreamChannel:input_type -> p4.v1.StreamMessageRequest + 57, // 112: p4.v1.P4Runtime.Capabilities:input_type -> p4.v1.CapabilitiesRequest + 6, // 113: p4.v1.P4Runtime.Write:output_type -> p4.v1.WriteResponse + 8, // 114: p4.v1.P4Runtime.Read:output_type -> p4.v1.ReadResponse + 52, // 115: p4.v1.P4Runtime.SetForwardingPipelineConfig:output_type -> p4.v1.SetForwardingPipelineConfigResponse + 55, // 116: p4.v1.P4Runtime.GetForwardingPipelineConfig:output_type -> p4.v1.GetForwardingPipelineConfigResponse + 39, // 117: p4.v1.P4Runtime.StreamChannel:output_type -> p4.v1.StreamMessageResponse + 58, // 118: p4.v1.P4Runtime.Capabilities:output_type -> p4.v1.CapabilitiesResponse + 113, // [113:119] is the sub-list for method output_type + 107, // [107:113] is the sub-list for method input_type + 107, // [107:107] is the sub-list for extension type_name + 107, // [107:107] is the sub-list for extension extendee + 0, // [0:107] is the sub-list for field type_name } func init() { file_p4_v1_p4runtime_proto_init() } @@ -6512,7 +7257,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TableEntry_IdleTimeout); i { + switch v := v.(*GenericFieldMatch); i { case 0: return &v.state case 1: @@ -6524,7 +7269,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_Exact); i { + switch v := v.(*GenericTableEntry); i { case 0: return &v.state case 1: @@ -6536,7 +7281,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_Ternary); i { + switch v := v.(*TableDataUnion); i { case 0: return &v.state case 1: @@ -6548,7 +7293,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_LPM); i { + switch v := v.(*TableEntry_IdleTimeout); i { case 0: return &v.state case 1: @@ -6560,7 +7305,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_Range); i { + switch v := v.(*FieldMatch_Exact); i { case 0: return &v.state case 1: @@ -6572,7 +7317,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_Optional); i { + switch v := v.(*FieldMatch_Ternary); i { case 0: return &v.state case 1: @@ -6584,7 +7329,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Action_Param); i { + switch v := v.(*FieldMatch_LPM); i { case 0: return &v.state case 1: @@ -6596,7 +7341,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionProfileGroup_Member); i { + switch v := v.(*FieldMatch_Range); i { case 0: return &v.state case 1: @@ -6608,7 +7353,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DigestEntry_Config); i { + switch v := v.(*FieldMatch_Optional); i { case 0: return &v.state case 1: @@ -6620,6 +7365,42 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Action_Param); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActionProfileGroup_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DigestEntry_Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardingPipelineConfig_Cookie); i { case 0: return &v.state @@ -6631,6 +7412,78 @@ func file_p4_v1_p4runtime_proto_init() { return nil } } + file_p4_v1_p4runtime_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_Exact); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_Ternary); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_LPM); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_Range); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_Optional); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TableDataUnion_Param); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_p4_v1_p4runtime_proto_msgTypes[5].OneofWrappers = []interface{}{ (*Entity_ExternEntry)(nil), @@ -6645,6 +7498,7 @@ func file_p4_v1_p4runtime_proto_init() { (*Entity_ValueSetEntry)(nil), (*Entity_RegisterEntry)(nil), (*Entity_DigestEntry)(nil), + (*Entity_GenericTableEntry)(nil), } file_p4_v1_p4runtime_proto_msgTypes[8].OneofWrappers = []interface{}{ (*FieldMatch_Exact_)(nil), @@ -6691,7 +7545,15 @@ func file_p4_v1_p4runtime_proto_init() { (*StreamError_DigestListAck)(nil), (*StreamError_Other)(nil), } - file_p4_v1_p4runtime_proto_msgTypes[61].OneofWrappers = []interface{}{ + file_p4_v1_p4runtime_proto_msgTypes[54].OneofWrappers = []interface{}{ + (*GenericFieldMatch_Exact_)(nil), + (*GenericFieldMatch_Ternary_)(nil), + (*GenericFieldMatch_Lpm)(nil), + (*GenericFieldMatch_Range_)(nil), + (*GenericFieldMatch_Optional_)(nil), + (*GenericFieldMatch_Other)(nil), + } + file_p4_v1_p4runtime_proto_msgTypes[64].OneofWrappers = []interface{}{ (*ActionProfileGroup_Member_Watch)(nil), (*ActionProfileGroup_Member_WatchPort)(nil), } @@ -6701,7 +7563,7 @@ func file_p4_v1_p4runtime_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p4_v1_p4runtime_proto_rawDesc, NumEnums: 5, - NumMessages: 64, + NumMessages: 73, NumExtensions: 0, NumServices: 1, }, diff --git a/py/p4/config/v1/p4info_pb2.py b/py/p4/config/v1/p4info_pb2.py index a158b23c..da4abbc2 100644 --- a/py/p4/config/v1/p4info_pb2.py +++ b/py/p4/config/v1/p4info_pb2.py @@ -21,7 +21,7 @@ syntax='proto3', serialized_options=b'Z+github.com/p4lang/p4runtime/go/p4/config/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x19p4/config/v1/p4info.proto\x12\x0cp4.config.v1\x1a\x19google/protobuf/any.proto\x1a\x1ap4/config/v1/p4types.proto\"\x88\x05\n\x06P4Info\x12\'\n\x08pkg_info\x18\x01 \x01(\x0b\x32\x15.p4.config.v1.PkgInfo\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.p4.config.v1.Table\x12%\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\x14.p4.config.v1.Action\x12\x34\n\x0f\x61\x63tion_profiles\x18\x04 \x03(\x0b\x32\x1b.p4.config.v1.ActionProfile\x12\'\n\x08\x63ounters\x18\x05 \x03(\x0b\x32\x15.p4.config.v1.Counter\x12\x34\n\x0f\x64irect_counters\x18\x06 \x03(\x0b\x32\x1b.p4.config.v1.DirectCounter\x12#\n\x06meters\x18\x07 \x03(\x0b\x32\x13.p4.config.v1.Meter\x12\x30\n\rdirect_meters\x18\x08 \x03(\x0b\x32\x19.p4.config.v1.DirectMeter\x12J\n\x1a\x63ontroller_packet_metadata\x18\t \x03(\x0b\x32&.p4.config.v1.ControllerPacketMetadata\x12*\n\nvalue_sets\x18\n \x03(\x0b\x32\x16.p4.config.v1.ValueSet\x12)\n\tregisters\x18\x0b \x03(\x0b\x32\x16.p4.config.v1.Register\x12%\n\x07\x64igests\x18\x0c \x03(\x0b\x32\x14.p4.config.v1.Digest\x12%\n\x07\x65xterns\x18\x64 \x03(\x0b\x32\x14.p4.config.v1.Extern\x12,\n\ttype_info\x18\xc8\x01 \x01(\x0b\x32\x18.p4.config.v1.P4TypeInfo\"3\n\rDocumentation\x12\r\n\x05\x62rief\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\xa9\x02\n\x07PkgInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12(\n\x03\x64oc\x18\x03 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x0c\n\x04\x61rch\x18\x05 \x01(\t\x12\x14\n\x0corganization\x18\x06 \x01(\t\x12\x0f\n\x07\x63ontact\x18\x07 \x01(\t\x12\x0b\n\x03url\x18\x08 \x01(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x87\x02\n\x05P4Ids\"\xfd\x01\n\x06Prefix\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TION\x10\x01\x12\t\n\x05TABLE\x10\x02\x12\r\n\tVALUE_SET\x10\x03\x12\x15\n\x11\x43ONTROLLER_HEADER\x10\x04\x12\x15\n\x11PSA_EXTERNS_START\x10\x10\x12\x12\n\x0e\x41\x43TION_PROFILE\x10\x11\x12\x0b\n\x07\x43OUNTER\x10\x12\x12\x12\n\x0e\x44IRECT_COUNTER\x10\x13\x12\t\n\x05METER\x10\x14\x12\x10\n\x0c\x44IRECT_METER\x10\x15\x12\x0c\n\x08REGISTER\x10\x16\x12\n\n\x06\x44IGEST\x10\x17\x12\x18\n\x13OTHER_EXTERNS_START\x10\x80\x01\x12\x08\n\x03MAX\x10\xff\x01\"\xf2\x01\n\x08Preamble\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x06\x45xtern\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xtern_type_name\x18\x02 \x01(\t\x12/\n\tinstances\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.ExternInstance\"^\n\x0e\x45xternInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"\xdc\x03\n\nMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12\x38\n\nmatch_type\x18\x05 \x01(\x0e\x32\".p4.config.v1.MatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x07 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x08 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\xc1\x03\n\x05Table\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12.\n\x0cmatch_fields\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12,\n\x0b\x61\x63tion_refs\x18\x03 \x03(\x0b\x32\x17.p4.config.v1.ActionRef\x12\x1f\n\x17\x63onst_default_action_id\x18\x04 \x01(\r\x12\x19\n\x11implementation_id\x18\x06 \x01(\r\x12\x1b\n\x13\x64irect_resource_ids\x18\x07 \x03(\r\x12\x0c\n\x04size\x18\x08 \x01(\x03\x12\x46\n\x15idle_timeout_behavior\x18\t \x01(\x0e\x32\'.p4.config.v1.Table.IdleTimeoutBehavior\x12\x16\n\x0eis_const_table\x18\n \x01(\x08\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\"9\n\x13IdleTimeoutBehavior\x12\x0e\n\nNO_TIMEOUT\x10\x00\x12\x12\n\x0eNOTIFY_CONTROL\x10\x01\"\x9c\x02\n\tActionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.p4.config.v1.ActionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x81\x03\n\x06\x41\x63tion\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.p4.config.v1.Action.Param\x1a\xa0\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x82\x03\n\rActionProfile\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x11\n\ttable_ids\x18\x02 \x03(\r\x12\x15\n\rwith_selector\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x16\n\x0emax_group_size\x18\x05 \x01(\x05\x12\x42\n\x0esum_of_weights\x18\x06 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfWeightsH\x00\x12\x42\n\x0esum_of_members\x18\x07 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfMembersH\x00\x1a\x0e\n\x0cSumOfWeights\x1a\x44\n\x0cSumOfMembers\x12\x1e\n\x11max_member_weight\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x14\n\x12_max_member_weightB\x19\n\x17selector_size_semantics\"v\n\x0b\x43ounterSpec\x12,\n\x04unit\x18\x01 \x01(\x0e\x32\x1e.p4.config.v1.CounterSpec.Unit\"9\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\x12\x08\n\x04\x42OTH\x10\x03\"\x9e\x01\n\x07\x43ounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"{\n\rDirectCounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"h\n\tMeterSpec\x12*\n\x04unit\x18\x01 \x01(\x0e\x32\x1c.p4.config.v1.MeterSpec.Unit\"/\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\"\x9a\x01\n\x05Meter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"w\n\x0b\x44irectMeter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"\x83\x03\n\x18\x43ontrollerPacketMetadata\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x41\n\x08metadata\x18\x02 \x03(\x0b\x32/.p4.config.v1.ControllerPacketMetadata.Metadata\x1a\xf9\x01\n\x08Metadata\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12,\n\ttype_name\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x08ValueSet\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12\x0c\n\x04size\x18\x03 \x01(\x05\"\xa7\x01\n\x08Register\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"c\n\x06\x44igest\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' + serialized_pb=b'\n\x19p4/config/v1/p4info.proto\x12\x0cp4.config.v1\x1a\x19google/protobuf/any.proto\x1a\x1ap4/config/v1/p4types.proto\"\xe1\x05\n\x06P4Info\x12\'\n\x08pkg_info\x18\x01 \x01(\x0b\x32\x15.p4.config.v1.PkgInfo\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.p4.config.v1.Table\x12%\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\x14.p4.config.v1.Action\x12\x34\n\x0f\x61\x63tion_profiles\x18\x04 \x03(\x0b\x32\x1b.p4.config.v1.ActionProfile\x12\'\n\x08\x63ounters\x18\x05 \x03(\x0b\x32\x15.p4.config.v1.Counter\x12\x34\n\x0f\x64irect_counters\x18\x06 \x03(\x0b\x32\x1b.p4.config.v1.DirectCounter\x12#\n\x06meters\x18\x07 \x03(\x0b\x32\x13.p4.config.v1.Meter\x12\x30\n\rdirect_meters\x18\x08 \x03(\x0b\x32\x19.p4.config.v1.DirectMeter\x12J\n\x1a\x63ontroller_packet_metadata\x18\t \x03(\x0b\x32&.p4.config.v1.ControllerPacketMetadata\x12*\n\nvalue_sets\x18\n \x03(\x0b\x32\x16.p4.config.v1.ValueSet\x12)\n\tregisters\x18\x0b \x03(\x0b\x32\x16.p4.config.v1.Register\x12%\n\x07\x64igests\x18\x0c \x03(\x0b\x32\x14.p4.config.v1.Digest\x12\x32\n\x0egeneric_tables\x18\r \x03(\x0b\x32\x1a.p4.config.v1.GenericTable\x12#\n\x06unions\x18\x0e \x03(\x0b\x32\x13.p4.config.v1.Union\x12%\n\x07\x65xterns\x18\x64 \x03(\x0b\x32\x14.p4.config.v1.Extern\x12,\n\ttype_info\x18\xc8\x01 \x01(\x0b\x32\x18.p4.config.v1.P4TypeInfo\"3\n\rDocumentation\x12\r\n\x05\x62rief\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\xa9\x02\n\x07PkgInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12(\n\x03\x64oc\x18\x03 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x0c\n\x04\x61rch\x18\x05 \x01(\t\x12\x14\n\x0corganization\x18\x06 \x01(\t\x12\x0f\n\x07\x63ontact\x18\x07 \x01(\t\x12\x0b\n\x03url\x18\x08 \x01(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x9a\x02\n\x05P4Ids\"\x90\x02\n\x06Prefix\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TION\x10\x01\x12\t\n\x05TABLE\x10\x02\x12\r\n\tVALUE_SET\x10\x03\x12\x15\n\x11\x43ONTROLLER_HEADER\x10\x04\x12\x15\n\x11PSA_EXTERNS_START\x10\x10\x12\x12\n\x0e\x41\x43TION_PROFILE\x10\x11\x12\x0b\n\x07\x43OUNTER\x10\x12\x12\x12\n\x0e\x44IRECT_COUNTER\x10\x13\x12\t\n\x05METER\x10\x14\x12\x10\n\x0c\x44IRECT_METER\x10\x15\x12\x0c\n\x08REGISTER\x10\x16\x12\n\n\x06\x44IGEST\x10\x17\x12\x11\n\rGENERIC_TABLE\x10\x18\x12\x18\n\x13OTHER_EXTERNS_START\x10\x80\x01\x12\x08\n\x03MAX\x10\xff\x01\"@\n\x10GenericTableType\",\n\x06Prefix\x12\x18\n\x14GENERIC_TABLES_START\x10\x00\x12\x08\n\x03MAX\x10\xff\x01\"\xf2\x01\n\x08Preamble\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x06\x45xtern\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xtern_type_name\x18\x02 \x01(\t\x12/\n\tinstances\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.ExternInstance\"^\n\x0e\x45xternInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"\xdc\x03\n\nMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12\x38\n\nmatch_type\x18\x05 \x01(\x0e\x32\".p4.config.v1.MatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x07 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x08 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\xc1\x03\n\x05Table\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12.\n\x0cmatch_fields\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12,\n\x0b\x61\x63tion_refs\x18\x03 \x03(\x0b\x32\x17.p4.config.v1.ActionRef\x12\x1f\n\x17\x63onst_default_action_id\x18\x04 \x01(\r\x12\x19\n\x11implementation_id\x18\x06 \x01(\r\x12\x1b\n\x13\x64irect_resource_ids\x18\x07 \x03(\r\x12\x0c\n\x04size\x18\x08 \x01(\x03\x12\x46\n\x15idle_timeout_behavior\x18\t \x01(\x0e\x32\'.p4.config.v1.Table.IdleTimeoutBehavior\x12\x16\n\x0eis_const_table\x18\n \x01(\x08\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\"9\n\x13IdleTimeoutBehavior\x12\x0e\n\nNO_TIMEOUT\x10\x00\x12\x12\n\x0eNOTIFY_CONTROL\x10\x01\"\x9c\x02\n\tActionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.p4.config.v1.ActionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x81\x03\n\x06\x41\x63tion\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.p4.config.v1.Action.Param\x1a\xa0\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x82\x03\n\rActionProfile\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x11\n\ttable_ids\x18\x02 \x03(\r\x12\x15\n\rwith_selector\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x16\n\x0emax_group_size\x18\x05 \x01(\x05\x12\x42\n\x0esum_of_weights\x18\x06 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfWeightsH\x00\x12\x42\n\x0esum_of_members\x18\x07 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfMembersH\x00\x1a\x0e\n\x0cSumOfWeights\x1a\x44\n\x0cSumOfMembers\x12\x1e\n\x11max_member_weight\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x14\n\x12_max_member_weightB\x19\n\x17selector_size_semantics\"v\n\x0b\x43ounterSpec\x12,\n\x04unit\x18\x01 \x01(\x0e\x32\x1e.p4.config.v1.CounterSpec.Unit\"9\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\x12\x08\n\x04\x42OTH\x10\x03\"\x9e\x01\n\x07\x43ounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"{\n\rDirectCounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"h\n\tMeterSpec\x12*\n\x04unit\x18\x01 \x01(\x0e\x32\x1c.p4.config.v1.MeterSpec.Unit\"/\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\"\x9a\x01\n\x05Meter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"w\n\x0b\x44irectMeter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"\x83\x03\n\x18\x43ontrollerPacketMetadata\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x41\n\x08metadata\x18\x02 \x03(\x0b\x32/.p4.config.v1.ControllerPacketMetadata.Metadata\x1a\xf9\x01\n\x08Metadata\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12,\n\ttype_name\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x08ValueSet\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12\x0c\n\x04size\x18\x03 \x01(\x05\"\xa7\x01\n\x08Register\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"c\n\x06\x44igest\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xf2\x03\n\x11GenericMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08repeated\x18\x03 \x01(\x08\x12\x34\n\ttype_spec\x18\x04 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12?\n\nmatch_type\x18\x05 \x01(\x0e\x32).p4.config.v1.GenericMatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x06 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x07 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x08 \x03(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\x9a\x02\n\x08UnionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12+\n\x05scope\x18\x03 \x01(\x0e\x32\x1c.p4.config.v1.UnionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x87\x03\n\x05Union\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.p4.config.v1.Union.Param\x1a\xa8\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08repeated\x18\x03 \x01(\x08\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12\x34\n\ttype_spec\x18\x05 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"\xa7\x01\n\x0cGenericTable\x12\x1d\n\x15generic_table_type_id\x18\x01 \x01(\r\x12\x1f\n\x17generic_table_type_name\x18\x02 \x01(\t\x12 \n\x18generic_table_properties\x18\x03 \x03(\t\x12\x35\n\tinstances\x18\x04 \x03(\x0b\x32\".p4.config.v1.GenericTableInstance\"\x89\x02\n\x14GenericTableInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12=\n\x14generic_match_fields\x18\x02 \x03(\x0b\x32\x1f.p4.config.v1.GenericMatchField\x12*\n\nunion_refs\x18\x03 \x03(\x0b\x32\x16.p4.config.v1.UnionRef\x12\x1e\n\x16\x63onst_default_union_id\x18\x04 \x01(\r\x12\x0c\n\x04size\x18\x05 \x01(\x03\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' , dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,p4_dot_config_dot_v1_dot_p4types__pb2.DESCRIPTOR,]) @@ -100,23 +100,53 @@ type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( - name='OTHER_EXTERNS_START', index=13, number=128, + name='GENERIC_TABLE', index=13, number=24, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( - name='MAX', index=14, number=255, + name='OTHER_EXTERNS_START', index=14, number=128, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MAX', index=15, number=255, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, - serialized_start=1113, - serialized_end=1366, + serialized_start=1202, + serialized_end=1474, ) _sym_db.RegisterEnumDescriptor(_P4IDS_PREFIX) +_GENERICTABLETYPE_PREFIX = _descriptor.EnumDescriptor( + name='Prefix', + full_name='p4.config.v1.GenericTableType.Prefix', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='GENERIC_TABLES_START', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MAX', index=1, number=255, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=1496, + serialized_end=1540, +) +_sym_db.RegisterEnumDescriptor(_GENERICTABLETYPE_PREFIX) + _MATCHFIELD_MATCHTYPE = _descriptor.EnumDescriptor( name='MatchType', full_name='p4.config.v1.MatchField.MatchType', @@ -157,8 +187,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2200, - serialized_end=2286, + serialized_start=2374, + serialized_end=2460, ) _sym_db.RegisterEnumDescriptor(_MATCHFIELD_MATCHTYPE) @@ -182,8 +212,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2690, - serialized_end=2747, + serialized_start=2864, + serialized_end=2921, ) _sym_db.RegisterEnumDescriptor(_TABLE_IDLETIMEOUTBEHAVIOR) @@ -212,8 +242,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2970, - serialized_end=3034, + serialized_start=3144, + serialized_end=3208, ) _sym_db.RegisterEnumDescriptor(_ACTIONREF_SCOPE) @@ -247,8 +277,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=3874, - serialized_end=3931, + serialized_start=4048, + serialized_end=4105, ) _sym_db.RegisterEnumDescriptor(_COUNTERSPEC_UNIT) @@ -277,11 +307,86 @@ ], containing_type=None, serialized_options=None, - serialized_start=3874, - serialized_end=3921, + serialized_start=4048, + serialized_end=4095, ) _sym_db.RegisterEnumDescriptor(_METERSPEC_UNIT) +_GENERICMATCHFIELD_MATCHTYPE = _descriptor.EnumDescriptor( + name='MatchType', + full_name='p4.config.v1.GenericMatchField.MatchType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='UNSPECIFIED', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='EXACT', index=1, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='LPM', index=2, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='TERNARY', index=3, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RANGE', index=4, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='OPTIONAL', index=5, number=6, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2374, + serialized_end=2460, +) +_sym_db.RegisterEnumDescriptor(_GENERICMATCHFIELD_MATCHTYPE) + +_UNIONREF_SCOPE = _descriptor.EnumDescriptor( + name='Scope', + full_name='p4.config.v1.UnionRef.Scope', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='TABLE_AND_DEFAULT', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='TABLE_ONLY', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DEFAULT_ONLY', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=3144, + serialized_end=3208, +) +_sym_db.RegisterEnumDescriptor(_UNIONREF_SCOPE) + _P4INFO = _descriptor.Descriptor( name='P4Info', @@ -376,14 +481,28 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='externs', full_name='p4.config.v1.P4Info.externs', index=12, + name='generic_tables', full_name='p4.config.v1.P4Info.generic_tables', index=12, + number=13, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='unions', full_name='p4.config.v1.P4Info.unions', index=13, + number=14, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='externs', full_name='p4.config.v1.P4Info.externs', index=14, number=100, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='type_info', full_name='p4.config.v1.P4Info.type_info', index=13, + name='type_info', full_name='p4.config.v1.P4Info.type_info', index=15, number=200, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, @@ -402,7 +521,7 @@ oneofs=[ ], serialized_start=99, - serialized_end=747, + serialized_end=836, ) @@ -440,8 +559,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=749, - serialized_end=800, + serialized_start=838, + serialized_end=889, ) @@ -535,8 +654,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=803, - serialized_end=1100, + serialized_start=892, + serialized_end=1189, ) @@ -561,8 +680,34 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1103, - serialized_end=1366, + serialized_start=1192, + serialized_end=1474, +) + + +_GENERICTABLETYPE = _descriptor.Descriptor( + name='GenericTableType', + full_name='p4.config.v1.GenericTableType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _GENERICTABLETYPE_PREFIX, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1476, + serialized_end=1540, ) @@ -635,8 +780,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1369, - serialized_end=1611, + serialized_start=1543, + serialized_end=1785, ) @@ -681,8 +826,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1613, - serialized_end=1720, + serialized_start=1787, + serialized_end=1894, ) @@ -720,8 +865,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1722, - serialized_end=1816, + serialized_start=1896, + serialized_end=1990, ) @@ -821,8 +966,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=1819, - serialized_end=2295, + serialized_start=1993, + serialized_end=2469, ) @@ -917,8 +1062,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2298, - serialized_end=2747, + serialized_start=2472, + serialized_end=2921, ) @@ -978,8 +1123,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2750, - serialized_end=3034, + serialized_start=2924, + serialized_end=3208, ) @@ -1059,8 +1204,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3134, - serialized_end=3422, + serialized_start=3308, + serialized_end=3596, ) _ACTION = _descriptor.Descriptor( @@ -1097,8 +1242,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3037, - serialized_end=3422, + serialized_start=3211, + serialized_end=3596, ) @@ -1122,8 +1267,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3700, - serialized_end=3714, + serialized_start=3874, + serialized_end=3888, ) _ACTIONPROFILE_SUMOFMEMBERS = _descriptor.Descriptor( @@ -1158,8 +1303,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=3716, - serialized_end=3784, + serialized_start=3890, + serialized_end=3958, ) _ACTIONPROFILE = _descriptor.Descriptor( @@ -1236,8 +1381,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=3425, - serialized_end=3811, + serialized_start=3599, + serialized_end=3985, ) @@ -1269,8 +1414,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3813, - serialized_end=3931, + serialized_start=3987, + serialized_end=4105, ) @@ -1322,8 +1467,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3934, - serialized_end=4092, + serialized_start=4108, + serialized_end=4266, ) @@ -1368,8 +1513,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4094, - serialized_end=4217, + serialized_start=4268, + serialized_end=4391, ) @@ -1401,8 +1546,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4219, - serialized_end=4323, + serialized_start=4393, + serialized_end=4497, ) @@ -1454,8 +1599,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4326, - serialized_end=4480, + serialized_start=4500, + serialized_end=4654, ) @@ -1500,8 +1645,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4482, - serialized_end=4601, + serialized_start=4656, + serialized_end=4775, ) @@ -1574,8 +1719,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4742, - serialized_end=4991, + serialized_start=4916, + serialized_end=5165, ) _CONTROLLERPACKETMETADATA = _descriptor.Descriptor( @@ -1612,8 +1757,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4604, - serialized_end=4991, + serialized_start=4778, + serialized_end=5165, ) @@ -1658,8 +1803,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4993, - serialized_end=5100, + serialized_start=5167, + serialized_end=5274, ) @@ -1711,8 +1856,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5103, - serialized_end=5270, + serialized_start=5277, + serialized_end=5444, ) @@ -1750,8 +1895,409 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5272, - serialized_end=5371, + serialized_start=5446, + serialized_end=5545, +) + + +_GENERICMATCHFIELD = _descriptor.Descriptor( + name='GenericMatchField', + full_name='p4.config.v1.GenericMatchField', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='p4.config.v1.GenericMatchField.id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.GenericMatchField.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='repeated', full_name='p4.config.v1.GenericMatchField.repeated', index=2, + number=3, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type_spec', full_name='p4.config.v1.GenericMatchField.type_spec', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='match_type', full_name='p4.config.v1.GenericMatchField.match_type', index=4, + number=5, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='other_match_type', full_name='p4.config.v1.GenericMatchField.other_match_type', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='doc', full_name='p4.config.v1.GenericMatchField.doc', index=6, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericMatchField.annotations', index=7, + number=8, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericMatchField.structured_annotations', index=8, + number=9, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericMatchField.annotation_locations', index=9, + number=10, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _GENERICMATCHFIELD_MATCHTYPE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='match', full_name='p4.config.v1.GenericMatchField.match', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=5548, + serialized_end=6046, +) + + +_UNIONREF = _descriptor.Descriptor( + name='UnionRef', + full_name='p4.config.v1.UnionRef', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='p4.config.v1.UnionRef.id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='scope', full_name='p4.config.v1.UnionRef.scope', index=1, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.UnionRef.annotations', index=2, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.UnionRef.annotation_locations', index=3, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.UnionRef.structured_annotations', index=4, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _UNIONREF_SCOPE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6049, + serialized_end=6331, +) + + +_UNION_PARAM = _descriptor.Descriptor( + name='Param', + full_name='p4.config.v1.Union.Param', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='p4.config.v1.Union.Param.id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.Union.Param.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='repeated', full_name='p4.config.v1.Union.Param.repeated', index=2, + number=3, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.Union.Param.annotations', index=3, + number=4, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type_spec', full_name='p4.config.v1.Union.Param.type_spec', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='doc', full_name='p4.config.v1.Union.Param.doc', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.Union.Param.structured_annotations', index=6, + number=7, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.Union.Param.annotation_locations', index=7, + number=8, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6429, + serialized_end=6725, +) + +_UNION = _descriptor.Descriptor( + name='Union', + full_name='p4.config.v1.Union', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='preamble', full_name='p4.config.v1.Union.preamble', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='params', full_name='p4.config.v1.Union.params', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_UNION_PARAM, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6334, + serialized_end=6725, +) + + +_GENERICTABLE = _descriptor.Descriptor( + name='GenericTable', + full_name='p4.config.v1.GenericTable', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='generic_table_type_id', full_name='p4.config.v1.GenericTable.generic_table_type_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='generic_table_type_name', full_name='p4.config.v1.GenericTable.generic_table_type_name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='generic_table_properties', full_name='p4.config.v1.GenericTable.generic_table_properties', index=2, + number=3, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='instances', full_name='p4.config.v1.GenericTable.instances', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6728, + serialized_end=6895, +) + + +_GENERICTABLEINSTANCE = _descriptor.Descriptor( + name='GenericTableInstance', + full_name='p4.config.v1.GenericTableInstance', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='preamble', full_name='p4.config.v1.GenericTableInstance.preamble', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='generic_match_fields', full_name='p4.config.v1.GenericTableInstance.generic_match_fields', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='union_refs', full_name='p4.config.v1.GenericTableInstance.union_refs', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='const_default_union_id', full_name='p4.config.v1.GenericTableInstance.const_default_union_id', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='size', full_name='p4.config.v1.GenericTableInstance.size', index=4, + number=5, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='other_properties', full_name='p4.config.v1.GenericTableInstance.other_properties', index=5, + number=100, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6898, + serialized_end=7163, ) _P4INFO.fields_by_name['pkg_info'].message_type = _PKGINFO @@ -1766,12 +2312,15 @@ _P4INFO.fields_by_name['value_sets'].message_type = _VALUESET _P4INFO.fields_by_name['registers'].message_type = _REGISTER _P4INFO.fields_by_name['digests'].message_type = _DIGEST +_P4INFO.fields_by_name['generic_tables'].message_type = _GENERICTABLE +_P4INFO.fields_by_name['unions'].message_type = _UNION _P4INFO.fields_by_name['externs'].message_type = _EXTERN _P4INFO.fields_by_name['type_info'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._P4TYPEINFO _PKGINFO.fields_by_name['doc'].message_type = _DOCUMENTATION _PKGINFO.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION _PKGINFO.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION _P4IDS_PREFIX.containing_type = _P4IDS +_GENERICTABLETYPE_PREFIX.containing_type = _GENERICTABLETYPE _PREAMBLE.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION _PREAMBLE.fields_by_name['doc'].message_type = _DOCUMENTATION _PREAMBLE.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION @@ -1848,10 +2397,39 @@ _REGISTER.fields_by_name['index_type_name'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._P4NAMEDTYPE _DIGEST.fields_by_name['preamble'].message_type = _PREAMBLE _DIGEST.fields_by_name['type_spec'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._P4DATATYPESPEC +_GENERICMATCHFIELD.fields_by_name['type_spec'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._GENERICDATATYPESPEC +_GENERICMATCHFIELD.fields_by_name['match_type'].enum_type = _GENERICMATCHFIELD_MATCHTYPE +_GENERICMATCHFIELD.fields_by_name['doc'].message_type = _DOCUMENTATION +_GENERICMATCHFIELD.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION +_GENERICMATCHFIELD.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION +_GENERICMATCHFIELD_MATCHTYPE.containing_type = _GENERICMATCHFIELD +_GENERICMATCHFIELD.oneofs_by_name['match'].fields.append( + _GENERICMATCHFIELD.fields_by_name['match_type']) +_GENERICMATCHFIELD.fields_by_name['match_type'].containing_oneof = _GENERICMATCHFIELD.oneofs_by_name['match'] +_GENERICMATCHFIELD.oneofs_by_name['match'].fields.append( + _GENERICMATCHFIELD.fields_by_name['other_match_type']) +_GENERICMATCHFIELD.fields_by_name['other_match_type'].containing_oneof = _GENERICMATCHFIELD.oneofs_by_name['match'] +_UNIONREF.fields_by_name['scope'].enum_type = _UNIONREF_SCOPE +_UNIONREF.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION +_UNIONREF.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION +_UNIONREF_SCOPE.containing_type = _UNIONREF +_UNION_PARAM.fields_by_name['type_spec'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._GENERICDATATYPESPEC +_UNION_PARAM.fields_by_name['doc'].message_type = _DOCUMENTATION +_UNION_PARAM.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION +_UNION_PARAM.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION +_UNION_PARAM.containing_type = _UNION +_UNION.fields_by_name['preamble'].message_type = _PREAMBLE +_UNION.fields_by_name['params'].message_type = _UNION_PARAM +_GENERICTABLE.fields_by_name['instances'].message_type = _GENERICTABLEINSTANCE +_GENERICTABLEINSTANCE.fields_by_name['preamble'].message_type = _PREAMBLE +_GENERICTABLEINSTANCE.fields_by_name['generic_match_fields'].message_type = _GENERICMATCHFIELD +_GENERICTABLEINSTANCE.fields_by_name['union_refs'].message_type = _UNIONREF +_GENERICTABLEINSTANCE.fields_by_name['other_properties'].message_type = google_dot_protobuf_dot_any__pb2._ANY DESCRIPTOR.message_types_by_name['P4Info'] = _P4INFO DESCRIPTOR.message_types_by_name['Documentation'] = _DOCUMENTATION DESCRIPTOR.message_types_by_name['PkgInfo'] = _PKGINFO DESCRIPTOR.message_types_by_name['P4Ids'] = _P4IDS +DESCRIPTOR.message_types_by_name['GenericTableType'] = _GENERICTABLETYPE DESCRIPTOR.message_types_by_name['Preamble'] = _PREAMBLE DESCRIPTOR.message_types_by_name['Extern'] = _EXTERN DESCRIPTOR.message_types_by_name['ExternInstance'] = _EXTERNINSTANCE @@ -1870,6 +2448,11 @@ DESCRIPTOR.message_types_by_name['ValueSet'] = _VALUESET DESCRIPTOR.message_types_by_name['Register'] = _REGISTER DESCRIPTOR.message_types_by_name['Digest'] = _DIGEST +DESCRIPTOR.message_types_by_name['GenericMatchField'] = _GENERICMATCHFIELD +DESCRIPTOR.message_types_by_name['UnionRef'] = _UNIONREF +DESCRIPTOR.message_types_by_name['Union'] = _UNION +DESCRIPTOR.message_types_by_name['GenericTable'] = _GENERICTABLE +DESCRIPTOR.message_types_by_name['GenericTableInstance'] = _GENERICTABLEINSTANCE _sym_db.RegisterFileDescriptor(DESCRIPTOR) P4Info = _reflection.GeneratedProtocolMessageType('P4Info', (_message.Message,), { @@ -1900,6 +2483,13 @@ }) _sym_db.RegisterMessage(P4Ids) +GenericTableType = _reflection.GeneratedProtocolMessageType('GenericTableType', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTABLETYPE, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTableType) + }) +_sym_db.RegisterMessage(GenericTableType) + Preamble = _reflection.GeneratedProtocolMessageType('Preamble', (_message.Message,), { 'DESCRIPTOR' : _PREAMBLE, '__module__' : 'p4.config.v1.p4info_pb2' @@ -2058,6 +2648,49 @@ }) _sym_db.RegisterMessage(Digest) +GenericMatchField = _reflection.GeneratedProtocolMessageType('GenericMatchField', (_message.Message,), { + 'DESCRIPTOR' : _GENERICMATCHFIELD, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericMatchField) + }) +_sym_db.RegisterMessage(GenericMatchField) + +UnionRef = _reflection.GeneratedProtocolMessageType('UnionRef', (_message.Message,), { + 'DESCRIPTOR' : _UNIONREF, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.UnionRef) + }) +_sym_db.RegisterMessage(UnionRef) + +Union = _reflection.GeneratedProtocolMessageType('Union', (_message.Message,), { + + 'Param' : _reflection.GeneratedProtocolMessageType('Param', (_message.Message,), { + 'DESCRIPTOR' : _UNION_PARAM, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.Union.Param) + }) + , + 'DESCRIPTOR' : _UNION, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.Union) + }) +_sym_db.RegisterMessage(Union) +_sym_db.RegisterMessage(Union.Param) + +GenericTable = _reflection.GeneratedProtocolMessageType('GenericTable', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTABLE, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTable) + }) +_sym_db.RegisterMessage(GenericTable) + +GenericTableInstance = _reflection.GeneratedProtocolMessageType('GenericTableInstance', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTABLEINSTANCE, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTableInstance) + }) +_sym_db.RegisterMessage(GenericTableInstance) + DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/p4/config/v1/p4types_pb2.py b/py/p4/config/v1/p4types_pb2.py index 1d4b2414..59b9b31b 100644 --- a/py/p4/config/v1/p4types_pb2.py +++ b/py/p4/config/v1/p4types_pb2.py @@ -19,7 +19,7 @@ syntax='proto3', serialized_options=b'Z+github.com/p4lang/p4runtime/go/p4/config/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x1ap4/config/v1/p4types.proto\x12\x0cp4.config.v1\"\xa1\x07\n\nP4TypeInfo\x12\x36\n\x07structs\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.StructsEntry\x12\x36\n\x07headers\x18\x02 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.HeadersEntry\x12\x41\n\rheader_unions\x18\x03 \x03(\x0b\x32*.p4.config.v1.P4TypeInfo.HeaderUnionsEntry\x12\x32\n\x05\x65nums\x18\x04 \x03(\x0b\x32#.p4.config.v1.P4TypeInfo.EnumsEntry\x12,\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x1d.p4.config.v1.P4ErrorTypeSpec\x12K\n\x12serializable_enums\x18\x06 \x03(\x0b\x32/.p4.config.v1.P4TypeInfo.SerializableEnumsEntry\x12\x39\n\tnew_types\x18\x07 \x03(\x0b\x32&.p4.config.v1.P4TypeInfo.NewTypesEntry\x1aN\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4StructTypeSpec:\x02\x38\x01\x1aN\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4HeaderTypeSpec:\x02\x38\x01\x1aX\n\x11HeaderUnionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.P4HeaderUnionTypeSpec:\x02\x38\x01\x1aJ\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4EnumTypeSpec:\x02\x38\x01\x1a\x62\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.p4.config.v1.P4SerializableEnumTypeSpec:\x02\x38\x01\x1aL\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4NewTypeSpec:\x02\x38\x01\"\x83\x05\n\x0eP4DataTypeSpec\x12:\n\tbitstring\x18\x01 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpecH\x00\x12(\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.P4BoolTypeH\x00\x12.\n\x05tuple\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.P4TupleTypeSpecH\x00\x12+\n\x06struct\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12+\n\x06header\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12\x31\n\x0cheader_union\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12;\n\x0cheader_stack\x18\x07 \x01(\x0b\x32#.p4.config.v1.P4HeaderStackTypeSpecH\x00\x12\x46\n\x12header_union_stack\x18\x08 \x01(\x0b\x32(.p4.config.v1.P4HeaderUnionStackTypeSpecH\x00\x12)\n\x04\x65num\x18\t \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12*\n\x05\x65rror\x18\n \x01(\x0b\x32\x19.p4.config.v1.P4ErrorTypeH\x00\x12\x36\n\x11serializable_enum\x18\x0b \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12-\n\x08new_type\x18\x0c \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x42\x0b\n\ttype_spec\"\x1b\n\x0bP4NamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x0c\n\nP4BoolType\"\r\n\x0bP4ErrorType\"\xc5\x02\n\x17P4BitstringLikeTypeSpec\x12*\n\x03\x62it\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpecH\x00\x12*\n\x03int\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4IntTypeSpecH\x00\x12\x30\n\x06varbit\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.P4VarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"!\n\rP4BitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"!\n\rP4IntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"(\n\x10P4VarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\"@\n\x0fP4TupleTypeSpec\x12-\n\x07members\x18\x01 \x03(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xa8\x02\n\x10P4StructTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4StructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aG\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xb1\x02\n\x10P4HeaderTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4HeaderTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aP\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\ttype_spec\x18\x02 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpec\"\xac\x02\n\x15P4HeaderUnionTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.P4HeaderUnionTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\x41\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x06header\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"P\n\x15P4HeaderStackTypeSpec\x12)\n\x06header\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"[\n\x1aP4HeaderUnionStackTypeSpec\x12/\n\x0cheader_union\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"D\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.Expression\"@\n\x10KeyValuePairList\x12,\n\x08kv_pairs\x18\x01 \x03(\x0b\x32\x1a.p4.config.v1.KeyValuePair\"Z\n\nExpression\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x15\n\x0bint64_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value\"?\n\x0e\x45xpressionList\x12-\n\x0b\x65xpressions\x18\x01 \x03(\x0b\x32\x18.p4.config.v1.Expression\"\xd4\x01\n\x14StructuredAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x37\n\x0f\x65xpression_list\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.ExpressionListH\x00\x12\x36\n\x0ckv_pair_list\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.KeyValuePairListH\x00\x12\x35\n\x0fsource_location\x18\x04 \x01(\x0b\x32\x1c.p4.config.v1.SourceLocationB\x06\n\x04\x62ody\"<\n\x0eSourceLocation\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\x05\x12\x0e\n\x06\x63olumn\x18\x03 \x01(\x05\"\x89\x03\n\x0eP4EnumTypeSpec\x12\x34\n\x07members\x18\x01 \x03(\x0b\x32#.p4.config.v1.P4EnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xab\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xe6\x03\n\x1aP4SerializableEnumTypeSpec\x12\x34\n\x0funderlying_type\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpec\x12@\n\x07members\x18\x02 \x03(\x0b\x32/.p4.config.v1.P4SerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xba\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\"\n\x0fP4ErrorTypeSpec\x12\x0f\n\x07members\x18\x01 \x03(\t\"\x98\x01\n\x14P4NewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12\x42\n\nsdn_string\x18\x03 \x01(\x0b\x32,.p4.config.v1.P4NewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xac\x02\n\rP4NewTypeSpec\x12\x35\n\roriginal_type\x18\x01 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x12=\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\".p4.config.v1.P4NewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentationB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' + serialized_pb=b'\n\x1ap4/config/v1/p4types.proto\x12\x0cp4.config.v1\"\xa1\x07\n\nP4TypeInfo\x12\x36\n\x07structs\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.StructsEntry\x12\x36\n\x07headers\x18\x02 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.HeadersEntry\x12\x41\n\rheader_unions\x18\x03 \x03(\x0b\x32*.p4.config.v1.P4TypeInfo.HeaderUnionsEntry\x12\x32\n\x05\x65nums\x18\x04 \x03(\x0b\x32#.p4.config.v1.P4TypeInfo.EnumsEntry\x12,\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x1d.p4.config.v1.P4ErrorTypeSpec\x12K\n\x12serializable_enums\x18\x06 \x03(\x0b\x32/.p4.config.v1.P4TypeInfo.SerializableEnumsEntry\x12\x39\n\tnew_types\x18\x07 \x03(\x0b\x32&.p4.config.v1.P4TypeInfo.NewTypesEntry\x1aN\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4StructTypeSpec:\x02\x38\x01\x1aN\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4HeaderTypeSpec:\x02\x38\x01\x1aX\n\x11HeaderUnionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.P4HeaderUnionTypeSpec:\x02\x38\x01\x1aJ\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4EnumTypeSpec:\x02\x38\x01\x1a\x62\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.p4.config.v1.P4SerializableEnumTypeSpec:\x02\x38\x01\x1aL\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4NewTypeSpec:\x02\x38\x01\"\x83\x05\n\x0eP4DataTypeSpec\x12:\n\tbitstring\x18\x01 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpecH\x00\x12(\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.P4BoolTypeH\x00\x12.\n\x05tuple\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.P4TupleTypeSpecH\x00\x12+\n\x06struct\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12+\n\x06header\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12\x31\n\x0cheader_union\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12;\n\x0cheader_stack\x18\x07 \x01(\x0b\x32#.p4.config.v1.P4HeaderStackTypeSpecH\x00\x12\x46\n\x12header_union_stack\x18\x08 \x01(\x0b\x32(.p4.config.v1.P4HeaderUnionStackTypeSpecH\x00\x12)\n\x04\x65num\x18\t \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12*\n\x05\x65rror\x18\n \x01(\x0b\x32\x19.p4.config.v1.P4ErrorTypeH\x00\x12\x36\n\x11serializable_enum\x18\x0b \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12-\n\x08new_type\x18\x0c \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x42\x0b\n\ttype_spec\"\x1b\n\x0bP4NamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x0c\n\nP4BoolType\"\r\n\x0bP4ErrorType\"\xc5\x02\n\x17P4BitstringLikeTypeSpec\x12*\n\x03\x62it\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpecH\x00\x12*\n\x03int\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4IntTypeSpecH\x00\x12\x30\n\x06varbit\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.P4VarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"!\n\rP4BitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"!\n\rP4IntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"(\n\x10P4VarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\"@\n\x0fP4TupleTypeSpec\x12-\n\x07members\x18\x01 \x03(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xa8\x02\n\x10P4StructTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4StructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aG\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xb1\x02\n\x10P4HeaderTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4HeaderTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aP\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\ttype_spec\x18\x02 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpec\"\xac\x02\n\x15P4HeaderUnionTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.P4HeaderUnionTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\x41\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x06header\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"P\n\x15P4HeaderStackTypeSpec\x12)\n\x06header\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"[\n\x1aP4HeaderUnionStackTypeSpec\x12/\n\x0cheader_union\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"D\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.Expression\"@\n\x10KeyValuePairList\x12,\n\x08kv_pairs\x18\x01 \x03(\x0b\x32\x1a.p4.config.v1.KeyValuePair\"Z\n\nExpression\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x15\n\x0bint64_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value\"?\n\x0e\x45xpressionList\x12-\n\x0b\x65xpressions\x18\x01 \x03(\x0b\x32\x18.p4.config.v1.Expression\"\xd4\x01\n\x14StructuredAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x37\n\x0f\x65xpression_list\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.ExpressionListH\x00\x12\x36\n\x0ckv_pair_list\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.KeyValuePairListH\x00\x12\x35\n\x0fsource_location\x18\x04 \x01(\x0b\x32\x1c.p4.config.v1.SourceLocationB\x06\n\x04\x62ody\"<\n\x0eSourceLocation\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\x05\x12\x0e\n\x06\x63olumn\x18\x03 \x01(\x05\"\x89\x03\n\x0eP4EnumTypeSpec\x12\x34\n\x07members\x18\x01 \x03(\x0b\x32#.p4.config.v1.P4EnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xab\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xe6\x03\n\x1aP4SerializableEnumTypeSpec\x12\x34\n\x0funderlying_type\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpec\x12@\n\x07members\x18\x02 \x03(\x0b\x32/.p4.config.v1.P4SerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xba\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\"\n\x0fP4ErrorTypeSpec\x12\x0f\n\x07members\x18\x01 \x03(\t\"\x98\x01\n\x14P4NewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12\x42\n\nsdn_string\x18\x03 \x01(\x0b\x32,.p4.config.v1.P4NewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xac\x02\n\rP4NewTypeSpec\x12\x35\n\roriginal_type\x18\x01 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x12=\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\".p4.config.v1.P4NewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentation\"\x85\x06\n\x0fGenericTypeInfo\x12;\n\x07structs\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericTypeInfo.StructsEntry\x12\x37\n\x05lists\x18\x02 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.ListsEntry\x12\x37\n\x05\x65nums\x18\x03 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.EnumsEntry\x12P\n\x12serializable_enums\x18\x04 \x03(\x0b\x32\x34.p4.config.v1.GenericTypeInfo.SerializableEnumsEntry\x12>\n\tnew_types\x18\x05 \x03(\x0b\x32+.p4.config.v1.GenericTypeInfo.NewTypesEntry\x1aS\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.GenericStructTypeSpec:\x02\x38\x01\x1aO\n\nListsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericListTypeSpec:\x02\x38\x01\x1aO\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericEnumTypeSpec:\x02\x38\x01\x1ag\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12<\n\x05value\x18\x02 \x01(\x0b\x32-.p4.config.v1.GenericSerializableEnumTypeSpec:\x02\x38\x01\x1aQ\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericNewTypeSpec:\x02\x38\x01\"\xe2\x04\n\x13GenericDataTypeSpec\x12?\n\tbitstring\x18\x01 \x01(\x0b\x32*.p4.config.v1.GenericBitstringLikeTypeSpecH\x00\x12/\n\x05\x66loat\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.GenericFloatTypeH\x00\x12-\n\x04\x62ool\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.GenericBoolTypeH\x00\x12\x30\n\x06struct\x18\x04 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04list\x18\x05 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x37\n\runordered_set\x18\x06 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x30\n\x06string\x18\x07 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04\x65num\x18\x08 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12;\n\x11serializable_enum\x18\t \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x32\n\x08new_type\x18\n \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12/\n\x07p4_type\x18\x0b \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x42\x0b\n\ttype_spec\" \n\x10GenericNamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x11\n\x0fGenericBoolType\"\x12\n\x10GenericFloatType\"\xd9\x02\n\x1cGenericBitstringLikeTypeSpec\x12/\n\x03\x62it\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpecH\x00\x12/\n\x03int\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericIntTypeSpecH\x00\x12\x35\n\x06varbit\x18\x03 \x01(\x0b\x32#.p4.config.v1.GenericVarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"=\n\x12GenericBitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"=\n\x12GenericIntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"D\n\x15GenericVarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"\xb7\x02\n\x15GenericStructTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericStructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aL\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x34\n\ttype_spec\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\"\x84\x02\n\x13GenericListTypeSpec\x12\x34\n\ttype_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x8c\x02\n\x1bGenericUnorderedSetTypeSpec\x12\x34\n\ttype_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xda\x01\n\x11GenericStringSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08min_size\x18\x02 \x01(\x05\x12\x10\n\x08max_size\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xaa\x03\n\x13GenericEnumTypeSpec\x12\x39\n\x07members\x18\x01 \x03(\x0b\x32(.p4.config.v1.GenericEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xc2\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x8c\x04\n\x1fGenericSerializableEnumTypeSpec\x12\x39\n\x0funderlying_type\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpec\x12\x45\n\x07members\x18\x02 \x03(\x0b\x32\x34.p4.config.v1.GenericSerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xd1\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x15\n\rdefault_value\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xa2\x01\n\x19GenericNewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12G\n\nsdn_string\x18\x03 \x01(\x0b\x32\x31.p4.config.v1.GenericNewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xbb\x02\n\x12GenericNewTypeSpec\x12:\n\roriginal_type\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpecH\x00\x12\x42\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\'.p4.config.v1.GenericNewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentationB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' ) @@ -1727,6 +1727,1304 @@ serialized_end=5218, ) + +_GENERICTYPEINFO_STRUCTSENTRY = _descriptor.Descriptor( + name='StructsEntry', + full_name='p4.config.v1.GenericTypeInfo.StructsEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='p4.config.v1.GenericTypeInfo.StructsEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='p4.config.v1.GenericTypeInfo.StructsEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=b'8\001', + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5561, + serialized_end=5644, +) + +_GENERICTYPEINFO_LISTSENTRY = _descriptor.Descriptor( + name='ListsEntry', + full_name='p4.config.v1.GenericTypeInfo.ListsEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='p4.config.v1.GenericTypeInfo.ListsEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='p4.config.v1.GenericTypeInfo.ListsEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=b'8\001', + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5646, + serialized_end=5725, +) + +_GENERICTYPEINFO_ENUMSENTRY = _descriptor.Descriptor( + name='EnumsEntry', + full_name='p4.config.v1.GenericTypeInfo.EnumsEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='p4.config.v1.GenericTypeInfo.EnumsEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='p4.config.v1.GenericTypeInfo.EnumsEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=b'8\001', + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5727, + serialized_end=5806, +) + +_GENERICTYPEINFO_SERIALIZABLEENUMSENTRY = _descriptor.Descriptor( + name='SerializableEnumsEntry', + full_name='p4.config.v1.GenericTypeInfo.SerializableEnumsEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='p4.config.v1.GenericTypeInfo.SerializableEnumsEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='p4.config.v1.GenericTypeInfo.SerializableEnumsEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=b'8\001', + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5808, + serialized_end=5911, +) + +_GENERICTYPEINFO_NEWTYPESENTRY = _descriptor.Descriptor( + name='NewTypesEntry', + full_name='p4.config.v1.GenericTypeInfo.NewTypesEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='p4.config.v1.GenericTypeInfo.NewTypesEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='p4.config.v1.GenericTypeInfo.NewTypesEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=b'8\001', + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5913, + serialized_end=5994, +) + +_GENERICTYPEINFO = _descriptor.Descriptor( + name='GenericTypeInfo', + full_name='p4.config.v1.GenericTypeInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='structs', full_name='p4.config.v1.GenericTypeInfo.structs', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='lists', full_name='p4.config.v1.GenericTypeInfo.lists', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='enums', full_name='p4.config.v1.GenericTypeInfo.enums', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='serializable_enums', full_name='p4.config.v1.GenericTypeInfo.serializable_enums', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='new_types', full_name='p4.config.v1.GenericTypeInfo.new_types', index=4, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_GENERICTYPEINFO_STRUCTSENTRY, _GENERICTYPEINFO_LISTSENTRY, _GENERICTYPEINFO_ENUMSENTRY, _GENERICTYPEINFO_SERIALIZABLEENUMSENTRY, _GENERICTYPEINFO_NEWTYPESENTRY, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5221, + serialized_end=5994, +) + + +_GENERICDATATYPESPEC = _descriptor.Descriptor( + name='GenericDataTypeSpec', + full_name='p4.config.v1.GenericDataTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='bitstring', full_name='p4.config.v1.GenericDataTypeSpec.bitstring', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='float', full_name='p4.config.v1.GenericDataTypeSpec.float', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='bool', full_name='p4.config.v1.GenericDataTypeSpec.bool', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='struct', full_name='p4.config.v1.GenericDataTypeSpec.struct', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='list', full_name='p4.config.v1.GenericDataTypeSpec.list', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='unordered_set', full_name='p4.config.v1.GenericDataTypeSpec.unordered_set', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='string', full_name='p4.config.v1.GenericDataTypeSpec.string', index=6, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='enum', full_name='p4.config.v1.GenericDataTypeSpec.enum', index=7, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='serializable_enum', full_name='p4.config.v1.GenericDataTypeSpec.serializable_enum', index=8, + number=9, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='new_type', full_name='p4.config.v1.GenericDataTypeSpec.new_type', index=9, + number=10, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='p4_type', full_name='p4.config.v1.GenericDataTypeSpec.p4_type', index=10, + number=11, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='type_spec', full_name='p4.config.v1.GenericDataTypeSpec.type_spec', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=5997, + serialized_end=6607, +) + + +_GENERICNAMEDTYPE = _descriptor.Descriptor( + name='GenericNamedType', + full_name='p4.config.v1.GenericNamedType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.GenericNamedType.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6609, + serialized_end=6641, +) + + +_GENERICBOOLTYPE = _descriptor.Descriptor( + name='GenericBoolType', + full_name='p4.config.v1.GenericBoolType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6643, + serialized_end=6660, +) + + +_GENERICFLOATTYPE = _descriptor.Descriptor( + name='GenericFloatType', + full_name='p4.config.v1.GenericFloatType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6662, + serialized_end=6680, +) + + +_GENERICBITSTRINGLIKETYPESPEC = _descriptor.Descriptor( + name='GenericBitstringLikeTypeSpec', + full_name='p4.config.v1.GenericBitstringLikeTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='bit', full_name='p4.config.v1.GenericBitstringLikeTypeSpec.bit', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='int', full_name='p4.config.v1.GenericBitstringLikeTypeSpec.int', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='varbit', full_name='p4.config.v1.GenericBitstringLikeTypeSpec.varbit', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericBitstringLikeTypeSpec.annotations', index=3, + number=4, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericBitstringLikeTypeSpec.annotation_locations', index=4, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericBitstringLikeTypeSpec.structured_annotations', index=5, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='type_spec', full_name='p4.config.v1.GenericBitstringLikeTypeSpec.type_spec', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=6683, + serialized_end=7028, +) + + +_GENERICBITTYPESPEC = _descriptor.Descriptor( + name='GenericBitTypeSpec', + full_name='p4.config.v1.GenericBitTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='bitwidth', full_name='p4.config.v1.GenericBitTypeSpec.bitwidth', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='default_value', full_name='p4.config.v1.GenericBitTypeSpec.default_value', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7030, + serialized_end=7091, +) + + +_GENERICINTTYPESPEC = _descriptor.Descriptor( + name='GenericIntTypeSpec', + full_name='p4.config.v1.GenericIntTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='bitwidth', full_name='p4.config.v1.GenericIntTypeSpec.bitwidth', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='default_value', full_name='p4.config.v1.GenericIntTypeSpec.default_value', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7093, + serialized_end=7154, +) + + +_GENERICVARBITTYPESPEC = _descriptor.Descriptor( + name='GenericVarbitTypeSpec', + full_name='p4.config.v1.GenericVarbitTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='max_bitwidth', full_name='p4.config.v1.GenericVarbitTypeSpec.max_bitwidth', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='default_value', full_name='p4.config.v1.GenericVarbitTypeSpec.default_value', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7156, + serialized_end=7224, +) + + +_GENERICSTRUCTTYPESPEC_MEMBER = _descriptor.Descriptor( + name='Member', + full_name='p4.config.v1.GenericStructTypeSpec.Member', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.GenericStructTypeSpec.Member.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type_spec', full_name='p4.config.v1.GenericStructTypeSpec.Member.type_spec', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7462, + serialized_end=7538, +) + +_GENERICSTRUCTTYPESPEC = _descriptor.Descriptor( + name='GenericStructTypeSpec', + full_name='p4.config.v1.GenericStructTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='members', full_name='p4.config.v1.GenericStructTypeSpec.members', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericStructTypeSpec.annotations', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericStructTypeSpec.annotation_locations', index=2, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericStructTypeSpec.structured_annotations', index=3, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_GENERICSTRUCTTYPESPEC_MEMBER, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7227, + serialized_end=7538, +) + + +_GENERICLISTTYPESPEC = _descriptor.Descriptor( + name='GenericListTypeSpec', + full_name='p4.config.v1.GenericListTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='type_spec', full_name='p4.config.v1.GenericListTypeSpec.type_spec', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericListTypeSpec.annotations', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='min_size', full_name='p4.config.v1.GenericListTypeSpec.min_size', index=2, + number=4, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='max_size', full_name='p4.config.v1.GenericListTypeSpec.max_size', index=3, + number=5, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericListTypeSpec.annotation_locations', index=4, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericListTypeSpec.structured_annotations', index=5, + number=7, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7541, + serialized_end=7801, +) + + +_GENERICUNORDEREDSETTYPESPEC = _descriptor.Descriptor( + name='GenericUnorderedSetTypeSpec', + full_name='p4.config.v1.GenericUnorderedSetTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='type_spec', full_name='p4.config.v1.GenericUnorderedSetTypeSpec.type_spec', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericUnorderedSetTypeSpec.annotations', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='min_size', full_name='p4.config.v1.GenericUnorderedSetTypeSpec.min_size', index=2, + number=4, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='max_size', full_name='p4.config.v1.GenericUnorderedSetTypeSpec.max_size', index=3, + number=5, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericUnorderedSetTypeSpec.annotation_locations', index=4, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericUnorderedSetTypeSpec.structured_annotations', index=5, + number=7, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7804, + serialized_end=8072, +) + + +_GENERICSTRINGSPEC = _descriptor.Descriptor( + name='GenericStringSpec', + full_name='p4.config.v1.GenericStringSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.GenericStringSpec.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='min_size', full_name='p4.config.v1.GenericStringSpec.min_size', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='max_size', full_name='p4.config.v1.GenericStringSpec.max_size', index=2, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericStringSpec.annotations', index=3, + number=4, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericStringSpec.annotation_locations', index=4, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericStringSpec.structured_annotations', index=5, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8075, + serialized_end=8293, +) + + +_GENERICENUMTYPESPEC_MEMBER = _descriptor.Descriptor( + name='Member', + full_name='p4.config.v1.GenericEnumTypeSpec.Member', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.GenericEnumTypeSpec.Member.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='default_value', full_name='p4.config.v1.GenericEnumTypeSpec.Member.default_value', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericEnumTypeSpec.Member.annotations', index=2, + number=3, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericEnumTypeSpec.Member.annotation_locations', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericEnumTypeSpec.Member.structured_annotations', index=4, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8528, + serialized_end=8722, +) + +_GENERICENUMTYPESPEC = _descriptor.Descriptor( + name='GenericEnumTypeSpec', + full_name='p4.config.v1.GenericEnumTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='members', full_name='p4.config.v1.GenericEnumTypeSpec.members', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericEnumTypeSpec.annotations', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericEnumTypeSpec.annotation_locations', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericEnumTypeSpec.structured_annotations', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_GENERICENUMTYPESPEC_MEMBER, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8296, + serialized_end=8722, +) + + +_GENERICSERIALIZABLEENUMTYPESPEC_MEMBER = _descriptor.Descriptor( + name='Member', + full_name='p4.config.v1.GenericSerializableEnumTypeSpec.Member', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.Member.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.Member.value', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='default_value', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.Member.default_value', index=2, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.Member.annotations', index=3, + number=4, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.Member.annotation_locations', index=4, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.Member.structured_annotations', index=5, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=9040, + serialized_end=9249, +) + +_GENERICSERIALIZABLEENUMTYPESPEC = _descriptor.Descriptor( + name='GenericSerializableEnumTypeSpec', + full_name='p4.config.v1.GenericSerializableEnumTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='underlying_type', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.underlying_type', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='members', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.members', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.annotations', index=2, + number=3, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.annotation_locations', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericSerializableEnumTypeSpec.structured_annotations', index=4, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_GENERICSERIALIZABLEENUMTYPESPEC_MEMBER, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8725, + serialized_end=9249, +) + + +_GENERICNEWTYPETRANSLATION_SDNSTRING = _descriptor.Descriptor( + name='SdnString', + full_name='p4.config.v1.GenericNewTypeTranslation.SdnString', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4892, + serialized_end=4903, +) + +_GENERICNEWTYPETRANSLATION = _descriptor.Descriptor( + name='GenericNewTypeTranslation', + full_name='p4.config.v1.GenericNewTypeTranslation', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='uri', full_name='p4.config.v1.GenericNewTypeTranslation.uri', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sdn_bitwidth', full_name='p4.config.v1.GenericNewTypeTranslation.sdn_bitwidth', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sdn_string', full_name='p4.config.v1.GenericNewTypeTranslation.sdn_string', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_GENERICNEWTYPETRANSLATION_SDNSTRING, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='sdn_type', full_name='p4.config.v1.GenericNewTypeTranslation.sdn_type', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=9252, + serialized_end=9414, +) + + +_GENERICNEWTYPESPEC = _descriptor.Descriptor( + name='GenericNewTypeSpec', + full_name='p4.config.v1.GenericNewTypeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='original_type', full_name='p4.config.v1.GenericNewTypeSpec.original_type', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='translated_type', full_name='p4.config.v1.GenericNewTypeSpec.translated_type', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericNewTypeSpec.annotations', index=2, + number=3, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericNewTypeSpec.annotation_locations', index=3, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericNewTypeSpec.structured_annotations', index=4, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='representation', full_name='p4.config.v1.GenericNewTypeSpec.representation', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=9417, + serialized_end=9732, +) + _P4TYPEINFO_STRUCTSENTRY.fields_by_name['value'].message_type = _P4STRUCTTYPESPEC _P4TYPEINFO_STRUCTSENTRY.containing_type = _P4TYPEINFO _P4TYPEINFO_HEADERSENTRY.fields_by_name['value'].message_type = _P4HEADERTYPESPEC @@ -1878,6 +3176,123 @@ _P4NEWTYPESPEC.oneofs_by_name['representation'].fields.append( _P4NEWTYPESPEC.fields_by_name['translated_type']) _P4NEWTYPESPEC.fields_by_name['translated_type'].containing_oneof = _P4NEWTYPESPEC.oneofs_by_name['representation'] +_GENERICTYPEINFO_STRUCTSENTRY.fields_by_name['value'].message_type = _GENERICSTRUCTTYPESPEC +_GENERICTYPEINFO_STRUCTSENTRY.containing_type = _GENERICTYPEINFO +_GENERICTYPEINFO_LISTSENTRY.fields_by_name['value'].message_type = _GENERICLISTTYPESPEC +_GENERICTYPEINFO_LISTSENTRY.containing_type = _GENERICTYPEINFO +_GENERICTYPEINFO_ENUMSENTRY.fields_by_name['value'].message_type = _GENERICENUMTYPESPEC +_GENERICTYPEINFO_ENUMSENTRY.containing_type = _GENERICTYPEINFO +_GENERICTYPEINFO_SERIALIZABLEENUMSENTRY.fields_by_name['value'].message_type = _GENERICSERIALIZABLEENUMTYPESPEC +_GENERICTYPEINFO_SERIALIZABLEENUMSENTRY.containing_type = _GENERICTYPEINFO +_GENERICTYPEINFO_NEWTYPESENTRY.fields_by_name['value'].message_type = _GENERICNEWTYPESPEC +_GENERICTYPEINFO_NEWTYPESENTRY.containing_type = _GENERICTYPEINFO +_GENERICTYPEINFO.fields_by_name['structs'].message_type = _GENERICTYPEINFO_STRUCTSENTRY +_GENERICTYPEINFO.fields_by_name['lists'].message_type = _GENERICTYPEINFO_LISTSENTRY +_GENERICTYPEINFO.fields_by_name['enums'].message_type = _GENERICTYPEINFO_ENUMSENTRY +_GENERICTYPEINFO.fields_by_name['serializable_enums'].message_type = _GENERICTYPEINFO_SERIALIZABLEENUMSENTRY +_GENERICTYPEINFO.fields_by_name['new_types'].message_type = _GENERICTYPEINFO_NEWTYPESENTRY +_GENERICDATATYPESPEC.fields_by_name['bitstring'].message_type = _GENERICBITSTRINGLIKETYPESPEC +_GENERICDATATYPESPEC.fields_by_name['float'].message_type = _GENERICFLOATTYPE +_GENERICDATATYPESPEC.fields_by_name['bool'].message_type = _GENERICBOOLTYPE +_GENERICDATATYPESPEC.fields_by_name['struct'].message_type = _GENERICNAMEDTYPE +_GENERICDATATYPESPEC.fields_by_name['list'].message_type = _GENERICNAMEDTYPE +_GENERICDATATYPESPEC.fields_by_name['unordered_set'].message_type = _GENERICNAMEDTYPE +_GENERICDATATYPESPEC.fields_by_name['string'].message_type = _GENERICNAMEDTYPE +_GENERICDATATYPESPEC.fields_by_name['enum'].message_type = _GENERICNAMEDTYPE +_GENERICDATATYPESPEC.fields_by_name['serializable_enum'].message_type = _GENERICNAMEDTYPE +_GENERICDATATYPESPEC.fields_by_name['new_type'].message_type = _GENERICNAMEDTYPE +_GENERICDATATYPESPEC.fields_by_name['p4_type'].message_type = _P4DATATYPESPEC +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['bitstring']) +_GENERICDATATYPESPEC.fields_by_name['bitstring'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['float']) +_GENERICDATATYPESPEC.fields_by_name['float'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['bool']) +_GENERICDATATYPESPEC.fields_by_name['bool'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['struct']) +_GENERICDATATYPESPEC.fields_by_name['struct'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['list']) +_GENERICDATATYPESPEC.fields_by_name['list'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['unordered_set']) +_GENERICDATATYPESPEC.fields_by_name['unordered_set'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['string']) +_GENERICDATATYPESPEC.fields_by_name['string'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['enum']) +_GENERICDATATYPESPEC.fields_by_name['enum'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['serializable_enum']) +_GENERICDATATYPESPEC.fields_by_name['serializable_enum'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['new_type']) +_GENERICDATATYPESPEC.fields_by_name['new_type'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICDATATYPESPEC.fields_by_name['p4_type']) +_GENERICDATATYPESPEC.fields_by_name['p4_type'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] +_GENERICBITSTRINGLIKETYPESPEC.fields_by_name['bit'].message_type = _GENERICBITTYPESPEC +_GENERICBITSTRINGLIKETYPESPEC.fields_by_name['int'].message_type = _GENERICINTTYPESPEC +_GENERICBITSTRINGLIKETYPESPEC.fields_by_name['varbit'].message_type = _GENERICVARBITTYPESPEC +_GENERICBITSTRINGLIKETYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICBITSTRINGLIKETYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICBITSTRINGLIKETYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICBITSTRINGLIKETYPESPEC.fields_by_name['bit']) +_GENERICBITSTRINGLIKETYPESPEC.fields_by_name['bit'].containing_oneof = _GENERICBITSTRINGLIKETYPESPEC.oneofs_by_name['type_spec'] +_GENERICBITSTRINGLIKETYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICBITSTRINGLIKETYPESPEC.fields_by_name['int']) +_GENERICBITSTRINGLIKETYPESPEC.fields_by_name['int'].containing_oneof = _GENERICBITSTRINGLIKETYPESPEC.oneofs_by_name['type_spec'] +_GENERICBITSTRINGLIKETYPESPEC.oneofs_by_name['type_spec'].fields.append( + _GENERICBITSTRINGLIKETYPESPEC.fields_by_name['varbit']) +_GENERICBITSTRINGLIKETYPESPEC.fields_by_name['varbit'].containing_oneof = _GENERICBITSTRINGLIKETYPESPEC.oneofs_by_name['type_spec'] +_GENERICSTRUCTTYPESPEC_MEMBER.fields_by_name['type_spec'].message_type = _GENERICDATATYPESPEC +_GENERICSTRUCTTYPESPEC_MEMBER.containing_type = _GENERICSTRUCTTYPESPEC +_GENERICSTRUCTTYPESPEC.fields_by_name['members'].message_type = _GENERICSTRUCTTYPESPEC_MEMBER +_GENERICSTRUCTTYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICSTRUCTTYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICLISTTYPESPEC.fields_by_name['type_spec'].message_type = _GENERICDATATYPESPEC +_GENERICLISTTYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICLISTTYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICUNORDEREDSETTYPESPEC.fields_by_name['type_spec'].message_type = _GENERICDATATYPESPEC +_GENERICUNORDEREDSETTYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICUNORDEREDSETTYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICSTRINGSPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICSTRINGSPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICENUMTYPESPEC_MEMBER.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICENUMTYPESPEC_MEMBER.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICENUMTYPESPEC_MEMBER.containing_type = _GENERICENUMTYPESPEC +_GENERICENUMTYPESPEC.fields_by_name['members'].message_type = _GENERICENUMTYPESPEC_MEMBER +_GENERICENUMTYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICENUMTYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICSERIALIZABLEENUMTYPESPEC_MEMBER.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICSERIALIZABLEENUMTYPESPEC_MEMBER.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICSERIALIZABLEENUMTYPESPEC_MEMBER.containing_type = _GENERICSERIALIZABLEENUMTYPESPEC +_GENERICSERIALIZABLEENUMTYPESPEC.fields_by_name['underlying_type'].message_type = _GENERICBITTYPESPEC +_GENERICSERIALIZABLEENUMTYPESPEC.fields_by_name['members'].message_type = _GENERICSERIALIZABLEENUMTYPESPEC_MEMBER +_GENERICSERIALIZABLEENUMTYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICSERIALIZABLEENUMTYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICNEWTYPETRANSLATION_SDNSTRING.containing_type = _GENERICNEWTYPETRANSLATION +_GENERICNEWTYPETRANSLATION.fields_by_name['sdn_string'].message_type = _GENERICNEWTYPETRANSLATION_SDNSTRING +_GENERICNEWTYPETRANSLATION.oneofs_by_name['sdn_type'].fields.append( + _GENERICNEWTYPETRANSLATION.fields_by_name['sdn_bitwidth']) +_GENERICNEWTYPETRANSLATION.fields_by_name['sdn_bitwidth'].containing_oneof = _GENERICNEWTYPETRANSLATION.oneofs_by_name['sdn_type'] +_GENERICNEWTYPETRANSLATION.oneofs_by_name['sdn_type'].fields.append( + _GENERICNEWTYPETRANSLATION.fields_by_name['sdn_string']) +_GENERICNEWTYPETRANSLATION.fields_by_name['sdn_string'].containing_oneof = _GENERICNEWTYPETRANSLATION.oneofs_by_name['sdn_type'] +_GENERICNEWTYPESPEC.fields_by_name['original_type'].message_type = _GENERICDATATYPESPEC +_GENERICNEWTYPESPEC.fields_by_name['translated_type'].message_type = _GENERICNEWTYPETRANSLATION +_GENERICNEWTYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION +_GENERICNEWTYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION +_GENERICNEWTYPESPEC.oneofs_by_name['representation'].fields.append( + _GENERICNEWTYPESPEC.fields_by_name['original_type']) +_GENERICNEWTYPESPEC.fields_by_name['original_type'].containing_oneof = _GENERICNEWTYPESPEC.oneofs_by_name['representation'] +_GENERICNEWTYPESPEC.oneofs_by_name['representation'].fields.append( + _GENERICNEWTYPESPEC.fields_by_name['translated_type']) +_GENERICNEWTYPESPEC.fields_by_name['translated_type'].containing_oneof = _GENERICNEWTYPESPEC.oneofs_by_name['representation'] DESCRIPTOR.message_types_by_name['P4TypeInfo'] = _P4TYPEINFO DESCRIPTOR.message_types_by_name['P4DataTypeSpec'] = _P4DATATYPESPEC DESCRIPTOR.message_types_by_name['P4NamedType'] = _P4NAMEDTYPE @@ -1904,6 +3319,23 @@ DESCRIPTOR.message_types_by_name['P4ErrorTypeSpec'] = _P4ERRORTYPESPEC DESCRIPTOR.message_types_by_name['P4NewTypeTranslation'] = _P4NEWTYPETRANSLATION DESCRIPTOR.message_types_by_name['P4NewTypeSpec'] = _P4NEWTYPESPEC +DESCRIPTOR.message_types_by_name['GenericTypeInfo'] = _GENERICTYPEINFO +DESCRIPTOR.message_types_by_name['GenericDataTypeSpec'] = _GENERICDATATYPESPEC +DESCRIPTOR.message_types_by_name['GenericNamedType'] = _GENERICNAMEDTYPE +DESCRIPTOR.message_types_by_name['GenericBoolType'] = _GENERICBOOLTYPE +DESCRIPTOR.message_types_by_name['GenericFloatType'] = _GENERICFLOATTYPE +DESCRIPTOR.message_types_by_name['GenericBitstringLikeTypeSpec'] = _GENERICBITSTRINGLIKETYPESPEC +DESCRIPTOR.message_types_by_name['GenericBitTypeSpec'] = _GENERICBITTYPESPEC +DESCRIPTOR.message_types_by_name['GenericIntTypeSpec'] = _GENERICINTTYPESPEC +DESCRIPTOR.message_types_by_name['GenericVarbitTypeSpec'] = _GENERICVARBITTYPESPEC +DESCRIPTOR.message_types_by_name['GenericStructTypeSpec'] = _GENERICSTRUCTTYPESPEC +DESCRIPTOR.message_types_by_name['GenericListTypeSpec'] = _GENERICLISTTYPESPEC +DESCRIPTOR.message_types_by_name['GenericUnorderedSetTypeSpec'] = _GENERICUNORDEREDSETTYPESPEC +DESCRIPTOR.message_types_by_name['GenericStringSpec'] = _GENERICSTRINGSPEC +DESCRIPTOR.message_types_by_name['GenericEnumTypeSpec'] = _GENERICENUMTYPESPEC +DESCRIPTOR.message_types_by_name['GenericSerializableEnumTypeSpec'] = _GENERICSERIALIZABLEENUMTYPESPEC +DESCRIPTOR.message_types_by_name['GenericNewTypeTranslation'] = _GENERICNEWTYPETRANSLATION +DESCRIPTOR.message_types_by_name['GenericNewTypeSpec'] = _GENERICNEWTYPESPEC _sym_db.RegisterFileDescriptor(DESCRIPTOR) P4TypeInfo = _reflection.GeneratedProtocolMessageType('P4TypeInfo', (_message.Message,), { @@ -2184,6 +3616,197 @@ }) _sym_db.RegisterMessage(P4NewTypeSpec) +GenericTypeInfo = _reflection.GeneratedProtocolMessageType('GenericTypeInfo', (_message.Message,), { + + 'StructsEntry' : _reflection.GeneratedProtocolMessageType('StructsEntry', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTYPEINFO_STRUCTSENTRY, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTypeInfo.StructsEntry) + }) + , + + 'ListsEntry' : _reflection.GeneratedProtocolMessageType('ListsEntry', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTYPEINFO_LISTSENTRY, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTypeInfo.ListsEntry) + }) + , + + 'EnumsEntry' : _reflection.GeneratedProtocolMessageType('EnumsEntry', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTYPEINFO_ENUMSENTRY, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTypeInfo.EnumsEntry) + }) + , + + 'SerializableEnumsEntry' : _reflection.GeneratedProtocolMessageType('SerializableEnumsEntry', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTYPEINFO_SERIALIZABLEENUMSENTRY, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTypeInfo.SerializableEnumsEntry) + }) + , + + 'NewTypesEntry' : _reflection.GeneratedProtocolMessageType('NewTypesEntry', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTYPEINFO_NEWTYPESENTRY, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTypeInfo.NewTypesEntry) + }) + , + 'DESCRIPTOR' : _GENERICTYPEINFO, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTypeInfo) + }) +_sym_db.RegisterMessage(GenericTypeInfo) +_sym_db.RegisterMessage(GenericTypeInfo.StructsEntry) +_sym_db.RegisterMessage(GenericTypeInfo.ListsEntry) +_sym_db.RegisterMessage(GenericTypeInfo.EnumsEntry) +_sym_db.RegisterMessage(GenericTypeInfo.SerializableEnumsEntry) +_sym_db.RegisterMessage(GenericTypeInfo.NewTypesEntry) + +GenericDataTypeSpec = _reflection.GeneratedProtocolMessageType('GenericDataTypeSpec', (_message.Message,), { + 'DESCRIPTOR' : _GENERICDATATYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericDataTypeSpec) + }) +_sym_db.RegisterMessage(GenericDataTypeSpec) + +GenericNamedType = _reflection.GeneratedProtocolMessageType('GenericNamedType', (_message.Message,), { + 'DESCRIPTOR' : _GENERICNAMEDTYPE, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericNamedType) + }) +_sym_db.RegisterMessage(GenericNamedType) + +GenericBoolType = _reflection.GeneratedProtocolMessageType('GenericBoolType', (_message.Message,), { + 'DESCRIPTOR' : _GENERICBOOLTYPE, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericBoolType) + }) +_sym_db.RegisterMessage(GenericBoolType) + +GenericFloatType = _reflection.GeneratedProtocolMessageType('GenericFloatType', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFLOATTYPE, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericFloatType) + }) +_sym_db.RegisterMessage(GenericFloatType) + +GenericBitstringLikeTypeSpec = _reflection.GeneratedProtocolMessageType('GenericBitstringLikeTypeSpec', (_message.Message,), { + 'DESCRIPTOR' : _GENERICBITSTRINGLIKETYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericBitstringLikeTypeSpec) + }) +_sym_db.RegisterMessage(GenericBitstringLikeTypeSpec) + +GenericBitTypeSpec = _reflection.GeneratedProtocolMessageType('GenericBitTypeSpec', (_message.Message,), { + 'DESCRIPTOR' : _GENERICBITTYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericBitTypeSpec) + }) +_sym_db.RegisterMessage(GenericBitTypeSpec) + +GenericIntTypeSpec = _reflection.GeneratedProtocolMessageType('GenericIntTypeSpec', (_message.Message,), { + 'DESCRIPTOR' : _GENERICINTTYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericIntTypeSpec) + }) +_sym_db.RegisterMessage(GenericIntTypeSpec) + +GenericVarbitTypeSpec = _reflection.GeneratedProtocolMessageType('GenericVarbitTypeSpec', (_message.Message,), { + 'DESCRIPTOR' : _GENERICVARBITTYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericVarbitTypeSpec) + }) +_sym_db.RegisterMessage(GenericVarbitTypeSpec) + +GenericStructTypeSpec = _reflection.GeneratedProtocolMessageType('GenericStructTypeSpec', (_message.Message,), { + + 'Member' : _reflection.GeneratedProtocolMessageType('Member', (_message.Message,), { + 'DESCRIPTOR' : _GENERICSTRUCTTYPESPEC_MEMBER, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericStructTypeSpec.Member) + }) + , + 'DESCRIPTOR' : _GENERICSTRUCTTYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericStructTypeSpec) + }) +_sym_db.RegisterMessage(GenericStructTypeSpec) +_sym_db.RegisterMessage(GenericStructTypeSpec.Member) + +GenericListTypeSpec = _reflection.GeneratedProtocolMessageType('GenericListTypeSpec', (_message.Message,), { + 'DESCRIPTOR' : _GENERICLISTTYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericListTypeSpec) + }) +_sym_db.RegisterMessage(GenericListTypeSpec) + +GenericUnorderedSetTypeSpec = _reflection.GeneratedProtocolMessageType('GenericUnorderedSetTypeSpec', (_message.Message,), { + 'DESCRIPTOR' : _GENERICUNORDEREDSETTYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericUnorderedSetTypeSpec) + }) +_sym_db.RegisterMessage(GenericUnorderedSetTypeSpec) + +GenericStringSpec = _reflection.GeneratedProtocolMessageType('GenericStringSpec', (_message.Message,), { + 'DESCRIPTOR' : _GENERICSTRINGSPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericStringSpec) + }) +_sym_db.RegisterMessage(GenericStringSpec) + +GenericEnumTypeSpec = _reflection.GeneratedProtocolMessageType('GenericEnumTypeSpec', (_message.Message,), { + + 'Member' : _reflection.GeneratedProtocolMessageType('Member', (_message.Message,), { + 'DESCRIPTOR' : _GENERICENUMTYPESPEC_MEMBER, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericEnumTypeSpec.Member) + }) + , + 'DESCRIPTOR' : _GENERICENUMTYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericEnumTypeSpec) + }) +_sym_db.RegisterMessage(GenericEnumTypeSpec) +_sym_db.RegisterMessage(GenericEnumTypeSpec.Member) + +GenericSerializableEnumTypeSpec = _reflection.GeneratedProtocolMessageType('GenericSerializableEnumTypeSpec', (_message.Message,), { + + 'Member' : _reflection.GeneratedProtocolMessageType('Member', (_message.Message,), { + 'DESCRIPTOR' : _GENERICSERIALIZABLEENUMTYPESPEC_MEMBER, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericSerializableEnumTypeSpec.Member) + }) + , + 'DESCRIPTOR' : _GENERICSERIALIZABLEENUMTYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericSerializableEnumTypeSpec) + }) +_sym_db.RegisterMessage(GenericSerializableEnumTypeSpec) +_sym_db.RegisterMessage(GenericSerializableEnumTypeSpec.Member) + +GenericNewTypeTranslation = _reflection.GeneratedProtocolMessageType('GenericNewTypeTranslation', (_message.Message,), { + + 'SdnString' : _reflection.GeneratedProtocolMessageType('SdnString', (_message.Message,), { + 'DESCRIPTOR' : _GENERICNEWTYPETRANSLATION_SDNSTRING, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericNewTypeTranslation.SdnString) + }) + , + 'DESCRIPTOR' : _GENERICNEWTYPETRANSLATION, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericNewTypeTranslation) + }) +_sym_db.RegisterMessage(GenericNewTypeTranslation) +_sym_db.RegisterMessage(GenericNewTypeTranslation.SdnString) + +GenericNewTypeSpec = _reflection.GeneratedProtocolMessageType('GenericNewTypeSpec', (_message.Message,), { + 'DESCRIPTOR' : _GENERICNEWTYPESPEC, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericNewTypeSpec) + }) +_sym_db.RegisterMessage(GenericNewTypeSpec) + DESCRIPTOR._options = None _P4TYPEINFO_STRUCTSENTRY._options = None @@ -2192,4 +3815,9 @@ _P4TYPEINFO_ENUMSENTRY._options = None _P4TYPEINFO_SERIALIZABLEENUMSENTRY._options = None _P4TYPEINFO_NEWTYPESENTRY._options = None +_GENERICTYPEINFO_STRUCTSENTRY._options = None +_GENERICTYPEINFO_LISTSENTRY._options = None +_GENERICTYPEINFO_ENUMSENTRY._options = None +_GENERICTYPEINFO_SERIALIZABLEENUMSENTRY._options = None +_GENERICTYPEINFO_NEWTYPESENTRY._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/p4/v1/p4data_pb2.py b/py/p4/v1/p4data_pb2.py index a7407ec6..0936ad04 100644 --- a/py/p4/v1/p4data_pb2.py +++ b/py/p4/v1/p4data_pb2.py @@ -19,7 +19,7 @@ syntax='proto3', serialized_options=b'Z$github.com/p4lang/p4runtime/go/p4/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x12p4/v1/p4data.proto\x12\x05p4.v1\"\x94\x03\n\x06P4Data\x12\x13\n\tbitstring\x18\x01 \x01(\x0cH\x00\x12!\n\x06varbit\x18\x02 \x01(\x0b\x32\x0f.p4.v1.P4VarbitH\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12$\n\x05tuple\x18\x04 \x01(\x0b\x32\x13.p4.v1.P4StructLikeH\x00\x12%\n\x06struct\x18\x05 \x01(\x0b\x32\x13.p4.v1.P4StructLikeH\x00\x12!\n\x06header\x18\x06 \x01(\x0b\x32\x0f.p4.v1.P4HeaderH\x00\x12,\n\x0cheader_union\x18\x07 \x01(\x0b\x32\x14.p4.v1.P4HeaderUnionH\x00\x12,\n\x0cheader_stack\x18\x08 \x01(\x0b\x32\x14.p4.v1.P4HeaderStackH\x00\x12\x37\n\x12header_union_stack\x18\t \x01(\x0b\x32\x19.p4.v1.P4HeaderUnionStackH\x00\x12\x0e\n\x04\x65num\x18\n \x01(\tH\x00\x12\x0f\n\x05\x65rror\x18\x0b \x01(\tH\x00\x12\x14\n\nenum_value\x18\x0c \x01(\x0cH\x00\x42\x06\n\x04\x64\x61ta\"/\n\x08P4Varbit\x12\x11\n\tbitstring\x18\x01 \x01(\x0c\x12\x10\n\x08\x62itwidth\x18\x02 \x01(\x05\".\n\x0cP4StructLike\x12\x1e\n\x07members\x18\x01 \x03(\x0b\x32\r.p4.v1.P4Data\"0\n\x08P4Header\x12\x10\n\x08is_valid\x18\x01 \x01(\x08\x12\x12\n\nbitstrings\x18\x02 \x03(\x0c\"Q\n\rP4HeaderUnion\x12\x19\n\x11valid_header_name\x18\x01 \x01(\t\x12%\n\x0cvalid_header\x18\x02 \x01(\x0b\x32\x0f.p4.v1.P4Header\"1\n\rP4HeaderStack\x12 \n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x0f.p4.v1.P4Header\";\n\x12P4HeaderUnionStack\x12%\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x14.p4.v1.P4HeaderUnionB&Z$github.com/p4lang/p4runtime/go/p4/v1b\x06proto3' + serialized_pb=b'\n\x12p4/v1/p4data.proto\x12\x05p4.v1\"\x94\x03\n\x06P4Data\x12\x13\n\tbitstring\x18\x01 \x01(\x0cH\x00\x12!\n\x06varbit\x18\x02 \x01(\x0b\x32\x0f.p4.v1.P4VarbitH\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12$\n\x05tuple\x18\x04 \x01(\x0b\x32\x13.p4.v1.P4StructLikeH\x00\x12%\n\x06struct\x18\x05 \x01(\x0b\x32\x13.p4.v1.P4StructLikeH\x00\x12!\n\x06header\x18\x06 \x01(\x0b\x32\x0f.p4.v1.P4HeaderH\x00\x12,\n\x0cheader_union\x18\x07 \x01(\x0b\x32\x14.p4.v1.P4HeaderUnionH\x00\x12,\n\x0cheader_stack\x18\x08 \x01(\x0b\x32\x14.p4.v1.P4HeaderStackH\x00\x12\x37\n\x12header_union_stack\x18\t \x01(\x0b\x32\x19.p4.v1.P4HeaderUnionStackH\x00\x12\x0e\n\x04\x65num\x18\n \x01(\tH\x00\x12\x0f\n\x05\x65rror\x18\x0b \x01(\tH\x00\x12\x14\n\nenum_value\x18\x0c \x01(\x0cH\x00\x42\x06\n\x04\x64\x61ta\"/\n\x08P4Varbit\x12\x11\n\tbitstring\x18\x01 \x01(\x0c\x12\x10\n\x08\x62itwidth\x18\x02 \x01(\x05\".\n\x0cP4StructLike\x12\x1e\n\x07members\x18\x01 \x03(\x0b\x32\r.p4.v1.P4Data\"0\n\x08P4Header\x12\x10\n\x08is_valid\x18\x01 \x01(\x08\x12\x12\n\nbitstrings\x18\x02 \x03(\x0c\"Q\n\rP4HeaderUnion\x12\x19\n\x11valid_header_name\x18\x01 \x01(\t\x12%\n\x0cvalid_header\x18\x02 \x01(\x0b\x32\x0f.p4.v1.P4Header\"1\n\rP4HeaderStack\x12 \n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x0f.p4.v1.P4Header\";\n\x12P4HeaderUnionStack\x12%\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x14.p4.v1.P4HeaderUnion\"\x91\x02\n\x0bGenericData\x12\x13\n\tbitstring\x18\x01 \x01(\x0cH\x00\x12,\n\x0cvarbitstring\x18\x02 \x01(\x0b\x32\x14.p4.v1.GenericVarbitH\x00\x12\x0f\n\x05\x66loat\x18\x03 \x01(\x02H\x00\x12\x0e\n\x04\x62ool\x18\x04 \x01(\x08H\x00\x12\x32\n\x0egeneric_struct\x18\x05 \x01(\x0b\x32\x18.p4.v1.GenericStructLikeH\x00\x12*\n\x0cgeneric_list\x18\x06 \x01(\x0b\x32\x12.p4.v1.GenericListH\x00\x12\x10\n\x06string\x18\x07 \x01(\tH\x00\x12\x0e\n\x04\x65num\x18\x08 \x01(\tH\x00\x12\x14\n\nenum_value\x18\t \x01(\x0cH\x00\x42\x06\n\x04\x64\x61ta\"8\n\x11GenericStructLike\x12#\n\x07members\x18\x01 \x03(\x0b\x32\x12.p4.v1.GenericData\"2\n\x0bGenericList\x12#\n\x07members\x18\x01 \x03(\x0b\x32\x12.p4.v1.GenericData\"4\n\rGenericVarbit\x12\x11\n\tbitstring\x18\x01 \x01(\x0c\x12\x10\n\x08\x62itwidth\x18\x02 \x01(\x05\x42&Z$github.com/p4lang/p4runtime/go/p4/v1b\x06proto3' ) @@ -351,6 +351,202 @@ serialized_end=776, ) + +_GENERICDATA = _descriptor.Descriptor( + name='GenericData', + full_name='p4.v1.GenericData', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='bitstring', full_name='p4.v1.GenericData.bitstring', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='varbitstring', full_name='p4.v1.GenericData.varbitstring', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='float', full_name='p4.v1.GenericData.float', index=2, + number=3, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='bool', full_name='p4.v1.GenericData.bool', index=3, + number=4, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='generic_struct', full_name='p4.v1.GenericData.generic_struct', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='generic_list', full_name='p4.v1.GenericData.generic_list', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='string', full_name='p4.v1.GenericData.string', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='enum', full_name='p4.v1.GenericData.enum', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='enum_value', full_name='p4.v1.GenericData.enum_value', index=8, + number=9, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='data', full_name='p4.v1.GenericData.data', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=779, + serialized_end=1052, +) + + +_GENERICSTRUCTLIKE = _descriptor.Descriptor( + name='GenericStructLike', + full_name='p4.v1.GenericStructLike', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='members', full_name='p4.v1.GenericStructLike.members', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1054, + serialized_end=1110, +) + + +_GENERICLIST = _descriptor.Descriptor( + name='GenericList', + full_name='p4.v1.GenericList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='members', full_name='p4.v1.GenericList.members', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1112, + serialized_end=1162, +) + + +_GENERICVARBIT = _descriptor.Descriptor( + name='GenericVarbit', + full_name='p4.v1.GenericVarbit', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='bitstring', full_name='p4.v1.GenericVarbit.bitstring', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='bitwidth', full_name='p4.v1.GenericVarbit.bitwidth', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1164, + serialized_end=1216, +) + _P4DATA.fields_by_name['varbit'].message_type = _P4VARBIT _P4DATA.fields_by_name['tuple'].message_type = _P4STRUCTLIKE _P4DATA.fields_by_name['struct'].message_type = _P4STRUCTLIKE @@ -398,6 +594,38 @@ _P4HEADERUNION.fields_by_name['valid_header'].message_type = _P4HEADER _P4HEADERSTACK.fields_by_name['entries'].message_type = _P4HEADER _P4HEADERUNIONSTACK.fields_by_name['entries'].message_type = _P4HEADERUNION +_GENERICDATA.fields_by_name['varbitstring'].message_type = _GENERICVARBIT +_GENERICDATA.fields_by_name['generic_struct'].message_type = _GENERICSTRUCTLIKE +_GENERICDATA.fields_by_name['generic_list'].message_type = _GENERICLIST +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['bitstring']) +_GENERICDATA.fields_by_name['bitstring'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['varbitstring']) +_GENERICDATA.fields_by_name['varbitstring'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['float']) +_GENERICDATA.fields_by_name['float'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['bool']) +_GENERICDATA.fields_by_name['bool'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['generic_struct']) +_GENERICDATA.fields_by_name['generic_struct'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['generic_list']) +_GENERICDATA.fields_by_name['generic_list'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['string']) +_GENERICDATA.fields_by_name['string'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['enum']) +_GENERICDATA.fields_by_name['enum'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['enum_value']) +_GENERICDATA.fields_by_name['enum_value'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICSTRUCTLIKE.fields_by_name['members'].message_type = _GENERICDATA +_GENERICLIST.fields_by_name['members'].message_type = _GENERICDATA DESCRIPTOR.message_types_by_name['P4Data'] = _P4DATA DESCRIPTOR.message_types_by_name['P4Varbit'] = _P4VARBIT DESCRIPTOR.message_types_by_name['P4StructLike'] = _P4STRUCTLIKE @@ -405,6 +633,10 @@ DESCRIPTOR.message_types_by_name['P4HeaderUnion'] = _P4HEADERUNION DESCRIPTOR.message_types_by_name['P4HeaderStack'] = _P4HEADERSTACK DESCRIPTOR.message_types_by_name['P4HeaderUnionStack'] = _P4HEADERUNIONSTACK +DESCRIPTOR.message_types_by_name['GenericData'] = _GENERICDATA +DESCRIPTOR.message_types_by_name['GenericStructLike'] = _GENERICSTRUCTLIKE +DESCRIPTOR.message_types_by_name['GenericList'] = _GENERICLIST +DESCRIPTOR.message_types_by_name['GenericVarbit'] = _GENERICVARBIT _sym_db.RegisterFileDescriptor(DESCRIPTOR) P4Data = _reflection.GeneratedProtocolMessageType('P4Data', (_message.Message,), { @@ -456,6 +688,34 @@ }) _sym_db.RegisterMessage(P4HeaderUnionStack) +GenericData = _reflection.GeneratedProtocolMessageType('GenericData', (_message.Message,), { + 'DESCRIPTOR' : _GENERICDATA, + '__module__' : 'p4.v1.p4data_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericData) + }) +_sym_db.RegisterMessage(GenericData) + +GenericStructLike = _reflection.GeneratedProtocolMessageType('GenericStructLike', (_message.Message,), { + 'DESCRIPTOR' : _GENERICSTRUCTLIKE, + '__module__' : 'p4.v1.p4data_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericStructLike) + }) +_sym_db.RegisterMessage(GenericStructLike) + +GenericList = _reflection.GeneratedProtocolMessageType('GenericList', (_message.Message,), { + 'DESCRIPTOR' : _GENERICLIST, + '__module__' : 'p4.v1.p4data_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericList) + }) +_sym_db.RegisterMessage(GenericList) + +GenericVarbit = _reflection.GeneratedProtocolMessageType('GenericVarbit', (_message.Message,), { + 'DESCRIPTOR' : _GENERICVARBIT, + '__module__' : 'p4.v1.p4data_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericVarbit) + }) +_sym_db.RegisterMessage(GenericVarbit) + DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/p4/v1/p4runtime_pb2.py b/py/p4/v1/p4runtime_pb2.py index 0277501b..50214228 100644 --- a/py/p4/v1/p4runtime_pb2.py +++ b/py/p4/v1/p4runtime_pb2.py @@ -24,7 +24,7 @@ syntax='proto3', serialized_options=b'Z$github.com/p4lang/p4runtime/go/p4/v1\370\001\001', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x15p4/v1/p4runtime.proto\x12\x05p4.v1\x1a\x19google/protobuf/any.proto\x1a\x17google/rpc/status.proto\x1a\x19p4/config/v1/p4info.proto\x1a\x12p4/v1/p4data.proto\"\x8c\x02\n\x0cWriteRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x13\n\x07role_id\x18\x02 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04role\x18\x06 \x01(\t\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12\x1e\n\x07updates\x18\x04 \x03(\x0b\x32\r.p4.v1.Update\x12\x30\n\tatomicity\x18\x05 \x01(\x0e\x32\x1d.p4.v1.WriteRequest.Atomicity\"O\n\tAtomicity\x12\x15\n\x11\x43ONTINUE_ON_ERROR\x10\x00\x12\x15\n\x11ROLLBACK_ON_ERROR\x10\x01\x12\x14\n\x10\x44\x41TAPLANE_ATOMIC\x10\x02\"\x0f\n\rWriteResponse\"O\n\x0bReadRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x0c\n\x04role\x18\x03 \x01(\t\x12\x1f\n\x08\x65ntities\x18\x02 \x03(\x0b\x32\r.p4.v1.Entity\"/\n\x0cReadResponse\x12\x1f\n\x08\x65ntities\x18\x01 \x03(\x0b\x32\r.p4.v1.Entity\"\x86\x01\n\x06Update\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.p4.v1.Update.Type\x12\x1d\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\r.p4.v1.Entity\";\n\x04Type\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06INSERT\x10\x01\x12\n\n\x06MODIFY\x10\x02\x12\n\n\x06\x44\x45LETE\x10\x03\"\x87\x05\n\x06\x45ntity\x12*\n\x0c\x65xtern_entry\x18\x01 \x01(\x0b\x32\x12.p4.v1.ExternEntryH\x00\x12(\n\x0btable_entry\x18\x02 \x01(\x0b\x32\x11.p4.v1.TableEntryH\x00\x12;\n\x15\x61\x63tion_profile_member\x18\x03 \x01(\x0b\x32\x1a.p4.v1.ActionProfileMemberH\x00\x12\x39\n\x14\x61\x63tion_profile_group\x18\x04 \x01(\x0b\x32\x19.p4.v1.ActionProfileGroupH\x00\x12(\n\x0bmeter_entry\x18\x05 \x01(\x0b\x32\x11.p4.v1.MeterEntryH\x00\x12\x35\n\x12\x64irect_meter_entry\x18\x06 \x01(\x0b\x32\x17.p4.v1.DirectMeterEntryH\x00\x12,\n\rcounter_entry\x18\x07 \x01(\x0b\x32\x13.p4.v1.CounterEntryH\x00\x12\x39\n\x14\x64irect_counter_entry\x18\x08 \x01(\x0b\x32\x19.p4.v1.DirectCounterEntryH\x00\x12N\n\x1fpacket_replication_engine_entry\x18\t \x01(\x0b\x32#.p4.v1.PacketReplicationEngineEntryH\x00\x12/\n\x0fvalue_set_entry\x18\n \x01(\x0b\x32\x14.p4.v1.ValueSetEntryH\x00\x12.\n\x0eregister_entry\x18\x0b \x01(\x0b\x32\x14.p4.v1.RegisterEntryH\x00\x12*\n\x0c\x64igest_entry\x18\x0c \x01(\x0b\x32\x12.p4.v1.DigestEntryH\x00\x42\x08\n\x06\x65ntity\"]\n\x0b\x45xternEntry\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x11\n\textern_id\x18\x02 \x01(\r\x12#\n\x05\x65ntry\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\"\xc5\x03\n\nTableEntry\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12 \n\x05match\x18\x02 \x03(\x0b\x32\x11.p4.v1.FieldMatch\x12\"\n\x06\x61\x63tion\x18\x03 \x01(\x0b\x32\x12.p4.v1.TableAction\x12\x10\n\x08priority\x18\x04 \x01(\x05\x12\x1f\n\x13\x63ontroller_metadata\x18\x05 \x01(\x04\x42\x02\x18\x01\x12(\n\x0cmeter_config\x18\x06 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12(\n\x0c\x63ounter_data\x18\x07 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\x33\n\x12meter_counter_data\x18\x0c \x01(\x0b\x32\x17.p4.v1.MeterCounterData\x12\x19\n\x11is_default_action\x18\x08 \x01(\x08\x12\x17\n\x0fidle_timeout_ns\x18\t \x01(\x03\x12:\n\x13time_since_last_hit\x18\n \x01(\x0b\x32\x1d.p4.v1.TableEntry.IdleTimeout\x12\x10\n\x08metadata\x18\x0b \x01(\x0c\x1a!\n\x0bIdleTimeout\x12\x12\n\nelapsed_ns\x18\x01 \x01(\x03\"\xda\x03\n\nFieldMatch\x12\x10\n\x08\x66ield_id\x18\x01 \x01(\r\x12(\n\x05\x65xact\x18\x02 \x01(\x0b\x32\x17.p4.v1.FieldMatch.ExactH\x00\x12,\n\x07ternary\x18\x03 \x01(\x0b\x32\x19.p4.v1.FieldMatch.TernaryH\x00\x12$\n\x03lpm\x18\x04 \x01(\x0b\x32\x15.p4.v1.FieldMatch.LPMH\x00\x12(\n\x05range\x18\x06 \x01(\x0b\x32\x17.p4.v1.FieldMatch.RangeH\x00\x12.\n\x08optional\x18\x07 \x01(\x0b\x32\x1a.p4.v1.FieldMatch.OptionalH\x00\x12%\n\x05other\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x1a\x16\n\x05\x45xact\x12\r\n\x05value\x18\x01 \x01(\x0c\x1a&\n\x07Ternary\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x0c\n\x04mask\x18\x02 \x01(\x0c\x1a(\n\x03LPM\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x12\n\nprefix_len\x18\x02 \x01(\x05\x1a\"\n\x05Range\x12\x0b\n\x03low\x18\x01 \x01(\x0c\x12\x0c\n\x04high\x18\x02 \x01(\x0c\x1a\x19\n\x08Optional\x12\r\n\x05value\x18\x01 \x01(\x0c\x42\x12\n\x10\x66ield_match_type\"\xc1\x01\n\x0bTableAction\x12\x1f\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32\r.p4.v1.ActionH\x00\x12\"\n\x18\x61\x63tion_profile_member_id\x18\x02 \x01(\rH\x00\x12!\n\x17\x61\x63tion_profile_group_id\x18\x03 \x01(\rH\x00\x12\x42\n\x19\x61\x63tion_profile_action_set\x18\x04 \x01(\x0b\x32\x1d.p4.v1.ActionProfileActionSetH\x00\x42\x06\n\x04type\"j\n\x06\x41\x63tion\x12\x11\n\taction_id\x18\x01 \x01(\r\x12#\n\x06params\x18\x04 \x03(\x0b\x32\x13.p4.v1.Action.Param\x1a(\n\x05Param\x12\x10\n\x08param_id\x18\x02 \x01(\r\x12\r\n\x05value\x18\x03 \x01(\x0c\"T\n\x16\x41\x63tionProfileActionSet\x12:\n\x16\x61\x63tion_profile_actions\x18\x01 \x03(\x0b\x32\x1a.p4.v1.ActionProfileAction\"}\n\x13\x41\x63tionProfileAction\x12\x1d\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32\r.p4.v1.Action\x12\x0e\n\x06weight\x18\x02 \x01(\x05\x12\x13\n\x05watch\x18\x03 \x01(\x05\x42\x02\x18\x01H\x00\x12\x14\n\nwatch_port\x18\x04 \x01(\x0cH\x00\x42\x0c\n\nwatch_kind\"b\n\x13\x41\x63tionProfileMember\x12\x19\n\x11\x61\x63tion_profile_id\x18\x01 \x01(\r\x12\x11\n\tmember_id\x18\x02 \x01(\r\x12\x1d\n\x06\x61\x63tion\x18\x03 \x01(\x0b\x32\r.p4.v1.Action\"\xec\x01\n\x12\x41\x63tionProfileGroup\x12\x19\n\x11\x61\x63tion_profile_id\x18\x01 \x01(\r\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12\x31\n\x07members\x18\x03 \x03(\x0b\x32 .p4.v1.ActionProfileGroup.Member\x12\x10\n\x08max_size\x18\x04 \x01(\x05\x1a\x64\n\x06Member\x12\x11\n\tmember_id\x18\x01 \x01(\r\x12\x0e\n\x06weight\x18\x02 \x01(\x05\x12\x13\n\x05watch\x18\x03 \x01(\x05\x42\x02\x18\x01H\x00\x12\x14\n\nwatch_port\x18\x04 \x01(\x0cH\x00\x42\x0c\n\nwatch_kind\"\x16\n\x05Index\x12\r\n\x05index\x18\x01 \x01(\x03\"\x8e\x01\n\nMeterEntry\x12\x10\n\x08meter_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12\"\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12-\n\x0c\x63ounter_data\x18\x04 \x01(\x0b\x32\x17.p4.v1.MeterCounterData\"\x8d\x01\n\x10\x44irectMeterEntry\x12&\n\x0btable_entry\x18\x01 \x01(\x0b\x32\x11.p4.v1.TableEntry\x12\"\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12-\n\x0c\x63ounter_data\x18\x03 \x01(\x0b\x32\x17.p4.v1.MeterCounterData\"G\n\x0bMeterConfig\x12\x0b\n\x03\x63ir\x18\x01 \x01(\x03\x12\x0e\n\x06\x63\x62urst\x18\x02 \x01(\x03\x12\x0b\n\x03pir\x18\x03 \x01(\x03\x12\x0e\n\x06pburst\x18\x04 \x01(\x03\"a\n\x0c\x43ounterEntry\x12\x12\n\ncounter_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12 \n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x12.p4.v1.CounterData\"^\n\x12\x44irectCounterEntry\x12&\n\x0btable_entry\x18\x01 \x01(\x0b\x32\x11.p4.v1.TableEntry\x12 \n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x12.p4.v1.CounterData\"7\n\x0b\x43ounterData\x12\x12\n\nbyte_count\x18\x01 \x01(\x03\x12\x14\n\x0cpacket_count\x18\x02 \x01(\x03\"z\n\x10MeterCounterData\x12!\n\x05green\x18\x01 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\"\n\x06yellow\x18\x02 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\x1f\n\x03red\x18\x03 \x01(\x0b\x32\x12.p4.v1.CounterData\"\x9c\x01\n\x1cPacketReplicationEngineEntry\x12;\n\x15multicast_group_entry\x18\x01 \x01(\x0b\x32\x1a.p4.v1.MulticastGroupEntryH\x00\x12\x37\n\x13\x63lone_session_entry\x18\x02 \x01(\x0b\x32\x18.p4.v1.CloneSessionEntryH\x00\x42\x06\n\x04type\"S\n\x07Replica\x12\x19\n\x0b\x65gress_port\x18\x01 \x01(\rB\x02\x18\x01H\x00\x12\x0e\n\x04port\x18\x03 \x01(\x0cH\x00\x12\x10\n\x08instance\x18\x02 \x01(\rB\x0b\n\tport_kind\"S\n\x13MulticastGroupEntry\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\r\x12 \n\x08replicas\x18\x02 \x03(\x0b\x32\x0e.p4.v1.Replica\"\x80\x01\n\x11\x43loneSessionEntry\x12\x12\n\nsession_id\x18\x01 \x01(\r\x12 \n\x08replicas\x18\x02 \x03(\x0b\x32\x0e.p4.v1.Replica\x12\x18\n\x10\x63lass_of_service\x18\x03 \x01(\r\x12\x1b\n\x13packet_length_bytes\x18\x04 \x01(\x05\"2\n\x0eValueSetMember\x12 \n\x05match\x18\x01 \x03(\x0b\x32\x11.p4.v1.FieldMatch\"M\n\rValueSetEntry\x12\x14\n\x0cvalue_set_id\x18\x01 \x01(\r\x12&\n\x07members\x18\x02 \x03(\x0b\x32\x15.p4.v1.ValueSetMember\"^\n\rRegisterEntry\x12\x13\n\x0bregister_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12\x1b\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\r.p4.v1.P4Data\"\x9c\x01\n\x0b\x44igestEntry\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12)\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x19.p4.v1.DigestEntry.Config\x1aO\n\x06\x43onfig\x12\x16\n\x0emax_timeout_ns\x18\x01 \x01(\x03\x12\x15\n\rmax_list_size\x18\x02 \x01(\x05\x12\x16\n\x0e\x61\x63k_timeout_ns\x18\x03 \x01(\x03\"\xce\x01\n\x14StreamMessageRequest\x12\x35\n\x0b\x61rbitration\x18\x01 \x01(\x0b\x32\x1e.p4.v1.MasterArbitrationUpdateH\x00\x12\"\n\x06packet\x18\x02 \x01(\x0b\x32\x10.p4.v1.PacketOutH\x00\x12*\n\ndigest_ack\x18\x03 \x01(\x0b\x32\x14.p4.v1.DigestListAckH\x00\x12%\n\x05other\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x42\x08\n\x06update\"E\n\tPacketOut\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\'\n\x08metadata\x18\x02 \x03(\x0b\x32\x15.p4.v1.PacketMetadata\"3\n\rDigestListAck\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12\x0f\n\x07list_id\x18\x02 \x01(\x04\"\xb1\x02\n\x15StreamMessageResponse\x12\x35\n\x0b\x61rbitration\x18\x01 \x01(\x0b\x32\x1e.p4.v1.MasterArbitrationUpdateH\x00\x12!\n\x06packet\x18\x02 \x01(\x0b\x32\x0f.p4.v1.PacketInH\x00\x12#\n\x06\x64igest\x18\x03 \x01(\x0b\x32\x11.p4.v1.DigestListH\x00\x12\x43\n\x19idle_timeout_notification\x18\x04 \x01(\x0b\x32\x1e.p4.v1.IdleTimeoutNotificationH\x00\x12%\n\x05other\x18\x05 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x12#\n\x05\x65rror\x18\x06 \x01(\x0b\x32\x12.p4.v1.StreamErrorH\x00\x42\x08\n\x06update\"D\n\x08PacketIn\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\'\n\x08metadata\x18\x02 \x03(\x0b\x32\x15.p4.v1.PacketMetadata\"`\n\nDigestList\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12\x0f\n\x07list_id\x18\x02 \x01(\x04\x12\x1b\n\x04\x64\x61ta\x18\x03 \x03(\x0b\x32\r.p4.v1.P4Data\x12\x11\n\ttimestamp\x18\x04 \x01(\x03\"4\n\x0ePacketMetadata\x12\x13\n\x0bmetadata_id\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x90\x01\n\x17MasterArbitrationUpdate\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x19\n\x04role\x18\x02 \x01(\x0b\x32\x0b.p4.v1.Role\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12\"\n\x06status\x18\x04 \x01(\x0b\x32\x12.google.rpc.Status\"J\n\x04Role\x12\x0e\n\x02id\x18\x01 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04name\x18\x03 \x01(\t\x12$\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"T\n\x17IdleTimeoutNotification\x12&\n\x0btable_entry\x18\x01 \x03(\x0b\x32\x11.p4.v1.TableEntry\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"\xeb\x01\n\x0bStreamError\x12\x16\n\x0e\x63\x61nonical_code\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\r\n\x05space\x18\x03 \x01(\t\x12\x0c\n\x04\x63ode\x18\x04 \x01(\x05\x12+\n\npacket_out\x18\x05 \x01(\x0b\x32\x15.p4.v1.PacketOutErrorH\x00\x12\x34\n\x0f\x64igest_list_ack\x18\x06 \x01(\x0b\x32\x19.p4.v1.DigestListAckErrorH\x00\x12(\n\x05other\x18\x07 \x01(\x0b\x32\x17.p4.v1.StreamOtherErrorH\x00\x42\t\n\x07\x64\x65tails\"6\n\x0ePacketOutError\x12$\n\npacket_out\x18\x01 \x01(\x0b\x32\x10.p4.v1.PacketOut\"C\n\x12\x44igestListAckError\x12-\n\x0f\x64igest_list_ack\x18\x01 \x01(\x0b\x32\x14.p4.v1.DigestListAck\"7\n\x10StreamOtherError\x12#\n\x05other\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Any\"$\n\x07Uint128\x12\x0c\n\x04high\x18\x01 \x01(\x04\x12\x0b\n\x03low\x18\x02 \x01(\x04\"\xeb\x02\n\"SetForwardingPipelineConfigRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x13\n\x07role_id\x18\x02 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04role\x18\x06 \x01(\t\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12@\n\x06\x61\x63tion\x18\x04 \x01(\x0e\x32\x30.p4.v1.SetForwardingPipelineConfigRequest.Action\x12/\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x1f.p4.v1.ForwardingPipelineConfig\"w\n\x06\x41\x63tion\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06VERIFY\x10\x01\x12\x13\n\x0fVERIFY_AND_SAVE\x10\x02\x12\x15\n\x11VERIFY_AND_COMMIT\x10\x03\x12\n\n\x06\x43OMMIT\x10\x04\x12\x18\n\x14RECONCILE_AND_COMMIT\x10\x05\"%\n#SetForwardingPipelineConfigResponse\"\xac\x01\n\x18\x46orwardingPipelineConfig\x12$\n\x06p4info\x18\x01 \x01(\x0b\x32\x14.p4.config.v1.P4Info\x12\x18\n\x10p4_device_config\x18\x02 \x01(\x0c\x12\x36\n\x06\x63ookie\x18\x03 \x01(\x0b\x32&.p4.v1.ForwardingPipelineConfig.Cookie\x1a\x18\n\x06\x43ookie\x12\x0e\n\x06\x63ookie\x18\x01 \x01(\x04\"\xe5\x01\n\"GetForwardingPipelineConfigRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12M\n\rresponse_type\x18\x02 \x01(\x0e\x32\x36.p4.v1.GetForwardingPipelineConfigRequest.ResponseType\"]\n\x0cResponseType\x12\x07\n\x03\x41LL\x10\x00\x12\x0f\n\x0b\x43OOKIE_ONLY\x10\x01\x12\x15\n\x11P4INFO_AND_COOKIE\x10\x02\x12\x1c\n\x18\x44\x45VICE_CONFIG_AND_COOKIE\x10\x03\"V\n#GetForwardingPipelineConfigResponse\x12/\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x1f.p4.v1.ForwardingPipelineConfig\"t\n\x05\x45rror\x12\x16\n\x0e\x63\x61nonical_code\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\r\n\x05space\x18\x03 \x01(\t\x12\x0c\n\x04\x63ode\x18\x04 \x01(\x05\x12%\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x14.google.protobuf.Any\"\x15\n\x13\x43\x61pabilitiesRequest\"5\n\x14\x43\x61pabilitiesResponse\x12\x1d\n\x15p4runtime_api_version\x18\x01 \x01(\t*\x8a\x01\n\x07SdnPort\x12\x14\n\x10SDN_PORT_UNKNOWN\x10\x00\x12\x10\n\x0cSDN_PORT_MIN\x10\x01\x12\x19\n\x0cSDN_PORT_MAX\x10\xff\xfd\xff\xff\xff\xff\xff\xff\xff\x01\x12!\n\x14SDN_PORT_RECIRCULATE\x10\xfa\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x0cSDN_PORT_CPU\x10\xfd\xff\xff\xff\xff\xff\xff\xff\xff\x01\x32\x83\x04\n\tP4Runtime\x12\x34\n\x05Write\x12\x13.p4.v1.WriteRequest\x1a\x14.p4.v1.WriteResponse\"\x00\x12\x33\n\x04Read\x12\x12.p4.v1.ReadRequest\x1a\x13.p4.v1.ReadResponse\"\x00\x30\x01\x12v\n\x1bSetForwardingPipelineConfig\x12).p4.v1.SetForwardingPipelineConfigRequest\x1a*.p4.v1.SetForwardingPipelineConfigResponse\"\x00\x12v\n\x1bGetForwardingPipelineConfig\x12).p4.v1.GetForwardingPipelineConfigRequest\x1a*.p4.v1.GetForwardingPipelineConfigResponse\"\x00\x12P\n\rStreamChannel\x12\x1b.p4.v1.StreamMessageRequest\x1a\x1c.p4.v1.StreamMessageResponse\"\x00(\x01\x30\x01\x12I\n\x0c\x43\x61pabilities\x12\x1a.p4.v1.CapabilitiesRequest\x1a\x1b.p4.v1.CapabilitiesResponse\"\x00\x42)Z$github.com/p4lang/p4runtime/go/p4/v1\xf8\x01\x01\x62\x06proto3' + serialized_pb=b'\n\x15p4/v1/p4runtime.proto\x12\x05p4.v1\x1a\x19google/protobuf/any.proto\x1a\x17google/rpc/status.proto\x1a\x19p4/config/v1/p4info.proto\x1a\x12p4/v1/p4data.proto\"\x8c\x02\n\x0cWriteRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x13\n\x07role_id\x18\x02 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04role\x18\x06 \x01(\t\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12\x1e\n\x07updates\x18\x04 \x03(\x0b\x32\r.p4.v1.Update\x12\x30\n\tatomicity\x18\x05 \x01(\x0e\x32\x1d.p4.v1.WriteRequest.Atomicity\"O\n\tAtomicity\x12\x15\n\x11\x43ONTINUE_ON_ERROR\x10\x00\x12\x15\n\x11ROLLBACK_ON_ERROR\x10\x01\x12\x14\n\x10\x44\x41TAPLANE_ATOMIC\x10\x02\"\x0f\n\rWriteResponse\"O\n\x0bReadRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x0c\n\x04role\x18\x03 \x01(\t\x12\x1f\n\x08\x65ntities\x18\x02 \x03(\x0b\x32\r.p4.v1.Entity\"/\n\x0cReadResponse\x12\x1f\n\x08\x65ntities\x18\x01 \x03(\x0b\x32\r.p4.v1.Entity\"\x86\x01\n\x06Update\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.p4.v1.Update.Type\x12\x1d\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\r.p4.v1.Entity\";\n\x04Type\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06INSERT\x10\x01\x12\n\n\x06MODIFY\x10\x02\x12\n\n\x06\x44\x45LETE\x10\x03\"\xc0\x05\n\x06\x45ntity\x12*\n\x0c\x65xtern_entry\x18\x01 \x01(\x0b\x32\x12.p4.v1.ExternEntryH\x00\x12(\n\x0btable_entry\x18\x02 \x01(\x0b\x32\x11.p4.v1.TableEntryH\x00\x12;\n\x15\x61\x63tion_profile_member\x18\x03 \x01(\x0b\x32\x1a.p4.v1.ActionProfileMemberH\x00\x12\x39\n\x14\x61\x63tion_profile_group\x18\x04 \x01(\x0b\x32\x19.p4.v1.ActionProfileGroupH\x00\x12(\n\x0bmeter_entry\x18\x05 \x01(\x0b\x32\x11.p4.v1.MeterEntryH\x00\x12\x35\n\x12\x64irect_meter_entry\x18\x06 \x01(\x0b\x32\x17.p4.v1.DirectMeterEntryH\x00\x12,\n\rcounter_entry\x18\x07 \x01(\x0b\x32\x13.p4.v1.CounterEntryH\x00\x12\x39\n\x14\x64irect_counter_entry\x18\x08 \x01(\x0b\x32\x19.p4.v1.DirectCounterEntryH\x00\x12N\n\x1fpacket_replication_engine_entry\x18\t \x01(\x0b\x32#.p4.v1.PacketReplicationEngineEntryH\x00\x12/\n\x0fvalue_set_entry\x18\n \x01(\x0b\x32\x14.p4.v1.ValueSetEntryH\x00\x12.\n\x0eregister_entry\x18\x0b \x01(\x0b\x32\x14.p4.v1.RegisterEntryH\x00\x12*\n\x0c\x64igest_entry\x18\x0c \x01(\x0b\x32\x12.p4.v1.DigestEntryH\x00\x12\x37\n\x13generic_table_entry\x18\r \x01(\x0b\x32\x18.p4.v1.GenericTableEntryH\x00\x42\x08\n\x06\x65ntity\"]\n\x0b\x45xternEntry\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x11\n\textern_id\x18\x02 \x01(\r\x12#\n\x05\x65ntry\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\"\xf2\x03\n\nTableEntry\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12 \n\x05match\x18\x02 \x03(\x0b\x32\x11.p4.v1.FieldMatch\x12\"\n\x06\x61\x63tion\x18\x03 \x01(\x0b\x32\x12.p4.v1.TableAction\x12\x10\n\x08priority\x18\x04 \x01(\x05\x12\x1f\n\x13\x63ontroller_metadata\x18\x05 \x01(\x04\x42\x02\x18\x01\x12(\n\x0cmeter_config\x18\x06 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12(\n\x0c\x63ounter_data\x18\x07 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\x33\n\x12meter_counter_data\x18\x0c \x01(\x0b\x32\x17.p4.v1.MeterCounterData\x12\x19\n\x11is_default_action\x18\x08 \x01(\x08\x12\x17\n\x0fidle_timeout_ns\x18\t \x01(\x03\x12:\n\x13time_since_last_hit\x18\n \x01(\x0b\x32\x1d.p4.v1.TableEntry.IdleTimeout\x12\x10\n\x08metadata\x18\x0b \x01(\x0c\x12+\n\tresources\x18\r \x03(\x0b\x32\x18.p4.v1.GenericTableEntry\x1a!\n\x0bIdleTimeout\x12\x12\n\nelapsed_ns\x18\x01 \x01(\x03\"\xda\x03\n\nFieldMatch\x12\x10\n\x08\x66ield_id\x18\x01 \x01(\r\x12(\n\x05\x65xact\x18\x02 \x01(\x0b\x32\x17.p4.v1.FieldMatch.ExactH\x00\x12,\n\x07ternary\x18\x03 \x01(\x0b\x32\x19.p4.v1.FieldMatch.TernaryH\x00\x12$\n\x03lpm\x18\x04 \x01(\x0b\x32\x15.p4.v1.FieldMatch.LPMH\x00\x12(\n\x05range\x18\x06 \x01(\x0b\x32\x17.p4.v1.FieldMatch.RangeH\x00\x12.\n\x08optional\x18\x07 \x01(\x0b\x32\x1a.p4.v1.FieldMatch.OptionalH\x00\x12%\n\x05other\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x1a\x16\n\x05\x45xact\x12\r\n\x05value\x18\x01 \x01(\x0c\x1a&\n\x07Ternary\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x0c\n\x04mask\x18\x02 \x01(\x0c\x1a(\n\x03LPM\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x12\n\nprefix_len\x18\x02 \x01(\x05\x1a\"\n\x05Range\x12\x0b\n\x03low\x18\x01 \x01(\x0c\x12\x0c\n\x04high\x18\x02 \x01(\x0c\x1a\x19\n\x08Optional\x12\r\n\x05value\x18\x01 \x01(\x0c\x42\x12\n\x10\x66ield_match_type\"\xc1\x01\n\x0bTableAction\x12\x1f\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32\r.p4.v1.ActionH\x00\x12\"\n\x18\x61\x63tion_profile_member_id\x18\x02 \x01(\rH\x00\x12!\n\x17\x61\x63tion_profile_group_id\x18\x03 \x01(\rH\x00\x12\x42\n\x19\x61\x63tion_profile_action_set\x18\x04 \x01(\x0b\x32\x1d.p4.v1.ActionProfileActionSetH\x00\x42\x06\n\x04type\"j\n\x06\x41\x63tion\x12\x11\n\taction_id\x18\x01 \x01(\r\x12#\n\x06params\x18\x04 \x03(\x0b\x32\x13.p4.v1.Action.Param\x1a(\n\x05Param\x12\x10\n\x08param_id\x18\x02 \x01(\r\x12\r\n\x05value\x18\x03 \x01(\x0c\"T\n\x16\x41\x63tionProfileActionSet\x12:\n\x16\x61\x63tion_profile_actions\x18\x01 \x03(\x0b\x32\x1a.p4.v1.ActionProfileAction\"}\n\x13\x41\x63tionProfileAction\x12\x1d\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32\r.p4.v1.Action\x12\x0e\n\x06weight\x18\x02 \x01(\x05\x12\x13\n\x05watch\x18\x03 \x01(\x05\x42\x02\x18\x01H\x00\x12\x14\n\nwatch_port\x18\x04 \x01(\x0cH\x00\x42\x0c\n\nwatch_kind\"b\n\x13\x41\x63tionProfileMember\x12\x19\n\x11\x61\x63tion_profile_id\x18\x01 \x01(\r\x12\x11\n\tmember_id\x18\x02 \x01(\r\x12\x1d\n\x06\x61\x63tion\x18\x03 \x01(\x0b\x32\r.p4.v1.Action\"\xec\x01\n\x12\x41\x63tionProfileGroup\x12\x19\n\x11\x61\x63tion_profile_id\x18\x01 \x01(\r\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12\x31\n\x07members\x18\x03 \x03(\x0b\x32 .p4.v1.ActionProfileGroup.Member\x12\x10\n\x08max_size\x18\x04 \x01(\x05\x1a\x64\n\x06Member\x12\x11\n\tmember_id\x18\x01 \x01(\r\x12\x0e\n\x06weight\x18\x02 \x01(\x05\x12\x13\n\x05watch\x18\x03 \x01(\x05\x42\x02\x18\x01H\x00\x12\x14\n\nwatch_port\x18\x04 \x01(\x0cH\x00\x42\x0c\n\nwatch_kind\"\x16\n\x05Index\x12\r\n\x05index\x18\x01 \x01(\x03\"\x8e\x01\n\nMeterEntry\x12\x10\n\x08meter_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12\"\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12-\n\x0c\x63ounter_data\x18\x04 \x01(\x0b\x32\x17.p4.v1.MeterCounterData\"\x8d\x01\n\x10\x44irectMeterEntry\x12&\n\x0btable_entry\x18\x01 \x01(\x0b\x32\x11.p4.v1.TableEntry\x12\"\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12-\n\x0c\x63ounter_data\x18\x03 \x01(\x0b\x32\x17.p4.v1.MeterCounterData\"G\n\x0bMeterConfig\x12\x0b\n\x03\x63ir\x18\x01 \x01(\x03\x12\x0e\n\x06\x63\x62urst\x18\x02 \x01(\x03\x12\x0b\n\x03pir\x18\x03 \x01(\x03\x12\x0e\n\x06pburst\x18\x04 \x01(\x03\"a\n\x0c\x43ounterEntry\x12\x12\n\ncounter_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12 \n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x12.p4.v1.CounterData\"^\n\x12\x44irectCounterEntry\x12&\n\x0btable_entry\x18\x01 \x01(\x0b\x32\x11.p4.v1.TableEntry\x12 \n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x12.p4.v1.CounterData\"7\n\x0b\x43ounterData\x12\x12\n\nbyte_count\x18\x01 \x01(\x03\x12\x14\n\x0cpacket_count\x18\x02 \x01(\x03\"z\n\x10MeterCounterData\x12!\n\x05green\x18\x01 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\"\n\x06yellow\x18\x02 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\x1f\n\x03red\x18\x03 \x01(\x0b\x32\x12.p4.v1.CounterData\"\x9c\x01\n\x1cPacketReplicationEngineEntry\x12;\n\x15multicast_group_entry\x18\x01 \x01(\x0b\x32\x1a.p4.v1.MulticastGroupEntryH\x00\x12\x37\n\x13\x63lone_session_entry\x18\x02 \x01(\x0b\x32\x18.p4.v1.CloneSessionEntryH\x00\x42\x06\n\x04type\"S\n\x07Replica\x12\x19\n\x0b\x65gress_port\x18\x01 \x01(\rB\x02\x18\x01H\x00\x12\x0e\n\x04port\x18\x03 \x01(\x0cH\x00\x12\x10\n\x08instance\x18\x02 \x01(\rB\x0b\n\tport_kind\"S\n\x13MulticastGroupEntry\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\r\x12 \n\x08replicas\x18\x02 \x03(\x0b\x32\x0e.p4.v1.Replica\"\x80\x01\n\x11\x43loneSessionEntry\x12\x12\n\nsession_id\x18\x01 \x01(\r\x12 \n\x08replicas\x18\x02 \x03(\x0b\x32\x0e.p4.v1.Replica\x12\x18\n\x10\x63lass_of_service\x18\x03 \x01(\r\x12\x1b\n\x13packet_length_bytes\x18\x04 \x01(\x05\"2\n\x0eValueSetMember\x12 \n\x05match\x18\x01 \x03(\x0b\x32\x11.p4.v1.FieldMatch\"M\n\rValueSetEntry\x12\x14\n\x0cvalue_set_id\x18\x01 \x01(\r\x12&\n\x07members\x18\x02 \x03(\x0b\x32\x15.p4.v1.ValueSetMember\"^\n\rRegisterEntry\x12\x13\n\x0bregister_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12\x1b\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\r.p4.v1.P4Data\"\x9c\x01\n\x0b\x44igestEntry\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12)\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x19.p4.v1.DigestEntry.Config\x1aO\n\x06\x43onfig\x12\x16\n\x0emax_timeout_ns\x18\x01 \x01(\x03\x12\x15\n\rmax_list_size\x18\x02 \x01(\x05\x12\x16\n\x0e\x61\x63k_timeout_ns\x18\x03 \x01(\x03\"\xce\x01\n\x14StreamMessageRequest\x12\x35\n\x0b\x61rbitration\x18\x01 \x01(\x0b\x32\x1e.p4.v1.MasterArbitrationUpdateH\x00\x12\"\n\x06packet\x18\x02 \x01(\x0b\x32\x10.p4.v1.PacketOutH\x00\x12*\n\ndigest_ack\x18\x03 \x01(\x0b\x32\x14.p4.v1.DigestListAckH\x00\x12%\n\x05other\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x42\x08\n\x06update\"E\n\tPacketOut\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\'\n\x08metadata\x18\x02 \x03(\x0b\x32\x15.p4.v1.PacketMetadata\"3\n\rDigestListAck\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12\x0f\n\x07list_id\x18\x02 \x01(\x04\"\xb1\x02\n\x15StreamMessageResponse\x12\x35\n\x0b\x61rbitration\x18\x01 \x01(\x0b\x32\x1e.p4.v1.MasterArbitrationUpdateH\x00\x12!\n\x06packet\x18\x02 \x01(\x0b\x32\x0f.p4.v1.PacketInH\x00\x12#\n\x06\x64igest\x18\x03 \x01(\x0b\x32\x11.p4.v1.DigestListH\x00\x12\x43\n\x19idle_timeout_notification\x18\x04 \x01(\x0b\x32\x1e.p4.v1.IdleTimeoutNotificationH\x00\x12%\n\x05other\x18\x05 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x12#\n\x05\x65rror\x18\x06 \x01(\x0b\x32\x12.p4.v1.StreamErrorH\x00\x42\x08\n\x06update\"D\n\x08PacketIn\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\'\n\x08metadata\x18\x02 \x03(\x0b\x32\x15.p4.v1.PacketMetadata\"`\n\nDigestList\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12\x0f\n\x07list_id\x18\x02 \x01(\x04\x12\x1b\n\x04\x64\x61ta\x18\x03 \x03(\x0b\x32\r.p4.v1.P4Data\x12\x11\n\ttimestamp\x18\x04 \x01(\x03\"4\n\x0ePacketMetadata\x12\x13\n\x0bmetadata_id\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x90\x01\n\x17MasterArbitrationUpdate\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x19\n\x04role\x18\x02 \x01(\x0b\x32\x0b.p4.v1.Role\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12\"\n\x06status\x18\x04 \x01(\x0b\x32\x12.google.rpc.Status\"J\n\x04Role\x12\x0e\n\x02id\x18\x01 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04name\x18\x03 \x01(\t\x12$\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"T\n\x17IdleTimeoutNotification\x12&\n\x0btable_entry\x18\x01 \x03(\x0b\x32\x11.p4.v1.TableEntry\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"\xeb\x01\n\x0bStreamError\x12\x16\n\x0e\x63\x61nonical_code\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\r\n\x05space\x18\x03 \x01(\t\x12\x0c\n\x04\x63ode\x18\x04 \x01(\x05\x12+\n\npacket_out\x18\x05 \x01(\x0b\x32\x15.p4.v1.PacketOutErrorH\x00\x12\x34\n\x0f\x64igest_list_ack\x18\x06 \x01(\x0b\x32\x19.p4.v1.DigestListAckErrorH\x00\x12(\n\x05other\x18\x07 \x01(\x0b\x32\x17.p4.v1.StreamOtherErrorH\x00\x42\t\n\x07\x64\x65tails\"6\n\x0ePacketOutError\x12$\n\npacket_out\x18\x01 \x01(\x0b\x32\x10.p4.v1.PacketOut\"C\n\x12\x44igestListAckError\x12-\n\x0f\x64igest_list_ack\x18\x01 \x01(\x0b\x32\x14.p4.v1.DigestListAck\"7\n\x10StreamOtherError\x12#\n\x05other\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Any\"$\n\x07Uint128\x12\x0c\n\x04high\x18\x01 \x01(\x04\x12\x0b\n\x03low\x18\x02 \x01(\x04\"\xeb\x02\n\"SetForwardingPipelineConfigRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x13\n\x07role_id\x18\x02 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04role\x18\x06 \x01(\t\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12@\n\x06\x61\x63tion\x18\x04 \x01(\x0e\x32\x30.p4.v1.SetForwardingPipelineConfigRequest.Action\x12/\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x1f.p4.v1.ForwardingPipelineConfig\"w\n\x06\x41\x63tion\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06VERIFY\x10\x01\x12\x13\n\x0fVERIFY_AND_SAVE\x10\x02\x12\x15\n\x11VERIFY_AND_COMMIT\x10\x03\x12\n\n\x06\x43OMMIT\x10\x04\x12\x18\n\x14RECONCILE_AND_COMMIT\x10\x05\"%\n#SetForwardingPipelineConfigResponse\"\xac\x01\n\x18\x46orwardingPipelineConfig\x12$\n\x06p4info\x18\x01 \x01(\x0b\x32\x14.p4.config.v1.P4Info\x12\x18\n\x10p4_device_config\x18\x02 \x01(\x0c\x12\x36\n\x06\x63ookie\x18\x03 \x01(\x0b\x32&.p4.v1.ForwardingPipelineConfig.Cookie\x1a\x18\n\x06\x43ookie\x12\x0e\n\x06\x63ookie\x18\x01 \x01(\x04\"\xe5\x01\n\"GetForwardingPipelineConfigRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12M\n\rresponse_type\x18\x02 \x01(\x0e\x32\x36.p4.v1.GetForwardingPipelineConfigRequest.ResponseType\"]\n\x0cResponseType\x12\x07\n\x03\x41LL\x10\x00\x12\x0f\n\x0b\x43OOKIE_ONLY\x10\x01\x12\x15\n\x11P4INFO_AND_COOKIE\x10\x02\x12\x1c\n\x18\x44\x45VICE_CONFIG_AND_COOKIE\x10\x03\"V\n#GetForwardingPipelineConfigResponse\x12/\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x1f.p4.v1.ForwardingPipelineConfig\"t\n\x05\x45rror\x12\x16\n\x0e\x63\x61nonical_code\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\r\n\x05space\x18\x03 \x01(\t\x12\x0c\n\x04\x63ode\x18\x04 \x01(\x05\x12%\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x14.google.protobuf.Any\"\x15\n\x13\x43\x61pabilitiesRequest\"5\n\x14\x43\x61pabilitiesResponse\x12\x1d\n\x15p4runtime_api_version\x18\x01 \x01(\t\"\xac\x04\n\x11GenericFieldMatch\x12\x10\n\x08\x66ield_id\x18\x01 \x01(\r\x12/\n\x05\x65xact\x18\x02 \x01(\x0b\x32\x1e.p4.v1.GenericFieldMatch.ExactH\x00\x12\x33\n\x07ternary\x18\x03 \x01(\x0b\x32 .p4.v1.GenericFieldMatch.TernaryH\x00\x12+\n\x03lpm\x18\x04 \x01(\x0b\x32\x1c.p4.v1.GenericFieldMatch.LPMH\x00\x12/\n\x05range\x18\x06 \x01(\x0b\x32\x1e.p4.v1.GenericFieldMatch.RangeH\x00\x12\x35\n\x08optional\x18\x07 \x01(\x0b\x32!.p4.v1.GenericFieldMatch.OptionalH\x00\x12%\n\x05other\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x1a*\n\x05\x45xact\x12!\n\x05value\x18\x01 \x01(\x0b\x32\x12.p4.v1.GenericData\x1a&\n\x07Ternary\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x0c\n\x04mask\x18\x02 \x01(\x0c\x1a(\n\x03LPM\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x12\n\nprefix_len\x18\x02 \x01(\x05\x1a\"\n\x05Range\x12\x0b\n\x03low\x18\x01 \x01(\x0c\x12\x0c\n\x04high\x18\x02 \x01(\x0c\x1a-\n\x08Optional\x12!\n\x05value\x18\x01 \x01(\x0b\x32\x12.p4.v1.GenericDataB\x12\n\x10\x66ield_match_type\"\xbd\x01\n\x11GenericTableEntry\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.v1.GenericFieldMatch\x12/\n\x10table_data_union\x18\x03 \x01(\x0b\x32\x15.p4.v1.TableDataUnion\x12\x10\n\x08priority\x18\x04 \x01(\x05\x12\x18\n\x10is_default_entry\x18\x05 \x01(\x08\x12\x10\n\x08metadata\x18\x06 \x01(\x0c\"\x8d\x01\n\x0eTableDataUnion\x12\x10\n\x08union_id\x18\x01 \x01(\r\x12+\n\x06params\x18\x04 \x03(\x0b\x32\x1b.p4.v1.TableDataUnion.Param\x1a<\n\x05Param\x12\x10\n\x08param_id\x18\x02 \x01(\r\x12!\n\x05value\x18\x03 \x01(\x0b\x32\x12.p4.v1.GenericData*\x8a\x01\n\x07SdnPort\x12\x14\n\x10SDN_PORT_UNKNOWN\x10\x00\x12\x10\n\x0cSDN_PORT_MIN\x10\x01\x12\x19\n\x0cSDN_PORT_MAX\x10\xff\xfd\xff\xff\xff\xff\xff\xff\xff\x01\x12!\n\x14SDN_PORT_RECIRCULATE\x10\xfa\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x0cSDN_PORT_CPU\x10\xfd\xff\xff\xff\xff\xff\xff\xff\xff\x01\x32\x83\x04\n\tP4Runtime\x12\x34\n\x05Write\x12\x13.p4.v1.WriteRequest\x1a\x14.p4.v1.WriteResponse\"\x00\x12\x33\n\x04Read\x12\x12.p4.v1.ReadRequest\x1a\x13.p4.v1.ReadResponse\"\x00\x30\x01\x12v\n\x1bSetForwardingPipelineConfig\x12).p4.v1.SetForwardingPipelineConfigRequest\x1a*.p4.v1.SetForwardingPipelineConfigResponse\"\x00\x12v\n\x1bGetForwardingPipelineConfig\x12).p4.v1.GetForwardingPipelineConfigRequest\x1a*.p4.v1.GetForwardingPipelineConfigResponse\"\x00\x12P\n\rStreamChannel\x12\x1b.p4.v1.StreamMessageRequest\x1a\x1c.p4.v1.StreamMessageResponse\"\x00(\x01\x30\x01\x12I\n\x0c\x43\x61pabilities\x12\x1a.p4.v1.CapabilitiesRequest\x1a\x1b.p4.v1.CapabilitiesResponse\"\x00\x42)Z$github.com/p4lang/p4runtime/go/p4/v1\xf8\x01\x01\x62\x06proto3' , dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,google_dot_rpc_dot_status__pb2.DESCRIPTOR,p4_dot_config_dot_v1_dot_p4info__pb2.DESCRIPTOR,p4_dot_v1_dot_p4data__pb2.DESCRIPTOR,]) @@ -63,8 +63,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=7555, - serialized_end=7693, + serialized_start=8552, + serialized_end=8690, ) _sym_db.RegisterEnumDescriptor(_SDNPORT) @@ -181,8 +181,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=6703, - serialized_end=6822, + serialized_start=6805, + serialized_end=6924, ) _sym_db.RegisterEnumDescriptor(_SETFORWARDINGPIPELINECONFIGREQUEST_ACTION) @@ -216,8 +216,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=7175, - serialized_end=7268, + serialized_start=7277, + serialized_end=7370, ) _sym_db.RegisterEnumDescriptor(_GETFORWARDINGPIPELINECONFIGREQUEST_RESPONSETYPE) @@ -525,6 +525,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='generic_table_entry', full_name='p4.v1.Entity.generic_table_entry', index=12, + number=13, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -543,7 +550,7 @@ fields=[]), ], serialized_start=687, - serialized_end=1334, + serialized_end=1391, ) @@ -588,8 +595,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1336, - serialized_end=1429, + serialized_start=1393, + serialized_end=1486, ) @@ -620,8 +627,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1852, - serialized_end=1885, + serialized_start=1954, + serialized_end=1987, ) _TABLEENTRY = _descriptor.Descriptor( @@ -716,6 +723,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='resources', full_name='p4.v1.TableEntry.resources', index=12, + number=13, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -728,8 +742,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1432, - serialized_end=1885, + serialized_start=1489, + serialized_end=1987, ) @@ -760,8 +774,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2175, - serialized_end=2197, + serialized_start=2277, + serialized_end=2299, ) _FIELDMATCH_TERNARY = _descriptor.Descriptor( @@ -798,8 +812,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2199, - serialized_end=2237, + serialized_start=2301, + serialized_end=2339, ) _FIELDMATCH_LPM = _descriptor.Descriptor( @@ -836,8 +850,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2239, - serialized_end=2279, + serialized_start=2341, + serialized_end=2381, ) _FIELDMATCH_RANGE = _descriptor.Descriptor( @@ -874,8 +888,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2281, - serialized_end=2315, + serialized_start=2383, + serialized_end=2417, ) _FIELDMATCH_OPTIONAL = _descriptor.Descriptor( @@ -905,8 +919,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2317, - serialized_end=2342, + serialized_start=2419, + serialized_end=2444, ) _FIELDMATCH = _descriptor.Descriptor( @@ -983,8 +997,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=1888, - serialized_end=2362, + serialized_start=1990, + serialized_end=2464, ) @@ -1041,8 +1055,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=2365, - serialized_end=2558, + serialized_start=2467, + serialized_end=2660, ) @@ -1080,8 +1094,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2626, - serialized_end=2666, + serialized_start=2728, + serialized_end=2768, ) _ACTION = _descriptor.Descriptor( @@ -1118,8 +1132,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2560, - serialized_end=2666, + serialized_start=2662, + serialized_end=2768, ) @@ -1150,8 +1164,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2668, - serialized_end=2752, + serialized_start=2770, + serialized_end=2854, ) @@ -1208,8 +1222,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=2754, - serialized_end=2879, + serialized_start=2856, + serialized_end=2981, ) @@ -1254,8 +1268,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2881, - serialized_end=2979, + serialized_start=2983, + serialized_end=3081, ) @@ -1312,8 +1326,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=3118, - serialized_end=3218, + serialized_start=3220, + serialized_end=3320, ) _ACTIONPROFILEGROUP = _descriptor.Descriptor( @@ -1364,8 +1378,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2982, - serialized_end=3218, + serialized_start=3084, + serialized_end=3320, ) @@ -1396,8 +1410,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3220, - serialized_end=3242, + serialized_start=3322, + serialized_end=3344, ) @@ -1449,8 +1463,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3245, - serialized_end=3387, + serialized_start=3347, + serialized_end=3489, ) @@ -1495,8 +1509,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3390, - serialized_end=3531, + serialized_start=3492, + serialized_end=3633, ) @@ -1548,8 +1562,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3533, - serialized_end=3604, + serialized_start=3635, + serialized_end=3706, ) @@ -1594,8 +1608,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3606, - serialized_end=3703, + serialized_start=3708, + serialized_end=3805, ) @@ -1633,8 +1647,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3705, - serialized_end=3799, + serialized_start=3807, + serialized_end=3901, ) @@ -1672,8 +1686,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3801, - serialized_end=3856, + serialized_start=3903, + serialized_end=3958, ) @@ -1718,8 +1732,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3858, - serialized_end=3980, + serialized_start=3960, + serialized_end=4082, ) @@ -1762,8 +1776,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=3983, - serialized_end=4139, + serialized_start=4085, + serialized_end=4241, ) @@ -1813,8 +1827,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=4141, - serialized_end=4224, + serialized_start=4243, + serialized_end=4326, ) @@ -1852,8 +1866,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4226, - serialized_end=4309, + serialized_start=4328, + serialized_end=4411, ) @@ -1905,8 +1919,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4312, - serialized_end=4440, + serialized_start=4414, + serialized_end=4542, ) @@ -1937,8 +1951,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4442, - serialized_end=4492, + serialized_start=4544, + serialized_end=4594, ) @@ -1976,8 +1990,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4494, - serialized_end=4571, + serialized_start=4596, + serialized_end=4673, ) @@ -2022,8 +2036,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4573, - serialized_end=4667, + serialized_start=4675, + serialized_end=4769, ) @@ -2068,8 +2082,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4747, - serialized_end=4826, + serialized_start=4849, + serialized_end=4928, ) _DIGESTENTRY = _descriptor.Descriptor( @@ -2106,8 +2120,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4670, - serialized_end=4826, + serialized_start=4772, + serialized_end=4928, ) @@ -2164,8 +2178,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=4829, - serialized_end=5035, + serialized_start=4931, + serialized_end=5137, ) @@ -2203,8 +2217,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5037, - serialized_end=5106, + serialized_start=5139, + serialized_end=5208, ) @@ -2242,8 +2256,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5108, - serialized_end=5159, + serialized_start=5210, + serialized_end=5261, ) @@ -2314,8 +2328,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=5162, - serialized_end=5467, + serialized_start=5264, + serialized_end=5569, ) @@ -2353,8 +2367,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5469, - serialized_end=5537, + serialized_start=5571, + serialized_end=5639, ) @@ -2406,8 +2420,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5539, - serialized_end=5635, + serialized_start=5641, + serialized_end=5737, ) @@ -2445,8 +2459,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5637, - serialized_end=5689, + serialized_start=5739, + serialized_end=5791, ) @@ -2498,8 +2512,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5692, - serialized_end=5836, + serialized_start=5794, + serialized_end=5938, ) @@ -2544,8 +2558,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5838, - serialized_end=5912, + serialized_start=5940, + serialized_end=6014, ) @@ -2583,8 +2597,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5914, - serialized_end=5998, + serialized_start=6016, + serialized_end=6100, ) @@ -2662,8 +2676,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=6001, - serialized_end=6236, + serialized_start=6103, + serialized_end=6338, ) @@ -2694,8 +2708,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6238, - serialized_end=6292, + serialized_start=6340, + serialized_end=6394, ) @@ -2726,8 +2740,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6294, - serialized_end=6361, + serialized_start=6396, + serialized_end=6463, ) @@ -2758,8 +2772,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6363, - serialized_end=6418, + serialized_start=6465, + serialized_end=6520, ) @@ -2797,8 +2811,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6420, - serialized_end=6456, + serialized_start=6522, + serialized_end=6558, ) @@ -2865,8 +2879,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6459, - serialized_end=6822, + serialized_start=6561, + serialized_end=6924, ) @@ -2890,8 +2904,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6824, - serialized_end=6861, + serialized_start=6926, + serialized_end=6963, ) @@ -2922,8 +2936,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7012, - serialized_end=7036, + serialized_start=7114, + serialized_end=7138, ) _FORWARDINGPIPELINECONFIG = _descriptor.Descriptor( @@ -2967,8 +2981,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6864, - serialized_end=7036, + serialized_start=6966, + serialized_end=7138, ) @@ -3007,8 +3021,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7039, - serialized_end=7268, + serialized_start=7141, + serialized_end=7370, ) @@ -3039,8 +3053,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7270, - serialized_end=7356, + serialized_start=7372, + serialized_end=7458, ) @@ -3099,8 +3113,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7358, - serialized_end=7474, + serialized_start=7460, + serialized_end=7576, ) @@ -3124,8 +3138,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7476, - serialized_end=7497, + serialized_start=7578, + serialized_end=7599, ) @@ -3156,8 +3170,407 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7499, - serialized_end=7552, + serialized_start=7601, + serialized_end=7654, +) + + +_GENERICFIELDMATCH_EXACT = _descriptor.Descriptor( + name='Exact', + full_name='p4.v1.GenericFieldMatch.Exact', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.GenericFieldMatch.Exact.value', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7986, + serialized_end=8028, +) + +_GENERICFIELDMATCH_TERNARY = _descriptor.Descriptor( + name='Ternary', + full_name='p4.v1.GenericFieldMatch.Ternary', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.GenericFieldMatch.Ternary.value', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mask', full_name='p4.v1.GenericFieldMatch.Ternary.mask', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2301, + serialized_end=2339, +) + +_GENERICFIELDMATCH_LPM = _descriptor.Descriptor( + name='LPM', + full_name='p4.v1.GenericFieldMatch.LPM', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.GenericFieldMatch.LPM.value', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='prefix_len', full_name='p4.v1.GenericFieldMatch.LPM.prefix_len', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2341, + serialized_end=2381, +) + +_GENERICFIELDMATCH_RANGE = _descriptor.Descriptor( + name='Range', + full_name='p4.v1.GenericFieldMatch.Range', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='low', full_name='p4.v1.GenericFieldMatch.Range.low', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='high', full_name='p4.v1.GenericFieldMatch.Range.high', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2383, + serialized_end=2417, +) + +_GENERICFIELDMATCH_OPTIONAL = _descriptor.Descriptor( + name='Optional', + full_name='p4.v1.GenericFieldMatch.Optional', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.GenericFieldMatch.Optional.value', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8148, + serialized_end=8193, +) + +_GENERICFIELDMATCH = _descriptor.Descriptor( + name='GenericFieldMatch', + full_name='p4.v1.GenericFieldMatch', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='field_id', full_name='p4.v1.GenericFieldMatch.field_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='exact', full_name='p4.v1.GenericFieldMatch.exact', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='ternary', full_name='p4.v1.GenericFieldMatch.ternary', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='lpm', full_name='p4.v1.GenericFieldMatch.lpm', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='range', full_name='p4.v1.GenericFieldMatch.range', index=4, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='optional', full_name='p4.v1.GenericFieldMatch.optional', index=5, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='other', full_name='p4.v1.GenericFieldMatch.other', index=6, + number=100, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_GENERICFIELDMATCH_EXACT, _GENERICFIELDMATCH_TERNARY, _GENERICFIELDMATCH_LPM, _GENERICFIELDMATCH_RANGE, _GENERICFIELDMATCH_OPTIONAL, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='field_match_type', full_name='p4.v1.GenericFieldMatch.field_match_type', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=7657, + serialized_end=8213, +) + + +_GENERICTABLEENTRY = _descriptor.Descriptor( + name='GenericTableEntry', + full_name='p4.v1.GenericTableEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='table_id', full_name='p4.v1.GenericTableEntry.table_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='match', full_name='p4.v1.GenericTableEntry.match', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='table_data_union', full_name='p4.v1.GenericTableEntry.table_data_union', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='priority', full_name='p4.v1.GenericTableEntry.priority', index=3, + number=4, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='is_default_entry', full_name='p4.v1.GenericTableEntry.is_default_entry', index=4, + number=5, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='metadata', full_name='p4.v1.GenericTableEntry.metadata', index=5, + number=6, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8216, + serialized_end=8405, +) + + +_TABLEDATAUNION_PARAM = _descriptor.Descriptor( + name='Param', + full_name='p4.v1.TableDataUnion.Param', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='param_id', full_name='p4.v1.TableDataUnion.Param.param_id', index=0, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.TableDataUnion.Param.value', index=1, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8489, + serialized_end=8549, +) + +_TABLEDATAUNION = _descriptor.Descriptor( + name='TableDataUnion', + full_name='p4.v1.TableDataUnion', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='union_id', full_name='p4.v1.TableDataUnion.union_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='params', full_name='p4.v1.TableDataUnion.params', index=1, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_TABLEDATAUNION_PARAM, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8408, + serialized_end=8549, ) _WRITEREQUEST.fields_by_name['election_id'].message_type = _UINT128 @@ -3181,6 +3594,7 @@ _ENTITY.fields_by_name['value_set_entry'].message_type = _VALUESETENTRY _ENTITY.fields_by_name['register_entry'].message_type = _REGISTERENTRY _ENTITY.fields_by_name['digest_entry'].message_type = _DIGESTENTRY +_ENTITY.fields_by_name['generic_table_entry'].message_type = _GENERICTABLEENTRY _ENTITY.oneofs_by_name['entity'].fields.append( _ENTITY.fields_by_name['extern_entry']) _ENTITY.fields_by_name['extern_entry'].containing_oneof = _ENTITY.oneofs_by_name['entity'] @@ -3217,6 +3631,9 @@ _ENTITY.oneofs_by_name['entity'].fields.append( _ENTITY.fields_by_name['digest_entry']) _ENTITY.fields_by_name['digest_entry'].containing_oneof = _ENTITY.oneofs_by_name['entity'] +_ENTITY.oneofs_by_name['entity'].fields.append( + _ENTITY.fields_by_name['generic_table_entry']) +_ENTITY.fields_by_name['generic_table_entry'].containing_oneof = _ENTITY.oneofs_by_name['entity'] _EXTERNENTRY.fields_by_name['entry'].message_type = google_dot_protobuf_dot_any__pb2._ANY _TABLEENTRY_IDLETIMEOUT.containing_type = _TABLEENTRY _TABLEENTRY.fields_by_name['match'].message_type = _FIELDMATCH @@ -3225,6 +3642,7 @@ _TABLEENTRY.fields_by_name['counter_data'].message_type = _COUNTERDATA _TABLEENTRY.fields_by_name['meter_counter_data'].message_type = _METERCOUNTERDATA _TABLEENTRY.fields_by_name['time_since_last_hit'].message_type = _TABLEENTRY_IDLETIMEOUT +_TABLEENTRY.fields_by_name['resources'].message_type = _GENERICTABLEENTRY _FIELDMATCH_EXACT.containing_type = _FIELDMATCH _FIELDMATCH_TERNARY.containing_type = _FIELDMATCH _FIELDMATCH_LPM.containing_type = _FIELDMATCH @@ -3396,6 +3814,42 @@ _GETFORWARDINGPIPELINECONFIGREQUEST_RESPONSETYPE.containing_type = _GETFORWARDINGPIPELINECONFIGREQUEST _GETFORWARDINGPIPELINECONFIGRESPONSE.fields_by_name['config'].message_type = _FORWARDINGPIPELINECONFIG _ERROR.fields_by_name['details'].message_type = google_dot_protobuf_dot_any__pb2._ANY +_GENERICFIELDMATCH_EXACT.fields_by_name['value'].message_type = p4_dot_v1_dot_p4data__pb2._GENERICDATA +_GENERICFIELDMATCH_EXACT.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH_TERNARY.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH_LPM.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH_RANGE.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH_OPTIONAL.fields_by_name['value'].message_type = p4_dot_v1_dot_p4data__pb2._GENERICDATA +_GENERICFIELDMATCH_OPTIONAL.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH.fields_by_name['exact'].message_type = _GENERICFIELDMATCH_EXACT +_GENERICFIELDMATCH.fields_by_name['ternary'].message_type = _GENERICFIELDMATCH_TERNARY +_GENERICFIELDMATCH.fields_by_name['lpm'].message_type = _GENERICFIELDMATCH_LPM +_GENERICFIELDMATCH.fields_by_name['range'].message_type = _GENERICFIELDMATCH_RANGE +_GENERICFIELDMATCH.fields_by_name['optional'].message_type = _GENERICFIELDMATCH_OPTIONAL +_GENERICFIELDMATCH.fields_by_name['other'].message_type = google_dot_protobuf_dot_any__pb2._ANY +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['exact']) +_GENERICFIELDMATCH.fields_by_name['exact'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['ternary']) +_GENERICFIELDMATCH.fields_by_name['ternary'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['lpm']) +_GENERICFIELDMATCH.fields_by_name['lpm'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['range']) +_GENERICFIELDMATCH.fields_by_name['range'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['optional']) +_GENERICFIELDMATCH.fields_by_name['optional'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['other']) +_GENERICFIELDMATCH.fields_by_name['other'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICTABLEENTRY.fields_by_name['match'].message_type = _GENERICFIELDMATCH +_GENERICTABLEENTRY.fields_by_name['table_data_union'].message_type = _TABLEDATAUNION +_TABLEDATAUNION_PARAM.fields_by_name['value'].message_type = p4_dot_v1_dot_p4data__pb2._GENERICDATA +_TABLEDATAUNION_PARAM.containing_type = _TABLEDATAUNION +_TABLEDATAUNION.fields_by_name['params'].message_type = _TABLEDATAUNION_PARAM DESCRIPTOR.message_types_by_name['WriteRequest'] = _WRITEREQUEST DESCRIPTOR.message_types_by_name['WriteResponse'] = _WRITERESPONSE DESCRIPTOR.message_types_by_name['ReadRequest'] = _READREQUEST @@ -3450,6 +3904,9 @@ DESCRIPTOR.message_types_by_name['Error'] = _ERROR DESCRIPTOR.message_types_by_name['CapabilitiesRequest'] = _CAPABILITIESREQUEST DESCRIPTOR.message_types_by_name['CapabilitiesResponse'] = _CAPABILITIESRESPONSE +DESCRIPTOR.message_types_by_name['GenericFieldMatch'] = _GENERICFIELDMATCH +DESCRIPTOR.message_types_by_name['GenericTableEntry'] = _GENERICTABLEENTRY +DESCRIPTOR.message_types_by_name['TableDataUnion'] = _TABLEDATAUNION DESCRIPTOR.enum_types_by_name['SdnPort'] = _SDNPORT _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -3911,6 +4368,75 @@ }) _sym_db.RegisterMessage(CapabilitiesResponse) +GenericFieldMatch = _reflection.GeneratedProtocolMessageType('GenericFieldMatch', (_message.Message,), { + + 'Exact' : _reflection.GeneratedProtocolMessageType('Exact', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_EXACT, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.Exact) + }) + , + + 'Ternary' : _reflection.GeneratedProtocolMessageType('Ternary', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_TERNARY, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.Ternary) + }) + , + + 'LPM' : _reflection.GeneratedProtocolMessageType('LPM', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_LPM, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.LPM) + }) + , + + 'Range' : _reflection.GeneratedProtocolMessageType('Range', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_RANGE, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.Range) + }) + , + + 'Optional' : _reflection.GeneratedProtocolMessageType('Optional', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_OPTIONAL, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.Optional) + }) + , + 'DESCRIPTOR' : _GENERICFIELDMATCH, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch) + }) +_sym_db.RegisterMessage(GenericFieldMatch) +_sym_db.RegisterMessage(GenericFieldMatch.Exact) +_sym_db.RegisterMessage(GenericFieldMatch.Ternary) +_sym_db.RegisterMessage(GenericFieldMatch.LPM) +_sym_db.RegisterMessage(GenericFieldMatch.Range) +_sym_db.RegisterMessage(GenericFieldMatch.Optional) + +GenericTableEntry = _reflection.GeneratedProtocolMessageType('GenericTableEntry', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTABLEENTRY, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericTableEntry) + }) +_sym_db.RegisterMessage(GenericTableEntry) + +TableDataUnion = _reflection.GeneratedProtocolMessageType('TableDataUnion', (_message.Message,), { + + 'Param' : _reflection.GeneratedProtocolMessageType('Param', (_message.Message,), { + 'DESCRIPTOR' : _TABLEDATAUNION_PARAM, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.TableDataUnion.Param) + }) + , + 'DESCRIPTOR' : _TABLEDATAUNION, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.TableDataUnion) + }) +_sym_db.RegisterMessage(TableDataUnion) +_sym_db.RegisterMessage(TableDataUnion.Param) + DESCRIPTOR._options = None _WRITEREQUEST.fields_by_name['role_id']._options = None @@ -3928,8 +4454,8 @@ index=0, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=7696, - serialized_end=8211, + serialized_start=8693, + serialized_end=9208, methods=[ _descriptor.MethodDescriptor( name='Write', From 29aab4e5a0ba20db18773066b07193309ef6b395 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 11 Aug 2023 07:57:38 -0700 Subject: [PATCH 26/42] Adding text regarding direct resources as GenericTables in TableEntry --- docs/v1/P4Runtime-Spec.mdk | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 5c49a55d..b9b0fe0d 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -3018,6 +3018,14 @@ the `TableEntry` entity, which has the following fields: implement idle-timeout support for the table, if applicable. See [Idle-timeout](#sec-idle-timeout) section for more information. +* `resources`, a `repeated GenericTableEntry` to contain a list of + target-specific direct resources. For example, if a target supports special + direct resources like x-meter and y-counter, then the p4info will contain + GenericTable representations of the same and the list here can contain one + member for each of the direct resources. If the generic match fields are set + in these entries, it is an error. The IDs will be mentioned in the + `direct_resource_ids` in the p4info. + The `priority` field must be set to a non-zero value if the match key includes a ternary match (&ie; in the case of PSA if the P4Info entry for the table indicates that one or more of its match fields has an `OPTIONAL`, `TERNARY` or From 185fa0858a19f006ee2cb9f40535d92ddbb1c6fb Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Sat, 19 Aug 2023 07:17:01 -0700 Subject: [PATCH 27/42] some review comment changes --- docs/v1/P4Runtime-Spec.mdk | 86 +++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index b9b0fe0d..02f062cd 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -2008,7 +2008,7 @@ The `Digest` message defines the following fields: of Arbitrary P4 Types](#sec-representation-of-arbitrary-p4-types)). ### `GenericTable` { #sec-p4info-generic-table} -See section [GenericTable p4info](#sec-p4info-generic-table) for more info +See section [GenericTable P4info](#sec-p4info-generic-table) for more info ### `Extern` { #sec-p4info-extern} @@ -3020,11 +3020,11 @@ the `TableEntry` entity, which has the following fields: * `resources`, a `repeated GenericTableEntry` to contain a list of target-specific direct resources. For example, if a target supports special - direct resources like x-meter and y-counter, then the p4info will contain + direct resources like x-meter and y-counter, then the P4info will contain GenericTable representations of the same and the list here can contain one member for each of the direct resources. If the generic match fields are set - in these entries, it is an error. The IDs will be mentioned in the - `direct_resource_ids` in the p4info. + in these entries, it returns an `INVALID_ARGUMENT` errot. The IDs will be + mentioned in the `direct_resource_ids` in the P4info. The `priority` field must be set to a non-zero value if the match key includes a ternary match (&ie; in the case of PSA if the P4Info entry for the table @@ -4819,7 +4819,7 @@ Architectures](#sec-extending-p4runtime) for more information. ## `GenericTableEntry` See section [GenericTableEntry p4runtime](#sec-generic-table-entry) for more -info +info. # Error Reporting Messages { #sec-error-reporting-messages} @@ -6326,13 +6326,13 @@ properties, but we may include on in future versions of the API. # GenericTable { #sec-generic-table} -## GenericTable p4info { #sec-p4info-generic-table} +## GenericTable P4info { #sec-p4info-generic-table} -`GenericTable` messages are used to map non-PSA P4-externs or non-P4 target- +`GenericTable` messages are used to map non-PSA P4 externs or target- specific "fixed" features to their implementation in a generic way. The same can -be achieved via `Extern`, but GenericTable provides a structured way in which +be achieved via `Extern`, but `GenericTable` provides a structured way in which every feature is represented as a set of match-fields and data-fields. The data -consists of unions which are similar to actions. One use of GenericTable in a +consists of unions which are similar to actions. One use of `GenericTable` in a server backend is with TDI [Table Driven Interface](https://github.com/p4lang/tdi), but targets can use Generic table to map to their own specific feature implementations as well. It defines the @@ -6341,15 +6341,16 @@ following fields * `generic_table_type_id`, an 8-bit unsigned integer which uniquely identifies the generic_table_type in the context of the architecture. This value is in the range of `[0x00, 0xff]`. - The ID in the preamble is created as `0x18 + generic_table_type_id + 16 bits - of generated ID by compiler`. The `generic_table_type` depicts a new table - "type" which would have similar properties. The organization of the table - type space is left up to the target. Some optional guidelines + The ID in the preamble is created as `(0x18 << 24) + (generic_table_type_id + << 16) + (16-bit ID generated by the P4 compiler)`. The `generic_table_type` + depicts a new table "type" which would have similar properties. The + organization of the table type space is left up to the target. + Some optional guidelines: * For P4 externs, any new extern to have a new table type. - * For non-P4 externs, options are - * All non-P4 tables grouped under one giant non_p4 table type + * For target-specific fixed function blocks, options are + * All fixed tables grouped under one giant non_p4 table type * Tables divided on the basis of categories. Categories are defined in the - spec but aren't part of the p4info. + spec but aren't part of the P4info. * Every table has its own table-type. This can however lead to running out of the 8 bit type ID space soon. Note that this value does not need @@ -6360,36 +6361,35 @@ following fields * `generic_table_type_name`, which specifies the fully-qualified P4 name of the generic_table in case of P4 entities. In cases of non-P4 entities, it is a name which uniquely identifies this entity in the entire space including P4 - objects + objects. * `repeated string generic_table_properties`, please check generic-table properties under section [GenericTable categories] - (#sec-generic-table-categories) for more details + (#sec-generic-table-categories) for more details. * `repeated GenericTableInstance`, contains the info for one instance of a generic-table-type. All tables of one type are grouped under this. GenericTableInstance * `preamble`, a `Preamble` message with the ID, name, and alias of this - GenericTable. + `GenericTable`. * `generic_match_fields`, a repeated field of type `GenericMatchField` representing the data to be used to construct the lookup key matched in this table. For information check the generic_match_fields info in the [Generic - Table section](#sec-generic-table-entry) + Table section](#sec-generic-table-entry). * `union_refs`, a repeated `UnionRef` field representing the set of possible - unions for this table. Functionally, it behaves same as that of ActionRefs. - Hence it has been kept as ActionRefs itself. + union members for this table. Functionally, it behaves same as that of + `ActionRefs`. Please check the union_refs info in the [Generic Table section] - (#sec-generic-table-entry) + (#sec-generic-table-entry). * `const_default_union_id`, if this table has a constant default union, this field will carry the `uint32` identifier of that action, otherwise its value - will be 0. A default union is the data when the key is null. It is similar to - a default action for Match Tables. Being constant means that the control - plane cannot set a different default union at runtime or change the default - union's arguments. + will be 0.It is similar to a default action for Match Tables. Being constant + means that the control plane cannot set a different default union at runtime + or change the default union's fields. * `size`, an `int64` describing the desired number of table entries that the target should support for the table. See the "Size" subsection within the @@ -6402,36 +6402,36 @@ GenericTableInstance ## `GenericData` { #sec-p4data-generic-data} -`GenericData` is an addition to p4data.proto- which aims at adding support for -data types which aren't covered by P4Data. This incorporates all the data types +`GenericData` is an addition to p4data.proto- which adds support for +data types which are not covered by P4Data. This incorporates all the data types used as primitive data types like bytes, float, strings. It contains p4type as well. P4type is to be used for any data type present in P4. If there is a conflict, like bool, then the P4 data type should be used. - * bitstring : Bytes type used for simple unsigned integers or bytes + * bitstring : Bytes type used for simple unsigned integers or bytes. * float : Floating type values. Target might return a lower-precision ceiled value even if field is non-volatile. Target might choose to show a field as volatile if it allows user to insert a certain value but does its own modifications to the value when writing to hardware. - * bool : Boolean type values + * bool : Boolean type values. * generic_struct : Used to define a structure that can contain - one or more of the other members as named. One structure can contain + one or more of the other members as named fields. One structure can contain different members of different types in GenericData. - * generic_list : Used to define a list of same types. Only allows for a - collection of the same type. It can also be a list of generic_structs. + * generic_list : Used to define a list of values with the same type. It can + also be a list of generic_structs or generic_list. Members are ordered and duplicates are allowed. * generic_unordered_set : Used to define a set of same types. It can also be a set of generic_structs. Members are unordered and duplicates are not allowed. * string : Used to define control plane strings. The max string length is - defined by the size - * enum : String representation with which safe enums are realized - * enum_val : bytes value with which unsafe/serializable enums are defined + defined by the size. + * enum : String representation with which safe enums are realized. + * enum_val : bytes value with which unsafe/serializable enums are defined. * p4_type : This is the same type as P4DataTypeSpec. This helps in achieving - parity with P4 types if the GenericTable is being generated from a P4 + parity with P4 types if the `GenericTable` is being generated from a P4 extern. There are a few overlaps like bool, enums, new_type, bitstring. If the entity is from a P4 extern and a P4 data type exists, then the - p4_type is used. Otherwise, the GenericDataType is used + p4_type is used. Otherwise, the GenericDataType is used. ## `GenericTableEntry` { #sec-generic-table-entry} @@ -6443,13 +6443,13 @@ Interface](https://github.com/p4lang/tdi), that every state can be representated as a table or multiple tables. A table here is any data structure with one or more entries and each entry can be represented as a set of key fields and data fields. Actions in P4 tables behave like unions and that has been borrowed here -in GenericTable. This can be potentially used targets to map to either TDI +in `GenericTable`. This can be potentially used targets to map to either TDI based targets, or even non-TDI based targets. If using TDI, then potentially, for every new feature to be added, only TDI target support and remote client code will be required to make use of that function. All other middle layers should theoretically remain unchanged. -P4Runtime supports inserting, modifying, deleting and reading GenericTable +P4Runtime supports inserting, modifying, deleting and reading `GenericTable` entries with the `GenericTableEntry` entity, which has the following fields: * `table_id`, which identifies the table instance; the `table_id` is determined @@ -6457,7 +6457,7 @@ entries with the `GenericTableEntry` entity, which has the following fields: * `match`, a repeated field of `GenericFieldMatch` messages. Each element in the repeated field is used to provide a value for the corresponding element in the - p4info. + P4info. * `union`, which indicates which of the table's unions to execute in case of match and with which argument values. @@ -6679,7 +6679,7 @@ where they are indexed but ports aren't. ### Entry properties -These properties do not go as part of p4info since these are entry-specific and +These properties do not go as part of P4info since these are entry-specific and not table specific. They go in as part of the entries fiel generated by the compiler. From 090aa0aa15975f66af7aa6318b6c4a69f1c287d3 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 25 Aug 2023 07:54:03 -0700 Subject: [PATCH 28/42] Andy review comments --- docs/v1/P4Runtime-Spec.mdk | 43 ++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 02f062cd..39a12b45 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6326,25 +6326,40 @@ properties, but we may include on in future versions of the API. # GenericTable { #sec-generic-table} -## GenericTable P4info { #sec-p4info-generic-table} - -`GenericTable` messages are used to map non-PSA P4 externs or target- -specific "fixed" features to their implementation in a generic way. The same can +`GenericTable` is used to map non-PSA P4 externs or target-specific "fixed" +features to their implementation in a generic way. The same can be achieved via `Extern`, but `GenericTable` provides a structured way in which every feature is represented as a set of match-fields and data-fields. The data consists of unions which are similar to actions. One use of `GenericTable` in a server backend is with TDI [Table Driven Interface](https://github.com/p4lang/tdi), but targets can use Generic table to -map to their own specific feature implementations as well. It defines the -following fields +map to their own specific feature implementations as well. -* `generic_table_type_id`, an 8-bit unsigned integer which uniquely identifies +## Generic Table ID Space { #sec-generic-table-id-space } + A field in the `GenericTable` message in the P4info defines a + `generic_table_type_id`. + + It is an 8-bit unsigned integer which uniquely identifies the generic_table_type in the context of the architecture. This value is in the range of `[0x00, 0xff]`. The ID in the preamble is created as `(0x18 << 24) + (generic_table_type_id << 16) + (16-bit ID generated by the P4 compiler)`. The `generic_table_type` - depicts a new table "type" which would have similar properties. The - organization of the table type space is left up to the target. + depicts a new table "type" which would have similar properties. + + Let's say we have 2 target specific P4 externs called `XyzCounter` and + `XyzMeter` and each of them has 2 instances. `XyzCounter` has + `generic_table_type` as 1 and `XyzMeter` as 2. + + ```text + XyzCounter1 : 0x18 01 00 01 + XyzCounter2 : 0x18 01 00 02 + + XyzMeter1 : 0x18 02 00 01 + XyzMeter2 : 0x18 02 00 02 + ``` + The above system ensures that the instance space allows for 65355 + instances. The table type space is limited to 255. + Some optional guidelines: * For P4 externs, any new extern to have a new table type. * For target-specific fixed function blocks, options are @@ -6358,6 +6373,16 @@ following fields given time every device managed by a P4Runtime server maps to a single P4Info message and a single architecture. + +## GenericTable P4info { #sec-p4info-generic-table} + + +`GenericTable` message in P4info defines the following fields + +* `generic_table_type_id`, an 8-bit unsigned integer which uniquely identifies + the generic_table_type in the context of the architecture. More details + in the [Generic Table ID space](#sec-generic-table-id-space) section + * `generic_table_type_name`, which specifies the fully-qualified P4 name of the generic_table in case of P4 entities. In cases of non-P4 entities, it is a name which uniquely identifies this entity in the entire space including P4 From 48f04d9c663ba7ab7cd03bcc1de3cd41a649cbbd Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 25 Aug 2023 08:08:18 -0700 Subject: [PATCH 29/42] remove whitespace --- docs/v1/P4Runtime-Spec.mdk | 73 +++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 39a12b45..c6e10534 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6336,42 +6336,43 @@ Interface](https://github.com/p4lang/tdi), but targets can use Generic table to map to their own specific feature implementations as well. ## Generic Table ID Space { #sec-generic-table-id-space } - A field in the `GenericTable` message in the P4info defines a - `generic_table_type_id`. - - It is an 8-bit unsigned integer which uniquely identifies - the generic_table_type in the context of the architecture. - This value is in the range of `[0x00, 0xff]`. - The ID in the preamble is created as `(0x18 << 24) + (generic_table_type_id - << 16) + (16-bit ID generated by the P4 compiler)`. The `generic_table_type` - depicts a new table "type" which would have similar properties. - - Let's say we have 2 target specific P4 externs called `XyzCounter` and - `XyzMeter` and each of them has 2 instances. `XyzCounter` has - `generic_table_type` as 1 and `XyzMeter` as 2. - - ```text - XyzCounter1 : 0x18 01 00 01 - XyzCounter2 : 0x18 01 00 02 - - XyzMeter1 : 0x18 02 00 01 - XyzMeter2 : 0x18 02 00 02 - ``` - The above system ensures that the instance space allows for 65355 - instances. The table type space is limited to 255. - - Some optional guidelines: - * For P4 externs, any new extern to have a new table type. - * For target-specific fixed function blocks, options are - * All fixed tables grouped under one giant non_p4 table type - * Tables divided on the basis of categories. Categories are defined in the - spec but aren't part of the P4info. - * Every table has its own table-type. This can however lead to running out - of the 8 bit type ID space soon. - Note that this value does not need - to be unique across all architectures from all organizations, since at any - given time every device managed by a P4Runtime server maps to a single P4Info - message and a single architecture. + +A field in the `GenericTable` message in the P4info defines a +`generic_table_type_id`. + +It is an 8-bit unsigned integer which uniquely identifies +the generic_table_type in the context of the architecture. +This value is in the range of `[0x00, 0xff]`. +The ID in the preamble is created as `(0x18 << 24) + (generic_table_type_id +<< 16) + (16-bit ID generated by the P4 compiler)`. The `generic_table_type` +depicts a new table "type" which would have similar properties. + +Let's say we have 2 target specific P4 externs called `XyzCounter` and +`XyzMeter` and each of them has 2 instances. `XyzCounter` has +`generic_table_type` as 1 and `XyzMeter` as 2. + +```text +XyzCounter1 : 0x18 01 00 01 +XyzCounter2 : 0x18 01 00 02 + +XyzMeter1 : 0x18 02 00 01 +XyzMeter2 : 0x18 02 00 02 +``` +The above system ensures that the instance space allows for 65355 +instances. The table type space is limited to 255. + +Some optional guidelines: +* For P4 externs, any new extern to have a new table type. +* For target-specific fixed function blocks, options are + * All fixed tables grouped under one giant non_p4 table type + * Tables divided on the basis of categories. Categories are defined in the + spec but aren't part of the P4info. + * Every table has its own table-type. This can however lead to running out + of the 8 bit type ID space soon. +Note that this value does not need +to be unique across all architectures from all organizations, since at any +given time every device managed by a P4Runtime server maps to a single P4Info +message and a single architecture. ## GenericTable P4info { #sec-p4info-generic-table} From b101daba79e41b6e77c71ff1fd0718836f8ff9d4 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 6 Sep 2023 17:52:38 -0700 Subject: [PATCH 30/42] * Correcting GenericTable.md according to the p4info * Removing repeated file dfrom Param and Match top level --- proto/p4/GenericTable.md | 135 +++++++++++++++++-------------- proto/p4/config/v1/p4info.proto | 26 +++--- proto/p4/config/v1/p4types.proto | 17 ++-- 3 files changed, 94 insertions(+), 84 deletions(-) diff --git a/proto/p4/GenericTable.md b/proto/p4/GenericTable.md index 6513f040..a3c86257 100644 --- a/proto/p4/GenericTable.md +++ b/proto/p4/GenericTable.md @@ -9,39 +9,31 @@ generic_tables { generic_table_type_id : 145 generic_table_type_name : "MulticastGroup" generic_table_properties : { - read-only : False + "indexed" } - generic_table_properties : { - modify-only : False - } - generic_table_properties : { - reset-only : False - } - generic_table_properties : { - volatile : False - } - generic_table_properties : { - indexed : True - } - - preamble { - id: 45332650 - name: "MulticastGroup" - alias: "multicast_group" - } - generic_match_fields { - id: 1 - name: "multicast_group_id" - match_type: EXACT - type { - type : "bytes" - width : 32 + instances { + preamble { + id: 45332650 + name: "MulticastGroup" + alias: "multicast_group" } + generic_match_fields { + id: 1 + name: "multicast_group_id" + match_type: EXACT + type_spec { + bitstring { + bit { + bitwidth : 32 + } + } + } + } + union_refs { + id: 23557840 + } + size: 1024 } - union_refs { - id: 23557840 - } - size: 1024 } ``` @@ -50,8 +42,8 @@ repeated fields. So the check on `len(instance_array) == len(port_array)` needs to be a runtime check. This however keeps implementation simpler and faster since we avoid further recursive nesting. -`port` is a varbytes of max size 64 bits each. The field has a `repeated_type` -as well, so it is defined as list of varbits through p4info. +`port` is a varbytes of max size 64 bits each. The field is a list so +it is defined as list of varbits through p4info. ``` unions { @@ -63,21 +55,33 @@ unions { params { id: 1 name: "instance" - type { - container_type : "list" - container_max_size : 10 - type : "bytes" - width : 32 + type_spec { + list { + element_type_spec { + bitstring { + bit { + bitwidth : 32 + } + } + } + max_size : 10 + } } } params { id: 2 name: "port" - type { - container_type : "list" - container_max_size : 10 - type : "varbytes" - max_bit_width : 64 + type_spec { + list { + type_spec { + bitstring { + varbit { + max_bitwidth : 64 + } + } + } + max_size : 10 + } } } } @@ -97,26 +101,35 @@ unions { params { id: 1 name: "replica" - type { - container_type : "list" - type : "struct" - } - params { - param { - id: 1 - name: "instance" - type { - type : "bytes" - width : 32 - } - } - param : { - id: 2 - name: "port" - type { - type : "varbytes" - max_bit_width : 64 + type_spec { + list { + element_type_spec { + struct { + members { + id : 1 + name : "instance" + type_spec { + bitstring { + bit { + bitwidth : 32 + } + } + } + } + members { + id : 2 + name : "port" + type_spec { + bitstring { + varbit { + max_bitwidth : 64 + } + } + } + } + } } + max_size : 10 } } } diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index 23e59d7c..76d5c86e 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -422,8 +422,7 @@ message Digest { message GenericMatchField { uint32 id = 1; string name = 2; - bool repeated = 3; - GenericDataTypeSpec type_spec = 4; + GenericDataTypeSpec type_spec = 3; enum MatchType { UNSPECIFIED = 0; EXACT = 2; @@ -433,18 +432,18 @@ message GenericMatchField { OPTIONAL = 6; } oneof match { - MatchType match_type = 5; + MatchType match_type = 4; // used for architecture-specific match types which are not part of the core // P4 language or of the PSA architecture. - string other_match_type = 6; + string other_match_type = 5; } // Documentation of the match field - Documentation doc = 7; - repeated string annotations = 8; + Documentation doc = 6; + repeated string annotations = 7; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - repeated StructuredAnnotation structured_annotations = 9; - repeated SourceLocation annotation_locations = 10; + repeated StructuredAnnotation structured_annotations = 8; + repeated SourceLocation annotation_locations = 9; } // used to list all possible unions in a Table @@ -468,15 +467,14 @@ message Union { message Param { uint32 id = 1; string name = 2; - bool repeated = 3; - repeated string annotations = 4; - GenericDataTypeSpec type_spec = 5; + repeated string annotations = 3; + GenericDataTypeSpec type_spec = 4; // Documentation of the Param - Documentation doc = 6; - repeated StructuredAnnotation structured_annotations = 7; + Documentation doc = 5; + repeated StructuredAnnotation structured_annotations = 6; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - repeated SourceLocation annotation_locations = 8; + repeated SourceLocation annotation_locations = 7; } repeated Param params = 2; } diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index 41bc65f0..5c40ae96 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -313,7 +313,7 @@ message GenericDataTypeSpec { oneof type_spec { GenericBitstringLikeTypeSpec bitstring = 1; GenericFloatType float = 2; - GenericBoolType bool = 3; + GenericBoolType bool = 3; GenericNamedType struct = 4; GenericNamedType list = 5; GenericNamedType unordered_set = 6; @@ -369,8 +369,9 @@ message GenericVarbitTypeSpec { } message GenericStructTypeSpec { message Member { - string name = 1; - GenericDataTypeSpec type_spec = 2; + uint32 id = 1; + string name = 2; + GenericDataTypeSpec type_spec = 3; } repeated Member members = 1; repeated string annotations = 2; @@ -380,12 +381,11 @@ message GenericStructTypeSpec { repeated StructuredAnnotation structured_annotations = 6; } -// If a field is of type list, then container_type is in p4info -// and value == "list" +// If a field is of type list // ordered and duplicates allowed. // If max_size and min_size are equal, then fixed size. message GenericListTypeSpec { - GenericDataTypeSpec type_spec = 1;// The element_type + GenericDataTypeSpec element_type_spec = 1;// The element_type repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. @@ -394,11 +394,10 @@ message GenericListTypeSpec { repeated SourceLocation annotation_locations = 6; repeated StructuredAnnotation structured_annotations = 7; } -// If a field is of type "unordered_set", then container_type is in p4info -// value == "unordered_set" +// If a field is of type "unordered_set" // Unordered and duplicates not allowed message GenericUnorderedSetTypeSpec { - GenericDataTypeSpec type_spec = 1;// The element_type + GenericDataTypeSpec element_type_spec = 1;// The element_type repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. From 4d4d9f7e63d2ca5199f9117e3b482f4243a0d3d4 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 6 Sep 2023 18:29:42 -0700 Subject: [PATCH 31/42] * Removing float from p4info and spec * Adding default value text to spec * Adding UnorderedSet to runtime --- docs/v1/P4Runtime-Spec.mdk | 28 +++++++++++++++++----------- proto/p4/config/v1/p4types.proto | 19 +++++++++---------- proto/p4/v1/p4data.proto | 11 +++++++---- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index c6e10534..ee915785 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6430,16 +6430,19 @@ GenericTableInstance `GenericData` is an addition to p4data.proto- which adds support for data types which are not covered by P4Data. This incorporates all the data types -used as primitive data types like bytes, float, strings. It contains p4type as +used as primitive data types like bytes, strings. It contains p4type as well. P4type is to be used for any data type present in P4. If there is a conflict, like bool, then the P4 data type should be used. - - * bitstring : Bytes type used for simple unsigned integers or bytes. - * float : Floating type values. Target might return a lower-precision - ceiled value even if field is non-volatile. Target might choose to show a - field as volatile if it allows user to insert a certain value but does its - own modifications to the value when writing to hardware. - * bool : Boolean type values. +Some of them have default values. These default values are only applicable +when in a Union field and not for Match fields. Match fields do not have +default values because if a match field is not present, then it is considered +to be a wildcard match. But if a union member is not present, then the default +value is used. + + * bitstring : Bytes type used for simple unsigned integers or bytes. Default + value applicable. If not present, it is 0. + * bool : Boolean type values. Default value applicable. If not present, it + is `false`. * generic_struct : Used to define a structure that can contain one or more of the other members as named fields. One structure can contain different members of different types in GenericData. @@ -6450,9 +6453,12 @@ conflict, like bool, then the P4 data type should be used. a set of generic_structs. Members are unordered and duplicates are not allowed. * string : Used to define control plane strings. The max string length is - defined by the size. - * enum : String representation with which safe enums are realized. + defined by the size. Default value applicable. If not present, it is empty + string: "". + * enum : String representation with which safe enums are realized. Default + value applicable. If not present, it is empty string: "". * enum_val : bytes value with which unsafe/serializable enums are defined. + Default value applicable. If not present, it is 0. * p4_type : This is the same type as P4DataTypeSpec. This helps in achieving parity with P4 types if the `GenericTable` is being generated from a P4 extern. There are a few overlaps like bool, enums, new_type, bitstring. @@ -6476,7 +6482,7 @@ code will be required to make use of that function. All other middle layers should theoretically remain unchanged. P4Runtime supports inserting, modifying, deleting and reading `GenericTable` -entries with the `GenericTableEntry` entity, which has the following fields: +entries with the `GenericTa bleEntry` entity, which has the following fields: * `table_id`, which identifies the table instance; the `table_id` is determined by the P4Info message. diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index 5c40ae96..e5ff7c30 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -312,20 +312,19 @@ message GenericTypeInfo { message GenericDataTypeSpec { oneof type_spec { GenericBitstringLikeTypeSpec bitstring = 1; - GenericFloatType float = 2; - GenericBoolType bool = 3; - GenericNamedType struct = 4; - GenericNamedType list = 5; - GenericNamedType unordered_set = 6; - GenericNamedType string = 7; - GenericNamedType enum = 8; - GenericNamedType serializable_enum = 9; - GenericNamedType new_type = 10; + GenericBoolType bool = 2; + GenericNamedType struct = 3; + GenericNamedType list = 4; + GenericNamedType unordered_set = 5; + GenericNamedType string = 6; + GenericNamedType enum = 7; + GenericNamedType serializable_enum = 8; + GenericNamedType new_type = 9; // P4 data type spec can help achieve parity with types being used // in P4 externs. For example, if Register is using a type in P4 // Data type spec, then it will make it easier to map here when using // GenericTables - P4DataTypeSpec p4_type = 11; + P4DataTypeSpec p4_type = 10; } } diff --git a/proto/p4/v1/p4data.proto b/proto/p4/v1/p4data.proto index b37de199..05b51ebc 100644 --- a/proto/p4/v1/p4data.proto +++ b/proto/p4/v1/p4data.proto @@ -73,10 +73,10 @@ message GenericData { oneof data { bytes bitstring = 1; GenericVarbit varbitstring = 2; - float float = 3; - bool bool = 4; - GenericStructLike generic_struct = 5; // one struct - GenericList generic_list = 6; // list of bytes/floats/bool/structs/strings/enums/enum_values. + bool bool = 3; + GenericStructLike generic_struct = 4; // one struct + GenericList generic_list = 5; // list of bytes/bool/structs/strings/enums/enum_values. + GenericUnorderedSet generic_unordered_set = 6; // unordered_set of bytes/bool/structs/strings/enums/enum_values. string string = 7; // control plane arbitrary length string string enum = 8; // safe (non-serializable) enums only bytes enum_value = 9; // serializable enums only @@ -88,6 +88,9 @@ message GenericStructLike { message GenericList { repeated GenericData members = 1; } +message GenericUnorderedSet { + repeated GenericData members = 1; +} message GenericVarbit { bytes bitstring = 1; From 89f11d951914dfbf6efa11f6dab3f310a09a8abb Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 6 Sep 2023 18:40:48 -0700 Subject: [PATCH 32/42] * Adding section to P4DataTypeSpec to indicate adding to GenericDataTypeSpec for any new additions * Removing P4DataTypeSpec from GenericDataTypeSpec * Adding default value to bool in GenericData --- docs/v1/P4Runtime-Spec.mdk | 15 ++++++++------- proto/p4/config/v1/p4types.proto | 19 +++++++------------ 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index ee915785..644d5c59 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -2601,6 +2601,10 @@ is guaranteed to be the same as the order of the members in the corresponding P4~16~ declaration. The same goes for the order of members of an `enum` (serializable or not) or members of `error`. +If adding any new data type to `P4DataTypeSpec`, please consider adding a +counterpart to `GenericDataTypeSpec` for `GenericTable` as present in section +[GenericData](#sec-p4data-generic-data) + ### `P4Data` in p4runtime.proto { #sec-p4data-in-p4runtime-proto } P4Runtime uses the `P4Data` message to represent values of arbitrary types. The @@ -6377,8 +6381,10 @@ message and a single architecture. ## GenericTable P4info { #sec-p4info-generic-table} - -`GenericTable` message in P4info defines the following fields +`GenericTable` message in P4info defines a Generic Table. It contains several +instances in `GenericTableInstance` rather than duplicating it every time for a +new instance just like in `Extern`. +It defines the following fields * `generic_table_type_id`, an 8-bit unsigned integer which uniquely identifies the generic_table_type in the context of the architecture. More details @@ -6459,11 +6465,6 @@ value is used. value applicable. If not present, it is empty string: "". * enum_val : bytes value with which unsafe/serializable enums are defined. Default value applicable. If not present, it is 0. - * p4_type : This is the same type as P4DataTypeSpec. This helps in achieving - parity with P4 types if the `GenericTable` is being generated from a P4 - extern. There are a few overlaps like bool, enums, new_type, bitstring. - If the entity is from a P4 extern and a P4 data type exists, then the - p4_type is used. Otherwise, the GenericDataType is used. ## `GenericTableEntry` { #sec-generic-table-entry} diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index e5ff7c30..6a27cd45 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -303,9 +303,10 @@ message P4NewTypeSpec { message GenericTypeInfo { map structs = 1; map lists = 2; - map enums = 3; - map serializable_enums = 4; - map new_types = 5; + map unordered_sets = 3; + map enums = 4; + map serializable_enums = 5; + map new_types = 6; } // Describes Generic Data types. @@ -320,11 +321,6 @@ message GenericDataTypeSpec { GenericNamedType enum = 7; GenericNamedType serializable_enum = 8; GenericNamedType new_type = 9; - // P4 data type spec can help achieve parity with types being used - // in P4 externs. For example, if Register is using a type in P4 - // Data type spec, then it will make it easier to map here when using - // GenericTables - P4DataTypeSpec p4_type = 10; } } @@ -332,10 +328,9 @@ message GenericNamedType { string name = 1; } -// Empty message as no type information needed, just used as a placeholder in -// the oneof to identify boolean types. -message GenericBoolType { } -message GenericFloatType { } +message GenericBoolType { + int32 default_value = 1; +} message GenericBitstringLikeTypeSpec { oneof type_spec { From 371d1844ca4fe8d3953998920d3384c18a72c5c9 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 6 Sep 2023 18:43:30 -0700 Subject: [PATCH 33/42] Moving GenericTable.md to docs --- {proto/p4 => docs/v1}/GenericTable.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {proto/p4 => docs/v1}/GenericTable.md (100%) diff --git a/proto/p4/GenericTable.md b/docs/v1/GenericTable.md similarity index 100% rename from proto/p4/GenericTable.md rename to docs/v1/GenericTable.md From b4dfa73af7f1a1214a55040afc81a0597381b151 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 6 Sep 2023 18:46:50 -0700 Subject: [PATCH 34/42] Correcting spec for removal of p4_type in generic_type. Adding generated code --- docs/v1/P4Runtime-Spec.mdk | 4 +- go/p4/config/v1/p4info.pb.go | 295 ++++----- go/p4/config/v1/p4types.pb.go | 1082 +++++++++++++++----------------- go/p4/v1/p4data.pb.go | 222 ++++--- py/p4/config/v1/p4info_pb2.py | 86 ++- py/p4/config/v1/p4types_pb2.py | 262 ++++---- py/p4/v1/p4data_pb2.py | 80 ++- 7 files changed, 1035 insertions(+), 996 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 644d5c59..30946704 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6436,9 +6436,7 @@ GenericTableInstance `GenericData` is an addition to p4data.proto- which adds support for data types which are not covered by P4Data. This incorporates all the data types -used as primitive data types like bytes, strings. It contains p4type as -well. P4type is to be used for any data type present in P4. If there is a -conflict, like bool, then the P4 data type should be used. +used as primitive data types like bytes, strings. Some of them have default values. These default values are only applicable when in a Union field and not for Match fields. Match fields do not have default values because if a match field is not present, then it is considered diff --git a/go/p4/config/v1/p4info.pb.go b/go/p4/config/v1/p4info.pb.go index dc0c1223..3385905c 100644 --- a/go/p4/config/v1/p4info.pb.go +++ b/go/p4/config/v1/p4info.pb.go @@ -2413,20 +2413,19 @@ type GenericMatchField struct { Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Repeated bool `protobuf:"varint,3,opt,name=repeated,proto3" json:"repeated,omitempty"` - TypeSpec *GenericDataTypeSpec `protobuf:"bytes,4,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,3,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` // Types that are assignable to Match: // // *GenericMatchField_MatchType_ // *GenericMatchField_OtherMatchType Match isGenericMatchField_Match `protobuf_oneof:"match"` // Documentation of the match field - Doc *Documentation `protobuf:"bytes,7,opt,name=doc,proto3" json:"doc,omitempty"` - Annotations []string `protobuf:"bytes,8,rep,name=annotations,proto3" json:"annotations,omitempty"` + Doc *Documentation `protobuf:"bytes,6,opt,name=doc,proto3" json:"doc,omitempty"` + Annotations []string `protobuf:"bytes,7,rep,name=annotations,proto3" json:"annotations,omitempty"` // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,9,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` - AnnotationLocations []*SourceLocation `protobuf:"bytes,10,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,8,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` + AnnotationLocations []*SourceLocation `protobuf:"bytes,9,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` } func (x *GenericMatchField) Reset() { @@ -2475,13 +2474,6 @@ func (x *GenericMatchField) GetName() string { return "" } -func (x *GenericMatchField) GetRepeated() bool { - if x != nil { - return x.Repeated - } - return false -} - func (x *GenericMatchField) GetTypeSpec() *GenericDataTypeSpec { if x != nil { return x.TypeSpec @@ -2543,13 +2535,13 @@ type isGenericMatchField_Match interface { } type GenericMatchField_MatchType_ struct { - MatchType GenericMatchField_MatchType `protobuf:"varint,5,opt,name=match_type,json=matchType,proto3,enum=p4.config.v1.GenericMatchField_MatchType,oneof"` + MatchType GenericMatchField_MatchType `protobuf:"varint,4,opt,name=match_type,json=matchType,proto3,enum=p4.config.v1.GenericMatchField_MatchType,oneof"` } type GenericMatchField_OtherMatchType struct { // used for architecture-specific match types which are not part of the core // P4 language or of the PSA architecture. - OtherMatchType string `protobuf:"bytes,6,opt,name=other_match_type,json=otherMatchType,proto3,oneof"` + OtherMatchType string `protobuf:"bytes,5,opt,name=other_match_type,json=otherMatchType,proto3,oneof"` } func (*GenericMatchField_MatchType_) isGenericMatchField_Match() {} @@ -3161,15 +3153,14 @@ type Union_Param struct { Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Repeated bool `protobuf:"varint,3,opt,name=repeated,proto3" json:"repeated,omitempty"` - Annotations []string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty"` - TypeSpec *GenericDataTypeSpec `protobuf:"bytes,5,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` + Annotations []string `protobuf:"bytes,3,rep,name=annotations,proto3" json:"annotations,omitempty"` + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,4,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` // Documentation of the Param - Doc *Documentation `protobuf:"bytes,6,opt,name=doc,proto3" json:"doc,omitempty"` - StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,7,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` + Doc *Documentation `protobuf:"bytes,5,opt,name=doc,proto3" json:"doc,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,6,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - AnnotationLocations []*SourceLocation `protobuf:"bytes,8,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + AnnotationLocations []*SourceLocation `protobuf:"bytes,7,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` } func (x *Union_Param) Reset() { @@ -3218,13 +3209,6 @@ func (x *Union_Param) GetName() string { return "" } -func (x *Union_Param) GetRepeated() bool { - if x != nil { - return x.Repeated - } - return false -} - func (x *Union_Param) GetAnnotations() []string { if x != nil { return x.Annotations @@ -3693,140 +3677,137 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x65, 0x12, 0x39, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xe9, 0x04, 0x0a, + 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xcd, 0x04, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, - 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, - 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, - 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x56, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x41, 0x43, 0x54, 0x10, 0x02, - 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x45, 0x52, - 0x4e, 0x41, 0x52, 0x59, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, - 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x06, 0x42, - 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xde, 0x02, 0x0a, 0x08, 0x55, 0x6e, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x2e, 0x53, 0x63, 0x6f, - 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x40, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x70, 0x65, - 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, - 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x41, 0x42, 0x4c, 0x45, - 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x46, 0x41, 0x55, - 0x4c, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x22, 0xf5, 0x03, 0x0a, 0x05, 0x55, 0x6e, - 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x84, 0x03, 0x0a, 0x05, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, - 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, - 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0xf4, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xde, 0x02, 0x0a, 0x14, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, - 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x51, 0x0a, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x52, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x35, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x66, 0x52, 0x09, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, - 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x13, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, - 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, + 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x20, 0x0a, + 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x56, 0x0a, 0x09, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x41, + 0x43, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x10, 0x03, 0x12, 0x0b, 0x0a, + 0x07, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, + 0x4e, 0x47, 0x45, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, + 0x4c, 0x10, 0x06, 0x42, 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xde, 0x02, 0x0a, + 0x08, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x63, 0x6f, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, + 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x40, 0x0a, 0x05, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x4e, + 0x44, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, + 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x44, + 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x22, 0xd9, 0x03, + 0x0a, 0x05, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, + 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, + 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0xe8, + 0x02, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, + 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2d, + 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x59, 0x0a, + 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf4, 0x01, 0x0a, 0x0c, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, + 0x17, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x40, + 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x22, 0xde, 0x02, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, + 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x51, 0x0a, + 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x12, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x12, 0x35, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x52, 0x09, 0x75, 0x6e, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/go/p4/config/v1/p4types.pb.go b/go/p4/config/v1/p4types.pb.go index 37565e53..c87810c3 100644 --- a/go/p4/config/v1/p4types.pb.go +++ b/go/p4/config/v1/p4types.pb.go @@ -1961,9 +1961,10 @@ type GenericTypeInfo struct { Structs map[string]*GenericStructTypeSpec `protobuf:"bytes,1,rep,name=structs,proto3" json:"structs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Lists map[string]*GenericListTypeSpec `protobuf:"bytes,2,rep,name=lists,proto3" json:"lists,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Enums map[string]*GenericEnumTypeSpec `protobuf:"bytes,3,rep,name=enums,proto3" json:"enums,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - SerializableEnums map[string]*GenericSerializableEnumTypeSpec `protobuf:"bytes,4,rep,name=serializable_enums,json=serializableEnums,proto3" json:"serializable_enums,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - NewTypes map[string]*GenericNewTypeSpec `protobuf:"bytes,5,rep,name=new_types,json=newTypes,proto3" json:"new_types,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + UnorderedSets map[string]*GenericUnorderedSetTypeSpec `protobuf:"bytes,3,rep,name=unordered_sets,json=unorderedSets,proto3" json:"unordered_sets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Enums map[string]*GenericEnumTypeSpec `protobuf:"bytes,4,rep,name=enums,proto3" json:"enums,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SerializableEnums map[string]*GenericSerializableEnumTypeSpec `protobuf:"bytes,5,rep,name=serializable_enums,json=serializableEnums,proto3" json:"serializable_enums,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + NewTypes map[string]*GenericNewTypeSpec `protobuf:"bytes,6,rep,name=new_types,json=newTypes,proto3" json:"new_types,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *GenericTypeInfo) Reset() { @@ -2012,6 +2013,13 @@ func (x *GenericTypeInfo) GetLists() map[string]*GenericListTypeSpec { return nil } +func (x *GenericTypeInfo) GetUnorderedSets() map[string]*GenericUnorderedSetTypeSpec { + if x != nil { + return x.UnorderedSets + } + return nil +} + func (x *GenericTypeInfo) GetEnums() map[string]*GenericEnumTypeSpec { if x != nil { return x.Enums @@ -2042,7 +2050,6 @@ type GenericDataTypeSpec struct { // Types that are assignable to TypeSpec: // // *GenericDataTypeSpec_Bitstring - // *GenericDataTypeSpec_Float // *GenericDataTypeSpec_Bool // *GenericDataTypeSpec_Struct // *GenericDataTypeSpec_List @@ -2051,7 +2058,6 @@ type GenericDataTypeSpec struct { // *GenericDataTypeSpec_Enum // *GenericDataTypeSpec_SerializableEnum // *GenericDataTypeSpec_NewType - // *GenericDataTypeSpec_P4Type TypeSpec isGenericDataTypeSpec_TypeSpec `protobuf_oneof:"type_spec"` } @@ -2101,13 +2107,6 @@ func (x *GenericDataTypeSpec) GetBitstring() *GenericBitstringLikeTypeSpec { return nil } -func (x *GenericDataTypeSpec) GetFloat() *GenericFloatType { - if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_Float); ok { - return x.Float - } - return nil -} - func (x *GenericDataTypeSpec) GetBool() *GenericBoolType { if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_Bool); ok { return x.Bool @@ -2164,13 +2163,6 @@ func (x *GenericDataTypeSpec) GetNewType() *GenericNamedType { return nil } -func (x *GenericDataTypeSpec) GetP4Type() *P4DataTypeSpec { - if x, ok := x.GetTypeSpec().(*GenericDataTypeSpec_P4Type); ok { - return x.P4Type - } - return nil -} - type isGenericDataTypeSpec_TypeSpec interface { isGenericDataTypeSpec_TypeSpec() } @@ -2179,54 +2171,40 @@ type GenericDataTypeSpec_Bitstring struct { Bitstring *GenericBitstringLikeTypeSpec `protobuf:"bytes,1,opt,name=bitstring,proto3,oneof"` } -type GenericDataTypeSpec_Float struct { - Float *GenericFloatType `protobuf:"bytes,2,opt,name=float,proto3,oneof"` -} - type GenericDataTypeSpec_Bool struct { - Bool *GenericBoolType `protobuf:"bytes,3,opt,name=bool,proto3,oneof"` + Bool *GenericBoolType `protobuf:"bytes,2,opt,name=bool,proto3,oneof"` } type GenericDataTypeSpec_Struct struct { - Struct *GenericNamedType `protobuf:"bytes,4,opt,name=struct,proto3,oneof"` + Struct *GenericNamedType `protobuf:"bytes,3,opt,name=struct,proto3,oneof"` } type GenericDataTypeSpec_List struct { - List *GenericNamedType `protobuf:"bytes,5,opt,name=list,proto3,oneof"` + List *GenericNamedType `protobuf:"bytes,4,opt,name=list,proto3,oneof"` } type GenericDataTypeSpec_UnorderedSet struct { - UnorderedSet *GenericNamedType `protobuf:"bytes,6,opt,name=unordered_set,json=unorderedSet,proto3,oneof"` + UnorderedSet *GenericNamedType `protobuf:"bytes,5,opt,name=unordered_set,json=unorderedSet,proto3,oneof"` } type GenericDataTypeSpec_String_ struct { - String_ *GenericNamedType `protobuf:"bytes,7,opt,name=string,proto3,oneof"` + String_ *GenericNamedType `protobuf:"bytes,6,opt,name=string,proto3,oneof"` } type GenericDataTypeSpec_Enum struct { - Enum *GenericNamedType `protobuf:"bytes,8,opt,name=enum,proto3,oneof"` + Enum *GenericNamedType `protobuf:"bytes,7,opt,name=enum,proto3,oneof"` } type GenericDataTypeSpec_SerializableEnum struct { - SerializableEnum *GenericNamedType `protobuf:"bytes,9,opt,name=serializable_enum,json=serializableEnum,proto3,oneof"` + SerializableEnum *GenericNamedType `protobuf:"bytes,8,opt,name=serializable_enum,json=serializableEnum,proto3,oneof"` } type GenericDataTypeSpec_NewType struct { - NewType *GenericNamedType `protobuf:"bytes,10,opt,name=new_type,json=newType,proto3,oneof"` -} - -type GenericDataTypeSpec_P4Type struct { - // P4 data type spec can help achieve parity with types being used - // in P4 externs. For example, if Register is using a type in P4 - // Data type spec, then it will make it easier to map here when using - // GenericTables - P4Type *P4DataTypeSpec `protobuf:"bytes,11,opt,name=p4_type,json=p4Type,proto3,oneof"` + NewType *GenericNamedType `protobuf:"bytes,9,opt,name=new_type,json=newType,proto3,oneof"` } func (*GenericDataTypeSpec_Bitstring) isGenericDataTypeSpec_TypeSpec() {} -func (*GenericDataTypeSpec_Float) isGenericDataTypeSpec_TypeSpec() {} - func (*GenericDataTypeSpec_Bool) isGenericDataTypeSpec_TypeSpec() {} func (*GenericDataTypeSpec_Struct) isGenericDataTypeSpec_TypeSpec() {} @@ -2243,8 +2221,6 @@ func (*GenericDataTypeSpec_SerializableEnum) isGenericDataTypeSpec_TypeSpec() {} func (*GenericDataTypeSpec_NewType) isGenericDataTypeSpec_TypeSpec() {} -func (*GenericDataTypeSpec_P4Type) isGenericDataTypeSpec_TypeSpec() {} - type GenericNamedType struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2292,12 +2268,12 @@ func (x *GenericNamedType) GetName() string { return "" } -// Empty message as no type information needed, just used as a placeholder in -// the oneof to identify boolean types. type GenericBoolType struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + DefaultValue int32 `protobuf:"varint,1,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` } func (x *GenericBoolType) Reset() { @@ -2332,42 +2308,11 @@ func (*GenericBoolType) Descriptor() ([]byte, []int) { return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{29} } -type GenericFloatType struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *GenericFloatType) Reset() { - *x = GenericFloatType{} - if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GenericFloatType) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GenericFloatType) ProtoMessage() {} - -func (x *GenericFloatType) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *GenericBoolType) GetDefaultValue() int32 { + if x != nil { + return x.DefaultValue } - return mi.MessageOf(x) -} - -// Deprecated: Use GenericFloatType.ProtoReflect.Descriptor instead. -func (*GenericFloatType) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{30} + return 0 } type GenericBitstringLikeTypeSpec struct { @@ -2393,7 +2338,7 @@ type GenericBitstringLikeTypeSpec struct { func (x *GenericBitstringLikeTypeSpec) Reset() { *x = GenericBitstringLikeTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[31] + mi := &file_p4_config_v1_p4types_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2406,7 +2351,7 @@ func (x *GenericBitstringLikeTypeSpec) String() string { func (*GenericBitstringLikeTypeSpec) ProtoMessage() {} func (x *GenericBitstringLikeTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[31] + mi := &file_p4_config_v1_p4types_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2419,7 +2364,7 @@ func (x *GenericBitstringLikeTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericBitstringLikeTypeSpec.ProtoReflect.Descriptor instead. func (*GenericBitstringLikeTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{31} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{30} } func (m *GenericBitstringLikeTypeSpec) GetTypeSpec() isGenericBitstringLikeTypeSpec_TypeSpec { @@ -2505,7 +2450,7 @@ type GenericBitTypeSpec struct { func (x *GenericBitTypeSpec) Reset() { *x = GenericBitTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[32] + mi := &file_p4_config_v1_p4types_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2518,7 +2463,7 @@ func (x *GenericBitTypeSpec) String() string { func (*GenericBitTypeSpec) ProtoMessage() {} func (x *GenericBitTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[32] + mi := &file_p4_config_v1_p4types_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2531,7 +2476,7 @@ func (x *GenericBitTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericBitTypeSpec.ProtoReflect.Descriptor instead. func (*GenericBitTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{32} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{31} } func (x *GenericBitTypeSpec) GetBitwidth() int32 { @@ -2560,7 +2505,7 @@ type GenericIntTypeSpec struct { func (x *GenericIntTypeSpec) Reset() { *x = GenericIntTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[33] + mi := &file_p4_config_v1_p4types_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2573,7 +2518,7 @@ func (x *GenericIntTypeSpec) String() string { func (*GenericIntTypeSpec) ProtoMessage() {} func (x *GenericIntTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[33] + mi := &file_p4_config_v1_p4types_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2586,7 +2531,7 @@ func (x *GenericIntTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericIntTypeSpec.ProtoReflect.Descriptor instead. func (*GenericIntTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{33} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{32} } func (x *GenericIntTypeSpec) GetBitwidth() int32 { @@ -2615,7 +2560,7 @@ type GenericVarbitTypeSpec struct { func (x *GenericVarbitTypeSpec) Reset() { *x = GenericVarbitTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[34] + mi := &file_p4_config_v1_p4types_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2628,7 +2573,7 @@ func (x *GenericVarbitTypeSpec) String() string { func (*GenericVarbitTypeSpec) ProtoMessage() {} func (x *GenericVarbitTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[34] + mi := &file_p4_config_v1_p4types_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2641,7 +2586,7 @@ func (x *GenericVarbitTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericVarbitTypeSpec.ProtoReflect.Descriptor instead. func (*GenericVarbitTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{34} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{33} } func (x *GenericVarbitTypeSpec) GetMaxBitwidth() int32 { @@ -2674,7 +2619,7 @@ type GenericStructTypeSpec struct { func (x *GenericStructTypeSpec) Reset() { *x = GenericStructTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[35] + mi := &file_p4_config_v1_p4types_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2687,7 +2632,7 @@ func (x *GenericStructTypeSpec) String() string { func (*GenericStructTypeSpec) ProtoMessage() {} func (x *GenericStructTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[35] + mi := &file_p4_config_v1_p4types_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2700,7 +2645,7 @@ func (x *GenericStructTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericStructTypeSpec.ProtoReflect.Descriptor instead. func (*GenericStructTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{35} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{34} } func (x *GenericStructTypeSpec) GetMembers() []*GenericStructTypeSpec_Member { @@ -2731,8 +2676,7 @@ func (x *GenericStructTypeSpec) GetStructuredAnnotations() []*StructuredAnnotati return nil } -// If a field is of type list, then container_type is in p4info -// and value == "list" +// If a field is of type list // ordered and duplicates allowed. // If max_size and min_size are equal, then fixed size. type GenericListTypeSpec struct { @@ -2740,8 +2684,8 @@ type GenericListTypeSpec struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TypeSpec *GenericDataTypeSpec `protobuf:"bytes,1,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` // The element_type - Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` + ElementTypeSpec *GenericDataTypeSpec `protobuf:"bytes,1,opt,name=element_type_spec,json=elementTypeSpec,proto3" json:"element_type_spec,omitempty"` // The element_type + Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. MinSize int32 `protobuf:"varint,4,opt,name=min_size,json=minSize,proto3" json:"min_size,omitempty"` // 0 if not present @@ -2753,7 +2697,7 @@ type GenericListTypeSpec struct { func (x *GenericListTypeSpec) Reset() { *x = GenericListTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[36] + mi := &file_p4_config_v1_p4types_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2766,7 +2710,7 @@ func (x *GenericListTypeSpec) String() string { func (*GenericListTypeSpec) ProtoMessage() {} func (x *GenericListTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[36] + mi := &file_p4_config_v1_p4types_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2779,12 +2723,12 @@ func (x *GenericListTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericListTypeSpec.ProtoReflect.Descriptor instead. func (*GenericListTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{36} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{35} } -func (x *GenericListTypeSpec) GetTypeSpec() *GenericDataTypeSpec { +func (x *GenericListTypeSpec) GetElementTypeSpec() *GenericDataTypeSpec { if x != nil { - return x.TypeSpec + return x.ElementTypeSpec } return nil } @@ -2824,16 +2768,15 @@ func (x *GenericListTypeSpec) GetStructuredAnnotations() []*StructuredAnnotation return nil } -// If a field is of type "unordered_set", then container_type is in p4info -// value == "unordered_set" +// If a field is of type "unordered_set" // Unordered and duplicates not allowed type GenericUnorderedSetTypeSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TypeSpec *GenericDataTypeSpec `protobuf:"bytes,1,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` // The element_type - Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` + ElementTypeSpec *GenericDataTypeSpec `protobuf:"bytes,1,opt,name=element_type_spec,json=elementTypeSpec,proto3" json:"element_type_spec,omitempty"` // The element_type + Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. MinSize int32 `protobuf:"varint,4,opt,name=min_size,json=minSize,proto3" json:"min_size,omitempty"` // 0 if not present @@ -2845,7 +2788,7 @@ type GenericUnorderedSetTypeSpec struct { func (x *GenericUnorderedSetTypeSpec) Reset() { *x = GenericUnorderedSetTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[37] + mi := &file_p4_config_v1_p4types_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2858,7 +2801,7 @@ func (x *GenericUnorderedSetTypeSpec) String() string { func (*GenericUnorderedSetTypeSpec) ProtoMessage() {} func (x *GenericUnorderedSetTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[37] + mi := &file_p4_config_v1_p4types_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2871,12 +2814,12 @@ func (x *GenericUnorderedSetTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericUnorderedSetTypeSpec.ProtoReflect.Descriptor instead. func (*GenericUnorderedSetTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{37} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{36} } -func (x *GenericUnorderedSetTypeSpec) GetTypeSpec() *GenericDataTypeSpec { +func (x *GenericUnorderedSetTypeSpec) GetElementTypeSpec() *GenericDataTypeSpec { if x != nil { - return x.TypeSpec + return x.ElementTypeSpec } return nil } @@ -2934,7 +2877,7 @@ type GenericStringSpec struct { func (x *GenericStringSpec) Reset() { *x = GenericStringSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[38] + mi := &file_p4_config_v1_p4types_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2947,7 +2890,7 @@ func (x *GenericStringSpec) String() string { func (*GenericStringSpec) ProtoMessage() {} func (x *GenericStringSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[38] + mi := &file_p4_config_v1_p4types_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2960,7 +2903,7 @@ func (x *GenericStringSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericStringSpec.ProtoReflect.Descriptor instead. func (*GenericStringSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{38} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{37} } func (x *GenericStringSpec) GetName() string { @@ -3021,7 +2964,7 @@ type GenericEnumTypeSpec struct { func (x *GenericEnumTypeSpec) Reset() { *x = GenericEnumTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[39] + mi := &file_p4_config_v1_p4types_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3034,7 +2977,7 @@ func (x *GenericEnumTypeSpec) String() string { func (*GenericEnumTypeSpec) ProtoMessage() {} func (x *GenericEnumTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[39] + mi := &file_p4_config_v1_p4types_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3047,7 +2990,7 @@ func (x *GenericEnumTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericEnumTypeSpec.ProtoReflect.Descriptor instead. func (*GenericEnumTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{39} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{38} } func (x *GenericEnumTypeSpec) GetMembers() []*GenericEnumTypeSpec_Member { @@ -3095,7 +3038,7 @@ type GenericSerializableEnumTypeSpec struct { func (x *GenericSerializableEnumTypeSpec) Reset() { *x = GenericSerializableEnumTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[40] + mi := &file_p4_config_v1_p4types_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3108,7 +3051,7 @@ func (x *GenericSerializableEnumTypeSpec) String() string { func (*GenericSerializableEnumTypeSpec) ProtoMessage() {} func (x *GenericSerializableEnumTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[40] + mi := &file_p4_config_v1_p4types_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3121,7 +3064,7 @@ func (x *GenericSerializableEnumTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericSerializableEnumTypeSpec.ProtoReflect.Descriptor instead. func (*GenericSerializableEnumTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{40} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{39} } func (x *GenericSerializableEnumTypeSpec) GetUnderlyingType() *GenericBitTypeSpec { @@ -3183,7 +3126,7 @@ type GenericNewTypeTranslation struct { func (x *GenericNewTypeTranslation) Reset() { *x = GenericNewTypeTranslation{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[41] + mi := &file_p4_config_v1_p4types_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3196,7 +3139,7 @@ func (x *GenericNewTypeTranslation) String() string { func (*GenericNewTypeTranslation) ProtoMessage() {} func (x *GenericNewTypeTranslation) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[41] + mi := &file_p4_config_v1_p4types_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3209,7 +3152,7 @@ func (x *GenericNewTypeTranslation) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericNewTypeTranslation.ProtoReflect.Descriptor instead. func (*GenericNewTypeTranslation) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{41} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{40} } func (x *GenericNewTypeTranslation) GetUri() string { @@ -3277,7 +3220,7 @@ type GenericNewTypeSpec struct { func (x *GenericNewTypeSpec) Reset() { *x = GenericNewTypeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[42] + mi := &file_p4_config_v1_p4types_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3290,7 +3233,7 @@ func (x *GenericNewTypeSpec) String() string { func (*GenericNewTypeSpec) ProtoMessage() {} func (x *GenericNewTypeSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[42] + mi := &file_p4_config_v1_p4types_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3303,7 +3246,7 @@ func (x *GenericNewTypeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericNewTypeSpec.ProtoReflect.Descriptor instead. func (*GenericNewTypeSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{42} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{41} } func (m *GenericNewTypeSpec) GetRepresentation() isGenericNewTypeSpec_Representation { @@ -3378,7 +3321,7 @@ type P4StructTypeSpec_Member struct { func (x *P4StructTypeSpec_Member) Reset() { *x = P4StructTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[49] + mi := &file_p4_config_v1_p4types_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3391,7 +3334,7 @@ func (x *P4StructTypeSpec_Member) String() string { func (*P4StructTypeSpec_Member) ProtoMessage() {} func (x *P4StructTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[49] + mi := &file_p4_config_v1_p4types_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3433,7 +3376,7 @@ type P4HeaderTypeSpec_Member struct { func (x *P4HeaderTypeSpec_Member) Reset() { *x = P4HeaderTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[50] + mi := &file_p4_config_v1_p4types_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3446,7 +3389,7 @@ func (x *P4HeaderTypeSpec_Member) String() string { func (*P4HeaderTypeSpec_Member) ProtoMessage() {} func (x *P4HeaderTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[50] + mi := &file_p4_config_v1_p4types_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3488,7 +3431,7 @@ type P4HeaderUnionTypeSpec_Member struct { func (x *P4HeaderUnionTypeSpec_Member) Reset() { *x = P4HeaderUnionTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[51] + mi := &file_p4_config_v1_p4types_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3501,7 +3444,7 @@ func (x *P4HeaderUnionTypeSpec_Member) String() string { func (*P4HeaderUnionTypeSpec_Member) ProtoMessage() {} func (x *P4HeaderUnionTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[51] + mi := &file_p4_config_v1_p4types_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3547,7 +3490,7 @@ type P4EnumTypeSpec_Member struct { func (x *P4EnumTypeSpec_Member) Reset() { *x = P4EnumTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[52] + mi := &file_p4_config_v1_p4types_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3560,7 +3503,7 @@ func (x *P4EnumTypeSpec_Member) String() string { func (*P4EnumTypeSpec_Member) ProtoMessage() {} func (x *P4EnumTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[52] + mi := &file_p4_config_v1_p4types_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3621,7 +3564,7 @@ type P4SerializableEnumTypeSpec_Member struct { func (x *P4SerializableEnumTypeSpec_Member) Reset() { *x = P4SerializableEnumTypeSpec_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[53] + mi := &file_p4_config_v1_p4types_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3634,7 +3577,7 @@ func (x *P4SerializableEnumTypeSpec_Member) String() string { func (*P4SerializableEnumTypeSpec_Member) ProtoMessage() {} func (x *P4SerializableEnumTypeSpec_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[53] + mi := &file_p4_config_v1_p4types_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3694,7 +3637,7 @@ type P4NewTypeTranslation_SdnString struct { func (x *P4NewTypeTranslation_SdnString) Reset() { *x = P4NewTypeTranslation_SdnString{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4types_proto_msgTypes[54] + mi := &file_p4_config_v1_p4types_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3707,7 +3650,7 @@ func (x *P4NewTypeTranslation_SdnString) String() string { func (*P4NewTypeTranslation_SdnString) ProtoMessage() {} func (x *P4NewTypeTranslation_SdnString) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4types_proto_msgTypes[54] + mi := &file_p4_config_v1_p4types_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3728,8 +3671,9 @@ type GenericStructTypeSpec_Member struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - TypeSpec *GenericDataTypeSpec `protobuf:"bytes,2,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,3,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` } func (x *GenericStructTypeSpec_Member) Reset() { @@ -3761,7 +3705,14 @@ func (x *GenericStructTypeSpec_Member) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericStructTypeSpec_Member.ProtoReflect.Descriptor instead. func (*GenericStructTypeSpec_Member) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{35, 0} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{34, 0} +} + +func (x *GenericStructTypeSpec_Member) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 } func (x *GenericStructTypeSpec_Member) GetName() string { @@ -3821,7 +3772,7 @@ func (x *GenericEnumTypeSpec_Member) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericEnumTypeSpec_Member.ProtoReflect.Descriptor instead. func (*GenericEnumTypeSpec_Member) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{39, 0} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{38, 0} } func (x *GenericEnumTypeSpec_Member) GetName() string { @@ -3903,7 +3854,7 @@ func (x *GenericSerializableEnumTypeSpec_Member) ProtoReflect() protoreflect.Mes // Deprecated: Use GenericSerializableEnumTypeSpec_Member.ProtoReflect.Descriptor instead. func (*GenericSerializableEnumTypeSpec_Member) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{40, 0} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{39, 0} } func (x *GenericSerializableEnumTypeSpec_Member) GetName() string { @@ -3983,7 +3934,7 @@ func (x *GenericNewTypeTranslation_SdnString) ProtoReflect() protoreflect.Messag // Deprecated: Use GenericNewTypeTranslation_SdnString.ProtoReflect.Descriptor instead. func (*GenericNewTypeTranslation_SdnString) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{41, 0} + return file_p4_config_v1_p4types_proto_rawDescGZIP(), []int{40, 0} } var File_p4_config_v1_p4types_proto protoreflect.FileDescriptor @@ -4391,7 +4342,7 @@ var file_p4_config_v1_p4types_proto_rawDesc = []byte{ 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0xf5, 0x06, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, + 0x69, 0x6f, 0x6e, 0x22, 0xbb, 0x08, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, @@ -4400,117 +4351,160 @@ var file_p4_config_v1_p4types_proto_rawDesc = []byte{ 0x05, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x3e, 0x0a, - 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x63, 0x0a, - 0x12, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, - 0x75, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x34, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, - 0x6d, 0x73, 0x12, 0x48, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x57, 0x0a, + 0x0e, 0x75, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x53, 0x65, + 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x75, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x65, 0x64, 0x53, 0x65, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x5f, 0x0a, 0x0c, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, - 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x63, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, + 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x48, 0x0a, 0x09, 0x6e, + 0x65, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4e, 0x65, + 0x77, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6e, 0x65, 0x77, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x5f, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x6b, 0x0a, 0x12, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, + 0x53, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x53, 0x65, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x5b, 0x0a, 0x0a, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, + 0x16, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, + 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, + 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0d, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, + 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xd6, 0x04, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x09, 0x62, 0x69, 0x74, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x0a, 0x45, 0x6e, - 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6b, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x09, 0x62, 0x69, 0x74, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x33, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, + 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x0d, 0x75, 0x6e, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, + 0x65, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x53, 0x65, + 0x74, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, + 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x34, 0x0a, 0x04, 0x65, + 0x6e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0d, - 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc7, 0x05, 0x0a, 0x13, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6b, 0x65, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x48, 0x00, 0x52, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, - 0x36, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, - 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x6f, 0x6f, 0x6c, - 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x06, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x65, 0x6e, 0x75, + 0x6d, 0x12, 0x4d, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x06, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, - 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x0d, - 0x75, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, - 0x53, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x34, 0x0a, - 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x65, - 0x6e, 0x75, 0x6d, 0x12, 0x4d, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x10, + 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x3b, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0b, 0x0a, + 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, 0x26, 0x0a, 0x10, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x36, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x6f, 0x6f, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa4, 0x03, 0x0a, 0x1c, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, + 0x69, 0x6b, 0x65, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x34, 0x0a, 0x03, 0x62, + 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, + 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x03, 0x62, 0x69, + 0x74, 0x12, 0x34, 0x0a, 0x03, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, - 0x52, 0x10, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, - 0x75, 0x6d, 0x12, 0x3b, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x64, - 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x37, 0x0a, 0x07, 0x70, 0x34, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, - 0x52, 0x06, 0x70, 0x34, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, 0x26, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x11, 0x0a, - 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, - 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x22, 0xa4, 0x03, 0x0a, 0x1c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x42, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6b, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x34, 0x0a, 0x03, 0x62, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x03, 0x62, 0x69, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x69, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x49, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, - 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x76, 0x61, 0x72, 0x62, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x06, 0x76, 0x61, 0x72, 0x62, 0x69, 0x74, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x49, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x76, 0x61, 0x72, 0x62, 0x69, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, + 0x72, 0x62, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x06, + 0x76, 0x61, 0x72, 0x62, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, + 0x63, 0x22, 0x55, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x55, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x49, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, + 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x5f, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, + 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x6d, 0x61, 0x78, 0x42, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x99, 0x03, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, @@ -4521,32 +4515,67 @@ var file_p4_config_v1_p4types_proto_rawDesc = []byte{ 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0b, - 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, 0x55, 0x0a, 0x12, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, - 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x55, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x49, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5f, 0x0a, 0x15, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x42, 0x69, 0x74, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x03, 0x0a, 0x15, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6c, + 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x09, + 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xe8, 0x02, 0x0a, + 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x11, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x0f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4f, 0x0a, 0x14, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf0, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x53, 0x65, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x11, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4f, + 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x11, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, @@ -4558,85 +4587,113 @@ var file_p4_config_v1_p4types_proto_rawDesc = []byte{ 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5c, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, - 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, - 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xd9, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3e, - 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x20, - 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, - 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, - 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x04, 0x0a, 0x13, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x42, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0xe1, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x55, 0x6e, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x53, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x69, 0x63, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, - 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, - 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, + 0x6e, 0x73, 0x1a, 0x8f, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x04, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x07, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, - 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb2, 0x05, 0x0a, 0x1f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x49, 0x0a, 0x0f, 0x75, 0x6e, 0x64, 0x65, + 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x0e, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x4e, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0xa5, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, + 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, + 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x64, 0x6e, + 0x5f, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, + 0x00, 0x52, 0x0b, 0x73, 0x64, 0x6e, 0x42, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x52, + 0x0a, 0x0a, 0x73, 0x64, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x64, 0x6e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x09, 0x73, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x1a, 0x0b, 0x0a, 0x09, 0x53, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, + 0x0a, 0x0a, 0x08, 0x73, 0x64, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x92, 0x03, 0x0a, 0x12, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x48, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x0c, + 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, + 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, @@ -4645,109 +4702,12 @@ var file_p4_config_v1_p4types_proto_rawDesc = []byte{ 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x8f, - 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0xb2, 0x05, 0x0a, 0x1f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x49, 0x0a, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, - 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x0e, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x4e, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, - 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, - 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xa5, 0x02, - 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, - 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x64, 0x6e, 0x5f, 0x62, 0x69, 0x74, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0b, 0x73, - 0x64, 0x6e, 0x42, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x52, 0x0a, 0x0a, 0x73, 0x64, - 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x48, 0x00, 0x52, 0x09, 0x73, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x0b, - 0x0a, 0x09, 0x53, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x0a, 0x0a, 0x08, 0x73, - 0x64, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x92, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x48, - 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, - 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, - 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x72, 0x65, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x2d, 0x5a, 0x2b, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, - 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, - 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, + 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, + 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4794,33 +4754,33 @@ var file_p4_config_v1_p4types_proto_goTypes = []interface{}{ (*GenericDataTypeSpec)(nil), // 27: p4.config.v1.GenericDataTypeSpec (*GenericNamedType)(nil), // 28: p4.config.v1.GenericNamedType (*GenericBoolType)(nil), // 29: p4.config.v1.GenericBoolType - (*GenericFloatType)(nil), // 30: p4.config.v1.GenericFloatType - (*GenericBitstringLikeTypeSpec)(nil), // 31: p4.config.v1.GenericBitstringLikeTypeSpec - (*GenericBitTypeSpec)(nil), // 32: p4.config.v1.GenericBitTypeSpec - (*GenericIntTypeSpec)(nil), // 33: p4.config.v1.GenericIntTypeSpec - (*GenericVarbitTypeSpec)(nil), // 34: p4.config.v1.GenericVarbitTypeSpec - (*GenericStructTypeSpec)(nil), // 35: p4.config.v1.GenericStructTypeSpec - (*GenericListTypeSpec)(nil), // 36: p4.config.v1.GenericListTypeSpec - (*GenericUnorderedSetTypeSpec)(nil), // 37: p4.config.v1.GenericUnorderedSetTypeSpec - (*GenericStringSpec)(nil), // 38: p4.config.v1.GenericStringSpec - (*GenericEnumTypeSpec)(nil), // 39: p4.config.v1.GenericEnumTypeSpec - (*GenericSerializableEnumTypeSpec)(nil), // 40: p4.config.v1.GenericSerializableEnumTypeSpec - (*GenericNewTypeTranslation)(nil), // 41: p4.config.v1.GenericNewTypeTranslation - (*GenericNewTypeSpec)(nil), // 42: p4.config.v1.GenericNewTypeSpec - nil, // 43: p4.config.v1.P4TypeInfo.StructsEntry - nil, // 44: p4.config.v1.P4TypeInfo.HeadersEntry - nil, // 45: p4.config.v1.P4TypeInfo.HeaderUnionsEntry - nil, // 46: p4.config.v1.P4TypeInfo.EnumsEntry - nil, // 47: p4.config.v1.P4TypeInfo.SerializableEnumsEntry - nil, // 48: p4.config.v1.P4TypeInfo.NewTypesEntry - (*P4StructTypeSpec_Member)(nil), // 49: p4.config.v1.P4StructTypeSpec.Member - (*P4HeaderTypeSpec_Member)(nil), // 50: p4.config.v1.P4HeaderTypeSpec.Member - (*P4HeaderUnionTypeSpec_Member)(nil), // 51: p4.config.v1.P4HeaderUnionTypeSpec.Member - (*P4EnumTypeSpec_Member)(nil), // 52: p4.config.v1.P4EnumTypeSpec.Member - (*P4SerializableEnumTypeSpec_Member)(nil), // 53: p4.config.v1.P4SerializableEnumTypeSpec.Member - (*P4NewTypeTranslation_SdnString)(nil), // 54: p4.config.v1.P4NewTypeTranslation.SdnString - nil, // 55: p4.config.v1.GenericTypeInfo.StructsEntry - nil, // 56: p4.config.v1.GenericTypeInfo.ListsEntry + (*GenericBitstringLikeTypeSpec)(nil), // 30: p4.config.v1.GenericBitstringLikeTypeSpec + (*GenericBitTypeSpec)(nil), // 31: p4.config.v1.GenericBitTypeSpec + (*GenericIntTypeSpec)(nil), // 32: p4.config.v1.GenericIntTypeSpec + (*GenericVarbitTypeSpec)(nil), // 33: p4.config.v1.GenericVarbitTypeSpec + (*GenericStructTypeSpec)(nil), // 34: p4.config.v1.GenericStructTypeSpec + (*GenericListTypeSpec)(nil), // 35: p4.config.v1.GenericListTypeSpec + (*GenericUnorderedSetTypeSpec)(nil), // 36: p4.config.v1.GenericUnorderedSetTypeSpec + (*GenericStringSpec)(nil), // 37: p4.config.v1.GenericStringSpec + (*GenericEnumTypeSpec)(nil), // 38: p4.config.v1.GenericEnumTypeSpec + (*GenericSerializableEnumTypeSpec)(nil), // 39: p4.config.v1.GenericSerializableEnumTypeSpec + (*GenericNewTypeTranslation)(nil), // 40: p4.config.v1.GenericNewTypeTranslation + (*GenericNewTypeSpec)(nil), // 41: p4.config.v1.GenericNewTypeSpec + nil, // 42: p4.config.v1.P4TypeInfo.StructsEntry + nil, // 43: p4.config.v1.P4TypeInfo.HeadersEntry + nil, // 44: p4.config.v1.P4TypeInfo.HeaderUnionsEntry + nil, // 45: p4.config.v1.P4TypeInfo.EnumsEntry + nil, // 46: p4.config.v1.P4TypeInfo.SerializableEnumsEntry + nil, // 47: p4.config.v1.P4TypeInfo.NewTypesEntry + (*P4StructTypeSpec_Member)(nil), // 48: p4.config.v1.P4StructTypeSpec.Member + (*P4HeaderTypeSpec_Member)(nil), // 49: p4.config.v1.P4HeaderTypeSpec.Member + (*P4HeaderUnionTypeSpec_Member)(nil), // 50: p4.config.v1.P4HeaderUnionTypeSpec.Member + (*P4EnumTypeSpec_Member)(nil), // 51: p4.config.v1.P4EnumTypeSpec.Member + (*P4SerializableEnumTypeSpec_Member)(nil), // 52: p4.config.v1.P4SerializableEnumTypeSpec.Member + (*P4NewTypeTranslation_SdnString)(nil), // 53: p4.config.v1.P4NewTypeTranslation.SdnString + nil, // 54: p4.config.v1.GenericTypeInfo.StructsEntry + nil, // 55: p4.config.v1.GenericTypeInfo.ListsEntry + nil, // 56: p4.config.v1.GenericTypeInfo.UnorderedSetsEntry nil, // 57: p4.config.v1.GenericTypeInfo.EnumsEntry nil, // 58: p4.config.v1.GenericTypeInfo.SerializableEnumsEntry nil, // 59: p4.config.v1.GenericTypeInfo.NewTypesEntry @@ -4830,13 +4790,13 @@ var file_p4_config_v1_p4types_proto_goTypes = []interface{}{ (*GenericNewTypeTranslation_SdnString)(nil), // 63: p4.config.v1.GenericNewTypeTranslation.SdnString } var file_p4_config_v1_p4types_proto_depIdxs = []int32{ - 43, // 0: p4.config.v1.P4TypeInfo.structs:type_name -> p4.config.v1.P4TypeInfo.StructsEntry - 44, // 1: p4.config.v1.P4TypeInfo.headers:type_name -> p4.config.v1.P4TypeInfo.HeadersEntry - 45, // 2: p4.config.v1.P4TypeInfo.header_unions:type_name -> p4.config.v1.P4TypeInfo.HeaderUnionsEntry - 46, // 3: p4.config.v1.P4TypeInfo.enums:type_name -> p4.config.v1.P4TypeInfo.EnumsEntry + 42, // 0: p4.config.v1.P4TypeInfo.structs:type_name -> p4.config.v1.P4TypeInfo.StructsEntry + 43, // 1: p4.config.v1.P4TypeInfo.headers:type_name -> p4.config.v1.P4TypeInfo.HeadersEntry + 44, // 2: p4.config.v1.P4TypeInfo.header_unions:type_name -> p4.config.v1.P4TypeInfo.HeaderUnionsEntry + 45, // 3: p4.config.v1.P4TypeInfo.enums:type_name -> p4.config.v1.P4TypeInfo.EnumsEntry 23, // 4: p4.config.v1.P4TypeInfo.error:type_name -> p4.config.v1.P4ErrorTypeSpec - 47, // 5: p4.config.v1.P4TypeInfo.serializable_enums:type_name -> p4.config.v1.P4TypeInfo.SerializableEnumsEntry - 48, // 6: p4.config.v1.P4TypeInfo.new_types:type_name -> p4.config.v1.P4TypeInfo.NewTypesEntry + 46, // 5: p4.config.v1.P4TypeInfo.serializable_enums:type_name -> p4.config.v1.P4TypeInfo.SerializableEnumsEntry + 47, // 6: p4.config.v1.P4TypeInfo.new_types:type_name -> p4.config.v1.P4TypeInfo.NewTypesEntry 5, // 7: p4.config.v1.P4DataTypeSpec.bitstring:type_name -> p4.config.v1.P4BitstringLikeTypeSpec 3, // 8: p4.config.v1.P4DataTypeSpec.bool:type_name -> p4.config.v1.P4BoolType 9, // 9: p4.config.v1.P4DataTypeSpec.tuple:type_name -> p4.config.v1.P4TupleTypeSpec @@ -4855,13 +4815,13 @@ var file_p4_config_v1_p4types_proto_depIdxs = []int32{ 20, // 22: p4.config.v1.P4BitstringLikeTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation 19, // 23: p4.config.v1.P4BitstringLikeTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation 1, // 24: p4.config.v1.P4TupleTypeSpec.members:type_name -> p4.config.v1.P4DataTypeSpec - 49, // 25: p4.config.v1.P4StructTypeSpec.members:type_name -> p4.config.v1.P4StructTypeSpec.Member + 48, // 25: p4.config.v1.P4StructTypeSpec.members:type_name -> p4.config.v1.P4StructTypeSpec.Member 20, // 26: p4.config.v1.P4StructTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation 19, // 27: p4.config.v1.P4StructTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 50, // 28: p4.config.v1.P4HeaderTypeSpec.members:type_name -> p4.config.v1.P4HeaderTypeSpec.Member + 49, // 28: p4.config.v1.P4HeaderTypeSpec.members:type_name -> p4.config.v1.P4HeaderTypeSpec.Member 20, // 29: p4.config.v1.P4HeaderTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation 19, // 30: p4.config.v1.P4HeaderTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 51, // 31: p4.config.v1.P4HeaderUnionTypeSpec.members:type_name -> p4.config.v1.P4HeaderUnionTypeSpec.Member + 50, // 31: p4.config.v1.P4HeaderUnionTypeSpec.members:type_name -> p4.config.v1.P4HeaderUnionTypeSpec.Member 20, // 32: p4.config.v1.P4HeaderUnionTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation 19, // 33: p4.config.v1.P4HeaderUnionTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation 2, // 34: p4.config.v1.P4HeaderStackTypeSpec.header:type_name -> p4.config.v1.P4NamedType @@ -4872,25 +4832,25 @@ var file_p4_config_v1_p4types_proto_depIdxs = []int32{ 18, // 39: p4.config.v1.StructuredAnnotation.expression_list:type_name -> p4.config.v1.ExpressionList 16, // 40: p4.config.v1.StructuredAnnotation.kv_pair_list:type_name -> p4.config.v1.KeyValuePairList 20, // 41: p4.config.v1.StructuredAnnotation.source_location:type_name -> p4.config.v1.SourceLocation - 52, // 42: p4.config.v1.P4EnumTypeSpec.members:type_name -> p4.config.v1.P4EnumTypeSpec.Member + 51, // 42: p4.config.v1.P4EnumTypeSpec.members:type_name -> p4.config.v1.P4EnumTypeSpec.Member 20, // 43: p4.config.v1.P4EnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation 19, // 44: p4.config.v1.P4EnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation 6, // 45: p4.config.v1.P4SerializableEnumTypeSpec.underlying_type:type_name -> p4.config.v1.P4BitTypeSpec - 53, // 46: p4.config.v1.P4SerializableEnumTypeSpec.members:type_name -> p4.config.v1.P4SerializableEnumTypeSpec.Member + 52, // 46: p4.config.v1.P4SerializableEnumTypeSpec.members:type_name -> p4.config.v1.P4SerializableEnumTypeSpec.Member 20, // 47: p4.config.v1.P4SerializableEnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation 19, // 48: p4.config.v1.P4SerializableEnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 54, // 49: p4.config.v1.P4NewTypeTranslation.sdn_string:type_name -> p4.config.v1.P4NewTypeTranslation.SdnString + 53, // 49: p4.config.v1.P4NewTypeTranslation.sdn_string:type_name -> p4.config.v1.P4NewTypeTranslation.SdnString 1, // 50: p4.config.v1.P4NewTypeSpec.original_type:type_name -> p4.config.v1.P4DataTypeSpec 24, // 51: p4.config.v1.P4NewTypeSpec.translated_type:type_name -> p4.config.v1.P4NewTypeTranslation 20, // 52: p4.config.v1.P4NewTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation 19, // 53: p4.config.v1.P4NewTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 55, // 54: p4.config.v1.GenericTypeInfo.structs:type_name -> p4.config.v1.GenericTypeInfo.StructsEntry - 56, // 55: p4.config.v1.GenericTypeInfo.lists:type_name -> p4.config.v1.GenericTypeInfo.ListsEntry - 57, // 56: p4.config.v1.GenericTypeInfo.enums:type_name -> p4.config.v1.GenericTypeInfo.EnumsEntry - 58, // 57: p4.config.v1.GenericTypeInfo.serializable_enums:type_name -> p4.config.v1.GenericTypeInfo.SerializableEnumsEntry - 59, // 58: p4.config.v1.GenericTypeInfo.new_types:type_name -> p4.config.v1.GenericTypeInfo.NewTypesEntry - 31, // 59: p4.config.v1.GenericDataTypeSpec.bitstring:type_name -> p4.config.v1.GenericBitstringLikeTypeSpec - 30, // 60: p4.config.v1.GenericDataTypeSpec.float:type_name -> p4.config.v1.GenericFloatType + 54, // 54: p4.config.v1.GenericTypeInfo.structs:type_name -> p4.config.v1.GenericTypeInfo.StructsEntry + 55, // 55: p4.config.v1.GenericTypeInfo.lists:type_name -> p4.config.v1.GenericTypeInfo.ListsEntry + 56, // 56: p4.config.v1.GenericTypeInfo.unordered_sets:type_name -> p4.config.v1.GenericTypeInfo.UnorderedSetsEntry + 57, // 57: p4.config.v1.GenericTypeInfo.enums:type_name -> p4.config.v1.GenericTypeInfo.EnumsEntry + 58, // 58: p4.config.v1.GenericTypeInfo.serializable_enums:type_name -> p4.config.v1.GenericTypeInfo.SerializableEnumsEntry + 59, // 59: p4.config.v1.GenericTypeInfo.new_types:type_name -> p4.config.v1.GenericTypeInfo.NewTypesEntry + 30, // 60: p4.config.v1.GenericDataTypeSpec.bitstring:type_name -> p4.config.v1.GenericBitstringLikeTypeSpec 29, // 61: p4.config.v1.GenericDataTypeSpec.bool:type_name -> p4.config.v1.GenericBoolType 28, // 62: p4.config.v1.GenericDataTypeSpec.struct:type_name -> p4.config.v1.GenericNamedType 28, // 63: p4.config.v1.GenericDataTypeSpec.list:type_name -> p4.config.v1.GenericNamedType @@ -4899,53 +4859,53 @@ var file_p4_config_v1_p4types_proto_depIdxs = []int32{ 28, // 66: p4.config.v1.GenericDataTypeSpec.enum:type_name -> p4.config.v1.GenericNamedType 28, // 67: p4.config.v1.GenericDataTypeSpec.serializable_enum:type_name -> p4.config.v1.GenericNamedType 28, // 68: p4.config.v1.GenericDataTypeSpec.new_type:type_name -> p4.config.v1.GenericNamedType - 1, // 69: p4.config.v1.GenericDataTypeSpec.p4_type:type_name -> p4.config.v1.P4DataTypeSpec - 32, // 70: p4.config.v1.GenericBitstringLikeTypeSpec.bit:type_name -> p4.config.v1.GenericBitTypeSpec - 33, // 71: p4.config.v1.GenericBitstringLikeTypeSpec.int:type_name -> p4.config.v1.GenericIntTypeSpec - 34, // 72: p4.config.v1.GenericBitstringLikeTypeSpec.varbit:type_name -> p4.config.v1.GenericVarbitTypeSpec - 20, // 73: p4.config.v1.GenericBitstringLikeTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 74: p4.config.v1.GenericBitstringLikeTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 60, // 75: p4.config.v1.GenericStructTypeSpec.members:type_name -> p4.config.v1.GenericStructTypeSpec.Member - 20, // 76: p4.config.v1.GenericStructTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 77: p4.config.v1.GenericStructTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 27, // 78: p4.config.v1.GenericListTypeSpec.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec - 20, // 79: p4.config.v1.GenericListTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 80: p4.config.v1.GenericListTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 27, // 81: p4.config.v1.GenericUnorderedSetTypeSpec.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec - 20, // 82: p4.config.v1.GenericUnorderedSetTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 83: p4.config.v1.GenericUnorderedSetTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 20, // 84: p4.config.v1.GenericStringSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 85: p4.config.v1.GenericStringSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 61, // 86: p4.config.v1.GenericEnumTypeSpec.members:type_name -> p4.config.v1.GenericEnumTypeSpec.Member - 20, // 87: p4.config.v1.GenericEnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 88: p4.config.v1.GenericEnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 32, // 89: p4.config.v1.GenericSerializableEnumTypeSpec.underlying_type:type_name -> p4.config.v1.GenericBitTypeSpec - 62, // 90: p4.config.v1.GenericSerializableEnumTypeSpec.members:type_name -> p4.config.v1.GenericSerializableEnumTypeSpec.Member - 20, // 91: p4.config.v1.GenericSerializableEnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 92: p4.config.v1.GenericSerializableEnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 63, // 93: p4.config.v1.GenericNewTypeTranslation.sdn_string:type_name -> p4.config.v1.GenericNewTypeTranslation.SdnString - 27, // 94: p4.config.v1.GenericNewTypeSpec.original_type:type_name -> p4.config.v1.GenericDataTypeSpec - 41, // 95: p4.config.v1.GenericNewTypeSpec.translated_type:type_name -> p4.config.v1.GenericNewTypeTranslation - 20, // 96: p4.config.v1.GenericNewTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 97: p4.config.v1.GenericNewTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 10, // 98: p4.config.v1.P4TypeInfo.StructsEntry.value:type_name -> p4.config.v1.P4StructTypeSpec - 11, // 99: p4.config.v1.P4TypeInfo.HeadersEntry.value:type_name -> p4.config.v1.P4HeaderTypeSpec - 12, // 100: p4.config.v1.P4TypeInfo.HeaderUnionsEntry.value:type_name -> p4.config.v1.P4HeaderUnionTypeSpec - 21, // 101: p4.config.v1.P4TypeInfo.EnumsEntry.value:type_name -> p4.config.v1.P4EnumTypeSpec - 22, // 102: p4.config.v1.P4TypeInfo.SerializableEnumsEntry.value:type_name -> p4.config.v1.P4SerializableEnumTypeSpec - 25, // 103: p4.config.v1.P4TypeInfo.NewTypesEntry.value:type_name -> p4.config.v1.P4NewTypeSpec - 1, // 104: p4.config.v1.P4StructTypeSpec.Member.type_spec:type_name -> p4.config.v1.P4DataTypeSpec - 5, // 105: p4.config.v1.P4HeaderTypeSpec.Member.type_spec:type_name -> p4.config.v1.P4BitstringLikeTypeSpec - 2, // 106: p4.config.v1.P4HeaderUnionTypeSpec.Member.header:type_name -> p4.config.v1.P4NamedType - 20, // 107: p4.config.v1.P4EnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 108: p4.config.v1.P4EnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 20, // 109: p4.config.v1.P4SerializableEnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation - 19, // 110: p4.config.v1.P4SerializableEnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 35, // 111: p4.config.v1.GenericTypeInfo.StructsEntry.value:type_name -> p4.config.v1.GenericStructTypeSpec - 36, // 112: p4.config.v1.GenericTypeInfo.ListsEntry.value:type_name -> p4.config.v1.GenericListTypeSpec - 39, // 113: p4.config.v1.GenericTypeInfo.EnumsEntry.value:type_name -> p4.config.v1.GenericEnumTypeSpec - 40, // 114: p4.config.v1.GenericTypeInfo.SerializableEnumsEntry.value:type_name -> p4.config.v1.GenericSerializableEnumTypeSpec - 42, // 115: p4.config.v1.GenericTypeInfo.NewTypesEntry.value:type_name -> p4.config.v1.GenericNewTypeSpec + 31, // 69: p4.config.v1.GenericBitstringLikeTypeSpec.bit:type_name -> p4.config.v1.GenericBitTypeSpec + 32, // 70: p4.config.v1.GenericBitstringLikeTypeSpec.int:type_name -> p4.config.v1.GenericIntTypeSpec + 33, // 71: p4.config.v1.GenericBitstringLikeTypeSpec.varbit:type_name -> p4.config.v1.GenericVarbitTypeSpec + 20, // 72: p4.config.v1.GenericBitstringLikeTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 73: p4.config.v1.GenericBitstringLikeTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 60, // 74: p4.config.v1.GenericStructTypeSpec.members:type_name -> p4.config.v1.GenericStructTypeSpec.Member + 20, // 75: p4.config.v1.GenericStructTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 76: p4.config.v1.GenericStructTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 27, // 77: p4.config.v1.GenericListTypeSpec.element_type_spec:type_name -> p4.config.v1.GenericDataTypeSpec + 20, // 78: p4.config.v1.GenericListTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 79: p4.config.v1.GenericListTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 27, // 80: p4.config.v1.GenericUnorderedSetTypeSpec.element_type_spec:type_name -> p4.config.v1.GenericDataTypeSpec + 20, // 81: p4.config.v1.GenericUnorderedSetTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 82: p4.config.v1.GenericUnorderedSetTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 20, // 83: p4.config.v1.GenericStringSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 84: p4.config.v1.GenericStringSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 61, // 85: p4.config.v1.GenericEnumTypeSpec.members:type_name -> p4.config.v1.GenericEnumTypeSpec.Member + 20, // 86: p4.config.v1.GenericEnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 87: p4.config.v1.GenericEnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 31, // 88: p4.config.v1.GenericSerializableEnumTypeSpec.underlying_type:type_name -> p4.config.v1.GenericBitTypeSpec + 62, // 89: p4.config.v1.GenericSerializableEnumTypeSpec.members:type_name -> p4.config.v1.GenericSerializableEnumTypeSpec.Member + 20, // 90: p4.config.v1.GenericSerializableEnumTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 91: p4.config.v1.GenericSerializableEnumTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 63, // 92: p4.config.v1.GenericNewTypeTranslation.sdn_string:type_name -> p4.config.v1.GenericNewTypeTranslation.SdnString + 27, // 93: p4.config.v1.GenericNewTypeSpec.original_type:type_name -> p4.config.v1.GenericDataTypeSpec + 40, // 94: p4.config.v1.GenericNewTypeSpec.translated_type:type_name -> p4.config.v1.GenericNewTypeTranslation + 20, // 95: p4.config.v1.GenericNewTypeSpec.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 96: p4.config.v1.GenericNewTypeSpec.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 10, // 97: p4.config.v1.P4TypeInfo.StructsEntry.value:type_name -> p4.config.v1.P4StructTypeSpec + 11, // 98: p4.config.v1.P4TypeInfo.HeadersEntry.value:type_name -> p4.config.v1.P4HeaderTypeSpec + 12, // 99: p4.config.v1.P4TypeInfo.HeaderUnionsEntry.value:type_name -> p4.config.v1.P4HeaderUnionTypeSpec + 21, // 100: p4.config.v1.P4TypeInfo.EnumsEntry.value:type_name -> p4.config.v1.P4EnumTypeSpec + 22, // 101: p4.config.v1.P4TypeInfo.SerializableEnumsEntry.value:type_name -> p4.config.v1.P4SerializableEnumTypeSpec + 25, // 102: p4.config.v1.P4TypeInfo.NewTypesEntry.value:type_name -> p4.config.v1.P4NewTypeSpec + 1, // 103: p4.config.v1.P4StructTypeSpec.Member.type_spec:type_name -> p4.config.v1.P4DataTypeSpec + 5, // 104: p4.config.v1.P4HeaderTypeSpec.Member.type_spec:type_name -> p4.config.v1.P4BitstringLikeTypeSpec + 2, // 105: p4.config.v1.P4HeaderUnionTypeSpec.Member.header:type_name -> p4.config.v1.P4NamedType + 20, // 106: p4.config.v1.P4EnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 107: p4.config.v1.P4EnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 20, // 108: p4.config.v1.P4SerializableEnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation + 19, // 109: p4.config.v1.P4SerializableEnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 34, // 110: p4.config.v1.GenericTypeInfo.StructsEntry.value:type_name -> p4.config.v1.GenericStructTypeSpec + 35, // 111: p4.config.v1.GenericTypeInfo.ListsEntry.value:type_name -> p4.config.v1.GenericListTypeSpec + 36, // 112: p4.config.v1.GenericTypeInfo.UnorderedSetsEntry.value:type_name -> p4.config.v1.GenericUnorderedSetTypeSpec + 38, // 113: p4.config.v1.GenericTypeInfo.EnumsEntry.value:type_name -> p4.config.v1.GenericEnumTypeSpec + 39, // 114: p4.config.v1.GenericTypeInfo.SerializableEnumsEntry.value:type_name -> p4.config.v1.GenericSerializableEnumTypeSpec + 41, // 115: p4.config.v1.GenericTypeInfo.NewTypesEntry.value:type_name -> p4.config.v1.GenericNewTypeSpec 27, // 116: p4.config.v1.GenericStructTypeSpec.Member.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec 20, // 117: p4.config.v1.GenericEnumTypeSpec.Member.annotation_locations:type_name -> p4.config.v1.SourceLocation 19, // 118: p4.config.v1.GenericEnumTypeSpec.Member.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation @@ -5325,18 +5285,6 @@ func file_p4_config_v1_p4types_proto_init() { } } file_p4_config_v1_p4types_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenericFloatType); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_p4_config_v1_p4types_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericBitstringLikeTypeSpec); i { case 0: return &v.state @@ -5348,7 +5296,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericBitTypeSpec); i { case 0: return &v.state @@ -5360,7 +5308,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericIntTypeSpec); i { case 0: return &v.state @@ -5372,7 +5320,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericVarbitTypeSpec); i { case 0: return &v.state @@ -5384,7 +5332,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericStructTypeSpec); i { case 0: return &v.state @@ -5396,7 +5344,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericListTypeSpec); i { case 0: return &v.state @@ -5408,7 +5356,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericUnorderedSetTypeSpec); i { case 0: return &v.state @@ -5420,7 +5368,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericStringSpec); i { case 0: return &v.state @@ -5432,7 +5380,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericEnumTypeSpec); i { case 0: return &v.state @@ -5444,7 +5392,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericSerializableEnumTypeSpec); i { case 0: return &v.state @@ -5456,7 +5404,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericNewTypeTranslation); i { case 0: return &v.state @@ -5468,7 +5416,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericNewTypeSpec); i { case 0: return &v.state @@ -5480,7 +5428,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*P4StructTypeSpec_Member); i { case 0: return &v.state @@ -5492,7 +5440,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*P4HeaderTypeSpec_Member); i { case 0: return &v.state @@ -5504,7 +5452,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*P4HeaderUnionTypeSpec_Member); i { case 0: return &v.state @@ -5516,7 +5464,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*P4EnumTypeSpec_Member); i { case 0: return &v.state @@ -5528,7 +5476,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*P4SerializableEnumTypeSpec_Member); i { case 0: return &v.state @@ -5540,7 +5488,7 @@ func file_p4_config_v1_p4types_proto_init() { return nil } } - file_p4_config_v1_p4types_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_p4_config_v1_p4types_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*P4NewTypeTranslation_SdnString); i { case 0: return &v.state @@ -5639,7 +5587,6 @@ func file_p4_config_v1_p4types_proto_init() { } file_p4_config_v1_p4types_proto_msgTypes[27].OneofWrappers = []interface{}{ (*GenericDataTypeSpec_Bitstring)(nil), - (*GenericDataTypeSpec_Float)(nil), (*GenericDataTypeSpec_Bool)(nil), (*GenericDataTypeSpec_Struct)(nil), (*GenericDataTypeSpec_List)(nil), @@ -5648,18 +5595,17 @@ func file_p4_config_v1_p4types_proto_init() { (*GenericDataTypeSpec_Enum)(nil), (*GenericDataTypeSpec_SerializableEnum)(nil), (*GenericDataTypeSpec_NewType)(nil), - (*GenericDataTypeSpec_P4Type)(nil), } - file_p4_config_v1_p4types_proto_msgTypes[31].OneofWrappers = []interface{}{ + file_p4_config_v1_p4types_proto_msgTypes[30].OneofWrappers = []interface{}{ (*GenericBitstringLikeTypeSpec_Bit)(nil), (*GenericBitstringLikeTypeSpec_Int)(nil), (*GenericBitstringLikeTypeSpec_Varbit)(nil), } - file_p4_config_v1_p4types_proto_msgTypes[41].OneofWrappers = []interface{}{ + file_p4_config_v1_p4types_proto_msgTypes[40].OneofWrappers = []interface{}{ (*GenericNewTypeTranslation_SdnBitwidth)(nil), (*GenericNewTypeTranslation_SdnString_)(nil), } - file_p4_config_v1_p4types_proto_msgTypes[42].OneofWrappers = []interface{}{ + file_p4_config_v1_p4types_proto_msgTypes[41].OneofWrappers = []interface{}{ (*GenericNewTypeSpec_OriginalType)(nil), (*GenericNewTypeSpec_TranslatedType)(nil), } diff --git a/go/p4/v1/p4data.pb.go b/go/p4/v1/p4data.pb.go index c28c75f4..aed4c583 100644 --- a/go/p4/v1/p4data.pb.go +++ b/go/p4/v1/p4data.pb.go @@ -579,10 +579,10 @@ type GenericData struct { // // *GenericData_Bitstring // *GenericData_Varbitstring - // *GenericData_Float // *GenericData_Bool // *GenericData_GenericStruct // *GenericData_GenericList + // *GenericData_GenericUnorderedSet // *GenericData_String_ // *GenericData_Enum // *GenericData_EnumValue @@ -642,13 +642,6 @@ func (x *GenericData) GetVarbitstring() *GenericVarbit { return nil } -func (x *GenericData) GetFloat() float32 { - if x, ok := x.GetData().(*GenericData_Float); ok { - return x.Float - } - return 0 -} - func (x *GenericData) GetBool() bool { if x, ok := x.GetData().(*GenericData_Bool); ok { return x.Bool @@ -670,6 +663,13 @@ func (x *GenericData) GetGenericList() *GenericList { return nil } +func (x *GenericData) GetGenericUnorderedSet() *GenericUnorderedSet { + if x, ok := x.GetData().(*GenericData_GenericUnorderedSet); ok { + return x.GenericUnorderedSet + } + return nil +} + func (x *GenericData) GetString_() string { if x, ok := x.GetData().(*GenericData_String_); ok { return x.String_ @@ -703,20 +703,20 @@ type GenericData_Varbitstring struct { Varbitstring *GenericVarbit `protobuf:"bytes,2,opt,name=varbitstring,proto3,oneof"` } -type GenericData_Float struct { - Float float32 `protobuf:"fixed32,3,opt,name=float,proto3,oneof"` -} - type GenericData_Bool struct { - Bool bool `protobuf:"varint,4,opt,name=bool,proto3,oneof"` + Bool bool `protobuf:"varint,3,opt,name=bool,proto3,oneof"` } type GenericData_GenericStruct struct { - GenericStruct *GenericStructLike `protobuf:"bytes,5,opt,name=generic_struct,json=genericStruct,proto3,oneof"` // one struct + GenericStruct *GenericStructLike `protobuf:"bytes,4,opt,name=generic_struct,json=genericStruct,proto3,oneof"` // one struct } type GenericData_GenericList struct { - GenericList *GenericList `protobuf:"bytes,6,opt,name=generic_list,json=genericList,proto3,oneof"` // list of bytes/floats/bool/structs/strings/enums/enum_values. + GenericList *GenericList `protobuf:"bytes,5,opt,name=generic_list,json=genericList,proto3,oneof"` // list of bytes/bool/structs/strings/enums/enum_values. +} + +type GenericData_GenericUnorderedSet struct { + GenericUnorderedSet *GenericUnorderedSet `protobuf:"bytes,6,opt,name=generic_unordered_set,json=genericUnorderedSet,proto3,oneof"` // unordered_set of bytes/bool/structs/strings/enums/enum_values. } type GenericData_String_ struct { @@ -735,14 +735,14 @@ func (*GenericData_Bitstring) isGenericData_Data() {} func (*GenericData_Varbitstring) isGenericData_Data() {} -func (*GenericData_Float) isGenericData_Data() {} - func (*GenericData_Bool) isGenericData_Data() {} func (*GenericData_GenericStruct) isGenericData_Data() {} func (*GenericData_GenericList) isGenericData_Data() {} +func (*GenericData_GenericUnorderedSet) isGenericData_Data() {} + func (*GenericData_String_) isGenericData_Data() {} func (*GenericData_Enum) isGenericData_Data() {} @@ -843,6 +843,53 @@ func (x *GenericList) GetMembers() []*GenericData { return nil } +type GenericUnorderedSet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Members []*GenericData `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` +} + +func (x *GenericUnorderedSet) Reset() { + *x = GenericUnorderedSet{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4data_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericUnorderedSet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericUnorderedSet) ProtoMessage() {} + +func (x *GenericUnorderedSet) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4data_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericUnorderedSet.ProtoReflect.Descriptor instead. +func (*GenericUnorderedSet) Descriptor() ([]byte, []int) { + return file_p4_v1_p4data_proto_rawDescGZIP(), []int{10} +} + +func (x *GenericUnorderedSet) GetMembers() []*GenericData { + if x != nil { + return x.Members + } + return nil +} + type GenericVarbit struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -855,7 +902,7 @@ type GenericVarbit struct { func (x *GenericVarbit) Reset() { *x = GenericVarbit{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4data_proto_msgTypes[10] + mi := &file_p4_v1_p4data_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -868,7 +915,7 @@ func (x *GenericVarbit) String() string { func (*GenericVarbit) ProtoMessage() {} func (x *GenericVarbit) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4data_proto_msgTypes[10] + mi := &file_p4_v1_p4data_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -881,7 +928,7 @@ func (x *GenericVarbit) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericVarbit.ProtoReflect.Descriptor instead. func (*GenericVarbit) Descriptor() ([]byte, []int) { - return file_p4_v1_p4data_proto_rawDescGZIP(), []int{10} + return file_p4_v1_p4data_proto_rawDescGZIP(), []int{11} } func (x *GenericVarbit) GetBitstring() []byte { @@ -963,45 +1010,53 @@ var file_p4_v1_p4data_proto_rawDesc = []byte{ 0x2e, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, - 0xec, 0x02, 0x0a, 0x0b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x12, + 0xa6, 0x03, 0x0a, 0x0b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x76, - 0x61, 0x72, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x05, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x05, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x41, 0x0a, 0x0e, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, - 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x69, 0x6b, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x37, 0x0a, 0x0c, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, - 0x63, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, - 0x14, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1f, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6e, 0x75, - 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x41, - 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, - 0x69, 0x6b, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x22, 0x3b, 0x0a, 0x0b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x2c, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, - 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x49, - 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, - 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x76, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x72, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x04, 0x62, + 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, + 0x6c, 0x12, 0x41, 0x0a, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, + 0x69, 0x6b, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x12, 0x37, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x50, 0x0a, + 0x15, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x75, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x55, 0x6e, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x65, 0x64, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x13, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, + 0x18, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x04, 0x65, 0x6e, 0x75, + 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, + 0x1f, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x41, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x69, 0x6b, 0x65, 0x12, 0x2c, 0x0a, + 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x3b, 0x0a, 0x0b, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x43, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, + 0x2c, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x49, 0x0a, + 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x62, 0x69, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, + 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x76, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1016,19 +1071,20 @@ func file_p4_v1_p4data_proto_rawDescGZIP() []byte { return file_p4_v1_p4data_proto_rawDescData } -var file_p4_v1_p4data_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_p4_v1_p4data_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_p4_v1_p4data_proto_goTypes = []interface{}{ - (*P4Data)(nil), // 0: p4.v1.P4Data - (*P4Varbit)(nil), // 1: p4.v1.P4Varbit - (*P4StructLike)(nil), // 2: p4.v1.P4StructLike - (*P4Header)(nil), // 3: p4.v1.P4Header - (*P4HeaderUnion)(nil), // 4: p4.v1.P4HeaderUnion - (*P4HeaderStack)(nil), // 5: p4.v1.P4HeaderStack - (*P4HeaderUnionStack)(nil), // 6: p4.v1.P4HeaderUnionStack - (*GenericData)(nil), // 7: p4.v1.GenericData - (*GenericStructLike)(nil), // 8: p4.v1.GenericStructLike - (*GenericList)(nil), // 9: p4.v1.GenericList - (*GenericVarbit)(nil), // 10: p4.v1.GenericVarbit + (*P4Data)(nil), // 0: p4.v1.P4Data + (*P4Varbit)(nil), // 1: p4.v1.P4Varbit + (*P4StructLike)(nil), // 2: p4.v1.P4StructLike + (*P4Header)(nil), // 3: p4.v1.P4Header + (*P4HeaderUnion)(nil), // 4: p4.v1.P4HeaderUnion + (*P4HeaderStack)(nil), // 5: p4.v1.P4HeaderStack + (*P4HeaderUnionStack)(nil), // 6: p4.v1.P4HeaderUnionStack + (*GenericData)(nil), // 7: p4.v1.GenericData + (*GenericStructLike)(nil), // 8: p4.v1.GenericStructLike + (*GenericList)(nil), // 9: p4.v1.GenericList + (*GenericUnorderedSet)(nil), // 10: p4.v1.GenericUnorderedSet + (*GenericVarbit)(nil), // 11: p4.v1.GenericVarbit } var file_p4_v1_p4data_proto_depIdxs = []int32{ 1, // 0: p4.v1.P4Data.varbit:type_name -> p4.v1.P4Varbit @@ -1042,16 +1098,18 @@ var file_p4_v1_p4data_proto_depIdxs = []int32{ 3, // 8: p4.v1.P4HeaderUnion.valid_header:type_name -> p4.v1.P4Header 3, // 9: p4.v1.P4HeaderStack.entries:type_name -> p4.v1.P4Header 4, // 10: p4.v1.P4HeaderUnionStack.entries:type_name -> p4.v1.P4HeaderUnion - 10, // 11: p4.v1.GenericData.varbitstring:type_name -> p4.v1.GenericVarbit + 11, // 11: p4.v1.GenericData.varbitstring:type_name -> p4.v1.GenericVarbit 8, // 12: p4.v1.GenericData.generic_struct:type_name -> p4.v1.GenericStructLike 9, // 13: p4.v1.GenericData.generic_list:type_name -> p4.v1.GenericList - 7, // 14: p4.v1.GenericStructLike.members:type_name -> p4.v1.GenericData - 7, // 15: p4.v1.GenericList.members:type_name -> p4.v1.GenericData - 16, // [16:16] is the sub-list for method output_type - 16, // [16:16] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 10, // 14: p4.v1.GenericData.generic_unordered_set:type_name -> p4.v1.GenericUnorderedSet + 7, // 15: p4.v1.GenericStructLike.members:type_name -> p4.v1.GenericData + 7, // 16: p4.v1.GenericList.members:type_name -> p4.v1.GenericData + 7, // 17: p4.v1.GenericUnorderedSet.members:type_name -> p4.v1.GenericData + 18, // [18:18] is the sub-list for method output_type + 18, // [18:18] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_p4_v1_p4data_proto_init() } @@ -1181,6 +1239,18 @@ func file_p4_v1_p4data_proto_init() { } } file_p4_v1_p4data_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericUnorderedSet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4data_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenericVarbit); i { case 0: return &v.state @@ -1210,10 +1280,10 @@ func file_p4_v1_p4data_proto_init() { file_p4_v1_p4data_proto_msgTypes[7].OneofWrappers = []interface{}{ (*GenericData_Bitstring)(nil), (*GenericData_Varbitstring)(nil), - (*GenericData_Float)(nil), (*GenericData_Bool)(nil), (*GenericData_GenericStruct)(nil), (*GenericData_GenericList)(nil), + (*GenericData_GenericUnorderedSet)(nil), (*GenericData_String_)(nil), (*GenericData_Enum)(nil), (*GenericData_EnumValue)(nil), @@ -1224,7 +1294,7 @@ func file_p4_v1_p4data_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p4_v1_p4data_proto_rawDesc, NumEnums: 0, - NumMessages: 11, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/py/p4/config/v1/p4info_pb2.py b/py/p4/config/v1/p4info_pb2.py index da4abbc2..cf693f41 100644 --- a/py/p4/config/v1/p4info_pb2.py +++ b/py/p4/config/v1/p4info_pb2.py @@ -21,7 +21,7 @@ syntax='proto3', serialized_options=b'Z+github.com/p4lang/p4runtime/go/p4/config/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x19p4/config/v1/p4info.proto\x12\x0cp4.config.v1\x1a\x19google/protobuf/any.proto\x1a\x1ap4/config/v1/p4types.proto\"\xe1\x05\n\x06P4Info\x12\'\n\x08pkg_info\x18\x01 \x01(\x0b\x32\x15.p4.config.v1.PkgInfo\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.p4.config.v1.Table\x12%\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\x14.p4.config.v1.Action\x12\x34\n\x0f\x61\x63tion_profiles\x18\x04 \x03(\x0b\x32\x1b.p4.config.v1.ActionProfile\x12\'\n\x08\x63ounters\x18\x05 \x03(\x0b\x32\x15.p4.config.v1.Counter\x12\x34\n\x0f\x64irect_counters\x18\x06 \x03(\x0b\x32\x1b.p4.config.v1.DirectCounter\x12#\n\x06meters\x18\x07 \x03(\x0b\x32\x13.p4.config.v1.Meter\x12\x30\n\rdirect_meters\x18\x08 \x03(\x0b\x32\x19.p4.config.v1.DirectMeter\x12J\n\x1a\x63ontroller_packet_metadata\x18\t \x03(\x0b\x32&.p4.config.v1.ControllerPacketMetadata\x12*\n\nvalue_sets\x18\n \x03(\x0b\x32\x16.p4.config.v1.ValueSet\x12)\n\tregisters\x18\x0b \x03(\x0b\x32\x16.p4.config.v1.Register\x12%\n\x07\x64igests\x18\x0c \x03(\x0b\x32\x14.p4.config.v1.Digest\x12\x32\n\x0egeneric_tables\x18\r \x03(\x0b\x32\x1a.p4.config.v1.GenericTable\x12#\n\x06unions\x18\x0e \x03(\x0b\x32\x13.p4.config.v1.Union\x12%\n\x07\x65xterns\x18\x64 \x03(\x0b\x32\x14.p4.config.v1.Extern\x12,\n\ttype_info\x18\xc8\x01 \x01(\x0b\x32\x18.p4.config.v1.P4TypeInfo\"3\n\rDocumentation\x12\r\n\x05\x62rief\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\xa9\x02\n\x07PkgInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12(\n\x03\x64oc\x18\x03 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x0c\n\x04\x61rch\x18\x05 \x01(\t\x12\x14\n\x0corganization\x18\x06 \x01(\t\x12\x0f\n\x07\x63ontact\x18\x07 \x01(\t\x12\x0b\n\x03url\x18\x08 \x01(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x9a\x02\n\x05P4Ids\"\x90\x02\n\x06Prefix\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TION\x10\x01\x12\t\n\x05TABLE\x10\x02\x12\r\n\tVALUE_SET\x10\x03\x12\x15\n\x11\x43ONTROLLER_HEADER\x10\x04\x12\x15\n\x11PSA_EXTERNS_START\x10\x10\x12\x12\n\x0e\x41\x43TION_PROFILE\x10\x11\x12\x0b\n\x07\x43OUNTER\x10\x12\x12\x12\n\x0e\x44IRECT_COUNTER\x10\x13\x12\t\n\x05METER\x10\x14\x12\x10\n\x0c\x44IRECT_METER\x10\x15\x12\x0c\n\x08REGISTER\x10\x16\x12\n\n\x06\x44IGEST\x10\x17\x12\x11\n\rGENERIC_TABLE\x10\x18\x12\x18\n\x13OTHER_EXTERNS_START\x10\x80\x01\x12\x08\n\x03MAX\x10\xff\x01\"@\n\x10GenericTableType\",\n\x06Prefix\x12\x18\n\x14GENERIC_TABLES_START\x10\x00\x12\x08\n\x03MAX\x10\xff\x01\"\xf2\x01\n\x08Preamble\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x06\x45xtern\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xtern_type_name\x18\x02 \x01(\t\x12/\n\tinstances\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.ExternInstance\"^\n\x0e\x45xternInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"\xdc\x03\n\nMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12\x38\n\nmatch_type\x18\x05 \x01(\x0e\x32\".p4.config.v1.MatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x07 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x08 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\xc1\x03\n\x05Table\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12.\n\x0cmatch_fields\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12,\n\x0b\x61\x63tion_refs\x18\x03 \x03(\x0b\x32\x17.p4.config.v1.ActionRef\x12\x1f\n\x17\x63onst_default_action_id\x18\x04 \x01(\r\x12\x19\n\x11implementation_id\x18\x06 \x01(\r\x12\x1b\n\x13\x64irect_resource_ids\x18\x07 \x03(\r\x12\x0c\n\x04size\x18\x08 \x01(\x03\x12\x46\n\x15idle_timeout_behavior\x18\t \x01(\x0e\x32\'.p4.config.v1.Table.IdleTimeoutBehavior\x12\x16\n\x0eis_const_table\x18\n \x01(\x08\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\"9\n\x13IdleTimeoutBehavior\x12\x0e\n\nNO_TIMEOUT\x10\x00\x12\x12\n\x0eNOTIFY_CONTROL\x10\x01\"\x9c\x02\n\tActionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.p4.config.v1.ActionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x81\x03\n\x06\x41\x63tion\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.p4.config.v1.Action.Param\x1a\xa0\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x82\x03\n\rActionProfile\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x11\n\ttable_ids\x18\x02 \x03(\r\x12\x15\n\rwith_selector\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x16\n\x0emax_group_size\x18\x05 \x01(\x05\x12\x42\n\x0esum_of_weights\x18\x06 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfWeightsH\x00\x12\x42\n\x0esum_of_members\x18\x07 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfMembersH\x00\x1a\x0e\n\x0cSumOfWeights\x1a\x44\n\x0cSumOfMembers\x12\x1e\n\x11max_member_weight\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x14\n\x12_max_member_weightB\x19\n\x17selector_size_semantics\"v\n\x0b\x43ounterSpec\x12,\n\x04unit\x18\x01 \x01(\x0e\x32\x1e.p4.config.v1.CounterSpec.Unit\"9\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\x12\x08\n\x04\x42OTH\x10\x03\"\x9e\x01\n\x07\x43ounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"{\n\rDirectCounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"h\n\tMeterSpec\x12*\n\x04unit\x18\x01 \x01(\x0e\x32\x1c.p4.config.v1.MeterSpec.Unit\"/\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\"\x9a\x01\n\x05Meter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"w\n\x0b\x44irectMeter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"\x83\x03\n\x18\x43ontrollerPacketMetadata\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x41\n\x08metadata\x18\x02 \x03(\x0b\x32/.p4.config.v1.ControllerPacketMetadata.Metadata\x1a\xf9\x01\n\x08Metadata\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12,\n\ttype_name\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x08ValueSet\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12\x0c\n\x04size\x18\x03 \x01(\x05\"\xa7\x01\n\x08Register\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"c\n\x06\x44igest\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xf2\x03\n\x11GenericMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08repeated\x18\x03 \x01(\x08\x12\x34\n\ttype_spec\x18\x04 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12?\n\nmatch_type\x18\x05 \x01(\x0e\x32).p4.config.v1.GenericMatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x06 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x07 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x08 \x03(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\x9a\x02\n\x08UnionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12+\n\x05scope\x18\x03 \x01(\x0e\x32\x1c.p4.config.v1.UnionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x87\x03\n\x05Union\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.p4.config.v1.Union.Param\x1a\xa8\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08repeated\x18\x03 \x01(\x08\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12\x34\n\ttype_spec\x18\x05 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"\xa7\x01\n\x0cGenericTable\x12\x1d\n\x15generic_table_type_id\x18\x01 \x01(\r\x12\x1f\n\x17generic_table_type_name\x18\x02 \x01(\t\x12 \n\x18generic_table_properties\x18\x03 \x03(\t\x12\x35\n\tinstances\x18\x04 \x03(\x0b\x32\".p4.config.v1.GenericTableInstance\"\x89\x02\n\x14GenericTableInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12=\n\x14generic_match_fields\x18\x02 \x03(\x0b\x32\x1f.p4.config.v1.GenericMatchField\x12*\n\nunion_refs\x18\x03 \x03(\x0b\x32\x16.p4.config.v1.UnionRef\x12\x1e\n\x16\x63onst_default_union_id\x18\x04 \x01(\r\x12\x0c\n\x04size\x18\x05 \x01(\x03\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' + serialized_pb=b'\n\x19p4/config/v1/p4info.proto\x12\x0cp4.config.v1\x1a\x19google/protobuf/any.proto\x1a\x1ap4/config/v1/p4types.proto\"\xe1\x05\n\x06P4Info\x12\'\n\x08pkg_info\x18\x01 \x01(\x0b\x32\x15.p4.config.v1.PkgInfo\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.p4.config.v1.Table\x12%\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\x14.p4.config.v1.Action\x12\x34\n\x0f\x61\x63tion_profiles\x18\x04 \x03(\x0b\x32\x1b.p4.config.v1.ActionProfile\x12\'\n\x08\x63ounters\x18\x05 \x03(\x0b\x32\x15.p4.config.v1.Counter\x12\x34\n\x0f\x64irect_counters\x18\x06 \x03(\x0b\x32\x1b.p4.config.v1.DirectCounter\x12#\n\x06meters\x18\x07 \x03(\x0b\x32\x13.p4.config.v1.Meter\x12\x30\n\rdirect_meters\x18\x08 \x03(\x0b\x32\x19.p4.config.v1.DirectMeter\x12J\n\x1a\x63ontroller_packet_metadata\x18\t \x03(\x0b\x32&.p4.config.v1.ControllerPacketMetadata\x12*\n\nvalue_sets\x18\n \x03(\x0b\x32\x16.p4.config.v1.ValueSet\x12)\n\tregisters\x18\x0b \x03(\x0b\x32\x16.p4.config.v1.Register\x12%\n\x07\x64igests\x18\x0c \x03(\x0b\x32\x14.p4.config.v1.Digest\x12\x32\n\x0egeneric_tables\x18\r \x03(\x0b\x32\x1a.p4.config.v1.GenericTable\x12#\n\x06unions\x18\x0e \x03(\x0b\x32\x13.p4.config.v1.Union\x12%\n\x07\x65xterns\x18\x64 \x03(\x0b\x32\x14.p4.config.v1.Extern\x12,\n\ttype_info\x18\xc8\x01 \x01(\x0b\x32\x18.p4.config.v1.P4TypeInfo\"3\n\rDocumentation\x12\r\n\x05\x62rief\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\xa9\x02\n\x07PkgInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12(\n\x03\x64oc\x18\x03 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x0c\n\x04\x61rch\x18\x05 \x01(\t\x12\x14\n\x0corganization\x18\x06 \x01(\t\x12\x0f\n\x07\x63ontact\x18\x07 \x01(\t\x12\x0b\n\x03url\x18\x08 \x01(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x9a\x02\n\x05P4Ids\"\x90\x02\n\x06Prefix\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TION\x10\x01\x12\t\n\x05TABLE\x10\x02\x12\r\n\tVALUE_SET\x10\x03\x12\x15\n\x11\x43ONTROLLER_HEADER\x10\x04\x12\x15\n\x11PSA_EXTERNS_START\x10\x10\x12\x12\n\x0e\x41\x43TION_PROFILE\x10\x11\x12\x0b\n\x07\x43OUNTER\x10\x12\x12\x12\n\x0e\x44IRECT_COUNTER\x10\x13\x12\t\n\x05METER\x10\x14\x12\x10\n\x0c\x44IRECT_METER\x10\x15\x12\x0c\n\x08REGISTER\x10\x16\x12\n\n\x06\x44IGEST\x10\x17\x12\x11\n\rGENERIC_TABLE\x10\x18\x12\x18\n\x13OTHER_EXTERNS_START\x10\x80\x01\x12\x08\n\x03MAX\x10\xff\x01\"@\n\x10GenericTableType\",\n\x06Prefix\x12\x18\n\x14GENERIC_TABLES_START\x10\x00\x12\x08\n\x03MAX\x10\xff\x01\"\xf2\x01\n\x08Preamble\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x06\x45xtern\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xtern_type_name\x18\x02 \x01(\t\x12/\n\tinstances\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.ExternInstance\"^\n\x0e\x45xternInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"\xdc\x03\n\nMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12\x38\n\nmatch_type\x18\x05 \x01(\x0e\x32\".p4.config.v1.MatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x07 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x08 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\xc1\x03\n\x05Table\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12.\n\x0cmatch_fields\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12,\n\x0b\x61\x63tion_refs\x18\x03 \x03(\x0b\x32\x17.p4.config.v1.ActionRef\x12\x1f\n\x17\x63onst_default_action_id\x18\x04 \x01(\r\x12\x19\n\x11implementation_id\x18\x06 \x01(\r\x12\x1b\n\x13\x64irect_resource_ids\x18\x07 \x03(\r\x12\x0c\n\x04size\x18\x08 \x01(\x03\x12\x46\n\x15idle_timeout_behavior\x18\t \x01(\x0e\x32\'.p4.config.v1.Table.IdleTimeoutBehavior\x12\x16\n\x0eis_const_table\x18\n \x01(\x08\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\"9\n\x13IdleTimeoutBehavior\x12\x0e\n\nNO_TIMEOUT\x10\x00\x12\x12\n\x0eNOTIFY_CONTROL\x10\x01\"\x9c\x02\n\tActionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.p4.config.v1.ActionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x81\x03\n\x06\x41\x63tion\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.p4.config.v1.Action.Param\x1a\xa0\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x82\x03\n\rActionProfile\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x11\n\ttable_ids\x18\x02 \x03(\r\x12\x15\n\rwith_selector\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x16\n\x0emax_group_size\x18\x05 \x01(\x05\x12\x42\n\x0esum_of_weights\x18\x06 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfWeightsH\x00\x12\x42\n\x0esum_of_members\x18\x07 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfMembersH\x00\x1a\x0e\n\x0cSumOfWeights\x1a\x44\n\x0cSumOfMembers\x12\x1e\n\x11max_member_weight\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x14\n\x12_max_member_weightB\x19\n\x17selector_size_semantics\"v\n\x0b\x43ounterSpec\x12,\n\x04unit\x18\x01 \x01(\x0e\x32\x1e.p4.config.v1.CounterSpec.Unit\"9\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\x12\x08\n\x04\x42OTH\x10\x03\"\x9e\x01\n\x07\x43ounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"{\n\rDirectCounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"h\n\tMeterSpec\x12*\n\x04unit\x18\x01 \x01(\x0e\x32\x1c.p4.config.v1.MeterSpec.Unit\"/\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\"\x9a\x01\n\x05Meter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"w\n\x0b\x44irectMeter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"\x83\x03\n\x18\x43ontrollerPacketMetadata\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x41\n\x08metadata\x18\x02 \x03(\x0b\x32/.p4.config.v1.ControllerPacketMetadata.Metadata\x1a\xf9\x01\n\x08Metadata\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12,\n\ttype_name\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x08ValueSet\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12\x0c\n\x04size\x18\x03 \x01(\x05\"\xa7\x01\n\x08Register\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"c\n\x06\x44igest\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xe0\x03\n\x11GenericMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x34\n\ttype_spec\x18\x03 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12?\n\nmatch_type\x18\x04 \x01(\x0e\x32).p4.config.v1.GenericMatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x05 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x07 \x03(\t\x12\x42\n\x16structured_annotations\x18\x08 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\t \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\x9a\x02\n\x08UnionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12+\n\x05scope\x18\x03 \x01(\x0e\x32\x1c.p4.config.v1.UnionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\xf5\x02\n\x05Union\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.p4.config.v1.Union.Param\x1a\x96\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12\x34\n\ttype_spec\x18\x04 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"\xa7\x01\n\x0cGenericTable\x12\x1d\n\x15generic_table_type_id\x18\x01 \x01(\r\x12\x1f\n\x17generic_table_type_name\x18\x02 \x01(\t\x12 \n\x18generic_table_properties\x18\x03 \x03(\t\x12\x35\n\tinstances\x18\x04 \x03(\x0b\x32\".p4.config.v1.GenericTableInstance\"\x89\x02\n\x14GenericTableInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12=\n\x14generic_match_fields\x18\x02 \x03(\x0b\x32\x1f.p4.config.v1.GenericMatchField\x12*\n\nunion_refs\x18\x03 \x03(\x0b\x32\x16.p4.config.v1.UnionRef\x12\x1e\n\x16\x63onst_default_union_id\x18\x04 \x01(\r\x12\x0c\n\x04size\x18\x05 \x01(\x03\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' , dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,p4_dot_config_dot_v1_dot_p4types__pb2.DESCRIPTOR,]) @@ -1923,57 +1923,50 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='repeated', full_name='p4.config.v1.GenericMatchField.repeated', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type_spec', full_name='p4.config.v1.GenericMatchField.type_spec', index=3, - number=4, type=11, cpp_type=10, label=1, + name='type_spec', full_name='p4.config.v1.GenericMatchField.type_spec', index=2, + number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='match_type', full_name='p4.config.v1.GenericMatchField.match_type', index=4, - number=5, type=14, cpp_type=8, label=1, + name='match_type', full_name='p4.config.v1.GenericMatchField.match_type', index=3, + number=4, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='other_match_type', full_name='p4.config.v1.GenericMatchField.other_match_type', index=5, - number=6, type=9, cpp_type=9, label=1, + name='other_match_type', full_name='p4.config.v1.GenericMatchField.other_match_type', index=4, + number=5, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='doc', full_name='p4.config.v1.GenericMatchField.doc', index=6, - number=7, type=11, cpp_type=10, label=1, + name='doc', full_name='p4.config.v1.GenericMatchField.doc', index=5, + number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='annotations', full_name='p4.config.v1.GenericMatchField.annotations', index=7, - number=8, type=9, cpp_type=9, label=3, + name='annotations', full_name='p4.config.v1.GenericMatchField.annotations', index=6, + number=7, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='structured_annotations', full_name='p4.config.v1.GenericMatchField.structured_annotations', index=8, - number=9, type=11, cpp_type=10, label=3, + name='structured_annotations', full_name='p4.config.v1.GenericMatchField.structured_annotations', index=7, + number=8, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='annotation_locations', full_name='p4.config.v1.GenericMatchField.annotation_locations', index=9, - number=10, type=11, cpp_type=10, label=3, + name='annotation_locations', full_name='p4.config.v1.GenericMatchField.annotation_locations', index=8, + number=9, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, @@ -1997,7 +1990,7 @@ fields=[]), ], serialized_start=5548, - serialized_end=6046, + serialized_end=6028, ) @@ -2057,8 +2050,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6049, - serialized_end=6331, + serialized_start=6031, + serialized_end=6313, ) @@ -2085,43 +2078,36 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='repeated', full_name='p4.config.v1.Union.Param.repeated', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='annotations', full_name='p4.config.v1.Union.Param.annotations', index=3, - number=4, type=9, cpp_type=9, label=3, + name='annotations', full_name='p4.config.v1.Union.Param.annotations', index=2, + number=3, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='type_spec', full_name='p4.config.v1.Union.Param.type_spec', index=4, - number=5, type=11, cpp_type=10, label=1, + name='type_spec', full_name='p4.config.v1.Union.Param.type_spec', index=3, + number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='doc', full_name='p4.config.v1.Union.Param.doc', index=5, - number=6, type=11, cpp_type=10, label=1, + name='doc', full_name='p4.config.v1.Union.Param.doc', index=4, + number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='structured_annotations', full_name='p4.config.v1.Union.Param.structured_annotations', index=6, - number=7, type=11, cpp_type=10, label=3, + name='structured_annotations', full_name='p4.config.v1.Union.Param.structured_annotations', index=5, + number=6, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='annotation_locations', full_name='p4.config.v1.Union.Param.annotation_locations', index=7, - number=8, type=11, cpp_type=10, label=3, + name='annotation_locations', full_name='p4.config.v1.Union.Param.annotation_locations', index=6, + number=7, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, @@ -2138,8 +2124,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6429, - serialized_end=6725, + serialized_start=6411, + serialized_end=6689, ) _UNION = _descriptor.Descriptor( @@ -2176,8 +2162,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6334, - serialized_end=6725, + serialized_start=6316, + serialized_end=6689, ) @@ -2229,8 +2215,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6728, - serialized_end=6895, + serialized_start=6692, + serialized_end=6859, ) @@ -2296,8 +2282,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6898, - serialized_end=7163, + serialized_start=6862, + serialized_end=7127, ) _P4INFO.fields_by_name['pkg_info'].message_type = _PKGINFO diff --git a/py/p4/config/v1/p4types_pb2.py b/py/p4/config/v1/p4types_pb2.py index 59b9b31b..4e68165a 100644 --- a/py/p4/config/v1/p4types_pb2.py +++ b/py/p4/config/v1/p4types_pb2.py @@ -19,7 +19,7 @@ syntax='proto3', serialized_options=b'Z+github.com/p4lang/p4runtime/go/p4/config/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x1ap4/config/v1/p4types.proto\x12\x0cp4.config.v1\"\xa1\x07\n\nP4TypeInfo\x12\x36\n\x07structs\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.StructsEntry\x12\x36\n\x07headers\x18\x02 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.HeadersEntry\x12\x41\n\rheader_unions\x18\x03 \x03(\x0b\x32*.p4.config.v1.P4TypeInfo.HeaderUnionsEntry\x12\x32\n\x05\x65nums\x18\x04 \x03(\x0b\x32#.p4.config.v1.P4TypeInfo.EnumsEntry\x12,\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x1d.p4.config.v1.P4ErrorTypeSpec\x12K\n\x12serializable_enums\x18\x06 \x03(\x0b\x32/.p4.config.v1.P4TypeInfo.SerializableEnumsEntry\x12\x39\n\tnew_types\x18\x07 \x03(\x0b\x32&.p4.config.v1.P4TypeInfo.NewTypesEntry\x1aN\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4StructTypeSpec:\x02\x38\x01\x1aN\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4HeaderTypeSpec:\x02\x38\x01\x1aX\n\x11HeaderUnionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.P4HeaderUnionTypeSpec:\x02\x38\x01\x1aJ\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4EnumTypeSpec:\x02\x38\x01\x1a\x62\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.p4.config.v1.P4SerializableEnumTypeSpec:\x02\x38\x01\x1aL\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4NewTypeSpec:\x02\x38\x01\"\x83\x05\n\x0eP4DataTypeSpec\x12:\n\tbitstring\x18\x01 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpecH\x00\x12(\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.P4BoolTypeH\x00\x12.\n\x05tuple\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.P4TupleTypeSpecH\x00\x12+\n\x06struct\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12+\n\x06header\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12\x31\n\x0cheader_union\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12;\n\x0cheader_stack\x18\x07 \x01(\x0b\x32#.p4.config.v1.P4HeaderStackTypeSpecH\x00\x12\x46\n\x12header_union_stack\x18\x08 \x01(\x0b\x32(.p4.config.v1.P4HeaderUnionStackTypeSpecH\x00\x12)\n\x04\x65num\x18\t \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12*\n\x05\x65rror\x18\n \x01(\x0b\x32\x19.p4.config.v1.P4ErrorTypeH\x00\x12\x36\n\x11serializable_enum\x18\x0b \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12-\n\x08new_type\x18\x0c \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x42\x0b\n\ttype_spec\"\x1b\n\x0bP4NamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x0c\n\nP4BoolType\"\r\n\x0bP4ErrorType\"\xc5\x02\n\x17P4BitstringLikeTypeSpec\x12*\n\x03\x62it\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpecH\x00\x12*\n\x03int\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4IntTypeSpecH\x00\x12\x30\n\x06varbit\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.P4VarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"!\n\rP4BitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"!\n\rP4IntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"(\n\x10P4VarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\"@\n\x0fP4TupleTypeSpec\x12-\n\x07members\x18\x01 \x03(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xa8\x02\n\x10P4StructTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4StructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aG\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xb1\x02\n\x10P4HeaderTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4HeaderTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aP\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\ttype_spec\x18\x02 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpec\"\xac\x02\n\x15P4HeaderUnionTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.P4HeaderUnionTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\x41\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x06header\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"P\n\x15P4HeaderStackTypeSpec\x12)\n\x06header\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"[\n\x1aP4HeaderUnionStackTypeSpec\x12/\n\x0cheader_union\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"D\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.Expression\"@\n\x10KeyValuePairList\x12,\n\x08kv_pairs\x18\x01 \x03(\x0b\x32\x1a.p4.config.v1.KeyValuePair\"Z\n\nExpression\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x15\n\x0bint64_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value\"?\n\x0e\x45xpressionList\x12-\n\x0b\x65xpressions\x18\x01 \x03(\x0b\x32\x18.p4.config.v1.Expression\"\xd4\x01\n\x14StructuredAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x37\n\x0f\x65xpression_list\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.ExpressionListH\x00\x12\x36\n\x0ckv_pair_list\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.KeyValuePairListH\x00\x12\x35\n\x0fsource_location\x18\x04 \x01(\x0b\x32\x1c.p4.config.v1.SourceLocationB\x06\n\x04\x62ody\"<\n\x0eSourceLocation\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\x05\x12\x0e\n\x06\x63olumn\x18\x03 \x01(\x05\"\x89\x03\n\x0eP4EnumTypeSpec\x12\x34\n\x07members\x18\x01 \x03(\x0b\x32#.p4.config.v1.P4EnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xab\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xe6\x03\n\x1aP4SerializableEnumTypeSpec\x12\x34\n\x0funderlying_type\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpec\x12@\n\x07members\x18\x02 \x03(\x0b\x32/.p4.config.v1.P4SerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xba\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\"\n\x0fP4ErrorTypeSpec\x12\x0f\n\x07members\x18\x01 \x03(\t\"\x98\x01\n\x14P4NewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12\x42\n\nsdn_string\x18\x03 \x01(\x0b\x32,.p4.config.v1.P4NewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xac\x02\n\rP4NewTypeSpec\x12\x35\n\roriginal_type\x18\x01 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x12=\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\".p4.config.v1.P4NewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentation\"\x85\x06\n\x0fGenericTypeInfo\x12;\n\x07structs\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericTypeInfo.StructsEntry\x12\x37\n\x05lists\x18\x02 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.ListsEntry\x12\x37\n\x05\x65nums\x18\x03 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.EnumsEntry\x12P\n\x12serializable_enums\x18\x04 \x03(\x0b\x32\x34.p4.config.v1.GenericTypeInfo.SerializableEnumsEntry\x12>\n\tnew_types\x18\x05 \x03(\x0b\x32+.p4.config.v1.GenericTypeInfo.NewTypesEntry\x1aS\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.GenericStructTypeSpec:\x02\x38\x01\x1aO\n\nListsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericListTypeSpec:\x02\x38\x01\x1aO\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericEnumTypeSpec:\x02\x38\x01\x1ag\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12<\n\x05value\x18\x02 \x01(\x0b\x32-.p4.config.v1.GenericSerializableEnumTypeSpec:\x02\x38\x01\x1aQ\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericNewTypeSpec:\x02\x38\x01\"\xe2\x04\n\x13GenericDataTypeSpec\x12?\n\tbitstring\x18\x01 \x01(\x0b\x32*.p4.config.v1.GenericBitstringLikeTypeSpecH\x00\x12/\n\x05\x66loat\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.GenericFloatTypeH\x00\x12-\n\x04\x62ool\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.GenericBoolTypeH\x00\x12\x30\n\x06struct\x18\x04 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04list\x18\x05 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x37\n\runordered_set\x18\x06 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x30\n\x06string\x18\x07 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04\x65num\x18\x08 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12;\n\x11serializable_enum\x18\t \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x32\n\x08new_type\x18\n \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12/\n\x07p4_type\x18\x0b \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x42\x0b\n\ttype_spec\" \n\x10GenericNamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x11\n\x0fGenericBoolType\"\x12\n\x10GenericFloatType\"\xd9\x02\n\x1cGenericBitstringLikeTypeSpec\x12/\n\x03\x62it\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpecH\x00\x12/\n\x03int\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericIntTypeSpecH\x00\x12\x35\n\x06varbit\x18\x03 \x01(\x0b\x32#.p4.config.v1.GenericVarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"=\n\x12GenericBitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"=\n\x12GenericIntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"D\n\x15GenericVarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"\xb7\x02\n\x15GenericStructTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericStructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aL\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x34\n\ttype_spec\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\"\x84\x02\n\x13GenericListTypeSpec\x12\x34\n\ttype_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x8c\x02\n\x1bGenericUnorderedSetTypeSpec\x12\x34\n\ttype_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xda\x01\n\x11GenericStringSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08min_size\x18\x02 \x01(\x05\x12\x10\n\x08max_size\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xaa\x03\n\x13GenericEnumTypeSpec\x12\x39\n\x07members\x18\x01 \x03(\x0b\x32(.p4.config.v1.GenericEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xc2\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x8c\x04\n\x1fGenericSerializableEnumTypeSpec\x12\x39\n\x0funderlying_type\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpec\x12\x45\n\x07members\x18\x02 \x03(\x0b\x32\x34.p4.config.v1.GenericSerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xd1\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x15\n\rdefault_value\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xa2\x01\n\x19GenericNewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12G\n\nsdn_string\x18\x03 \x01(\x0b\x32\x31.p4.config.v1.GenericNewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xbb\x02\n\x12GenericNewTypeSpec\x12:\n\roriginal_type\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpecH\x00\x12\x42\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\'.p4.config.v1.GenericNewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentationB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' + serialized_pb=b'\n\x1ap4/config/v1/p4types.proto\x12\x0cp4.config.v1\"\xa1\x07\n\nP4TypeInfo\x12\x36\n\x07structs\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.StructsEntry\x12\x36\n\x07headers\x18\x02 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.HeadersEntry\x12\x41\n\rheader_unions\x18\x03 \x03(\x0b\x32*.p4.config.v1.P4TypeInfo.HeaderUnionsEntry\x12\x32\n\x05\x65nums\x18\x04 \x03(\x0b\x32#.p4.config.v1.P4TypeInfo.EnumsEntry\x12,\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x1d.p4.config.v1.P4ErrorTypeSpec\x12K\n\x12serializable_enums\x18\x06 \x03(\x0b\x32/.p4.config.v1.P4TypeInfo.SerializableEnumsEntry\x12\x39\n\tnew_types\x18\x07 \x03(\x0b\x32&.p4.config.v1.P4TypeInfo.NewTypesEntry\x1aN\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4StructTypeSpec:\x02\x38\x01\x1aN\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4HeaderTypeSpec:\x02\x38\x01\x1aX\n\x11HeaderUnionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.P4HeaderUnionTypeSpec:\x02\x38\x01\x1aJ\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4EnumTypeSpec:\x02\x38\x01\x1a\x62\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.p4.config.v1.P4SerializableEnumTypeSpec:\x02\x38\x01\x1aL\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4NewTypeSpec:\x02\x38\x01\"\x83\x05\n\x0eP4DataTypeSpec\x12:\n\tbitstring\x18\x01 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpecH\x00\x12(\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.P4BoolTypeH\x00\x12.\n\x05tuple\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.P4TupleTypeSpecH\x00\x12+\n\x06struct\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12+\n\x06header\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12\x31\n\x0cheader_union\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12;\n\x0cheader_stack\x18\x07 \x01(\x0b\x32#.p4.config.v1.P4HeaderStackTypeSpecH\x00\x12\x46\n\x12header_union_stack\x18\x08 \x01(\x0b\x32(.p4.config.v1.P4HeaderUnionStackTypeSpecH\x00\x12)\n\x04\x65num\x18\t \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12*\n\x05\x65rror\x18\n \x01(\x0b\x32\x19.p4.config.v1.P4ErrorTypeH\x00\x12\x36\n\x11serializable_enum\x18\x0b \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12-\n\x08new_type\x18\x0c \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x42\x0b\n\ttype_spec\"\x1b\n\x0bP4NamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x0c\n\nP4BoolType\"\r\n\x0bP4ErrorType\"\xc5\x02\n\x17P4BitstringLikeTypeSpec\x12*\n\x03\x62it\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpecH\x00\x12*\n\x03int\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4IntTypeSpecH\x00\x12\x30\n\x06varbit\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.P4VarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"!\n\rP4BitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"!\n\rP4IntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"(\n\x10P4VarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\"@\n\x0fP4TupleTypeSpec\x12-\n\x07members\x18\x01 \x03(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xa8\x02\n\x10P4StructTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4StructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aG\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xb1\x02\n\x10P4HeaderTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4HeaderTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aP\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\ttype_spec\x18\x02 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpec\"\xac\x02\n\x15P4HeaderUnionTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.P4HeaderUnionTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\x41\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x06header\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"P\n\x15P4HeaderStackTypeSpec\x12)\n\x06header\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"[\n\x1aP4HeaderUnionStackTypeSpec\x12/\n\x0cheader_union\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"D\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.Expression\"@\n\x10KeyValuePairList\x12,\n\x08kv_pairs\x18\x01 \x03(\x0b\x32\x1a.p4.config.v1.KeyValuePair\"Z\n\nExpression\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x15\n\x0bint64_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value\"?\n\x0e\x45xpressionList\x12-\n\x0b\x65xpressions\x18\x01 \x03(\x0b\x32\x18.p4.config.v1.Expression\"\xd4\x01\n\x14StructuredAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x37\n\x0f\x65xpression_list\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.ExpressionListH\x00\x12\x36\n\x0ckv_pair_list\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.KeyValuePairListH\x00\x12\x35\n\x0fsource_location\x18\x04 \x01(\x0b\x32\x1c.p4.config.v1.SourceLocationB\x06\n\x04\x62ody\"<\n\x0eSourceLocation\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\x05\x12\x0e\n\x06\x63olumn\x18\x03 \x01(\x05\"\x89\x03\n\x0eP4EnumTypeSpec\x12\x34\n\x07members\x18\x01 \x03(\x0b\x32#.p4.config.v1.P4EnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xab\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xe6\x03\n\x1aP4SerializableEnumTypeSpec\x12\x34\n\x0funderlying_type\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpec\x12@\n\x07members\x18\x02 \x03(\x0b\x32/.p4.config.v1.P4SerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xba\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\"\n\x0fP4ErrorTypeSpec\x12\x0f\n\x07members\x18\x01 \x03(\t\"\x98\x01\n\x14P4NewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12\x42\n\nsdn_string\x18\x03 \x01(\x0b\x32,.p4.config.v1.P4NewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xac\x02\n\rP4NewTypeSpec\x12\x35\n\roriginal_type\x18\x01 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x12=\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\".p4.config.v1.P4NewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentation\"\xb0\x07\n\x0fGenericTypeInfo\x12;\n\x07structs\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericTypeInfo.StructsEntry\x12\x37\n\x05lists\x18\x02 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.ListsEntry\x12H\n\x0eunordered_sets\x18\x03 \x03(\x0b\x32\x30.p4.config.v1.GenericTypeInfo.UnorderedSetsEntry\x12\x37\n\x05\x65nums\x18\x04 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.EnumsEntry\x12P\n\x12serializable_enums\x18\x05 \x03(\x0b\x32\x34.p4.config.v1.GenericTypeInfo.SerializableEnumsEntry\x12>\n\tnew_types\x18\x06 \x03(\x0b\x32+.p4.config.v1.GenericTypeInfo.NewTypesEntry\x1aS\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.GenericStructTypeSpec:\x02\x38\x01\x1aO\n\nListsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericListTypeSpec:\x02\x38\x01\x1a_\n\x12UnorderedSetsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).p4.config.v1.GenericUnorderedSetTypeSpec:\x02\x38\x01\x1aO\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericEnumTypeSpec:\x02\x38\x01\x1ag\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12<\n\x05value\x18\x02 \x01(\x0b\x32-.p4.config.v1.GenericSerializableEnumTypeSpec:\x02\x38\x01\x1aQ\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericNewTypeSpec:\x02\x38\x01\"\x80\x04\n\x13GenericDataTypeSpec\x12?\n\tbitstring\x18\x01 \x01(\x0b\x32*.p4.config.v1.GenericBitstringLikeTypeSpecH\x00\x12-\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x1d.p4.config.v1.GenericBoolTypeH\x00\x12\x30\n\x06struct\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04list\x18\x04 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x37\n\runordered_set\x18\x05 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x30\n\x06string\x18\x06 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04\x65num\x18\x07 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12;\n\x11serializable_enum\x18\x08 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x32\n\x08new_type\x18\t \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x42\x0b\n\ttype_spec\" \n\x10GenericNamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"(\n\x0fGenericBoolType\x12\x15\n\rdefault_value\x18\x01 \x01(\x05\"\xd9\x02\n\x1cGenericBitstringLikeTypeSpec\x12/\n\x03\x62it\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpecH\x00\x12/\n\x03int\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericIntTypeSpecH\x00\x12\x35\n\x06varbit\x18\x03 \x01(\x0b\x32#.p4.config.v1.GenericVarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"=\n\x12GenericBitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"=\n\x12GenericIntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"D\n\x15GenericVarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"\xc3\x02\n\x15GenericStructTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericStructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aX\n\x06Member\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x34\n\ttype_spec\x18\x03 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\"\x8c\x02\n\x13GenericListTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x94\x02\n\x1bGenericUnorderedSetTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xda\x01\n\x11GenericStringSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08min_size\x18\x02 \x01(\x05\x12\x10\n\x08max_size\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xaa\x03\n\x13GenericEnumTypeSpec\x12\x39\n\x07members\x18\x01 \x03(\x0b\x32(.p4.config.v1.GenericEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xc2\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x8c\x04\n\x1fGenericSerializableEnumTypeSpec\x12\x39\n\x0funderlying_type\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpec\x12\x45\n\x07members\x18\x02 \x03(\x0b\x32\x34.p4.config.v1.GenericSerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xd1\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x15\n\rdefault_value\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xa2\x01\n\x19GenericNewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12G\n\nsdn_string\x18\x03 \x01(\x0b\x32\x31.p4.config.v1.GenericNewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xbb\x02\n\x12GenericNewTypeSpec\x12:\n\roriginal_type\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpecH\x00\x12\x42\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\'.p4.config.v1.GenericNewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentationB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' ) @@ -1762,8 +1762,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5561, - serialized_end=5644, + serialized_start=5635, + serialized_end=5718, ) _GENERICTYPEINFO_LISTSENTRY = _descriptor.Descriptor( @@ -1800,8 +1800,46 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5646, - serialized_end=5725, + serialized_start=5720, + serialized_end=5799, +) + +_GENERICTYPEINFO_UNORDEREDSETSENTRY = _descriptor.Descriptor( + name='UnorderedSetsEntry', + full_name='p4.config.v1.GenericTypeInfo.UnorderedSetsEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='p4.config.v1.GenericTypeInfo.UnorderedSetsEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='p4.config.v1.GenericTypeInfo.UnorderedSetsEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=b'8\001', + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5801, + serialized_end=5896, ) _GENERICTYPEINFO_ENUMSENTRY = _descriptor.Descriptor( @@ -1838,8 +1876,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5727, - serialized_end=5806, + serialized_start=5898, + serialized_end=5977, ) _GENERICTYPEINFO_SERIALIZABLEENUMSENTRY = _descriptor.Descriptor( @@ -1876,8 +1914,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5808, - serialized_end=5911, + serialized_start=5979, + serialized_end=6082, ) _GENERICTYPEINFO_NEWTYPESENTRY = _descriptor.Descriptor( @@ -1914,8 +1952,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5913, - serialized_end=5994, + serialized_start=6084, + serialized_end=6165, ) _GENERICTYPEINFO = _descriptor.Descriptor( @@ -1941,30 +1979,37 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='enums', full_name='p4.config.v1.GenericTypeInfo.enums', index=2, + name='unordered_sets', full_name='p4.config.v1.GenericTypeInfo.unordered_sets', index=2, number=3, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='serializable_enums', full_name='p4.config.v1.GenericTypeInfo.serializable_enums', index=3, + name='enums', full_name='p4.config.v1.GenericTypeInfo.enums', index=3, number=4, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='new_types', full_name='p4.config.v1.GenericTypeInfo.new_types', index=4, + name='serializable_enums', full_name='p4.config.v1.GenericTypeInfo.serializable_enums', index=4, number=5, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='new_types', full_name='p4.config.v1.GenericTypeInfo.new_types', index=5, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], - nested_types=[_GENERICTYPEINFO_STRUCTSENTRY, _GENERICTYPEINFO_LISTSENTRY, _GENERICTYPEINFO_ENUMSENTRY, _GENERICTYPEINFO_SERIALIZABLEENUMSENTRY, _GENERICTYPEINFO_NEWTYPESENTRY, ], + nested_types=[_GENERICTYPEINFO_STRUCTSENTRY, _GENERICTYPEINFO_LISTSENTRY, _GENERICTYPEINFO_UNORDEREDSETSENTRY, _GENERICTYPEINFO_ENUMSENTRY, _GENERICTYPEINFO_SERIALIZABLEENUMSENTRY, _GENERICTYPEINFO_NEWTYPESENTRY, ], enum_types=[ ], serialized_options=None, @@ -1974,7 +2019,7 @@ oneofs=[ ], serialized_start=5221, - serialized_end=5994, + serialized_end=6165, ) @@ -1994,75 +2039,61 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='float', full_name='p4.config.v1.GenericDataTypeSpec.float', index=1, + name='bool', full_name='p4.config.v1.GenericDataTypeSpec.bool', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='bool', full_name='p4.config.v1.GenericDataTypeSpec.bool', index=2, + name='struct', full_name='p4.config.v1.GenericDataTypeSpec.struct', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='struct', full_name='p4.config.v1.GenericDataTypeSpec.struct', index=3, + name='list', full_name='p4.config.v1.GenericDataTypeSpec.list', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='list', full_name='p4.config.v1.GenericDataTypeSpec.list', index=4, + name='unordered_set', full_name='p4.config.v1.GenericDataTypeSpec.unordered_set', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='unordered_set', full_name='p4.config.v1.GenericDataTypeSpec.unordered_set', index=5, + name='string', full_name='p4.config.v1.GenericDataTypeSpec.string', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='string', full_name='p4.config.v1.GenericDataTypeSpec.string', index=6, + name='enum', full_name='p4.config.v1.GenericDataTypeSpec.enum', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='enum', full_name='p4.config.v1.GenericDataTypeSpec.enum', index=7, + name='serializable_enum', full_name='p4.config.v1.GenericDataTypeSpec.serializable_enum', index=7, number=8, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='serializable_enum', full_name='p4.config.v1.GenericDataTypeSpec.serializable_enum', index=8, + name='new_type', full_name='p4.config.v1.GenericDataTypeSpec.new_type', index=8, number=9, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='new_type', full_name='p4.config.v1.GenericDataTypeSpec.new_type', index=9, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='p4_type', full_name='p4.config.v1.GenericDataTypeSpec.p4_type', index=10, - number=11, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -2080,8 +2111,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=5997, - serialized_end=6607, + serialized_start=6168, + serialized_end=6680, ) @@ -2112,8 +2143,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6609, - serialized_end=6641, + serialized_start=6682, + serialized_end=6714, ) @@ -2125,6 +2156,13 @@ containing_type=None, create_key=_descriptor._internal_create_key, fields=[ + _descriptor.FieldDescriptor( + name='default_value', full_name='p4.config.v1.GenericBoolType.default_value', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -2137,33 +2175,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6643, - serialized_end=6660, -) - - -_GENERICFLOATTYPE = _descriptor.Descriptor( - name='GenericFloatType', - full_name='p4.config.v1.GenericFloatType', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=6662, - serialized_end=6680, + serialized_start=6716, + serialized_end=6756, ) @@ -2234,8 +2247,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=6683, - serialized_end=7028, + serialized_start=6759, + serialized_end=7104, ) @@ -2273,8 +2286,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7030, - serialized_end=7091, + serialized_start=7106, + serialized_end=7167, ) @@ -2312,8 +2325,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7093, - serialized_end=7154, + serialized_start=7169, + serialized_end=7230, ) @@ -2351,8 +2364,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7156, - serialized_end=7224, + serialized_start=7232, + serialized_end=7300, ) @@ -2365,15 +2378,22 @@ create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( - name='name', full_name='p4.config.v1.GenericStructTypeSpec.Member.name', index=0, - number=1, type=9, cpp_type=9, label=1, + name='id', full_name='p4.config.v1.GenericStructTypeSpec.Member.id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.GenericStructTypeSpec.Member.name', index=1, + number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='type_spec', full_name='p4.config.v1.GenericStructTypeSpec.Member.type_spec', index=1, - number=2, type=11, cpp_type=10, label=1, + name='type_spec', full_name='p4.config.v1.GenericStructTypeSpec.Member.type_spec', index=2, + number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, @@ -2390,8 +2410,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7462, - serialized_end=7538, + serialized_start=7538, + serialized_end=7626, ) _GENERICSTRUCTTYPESPEC = _descriptor.Descriptor( @@ -2442,8 +2462,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7227, - serialized_end=7538, + serialized_start=7303, + serialized_end=7626, ) @@ -2456,7 +2476,7 @@ create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( - name='type_spec', full_name='p4.config.v1.GenericListTypeSpec.type_spec', index=0, + name='element_type_spec', full_name='p4.config.v1.GenericListTypeSpec.element_type_spec', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, @@ -2509,8 +2529,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7541, - serialized_end=7801, + serialized_start=7629, + serialized_end=7897, ) @@ -2523,7 +2543,7 @@ create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( - name='type_spec', full_name='p4.config.v1.GenericUnorderedSetTypeSpec.type_spec', index=0, + name='element_type_spec', full_name='p4.config.v1.GenericUnorderedSetTypeSpec.element_type_spec', index=0, number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, @@ -2576,8 +2596,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7804, - serialized_end=8072, + serialized_start=7900, + serialized_end=8176, ) @@ -2643,8 +2663,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8075, - serialized_end=8293, + serialized_start=8179, + serialized_end=8397, ) @@ -2703,8 +2723,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8528, - serialized_end=8722, + serialized_start=8632, + serialized_end=8826, ) _GENERICENUMTYPESPEC = _descriptor.Descriptor( @@ -2755,8 +2775,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8296, - serialized_end=8722, + serialized_start=8400, + serialized_end=8826, ) @@ -2822,8 +2842,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=9040, - serialized_end=9249, + serialized_start=9144, + serialized_end=9353, ) _GENERICSERIALIZABLEENUMTYPESPEC = _descriptor.Descriptor( @@ -2881,8 +2901,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8725, - serialized_end=9249, + serialized_start=8829, + serialized_end=9353, ) @@ -2956,8 +2976,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=9252, - serialized_end=9414, + serialized_start=9356, + serialized_end=9518, ) @@ -3021,8 +3041,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=9417, - serialized_end=9732, + serialized_start=9521, + serialized_end=9836, ) _P4TYPEINFO_STRUCTSENTRY.fields_by_name['value'].message_type = _P4STRUCTTYPESPEC @@ -3180,6 +3200,8 @@ _GENERICTYPEINFO_STRUCTSENTRY.containing_type = _GENERICTYPEINFO _GENERICTYPEINFO_LISTSENTRY.fields_by_name['value'].message_type = _GENERICLISTTYPESPEC _GENERICTYPEINFO_LISTSENTRY.containing_type = _GENERICTYPEINFO +_GENERICTYPEINFO_UNORDEREDSETSENTRY.fields_by_name['value'].message_type = _GENERICUNORDEREDSETTYPESPEC +_GENERICTYPEINFO_UNORDEREDSETSENTRY.containing_type = _GENERICTYPEINFO _GENERICTYPEINFO_ENUMSENTRY.fields_by_name['value'].message_type = _GENERICENUMTYPESPEC _GENERICTYPEINFO_ENUMSENTRY.containing_type = _GENERICTYPEINFO _GENERICTYPEINFO_SERIALIZABLEENUMSENTRY.fields_by_name['value'].message_type = _GENERICSERIALIZABLEENUMTYPESPEC @@ -3188,11 +3210,11 @@ _GENERICTYPEINFO_NEWTYPESENTRY.containing_type = _GENERICTYPEINFO _GENERICTYPEINFO.fields_by_name['structs'].message_type = _GENERICTYPEINFO_STRUCTSENTRY _GENERICTYPEINFO.fields_by_name['lists'].message_type = _GENERICTYPEINFO_LISTSENTRY +_GENERICTYPEINFO.fields_by_name['unordered_sets'].message_type = _GENERICTYPEINFO_UNORDEREDSETSENTRY _GENERICTYPEINFO.fields_by_name['enums'].message_type = _GENERICTYPEINFO_ENUMSENTRY _GENERICTYPEINFO.fields_by_name['serializable_enums'].message_type = _GENERICTYPEINFO_SERIALIZABLEENUMSENTRY _GENERICTYPEINFO.fields_by_name['new_types'].message_type = _GENERICTYPEINFO_NEWTYPESENTRY _GENERICDATATYPESPEC.fields_by_name['bitstring'].message_type = _GENERICBITSTRINGLIKETYPESPEC -_GENERICDATATYPESPEC.fields_by_name['float'].message_type = _GENERICFLOATTYPE _GENERICDATATYPESPEC.fields_by_name['bool'].message_type = _GENERICBOOLTYPE _GENERICDATATYPESPEC.fields_by_name['struct'].message_type = _GENERICNAMEDTYPE _GENERICDATATYPESPEC.fields_by_name['list'].message_type = _GENERICNAMEDTYPE @@ -3201,13 +3223,9 @@ _GENERICDATATYPESPEC.fields_by_name['enum'].message_type = _GENERICNAMEDTYPE _GENERICDATATYPESPEC.fields_by_name['serializable_enum'].message_type = _GENERICNAMEDTYPE _GENERICDATATYPESPEC.fields_by_name['new_type'].message_type = _GENERICNAMEDTYPE -_GENERICDATATYPESPEC.fields_by_name['p4_type'].message_type = _P4DATATYPESPEC _GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( _GENERICDATATYPESPEC.fields_by_name['bitstring']) _GENERICDATATYPESPEC.fields_by_name['bitstring'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] -_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( - _GENERICDATATYPESPEC.fields_by_name['float']) -_GENERICDATATYPESPEC.fields_by_name['float'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] _GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( _GENERICDATATYPESPEC.fields_by_name['bool']) _GENERICDATATYPESPEC.fields_by_name['bool'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] @@ -3232,9 +3250,6 @@ _GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( _GENERICDATATYPESPEC.fields_by_name['new_type']) _GENERICDATATYPESPEC.fields_by_name['new_type'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] -_GENERICDATATYPESPEC.oneofs_by_name['type_spec'].fields.append( - _GENERICDATATYPESPEC.fields_by_name['p4_type']) -_GENERICDATATYPESPEC.fields_by_name['p4_type'].containing_oneof = _GENERICDATATYPESPEC.oneofs_by_name['type_spec'] _GENERICBITSTRINGLIKETYPESPEC.fields_by_name['bit'].message_type = _GENERICBITTYPESPEC _GENERICBITSTRINGLIKETYPESPEC.fields_by_name['int'].message_type = _GENERICINTTYPESPEC _GENERICBITSTRINGLIKETYPESPEC.fields_by_name['varbit'].message_type = _GENERICVARBITTYPESPEC @@ -3254,10 +3269,10 @@ _GENERICSTRUCTTYPESPEC.fields_by_name['members'].message_type = _GENERICSTRUCTTYPESPEC_MEMBER _GENERICSTRUCTTYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION _GENERICSTRUCTTYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION -_GENERICLISTTYPESPEC.fields_by_name['type_spec'].message_type = _GENERICDATATYPESPEC +_GENERICLISTTYPESPEC.fields_by_name['element_type_spec'].message_type = _GENERICDATATYPESPEC _GENERICLISTTYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION _GENERICLISTTYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION -_GENERICUNORDEREDSETTYPESPEC.fields_by_name['type_spec'].message_type = _GENERICDATATYPESPEC +_GENERICUNORDEREDSETTYPESPEC.fields_by_name['element_type_spec'].message_type = _GENERICDATATYPESPEC _GENERICUNORDEREDSETTYPESPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION _GENERICUNORDEREDSETTYPESPEC.fields_by_name['structured_annotations'].message_type = _STRUCTUREDANNOTATION _GENERICSTRINGSPEC.fields_by_name['annotation_locations'].message_type = _SOURCELOCATION @@ -3323,7 +3338,6 @@ DESCRIPTOR.message_types_by_name['GenericDataTypeSpec'] = _GENERICDATATYPESPEC DESCRIPTOR.message_types_by_name['GenericNamedType'] = _GENERICNAMEDTYPE DESCRIPTOR.message_types_by_name['GenericBoolType'] = _GENERICBOOLTYPE -DESCRIPTOR.message_types_by_name['GenericFloatType'] = _GENERICFLOATTYPE DESCRIPTOR.message_types_by_name['GenericBitstringLikeTypeSpec'] = _GENERICBITSTRINGLIKETYPESPEC DESCRIPTOR.message_types_by_name['GenericBitTypeSpec'] = _GENERICBITTYPESPEC DESCRIPTOR.message_types_by_name['GenericIntTypeSpec'] = _GENERICINTTYPESPEC @@ -3632,6 +3646,13 @@ }) , + 'UnorderedSetsEntry' : _reflection.GeneratedProtocolMessageType('UnorderedSetsEntry', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTYPEINFO_UNORDEREDSETSENTRY, + '__module__' : 'p4.config.v1.p4types_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTypeInfo.UnorderedSetsEntry) + }) + , + 'EnumsEntry' : _reflection.GeneratedProtocolMessageType('EnumsEntry', (_message.Message,), { 'DESCRIPTOR' : _GENERICTYPEINFO_ENUMSENTRY, '__module__' : 'p4.config.v1.p4types_pb2' @@ -3659,6 +3680,7 @@ _sym_db.RegisterMessage(GenericTypeInfo) _sym_db.RegisterMessage(GenericTypeInfo.StructsEntry) _sym_db.RegisterMessage(GenericTypeInfo.ListsEntry) +_sym_db.RegisterMessage(GenericTypeInfo.UnorderedSetsEntry) _sym_db.RegisterMessage(GenericTypeInfo.EnumsEntry) _sym_db.RegisterMessage(GenericTypeInfo.SerializableEnumsEntry) _sym_db.RegisterMessage(GenericTypeInfo.NewTypesEntry) @@ -3684,13 +3706,6 @@ }) _sym_db.RegisterMessage(GenericBoolType) -GenericFloatType = _reflection.GeneratedProtocolMessageType('GenericFloatType', (_message.Message,), { - 'DESCRIPTOR' : _GENERICFLOATTYPE, - '__module__' : 'p4.config.v1.p4types_pb2' - # @@protoc_insertion_point(class_scope:p4.config.v1.GenericFloatType) - }) -_sym_db.RegisterMessage(GenericFloatType) - GenericBitstringLikeTypeSpec = _reflection.GeneratedProtocolMessageType('GenericBitstringLikeTypeSpec', (_message.Message,), { 'DESCRIPTOR' : _GENERICBITSTRINGLIKETYPESPEC, '__module__' : 'p4.config.v1.p4types_pb2' @@ -3817,6 +3832,7 @@ _P4TYPEINFO_NEWTYPESENTRY._options = None _GENERICTYPEINFO_STRUCTSENTRY._options = None _GENERICTYPEINFO_LISTSENTRY._options = None +_GENERICTYPEINFO_UNORDEREDSETSENTRY._options = None _GENERICTYPEINFO_ENUMSENTRY._options = None _GENERICTYPEINFO_SERIALIZABLEENUMSENTRY._options = None _GENERICTYPEINFO_NEWTYPESENTRY._options = None diff --git a/py/p4/v1/p4data_pb2.py b/py/p4/v1/p4data_pb2.py index 0936ad04..4b094baf 100644 --- a/py/p4/v1/p4data_pb2.py +++ b/py/p4/v1/p4data_pb2.py @@ -19,7 +19,7 @@ syntax='proto3', serialized_options=b'Z$github.com/p4lang/p4runtime/go/p4/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x12p4/v1/p4data.proto\x12\x05p4.v1\"\x94\x03\n\x06P4Data\x12\x13\n\tbitstring\x18\x01 \x01(\x0cH\x00\x12!\n\x06varbit\x18\x02 \x01(\x0b\x32\x0f.p4.v1.P4VarbitH\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12$\n\x05tuple\x18\x04 \x01(\x0b\x32\x13.p4.v1.P4StructLikeH\x00\x12%\n\x06struct\x18\x05 \x01(\x0b\x32\x13.p4.v1.P4StructLikeH\x00\x12!\n\x06header\x18\x06 \x01(\x0b\x32\x0f.p4.v1.P4HeaderH\x00\x12,\n\x0cheader_union\x18\x07 \x01(\x0b\x32\x14.p4.v1.P4HeaderUnionH\x00\x12,\n\x0cheader_stack\x18\x08 \x01(\x0b\x32\x14.p4.v1.P4HeaderStackH\x00\x12\x37\n\x12header_union_stack\x18\t \x01(\x0b\x32\x19.p4.v1.P4HeaderUnionStackH\x00\x12\x0e\n\x04\x65num\x18\n \x01(\tH\x00\x12\x0f\n\x05\x65rror\x18\x0b \x01(\tH\x00\x12\x14\n\nenum_value\x18\x0c \x01(\x0cH\x00\x42\x06\n\x04\x64\x61ta\"/\n\x08P4Varbit\x12\x11\n\tbitstring\x18\x01 \x01(\x0c\x12\x10\n\x08\x62itwidth\x18\x02 \x01(\x05\".\n\x0cP4StructLike\x12\x1e\n\x07members\x18\x01 \x03(\x0b\x32\r.p4.v1.P4Data\"0\n\x08P4Header\x12\x10\n\x08is_valid\x18\x01 \x01(\x08\x12\x12\n\nbitstrings\x18\x02 \x03(\x0c\"Q\n\rP4HeaderUnion\x12\x19\n\x11valid_header_name\x18\x01 \x01(\t\x12%\n\x0cvalid_header\x18\x02 \x01(\x0b\x32\x0f.p4.v1.P4Header\"1\n\rP4HeaderStack\x12 \n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x0f.p4.v1.P4Header\";\n\x12P4HeaderUnionStack\x12%\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x14.p4.v1.P4HeaderUnion\"\x91\x02\n\x0bGenericData\x12\x13\n\tbitstring\x18\x01 \x01(\x0cH\x00\x12,\n\x0cvarbitstring\x18\x02 \x01(\x0b\x32\x14.p4.v1.GenericVarbitH\x00\x12\x0f\n\x05\x66loat\x18\x03 \x01(\x02H\x00\x12\x0e\n\x04\x62ool\x18\x04 \x01(\x08H\x00\x12\x32\n\x0egeneric_struct\x18\x05 \x01(\x0b\x32\x18.p4.v1.GenericStructLikeH\x00\x12*\n\x0cgeneric_list\x18\x06 \x01(\x0b\x32\x12.p4.v1.GenericListH\x00\x12\x10\n\x06string\x18\x07 \x01(\tH\x00\x12\x0e\n\x04\x65num\x18\x08 \x01(\tH\x00\x12\x14\n\nenum_value\x18\t \x01(\x0cH\x00\x42\x06\n\x04\x64\x61ta\"8\n\x11GenericStructLike\x12#\n\x07members\x18\x01 \x03(\x0b\x32\x12.p4.v1.GenericData\"2\n\x0bGenericList\x12#\n\x07members\x18\x01 \x03(\x0b\x32\x12.p4.v1.GenericData\"4\n\rGenericVarbit\x12\x11\n\tbitstring\x18\x01 \x01(\x0c\x12\x10\n\x08\x62itwidth\x18\x02 \x01(\x05\x42&Z$github.com/p4lang/p4runtime/go/p4/v1b\x06proto3' + serialized_pb=b'\n\x12p4/v1/p4data.proto\x12\x05p4.v1\"\x94\x03\n\x06P4Data\x12\x13\n\tbitstring\x18\x01 \x01(\x0cH\x00\x12!\n\x06varbit\x18\x02 \x01(\x0b\x32\x0f.p4.v1.P4VarbitH\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12$\n\x05tuple\x18\x04 \x01(\x0b\x32\x13.p4.v1.P4StructLikeH\x00\x12%\n\x06struct\x18\x05 \x01(\x0b\x32\x13.p4.v1.P4StructLikeH\x00\x12!\n\x06header\x18\x06 \x01(\x0b\x32\x0f.p4.v1.P4HeaderH\x00\x12,\n\x0cheader_union\x18\x07 \x01(\x0b\x32\x14.p4.v1.P4HeaderUnionH\x00\x12,\n\x0cheader_stack\x18\x08 \x01(\x0b\x32\x14.p4.v1.P4HeaderStackH\x00\x12\x37\n\x12header_union_stack\x18\t \x01(\x0b\x32\x19.p4.v1.P4HeaderUnionStackH\x00\x12\x0e\n\x04\x65num\x18\n \x01(\tH\x00\x12\x0f\n\x05\x65rror\x18\x0b \x01(\tH\x00\x12\x14\n\nenum_value\x18\x0c \x01(\x0cH\x00\x42\x06\n\x04\x64\x61ta\"/\n\x08P4Varbit\x12\x11\n\tbitstring\x18\x01 \x01(\x0c\x12\x10\n\x08\x62itwidth\x18\x02 \x01(\x05\".\n\x0cP4StructLike\x12\x1e\n\x07members\x18\x01 \x03(\x0b\x32\r.p4.v1.P4Data\"0\n\x08P4Header\x12\x10\n\x08is_valid\x18\x01 \x01(\x08\x12\x12\n\nbitstrings\x18\x02 \x03(\x0c\"Q\n\rP4HeaderUnion\x12\x19\n\x11valid_header_name\x18\x01 \x01(\t\x12%\n\x0cvalid_header\x18\x02 \x01(\x0b\x32\x0f.p4.v1.P4Header\"1\n\rP4HeaderStack\x12 \n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x0f.p4.v1.P4Header\";\n\x12P4HeaderUnionStack\x12%\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x14.p4.v1.P4HeaderUnion\"\xbd\x02\n\x0bGenericData\x12\x13\n\tbitstring\x18\x01 \x01(\x0cH\x00\x12,\n\x0cvarbitstring\x18\x02 \x01(\x0b\x32\x14.p4.v1.GenericVarbitH\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12\x32\n\x0egeneric_struct\x18\x04 \x01(\x0b\x32\x18.p4.v1.GenericStructLikeH\x00\x12*\n\x0cgeneric_list\x18\x05 \x01(\x0b\x32\x12.p4.v1.GenericListH\x00\x12;\n\x15generic_unordered_set\x18\x06 \x01(\x0b\x32\x1a.p4.v1.GenericUnorderedSetH\x00\x12\x10\n\x06string\x18\x07 \x01(\tH\x00\x12\x0e\n\x04\x65num\x18\x08 \x01(\tH\x00\x12\x14\n\nenum_value\x18\t \x01(\x0cH\x00\x42\x06\n\x04\x64\x61ta\"8\n\x11GenericStructLike\x12#\n\x07members\x18\x01 \x03(\x0b\x32\x12.p4.v1.GenericData\"2\n\x0bGenericList\x12#\n\x07members\x18\x01 \x03(\x0b\x32\x12.p4.v1.GenericData\":\n\x13GenericUnorderedSet\x12#\n\x07members\x18\x01 \x03(\x0b\x32\x12.p4.v1.GenericData\"4\n\rGenericVarbit\x12\x11\n\tbitstring\x18\x01 \x01(\x0c\x12\x10\n\x08\x62itwidth\x18\x02 \x01(\x05\x42&Z$github.com/p4lang/p4runtime/go/p4/v1b\x06proto3' ) @@ -375,28 +375,28 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='float', full_name='p4.v1.GenericData.float', index=2, - number=3, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), + name='bool', full_name='p4.v1.GenericData.bool', index=2, + number=3, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='bool', full_name='p4.v1.GenericData.bool', index=3, - number=4, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, + name='generic_struct', full_name='p4.v1.GenericData.generic_struct', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='generic_struct', full_name='p4.v1.GenericData.generic_struct', index=4, + name='generic_list', full_name='p4.v1.GenericData.generic_list', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='generic_list', full_name='p4.v1.GenericData.generic_list', index=5, + name='generic_unordered_set', full_name='p4.v1.GenericData.generic_unordered_set', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, @@ -441,7 +441,7 @@ fields=[]), ], serialized_start=779, - serialized_end=1052, + serialized_end=1096, ) @@ -472,8 +472,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1054, - serialized_end=1110, + serialized_start=1098, + serialized_end=1154, ) @@ -504,8 +504,40 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1112, - serialized_end=1162, + serialized_start=1156, + serialized_end=1206, +) + + +_GENERICUNORDEREDSET = _descriptor.Descriptor( + name='GenericUnorderedSet', + full_name='p4.v1.GenericUnorderedSet', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='members', full_name='p4.v1.GenericUnorderedSet.members', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1208, + serialized_end=1266, ) @@ -543,8 +575,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1164, - serialized_end=1216, + serialized_start=1268, + serialized_end=1320, ) _P4DATA.fields_by_name['varbit'].message_type = _P4VARBIT @@ -597,15 +629,13 @@ _GENERICDATA.fields_by_name['varbitstring'].message_type = _GENERICVARBIT _GENERICDATA.fields_by_name['generic_struct'].message_type = _GENERICSTRUCTLIKE _GENERICDATA.fields_by_name['generic_list'].message_type = _GENERICLIST +_GENERICDATA.fields_by_name['generic_unordered_set'].message_type = _GENERICUNORDEREDSET _GENERICDATA.oneofs_by_name['data'].fields.append( _GENERICDATA.fields_by_name['bitstring']) _GENERICDATA.fields_by_name['bitstring'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] _GENERICDATA.oneofs_by_name['data'].fields.append( _GENERICDATA.fields_by_name['varbitstring']) _GENERICDATA.fields_by_name['varbitstring'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] -_GENERICDATA.oneofs_by_name['data'].fields.append( - _GENERICDATA.fields_by_name['float']) -_GENERICDATA.fields_by_name['float'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] _GENERICDATA.oneofs_by_name['data'].fields.append( _GENERICDATA.fields_by_name['bool']) _GENERICDATA.fields_by_name['bool'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] @@ -615,6 +645,9 @@ _GENERICDATA.oneofs_by_name['data'].fields.append( _GENERICDATA.fields_by_name['generic_list']) _GENERICDATA.fields_by_name['generic_list'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] +_GENERICDATA.oneofs_by_name['data'].fields.append( + _GENERICDATA.fields_by_name['generic_unordered_set']) +_GENERICDATA.fields_by_name['generic_unordered_set'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] _GENERICDATA.oneofs_by_name['data'].fields.append( _GENERICDATA.fields_by_name['string']) _GENERICDATA.fields_by_name['string'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] @@ -626,6 +659,7 @@ _GENERICDATA.fields_by_name['enum_value'].containing_oneof = _GENERICDATA.oneofs_by_name['data'] _GENERICSTRUCTLIKE.fields_by_name['members'].message_type = _GENERICDATA _GENERICLIST.fields_by_name['members'].message_type = _GENERICDATA +_GENERICUNORDEREDSET.fields_by_name['members'].message_type = _GENERICDATA DESCRIPTOR.message_types_by_name['P4Data'] = _P4DATA DESCRIPTOR.message_types_by_name['P4Varbit'] = _P4VARBIT DESCRIPTOR.message_types_by_name['P4StructLike'] = _P4STRUCTLIKE @@ -636,6 +670,7 @@ DESCRIPTOR.message_types_by_name['GenericData'] = _GENERICDATA DESCRIPTOR.message_types_by_name['GenericStructLike'] = _GENERICSTRUCTLIKE DESCRIPTOR.message_types_by_name['GenericList'] = _GENERICLIST +DESCRIPTOR.message_types_by_name['GenericUnorderedSet'] = _GENERICUNORDEREDSET DESCRIPTOR.message_types_by_name['GenericVarbit'] = _GENERICVARBIT _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -709,6 +744,13 @@ }) _sym_db.RegisterMessage(GenericList) +GenericUnorderedSet = _reflection.GeneratedProtocolMessageType('GenericUnorderedSet', (_message.Message,), { + 'DESCRIPTOR' : _GENERICUNORDEREDSET, + '__module__' : 'p4.v1.p4data_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericUnorderedSet) + }) +_sym_db.RegisterMessage(GenericUnorderedSet) + GenericVarbit = _reflection.GeneratedProtocolMessageType('GenericVarbit', (_message.Message,), { 'DESCRIPTOR' : _GENERICVARBIT, '__module__' : 'p4.v1.p4data_pb2' From a8ec79696d60c4f195ea0854b435e9492fe630c7 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 6 Sep 2023 18:55:58 -0700 Subject: [PATCH 35/42] * Shortening the field names in `GenericTable` to remove "genric_table_" prefixes * Correcting the text for type_name --- docs/v1/GenericTable.md | 6 +- docs/v1/P4Runtime-Spec.mdk | 15 ++--- go/p4/config/v1/p4info.pb.go | 99 ++++++++++++++++----------------- proto/p4/config/v1/p4info.proto | 6 +- py/p4/config/v1/p4info_pb2.py | 16 +++--- 5 files changed, 69 insertions(+), 73 deletions(-) diff --git a/docs/v1/GenericTable.md b/docs/v1/GenericTable.md index a3c86257..b24c3358 100644 --- a/docs/v1/GenericTable.md +++ b/docs/v1/GenericTable.md @@ -6,9 +6,9 @@ defining the data fields has been presented. Only 1 of them is required. ``` generic_tables { - generic_table_type_id : 145 - generic_table_type_name : "MulticastGroup" - generic_table_properties : { + type_id : 145 + type_name : "MulticastGroup" + properties : { "indexed" } instances { diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 30946704..31dcdf2b 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6386,16 +6386,17 @@ instances in `GenericTableInstance` rather than duplicating it every time for a new instance just like in `Extern`. It defines the following fields -* `generic_table_type_id`, an 8-bit unsigned integer which uniquely identifies +* `type_id`, an 8-bit unsigned integer which uniquely identifies the generic_table_type in the context of the architecture. More details in the [Generic Table ID space](#sec-generic-table-id-space) section -* `generic_table_type_name`, which specifies the fully-qualified P4 name of the - generic_table in case of P4 entities. In cases of non-P4 entities, it is a - name which uniquely identifies this entity in the entire space including P4 - objects. +* `type_name`, which specifies the "type" of the `GenericTable`. For example, + if the target has a meter called `SpecialMeter`, then this would contain + "SpecialMeter". In cases of non-P4 entities, it is a "type" which helps + identify this entity with a feature for example "MulticastGroup". For non- + P4 entities, sometimes the instance name and type name are the same -* `repeated string generic_table_properties`, please check generic-table +* `repeated string properties`, please check generic-table properties under section [GenericTable categories] (#sec-generic-table-categories) for more details. @@ -6404,7 +6405,7 @@ It defines the following fields GenericTableInstance * `preamble`, a `Preamble` message with the ID, name, and alias of this - `GenericTable`. + `GenericTable` instance. * `generic_match_fields`, a repeated field of type `GenericMatchField` representing the data to be used to construct the lookup key matched in this diff --git a/go/p4/config/v1/p4info.pb.go b/go/p4/config/v1/p4info.pb.go index 3385905c..afdd2ccb 100644 --- a/go/p4/config/v1/p4info.pb.go +++ b/go/p4/config/v1/p4info.pb.go @@ -2691,10 +2691,10 @@ type GenericTable struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GenericTableTypeId uint32 `protobuf:"varint,1,opt,name=generic_table_type_id,json=genericTableTypeId,proto3" json:"generic_table_type_id,omitempty"` - GenericTableTypeName string `protobuf:"bytes,2,opt,name=generic_table_type_name,json=genericTableTypeName,proto3" json:"generic_table_type_name,omitempty"` - GenericTableProperties []string `protobuf:"bytes,3,rep,name=generic_table_properties,json=genericTableProperties,proto3" json:"generic_table_properties,omitempty"` - Instances []*GenericTableInstance `protobuf:"bytes,4,rep,name=instances,proto3" json:"instances,omitempty"` + TypeId uint32 `protobuf:"varint,1,opt,name=type_id,json=typeId,proto3" json:"type_id,omitempty"` + TypeName string `protobuf:"bytes,2,opt,name=type_name,json=typeName,proto3" json:"type_name,omitempty"` + Properties []string `protobuf:"bytes,3,rep,name=properties,proto3" json:"properties,omitempty"` + Instances []*GenericTableInstance `protobuf:"bytes,4,rep,name=instances,proto3" json:"instances,omitempty"` } func (x *GenericTable) Reset() { @@ -2729,23 +2729,23 @@ func (*GenericTable) Descriptor() ([]byte, []int) { return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{26} } -func (x *GenericTable) GetGenericTableTypeId() uint32 { +func (x *GenericTable) GetTypeId() uint32 { if x != nil { - return x.GenericTableTypeId + return x.TypeId } return 0 } -func (x *GenericTable) GetGenericTableTypeName() string { +func (x *GenericTable) GetTypeName() string { if x != nil { - return x.GenericTableTypeName + return x.TypeName } return "" } -func (x *GenericTable) GetGenericTableProperties() []string { +func (x *GenericTable) GetProperties() []string { if x != nil { - return x.GenericTableProperties + return x.Properties } return nil } @@ -3766,48 +3766,43 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf4, 0x01, 0x0a, 0x0c, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x35, 0x0a, - 0x17, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x40, - 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x22, 0xde, 0x02, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, - 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, - 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x51, 0x0a, - 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x34, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x12, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x12, 0x35, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x52, 0x09, 0x75, 0x6e, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x0c, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x79, + 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x79, 0x70, + 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x40, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x22, 0xde, 0x02, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, + 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, + 0x51, 0x0a, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x12, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x12, 0x35, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x52, 0x09, + 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, + 0x6e, 0x79, 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index 76d5c86e..54e4792f 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -481,9 +481,9 @@ message Union { // All Tables of one type will be grouped in one message. message GenericTable { - uint32 generic_table_type_id = 1; - string generic_table_type_name = 2; - repeated string generic_table_properties = 3; + uint32 type_id = 1; + string type_name = 2; + repeated string properties = 3; repeated GenericTableInstance instances = 4; } diff --git a/py/p4/config/v1/p4info_pb2.py b/py/p4/config/v1/p4info_pb2.py index cf693f41..3b52ffa8 100644 --- a/py/p4/config/v1/p4info_pb2.py +++ b/py/p4/config/v1/p4info_pb2.py @@ -21,7 +21,7 @@ syntax='proto3', serialized_options=b'Z+github.com/p4lang/p4runtime/go/p4/config/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x19p4/config/v1/p4info.proto\x12\x0cp4.config.v1\x1a\x19google/protobuf/any.proto\x1a\x1ap4/config/v1/p4types.proto\"\xe1\x05\n\x06P4Info\x12\'\n\x08pkg_info\x18\x01 \x01(\x0b\x32\x15.p4.config.v1.PkgInfo\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.p4.config.v1.Table\x12%\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\x14.p4.config.v1.Action\x12\x34\n\x0f\x61\x63tion_profiles\x18\x04 \x03(\x0b\x32\x1b.p4.config.v1.ActionProfile\x12\'\n\x08\x63ounters\x18\x05 \x03(\x0b\x32\x15.p4.config.v1.Counter\x12\x34\n\x0f\x64irect_counters\x18\x06 \x03(\x0b\x32\x1b.p4.config.v1.DirectCounter\x12#\n\x06meters\x18\x07 \x03(\x0b\x32\x13.p4.config.v1.Meter\x12\x30\n\rdirect_meters\x18\x08 \x03(\x0b\x32\x19.p4.config.v1.DirectMeter\x12J\n\x1a\x63ontroller_packet_metadata\x18\t \x03(\x0b\x32&.p4.config.v1.ControllerPacketMetadata\x12*\n\nvalue_sets\x18\n \x03(\x0b\x32\x16.p4.config.v1.ValueSet\x12)\n\tregisters\x18\x0b \x03(\x0b\x32\x16.p4.config.v1.Register\x12%\n\x07\x64igests\x18\x0c \x03(\x0b\x32\x14.p4.config.v1.Digest\x12\x32\n\x0egeneric_tables\x18\r \x03(\x0b\x32\x1a.p4.config.v1.GenericTable\x12#\n\x06unions\x18\x0e \x03(\x0b\x32\x13.p4.config.v1.Union\x12%\n\x07\x65xterns\x18\x64 \x03(\x0b\x32\x14.p4.config.v1.Extern\x12,\n\ttype_info\x18\xc8\x01 \x01(\x0b\x32\x18.p4.config.v1.P4TypeInfo\"3\n\rDocumentation\x12\r\n\x05\x62rief\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\xa9\x02\n\x07PkgInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12(\n\x03\x64oc\x18\x03 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x0c\n\x04\x61rch\x18\x05 \x01(\t\x12\x14\n\x0corganization\x18\x06 \x01(\t\x12\x0f\n\x07\x63ontact\x18\x07 \x01(\t\x12\x0b\n\x03url\x18\x08 \x01(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x9a\x02\n\x05P4Ids\"\x90\x02\n\x06Prefix\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TION\x10\x01\x12\t\n\x05TABLE\x10\x02\x12\r\n\tVALUE_SET\x10\x03\x12\x15\n\x11\x43ONTROLLER_HEADER\x10\x04\x12\x15\n\x11PSA_EXTERNS_START\x10\x10\x12\x12\n\x0e\x41\x43TION_PROFILE\x10\x11\x12\x0b\n\x07\x43OUNTER\x10\x12\x12\x12\n\x0e\x44IRECT_COUNTER\x10\x13\x12\t\n\x05METER\x10\x14\x12\x10\n\x0c\x44IRECT_METER\x10\x15\x12\x0c\n\x08REGISTER\x10\x16\x12\n\n\x06\x44IGEST\x10\x17\x12\x11\n\rGENERIC_TABLE\x10\x18\x12\x18\n\x13OTHER_EXTERNS_START\x10\x80\x01\x12\x08\n\x03MAX\x10\xff\x01\"@\n\x10GenericTableType\",\n\x06Prefix\x12\x18\n\x14GENERIC_TABLES_START\x10\x00\x12\x08\n\x03MAX\x10\xff\x01\"\xf2\x01\n\x08Preamble\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x06\x45xtern\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xtern_type_name\x18\x02 \x01(\t\x12/\n\tinstances\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.ExternInstance\"^\n\x0e\x45xternInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"\xdc\x03\n\nMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12\x38\n\nmatch_type\x18\x05 \x01(\x0e\x32\".p4.config.v1.MatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x07 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x08 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\xc1\x03\n\x05Table\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12.\n\x0cmatch_fields\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12,\n\x0b\x61\x63tion_refs\x18\x03 \x03(\x0b\x32\x17.p4.config.v1.ActionRef\x12\x1f\n\x17\x63onst_default_action_id\x18\x04 \x01(\r\x12\x19\n\x11implementation_id\x18\x06 \x01(\r\x12\x1b\n\x13\x64irect_resource_ids\x18\x07 \x03(\r\x12\x0c\n\x04size\x18\x08 \x01(\x03\x12\x46\n\x15idle_timeout_behavior\x18\t \x01(\x0e\x32\'.p4.config.v1.Table.IdleTimeoutBehavior\x12\x16\n\x0eis_const_table\x18\n \x01(\x08\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\"9\n\x13IdleTimeoutBehavior\x12\x0e\n\nNO_TIMEOUT\x10\x00\x12\x12\n\x0eNOTIFY_CONTROL\x10\x01\"\x9c\x02\n\tActionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.p4.config.v1.ActionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x81\x03\n\x06\x41\x63tion\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.p4.config.v1.Action.Param\x1a\xa0\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x82\x03\n\rActionProfile\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x11\n\ttable_ids\x18\x02 \x03(\r\x12\x15\n\rwith_selector\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x16\n\x0emax_group_size\x18\x05 \x01(\x05\x12\x42\n\x0esum_of_weights\x18\x06 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfWeightsH\x00\x12\x42\n\x0esum_of_members\x18\x07 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfMembersH\x00\x1a\x0e\n\x0cSumOfWeights\x1a\x44\n\x0cSumOfMembers\x12\x1e\n\x11max_member_weight\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x14\n\x12_max_member_weightB\x19\n\x17selector_size_semantics\"v\n\x0b\x43ounterSpec\x12,\n\x04unit\x18\x01 \x01(\x0e\x32\x1e.p4.config.v1.CounterSpec.Unit\"9\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\x12\x08\n\x04\x42OTH\x10\x03\"\x9e\x01\n\x07\x43ounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"{\n\rDirectCounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"h\n\tMeterSpec\x12*\n\x04unit\x18\x01 \x01(\x0e\x32\x1c.p4.config.v1.MeterSpec.Unit\"/\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\"\x9a\x01\n\x05Meter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"w\n\x0b\x44irectMeter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"\x83\x03\n\x18\x43ontrollerPacketMetadata\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x41\n\x08metadata\x18\x02 \x03(\x0b\x32/.p4.config.v1.ControllerPacketMetadata.Metadata\x1a\xf9\x01\n\x08Metadata\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12,\n\ttype_name\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x08ValueSet\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12\x0c\n\x04size\x18\x03 \x01(\x05\"\xa7\x01\n\x08Register\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"c\n\x06\x44igest\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xe0\x03\n\x11GenericMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x34\n\ttype_spec\x18\x03 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12?\n\nmatch_type\x18\x04 \x01(\x0e\x32).p4.config.v1.GenericMatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x05 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x07 \x03(\t\x12\x42\n\x16structured_annotations\x18\x08 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\t \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\x9a\x02\n\x08UnionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12+\n\x05scope\x18\x03 \x01(\x0e\x32\x1c.p4.config.v1.UnionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\xf5\x02\n\x05Union\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.p4.config.v1.Union.Param\x1a\x96\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12\x34\n\ttype_spec\x18\x04 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"\xa7\x01\n\x0cGenericTable\x12\x1d\n\x15generic_table_type_id\x18\x01 \x01(\r\x12\x1f\n\x17generic_table_type_name\x18\x02 \x01(\t\x12 \n\x18generic_table_properties\x18\x03 \x03(\t\x12\x35\n\tinstances\x18\x04 \x03(\x0b\x32\".p4.config.v1.GenericTableInstance\"\x89\x02\n\x14GenericTableInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12=\n\x14generic_match_fields\x18\x02 \x03(\x0b\x32\x1f.p4.config.v1.GenericMatchField\x12*\n\nunion_refs\x18\x03 \x03(\x0b\x32\x16.p4.config.v1.UnionRef\x12\x1e\n\x16\x63onst_default_union_id\x18\x04 \x01(\r\x12\x0c\n\x04size\x18\x05 \x01(\x03\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' + serialized_pb=b'\n\x19p4/config/v1/p4info.proto\x12\x0cp4.config.v1\x1a\x19google/protobuf/any.proto\x1a\x1ap4/config/v1/p4types.proto\"\xe1\x05\n\x06P4Info\x12\'\n\x08pkg_info\x18\x01 \x01(\x0b\x32\x15.p4.config.v1.PkgInfo\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.p4.config.v1.Table\x12%\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\x14.p4.config.v1.Action\x12\x34\n\x0f\x61\x63tion_profiles\x18\x04 \x03(\x0b\x32\x1b.p4.config.v1.ActionProfile\x12\'\n\x08\x63ounters\x18\x05 \x03(\x0b\x32\x15.p4.config.v1.Counter\x12\x34\n\x0f\x64irect_counters\x18\x06 \x03(\x0b\x32\x1b.p4.config.v1.DirectCounter\x12#\n\x06meters\x18\x07 \x03(\x0b\x32\x13.p4.config.v1.Meter\x12\x30\n\rdirect_meters\x18\x08 \x03(\x0b\x32\x19.p4.config.v1.DirectMeter\x12J\n\x1a\x63ontroller_packet_metadata\x18\t \x03(\x0b\x32&.p4.config.v1.ControllerPacketMetadata\x12*\n\nvalue_sets\x18\n \x03(\x0b\x32\x16.p4.config.v1.ValueSet\x12)\n\tregisters\x18\x0b \x03(\x0b\x32\x16.p4.config.v1.Register\x12%\n\x07\x64igests\x18\x0c \x03(\x0b\x32\x14.p4.config.v1.Digest\x12\x32\n\x0egeneric_tables\x18\r \x03(\x0b\x32\x1a.p4.config.v1.GenericTable\x12#\n\x06unions\x18\x0e \x03(\x0b\x32\x13.p4.config.v1.Union\x12%\n\x07\x65xterns\x18\x64 \x03(\x0b\x32\x14.p4.config.v1.Extern\x12,\n\ttype_info\x18\xc8\x01 \x01(\x0b\x32\x18.p4.config.v1.P4TypeInfo\"3\n\rDocumentation\x12\r\n\x05\x62rief\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\xa9\x02\n\x07PkgInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12(\n\x03\x64oc\x18\x03 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x0c\n\x04\x61rch\x18\x05 \x01(\t\x12\x14\n\x0corganization\x18\x06 \x01(\t\x12\x0f\n\x07\x63ontact\x18\x07 \x01(\t\x12\x0b\n\x03url\x18\x08 \x01(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x9a\x02\n\x05P4Ids\"\x90\x02\n\x06Prefix\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TION\x10\x01\x12\t\n\x05TABLE\x10\x02\x12\r\n\tVALUE_SET\x10\x03\x12\x15\n\x11\x43ONTROLLER_HEADER\x10\x04\x12\x15\n\x11PSA_EXTERNS_START\x10\x10\x12\x12\n\x0e\x41\x43TION_PROFILE\x10\x11\x12\x0b\n\x07\x43OUNTER\x10\x12\x12\x12\n\x0e\x44IRECT_COUNTER\x10\x13\x12\t\n\x05METER\x10\x14\x12\x10\n\x0c\x44IRECT_METER\x10\x15\x12\x0c\n\x08REGISTER\x10\x16\x12\n\n\x06\x44IGEST\x10\x17\x12\x11\n\rGENERIC_TABLE\x10\x18\x12\x18\n\x13OTHER_EXTERNS_START\x10\x80\x01\x12\x08\n\x03MAX\x10\xff\x01\"@\n\x10GenericTableType\",\n\x06Prefix\x12\x18\n\x14GENERIC_TABLES_START\x10\x00\x12\x08\n\x03MAX\x10\xff\x01\"\xf2\x01\n\x08Preamble\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x06\x45xtern\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xtern_type_name\x18\x02 \x01(\t\x12/\n\tinstances\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.ExternInstance\"^\n\x0e\x45xternInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"\xdc\x03\n\nMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12\x38\n\nmatch_type\x18\x05 \x01(\x0e\x32\".p4.config.v1.MatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x07 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x08 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\xc1\x03\n\x05Table\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12.\n\x0cmatch_fields\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12,\n\x0b\x61\x63tion_refs\x18\x03 \x03(\x0b\x32\x17.p4.config.v1.ActionRef\x12\x1f\n\x17\x63onst_default_action_id\x18\x04 \x01(\r\x12\x19\n\x11implementation_id\x18\x06 \x01(\r\x12\x1b\n\x13\x64irect_resource_ids\x18\x07 \x03(\r\x12\x0c\n\x04size\x18\x08 \x01(\x03\x12\x46\n\x15idle_timeout_behavior\x18\t \x01(\x0e\x32\'.p4.config.v1.Table.IdleTimeoutBehavior\x12\x16\n\x0eis_const_table\x18\n \x01(\x08\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\"9\n\x13IdleTimeoutBehavior\x12\x0e\n\nNO_TIMEOUT\x10\x00\x12\x12\n\x0eNOTIFY_CONTROL\x10\x01\"\x9c\x02\n\tActionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.p4.config.v1.ActionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x81\x03\n\x06\x41\x63tion\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.p4.config.v1.Action.Param\x1a\xa0\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x82\x03\n\rActionProfile\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x11\n\ttable_ids\x18\x02 \x03(\r\x12\x15\n\rwith_selector\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x16\n\x0emax_group_size\x18\x05 \x01(\x05\x12\x42\n\x0esum_of_weights\x18\x06 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfWeightsH\x00\x12\x42\n\x0esum_of_members\x18\x07 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfMembersH\x00\x1a\x0e\n\x0cSumOfWeights\x1a\x44\n\x0cSumOfMembers\x12\x1e\n\x11max_member_weight\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x14\n\x12_max_member_weightB\x19\n\x17selector_size_semantics\"v\n\x0b\x43ounterSpec\x12,\n\x04unit\x18\x01 \x01(\x0e\x32\x1e.p4.config.v1.CounterSpec.Unit\"9\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\x12\x08\n\x04\x42OTH\x10\x03\"\x9e\x01\n\x07\x43ounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"{\n\rDirectCounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"h\n\tMeterSpec\x12*\n\x04unit\x18\x01 \x01(\x0e\x32\x1c.p4.config.v1.MeterSpec.Unit\"/\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\"\x9a\x01\n\x05Meter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"w\n\x0b\x44irectMeter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"\x83\x03\n\x18\x43ontrollerPacketMetadata\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x41\n\x08metadata\x18\x02 \x03(\x0b\x32/.p4.config.v1.ControllerPacketMetadata.Metadata\x1a\xf9\x01\n\x08Metadata\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12,\n\ttype_name\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x08ValueSet\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12\x0c\n\x04size\x18\x03 \x01(\x05\"\xa7\x01\n\x08Register\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"c\n\x06\x44igest\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xe0\x03\n\x11GenericMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x34\n\ttype_spec\x18\x03 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12?\n\nmatch_type\x18\x04 \x01(\x0e\x32).p4.config.v1.GenericMatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x05 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x07 \x03(\t\x12\x42\n\x16structured_annotations\x18\x08 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\t \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\x9a\x02\n\x08UnionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12+\n\x05scope\x18\x03 \x01(\x0e\x32\x1c.p4.config.v1.UnionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\xf5\x02\n\x05Union\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.p4.config.v1.Union.Param\x1a\x96\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12\x34\n\ttype_spec\x18\x04 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"}\n\x0cGenericTable\x12\x0f\n\x07type_id\x18\x01 \x01(\r\x12\x11\n\ttype_name\x18\x02 \x01(\t\x12\x12\n\nproperties\x18\x03 \x03(\t\x12\x35\n\tinstances\x18\x04 \x03(\x0b\x32\".p4.config.v1.GenericTableInstance\"\x89\x02\n\x14GenericTableInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12=\n\x14generic_match_fields\x18\x02 \x03(\x0b\x32\x1f.p4.config.v1.GenericMatchField\x12*\n\nunion_refs\x18\x03 \x03(\x0b\x32\x16.p4.config.v1.UnionRef\x12\x1e\n\x16\x63onst_default_union_id\x18\x04 \x01(\r\x12\x0c\n\x04size\x18\x05 \x01(\x03\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' , dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,p4_dot_config_dot_v1_dot_p4types__pb2.DESCRIPTOR,]) @@ -2176,21 +2176,21 @@ create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( - name='generic_table_type_id', full_name='p4.config.v1.GenericTable.generic_table_type_id', index=0, + name='type_id', full_name='p4.config.v1.GenericTable.type_id', index=0, number=1, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='generic_table_type_name', full_name='p4.config.v1.GenericTable.generic_table_type_name', index=1, + name='type_name', full_name='p4.config.v1.GenericTable.type_name', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='generic_table_properties', full_name='p4.config.v1.GenericTable.generic_table_properties', index=2, + name='properties', full_name='p4.config.v1.GenericTable.properties', index=2, number=3, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, @@ -2215,8 +2215,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6692, - serialized_end=6859, + serialized_start=6691, + serialized_end=6816, ) @@ -2282,8 +2282,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6862, - serialized_end=7127, + serialized_start=6819, + serialized_end=7084, ) _P4INFO.fields_by_name['pkg_info'].message_type = _PKGINFO From 1c026e42f6cddf8fb83fe6f42f94d3c6bf3accd6 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 6 Sep 2023 19:07:06 -0700 Subject: [PATCH 36/42] * Making default_value as bytes * Adding "scope" to the union example --- docs/v1/GenericTable.md | 1 + docs/v1/P4Runtime-Spec.mdk | 3 ++- go/p4/config/v1/p4types.pb.go | 30 +++++++++++++++--------------- proto/p4/config/v1/p4types.proto | 6 +++--- py/p4/config/v1/p4types_pb2.py | 14 +++++++------- 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/docs/v1/GenericTable.md b/docs/v1/GenericTable.md index b24c3358..fe4df61e 100644 --- a/docs/v1/GenericTable.md +++ b/docs/v1/GenericTable.md @@ -31,6 +31,7 @@ generic_tables { } union_refs { id: 23557840 + scope: TABLE_AND_DEFAULT } size: 1024 } diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 31dcdf2b..645656ca 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6442,7 +6442,8 @@ Some of them have default values. These default values are only applicable when in a Union field and not for Match fields. Match fields do not have default values because if a match field is not present, then it is considered to be a wildcard match. But if a union member is not present, then the default -value is used. +value is used. Numeric Default values have been kept as `bytes` so that +lengths > 64 can be easily accommodated. * bitstring : Bytes type used for simple unsigned integers or bytes. Default value applicable. If not present, it is 0. diff --git a/go/p4/config/v1/p4types.pb.go b/go/p4/config/v1/p4types.pb.go index c87810c3..6867e0b6 100644 --- a/go/p4/config/v1/p4types.pb.go +++ b/go/p4/config/v1/p4types.pb.go @@ -2443,8 +2443,8 @@ type GenericBitTypeSpec struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Bitwidth int32 `protobuf:"varint,1,opt,name=bitwidth,proto3" json:"bitwidth,omitempty"` - DefaultValue int32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + Bitwidth int32 `protobuf:"varint,1,opt,name=bitwidth,proto3" json:"bitwidth,omitempty"` + DefaultValue []byte `protobuf:"bytes,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` } func (x *GenericBitTypeSpec) Reset() { @@ -2486,11 +2486,11 @@ func (x *GenericBitTypeSpec) GetBitwidth() int32 { return 0 } -func (x *GenericBitTypeSpec) GetDefaultValue() int32 { +func (x *GenericBitTypeSpec) GetDefaultValue() []byte { if x != nil { return x.DefaultValue } - return 0 + return nil } type GenericIntTypeSpec struct { @@ -2498,8 +2498,8 @@ type GenericIntTypeSpec struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Bitwidth int32 `protobuf:"varint,1,opt,name=bitwidth,proto3" json:"bitwidth,omitempty"` - DefaultValue int32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + Bitwidth int32 `protobuf:"varint,1,opt,name=bitwidth,proto3" json:"bitwidth,omitempty"` + DefaultValue []byte `protobuf:"bytes,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` } func (x *GenericIntTypeSpec) Reset() { @@ -2541,11 +2541,11 @@ func (x *GenericIntTypeSpec) GetBitwidth() int32 { return 0 } -func (x *GenericIntTypeSpec) GetDefaultValue() int32 { +func (x *GenericIntTypeSpec) GetDefaultValue() []byte { if x != nil { return x.DefaultValue } - return 0 + return nil } type GenericVarbitTypeSpec struct { @@ -2553,8 +2553,8 @@ type GenericVarbitTypeSpec struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MaxBitwidth int32 `protobuf:"varint,1,opt,name=max_bitwidth,json=maxBitwidth,proto3" json:"max_bitwidth,omitempty"` - DefaultValue int32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + MaxBitwidth int32 `protobuf:"varint,1,opt,name=max_bitwidth,json=maxBitwidth,proto3" json:"max_bitwidth,omitempty"` + DefaultValue []byte `protobuf:"bytes,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` } func (x *GenericVarbitTypeSpec) Reset() { @@ -2596,11 +2596,11 @@ func (x *GenericVarbitTypeSpec) GetMaxBitwidth() int32 { return 0 } -func (x *GenericVarbitTypeSpec) GetDefaultValue() int32 { +func (x *GenericVarbitTypeSpec) GetDefaultValue() []byte { if x != nil { return x.DefaultValue } - return 0 + return nil } type GenericStructTypeSpec struct { @@ -4484,19 +4484,19 @@ var file_p4_config_v1_p4types_proto_rawDesc = []byte{ 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x55, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x49, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x0c, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5f, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x72, 0x62, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x42, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x28, 0x0c, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x99, 0x03, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x34, diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index 6a27cd45..110ff354 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -349,17 +349,17 @@ message GenericBitstringLikeTypeSpec { message GenericBitTypeSpec { int32 bitwidth = 1; - int32 default_value = 2; + bytes default_value = 2; } message GenericIntTypeSpec { int32 bitwidth = 1; - int32 default_value = 2; + bytes default_value = 2; } message GenericVarbitTypeSpec { int32 max_bitwidth = 1; - int32 default_value = 2; + bytes default_value = 2; } message GenericStructTypeSpec { message Member { diff --git a/py/p4/config/v1/p4types_pb2.py b/py/p4/config/v1/p4types_pb2.py index 4e68165a..40d571fb 100644 --- a/py/p4/config/v1/p4types_pb2.py +++ b/py/p4/config/v1/p4types_pb2.py @@ -19,7 +19,7 @@ syntax='proto3', serialized_options=b'Z+github.com/p4lang/p4runtime/go/p4/config/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x1ap4/config/v1/p4types.proto\x12\x0cp4.config.v1\"\xa1\x07\n\nP4TypeInfo\x12\x36\n\x07structs\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.StructsEntry\x12\x36\n\x07headers\x18\x02 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.HeadersEntry\x12\x41\n\rheader_unions\x18\x03 \x03(\x0b\x32*.p4.config.v1.P4TypeInfo.HeaderUnionsEntry\x12\x32\n\x05\x65nums\x18\x04 \x03(\x0b\x32#.p4.config.v1.P4TypeInfo.EnumsEntry\x12,\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x1d.p4.config.v1.P4ErrorTypeSpec\x12K\n\x12serializable_enums\x18\x06 \x03(\x0b\x32/.p4.config.v1.P4TypeInfo.SerializableEnumsEntry\x12\x39\n\tnew_types\x18\x07 \x03(\x0b\x32&.p4.config.v1.P4TypeInfo.NewTypesEntry\x1aN\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4StructTypeSpec:\x02\x38\x01\x1aN\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4HeaderTypeSpec:\x02\x38\x01\x1aX\n\x11HeaderUnionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.P4HeaderUnionTypeSpec:\x02\x38\x01\x1aJ\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4EnumTypeSpec:\x02\x38\x01\x1a\x62\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.p4.config.v1.P4SerializableEnumTypeSpec:\x02\x38\x01\x1aL\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4NewTypeSpec:\x02\x38\x01\"\x83\x05\n\x0eP4DataTypeSpec\x12:\n\tbitstring\x18\x01 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpecH\x00\x12(\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.P4BoolTypeH\x00\x12.\n\x05tuple\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.P4TupleTypeSpecH\x00\x12+\n\x06struct\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12+\n\x06header\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12\x31\n\x0cheader_union\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12;\n\x0cheader_stack\x18\x07 \x01(\x0b\x32#.p4.config.v1.P4HeaderStackTypeSpecH\x00\x12\x46\n\x12header_union_stack\x18\x08 \x01(\x0b\x32(.p4.config.v1.P4HeaderUnionStackTypeSpecH\x00\x12)\n\x04\x65num\x18\t \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12*\n\x05\x65rror\x18\n \x01(\x0b\x32\x19.p4.config.v1.P4ErrorTypeH\x00\x12\x36\n\x11serializable_enum\x18\x0b \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12-\n\x08new_type\x18\x0c \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x42\x0b\n\ttype_spec\"\x1b\n\x0bP4NamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x0c\n\nP4BoolType\"\r\n\x0bP4ErrorType\"\xc5\x02\n\x17P4BitstringLikeTypeSpec\x12*\n\x03\x62it\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpecH\x00\x12*\n\x03int\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4IntTypeSpecH\x00\x12\x30\n\x06varbit\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.P4VarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"!\n\rP4BitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"!\n\rP4IntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"(\n\x10P4VarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\"@\n\x0fP4TupleTypeSpec\x12-\n\x07members\x18\x01 \x03(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xa8\x02\n\x10P4StructTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4StructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aG\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xb1\x02\n\x10P4HeaderTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4HeaderTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aP\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\ttype_spec\x18\x02 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpec\"\xac\x02\n\x15P4HeaderUnionTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.P4HeaderUnionTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\x41\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x06header\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"P\n\x15P4HeaderStackTypeSpec\x12)\n\x06header\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"[\n\x1aP4HeaderUnionStackTypeSpec\x12/\n\x0cheader_union\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"D\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.Expression\"@\n\x10KeyValuePairList\x12,\n\x08kv_pairs\x18\x01 \x03(\x0b\x32\x1a.p4.config.v1.KeyValuePair\"Z\n\nExpression\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x15\n\x0bint64_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value\"?\n\x0e\x45xpressionList\x12-\n\x0b\x65xpressions\x18\x01 \x03(\x0b\x32\x18.p4.config.v1.Expression\"\xd4\x01\n\x14StructuredAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x37\n\x0f\x65xpression_list\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.ExpressionListH\x00\x12\x36\n\x0ckv_pair_list\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.KeyValuePairListH\x00\x12\x35\n\x0fsource_location\x18\x04 \x01(\x0b\x32\x1c.p4.config.v1.SourceLocationB\x06\n\x04\x62ody\"<\n\x0eSourceLocation\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\x05\x12\x0e\n\x06\x63olumn\x18\x03 \x01(\x05\"\x89\x03\n\x0eP4EnumTypeSpec\x12\x34\n\x07members\x18\x01 \x03(\x0b\x32#.p4.config.v1.P4EnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xab\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xe6\x03\n\x1aP4SerializableEnumTypeSpec\x12\x34\n\x0funderlying_type\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpec\x12@\n\x07members\x18\x02 \x03(\x0b\x32/.p4.config.v1.P4SerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xba\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\"\n\x0fP4ErrorTypeSpec\x12\x0f\n\x07members\x18\x01 \x03(\t\"\x98\x01\n\x14P4NewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12\x42\n\nsdn_string\x18\x03 \x01(\x0b\x32,.p4.config.v1.P4NewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xac\x02\n\rP4NewTypeSpec\x12\x35\n\roriginal_type\x18\x01 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x12=\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\".p4.config.v1.P4NewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentation\"\xb0\x07\n\x0fGenericTypeInfo\x12;\n\x07structs\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericTypeInfo.StructsEntry\x12\x37\n\x05lists\x18\x02 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.ListsEntry\x12H\n\x0eunordered_sets\x18\x03 \x03(\x0b\x32\x30.p4.config.v1.GenericTypeInfo.UnorderedSetsEntry\x12\x37\n\x05\x65nums\x18\x04 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.EnumsEntry\x12P\n\x12serializable_enums\x18\x05 \x03(\x0b\x32\x34.p4.config.v1.GenericTypeInfo.SerializableEnumsEntry\x12>\n\tnew_types\x18\x06 \x03(\x0b\x32+.p4.config.v1.GenericTypeInfo.NewTypesEntry\x1aS\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.GenericStructTypeSpec:\x02\x38\x01\x1aO\n\nListsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericListTypeSpec:\x02\x38\x01\x1a_\n\x12UnorderedSetsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).p4.config.v1.GenericUnorderedSetTypeSpec:\x02\x38\x01\x1aO\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericEnumTypeSpec:\x02\x38\x01\x1ag\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12<\n\x05value\x18\x02 \x01(\x0b\x32-.p4.config.v1.GenericSerializableEnumTypeSpec:\x02\x38\x01\x1aQ\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericNewTypeSpec:\x02\x38\x01\"\x80\x04\n\x13GenericDataTypeSpec\x12?\n\tbitstring\x18\x01 \x01(\x0b\x32*.p4.config.v1.GenericBitstringLikeTypeSpecH\x00\x12-\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x1d.p4.config.v1.GenericBoolTypeH\x00\x12\x30\n\x06struct\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04list\x18\x04 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x37\n\runordered_set\x18\x05 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x30\n\x06string\x18\x06 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04\x65num\x18\x07 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12;\n\x11serializable_enum\x18\x08 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x32\n\x08new_type\x18\t \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x42\x0b\n\ttype_spec\" \n\x10GenericNamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"(\n\x0fGenericBoolType\x12\x15\n\rdefault_value\x18\x01 \x01(\x05\"\xd9\x02\n\x1cGenericBitstringLikeTypeSpec\x12/\n\x03\x62it\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpecH\x00\x12/\n\x03int\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericIntTypeSpecH\x00\x12\x35\n\x06varbit\x18\x03 \x01(\x0b\x32#.p4.config.v1.GenericVarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"=\n\x12GenericBitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"=\n\x12GenericIntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"D\n\x15GenericVarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\"\xc3\x02\n\x15GenericStructTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericStructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aX\n\x06Member\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x34\n\ttype_spec\x18\x03 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\"\x8c\x02\n\x13GenericListTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x94\x02\n\x1bGenericUnorderedSetTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xda\x01\n\x11GenericStringSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08min_size\x18\x02 \x01(\x05\x12\x10\n\x08max_size\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xaa\x03\n\x13GenericEnumTypeSpec\x12\x39\n\x07members\x18\x01 \x03(\x0b\x32(.p4.config.v1.GenericEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xc2\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x8c\x04\n\x1fGenericSerializableEnumTypeSpec\x12\x39\n\x0funderlying_type\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpec\x12\x45\n\x07members\x18\x02 \x03(\x0b\x32\x34.p4.config.v1.GenericSerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xd1\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x15\n\rdefault_value\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xa2\x01\n\x19GenericNewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12G\n\nsdn_string\x18\x03 \x01(\x0b\x32\x31.p4.config.v1.GenericNewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xbb\x02\n\x12GenericNewTypeSpec\x12:\n\roriginal_type\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpecH\x00\x12\x42\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\'.p4.config.v1.GenericNewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentationB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' + serialized_pb=b'\n\x1ap4/config/v1/p4types.proto\x12\x0cp4.config.v1\"\xa1\x07\n\nP4TypeInfo\x12\x36\n\x07structs\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.StructsEntry\x12\x36\n\x07headers\x18\x02 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.HeadersEntry\x12\x41\n\rheader_unions\x18\x03 \x03(\x0b\x32*.p4.config.v1.P4TypeInfo.HeaderUnionsEntry\x12\x32\n\x05\x65nums\x18\x04 \x03(\x0b\x32#.p4.config.v1.P4TypeInfo.EnumsEntry\x12,\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x1d.p4.config.v1.P4ErrorTypeSpec\x12K\n\x12serializable_enums\x18\x06 \x03(\x0b\x32/.p4.config.v1.P4TypeInfo.SerializableEnumsEntry\x12\x39\n\tnew_types\x18\x07 \x03(\x0b\x32&.p4.config.v1.P4TypeInfo.NewTypesEntry\x1aN\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4StructTypeSpec:\x02\x38\x01\x1aN\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4HeaderTypeSpec:\x02\x38\x01\x1aX\n\x11HeaderUnionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.P4HeaderUnionTypeSpec:\x02\x38\x01\x1aJ\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4EnumTypeSpec:\x02\x38\x01\x1a\x62\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.p4.config.v1.P4SerializableEnumTypeSpec:\x02\x38\x01\x1aL\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4NewTypeSpec:\x02\x38\x01\"\x83\x05\n\x0eP4DataTypeSpec\x12:\n\tbitstring\x18\x01 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpecH\x00\x12(\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.P4BoolTypeH\x00\x12.\n\x05tuple\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.P4TupleTypeSpecH\x00\x12+\n\x06struct\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12+\n\x06header\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12\x31\n\x0cheader_union\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12;\n\x0cheader_stack\x18\x07 \x01(\x0b\x32#.p4.config.v1.P4HeaderStackTypeSpecH\x00\x12\x46\n\x12header_union_stack\x18\x08 \x01(\x0b\x32(.p4.config.v1.P4HeaderUnionStackTypeSpecH\x00\x12)\n\x04\x65num\x18\t \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12*\n\x05\x65rror\x18\n \x01(\x0b\x32\x19.p4.config.v1.P4ErrorTypeH\x00\x12\x36\n\x11serializable_enum\x18\x0b \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12-\n\x08new_type\x18\x0c \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x42\x0b\n\ttype_spec\"\x1b\n\x0bP4NamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x0c\n\nP4BoolType\"\r\n\x0bP4ErrorType\"\xc5\x02\n\x17P4BitstringLikeTypeSpec\x12*\n\x03\x62it\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpecH\x00\x12*\n\x03int\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4IntTypeSpecH\x00\x12\x30\n\x06varbit\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.P4VarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"!\n\rP4BitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"!\n\rP4IntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"(\n\x10P4VarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\"@\n\x0fP4TupleTypeSpec\x12-\n\x07members\x18\x01 \x03(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xa8\x02\n\x10P4StructTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4StructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aG\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xb1\x02\n\x10P4HeaderTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4HeaderTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aP\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\ttype_spec\x18\x02 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpec\"\xac\x02\n\x15P4HeaderUnionTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.P4HeaderUnionTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\x41\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x06header\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"P\n\x15P4HeaderStackTypeSpec\x12)\n\x06header\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"[\n\x1aP4HeaderUnionStackTypeSpec\x12/\n\x0cheader_union\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"D\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.Expression\"@\n\x10KeyValuePairList\x12,\n\x08kv_pairs\x18\x01 \x03(\x0b\x32\x1a.p4.config.v1.KeyValuePair\"Z\n\nExpression\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x15\n\x0bint64_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value\"?\n\x0e\x45xpressionList\x12-\n\x0b\x65xpressions\x18\x01 \x03(\x0b\x32\x18.p4.config.v1.Expression\"\xd4\x01\n\x14StructuredAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x37\n\x0f\x65xpression_list\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.ExpressionListH\x00\x12\x36\n\x0ckv_pair_list\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.KeyValuePairListH\x00\x12\x35\n\x0fsource_location\x18\x04 \x01(\x0b\x32\x1c.p4.config.v1.SourceLocationB\x06\n\x04\x62ody\"<\n\x0eSourceLocation\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\x05\x12\x0e\n\x06\x63olumn\x18\x03 \x01(\x05\"\x89\x03\n\x0eP4EnumTypeSpec\x12\x34\n\x07members\x18\x01 \x03(\x0b\x32#.p4.config.v1.P4EnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xab\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xe6\x03\n\x1aP4SerializableEnumTypeSpec\x12\x34\n\x0funderlying_type\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpec\x12@\n\x07members\x18\x02 \x03(\x0b\x32/.p4.config.v1.P4SerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xba\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\"\n\x0fP4ErrorTypeSpec\x12\x0f\n\x07members\x18\x01 \x03(\t\"\x98\x01\n\x14P4NewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12\x42\n\nsdn_string\x18\x03 \x01(\x0b\x32,.p4.config.v1.P4NewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xac\x02\n\rP4NewTypeSpec\x12\x35\n\roriginal_type\x18\x01 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x12=\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\".p4.config.v1.P4NewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentation\"\xb0\x07\n\x0fGenericTypeInfo\x12;\n\x07structs\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericTypeInfo.StructsEntry\x12\x37\n\x05lists\x18\x02 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.ListsEntry\x12H\n\x0eunordered_sets\x18\x03 \x03(\x0b\x32\x30.p4.config.v1.GenericTypeInfo.UnorderedSetsEntry\x12\x37\n\x05\x65nums\x18\x04 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.EnumsEntry\x12P\n\x12serializable_enums\x18\x05 \x03(\x0b\x32\x34.p4.config.v1.GenericTypeInfo.SerializableEnumsEntry\x12>\n\tnew_types\x18\x06 \x03(\x0b\x32+.p4.config.v1.GenericTypeInfo.NewTypesEntry\x1aS\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.GenericStructTypeSpec:\x02\x38\x01\x1aO\n\nListsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericListTypeSpec:\x02\x38\x01\x1a_\n\x12UnorderedSetsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).p4.config.v1.GenericUnorderedSetTypeSpec:\x02\x38\x01\x1aO\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericEnumTypeSpec:\x02\x38\x01\x1ag\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12<\n\x05value\x18\x02 \x01(\x0b\x32-.p4.config.v1.GenericSerializableEnumTypeSpec:\x02\x38\x01\x1aQ\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericNewTypeSpec:\x02\x38\x01\"\x80\x04\n\x13GenericDataTypeSpec\x12?\n\tbitstring\x18\x01 \x01(\x0b\x32*.p4.config.v1.GenericBitstringLikeTypeSpecH\x00\x12-\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x1d.p4.config.v1.GenericBoolTypeH\x00\x12\x30\n\x06struct\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04list\x18\x04 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x37\n\runordered_set\x18\x05 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x30\n\x06string\x18\x06 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04\x65num\x18\x07 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12;\n\x11serializable_enum\x18\x08 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x32\n\x08new_type\x18\t \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x42\x0b\n\ttype_spec\" \n\x10GenericNamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"(\n\x0fGenericBoolType\x12\x15\n\rdefault_value\x18\x01 \x01(\x05\"\xd9\x02\n\x1cGenericBitstringLikeTypeSpec\x12/\n\x03\x62it\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpecH\x00\x12/\n\x03int\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericIntTypeSpecH\x00\x12\x35\n\x06varbit\x18\x03 \x01(\x0b\x32#.p4.config.v1.GenericVarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"=\n\x12GenericBitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x0c\"=\n\x12GenericIntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x0c\"D\n\x15GenericVarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x0c\"\xc3\x02\n\x15GenericStructTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericStructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aX\n\x06Member\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x34\n\ttype_spec\x18\x03 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\"\x8c\x02\n\x13GenericListTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x94\x02\n\x1bGenericUnorderedSetTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xda\x01\n\x11GenericStringSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08min_size\x18\x02 \x01(\x05\x12\x10\n\x08max_size\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xaa\x03\n\x13GenericEnumTypeSpec\x12\x39\n\x07members\x18\x01 \x03(\x0b\x32(.p4.config.v1.GenericEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xc2\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x8c\x04\n\x1fGenericSerializableEnumTypeSpec\x12\x39\n\x0funderlying_type\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpec\x12\x45\n\x07members\x18\x02 \x03(\x0b\x32\x34.p4.config.v1.GenericSerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xd1\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x15\n\rdefault_value\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xa2\x01\n\x19GenericNewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12G\n\nsdn_string\x18\x03 \x01(\x0b\x32\x31.p4.config.v1.GenericNewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xbb\x02\n\x12GenericNewTypeSpec\x12:\n\roriginal_type\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpecH\x00\x12\x42\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\'.p4.config.v1.GenericNewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentationB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' ) @@ -2269,8 +2269,8 @@ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='default_value', full_name='p4.config.v1.GenericBitTypeSpec.default_value', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), @@ -2308,8 +2308,8 @@ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='default_value', full_name='p4.config.v1.GenericIntTypeSpec.default_value', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), @@ -2347,8 +2347,8 @@ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='default_value', full_name='p4.config.v1.GenericVarbitTypeSpec.default_value', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), From 727bab2f4325ab49688ba0ab0a688d547126a067 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 6 Sep 2023 19:16:05 -0700 Subject: [PATCH 37/42] Adding default string value --- go/p4/config/v1/p4types.pb.go | 254 ++++++++++++++++--------------- proto/p4/config/v1/p4types.proto | 11 +- py/p4/config/v1/p4types_pb2.py | 55 ++++--- 3 files changed, 169 insertions(+), 151 deletions(-) diff --git a/go/p4/config/v1/p4types.pb.go b/go/p4/config/v1/p4types.pb.go index 6867e0b6..52fe5b2b 100644 --- a/go/p4/config/v1/p4types.pb.go +++ b/go/p4/config/v1/p4types.pb.go @@ -2864,14 +2864,15 @@ type GenericStringSpec struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - MinSize int32 `protobuf:"varint,2,opt,name=min_size,json=minSize,proto3" json:"min_size,omitempty"` // 0 if not present - MaxSize int32 `protobuf:"varint,3,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` // no max size defined if not present - Annotations []string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + DefaultValue string `protobuf:"bytes,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + MinSize int32 `protobuf:"varint,3,opt,name=min_size,json=minSize,proto3" json:"min_size,omitempty"` // 0 if not present + MaxSize int32 `protobuf:"varint,4,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` // no max size defined if not present + Annotations []string `protobuf:"bytes,5,rep,name=annotations,proto3" json:"annotations,omitempty"` // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - AnnotationLocations []*SourceLocation `protobuf:"bytes,5,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` - StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,6,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` + AnnotationLocations []*SourceLocation `protobuf:"bytes,6,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,7,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` } func (x *GenericStringSpec) Reset() { @@ -2913,6 +2914,13 @@ func (x *GenericStringSpec) GetName() string { return "" } +func (x *GenericStringSpec) GetDefaultValue() string { + if x != nil { + return x.DefaultValue + } + return "" +} + func (x *GenericStringSpec) GetMinSize() int32 { if x != nil { return x.MinSize @@ -4568,146 +4576,148 @@ var file_p4_config_v1_p4types_proto_rawDesc = []byte{ 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x11, 0x47, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xd0, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, - 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x04, 0x0a, 0x13, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x42, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, - 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x1a, 0x8f, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb2, 0x05, 0x0a, 0x1f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, - 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x49, 0x0a, 0x0f, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, - 0x70, 0x65, 0x63, 0x52, 0x0e, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x4e, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, - 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x69, 0x6e, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x04, + 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0xa5, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, + 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x8f, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x64, 0x6e, - 0x5f, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, - 0x00, 0x52, 0x0b, 0x73, 0x64, 0x6e, 0x42, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x52, - 0x0a, 0x0a, 0x73, 0x64, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x64, 0x6e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x09, 0x73, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x1a, 0x0b, 0x0a, 0x09, 0x53, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, - 0x0a, 0x0a, 0x08, 0x73, 0x64, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x92, 0x03, 0x0a, 0x12, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x48, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb2, 0x05, 0x0a, 0x1f, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x49, 0x0a, + 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x69, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, + 0x79, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4e, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x0c, - 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, - 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xa5, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, - 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, + 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, - 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, - 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, - 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xbf, + 0x01, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, + 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, + 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x23, + 0x0a, 0x0c, 0x73, 0x64, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x64, 0x6e, 0x42, 0x69, 0x74, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x12, 0x52, 0x0a, 0x0a, 0x73, 0x64, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, + 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x53, 0x64, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x09, 0x73, 0x64, + 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x0b, 0x0a, 0x09, 0x53, 0x64, 0x6e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x42, 0x0a, 0x0a, 0x08, 0x73, 0x64, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x92, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4e, 0x65, 0x77, 0x54, + 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x48, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x4e, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index 110ff354..cbc00414 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -403,13 +403,14 @@ message GenericUnorderedSetTypeSpec { message GenericStringSpec { string name = 1; - int32 min_size = 2; // 0 if not present - int32 max_size = 3; // no max size defined if not present - repeated string annotations = 4; + string default_value = 2; + int32 min_size = 3; // 0 if not present + int32 max_size = 4; // no max size defined if not present + repeated string annotations = 5; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - repeated SourceLocation annotation_locations = 5; - repeated StructuredAnnotation structured_annotations = 6; + repeated SourceLocation annotation_locations = 6; + repeated StructuredAnnotation structured_annotations = 7; } message GenericEnumTypeSpec { message Member { diff --git a/py/p4/config/v1/p4types_pb2.py b/py/p4/config/v1/p4types_pb2.py index 40d571fb..ec027ed3 100644 --- a/py/p4/config/v1/p4types_pb2.py +++ b/py/p4/config/v1/p4types_pb2.py @@ -19,7 +19,7 @@ syntax='proto3', serialized_options=b'Z+github.com/p4lang/p4runtime/go/p4/config/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x1ap4/config/v1/p4types.proto\x12\x0cp4.config.v1\"\xa1\x07\n\nP4TypeInfo\x12\x36\n\x07structs\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.StructsEntry\x12\x36\n\x07headers\x18\x02 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.HeadersEntry\x12\x41\n\rheader_unions\x18\x03 \x03(\x0b\x32*.p4.config.v1.P4TypeInfo.HeaderUnionsEntry\x12\x32\n\x05\x65nums\x18\x04 \x03(\x0b\x32#.p4.config.v1.P4TypeInfo.EnumsEntry\x12,\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x1d.p4.config.v1.P4ErrorTypeSpec\x12K\n\x12serializable_enums\x18\x06 \x03(\x0b\x32/.p4.config.v1.P4TypeInfo.SerializableEnumsEntry\x12\x39\n\tnew_types\x18\x07 \x03(\x0b\x32&.p4.config.v1.P4TypeInfo.NewTypesEntry\x1aN\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4StructTypeSpec:\x02\x38\x01\x1aN\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4HeaderTypeSpec:\x02\x38\x01\x1aX\n\x11HeaderUnionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.P4HeaderUnionTypeSpec:\x02\x38\x01\x1aJ\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4EnumTypeSpec:\x02\x38\x01\x1a\x62\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.p4.config.v1.P4SerializableEnumTypeSpec:\x02\x38\x01\x1aL\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4NewTypeSpec:\x02\x38\x01\"\x83\x05\n\x0eP4DataTypeSpec\x12:\n\tbitstring\x18\x01 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpecH\x00\x12(\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.P4BoolTypeH\x00\x12.\n\x05tuple\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.P4TupleTypeSpecH\x00\x12+\n\x06struct\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12+\n\x06header\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12\x31\n\x0cheader_union\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12;\n\x0cheader_stack\x18\x07 \x01(\x0b\x32#.p4.config.v1.P4HeaderStackTypeSpecH\x00\x12\x46\n\x12header_union_stack\x18\x08 \x01(\x0b\x32(.p4.config.v1.P4HeaderUnionStackTypeSpecH\x00\x12)\n\x04\x65num\x18\t \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12*\n\x05\x65rror\x18\n \x01(\x0b\x32\x19.p4.config.v1.P4ErrorTypeH\x00\x12\x36\n\x11serializable_enum\x18\x0b \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12-\n\x08new_type\x18\x0c \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x42\x0b\n\ttype_spec\"\x1b\n\x0bP4NamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x0c\n\nP4BoolType\"\r\n\x0bP4ErrorType\"\xc5\x02\n\x17P4BitstringLikeTypeSpec\x12*\n\x03\x62it\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpecH\x00\x12*\n\x03int\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4IntTypeSpecH\x00\x12\x30\n\x06varbit\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.P4VarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"!\n\rP4BitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"!\n\rP4IntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"(\n\x10P4VarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\"@\n\x0fP4TupleTypeSpec\x12-\n\x07members\x18\x01 \x03(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xa8\x02\n\x10P4StructTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4StructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aG\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xb1\x02\n\x10P4HeaderTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4HeaderTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aP\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\ttype_spec\x18\x02 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpec\"\xac\x02\n\x15P4HeaderUnionTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.P4HeaderUnionTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\x41\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x06header\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"P\n\x15P4HeaderStackTypeSpec\x12)\n\x06header\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"[\n\x1aP4HeaderUnionStackTypeSpec\x12/\n\x0cheader_union\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"D\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.Expression\"@\n\x10KeyValuePairList\x12,\n\x08kv_pairs\x18\x01 \x03(\x0b\x32\x1a.p4.config.v1.KeyValuePair\"Z\n\nExpression\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x15\n\x0bint64_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value\"?\n\x0e\x45xpressionList\x12-\n\x0b\x65xpressions\x18\x01 \x03(\x0b\x32\x18.p4.config.v1.Expression\"\xd4\x01\n\x14StructuredAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x37\n\x0f\x65xpression_list\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.ExpressionListH\x00\x12\x36\n\x0ckv_pair_list\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.KeyValuePairListH\x00\x12\x35\n\x0fsource_location\x18\x04 \x01(\x0b\x32\x1c.p4.config.v1.SourceLocationB\x06\n\x04\x62ody\"<\n\x0eSourceLocation\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\x05\x12\x0e\n\x06\x63olumn\x18\x03 \x01(\x05\"\x89\x03\n\x0eP4EnumTypeSpec\x12\x34\n\x07members\x18\x01 \x03(\x0b\x32#.p4.config.v1.P4EnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xab\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xe6\x03\n\x1aP4SerializableEnumTypeSpec\x12\x34\n\x0funderlying_type\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpec\x12@\n\x07members\x18\x02 \x03(\x0b\x32/.p4.config.v1.P4SerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xba\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\"\n\x0fP4ErrorTypeSpec\x12\x0f\n\x07members\x18\x01 \x03(\t\"\x98\x01\n\x14P4NewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12\x42\n\nsdn_string\x18\x03 \x01(\x0b\x32,.p4.config.v1.P4NewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xac\x02\n\rP4NewTypeSpec\x12\x35\n\roriginal_type\x18\x01 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x12=\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\".p4.config.v1.P4NewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentation\"\xb0\x07\n\x0fGenericTypeInfo\x12;\n\x07structs\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericTypeInfo.StructsEntry\x12\x37\n\x05lists\x18\x02 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.ListsEntry\x12H\n\x0eunordered_sets\x18\x03 \x03(\x0b\x32\x30.p4.config.v1.GenericTypeInfo.UnorderedSetsEntry\x12\x37\n\x05\x65nums\x18\x04 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.EnumsEntry\x12P\n\x12serializable_enums\x18\x05 \x03(\x0b\x32\x34.p4.config.v1.GenericTypeInfo.SerializableEnumsEntry\x12>\n\tnew_types\x18\x06 \x03(\x0b\x32+.p4.config.v1.GenericTypeInfo.NewTypesEntry\x1aS\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.GenericStructTypeSpec:\x02\x38\x01\x1aO\n\nListsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericListTypeSpec:\x02\x38\x01\x1a_\n\x12UnorderedSetsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).p4.config.v1.GenericUnorderedSetTypeSpec:\x02\x38\x01\x1aO\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericEnumTypeSpec:\x02\x38\x01\x1ag\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12<\n\x05value\x18\x02 \x01(\x0b\x32-.p4.config.v1.GenericSerializableEnumTypeSpec:\x02\x38\x01\x1aQ\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericNewTypeSpec:\x02\x38\x01\"\x80\x04\n\x13GenericDataTypeSpec\x12?\n\tbitstring\x18\x01 \x01(\x0b\x32*.p4.config.v1.GenericBitstringLikeTypeSpecH\x00\x12-\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x1d.p4.config.v1.GenericBoolTypeH\x00\x12\x30\n\x06struct\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04list\x18\x04 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x37\n\runordered_set\x18\x05 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x30\n\x06string\x18\x06 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04\x65num\x18\x07 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12;\n\x11serializable_enum\x18\x08 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x32\n\x08new_type\x18\t \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x42\x0b\n\ttype_spec\" \n\x10GenericNamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"(\n\x0fGenericBoolType\x12\x15\n\rdefault_value\x18\x01 \x01(\x05\"\xd9\x02\n\x1cGenericBitstringLikeTypeSpec\x12/\n\x03\x62it\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpecH\x00\x12/\n\x03int\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericIntTypeSpecH\x00\x12\x35\n\x06varbit\x18\x03 \x01(\x0b\x32#.p4.config.v1.GenericVarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"=\n\x12GenericBitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x0c\"=\n\x12GenericIntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x0c\"D\n\x15GenericVarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x0c\"\xc3\x02\n\x15GenericStructTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericStructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aX\n\x06Member\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x34\n\ttype_spec\x18\x03 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\"\x8c\x02\n\x13GenericListTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x94\x02\n\x1bGenericUnorderedSetTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xda\x01\n\x11GenericStringSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08min_size\x18\x02 \x01(\x05\x12\x10\n\x08max_size\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xaa\x03\n\x13GenericEnumTypeSpec\x12\x39\n\x07members\x18\x01 \x03(\x0b\x32(.p4.config.v1.GenericEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xc2\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x8c\x04\n\x1fGenericSerializableEnumTypeSpec\x12\x39\n\x0funderlying_type\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpec\x12\x45\n\x07members\x18\x02 \x03(\x0b\x32\x34.p4.config.v1.GenericSerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xd1\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x15\n\rdefault_value\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xa2\x01\n\x19GenericNewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12G\n\nsdn_string\x18\x03 \x01(\x0b\x32\x31.p4.config.v1.GenericNewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xbb\x02\n\x12GenericNewTypeSpec\x12:\n\roriginal_type\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpecH\x00\x12\x42\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\'.p4.config.v1.GenericNewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentationB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' + serialized_pb=b'\n\x1ap4/config/v1/p4types.proto\x12\x0cp4.config.v1\"\xa1\x07\n\nP4TypeInfo\x12\x36\n\x07structs\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.StructsEntry\x12\x36\n\x07headers\x18\x02 \x03(\x0b\x32%.p4.config.v1.P4TypeInfo.HeadersEntry\x12\x41\n\rheader_unions\x18\x03 \x03(\x0b\x32*.p4.config.v1.P4TypeInfo.HeaderUnionsEntry\x12\x32\n\x05\x65nums\x18\x04 \x03(\x0b\x32#.p4.config.v1.P4TypeInfo.EnumsEntry\x12,\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x1d.p4.config.v1.P4ErrorTypeSpec\x12K\n\x12serializable_enums\x18\x06 \x03(\x0b\x32/.p4.config.v1.P4TypeInfo.SerializableEnumsEntry\x12\x39\n\tnew_types\x18\x07 \x03(\x0b\x32&.p4.config.v1.P4TypeInfo.NewTypesEntry\x1aN\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4StructTypeSpec:\x02\x38\x01\x1aN\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.p4.config.v1.P4HeaderTypeSpec:\x02\x38\x01\x1aX\n\x11HeaderUnionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.P4HeaderUnionTypeSpec:\x02\x38\x01\x1aJ\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4EnumTypeSpec:\x02\x38\x01\x1a\x62\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x37\n\x05value\x18\x02 \x01(\x0b\x32(.p4.config.v1.P4SerializableEnumTypeSpec:\x02\x38\x01\x1aL\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4NewTypeSpec:\x02\x38\x01\"\x83\x05\n\x0eP4DataTypeSpec\x12:\n\tbitstring\x18\x01 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpecH\x00\x12(\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.P4BoolTypeH\x00\x12.\n\x05tuple\x18\x03 \x01(\x0b\x32\x1d.p4.config.v1.P4TupleTypeSpecH\x00\x12+\n\x06struct\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12+\n\x06header\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12\x31\n\x0cheader_union\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12;\n\x0cheader_stack\x18\x07 \x01(\x0b\x32#.p4.config.v1.P4HeaderStackTypeSpecH\x00\x12\x46\n\x12header_union_stack\x18\x08 \x01(\x0b\x32(.p4.config.v1.P4HeaderUnionStackTypeSpecH\x00\x12)\n\x04\x65num\x18\t \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12*\n\x05\x65rror\x18\n \x01(\x0b\x32\x19.p4.config.v1.P4ErrorTypeH\x00\x12\x36\n\x11serializable_enum\x18\x0b \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x12-\n\x08new_type\x18\x0c \x01(\x0b\x32\x19.p4.config.v1.P4NamedTypeH\x00\x42\x0b\n\ttype_spec\"\x1b\n\x0bP4NamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x0c\n\nP4BoolType\"\r\n\x0bP4ErrorType\"\xc5\x02\n\x17P4BitstringLikeTypeSpec\x12*\n\x03\x62it\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpecH\x00\x12*\n\x03int\x18\x02 \x01(\x0b\x32\x1b.p4.config.v1.P4IntTypeSpecH\x00\x12\x30\n\x06varbit\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.P4VarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"!\n\rP4BitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"!\n\rP4IntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\"(\n\x10P4VarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\"@\n\x0fP4TupleTypeSpec\x12-\n\x07members\x18\x01 \x03(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xa8\x02\n\x10P4StructTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4StructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aG\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xb1\x02\n\x10P4HeaderTypeSpec\x12\x36\n\x07members\x18\x01 \x03(\x0b\x32%.p4.config.v1.P4HeaderTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aP\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\ttype_spec\x18\x02 \x01(\x0b\x32%.p4.config.v1.P4BitstringLikeTypeSpec\"\xac\x02\n\x15P4HeaderUnionTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.P4HeaderUnionTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\x41\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x06header\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"P\n\x15P4HeaderStackTypeSpec\x12)\n\x06header\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"[\n\x1aP4HeaderUnionStackTypeSpec\x12/\n\x0cheader_union\x18\x01 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x0c\n\x04size\x18\x02 \x01(\x05\"D\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.p4.config.v1.Expression\"@\n\x10KeyValuePairList\x12,\n\x08kv_pairs\x18\x01 \x03(\x0b\x32\x1a.p4.config.v1.KeyValuePair\"Z\n\nExpression\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x15\n\x0bint64_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value\"?\n\x0e\x45xpressionList\x12-\n\x0b\x65xpressions\x18\x01 \x03(\x0b\x32\x18.p4.config.v1.Expression\"\xd4\x01\n\x14StructuredAnnotation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x37\n\x0f\x65xpression_list\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.ExpressionListH\x00\x12\x36\n\x0ckv_pair_list\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.KeyValuePairListH\x00\x12\x35\n\x0fsource_location\x18\x04 \x01(\x0b\x32\x1c.p4.config.v1.SourceLocationB\x06\n\x04\x62ody\"<\n\x0eSourceLocation\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\x05\x12\x0e\n\x06\x63olumn\x18\x03 \x01(\x05\"\x89\x03\n\x0eP4EnumTypeSpec\x12\x34\n\x07members\x18\x01 \x03(\x0b\x32#.p4.config.v1.P4EnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xab\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x03 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xe6\x03\n\x1aP4SerializableEnumTypeSpec\x12\x34\n\x0funderlying_type\x18\x01 \x01(\x0b\x32\x1b.p4.config.v1.P4BitTypeSpec\x12@\n\x07members\x18\x02 \x03(\x0b\x32/.p4.config.v1.P4SerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xba\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\"\n\x0fP4ErrorTypeSpec\x12\x0f\n\x07members\x18\x01 \x03(\t\"\x98\x01\n\x14P4NewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12\x42\n\nsdn_string\x18\x03 \x01(\x0b\x32,.p4.config.v1.P4NewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xac\x02\n\rP4NewTypeSpec\x12\x35\n\roriginal_type\x18\x01 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecH\x00\x12=\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\".p4.config.v1.P4NewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentation\"\xb0\x07\n\x0fGenericTypeInfo\x12;\n\x07structs\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericTypeInfo.StructsEntry\x12\x37\n\x05lists\x18\x02 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.ListsEntry\x12H\n\x0eunordered_sets\x18\x03 \x03(\x0b\x32\x30.p4.config.v1.GenericTypeInfo.UnorderedSetsEntry\x12\x37\n\x05\x65nums\x18\x04 \x03(\x0b\x32(.p4.config.v1.GenericTypeInfo.EnumsEntry\x12P\n\x12serializable_enums\x18\x05 \x03(\x0b\x32\x34.p4.config.v1.GenericTypeInfo.SerializableEnumsEntry\x12>\n\tnew_types\x18\x06 \x03(\x0b\x32+.p4.config.v1.GenericTypeInfo.NewTypesEntry\x1aS\n\x0cStructsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.p4.config.v1.GenericStructTypeSpec:\x02\x38\x01\x1aO\n\nListsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericListTypeSpec:\x02\x38\x01\x1a_\n\x12UnorderedSetsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).p4.config.v1.GenericUnorderedSetTypeSpec:\x02\x38\x01\x1aO\n\nEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.p4.config.v1.GenericEnumTypeSpec:\x02\x38\x01\x1ag\n\x16SerializableEnumsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12<\n\x05value\x18\x02 \x01(\x0b\x32-.p4.config.v1.GenericSerializableEnumTypeSpec:\x02\x38\x01\x1aQ\n\rNewTypesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericNewTypeSpec:\x02\x38\x01\"\x80\x04\n\x13GenericDataTypeSpec\x12?\n\tbitstring\x18\x01 \x01(\x0b\x32*.p4.config.v1.GenericBitstringLikeTypeSpecH\x00\x12-\n\x04\x62ool\x18\x02 \x01(\x0b\x32\x1d.p4.config.v1.GenericBoolTypeH\x00\x12\x30\n\x06struct\x18\x03 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04list\x18\x04 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x37\n\runordered_set\x18\x05 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x30\n\x06string\x18\x06 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12.\n\x04\x65num\x18\x07 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12;\n\x11serializable_enum\x18\x08 \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x12\x32\n\x08new_type\x18\t \x01(\x0b\x32\x1e.p4.config.v1.GenericNamedTypeH\x00\x42\x0b\n\ttype_spec\" \n\x10GenericNamedType\x12\x0c\n\x04name\x18\x01 \x01(\t\"(\n\x0fGenericBoolType\x12\x15\n\rdefault_value\x18\x01 \x01(\x05\"\xd9\x02\n\x1cGenericBitstringLikeTypeSpec\x12/\n\x03\x62it\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpecH\x00\x12/\n\x03int\x18\x02 \x01(\x0b\x32 .p4.config.v1.GenericIntTypeSpecH\x00\x12\x35\n\x06varbit\x18\x03 \x01(\x0b\x32#.p4.config.v1.GenericVarbitTypeSpecH\x00\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x0b\n\ttype_spec\"=\n\x12GenericBitTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x0c\"=\n\x12GenericIntTypeSpec\x12\x10\n\x08\x62itwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x0c\"D\n\x15GenericVarbitTypeSpec\x12\x14\n\x0cmax_bitwidth\x18\x01 \x01(\x05\x12\x15\n\rdefault_value\x18\x02 \x01(\x0c\"\xc3\x02\n\x15GenericStructTypeSpec\x12;\n\x07members\x18\x01 \x03(\x0b\x32*.p4.config.v1.GenericStructTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1aX\n\x06Member\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x34\n\ttype_spec\x18\x03 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\"\x8c\x02\n\x13GenericListTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x94\x02\n\x1bGenericUnorderedSetTypeSpec\x12<\n\x11\x65lement_type_spec\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12\x10\n\x08min_size\x18\x04 \x01(\x05\x12\x10\n\x08max_size\x18\x05 \x01(\x05\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xf1\x01\n\x11GenericStringSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rdefault_value\x18\x02 \x01(\t\x12\x10\n\x08min_size\x18\x03 \x01(\x05\x12\x10\n\x08max_size\x18\x04 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x05 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x06 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xaa\x03\n\x13GenericEnumTypeSpec\x12\x39\n\x07members\x18\x01 \x03(\x0b\x32(.p4.config.v1.GenericEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xc2\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rdefault_value\x18\x02 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x8c\x04\n\x1fGenericSerializableEnumTypeSpec\x12\x39\n\x0funderlying_type\x18\x01 \x01(\x0b\x32 .p4.config.v1.GenericBitTypeSpec\x12\x45\n\x07members\x18\x02 \x03(\x0b\x32\x34.p4.config.v1.GenericSerializableEnumTypeSpec.Member\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x04 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x05 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x1a\xd1\x01\n\x06Member\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x15\n\rdefault_value\x18\x03 \x01(\x05\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\xa2\x01\n\x19GenericNewTypeTranslation\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x16\n\x0csdn_bitwidth\x18\x02 \x01(\x05H\x00\x12G\n\nsdn_string\x18\x03 \x01(\x0b\x32\x31.p4.config.v1.GenericNewTypeTranslation.SdnStringH\x00\x1a\x0b\n\tSdnStringB\n\n\x08sdn_type\"\xbb\x02\n\x12GenericNewTypeSpec\x12:\n\roriginal_type\x18\x01 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpecH\x00\x12\x42\n\x0ftranslated_type\x18\x02 \x01(\x0b\x32\'.p4.config.v1.GenericNewTypeTranslationH\x00\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotationB\x10\n\x0erepresentationB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' ) @@ -2617,40 +2617,47 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='min_size', full_name='p4.config.v1.GenericStringSpec.min_size', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, + name='default_value', full_name='p4.config.v1.GenericStringSpec.default_value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='max_size', full_name='p4.config.v1.GenericStringSpec.max_size', index=2, + name='min_size', full_name='p4.config.v1.GenericStringSpec.min_size', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='annotations', full_name='p4.config.v1.GenericStringSpec.annotations', index=3, - number=4, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], + name='max_size', full_name='p4.config.v1.GenericStringSpec.max_size', index=3, + number=4, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='annotation_locations', full_name='p4.config.v1.GenericStringSpec.annotation_locations', index=4, - number=5, type=11, cpp_type=10, label=3, + name='annotations', full_name='p4.config.v1.GenericStringSpec.annotations', index=4, + number=5, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='structured_annotations', full_name='p4.config.v1.GenericStringSpec.structured_annotations', index=5, + name='annotation_locations', full_name='p4.config.v1.GenericStringSpec.annotation_locations', index=5, number=6, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericStringSpec.structured_annotations', index=6, + number=7, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -2664,7 +2671,7 @@ oneofs=[ ], serialized_start=8179, - serialized_end=8397, + serialized_end=8420, ) @@ -2723,8 +2730,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8632, - serialized_end=8826, + serialized_start=8655, + serialized_end=8849, ) _GENERICENUMTYPESPEC = _descriptor.Descriptor( @@ -2775,8 +2782,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8400, - serialized_end=8826, + serialized_start=8423, + serialized_end=8849, ) @@ -2842,8 +2849,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=9144, - serialized_end=9353, + serialized_start=9167, + serialized_end=9376, ) _GENERICSERIALIZABLEENUMTYPESPEC = _descriptor.Descriptor( @@ -2901,8 +2908,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8829, - serialized_end=9353, + serialized_start=8852, + serialized_end=9376, ) @@ -2976,8 +2983,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=9356, - serialized_end=9518, + serialized_start=9379, + serialized_end=9541, ) @@ -3041,8 +3048,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=9521, - serialized_end=9836, + serialized_start=9544, + serialized_end=9859, ) _P4TYPEINFO_STRUCTSENTRY.fields_by_name['value'].message_type = _P4STRUCTTYPESPEC From 7f1a54ac7e44c0dfee59b3a8f5ec9ccde5496c2d Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 7 Sep 2023 10:45:36 -0700 Subject: [PATCH 38/42] review comments --- docs/v1/P4Runtime-Spec.mdk | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 645656ca..7c5c2a6f 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6381,14 +6381,16 @@ message and a single architecture. ## GenericTable P4info { #sec-p4info-generic-table} -`GenericTable` message in P4info defines a Generic Table. It contains several -instances in `GenericTableInstance` rather than duplicating it every time for a -new instance just like in `Extern`. -It defines the following fields +A GenericTable message in P4info defines one type of generic table, but not a +specific instance of a generic table. Each instance of a generic table is +defined by a GenericTableInstance message. This separation allows field values +that are common for all instances with the same generic table type to be +defined in one place, the GenericTable message. +A `GenericTable` message defines the following fields: * `type_id`, an 8-bit unsigned integer which uniquely identifies - the generic_table_type in the context of the architecture. More details - in the [Generic Table ID space](#sec-generic-table-id-space) section + the generic_table_type in the context of the architecture. See section + [Generic Table ID space](#sec-generic-table-id-space) for more details. * `type_name`, which specifies the "type" of the `GenericTable`. For example, if the target has a meter called `SpecialMeter`, then this would contain @@ -6397,8 +6399,8 @@ It defines the following fields P4 entities, sometimes the instance name and type name are the same * `repeated string properties`, please check generic-table - properties under section [GenericTable categories] - (#sec-generic-table-categories) for more details. + properties under section [GenericTable + categories](#sec-generic-table-categories) for more details. * `repeated GenericTableInstance`, contains the info for one instance of a generic-table-type. All tables of one type are grouped under this. From 2cbd34c164d524b1919da63c8d0356450f83b4fb Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 7 Sep 2023 10:46:50 -0700 Subject: [PATCH 39/42] linter error --- docs/v1/P4Runtime-Spec.mdk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 7c5c2a6f..f6975c54 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6399,8 +6399,8 @@ A `GenericTable` message defines the following fields: P4 entities, sometimes the instance name and type name are the same * `repeated string properties`, please check generic-table - properties under section [GenericTable - categories](#sec-generic-table-categories) for more details. + properties under section [GenericTable + categories](#sec-generic-table-categories) for more details. * `repeated GenericTableInstance`, contains the info for one instance of a generic-table-type. All tables of one type are grouped under this. From 9ff6e4e439b4b56190fcaef4ca054132a14727f2 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 22 Sep 2023 08:50:48 -0700 Subject: [PATCH 40/42] Review comments Signed-off-by: Sayan Bandyopadhyay --- docs/v1/P4Runtime-Spec.mdk | 64 +++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index f6975c54..40c69816 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6454,20 +6454,34 @@ lengths > 64 can be easily accommodated. * generic_struct : Used to define a structure that can contain one or more of the other members as named fields. One structure can contain different members of different types in GenericData. - * generic_list : Used to define a list of values with the same type. It can - also be a list of generic_structs or generic_list. + * generic_list : Used to define a list of values with the same type. Members are ordered and duplicates are allowed. - * generic_unordered_set : Used to define a set of same types. It can also be - a set of generic_structs. Members are unordered and duplicates are not - allowed. + * generic_unordered_set : Used to define a set of same types. Members are + unordered and duplicates are not allowed. * string : Used to define control plane strings. The max string length is defined by the size. Default value applicable. If not present, it is empty string: "". - * enum : String representation with which safe enums are realized. Default - value applicable. If not present, it is empty string: "". - * enum_val : bytes value with which unsafe/serializable enums are defined. + * enum : String representation with which unserializable enums are realized. + Default value applicable. It should always be present. Enums have a list + of choices. + * enum_val : bytes value with which serializable enums are defined. Default value applicable. If not present, it is 0. +### Equality of data types { #sec-equality-of-data-types } + + * bitstring : 2 bitstrings are equal if value and size are both equal. + So `00` and `00 00` are not equal. + * bool : If both values have same `True` or `False` value. + * generic_struct : 2 structs are equal if each member is equal. + * generic_list : 2 lists are equal if each member is equal. The size and + order of the lists need to be the same as well. + * generic_unordered_set : 2 sets are equal if each member is equal. The + size should be equal as well. Order doesn't matter. + * string : 2 strings are equal if they match each other. Case sensitive. + * enum : 2 enums are equal if they are the same value. + * enum_val : 2 enum_vals are equal if the byte values are the same. Size + matching isn't needed. + ## `GenericTableEntry` { #sec-generic-table-entry} GenericTableEntry can be used to program non-PSA externs or non-P4 @@ -6478,14 +6492,13 @@ Interface](https://github.com/p4lang/tdi), that every state can be representated as a table or multiple tables. A table here is any data structure with one or more entries and each entry can be represented as a set of key fields and data fields. Actions in P4 tables behave like unions and that has been borrowed here -in `GenericTable`. This can be potentially used targets to map to either TDI -based targets, or even non-TDI based targets. If using TDI, then potentially, -for every new feature to be added, only TDI target support and remote client -code will be required to make use of that function. All other middle layers -should theoretically remain unchanged. +in `GenericTable`. Note that because of the close similarities between +GenericTable and the TDI API, it is intended that relatively simple software +could implement translation of GenericTable configuration messages into local +TDI API calls. Details of this are left for other future documents to specify. P4Runtime supports inserting, modifying, deleting and reading `GenericTable` -entries with the `GenericTa bleEntry` entity, which has the following fields: +entries with the `GenericTableEntry` message, which has the following fields: * `table_id`, which identifies the table instance; the `table_id` is determined by the P4Info message. @@ -6494,8 +6507,8 @@ entries with the `GenericTa bleEntry` entity, which has the following fields: repeated field is used to provide a value for the corresponding element in the P4info. -* `union`, which indicates which of the table's unions to execute in case of - match and with which argument values. +* `union`, which indicates which of the table's unions are present in the data + of the entry and with which field values. * `priority`, a 32-bit integer used to order entries when the table's match key includes an optional, ternary or range match. @@ -6525,7 +6538,7 @@ a table. Therefore, these fields cannot be modified after the entry has been inserted and must be provided for `MODIFY` and `DELETE` updates. When deleting an entry, these key fields (along with `is_default_action`) are the only fields considered by the server. All other fields must be ignored, even if they have -nonsensical values (such as an invalid action field). In the case of a *keyless* +nonsensical values (such as an invalid union field). In the case of a *keyless* table (the table has an empty match key), the server must reject all attempts to `INSERT` a match entry and return an `INVALID_ARGUMENT` error. @@ -6549,9 +6562,10 @@ applicable on the table and the APIs. * Regular tables: Read, INSERT, MODIFY, DELETE work as intended. Entries in a table can be inserted, modified and deleted. * `INSERT` : If another entry with same match key exists, then - `ALREADY_EXISTS` is returned. If no union has been defined, then the - union from the default entry of the table is used. Some tables might - not have a default entry, then the union is required to be set. + `ALREADY_EXISTS` is returned. If no union is present in + `GenericTableEntry` message, then the union from the default + entry of the table is used. Some tables might not have a default entry, + then the union is required to be set. If `default_entry` is true, then it is treated as a MODIFY. Const default union rules apply. Match fields and priority should not be set. @@ -6565,14 +6579,14 @@ build/generic-tables-insert-flow.[svg,png] \ * `MODIFY` : Union field must be set since all data fields are under a union. Modifies the union spec to new union or new field values if - same union. + same union. `NOT_FOUND` error if entry isn't found. If `default_entry` is true, then the default entry is modified. Match fields and priority should not be set. Const default union rules apply. * `DELETE` : Only Match fields must be set. `NOT_FOUND` is returned if the entry isn't found. If no Match fields are given, then all entries are deleted (wildcard delete). If the table contained init entries, they are restored to initial state with their original union and union field - values. + values for wildcard deletes. If `default_entry` is true, then the default entry is reset to initial values. Const union rules apply. Wildcard doesn't apply to default_entry. @@ -6588,7 +6602,7 @@ build/generic-tables-insert-flow.[svg,png] \ * `INSERT` : Not supported. Returns `NOT_SUPPORTED` error. * `MODIFY` : Union field must be set since all data fields are under a union. Modifies the union spec to new union or new field values if - same union. + same union. `NOT_FOUND` error if entry isn't found. If `default_entry` is true, then the default entry is modified. Match fields and priority should not be set. Const default union rules apply. * `DELETE` : Instead of deleting, this operation resets the entry with @@ -6598,7 +6612,7 @@ build/generic-tables-insert-flow.[svg,png] \ the entry isn't found. If no Match fields are given, then all entries are reset (wildcard reset). If the table contained init entries, they are restored to initial state with their original union and union field - values. + values for wildcard deletes. If `default_entry` is true, then the default entry is reset to initial values. Const union rules apply. Wildcard doesn't apply to default_entry. @@ -6625,7 +6639,7 @@ build/generic-tables-insert-flow.[svg,png] \ the entry isn't found. If no Match fields are given, then all entries are reset (wildcard reset). If the table contained init entries, they are restored to initial state with their original union and union field - values. + values for wildcard deletes. If `default_entry` is true, then the default entry is reset to initial values. Const union rules apply. Wildcard doesn't apply to default_entry. From 0fcf0c485f3eb280fb7e5dec47da905d3436beb0 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 7 Dec 2023 09:58:52 -0800 Subject: [PATCH 41/42] Correcting whitespace errors Signed-off-by: Sayan Bandyopadhyay --- docs/v1/P4Runtime-Spec.mdk | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index 40c69816..9ff7afad 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -6674,17 +6674,18 @@ Table properties are at table level. A combination of these define a certain table category. By default, if absent, they are all always false * Read-only : No Add/Del/Mod work Modify-only : Table entries can only be -* modifed Reset-only : Table can only be reset. Either entire table or -* individual entries. Indexed : The entries are ordered. Every entry has an -* index associated with + modifed +* Reset-only : Table can only be reset. Either entire table or individual + entries. +* Indexed : The entries are ordered. Every entry has an index associated with it. Indexed tables can be either of modify-only, read-only, reset-only or regular tables. If regular tables, then the target is expected to fill up gaps when deleting and then adding entries again. Duplicate entries can exist or not depending upon the table restrictions. Duplicate entries cannot be present in regular tables because there is no way to differentiate between the added entries. -* Keyless : Only one entry, &i.e; default entry exists. Calculation : No -* defined range of key values. For example, hash calculation +* Keyless : Only one entry, &i.e; default entry exists. +* Calculation : No defined range of key values. For example, hash calculation table for a set of field values. * Volatile : Data plane can Add/Del/Mod entries. Example, Add-on-miss in PNA From 8bbd503c540eb0305ddcc16abe4c7a843764141e Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Wed, 21 Feb 2024 23:36:29 -0800 Subject: [PATCH 42/42] Updating generated code Signed-off-by: Sayan Bandyopadhyay --- go/p4/config/v1/p4info.pb.go | 2076 ++++++++++++++++++++++-------- go/p4/v1/p4runtime.pb.go | 2245 +++++++++++++++++++++++---------- py/p4/config/v1/p4info_pb2.py | 755 ++++++++++- py/p4/v1/p4runtime_pb2.py | 778 ++++++++++-- 4 files changed, 4434 insertions(+), 1420 deletions(-) diff --git a/go/p4/config/v1/p4info.pb.go b/go/p4/config/v1/p4info.pb.go index 18e648fa..cac77bf0 100644 --- a/go/p4/config/v1/p4info.pb.go +++ b/go/p4/config/v1/p4info.pb.go @@ -62,6 +62,7 @@ const ( P4Ids_DIRECT_METER P4Ids_Prefix = 21 P4Ids_REGISTER P4Ids_Prefix = 22 P4Ids_DIGEST P4Ids_Prefix = 23 + P4Ids_GENERIC_TABLE P4Ids_Prefix = 24 // externs for other architectures (vendor extensions) P4Ids_OTHER_EXTERNS_START P4Ids_Prefix = 128 // max value for an unsigned 8-bit byte @@ -84,6 +85,7 @@ var ( 21: "DIRECT_METER", 22: "REGISTER", 23: "DIGEST", + 24: "GENERIC_TABLE", 128: "OTHER_EXTERNS_START", 255: "MAX", } @@ -101,6 +103,7 @@ var ( "DIRECT_METER": 21, "REGISTER": 22, "DIGEST": 23, + "GENERIC_TABLE": 24, "OTHER_EXTERNS_START": 128, "MAX": 255, } @@ -133,6 +136,56 @@ func (P4Ids_Prefix) EnumDescriptor() ([]byte, []int) { return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{3, 0} } +// The ID space is for Generic tables. In the Preamble ID, the MSB will be +// 0x18 but the next MSB is reserved for this enum. This shortens the ID +// space for tables in each type but it is still 64k (16 bits) for each table +type GenericTableType_Prefix int32 + +const ( + GenericTableType_GENERIC_TABLES_START GenericTableType_Prefix = 0 + // max value for an unsigned 8-bit byte + GenericTableType_MAX GenericTableType_Prefix = 255 +) + +// Enum value maps for GenericTableType_Prefix. +var ( + GenericTableType_Prefix_name = map[int32]string{ + 0: "GENERIC_TABLES_START", + 255: "MAX", + } + GenericTableType_Prefix_value = map[string]int32{ + "GENERIC_TABLES_START": 0, + "MAX": 255, + } +) + +func (x GenericTableType_Prefix) Enum() *GenericTableType_Prefix { + p := new(GenericTableType_Prefix) + *p = x + return p +} + +func (x GenericTableType_Prefix) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GenericTableType_Prefix) Descriptor() protoreflect.EnumDescriptor { + return file_p4_config_v1_p4info_proto_enumTypes[1].Descriptor() +} + +func (GenericTableType_Prefix) Type() protoreflect.EnumType { + return &file_p4_config_v1_p4info_proto_enumTypes[1] +} + +func (x GenericTableType_Prefix) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GenericTableType_Prefix.Descriptor instead. +func (GenericTableType_Prefix) EnumDescriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{4, 0} +} + type MatchField_MatchType int32 const ( @@ -175,11 +228,11 @@ func (x MatchField_MatchType) String() string { } func (MatchField_MatchType) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[1].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[2].Descriptor() } func (MatchField_MatchType) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[1] + return &file_p4_config_v1_p4info_proto_enumTypes[2] } func (x MatchField_MatchType) Number() protoreflect.EnumNumber { @@ -188,7 +241,7 @@ func (x MatchField_MatchType) Number() protoreflect.EnumNumber { // Deprecated: Use MatchField_MatchType.Descriptor instead. func (MatchField_MatchType) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{7, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{8, 0} } // this enum can be extended in the future with other behaviors, such as @@ -223,11 +276,11 @@ func (x Table_IdleTimeoutBehavior) String() string { } func (Table_IdleTimeoutBehavior) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[2].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[3].Descriptor() } func (Table_IdleTimeoutBehavior) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[2] + return &file_p4_config_v1_p4info_proto_enumTypes[3] } func (x Table_IdleTimeoutBehavior) Number() protoreflect.EnumNumber { @@ -236,7 +289,7 @@ func (x Table_IdleTimeoutBehavior) Number() protoreflect.EnumNumber { // Deprecated: Use Table_IdleTimeoutBehavior.Descriptor instead. func (Table_IdleTimeoutBehavior) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{8, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{9, 0} } type ActionRef_Scope int32 @@ -272,11 +325,11 @@ func (x ActionRef_Scope) String() string { } func (ActionRef_Scope) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[3].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[4].Descriptor() } func (ActionRef_Scope) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[3] + return &file_p4_config_v1_p4info_proto_enumTypes[4] } func (x ActionRef_Scope) Number() protoreflect.EnumNumber { @@ -285,7 +338,7 @@ func (x ActionRef_Scope) Number() protoreflect.EnumNumber { // Deprecated: Use ActionRef_Scope.Descriptor instead. func (ActionRef_Scope) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{9, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{10, 0} } // Corresponds to 'type' constructor parameter for Counter / DirectCounter in @@ -326,11 +379,11 @@ func (x CounterSpec_Unit) String() string { } func (CounterSpec_Unit) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[4].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[5].Descriptor() } func (CounterSpec_Unit) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[4] + return &file_p4_config_v1_p4info_proto_enumTypes[5] } func (x CounterSpec_Unit) Number() protoreflect.EnumNumber { @@ -339,7 +392,7 @@ func (x CounterSpec_Unit) Number() protoreflect.EnumNumber { // Deprecated: Use CounterSpec_Unit.Descriptor instead. func (CounterSpec_Unit) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{13, 0} } // Corresponds to 'type' constructor parameter for Meter / DirectMeter in PSA @@ -376,11 +429,11 @@ func (x MeterSpec_Unit) String() string { } func (MeterSpec_Unit) Descriptor() protoreflect.EnumDescriptor { - return file_p4_config_v1_p4info_proto_enumTypes[5].Descriptor() + return file_p4_config_v1_p4info_proto_enumTypes[6].Descriptor() } func (MeterSpec_Unit) Type() protoreflect.EnumType { - return &file_p4_config_v1_p4info_proto_enumTypes[5] + return &file_p4_config_v1_p4info_proto_enumTypes[6] } func (x MeterSpec_Unit) Number() protoreflect.EnumNumber { @@ -389,7 +442,114 @@ func (x MeterSpec_Unit) Number() protoreflect.EnumNumber { // Deprecated: Use MeterSpec_Unit.Descriptor instead. func (MeterSpec_Unit) EnumDescriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{15, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{16, 0} +} + +type GenericMatchField_MatchType int32 + +const ( + GenericMatchField_UNSPECIFIED GenericMatchField_MatchType = 0 + GenericMatchField_EXACT GenericMatchField_MatchType = 2 + GenericMatchField_LPM GenericMatchField_MatchType = 3 + GenericMatchField_TERNARY GenericMatchField_MatchType = 4 + GenericMatchField_RANGE GenericMatchField_MatchType = 5 + GenericMatchField_OPTIONAL GenericMatchField_MatchType = 6 +) + +// Enum value maps for GenericMatchField_MatchType. +var ( + GenericMatchField_MatchType_name = map[int32]string{ + 0: "UNSPECIFIED", + 2: "EXACT", + 3: "LPM", + 4: "TERNARY", + 5: "RANGE", + 6: "OPTIONAL", + } + GenericMatchField_MatchType_value = map[string]int32{ + "UNSPECIFIED": 0, + "EXACT": 2, + "LPM": 3, + "TERNARY": 4, + "RANGE": 5, + "OPTIONAL": 6, + } +) + +func (x GenericMatchField_MatchType) Enum() *GenericMatchField_MatchType { + p := new(GenericMatchField_MatchType) + *p = x + return p +} + +func (x GenericMatchField_MatchType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GenericMatchField_MatchType) Descriptor() protoreflect.EnumDescriptor { + return file_p4_config_v1_p4info_proto_enumTypes[7].Descriptor() +} + +func (GenericMatchField_MatchType) Type() protoreflect.EnumType { + return &file_p4_config_v1_p4info_proto_enumTypes[7] +} + +func (x GenericMatchField_MatchType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GenericMatchField_MatchType.Descriptor instead. +func (GenericMatchField_MatchType) EnumDescriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{23, 0} +} + +type UnionRef_Scope int32 + +const ( + UnionRef_TABLE_AND_DEFAULT UnionRef_Scope = 0 + UnionRef_TABLE_ONLY UnionRef_Scope = 1 + UnionRef_DEFAULT_ONLY UnionRef_Scope = 2 +) + +// Enum value maps for UnionRef_Scope. +var ( + UnionRef_Scope_name = map[int32]string{ + 0: "TABLE_AND_DEFAULT", + 1: "TABLE_ONLY", + 2: "DEFAULT_ONLY", + } + UnionRef_Scope_value = map[string]int32{ + "TABLE_AND_DEFAULT": 0, + "TABLE_ONLY": 1, + "DEFAULT_ONLY": 2, + } +) + +func (x UnionRef_Scope) Enum() *UnionRef_Scope { + p := new(UnionRef_Scope) + *p = x + return p +} + +func (x UnionRef_Scope) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (UnionRef_Scope) Descriptor() protoreflect.EnumDescriptor { + return file_p4_config_v1_p4info_proto_enumTypes[8].Descriptor() +} + +func (UnionRef_Scope) Type() protoreflect.EnumType { + return &file_p4_config_v1_p4info_proto_enumTypes[8] +} + +func (x UnionRef_Scope) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use UnionRef_Scope.Descriptor instead. +func (UnionRef_Scope) EnumDescriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{24, 0} } type P4Info struct { @@ -409,6 +569,8 @@ type P4Info struct { ValueSets []*ValueSet `protobuf:"bytes,10,rep,name=value_sets,json=valueSets,proto3" json:"value_sets,omitempty"` Registers []*Register `protobuf:"bytes,11,rep,name=registers,proto3" json:"registers,omitempty"` Digests []*Digest `protobuf:"bytes,12,rep,name=digests,proto3" json:"digests,omitempty"` + GenericTables []*GenericTable `protobuf:"bytes,13,rep,name=generic_tables,json=genericTables,proto3" json:"generic_tables,omitempty"` + Unions []*Union `protobuf:"bytes,14,rep,name=unions,proto3" json:"unions,omitempty"` Externs []*Extern `protobuf:"bytes,100,rep,name=externs,proto3" json:"externs,omitempty"` TypeInfo *P4TypeInfo `protobuf:"bytes,200,opt,name=type_info,json=typeInfo,proto3" json:"type_info,omitempty"` } @@ -529,6 +691,20 @@ func (x *P4Info) GetDigests() []*Digest { return nil } +func (x *P4Info) GetGenericTables() []*GenericTable { + if x != nil { + return x.GenericTables + } + return nil +} + +func (x *P4Info) GetUnions() []*Union { + if x != nil { + return x.Unions + } + return nil +} + func (x *P4Info) GetExterns() []*Extern { if x != nil { return x.Externs @@ -774,6 +950,45 @@ func (*P4Ids) Descriptor() ([]byte, []int) { return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{3} } +// A subtype of P4IDs for GenericTables +type GenericTableType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GenericTableType) Reset() { + *x = GenericTableType{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericTableType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericTableType) ProtoMessage() {} + +func (x *GenericTableType) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericTableType.ProtoReflect.Descriptor instead. +func (*GenericTableType) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{4} +} + type Preamble struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -811,7 +1026,7 @@ type Preamble struct { func (x *Preamble) Reset() { *x = Preamble{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[4] + mi := &file_p4_config_v1_p4info_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -824,7 +1039,7 @@ func (x *Preamble) String() string { func (*Preamble) ProtoMessage() {} func (x *Preamble) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[4] + mi := &file_p4_config_v1_p4info_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -837,7 +1052,7 @@ func (x *Preamble) ProtoReflect() protoreflect.Message { // Deprecated: Use Preamble.ProtoReflect.Descriptor instead. func (*Preamble) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{4} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{5} } func (x *Preamble) GetId() uint32 { @@ -905,7 +1120,7 @@ type Extern struct { func (x *Extern) Reset() { *x = Extern{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[5] + mi := &file_p4_config_v1_p4info_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -918,7 +1133,7 @@ func (x *Extern) String() string { func (*Extern) ProtoMessage() {} func (x *Extern) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[5] + mi := &file_p4_config_v1_p4info_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -931,7 +1146,7 @@ func (x *Extern) ProtoReflect() protoreflect.Message { // Deprecated: Use Extern.ProtoReflect.Descriptor instead. func (*Extern) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{5} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{6} } func (x *Extern) GetExternTypeId() uint32 { @@ -969,7 +1184,7 @@ type ExternInstance struct { func (x *ExternInstance) Reset() { *x = ExternInstance{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[6] + mi := &file_p4_config_v1_p4info_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -982,7 +1197,7 @@ func (x *ExternInstance) String() string { func (*ExternInstance) ProtoMessage() {} func (x *ExternInstance) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[6] + mi := &file_p4_config_v1_p4info_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -995,7 +1210,7 @@ func (x *ExternInstance) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternInstance.ProtoReflect.Descriptor instead. func (*ExternInstance) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{6} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{7} } func (x *ExternInstance) GetPreamble() *Preamble { @@ -1039,7 +1254,7 @@ type MatchField struct { func (x *MatchField) Reset() { *x = MatchField{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[7] + mi := &file_p4_config_v1_p4info_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1052,7 +1267,7 @@ func (x *MatchField) String() string { func (*MatchField) ProtoMessage() {} func (x *MatchField) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[7] + mi := &file_p4_config_v1_p4info_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1065,7 +1280,7 @@ func (x *MatchField) ProtoReflect() protoreflect.Message { // Deprecated: Use MatchField.ProtoReflect.Descriptor instead. func (*MatchField) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{7} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{8} } func (x *MatchField) GetId() uint32 { @@ -1209,7 +1424,7 @@ type Table struct { func (x *Table) Reset() { *x = Table{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[8] + mi := &file_p4_config_v1_p4info_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1222,7 +1437,7 @@ func (x *Table) String() string { func (*Table) ProtoMessage() {} func (x *Table) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[8] + mi := &file_p4_config_v1_p4info_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1235,7 +1450,7 @@ func (x *Table) ProtoReflect() protoreflect.Message { // Deprecated: Use Table.ProtoReflect.Descriptor instead. func (*Table) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{8} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{9} } func (x *Table) GetPreamble() *Preamble { @@ -1333,7 +1548,7 @@ type ActionRef struct { func (x *ActionRef) Reset() { *x = ActionRef{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[9] + mi := &file_p4_config_v1_p4info_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1346,7 +1561,7 @@ func (x *ActionRef) String() string { func (*ActionRef) ProtoMessage() {} func (x *ActionRef) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[9] + mi := &file_p4_config_v1_p4info_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1359,7 +1574,7 @@ func (x *ActionRef) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionRef.ProtoReflect.Descriptor instead. func (*ActionRef) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{9} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{10} } func (x *ActionRef) GetId() uint32 { @@ -1409,7 +1624,7 @@ type Action struct { func (x *Action) Reset() { *x = Action{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[10] + mi := &file_p4_config_v1_p4info_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1422,7 +1637,7 @@ func (x *Action) String() string { func (*Action) ProtoMessage() {} func (x *Action) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[10] + mi := &file_p4_config_v1_p4info_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1435,7 +1650,7 @@ func (x *Action) ProtoReflect() protoreflect.Message { // Deprecated: Use Action.ProtoReflect.Descriptor instead. func (*Action) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{10} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11} } func (x *Action) GetPreamble() *Preamble { @@ -1481,7 +1696,7 @@ type ActionProfile struct { func (x *ActionProfile) Reset() { *x = ActionProfile{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[11] + mi := &file_p4_config_v1_p4info_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1494,7 +1709,7 @@ func (x *ActionProfile) String() string { func (*ActionProfile) ProtoMessage() {} func (x *ActionProfile) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[11] + mi := &file_p4_config_v1_p4info_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1507,7 +1722,7 @@ func (x *ActionProfile) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionProfile.ProtoReflect.Descriptor instead. func (*ActionProfile) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12} } func (x *ActionProfile) GetPreamble() *Preamble { @@ -1595,7 +1810,7 @@ type CounterSpec struct { func (x *CounterSpec) Reset() { *x = CounterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[12] + mi := &file_p4_config_v1_p4info_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1608,7 +1823,7 @@ func (x *CounterSpec) String() string { func (*CounterSpec) ProtoMessage() {} func (x *CounterSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[12] + mi := &file_p4_config_v1_p4info_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1621,7 +1836,7 @@ func (x *CounterSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use CounterSpec.ProtoReflect.Descriptor instead. func (*CounterSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{13} } func (x *CounterSpec) GetUnit() CounterSpec_Unit { @@ -1647,7 +1862,7 @@ type Counter struct { func (x *Counter) Reset() { *x = Counter{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[13] + mi := &file_p4_config_v1_p4info_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1660,7 +1875,7 @@ func (x *Counter) String() string { func (*Counter) ProtoMessage() {} func (x *Counter) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[13] + mi := &file_p4_config_v1_p4info_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1673,7 +1888,7 @@ func (x *Counter) ProtoReflect() protoreflect.Message { // Deprecated: Use Counter.ProtoReflect.Descriptor instead. func (*Counter) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{13} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{14} } func (x *Counter) GetPreamble() *Preamble { @@ -1718,7 +1933,7 @@ type DirectCounter struct { func (x *DirectCounter) Reset() { *x = DirectCounter{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[14] + mi := &file_p4_config_v1_p4info_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1731,7 +1946,7 @@ func (x *DirectCounter) String() string { func (*DirectCounter) ProtoMessage() {} func (x *DirectCounter) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[14] + mi := &file_p4_config_v1_p4info_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1744,7 +1959,7 @@ func (x *DirectCounter) ProtoReflect() protoreflect.Message { // Deprecated: Use DirectCounter.ProtoReflect.Descriptor instead. func (*DirectCounter) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{14} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{15} } func (x *DirectCounter) GetPreamble() *Preamble { @@ -1779,7 +1994,7 @@ type MeterSpec struct { func (x *MeterSpec) Reset() { *x = MeterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[15] + mi := &file_p4_config_v1_p4info_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1792,7 +2007,7 @@ func (x *MeterSpec) String() string { func (*MeterSpec) ProtoMessage() {} func (x *MeterSpec) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[15] + mi := &file_p4_config_v1_p4info_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1805,7 +2020,7 @@ func (x *MeterSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use MeterSpec.ProtoReflect.Descriptor instead. func (*MeterSpec) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{15} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{16} } func (x *MeterSpec) GetUnit() MeterSpec_Unit { @@ -1831,7 +2046,7 @@ type Meter struct { func (x *Meter) Reset() { *x = Meter{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[16] + mi := &file_p4_config_v1_p4info_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1844,7 +2059,7 @@ func (x *Meter) String() string { func (*Meter) ProtoMessage() {} func (x *Meter) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[16] + mi := &file_p4_config_v1_p4info_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1857,7 +2072,7 @@ func (x *Meter) ProtoReflect() protoreflect.Message { // Deprecated: Use Meter.ProtoReflect.Descriptor instead. func (*Meter) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{16} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{17} } func (x *Meter) GetPreamble() *Preamble { @@ -1902,7 +2117,7 @@ type DirectMeter struct { func (x *DirectMeter) Reset() { *x = DirectMeter{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[17] + mi := &file_p4_config_v1_p4info_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1915,7 +2130,7 @@ func (x *DirectMeter) String() string { func (*DirectMeter) ProtoMessage() {} func (x *DirectMeter) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[17] + mi := &file_p4_config_v1_p4info_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1928,7 +2143,7 @@ func (x *DirectMeter) ProtoReflect() protoreflect.Message { // Deprecated: Use DirectMeter.ProtoReflect.Descriptor instead. func (*DirectMeter) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{17} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{18} } func (x *DirectMeter) GetPreamble() *Preamble { @@ -1974,7 +2189,7 @@ type ControllerPacketMetadata struct { func (x *ControllerPacketMetadata) Reset() { *x = ControllerPacketMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[18] + mi := &file_p4_config_v1_p4info_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1987,7 +2202,7 @@ func (x *ControllerPacketMetadata) String() string { func (*ControllerPacketMetadata) ProtoMessage() {} func (x *ControllerPacketMetadata) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[18] + mi := &file_p4_config_v1_p4info_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2000,7 +2215,7 @@ func (x *ControllerPacketMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ControllerPacketMetadata.ProtoReflect.Descriptor instead. func (*ControllerPacketMetadata) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{18} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{19} } func (x *ControllerPacketMetadata) GetPreamble() *Preamble { @@ -2031,7 +2246,7 @@ type ValueSet struct { func (x *ValueSet) Reset() { *x = ValueSet{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[19] + mi := &file_p4_config_v1_p4info_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2044,7 +2259,7 @@ func (x *ValueSet) String() string { func (*ValueSet) ProtoMessage() {} func (x *ValueSet) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[19] + mi := &file_p4_config_v1_p4info_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2057,7 +2272,7 @@ func (x *ValueSet) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueSet.ProtoReflect.Descriptor instead. func (*ValueSet) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{19} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{20} } func (x *ValueSet) GetPreamble() *Preamble { @@ -2096,7 +2311,7 @@ type Register struct { func (x *Register) Reset() { *x = Register{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[20] + mi := &file_p4_config_v1_p4info_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2109,7 +2324,7 @@ func (x *Register) String() string { func (*Register) ProtoMessage() {} func (x *Register) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[20] + mi := &file_p4_config_v1_p4info_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2122,7 +2337,7 @@ func (x *Register) ProtoReflect() protoreflect.Message { // Deprecated: Use Register.ProtoReflect.Descriptor instead. func (*Register) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{20} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{21} } func (x *Register) GetPreamble() *Preamble { @@ -2165,7 +2380,7 @@ type Digest struct { func (x *Digest) Reset() { *x = Digest{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[21] + mi := &file_p4_config_v1_p4info_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2178,7 +2393,7 @@ func (x *Digest) String() string { func (*Digest) ProtoMessage() {} func (x *Digest) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[21] + mi := &file_p4_config_v1_p4info_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2191,19 +2406,460 @@ func (x *Digest) ProtoReflect() protoreflect.Message { // Deprecated: Use Digest.ProtoReflect.Descriptor instead. func (*Digest) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{21} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{22} } func (x *Digest) GetPreamble() *Preamble { if x != nil { return x.Preamble } - return nil + return nil +} + +func (x *Digest) GetTypeSpec() *P4DataTypeSpec { + if x != nil { + return x.TypeSpec + } + return nil +} + +type GenericMatchField struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,3,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` + // Types that are assignable to Match: + // + // *GenericMatchField_MatchType_ + // *GenericMatchField_OtherMatchType + Match isGenericMatchField_Match `protobuf_oneof:"match"` + // Documentation of the match field + Doc *Documentation `protobuf:"bytes,6,opt,name=doc,proto3" json:"doc,omitempty"` + Annotations []string `protobuf:"bytes,7,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,8,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` + AnnotationLocations []*SourceLocation `protobuf:"bytes,9,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` +} + +func (x *GenericMatchField) Reset() { + *x = GenericMatchField{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericMatchField) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericMatchField) ProtoMessage() {} + +func (x *GenericMatchField) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericMatchField.ProtoReflect.Descriptor instead. +func (*GenericMatchField) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{23} +} + +func (x *GenericMatchField) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *GenericMatchField) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GenericMatchField) GetTypeSpec() *GenericDataTypeSpec { + if x != nil { + return x.TypeSpec + } + return nil +} + +func (m *GenericMatchField) GetMatch() isGenericMatchField_Match { + if m != nil { + return m.Match + } + return nil +} + +func (x *GenericMatchField) GetMatchType() GenericMatchField_MatchType { + if x, ok := x.GetMatch().(*GenericMatchField_MatchType_); ok { + return x.MatchType + } + return GenericMatchField_UNSPECIFIED +} + +func (x *GenericMatchField) GetOtherMatchType() string { + if x, ok := x.GetMatch().(*GenericMatchField_OtherMatchType); ok { + return x.OtherMatchType + } + return "" +} + +func (x *GenericMatchField) GetDoc() *Documentation { + if x != nil { + return x.Doc + } + return nil +} + +func (x *GenericMatchField) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *GenericMatchField) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +func (x *GenericMatchField) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +type isGenericMatchField_Match interface { + isGenericMatchField_Match() +} + +type GenericMatchField_MatchType_ struct { + MatchType GenericMatchField_MatchType `protobuf:"varint,4,opt,name=match_type,json=matchType,proto3,enum=p4.config.v1.GenericMatchField_MatchType,oneof"` +} + +type GenericMatchField_OtherMatchType struct { + // used for architecture-specific match types which are not part of the core + // P4 language or of the PSA architecture. + OtherMatchType string `protobuf:"bytes,5,opt,name=other_match_type,json=otherMatchType,proto3,oneof"` +} + +func (*GenericMatchField_MatchType_) isGenericMatchField_Match() {} + +func (*GenericMatchField_OtherMatchType) isGenericMatchField_Match() {} + +// used to list all possible unions in a Table +type UnionRef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Scope UnionRef_Scope `protobuf:"varint,3,opt,name=scope,proto3,enum=p4.config.v1.UnionRef_Scope" json:"scope,omitempty"` + Annotations []string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,5,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,4,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` +} + +func (x *UnionRef) Reset() { + *x = UnionRef{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnionRef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnionRef) ProtoMessage() {} + +func (x *UnionRef) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnionRef.ProtoReflect.Descriptor instead. +func (*UnionRef) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{24} +} + +func (x *UnionRef) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UnionRef) GetScope() UnionRef_Scope { + if x != nil { + return x.Scope + } + return UnionRef_TABLE_AND_DEFAULT +} + +func (x *UnionRef) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *UnionRef) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + +func (x *UnionRef) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +type Union struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Preamble *Preamble `protobuf:"bytes,1,opt,name=preamble,proto3" json:"preamble,omitempty"` + Params []*Union_Param `protobuf:"bytes,2,rep,name=params,proto3" json:"params,omitempty"` +} + +func (x *Union) Reset() { + *x = Union{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Union) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Union) ProtoMessage() {} + +func (x *Union) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Union.ProtoReflect.Descriptor instead. +func (*Union) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{25} +} + +func (x *Union) GetPreamble() *Preamble { + if x != nil { + return x.Preamble + } + return nil +} + +func (x *Union) GetParams() []*Union_Param { + if x != nil { + return x.Params + } + return nil +} + +// All Tables of one type will be grouped in one message. +type GenericTable struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TypeId uint32 `protobuf:"varint,1,opt,name=type_id,json=typeId,proto3" json:"type_id,omitempty"` + TypeName string `protobuf:"bytes,2,opt,name=type_name,json=typeName,proto3" json:"type_name,omitempty"` + Properties []string `protobuf:"bytes,3,rep,name=properties,proto3" json:"properties,omitempty"` + Instances []*GenericTableInstance `protobuf:"bytes,4,rep,name=instances,proto3" json:"instances,omitempty"` +} + +func (x *GenericTable) Reset() { + *x = GenericTable{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericTable) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericTable) ProtoMessage() {} + +func (x *GenericTable) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericTable.ProtoReflect.Descriptor instead. +func (*GenericTable) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{26} +} + +func (x *GenericTable) GetTypeId() uint32 { + if x != nil { + return x.TypeId + } + return 0 +} + +func (x *GenericTable) GetTypeName() string { + if x != nil { + return x.TypeName + } + return "" +} + +func (x *GenericTable) GetProperties() []string { + if x != nil { + return x.Properties + } + return nil +} + +func (x *GenericTable) GetInstances() []*GenericTableInstance { + if x != nil { + return x.Instances + } + return nil +} + +type GenericTableInstance struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Preamble *Preamble `protobuf:"bytes,1,opt,name=preamble,proto3" json:"preamble,omitempty"` + GenericMatchFields []*GenericMatchField `protobuf:"bytes,2,rep,name=generic_match_fields,json=genericMatchFields,proto3" json:"generic_match_fields,omitempty"` + UnionRefs []*UnionRef `protobuf:"bytes,3,rep,name=union_refs,json=unionRefs,proto3" json:"union_refs,omitempty"` + // 0 (default value) means that the table does not have a const default action + ConstDefaultUnionId uint32 `protobuf:"varint,4,opt,name=const_default_union_id,json=constDefaultUnionId,proto3" json:"const_default_union_id,omitempty"` + Size int64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` // max number of entries in table + // architecture-specific table properties which are not part of the core P4 + // language or of the PSA architecture. + OtherProperties *anypb.Any `protobuf:"bytes,100,opt,name=other_properties,json=otherProperties,proto3" json:"other_properties,omitempty"` +} + +func (x *GenericTableInstance) Reset() { + *x = GenericTableInstance{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericTableInstance) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericTableInstance) ProtoMessage() {} + +func (x *GenericTableInstance) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericTableInstance.ProtoReflect.Descriptor instead. +func (*GenericTableInstance) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{27} +} + +func (x *GenericTableInstance) GetPreamble() *Preamble { + if x != nil { + return x.Preamble + } + return nil +} + +func (x *GenericTableInstance) GetGenericMatchFields() []*GenericMatchField { + if x != nil { + return x.GenericMatchFields + } + return nil +} + +func (x *GenericTableInstance) GetUnionRefs() []*UnionRef { + if x != nil { + return x.UnionRefs + } + return nil +} + +func (x *GenericTableInstance) GetConstDefaultUnionId() uint32 { + if x != nil { + return x.ConstDefaultUnionId + } + return 0 +} + +func (x *GenericTableInstance) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 } -func (x *Digest) GetTypeSpec() *P4DataTypeSpec { +func (x *GenericTableInstance) GetOtherProperties() *anypb.Any { if x != nil { - return x.TypeSpec + return x.OtherProperties } return nil } @@ -2230,7 +2886,7 @@ type Action_Param struct { func (x *Action_Param) Reset() { *x = Action_Param{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[22] + mi := &file_p4_config_v1_p4info_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2243,7 +2899,7 @@ func (x *Action_Param) String() string { func (*Action_Param) ProtoMessage() {} func (x *Action_Param) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[22] + mi := &file_p4_config_v1_p4info_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2256,7 +2912,7 @@ func (x *Action_Param) ProtoReflect() protoreflect.Message { // Deprecated: Use Action_Param.ProtoReflect.Descriptor instead. func (*Action_Param) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{10, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11, 0} } func (x *Action_Param) GetId() uint32 { @@ -2327,7 +2983,7 @@ type ActionProfile_SumOfWeights struct { func (x *ActionProfile_SumOfWeights) Reset() { *x = ActionProfile_SumOfWeights{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[23] + mi := &file_p4_config_v1_p4info_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2340,7 +2996,7 @@ func (x *ActionProfile_SumOfWeights) String() string { func (*ActionProfile_SumOfWeights) ProtoMessage() {} func (x *ActionProfile_SumOfWeights) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[23] + mi := &file_p4_config_v1_p4info_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2353,7 +3009,7 @@ func (x *ActionProfile_SumOfWeights) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionProfile_SumOfWeights.ProtoReflect.Descriptor instead. func (*ActionProfile_SumOfWeights) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12, 0} } // indicates that `size` and `max_group_size` represent the maximum number @@ -2371,7 +3027,7 @@ type ActionProfile_SumOfMembers struct { func (x *ActionProfile_SumOfMembers) Reset() { *x = ActionProfile_SumOfMembers{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[24] + mi := &file_p4_config_v1_p4info_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2384,7 +3040,7 @@ func (x *ActionProfile_SumOfMembers) String() string { func (*ActionProfile_SumOfMembers) ProtoMessage() {} func (x *ActionProfile_SumOfMembers) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[24] + mi := &file_p4_config_v1_p4info_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2397,7 +3053,7 @@ func (x *ActionProfile_SumOfMembers) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionProfile_SumOfMembers.ProtoReflect.Descriptor instead. func (*ActionProfile_SumOfMembers) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{11, 1} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{12, 1} } func (x *ActionProfile_SumOfMembers) GetMaxMemberWeight() int32 { @@ -2429,7 +3085,7 @@ type ControllerPacketMetadata_Metadata struct { func (x *ControllerPacketMetadata_Metadata) Reset() { *x = ControllerPacketMetadata_Metadata{} if protoimpl.UnsafeEnabled { - mi := &file_p4_config_v1_p4info_proto_msgTypes[25] + mi := &file_p4_config_v1_p4info_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2442,7 +3098,7 @@ func (x *ControllerPacketMetadata_Metadata) String() string { func (*ControllerPacketMetadata_Metadata) ProtoMessage() {} func (x *ControllerPacketMetadata_Metadata) ProtoReflect() protoreflect.Message { - mi := &file_p4_config_v1_p4info_proto_msgTypes[25] + mi := &file_p4_config_v1_p4info_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2455,7 +3111,7 @@ func (x *ControllerPacketMetadata_Metadata) ProtoReflect() protoreflect.Message // Deprecated: Use ControllerPacketMetadata_Metadata.ProtoReflect.Descriptor instead. func (*ControllerPacketMetadata_Metadata) Descriptor() ([]byte, []int) { - return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{18, 0} + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{19, 0} } func (x *ControllerPacketMetadata_Metadata) GetId() uint32 { @@ -2507,6 +3163,104 @@ func (x *ControllerPacketMetadata_Metadata) GetStructuredAnnotations() []*Struct return nil } +type Union_Param struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Annotations []string `protobuf:"bytes,3,rep,name=annotations,proto3" json:"annotations,omitempty"` + TypeSpec *GenericDataTypeSpec `protobuf:"bytes,4,opt,name=type_spec,json=typeSpec,proto3" json:"type_spec,omitempty"` + // Documentation of the Param + Doc *Documentation `protobuf:"bytes,5,opt,name=doc,proto3" json:"doc,omitempty"` + StructuredAnnotations []*StructuredAnnotation `protobuf:"bytes,6,rep,name=structured_annotations,json=structuredAnnotations,proto3" json:"structured_annotations,omitempty"` + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + AnnotationLocations []*SourceLocation `protobuf:"bytes,7,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` +} + +func (x *Union_Param) Reset() { + *x = Union_Param{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_config_v1_p4info_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Union_Param) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Union_Param) ProtoMessage() {} + +func (x *Union_Param) ProtoReflect() protoreflect.Message { + mi := &file_p4_config_v1_p4info_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Union_Param.ProtoReflect.Descriptor instead. +func (*Union_Param) Descriptor() ([]byte, []int) { + return file_p4_config_v1_p4info_proto_rawDescGZIP(), []int{25, 0} +} + +func (x *Union_Param) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Union_Param) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Union_Param) GetAnnotations() []string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *Union_Param) GetTypeSpec() *GenericDataTypeSpec { + if x != nil { + return x.TypeSpec + } + return nil +} + +func (x *Union_Param) GetDoc() *Documentation { + if x != nil { + return x.Doc + } + return nil +} + +func (x *Union_Param) GetStructuredAnnotations() []*StructuredAnnotation { + if x != nil { + return x.StructuredAnnotations + } + return nil +} + +func (x *Union_Param) GetAnnotationLocations() []*SourceLocation { + if x != nil { + return x.AnnotationLocations + } + return nil +} + var File_p4_config_v1_p4info_proto protoreflect.FileDescriptor var file_p4_config_v1_p4info_proto_rawDesc = []byte{ @@ -2516,7 +3270,7 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x34, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xae, 0x06, 0x0a, 0x06, 0x50, 0x34, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x08, 0x70, + 0x22, 0x9e, 0x07, 0x0a, 0x06, 0x50, 0x34, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6b, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, @@ -2560,7 +3314,14 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x52, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x65, 0x78, 0x74, + 0x52, 0x07, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0d, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x06, + 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, + 0x6e, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x64, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x52, 0x07, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, @@ -2597,8 +3358,8 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x87, 0x02, 0x0a, 0x05, 0x50, 0x34, 0x49, 0x64, 0x73, 0x22, - 0xfd, 0x01, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9a, 0x02, 0x0a, 0x05, 0x50, 0x34, 0x49, 0x64, 0x73, 0x22, + 0x90, 0x02, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x10, @@ -2611,330 +3372,457 @@ var file_p4_config_v1_p4info_proto_rawDesc = []byte{ 0x45, 0x52, 0x10, 0x13, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x14, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x15, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x10, 0x16, 0x12, - 0x0a, 0x0a, 0x06, 0x44, 0x49, 0x47, 0x45, 0x53, 0x54, 0x10, 0x17, 0x12, 0x18, 0x0a, 0x13, 0x4f, - 0x54, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x53, 0x5f, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x10, 0x80, 0x01, 0x12, 0x08, 0x0a, 0x03, 0x4d, 0x41, 0x58, 0x10, 0xff, 0x01, 0x22, - 0xc1, 0x02, 0x0a, 0x08, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x24, - 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, - 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x0e, 0x45, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, - 0x12, 0x28, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xd3, 0x04, 0x0a, 0x0a, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x43, 0x0a, 0x0a, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, - 0x03, 0x64, 0x6f, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x36, 0x0a, 0x09, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x56, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, - 0x05, 0x45, 0x58, 0x41, 0x43, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x10, - 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x04, 0x12, 0x09, - 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x50, 0x54, - 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x06, 0x42, 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x22, 0x89, 0x05, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, - 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x3b, - 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0b, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x11, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x5b, 0x0a, - 0x15, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x62, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x65, 0x68, - 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x13, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, - 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x12, 0x2e, 0x0a, 0x13, 0x68, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, - 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x68, - 0x61, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x22, 0x39, 0x0a, 0x13, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x54, - 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x54, 0x49, - 0x46, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x10, 0x01, 0x22, 0xe0, 0x02, 0x0a, - 0x09, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x40, 0x0a, - 0x05, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, - 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, - 0x0a, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x10, 0x0a, - 0x0c, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x22, - 0xef, 0x03, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, - 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x32, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x1a, 0xfc, 0x02, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, - 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, - 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x36, - 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x74, 0x79, - 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0xe5, 0x03, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x69, 0x74, - 0x68, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x50, 0x0a, 0x0e, 0x73, 0x75, 0x6d, 0x5f, 0x6f, 0x66, 0x5f, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x34, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x75, 0x6d, 0x4f, 0x66, 0x57, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, 0x6d, 0x4f, 0x66, 0x57, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0e, 0x73, 0x75, 0x6d, 0x5f, 0x6f, 0x66, 0x5f, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x75, 0x6d, 0x4f, 0x66, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, 0x6d, 0x4f, 0x66, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x1a, 0x0e, 0x0a, 0x0c, 0x53, 0x75, 0x6d, 0x4f, 0x66, - 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x1a, 0x55, 0x0a, 0x0c, 0x53, 0x75, 0x6d, 0x4f, 0x66, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x57, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6d, 0x61, 0x78, - 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x42, 0x19, - 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, - 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x22, 0x7c, 0x0a, 0x0b, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x32, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x39, 0x0a, 0x04, - 0x55, 0x6e, 0x69, 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x53, 0x10, 0x02, 0x12, 0x08, 0x0a, - 0x04, 0x42, 0x4f, 0x54, 0x48, 0x10, 0x03, 0x22, 0xc3, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x41, 0x0a, 0x0f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x9a, 0x01, - 0x0a, 0x0d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, + 0x0a, 0x0a, 0x06, 0x44, 0x49, 0x47, 0x45, 0x53, 0x54, 0x10, 0x17, 0x12, 0x11, 0x0a, 0x0d, 0x47, + 0x45, 0x4e, 0x45, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x18, 0x12, 0x18, + 0x0a, 0x13, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x53, 0x5f, + 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x80, 0x01, 0x12, 0x08, 0x0a, 0x03, 0x4d, 0x41, 0x58, 0x10, + 0xff, 0x01, 0x22, 0x40, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x12, 0x18, 0x0a, 0x14, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x41, 0x42, 0x4c, + 0x45, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x03, 0x4d, 0x41, + 0x58, 0x10, 0xff, 0x01, 0x22, 0xc1, 0x02, 0x0a, 0x08, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, + 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, + 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x59, 0x0a, + 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, + 0x6e, 0x0a, 0x0e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, + 0xd3, 0x04, 0x0a, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x12, 0x43, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x2e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, + 0x63, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x56, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x41, 0x43, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, + 0x03, 0x4c, 0x50, 0x4d, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x52, + 0x59, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x05, 0x12, 0x0c, + 0x0a, 0x08, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x06, 0x42, 0x07, 0x0a, 0x05, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x89, 0x05, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, - 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x09, 0x4d, 0x65, - 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x30, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x55, - 0x6e, 0x69, 0x74, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x2f, 0x0a, 0x04, 0x55, 0x6e, 0x69, - 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a, - 0x07, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x53, 0x10, 0x02, 0x22, 0xbf, 0x01, 0x0a, 0x05, 0x4d, - 0x65, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, - 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x41, 0x0a, 0x0f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x96, 0x01, 0x0a, - 0x0b, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, - 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x26, 0x0a, - 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0xee, 0x03, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, - 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, - 0x65, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x1a, 0xd0, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x62, 0x6c, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x12, 0x38, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x52, 0x0a, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, + 0x0a, 0x13, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x5b, 0x0a, 0x15, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x27, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x13, 0x69, 0x64, 0x6c, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, + 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x74, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x68, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x11, 0x68, 0x61, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x39, 0x0a, 0x13, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x0e, 0x0a, + 0x0a, 0x4e, 0x4f, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, + 0x0e, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x10, + 0x01, 0x22, 0xe0, 0x02, 0x0a, 0x09, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x33, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, + 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x40, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x54, + 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, + 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, + 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4f, 0x4e, + 0x4c, 0x59, 0x10, 0x02, 0x22, 0xef, 0x03, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, + 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0xfc, 0x02, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x74, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x12, 0x2d, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, + 0x64, 0x6f, 0x63, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x53, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x08, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe5, 0x03, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, - 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x09, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, - 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x41, 0x0a, 0x0f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x77, - 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, + 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x69, 0x74, + 0x68, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x77, 0x69, 0x74, 0x68, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x50, 0x0a, 0x0e, 0x73, 0x75, 0x6d, 0x5f, + 0x6f, 0x66, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x75, + 0x6d, 0x4f, 0x66, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, + 0x6d, 0x4f, 0x66, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0e, 0x73, 0x75, + 0x6d, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, + 0x53, 0x75, 0x6d, 0x4f, 0x66, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0c, + 0x73, 0x75, 0x6d, 0x4f, 0x66, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x1a, 0x0e, 0x0a, 0x0c, + 0x53, 0x75, 0x6d, 0x4f, 0x66, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x1a, 0x55, 0x0a, 0x0c, + 0x53, 0x75, 0x6d, 0x4f, 0x66, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x0a, 0x11, + 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, + 0x12, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x42, 0x19, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x22, 0x7c, + 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x32, 0x0a, + 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x04, 0x75, 0x6e, 0x69, + 0x74, 0x22, 0x39, 0x0a, 0x04, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, + 0x54, 0x45, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x53, + 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x54, 0x48, 0x10, 0x03, 0x22, 0xc3, 0x01, 0x0a, + 0x07, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, + 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, + 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x04, + 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x41, 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x0d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, + 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, + 0x6e, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x30, 0x0a, 0x04, + 0x75, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x70, 0x65, 0x63, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x2f, + 0x0a, 0x04, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, 0x54, 0x45, 0x53, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x53, 0x10, 0x02, 0x22, + 0xbf, 0x01, 0x0a, 0x05, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, + 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2b, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x41, + 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x96, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x65, + 0x72, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, + 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0xee, 0x03, 0x0a, 0x18, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, + 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xd0, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x62, 0x69, 0x74, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x36, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, + 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x08, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, - 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x09, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, - 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x05, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x22, 0xd0, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, + 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x12, 0x39, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x12, 0x41, 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x77, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, + 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x12, 0x39, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0xcd, 0x04, 0x0a, + 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, + 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x70, 0x34, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, + 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x20, 0x0a, + 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x56, 0x0a, 0x09, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x41, + 0x43, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x10, 0x03, 0x12, 0x0b, 0x0a, + 0x07, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, + 0x4e, 0x47, 0x45, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, + 0x4c, 0x10, 0x06, 0x42, 0x07, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xde, 0x02, 0x0a, + 0x08, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x63, 0x6f, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, + 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x59, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x40, 0x0a, 0x05, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x4e, + 0x44, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, + 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x44, + 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x22, 0xd9, 0x03, + 0x0a, 0x05, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, + 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, + 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, + 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0xe8, + 0x02, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, + 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2d, + 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x12, 0x59, 0x0a, + 0x16, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x15, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x0c, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x79, + 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x79, 0x70, + 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x40, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x22, 0xde, 0x02, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, + 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, + 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, + 0x51, 0x0a, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x12, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x12, 0x35, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x66, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x52, 0x09, + 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x73, 0x74, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, + 0x6e, 0x79, 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2949,123 +3837,155 @@ func file_p4_config_v1_p4info_proto_rawDescGZIP() []byte { return file_p4_config_v1_p4info_proto_rawDescData } -var file_p4_config_v1_p4info_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_p4_config_v1_p4info_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_p4_config_v1_p4info_proto_enumTypes = make([]protoimpl.EnumInfo, 9) +var file_p4_config_v1_p4info_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_p4_config_v1_p4info_proto_goTypes = []interface{}{ (P4Ids_Prefix)(0), // 0: p4.config.v1.P4Ids.Prefix - (MatchField_MatchType)(0), // 1: p4.config.v1.MatchField.MatchType - (Table_IdleTimeoutBehavior)(0), // 2: p4.config.v1.Table.IdleTimeoutBehavior - (ActionRef_Scope)(0), // 3: p4.config.v1.ActionRef.Scope - (CounterSpec_Unit)(0), // 4: p4.config.v1.CounterSpec.Unit - (MeterSpec_Unit)(0), // 5: p4.config.v1.MeterSpec.Unit - (*P4Info)(nil), // 6: p4.config.v1.P4Info - (*Documentation)(nil), // 7: p4.config.v1.Documentation - (*PkgInfo)(nil), // 8: p4.config.v1.PkgInfo - (*P4Ids)(nil), // 9: p4.config.v1.P4Ids - (*Preamble)(nil), // 10: p4.config.v1.Preamble - (*Extern)(nil), // 11: p4.config.v1.Extern - (*ExternInstance)(nil), // 12: p4.config.v1.ExternInstance - (*MatchField)(nil), // 13: p4.config.v1.MatchField - (*Table)(nil), // 14: p4.config.v1.Table - (*ActionRef)(nil), // 15: p4.config.v1.ActionRef - (*Action)(nil), // 16: p4.config.v1.Action - (*ActionProfile)(nil), // 17: p4.config.v1.ActionProfile - (*CounterSpec)(nil), // 18: p4.config.v1.CounterSpec - (*Counter)(nil), // 19: p4.config.v1.Counter - (*DirectCounter)(nil), // 20: p4.config.v1.DirectCounter - (*MeterSpec)(nil), // 21: p4.config.v1.MeterSpec - (*Meter)(nil), // 22: p4.config.v1.Meter - (*DirectMeter)(nil), // 23: p4.config.v1.DirectMeter - (*ControllerPacketMetadata)(nil), // 24: p4.config.v1.ControllerPacketMetadata - (*ValueSet)(nil), // 25: p4.config.v1.ValueSet - (*Register)(nil), // 26: p4.config.v1.Register - (*Digest)(nil), // 27: p4.config.v1.Digest - (*Action_Param)(nil), // 28: p4.config.v1.Action.Param - (*ActionProfile_SumOfWeights)(nil), // 29: p4.config.v1.ActionProfile.SumOfWeights - (*ActionProfile_SumOfMembers)(nil), // 30: p4.config.v1.ActionProfile.SumOfMembers - (*ControllerPacketMetadata_Metadata)(nil), // 31: p4.config.v1.ControllerPacketMetadata.Metadata - (*P4TypeInfo)(nil), // 32: p4.config.v1.P4TypeInfo - (*SourceLocation)(nil), // 33: p4.config.v1.SourceLocation - (*StructuredAnnotation)(nil), // 34: p4.config.v1.StructuredAnnotation - (*anypb.Any)(nil), // 35: google.protobuf.Any - (*P4NamedType)(nil), // 36: p4.config.v1.P4NamedType - (*P4DataTypeSpec)(nil), // 37: p4.config.v1.P4DataTypeSpec + (GenericTableType_Prefix)(0), // 1: p4.config.v1.GenericTableType.Prefix + (MatchField_MatchType)(0), // 2: p4.config.v1.MatchField.MatchType + (Table_IdleTimeoutBehavior)(0), // 3: p4.config.v1.Table.IdleTimeoutBehavior + (ActionRef_Scope)(0), // 4: p4.config.v1.ActionRef.Scope + (CounterSpec_Unit)(0), // 5: p4.config.v1.CounterSpec.Unit + (MeterSpec_Unit)(0), // 6: p4.config.v1.MeterSpec.Unit + (GenericMatchField_MatchType)(0), // 7: p4.config.v1.GenericMatchField.MatchType + (UnionRef_Scope)(0), // 8: p4.config.v1.UnionRef.Scope + (*P4Info)(nil), // 9: p4.config.v1.P4Info + (*Documentation)(nil), // 10: p4.config.v1.Documentation + (*PkgInfo)(nil), // 11: p4.config.v1.PkgInfo + (*P4Ids)(nil), // 12: p4.config.v1.P4Ids + (*GenericTableType)(nil), // 13: p4.config.v1.GenericTableType + (*Preamble)(nil), // 14: p4.config.v1.Preamble + (*Extern)(nil), // 15: p4.config.v1.Extern + (*ExternInstance)(nil), // 16: p4.config.v1.ExternInstance + (*MatchField)(nil), // 17: p4.config.v1.MatchField + (*Table)(nil), // 18: p4.config.v1.Table + (*ActionRef)(nil), // 19: p4.config.v1.ActionRef + (*Action)(nil), // 20: p4.config.v1.Action + (*ActionProfile)(nil), // 21: p4.config.v1.ActionProfile + (*CounterSpec)(nil), // 22: p4.config.v1.CounterSpec + (*Counter)(nil), // 23: p4.config.v1.Counter + (*DirectCounter)(nil), // 24: p4.config.v1.DirectCounter + (*MeterSpec)(nil), // 25: p4.config.v1.MeterSpec + (*Meter)(nil), // 26: p4.config.v1.Meter + (*DirectMeter)(nil), // 27: p4.config.v1.DirectMeter + (*ControllerPacketMetadata)(nil), // 28: p4.config.v1.ControllerPacketMetadata + (*ValueSet)(nil), // 29: p4.config.v1.ValueSet + (*Register)(nil), // 30: p4.config.v1.Register + (*Digest)(nil), // 31: p4.config.v1.Digest + (*GenericMatchField)(nil), // 32: p4.config.v1.GenericMatchField + (*UnionRef)(nil), // 33: p4.config.v1.UnionRef + (*Union)(nil), // 34: p4.config.v1.Union + (*GenericTable)(nil), // 35: p4.config.v1.GenericTable + (*GenericTableInstance)(nil), // 36: p4.config.v1.GenericTableInstance + (*Action_Param)(nil), // 37: p4.config.v1.Action.Param + (*ActionProfile_SumOfWeights)(nil), // 38: p4.config.v1.ActionProfile.SumOfWeights + (*ActionProfile_SumOfMembers)(nil), // 39: p4.config.v1.ActionProfile.SumOfMembers + (*ControllerPacketMetadata_Metadata)(nil), // 40: p4.config.v1.ControllerPacketMetadata.Metadata + (*Union_Param)(nil), // 41: p4.config.v1.Union.Param + (*P4TypeInfo)(nil), // 42: p4.config.v1.P4TypeInfo + (*SourceLocation)(nil), // 43: p4.config.v1.SourceLocation + (*StructuredAnnotation)(nil), // 44: p4.config.v1.StructuredAnnotation + (*anypb.Any)(nil), // 45: google.protobuf.Any + (*P4NamedType)(nil), // 46: p4.config.v1.P4NamedType + (*P4DataTypeSpec)(nil), // 47: p4.config.v1.P4DataTypeSpec + (*GenericDataTypeSpec)(nil), // 48: p4.config.v1.GenericDataTypeSpec } var file_p4_config_v1_p4info_proto_depIdxs = []int32{ - 8, // 0: p4.config.v1.P4Info.pkg_info:type_name -> p4.config.v1.PkgInfo - 14, // 1: p4.config.v1.P4Info.tables:type_name -> p4.config.v1.Table - 16, // 2: p4.config.v1.P4Info.actions:type_name -> p4.config.v1.Action - 17, // 3: p4.config.v1.P4Info.action_profiles:type_name -> p4.config.v1.ActionProfile - 19, // 4: p4.config.v1.P4Info.counters:type_name -> p4.config.v1.Counter - 20, // 5: p4.config.v1.P4Info.direct_counters:type_name -> p4.config.v1.DirectCounter - 22, // 6: p4.config.v1.P4Info.meters:type_name -> p4.config.v1.Meter - 23, // 7: p4.config.v1.P4Info.direct_meters:type_name -> p4.config.v1.DirectMeter - 24, // 8: p4.config.v1.P4Info.controller_packet_metadata:type_name -> p4.config.v1.ControllerPacketMetadata - 25, // 9: p4.config.v1.P4Info.value_sets:type_name -> p4.config.v1.ValueSet - 26, // 10: p4.config.v1.P4Info.registers:type_name -> p4.config.v1.Register - 27, // 11: p4.config.v1.P4Info.digests:type_name -> p4.config.v1.Digest - 11, // 12: p4.config.v1.P4Info.externs:type_name -> p4.config.v1.Extern - 32, // 13: p4.config.v1.P4Info.type_info:type_name -> p4.config.v1.P4TypeInfo - 7, // 14: p4.config.v1.PkgInfo.doc:type_name -> p4.config.v1.Documentation - 33, // 15: p4.config.v1.PkgInfo.annotation_locations:type_name -> p4.config.v1.SourceLocation - 34, // 16: p4.config.v1.PkgInfo.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 33, // 17: p4.config.v1.Preamble.annotation_locations:type_name -> p4.config.v1.SourceLocation - 7, // 18: p4.config.v1.Preamble.doc:type_name -> p4.config.v1.Documentation - 34, // 19: p4.config.v1.Preamble.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 12, // 20: p4.config.v1.Extern.instances:type_name -> p4.config.v1.ExternInstance - 10, // 21: p4.config.v1.ExternInstance.preamble:type_name -> p4.config.v1.Preamble - 35, // 22: p4.config.v1.ExternInstance.info:type_name -> google.protobuf.Any - 33, // 23: p4.config.v1.MatchField.annotation_locations:type_name -> p4.config.v1.SourceLocation - 1, // 24: p4.config.v1.MatchField.match_type:type_name -> p4.config.v1.MatchField.MatchType - 7, // 25: p4.config.v1.MatchField.doc:type_name -> p4.config.v1.Documentation - 36, // 26: p4.config.v1.MatchField.type_name:type_name -> p4.config.v1.P4NamedType - 34, // 27: p4.config.v1.MatchField.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 10, // 28: p4.config.v1.Table.preamble:type_name -> p4.config.v1.Preamble - 13, // 29: p4.config.v1.Table.match_fields:type_name -> p4.config.v1.MatchField - 15, // 30: p4.config.v1.Table.action_refs:type_name -> p4.config.v1.ActionRef - 2, // 31: p4.config.v1.Table.idle_timeout_behavior:type_name -> p4.config.v1.Table.IdleTimeoutBehavior - 35, // 32: p4.config.v1.Table.other_properties:type_name -> google.protobuf.Any - 3, // 33: p4.config.v1.ActionRef.scope:type_name -> p4.config.v1.ActionRef.Scope - 33, // 34: p4.config.v1.ActionRef.annotation_locations:type_name -> p4.config.v1.SourceLocation - 34, // 35: p4.config.v1.ActionRef.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 10, // 36: p4.config.v1.Action.preamble:type_name -> p4.config.v1.Preamble - 28, // 37: p4.config.v1.Action.params:type_name -> p4.config.v1.Action.Param - 10, // 38: p4.config.v1.ActionProfile.preamble:type_name -> p4.config.v1.Preamble - 29, // 39: p4.config.v1.ActionProfile.sum_of_weights:type_name -> p4.config.v1.ActionProfile.SumOfWeights - 30, // 40: p4.config.v1.ActionProfile.sum_of_members:type_name -> p4.config.v1.ActionProfile.SumOfMembers - 4, // 41: p4.config.v1.CounterSpec.unit:type_name -> p4.config.v1.CounterSpec.Unit - 10, // 42: p4.config.v1.Counter.preamble:type_name -> p4.config.v1.Preamble - 18, // 43: p4.config.v1.Counter.spec:type_name -> p4.config.v1.CounterSpec - 36, // 44: p4.config.v1.Counter.index_type_name:type_name -> p4.config.v1.P4NamedType - 10, // 45: p4.config.v1.DirectCounter.preamble:type_name -> p4.config.v1.Preamble - 18, // 46: p4.config.v1.DirectCounter.spec:type_name -> p4.config.v1.CounterSpec - 5, // 47: p4.config.v1.MeterSpec.unit:type_name -> p4.config.v1.MeterSpec.Unit - 10, // 48: p4.config.v1.Meter.preamble:type_name -> p4.config.v1.Preamble - 21, // 49: p4.config.v1.Meter.spec:type_name -> p4.config.v1.MeterSpec - 36, // 50: p4.config.v1.Meter.index_type_name:type_name -> p4.config.v1.P4NamedType - 10, // 51: p4.config.v1.DirectMeter.preamble:type_name -> p4.config.v1.Preamble - 21, // 52: p4.config.v1.DirectMeter.spec:type_name -> p4.config.v1.MeterSpec - 10, // 53: p4.config.v1.ControllerPacketMetadata.preamble:type_name -> p4.config.v1.Preamble - 31, // 54: p4.config.v1.ControllerPacketMetadata.metadata:type_name -> p4.config.v1.ControllerPacketMetadata.Metadata - 10, // 55: p4.config.v1.ValueSet.preamble:type_name -> p4.config.v1.Preamble - 13, // 56: p4.config.v1.ValueSet.match:type_name -> p4.config.v1.MatchField - 10, // 57: p4.config.v1.Register.preamble:type_name -> p4.config.v1.Preamble - 37, // 58: p4.config.v1.Register.type_spec:type_name -> p4.config.v1.P4DataTypeSpec - 36, // 59: p4.config.v1.Register.index_type_name:type_name -> p4.config.v1.P4NamedType - 10, // 60: p4.config.v1.Digest.preamble:type_name -> p4.config.v1.Preamble - 37, // 61: p4.config.v1.Digest.type_spec:type_name -> p4.config.v1.P4DataTypeSpec - 33, // 62: p4.config.v1.Action.Param.annotation_locations:type_name -> p4.config.v1.SourceLocation - 7, // 63: p4.config.v1.Action.Param.doc:type_name -> p4.config.v1.Documentation - 36, // 64: p4.config.v1.Action.Param.type_name:type_name -> p4.config.v1.P4NamedType - 34, // 65: p4.config.v1.Action.Param.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 33, // 66: p4.config.v1.ControllerPacketMetadata.Metadata.annotation_locations:type_name -> p4.config.v1.SourceLocation - 36, // 67: p4.config.v1.ControllerPacketMetadata.Metadata.type_name:type_name -> p4.config.v1.P4NamedType - 34, // 68: p4.config.v1.ControllerPacketMetadata.Metadata.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation - 69, // [69:69] is the sub-list for method output_type - 69, // [69:69] is the sub-list for method input_type - 69, // [69:69] is the sub-list for extension type_name - 69, // [69:69] is the sub-list for extension extendee - 0, // [0:69] is the sub-list for field type_name + 11, // 0: p4.config.v1.P4Info.pkg_info:type_name -> p4.config.v1.PkgInfo + 18, // 1: p4.config.v1.P4Info.tables:type_name -> p4.config.v1.Table + 20, // 2: p4.config.v1.P4Info.actions:type_name -> p4.config.v1.Action + 21, // 3: p4.config.v1.P4Info.action_profiles:type_name -> p4.config.v1.ActionProfile + 23, // 4: p4.config.v1.P4Info.counters:type_name -> p4.config.v1.Counter + 24, // 5: p4.config.v1.P4Info.direct_counters:type_name -> p4.config.v1.DirectCounter + 26, // 6: p4.config.v1.P4Info.meters:type_name -> p4.config.v1.Meter + 27, // 7: p4.config.v1.P4Info.direct_meters:type_name -> p4.config.v1.DirectMeter + 28, // 8: p4.config.v1.P4Info.controller_packet_metadata:type_name -> p4.config.v1.ControllerPacketMetadata + 29, // 9: p4.config.v1.P4Info.value_sets:type_name -> p4.config.v1.ValueSet + 30, // 10: p4.config.v1.P4Info.registers:type_name -> p4.config.v1.Register + 31, // 11: p4.config.v1.P4Info.digests:type_name -> p4.config.v1.Digest + 35, // 12: p4.config.v1.P4Info.generic_tables:type_name -> p4.config.v1.GenericTable + 34, // 13: p4.config.v1.P4Info.unions:type_name -> p4.config.v1.Union + 15, // 14: p4.config.v1.P4Info.externs:type_name -> p4.config.v1.Extern + 42, // 15: p4.config.v1.P4Info.type_info:type_name -> p4.config.v1.P4TypeInfo + 10, // 16: p4.config.v1.PkgInfo.doc:type_name -> p4.config.v1.Documentation + 43, // 17: p4.config.v1.PkgInfo.annotation_locations:type_name -> p4.config.v1.SourceLocation + 44, // 18: p4.config.v1.PkgInfo.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 43, // 19: p4.config.v1.Preamble.annotation_locations:type_name -> p4.config.v1.SourceLocation + 10, // 20: p4.config.v1.Preamble.doc:type_name -> p4.config.v1.Documentation + 44, // 21: p4.config.v1.Preamble.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 16, // 22: p4.config.v1.Extern.instances:type_name -> p4.config.v1.ExternInstance + 14, // 23: p4.config.v1.ExternInstance.preamble:type_name -> p4.config.v1.Preamble + 45, // 24: p4.config.v1.ExternInstance.info:type_name -> google.protobuf.Any + 43, // 25: p4.config.v1.MatchField.annotation_locations:type_name -> p4.config.v1.SourceLocation + 2, // 26: p4.config.v1.MatchField.match_type:type_name -> p4.config.v1.MatchField.MatchType + 10, // 27: p4.config.v1.MatchField.doc:type_name -> p4.config.v1.Documentation + 46, // 28: p4.config.v1.MatchField.type_name:type_name -> p4.config.v1.P4NamedType + 44, // 29: p4.config.v1.MatchField.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 14, // 30: p4.config.v1.Table.preamble:type_name -> p4.config.v1.Preamble + 17, // 31: p4.config.v1.Table.match_fields:type_name -> p4.config.v1.MatchField + 19, // 32: p4.config.v1.Table.action_refs:type_name -> p4.config.v1.ActionRef + 3, // 33: p4.config.v1.Table.idle_timeout_behavior:type_name -> p4.config.v1.Table.IdleTimeoutBehavior + 45, // 34: p4.config.v1.Table.other_properties:type_name -> google.protobuf.Any + 4, // 35: p4.config.v1.ActionRef.scope:type_name -> p4.config.v1.ActionRef.Scope + 43, // 36: p4.config.v1.ActionRef.annotation_locations:type_name -> p4.config.v1.SourceLocation + 44, // 37: p4.config.v1.ActionRef.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 14, // 38: p4.config.v1.Action.preamble:type_name -> p4.config.v1.Preamble + 37, // 39: p4.config.v1.Action.params:type_name -> p4.config.v1.Action.Param + 14, // 40: p4.config.v1.ActionProfile.preamble:type_name -> p4.config.v1.Preamble + 38, // 41: p4.config.v1.ActionProfile.sum_of_weights:type_name -> p4.config.v1.ActionProfile.SumOfWeights + 39, // 42: p4.config.v1.ActionProfile.sum_of_members:type_name -> p4.config.v1.ActionProfile.SumOfMembers + 5, // 43: p4.config.v1.CounterSpec.unit:type_name -> p4.config.v1.CounterSpec.Unit + 14, // 44: p4.config.v1.Counter.preamble:type_name -> p4.config.v1.Preamble + 22, // 45: p4.config.v1.Counter.spec:type_name -> p4.config.v1.CounterSpec + 46, // 46: p4.config.v1.Counter.index_type_name:type_name -> p4.config.v1.P4NamedType + 14, // 47: p4.config.v1.DirectCounter.preamble:type_name -> p4.config.v1.Preamble + 22, // 48: p4.config.v1.DirectCounter.spec:type_name -> p4.config.v1.CounterSpec + 6, // 49: p4.config.v1.MeterSpec.unit:type_name -> p4.config.v1.MeterSpec.Unit + 14, // 50: p4.config.v1.Meter.preamble:type_name -> p4.config.v1.Preamble + 25, // 51: p4.config.v1.Meter.spec:type_name -> p4.config.v1.MeterSpec + 46, // 52: p4.config.v1.Meter.index_type_name:type_name -> p4.config.v1.P4NamedType + 14, // 53: p4.config.v1.DirectMeter.preamble:type_name -> p4.config.v1.Preamble + 25, // 54: p4.config.v1.DirectMeter.spec:type_name -> p4.config.v1.MeterSpec + 14, // 55: p4.config.v1.ControllerPacketMetadata.preamble:type_name -> p4.config.v1.Preamble + 40, // 56: p4.config.v1.ControllerPacketMetadata.metadata:type_name -> p4.config.v1.ControllerPacketMetadata.Metadata + 14, // 57: p4.config.v1.ValueSet.preamble:type_name -> p4.config.v1.Preamble + 17, // 58: p4.config.v1.ValueSet.match:type_name -> p4.config.v1.MatchField + 14, // 59: p4.config.v1.Register.preamble:type_name -> p4.config.v1.Preamble + 47, // 60: p4.config.v1.Register.type_spec:type_name -> p4.config.v1.P4DataTypeSpec + 46, // 61: p4.config.v1.Register.index_type_name:type_name -> p4.config.v1.P4NamedType + 14, // 62: p4.config.v1.Digest.preamble:type_name -> p4.config.v1.Preamble + 47, // 63: p4.config.v1.Digest.type_spec:type_name -> p4.config.v1.P4DataTypeSpec + 48, // 64: p4.config.v1.GenericMatchField.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec + 7, // 65: p4.config.v1.GenericMatchField.match_type:type_name -> p4.config.v1.GenericMatchField.MatchType + 10, // 66: p4.config.v1.GenericMatchField.doc:type_name -> p4.config.v1.Documentation + 44, // 67: p4.config.v1.GenericMatchField.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 43, // 68: p4.config.v1.GenericMatchField.annotation_locations:type_name -> p4.config.v1.SourceLocation + 8, // 69: p4.config.v1.UnionRef.scope:type_name -> p4.config.v1.UnionRef.Scope + 43, // 70: p4.config.v1.UnionRef.annotation_locations:type_name -> p4.config.v1.SourceLocation + 44, // 71: p4.config.v1.UnionRef.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 14, // 72: p4.config.v1.Union.preamble:type_name -> p4.config.v1.Preamble + 41, // 73: p4.config.v1.Union.params:type_name -> p4.config.v1.Union.Param + 36, // 74: p4.config.v1.GenericTable.instances:type_name -> p4.config.v1.GenericTableInstance + 14, // 75: p4.config.v1.GenericTableInstance.preamble:type_name -> p4.config.v1.Preamble + 32, // 76: p4.config.v1.GenericTableInstance.generic_match_fields:type_name -> p4.config.v1.GenericMatchField + 33, // 77: p4.config.v1.GenericTableInstance.union_refs:type_name -> p4.config.v1.UnionRef + 45, // 78: p4.config.v1.GenericTableInstance.other_properties:type_name -> google.protobuf.Any + 43, // 79: p4.config.v1.Action.Param.annotation_locations:type_name -> p4.config.v1.SourceLocation + 10, // 80: p4.config.v1.Action.Param.doc:type_name -> p4.config.v1.Documentation + 46, // 81: p4.config.v1.Action.Param.type_name:type_name -> p4.config.v1.P4NamedType + 44, // 82: p4.config.v1.Action.Param.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 43, // 83: p4.config.v1.ControllerPacketMetadata.Metadata.annotation_locations:type_name -> p4.config.v1.SourceLocation + 46, // 84: p4.config.v1.ControllerPacketMetadata.Metadata.type_name:type_name -> p4.config.v1.P4NamedType + 44, // 85: p4.config.v1.ControllerPacketMetadata.Metadata.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 48, // 86: p4.config.v1.Union.Param.type_spec:type_name -> p4.config.v1.GenericDataTypeSpec + 10, // 87: p4.config.v1.Union.Param.doc:type_name -> p4.config.v1.Documentation + 44, // 88: p4.config.v1.Union.Param.structured_annotations:type_name -> p4.config.v1.StructuredAnnotation + 43, // 89: p4.config.v1.Union.Param.annotation_locations:type_name -> p4.config.v1.SourceLocation + 90, // [90:90] is the sub-list for method output_type + 90, // [90:90] is the sub-list for method input_type + 90, // [90:90] is the sub-list for extension type_name + 90, // [90:90] is the sub-list for extension extendee + 0, // [0:90] is the sub-list for field type_name } func init() { file_p4_config_v1_p4info_proto_init() } @@ -3124,7 +4044,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Preamble); i { + switch v := v.(*GenericTableType); i { case 0: return &v.state case 1: @@ -3136,7 +4056,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Extern); i { + switch v := v.(*Preamble); i { case 0: return &v.state case 1: @@ -3148,7 +4068,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExternInstance); i { + switch v := v.(*Extern); i { case 0: return &v.state case 1: @@ -3160,7 +4080,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MatchField); i { + switch v := v.(*ExternInstance); i { case 0: return &v.state case 1: @@ -3172,7 +4092,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Table); i { + switch v := v.(*MatchField); i { case 0: return &v.state case 1: @@ -3184,7 +4104,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionRef); i { + switch v := v.(*Table); i { case 0: return &v.state case 1: @@ -3196,7 +4116,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Action); i { + switch v := v.(*ActionRef); i { case 0: return &v.state case 1: @@ -3208,7 +4128,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionProfile); i { + switch v := v.(*Action); i { case 0: return &v.state case 1: @@ -3220,7 +4140,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CounterSpec); i { + switch v := v.(*ActionProfile); i { case 0: return &v.state case 1: @@ -3232,7 +4152,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Counter); i { + switch v := v.(*CounterSpec); i { case 0: return &v.state case 1: @@ -3244,7 +4164,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DirectCounter); i { + switch v := v.(*Counter); i { case 0: return &v.state case 1: @@ -3256,7 +4176,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeterSpec); i { + switch v := v.(*DirectCounter); i { case 0: return &v.state case 1: @@ -3268,7 +4188,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Meter); i { + switch v := v.(*MeterSpec); i { case 0: return &v.state case 1: @@ -3280,7 +4200,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DirectMeter); i { + switch v := v.(*Meter); i { case 0: return &v.state case 1: @@ -3292,7 +4212,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ControllerPacketMetadata); i { + switch v := v.(*DirectMeter); i { case 0: return &v.state case 1: @@ -3304,7 +4224,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValueSet); i { + switch v := v.(*ControllerPacketMetadata); i { case 0: return &v.state case 1: @@ -3316,7 +4236,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Register); i { + switch v := v.(*ValueSet); i { case 0: return &v.state case 1: @@ -3328,7 +4248,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Digest); i { + switch v := v.(*Register); i { case 0: return &v.state case 1: @@ -3340,7 +4260,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Action_Param); i { + switch v := v.(*Digest); i { case 0: return &v.state case 1: @@ -3352,7 +4272,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionProfile_SumOfWeights); i { + switch v := v.(*GenericMatchField); i { case 0: return &v.state case 1: @@ -3364,7 +4284,7 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionProfile_SumOfMembers); i { + switch v := v.(*UnionRef); i { case 0: return &v.state case 1: @@ -3376,6 +4296,78 @@ func file_p4_config_v1_p4info_proto_init() { } } file_p4_config_v1_p4info_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Union); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericTable); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericTableInstance); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Action_Param); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActionProfile_SumOfWeights); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActionProfile_SumOfMembers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_config_v1_p4info_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControllerPacketMetadata_Metadata); i { case 0: return &v.state @@ -3387,23 +4379,39 @@ func file_p4_config_v1_p4info_proto_init() { return nil } } + file_p4_config_v1_p4info_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Union_Param); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } - file_p4_config_v1_p4info_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_p4_config_v1_p4info_proto_msgTypes[8].OneofWrappers = []interface{}{ (*MatchField_MatchType_)(nil), (*MatchField_OtherMatchType)(nil), } - file_p4_config_v1_p4info_proto_msgTypes[11].OneofWrappers = []interface{}{ + file_p4_config_v1_p4info_proto_msgTypes[12].OneofWrappers = []interface{}{ (*ActionProfile_SumOfWeights_)(nil), (*ActionProfile_SumOfMembers_)(nil), } - file_p4_config_v1_p4info_proto_msgTypes[24].OneofWrappers = []interface{}{} + file_p4_config_v1_p4info_proto_msgTypes[23].OneofWrappers = []interface{}{ + (*GenericMatchField_MatchType_)(nil), + (*GenericMatchField_OtherMatchType)(nil), + } + file_p4_config_v1_p4info_proto_msgTypes[30].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p4_config_v1_p4info_proto_rawDesc, - NumEnums: 6, - NumMessages: 26, + NumEnums: 9, + NumMessages: 33, NumExtensions: 0, NumServices: 0, }, diff --git a/go/p4/v1/p4runtime.pb.go b/go/p4/v1/p4runtime.pb.go index 008b0fba..092378c4 100644 --- a/go/p4/v1/p4runtime.pb.go +++ b/go/p4/v1/p4runtime.pb.go @@ -679,6 +679,7 @@ type Entity struct { // *Entity_ValueSetEntry // *Entity_RegisterEntry // *Entity_DigestEntry + // *Entity_GenericTableEntry Entity isEntity_Entity `protobuf_oneof:"entity"` } @@ -805,6 +806,13 @@ func (x *Entity) GetDigestEntry() *DigestEntry { return nil } +func (x *Entity) GetGenericTableEntry() *GenericTableEntry { + if x, ok := x.GetEntity().(*Entity_GenericTableEntry); ok { + return x.GenericTableEntry + } + return nil +} + type isEntity_Entity interface { isEntity_Entity() } @@ -857,6 +865,10 @@ type Entity_DigestEntry struct { DigestEntry *DigestEntry `protobuf:"bytes,12,opt,name=digest_entry,json=digestEntry,proto3,oneof"` } +type Entity_GenericTableEntry struct { + GenericTableEntry *GenericTableEntry `protobuf:"bytes,13,opt,name=generic_table_entry,json=genericTableEntry,proto3,oneof"` +} + func (*Entity_ExternEntry) isEntity_Entity() {} func (*Entity_TableEntry) isEntity_Entity() {} @@ -881,6 +893,8 @@ func (*Entity_RegisterEntry) isEntity_Entity() {} func (*Entity_DigestEntry) isEntity_Entity() {} +func (*Entity_GenericTableEntry) isEntity_Entity() {} + type ExternEntry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1023,6 +1037,10 @@ type TableEntry struct { // the first two cases above, but newer P4Runtime API servers will. // Added in 1.4.0. IsConst bool `protobuf:"varint,13,opt,name=is_const,json=isConst,proto3" json:"is_const,omitempty"` + // list of GenericTableEntry + // The match fields aren't used. + // Only the union fields and priority + Resources []*GenericTableEntry `protobuf:"bytes,14,rep,name=resources,proto3" json:"resources,omitempty"` } func (x *TableEntry) Reset() { @@ -1149,6 +1167,13 @@ func (x *TableEntry) GetIsConst() bool { return false } +func (x *TableEntry) GetResources() []*GenericTableEntry { + if x != nil { + return x.Resources + } + return nil +} + // field_match_type ::= exact | ternary | lpm | range | optional type FieldMatch struct { state protoimpl.MessageState @@ -4449,6 +4474,306 @@ func (x *CapabilitiesResponse) GetP4RuntimeApiVersion() string { return "" } +// //// Begin : GenericTables messages +type GenericFieldMatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FieldId uint32 `protobuf:"varint,1,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"` + // Types that are assignable to FieldMatchType: + // + // *GenericFieldMatch_Exact_ + // *GenericFieldMatch_Ternary_ + // *GenericFieldMatch_Lpm + // *GenericFieldMatch_Range_ + // *GenericFieldMatch_Optional_ + // *GenericFieldMatch_Other + FieldMatchType isGenericFieldMatch_FieldMatchType `protobuf_oneof:"field_match_type"` +} + +func (x *GenericFieldMatch) Reset() { + *x = GenericFieldMatch{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch) ProtoMessage() {} + +func (x *GenericFieldMatch) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54} +} + +func (x *GenericFieldMatch) GetFieldId() uint32 { + if x != nil { + return x.FieldId + } + return 0 +} + +func (m *GenericFieldMatch) GetFieldMatchType() isGenericFieldMatch_FieldMatchType { + if m != nil { + return m.FieldMatchType + } + return nil +} + +func (x *GenericFieldMatch) GetExact() *GenericFieldMatch_Exact { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Exact_); ok { + return x.Exact + } + return nil +} + +func (x *GenericFieldMatch) GetTernary() *GenericFieldMatch_Ternary { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Ternary_); ok { + return x.Ternary + } + return nil +} + +func (x *GenericFieldMatch) GetLpm() *GenericFieldMatch_LPM { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Lpm); ok { + return x.Lpm + } + return nil +} + +func (x *GenericFieldMatch) GetRange() *GenericFieldMatch_Range { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Range_); ok { + return x.Range + } + return nil +} + +func (x *GenericFieldMatch) GetOptional() *GenericFieldMatch_Optional { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Optional_); ok { + return x.Optional + } + return nil +} + +func (x *GenericFieldMatch) GetOther() *anypb.Any { + if x, ok := x.GetFieldMatchType().(*GenericFieldMatch_Other); ok { + return x.Other + } + return nil +} + +type isGenericFieldMatch_FieldMatchType interface { + isGenericFieldMatch_FieldMatchType() +} + +type GenericFieldMatch_Exact_ struct { + Exact *GenericFieldMatch_Exact `protobuf:"bytes,2,opt,name=exact,proto3,oneof"` +} + +type GenericFieldMatch_Ternary_ struct { + Ternary *GenericFieldMatch_Ternary `protobuf:"bytes,3,opt,name=ternary,proto3,oneof"` +} + +type GenericFieldMatch_Lpm struct { + Lpm *GenericFieldMatch_LPM `protobuf:"bytes,4,opt,name=lpm,proto3,oneof"` +} + +type GenericFieldMatch_Range_ struct { + Range *GenericFieldMatch_Range `protobuf:"bytes,6,opt,name=range,proto3,oneof"` +} + +type GenericFieldMatch_Optional_ struct { + Optional *GenericFieldMatch_Optional `protobuf:"bytes,7,opt,name=optional,proto3,oneof"` +} + +type GenericFieldMatch_Other struct { + // Architecture-specific match value; it corresponds to the other_match_type + // in the P4Info MatchField message. + Other *anypb.Any `protobuf:"bytes,100,opt,name=other,proto3,oneof"` +} + +func (*GenericFieldMatch_Exact_) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Ternary_) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Lpm) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Range_) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Optional_) isGenericFieldMatch_FieldMatchType() {} + +func (*GenericFieldMatch_Other) isGenericFieldMatch_FieldMatchType() {} + +type GenericTableEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TableId uint32 `protobuf:"varint,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"` + Match []*GenericFieldMatch `protobuf:"bytes,2,rep,name=match,proto3" json:"match,omitempty"` + TableDataUnion *TableDataUnion `protobuf:"bytes,3,opt,name=table_data_union,json=tableDataUnion,proto3" json:"table_data_union,omitempty"` + // Should only be set if the match implies a TCAM lookup, i.e. at least one of + // the match fields is Optional, Ternary or Range. A higher number indicates + // higher priority. Only a highest priority entry that matches the packet + // must be selected. Multiple entries in the same table with the same + // priority value are permitted. See Section "TableEntry" in the + // specification for details of the behavior. + Priority int32 `protobuf:"varint,4,opt,name=priority,proto3" json:"priority,omitempty"` + // Set to true if the table entry is being used to update the single default + // entry of the table. If true, the "match" field must be empty and + // the "data union" field must be populated with a valid data union. + IsDefaultEntry bool `protobuf:"varint,5,opt,name=is_default_entry,json=isDefaultEntry,proto3" json:"is_default_entry,omitempty"` + // Arbitrary metadata from the controller that is opaque to the target. + Metadata []byte `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *GenericTableEntry) Reset() { + *x = GenericTableEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericTableEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericTableEntry) ProtoMessage() {} + +func (x *GenericTableEntry) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericTableEntry.ProtoReflect.Descriptor instead. +func (*GenericTableEntry) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{55} +} + +func (x *GenericTableEntry) GetTableId() uint32 { + if x != nil { + return x.TableId + } + return 0 +} + +func (x *GenericTableEntry) GetMatch() []*GenericFieldMatch { + if x != nil { + return x.Match + } + return nil +} + +func (x *GenericTableEntry) GetTableDataUnion() *TableDataUnion { + if x != nil { + return x.TableDataUnion + } + return nil +} + +func (x *GenericTableEntry) GetPriority() int32 { + if x != nil { + return x.Priority + } + return 0 +} + +func (x *GenericTableEntry) GetIsDefaultEntry() bool { + if x != nil { + return x.IsDefaultEntry + } + return false +} + +func (x *GenericTableEntry) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +type TableDataUnion struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UnionId uint32 `protobuf:"varint,1,opt,name=union_id,json=unionId,proto3" json:"union_id,omitempty"` + Params []*TableDataUnion_Param `protobuf:"bytes,4,rep,name=params,proto3" json:"params,omitempty"` +} + +func (x *TableDataUnion) Reset() { + *x = TableDataUnion{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TableDataUnion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TableDataUnion) ProtoMessage() {} + +func (x *TableDataUnion) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TableDataUnion.ProtoReflect.Descriptor instead. +func (*TableDataUnion) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{56} +} + +func (x *TableDataUnion) GetUnionId() uint32 { + if x != nil { + return x.UnionId + } + return 0 +} + +func (x *TableDataUnion) GetParams() []*TableDataUnion_Param { + if x != nil { + return x.Params + } + return nil +} + type TableEntry_IdleTimeout struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4462,7 +4787,7 @@ type TableEntry_IdleTimeout struct { func (x *TableEntry_IdleTimeout) Reset() { *x = TableEntry_IdleTimeout{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[54] + mi := &file_p4_v1_p4runtime_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4475,7 +4800,7 @@ func (x *TableEntry_IdleTimeout) String() string { func (*TableEntry_IdleTimeout) ProtoMessage() {} func (x *TableEntry_IdleTimeout) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[54] + mi := &file_p4_v1_p4runtime_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4511,7 +4836,7 @@ type FieldMatch_Exact struct { func (x *FieldMatch_Exact) Reset() { *x = FieldMatch_Exact{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[55] + mi := &file_p4_v1_p4runtime_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4524,7 +4849,7 @@ func (x *FieldMatch_Exact) String() string { func (*FieldMatch_Exact) ProtoMessage() {} func (x *FieldMatch_Exact) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[55] + mi := &file_p4_v1_p4runtime_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4559,7 +4884,7 @@ type FieldMatch_Ternary struct { func (x *FieldMatch_Ternary) Reset() { *x = FieldMatch_Ternary{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[56] + mi := &file_p4_v1_p4runtime_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4572,7 +4897,7 @@ func (x *FieldMatch_Ternary) String() string { func (*FieldMatch_Ternary) ProtoMessage() {} func (x *FieldMatch_Ternary) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[56] + mi := &file_p4_v1_p4runtime_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4614,7 +4939,7 @@ type FieldMatch_LPM struct { func (x *FieldMatch_LPM) Reset() { *x = FieldMatch_LPM{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[57] + mi := &file_p4_v1_p4runtime_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4627,7 +4952,7 @@ func (x *FieldMatch_LPM) String() string { func (*FieldMatch_LPM) ProtoMessage() {} func (x *FieldMatch_LPM) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[57] + mi := &file_p4_v1_p4runtime_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4671,7 +4996,7 @@ type FieldMatch_Range struct { func (x *FieldMatch_Range) Reset() { *x = FieldMatch_Range{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[58] + mi := &file_p4_v1_p4runtime_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4684,7 +5009,7 @@ func (x *FieldMatch_Range) String() string { func (*FieldMatch_Range) ProtoMessage() {} func (x *FieldMatch_Range) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[58] + mi := &file_p4_v1_p4runtime_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4727,7 +5052,7 @@ type FieldMatch_Optional struct { func (x *FieldMatch_Optional) Reset() { *x = FieldMatch_Optional{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[59] + mi := &file_p4_v1_p4runtime_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4740,7 +5065,7 @@ func (x *FieldMatch_Optional) String() string { func (*FieldMatch_Optional) ProtoMessage() {} func (x *FieldMatch_Optional) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[59] + mi := &file_p4_v1_p4runtime_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4775,7 +5100,7 @@ type Action_Param struct { func (x *Action_Param) Reset() { *x = Action_Param{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[60] + mi := &file_p4_v1_p4runtime_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4788,7 +5113,7 @@ func (x *Action_Param) String() string { func (*Action_Param) ProtoMessage() {} func (x *Action_Param) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[60] + mi := &file_p4_v1_p4runtime_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4835,7 +5160,7 @@ type ActionProfileGroup_Member struct { func (x *ActionProfileGroup_Member) Reset() { *x = ActionProfileGroup_Member{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[61] + mi := &file_p4_v1_p4runtime_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4848,7 +5173,7 @@ func (x *ActionProfileGroup_Member) String() string { func (*ActionProfileGroup_Member) ProtoMessage() {} func (x *ActionProfileGroup_Member) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[61] + mi := &file_p4_v1_p4runtime_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4937,7 +5262,7 @@ type DigestEntry_Config struct { func (x *DigestEntry_Config) Reset() { *x = DigestEntry_Config{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[62] + mi := &file_p4_v1_p4runtime_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4950,7 +5275,7 @@ func (x *DigestEntry_Config) String() string { func (*DigestEntry_Config) ProtoMessage() {} func (x *DigestEntry_Config) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[62] + mi := &file_p4_v1_p4runtime_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5005,7 +5330,7 @@ type ForwardingPipelineConfig_Cookie struct { func (x *ForwardingPipelineConfig_Cookie) Reset() { *x = ForwardingPipelineConfig_Cookie{} if protoimpl.UnsafeEnabled { - mi := &file_p4_v1_p4runtime_proto_msgTypes[63] + mi := &file_p4_v1_p4runtime_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5018,7 +5343,7 @@ func (x *ForwardingPipelineConfig_Cookie) String() string { func (*ForwardingPipelineConfig_Cookie) ProtoMessage() {} func (x *ForwardingPipelineConfig_Cookie) ProtoReflect() protoreflect.Message { - mi := &file_p4_v1_p4runtime_proto_msgTypes[63] + mi := &file_p4_v1_p4runtime_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5041,6 +5366,324 @@ func (x *ForwardingPipelineConfig_Cookie) GetCookie() uint64 { return 0 } +type GenericFieldMatch_Exact struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value *GenericData `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *GenericFieldMatch_Exact) Reset() { + *x = GenericFieldMatch_Exact{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_Exact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_Exact) ProtoMessage() {} + +func (x *GenericFieldMatch_Exact) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[67] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_Exact.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_Exact) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 0} +} + +func (x *GenericFieldMatch_Exact) GetValue() *GenericData { + if x != nil { + return x.Value + } + return nil +} + +type GenericFieldMatch_Ternary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + Mask []byte `protobuf:"bytes,2,opt,name=mask,proto3" json:"mask,omitempty"` +} + +func (x *GenericFieldMatch_Ternary) Reset() { + *x = GenericFieldMatch_Ternary{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_Ternary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_Ternary) ProtoMessage() {} + +func (x *GenericFieldMatch_Ternary) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[68] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_Ternary.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_Ternary) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 1} +} + +func (x *GenericFieldMatch_Ternary) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +func (x *GenericFieldMatch_Ternary) GetMask() []byte { + if x != nil { + return x.Mask + } + return nil +} + +type GenericFieldMatch_LPM struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + PrefixLen int32 `protobuf:"varint,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` // in bits +} + +func (x *GenericFieldMatch_LPM) Reset() { + *x = GenericFieldMatch_LPM{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_LPM) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_LPM) ProtoMessage() {} + +func (x *GenericFieldMatch_LPM) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[69] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_LPM.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_LPM) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 2} +} + +func (x *GenericFieldMatch_LPM) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +func (x *GenericFieldMatch_LPM) GetPrefixLen() int32 { + if x != nil { + return x.PrefixLen + } + return 0 +} + +// A Range is logically a set that contains all values numerically between +// 'low' and 'high' inclusively. +type GenericFieldMatch_Range struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Low []byte `protobuf:"bytes,1,opt,name=low,proto3" json:"low,omitempty"` + High []byte `protobuf:"bytes,2,opt,name=high,proto3" json:"high,omitempty"` +} + +func (x *GenericFieldMatch_Range) Reset() { + *x = GenericFieldMatch_Range{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_Range) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_Range) ProtoMessage() {} + +func (x *GenericFieldMatch_Range) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[70] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_Range.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_Range) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 3} +} + +func (x *GenericFieldMatch_Range) GetLow() []byte { + if x != nil { + return x.Low + } + return nil +} + +func (x *GenericFieldMatch_Range) GetHigh() []byte { + if x != nil { + return x.High + } + return nil +} + +// If the Optional match should be a wildcard, the FieldMatch must be omitted. +// Otherwise, this behaves like an exact match. +type GenericFieldMatch_Optional struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value *GenericData `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *GenericFieldMatch_Optional) Reset() { + *x = GenericFieldMatch_Optional{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenericFieldMatch_Optional) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericFieldMatch_Optional) ProtoMessage() {} + +func (x *GenericFieldMatch_Optional) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[71] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericFieldMatch_Optional.ProtoReflect.Descriptor instead. +func (*GenericFieldMatch_Optional) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{54, 4} +} + +func (x *GenericFieldMatch_Optional) GetValue() *GenericData { + if x != nil { + return x.Value + } + return nil +} + +type TableDataUnion_Param struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ParamId uint32 `protobuf:"varint,2,opt,name=param_id,json=paramId,proto3" json:"param_id,omitempty"` + Value *GenericData `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *TableDataUnion_Param) Reset() { + *x = TableDataUnion_Param{} + if protoimpl.UnsafeEnabled { + mi := &file_p4_v1_p4runtime_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TableDataUnion_Param) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TableDataUnion_Param) ProtoMessage() {} + +func (x *TableDataUnion_Param) ProtoReflect() protoreflect.Message { + mi := &file_p4_v1_p4runtime_proto_msgTypes[72] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TableDataUnion_Param.ProtoReflect.Descriptor instead. +func (*TableDataUnion_Param) Descriptor() ([]byte, []int) { + return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{56, 0} +} + +func (x *TableDataUnion_Param) GetParamId() uint32 { + if x != nil { + return x.ParamId + } + return 0 +} + +func (x *TableDataUnion_Param) GetValue() *GenericData { + if x != nil { + return x.Value + } + return nil +} + var File_p4_v1_p4runtime_proto protoreflect.FileDescriptor var file_p4_v1_p4runtime_proto_rawDesc = []byte{ @@ -5093,7 +5736,7 @@ var file_p4_v1_p4runtime_proto_rawDesc = []byte{ 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4e, 0x53, 0x45, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x22, 0xd2, 0x06, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x22, 0x9e, 0x07, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x37, 0x0a, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x65, @@ -5146,547 +5789,624 @@ var file_p4_v1_p4runtime_proto_rawDesc = []byte{ 0x73, 0x74, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x42, 0x08, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x7c, 0x0a, 0x0b, 0x45, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, - 0x6e, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x89, 0x05, 0x0a, 0x0a, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2a, 0x0a, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, - 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, - 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, - 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x0c, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x35, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x45, 0x0a, 0x12, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, - 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, - 0x0a, 0x11, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x64, - 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x4e, 0x73, 0x12, 0x4c, 0x0a, 0x13, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, - 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x10, - 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x69, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, - 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x2c, 0x0a, 0x0b, 0x49, 0x64, 0x6c, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, - 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6c, 0x61, 0x70, - 0x73, 0x65, 0x64, 0x4e, 0x73, 0x22, 0xc8, 0x04, 0x0a, 0x0a, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x64, 0x12, - 0x2f, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x79, 0x12, 0x4a, 0x0a, 0x13, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x08, 0x0a, + 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x7c, 0x0a, 0x0b, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x6e, 0x74, + 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0xc1, 0x05, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, + 0x27, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x2e, 0x45, 0x78, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, - 0x12, 0x35, 0x0a, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x2e, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x48, 0x00, 0x52, 0x07, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6c, 0x70, 0x6d, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4c, 0x50, 0x4d, 0x48, 0x00, 0x52, 0x03, 0x6c, - 0x70, 0x6d, 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x2c, 0x0a, - 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, - 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x1a, 0x1d, 0x0a, 0x05, 0x45, - 0x78, 0x61, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x33, 0x0a, 0x07, 0x54, 0x65, - 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, - 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x1a, - 0x3a, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x1a, 0x2d, 0x0a, 0x05, 0x52, - 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x1a, 0x20, 0x0a, 0x08, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x12, 0x0a, 0x10, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x8e, 0x02, 0x0a, 0x0b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x27, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x18, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x15, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x14, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x5a, 0x0a, - 0x19, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x48, - 0x00, 0x52, 0x16, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x34, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x38, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, - 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x07, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x6a, 0x0a, 0x16, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x50, 0x0a, 0x16, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9f, 0x01, 0x0a, - 0x13, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, 0x12, - 0x1f, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x77, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x72, 0x74, - 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x85, - 0x01, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x25, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbd, 0x02, 0x0a, 0x12, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x0a, - 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x88, 0x01, 0x0a, 0x06, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x05, 0x77, - 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, - 0x52, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x77, - 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x1d, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xb3, 0x01, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x3a, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0xae, 0x01, 0x0a, 0x10, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x3a, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x61, 0x0a, 0x0b, - 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x63, - 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x63, 0x69, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x63, 0x62, 0x75, 0x72, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, - 0x62, 0x75, 0x72, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x70, 0x69, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x62, 0x75, 0x72, 0x73, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x62, 0x75, 0x72, 0x73, 0x74, 0x22, - 0x79, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x70, 0x0a, 0x12, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, + 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2a, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x12, 0x33, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x0b, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, 0x0a, 0x0c, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4f, 0x0a, 0x0b, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x62, - 0x79, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x62, 0x79, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8e, 0x01, - 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x12, 0x2a, 0x0a, 0x06, - 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, - 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x06, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x24, 0x0a, 0x03, 0x72, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x03, 0x72, 0x65, 0x64, 0x22, 0xc4, - 0x01, 0x0a, 0x1c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x50, 0x0a, 0x15, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x13, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x4a, 0x0a, 0x13, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x11, 0x63, 0x6c, 0x6f, 0x6e, - 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x06, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x6f, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x12, 0x25, 0x0a, 0x0b, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x70, 0x6f, 0x72, - 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2c, - 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x08, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x08, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0xb8, 0x01, 0x0a, 0x11, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x08, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6f, - 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, - 0x39, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x27, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x62, 0x0a, 0x0d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2f, 0x0a, - 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x77, - 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd7, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x78, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, - 0x6d, 0x61, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, - 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, - 0x73, 0x22, 0xf5, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x72, - 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x72, - 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, - 0x00, 0x52, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, - 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, - 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x63, - 0x6b, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x45, 0x0a, 0x12, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x73, + 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x12, 0x4c, + 0x0a, 0x13, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x49, + 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x10, 0x74, 0x69, 0x6d, 0x65, + 0x53, 0x69, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x43, 0x6f, + 0x6e, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x2c, 0x0a, 0x0b, 0x49, + 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6c, + 0x61, 0x70, 0x73, 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x4e, 0x73, 0x22, 0xc8, 0x04, 0x0a, 0x0a, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, + 0x78, 0x61, 0x63, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, + 0x48, 0x00, 0x52, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6c, + 0x70, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4c, 0x50, 0x4d, 0x48, + 0x00, 0x52, 0x03, 0x6c, 0x70, 0x6d, 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x42, - 0x08, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x58, 0x0a, 0x09, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x45, 0x0a, 0x0d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x22, 0xf5, 0x02, 0x0a, 0x15, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x72, 0x62, - 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x5c, 0x0a, 0x19, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x6c, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x17, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, - 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, - 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x22, 0x57, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x83, 0x01, 0x0a, 0x0a, - 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x22, 0x47, 0x0a, 0x0e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x17, 0x4d, - 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x0b, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x52, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x22, 0x5c, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, - 0x6b, 0x0a, 0x17, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xb1, 0x02, 0x0a, - 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, - 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x12, - 0x43, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, - 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x6b, 0x12, 0x2f, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x42, 0x09, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x22, 0x41, 0x0a, 0x0e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x75, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x4f, 0x75, 0x74, 0x22, 0x52, 0x0a, 0x12, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3c, 0x0a, 0x0f, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x1a, + 0x1d, 0x0a, 0x05, 0x45, 0x78, 0x61, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x33, + 0x0a, 0x07, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6d, + 0x61, 0x73, 0x6b, 0x1a, 0x3a, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x1a, + 0x2d, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, + 0x67, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x1a, 0x20, + 0x0a, 0x08, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x12, 0x0a, 0x10, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x8e, 0x02, 0x0a, 0x0b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, + 0x18, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x48, + 0x00, 0x52, 0x15, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x14, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x64, 0x12, 0x5a, 0x0a, 0x19, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x42, 0x06, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2b, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x38, 0x0a, 0x05, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6a, 0x0a, 0x16, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x50, + 0x0a, 0x16, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0x9f, 0x01, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x05, 0x77, 0x61, + 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x6f, 0x72, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x77, 0x61, 0x74, 0x63, 0x68, + 0x50, 0x6f, 0x72, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6b, 0x69, + 0x6e, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbd, 0x02, 0x0a, 0x12, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x1a, + 0x88, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x1a, 0x0a, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, + 0x18, 0x01, 0x48, 0x00, 0x52, 0x05, 0x77, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0a, 0x77, + 0x61, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x48, + 0x00, 0x52, 0x09, 0x77, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x0c, 0x0a, 0x0a, + 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x1d, 0x0a, 0x05, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xb3, 0x01, 0x0a, 0x0a, 0x4d, 0x65, + 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, + 0xae, 0x01, 0x0a, 0x10, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, + 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x61, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x10, 0x0a, 0x03, 0x63, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x63, 0x69, + 0x72, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x62, 0x75, 0x72, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x63, 0x62, 0x75, 0x72, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x70, 0x69, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x62, 0x75, 0x72, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x62, 0x75, + 0x72, 0x73, 0x74, 0x22, 0x79, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x70, + 0x0a, 0x12, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, + 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x4f, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x1d, 0x0a, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x79, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x67, 0x72, 0x65, 0x65, 0x6e, + 0x12, 0x2a, 0x0a, 0x06, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x24, 0x0a, 0x03, + 0x72, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x03, 0x72, + 0x65, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x50, 0x0a, 0x15, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, + 0x52, 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x4a, 0x0a, 0x13, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x11, + 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x6f, 0x0a, 0x07, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x12, 0x25, 0x0a, 0x0b, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, + 0x0a, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x04, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x0b, 0x0a, + 0x09, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, + 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb8, 0x01, 0x0a, 0x11, 0x43, 0x6c, 0x6f, + 0x6e, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, + 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, + 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x22, 0x39, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x62, + 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x20, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x74, 0x49, + 0x64, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x22, 0x77, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x34, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd7, 0x01, 0x0a, 0x0b, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x78, 0x0a, 0x06, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, + 0x61, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x6d, + 0x61, 0x78, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x24, 0x0a, 0x0e, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x22, 0xf5, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, + 0x0a, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x4f, 0x75, 0x74, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x35, + 0x0a, 0x0a, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x52, 0x0d, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x22, 0x3e, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x22, 0x2f, 0x0a, 0x07, 0x55, 0x69, 0x6e, 0x74, 0x31, - 0x32, 0x38, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x22, 0x9f, 0x03, 0x0a, 0x22, 0x53, 0x65, 0x74, - 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x07, - 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, - 0x01, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2f, 0x0a, - 0x0b, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x31, - 0x32, 0x38, 0x52, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x48, - 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, - 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, - 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0x77, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x56, 0x45, 0x52, 0x49, - 0x46, 0x59, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x41, 0x56, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, - 0x11, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, - 0x49, 0x54, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x04, - 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x43, 0x49, 0x4c, 0x45, 0x5f, 0x41, 0x4e, - 0x44, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x05, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x65, - 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xd4, 0x01, 0x0a, 0x18, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, - 0x0a, 0x06, 0x70, 0x34, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x70, 0x34, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x0a, 0x10, - 0x70, 0x34, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x34, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x06, - 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x1a, 0x20, 0x0a, 0x06, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x22, 0xfd, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, - 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x0d, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x5d, 0x0a, 0x0c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4f, 0x4b, 0x49, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, - 0x59, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x34, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x41, 0x4e, - 0x44, 0x5f, 0x43, 0x4f, 0x4f, 0x4b, 0x49, 0x45, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x45, - 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x41, 0x4e, 0x44, 0x5f, - 0x43, 0x4f, 0x4f, 0x4b, 0x49, 0x45, 0x10, 0x03, 0x22, 0x5e, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x46, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa2, 0x01, 0x0a, 0x05, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x6f, - 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x09, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x41, 0x63, 0x6b, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x58, 0x0a, + 0x09, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x45, 0x0a, 0x0d, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x22, 0xf5, + 0x02, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x72, 0x62, 0x69, + 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x72, 0x62, 0x69, + 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, + 0x0b, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x06, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x6e, 0x48, 0x00, 0x52, + 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x12, 0x5c, 0x0a, 0x19, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x17, 0x69, 0x64, 0x6c, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x08, 0x0a, 0x06, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x57, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x49, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x83, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x08, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x69, + 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x34, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x47, 0x0a, 0x0e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb4, + 0x01, 0x0a, 0x17, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, + 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x0b, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x52, 0x0a, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5c, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x22, 0x6b, 0x0a, 0x17, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, + 0x0a, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x22, 0xb1, 0x02, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, + 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, + 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x4f, 0x75, 0x74, 0x12, 0x43, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, + 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x12, 0x2f, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x42, 0x09, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x22, 0x41, 0x0a, 0x0e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, + 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x52, 0x09, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x75, 0x74, 0x22, 0x52, 0x0a, 0x12, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3c, 0x0a, + 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x52, 0x0d, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x22, 0x3e, 0x0a, 0x10, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, + 0x2a, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x15, 0x0a, - 0x13, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x14, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, - 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x34, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x2a, 0x8a, 0x01, 0x0a, 0x07, 0x53, 0x64, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x10, - 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, - 0x49, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x0c, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, - 0x5f, 0x4d, 0x41, 0x58, 0x10, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, - 0x21, 0x0a, 0x14, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x49, - 0x52, 0x43, 0x55, 0x4c, 0x41, 0x54, 0x45, 0x10, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x01, 0x12, 0x19, 0x0a, 0x0c, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x43, - 0x50, 0x55, 0x10, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x32, 0x83, 0x04, - 0x0a, 0x09, 0x50, 0x34, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x33, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, - 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, - 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, + 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x22, 0x2f, 0x0a, 0x07, 0x55, + 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, + 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x22, 0x9f, 0x03, 0x0a, + 0x22, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x12, 0x2f, 0x0a, 0x0b, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x52, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x48, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x6f, + 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x77, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, + 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x41, 0x56, 0x45, 0x10, + 0x02, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x5f, 0x41, 0x4e, 0x44, 0x5f, + 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, + 0x49, 0x54, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x43, 0x49, 0x4c, + 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x05, 0x22, 0x25, + 0x0a, 0x23, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd4, 0x01, 0x0a, 0x18, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x06, 0x70, 0x34, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x34, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x70, 0x34, 0x69, 0x6e, 0x66, 0x6f, + 0x12, 0x28, 0x0a, 0x10, 0x70, 0x34, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x34, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a, 0x06, 0x63, 0x6f, + 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6f, 0x6b, + 0x69, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x1a, 0x20, 0x0a, 0x06, 0x43, 0x6f, + 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x22, 0xfd, 0x01, 0x0a, + 0x22, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x5b, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x5d, 0x0a, + 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, + 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4f, 0x4b, 0x49, 0x45, + 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x34, 0x49, 0x4e, 0x46, + 0x4f, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4f, 0x4b, 0x49, 0x45, 0x10, 0x02, 0x12, 0x1c, + 0x0a, 0x18, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, + 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4f, 0x4b, 0x49, 0x45, 0x10, 0x03, 0x22, 0x5e, 0x0a, 0x23, + 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, - 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, - 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x42, 0x29, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x76, 0x31, 0xf8, 0x01, 0x01, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa2, 0x01, 0x0a, + 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, + 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, + 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x14, 0x43, 0x61, 0x70, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x32, 0x0a, 0x15, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x61, 0x70, + 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x13, 0x70, 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x05, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x45, + 0x78, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x3c, 0x0a, + 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, + 0x48, 0x00, 0x52, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x30, 0x0a, 0x03, 0x6c, + 0x70, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x2e, 0x4c, 0x50, 0x4d, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x70, 0x6d, 0x12, 0x36, 0x0a, + 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, + 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x1a, 0x31, 0x0a, 0x05, 0x45, 0x78, 0x61, 0x63, 0x74, 0x12, 0x28, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x33, 0x0a, 0x07, 0x54, 0x65, 0x72, 0x6e, 0x61, + 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x1a, 0x3a, 0x0a, 0x03, + 0x4c, 0x50, 0x4d, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x1a, 0x2d, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, + 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x1a, 0x34, 0x0a, 0x08, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x12, 0x0a, + 0x10, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x81, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x3f, 0x0a, 0x10, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, + 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x55, 0x6e, + 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x55, 0x6e, + 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, + 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x6e, + 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xae, 0x01, 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x6e, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x75, 0x6e, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x4c, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x8a, 0x01, 0x0a, 0x07, 0x53, 0x64, 0x6e, 0x50, 0x6f, + 0x72, 0x74, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x44, 0x4e, 0x5f, + 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x0c, 0x53, 0x44, + 0x4e, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0xff, 0xfd, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x21, 0x0a, 0x14, 0x53, 0x44, 0x4e, 0x5f, 0x50, 0x4f, 0x52, + 0x54, 0x5f, 0x52, 0x45, 0x43, 0x49, 0x52, 0x43, 0x55, 0x4c, 0x41, 0x54, 0x45, 0x10, 0xfa, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x19, 0x0a, 0x0c, 0x53, 0x44, 0x4e, 0x5f, + 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x43, 0x50, 0x55, 0x10, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x01, 0x32, 0x83, 0x04, 0x0a, 0x09, 0x50, 0x34, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x12, 0x34, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x14, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, + 0x12, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x1b, + 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x70, 0x34, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, + 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1b, 0x2e, + 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x49, + 0x0a, 0x0c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, + 0x2e, 0x70, 0x34, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x34, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x29, 0x5a, 0x24, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x34, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, + 0x34, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x34, 0x2f, 0x76, + 0x31, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5702,7 +6422,7 @@ func file_p4_v1_p4runtime_proto_rawDescGZIP() []byte { } var file_p4_v1_p4runtime_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_p4_v1_p4runtime_proto_msgTypes = make([]protoimpl.MessageInfo, 64) +var file_p4_v1_p4runtime_proto_msgTypes = make([]protoimpl.MessageInfo, 73) var file_p4_v1_p4runtime_proto_goTypes = []interface{}{ (SdnPort)(0), // 0: p4.v1.SdnPort (WriteRequest_Atomicity)(0), // 1: p4.v1.WriteRequest.Atomicity @@ -5763,132 +6483,156 @@ var file_p4_v1_p4runtime_proto_goTypes = []interface{}{ (*Error)(nil), // 56: p4.v1.Error (*CapabilitiesRequest)(nil), // 57: p4.v1.CapabilitiesRequest (*CapabilitiesResponse)(nil), // 58: p4.v1.CapabilitiesResponse - (*TableEntry_IdleTimeout)(nil), // 59: p4.v1.TableEntry.IdleTimeout - (*FieldMatch_Exact)(nil), // 60: p4.v1.FieldMatch.Exact - (*FieldMatch_Ternary)(nil), // 61: p4.v1.FieldMatch.Ternary - (*FieldMatch_LPM)(nil), // 62: p4.v1.FieldMatch.LPM - (*FieldMatch_Range)(nil), // 63: p4.v1.FieldMatch.Range - (*FieldMatch_Optional)(nil), // 64: p4.v1.FieldMatch.Optional - (*Action_Param)(nil), // 65: p4.v1.Action.Param - (*ActionProfileGroup_Member)(nil), // 66: p4.v1.ActionProfileGroup.Member - (*DigestEntry_Config)(nil), // 67: p4.v1.DigestEntry.Config - (*ForwardingPipelineConfig_Cookie)(nil), // 68: p4.v1.ForwardingPipelineConfig.Cookie - (*anypb.Any)(nil), // 69: google.protobuf.Any - (*P4Data)(nil), // 70: p4.v1.P4Data - (*status.Status)(nil), // 71: google.rpc.Status - (*v1.P4Info)(nil), // 72: p4.config.v1.P4Info + (*GenericFieldMatch)(nil), // 59: p4.v1.GenericFieldMatch + (*GenericTableEntry)(nil), // 60: p4.v1.GenericTableEntry + (*TableDataUnion)(nil), // 61: p4.v1.TableDataUnion + (*TableEntry_IdleTimeout)(nil), // 62: p4.v1.TableEntry.IdleTimeout + (*FieldMatch_Exact)(nil), // 63: p4.v1.FieldMatch.Exact + (*FieldMatch_Ternary)(nil), // 64: p4.v1.FieldMatch.Ternary + (*FieldMatch_LPM)(nil), // 65: p4.v1.FieldMatch.LPM + (*FieldMatch_Range)(nil), // 66: p4.v1.FieldMatch.Range + (*FieldMatch_Optional)(nil), // 67: p4.v1.FieldMatch.Optional + (*Action_Param)(nil), // 68: p4.v1.Action.Param + (*ActionProfileGroup_Member)(nil), // 69: p4.v1.ActionProfileGroup.Member + (*DigestEntry_Config)(nil), // 70: p4.v1.DigestEntry.Config + (*ForwardingPipelineConfig_Cookie)(nil), // 71: p4.v1.ForwardingPipelineConfig.Cookie + (*GenericFieldMatch_Exact)(nil), // 72: p4.v1.GenericFieldMatch.Exact + (*GenericFieldMatch_Ternary)(nil), // 73: p4.v1.GenericFieldMatch.Ternary + (*GenericFieldMatch_LPM)(nil), // 74: p4.v1.GenericFieldMatch.LPM + (*GenericFieldMatch_Range)(nil), // 75: p4.v1.GenericFieldMatch.Range + (*GenericFieldMatch_Optional)(nil), // 76: p4.v1.GenericFieldMatch.Optional + (*TableDataUnion_Param)(nil), // 77: p4.v1.TableDataUnion.Param + (*anypb.Any)(nil), // 78: google.protobuf.Any + (*P4Data)(nil), // 79: p4.v1.P4Data + (*status.Status)(nil), // 80: google.rpc.Status + (*v1.P4Info)(nil), // 81: p4.config.v1.P4Info + (*GenericData)(nil), // 82: p4.v1.GenericData } var file_p4_v1_p4runtime_proto_depIdxs = []int32{ - 50, // 0: p4.v1.WriteRequest.election_id:type_name -> p4.v1.Uint128 - 9, // 1: p4.v1.WriteRequest.updates:type_name -> p4.v1.Update - 1, // 2: p4.v1.WriteRequest.atomicity:type_name -> p4.v1.WriteRequest.Atomicity - 10, // 3: p4.v1.ReadRequest.entities:type_name -> p4.v1.Entity - 10, // 4: p4.v1.ReadResponse.entities:type_name -> p4.v1.Entity - 2, // 5: p4.v1.Update.type:type_name -> p4.v1.Update.Type - 10, // 6: p4.v1.Update.entity:type_name -> p4.v1.Entity - 11, // 7: p4.v1.Entity.extern_entry:type_name -> p4.v1.ExternEntry - 12, // 8: p4.v1.Entity.table_entry:type_name -> p4.v1.TableEntry - 18, // 9: p4.v1.Entity.action_profile_member:type_name -> p4.v1.ActionProfileMember - 19, // 10: p4.v1.Entity.action_profile_group:type_name -> p4.v1.ActionProfileGroup - 21, // 11: p4.v1.Entity.meter_entry:type_name -> p4.v1.MeterEntry - 22, // 12: p4.v1.Entity.direct_meter_entry:type_name -> p4.v1.DirectMeterEntry - 24, // 13: p4.v1.Entity.counter_entry:type_name -> p4.v1.CounterEntry - 25, // 14: p4.v1.Entity.direct_counter_entry:type_name -> p4.v1.DirectCounterEntry - 28, // 15: p4.v1.Entity.packet_replication_engine_entry:type_name -> p4.v1.PacketReplicationEngineEntry - 33, // 16: p4.v1.Entity.value_set_entry:type_name -> p4.v1.ValueSetEntry - 34, // 17: p4.v1.Entity.register_entry:type_name -> p4.v1.RegisterEntry - 35, // 18: p4.v1.Entity.digest_entry:type_name -> p4.v1.DigestEntry - 69, // 19: p4.v1.ExternEntry.entry:type_name -> google.protobuf.Any - 13, // 20: p4.v1.TableEntry.match:type_name -> p4.v1.FieldMatch - 14, // 21: p4.v1.TableEntry.action:type_name -> p4.v1.TableAction - 23, // 22: p4.v1.TableEntry.meter_config:type_name -> p4.v1.MeterConfig - 26, // 23: p4.v1.TableEntry.counter_data:type_name -> p4.v1.CounterData - 27, // 24: p4.v1.TableEntry.meter_counter_data:type_name -> p4.v1.MeterCounterData - 59, // 25: p4.v1.TableEntry.time_since_last_hit:type_name -> p4.v1.TableEntry.IdleTimeout - 60, // 26: p4.v1.FieldMatch.exact:type_name -> p4.v1.FieldMatch.Exact - 61, // 27: p4.v1.FieldMatch.ternary:type_name -> p4.v1.FieldMatch.Ternary - 62, // 28: p4.v1.FieldMatch.lpm:type_name -> p4.v1.FieldMatch.LPM - 63, // 29: p4.v1.FieldMatch.range:type_name -> p4.v1.FieldMatch.Range - 64, // 30: p4.v1.FieldMatch.optional:type_name -> p4.v1.FieldMatch.Optional - 69, // 31: p4.v1.FieldMatch.other:type_name -> google.protobuf.Any - 15, // 32: p4.v1.TableAction.action:type_name -> p4.v1.Action - 16, // 33: p4.v1.TableAction.action_profile_action_set:type_name -> p4.v1.ActionProfileActionSet - 65, // 34: p4.v1.Action.params:type_name -> p4.v1.Action.Param - 17, // 35: p4.v1.ActionProfileActionSet.action_profile_actions:type_name -> p4.v1.ActionProfileAction - 15, // 36: p4.v1.ActionProfileAction.action:type_name -> p4.v1.Action - 15, // 37: p4.v1.ActionProfileMember.action:type_name -> p4.v1.Action - 66, // 38: p4.v1.ActionProfileGroup.members:type_name -> p4.v1.ActionProfileGroup.Member - 20, // 39: p4.v1.MeterEntry.index:type_name -> p4.v1.Index - 23, // 40: p4.v1.MeterEntry.config:type_name -> p4.v1.MeterConfig - 27, // 41: p4.v1.MeterEntry.counter_data:type_name -> p4.v1.MeterCounterData - 12, // 42: p4.v1.DirectMeterEntry.table_entry:type_name -> p4.v1.TableEntry - 23, // 43: p4.v1.DirectMeterEntry.config:type_name -> p4.v1.MeterConfig - 27, // 44: p4.v1.DirectMeterEntry.counter_data:type_name -> p4.v1.MeterCounterData - 20, // 45: p4.v1.CounterEntry.index:type_name -> p4.v1.Index - 26, // 46: p4.v1.CounterEntry.data:type_name -> p4.v1.CounterData - 12, // 47: p4.v1.DirectCounterEntry.table_entry:type_name -> p4.v1.TableEntry - 26, // 48: p4.v1.DirectCounterEntry.data:type_name -> p4.v1.CounterData - 26, // 49: p4.v1.MeterCounterData.green:type_name -> p4.v1.CounterData - 26, // 50: p4.v1.MeterCounterData.yellow:type_name -> p4.v1.CounterData - 26, // 51: p4.v1.MeterCounterData.red:type_name -> p4.v1.CounterData - 30, // 52: p4.v1.PacketReplicationEngineEntry.multicast_group_entry:type_name -> p4.v1.MulticastGroupEntry - 31, // 53: p4.v1.PacketReplicationEngineEntry.clone_session_entry:type_name -> p4.v1.CloneSessionEntry - 29, // 54: p4.v1.MulticastGroupEntry.replicas:type_name -> p4.v1.Replica - 29, // 55: p4.v1.CloneSessionEntry.replicas:type_name -> p4.v1.Replica - 13, // 56: p4.v1.ValueSetMember.match:type_name -> p4.v1.FieldMatch - 32, // 57: p4.v1.ValueSetEntry.members:type_name -> p4.v1.ValueSetMember - 20, // 58: p4.v1.RegisterEntry.index:type_name -> p4.v1.Index - 70, // 59: p4.v1.RegisterEntry.data:type_name -> p4.v1.P4Data - 67, // 60: p4.v1.DigestEntry.config:type_name -> p4.v1.DigestEntry.Config - 43, // 61: p4.v1.StreamMessageRequest.arbitration:type_name -> p4.v1.MasterArbitrationUpdate - 37, // 62: p4.v1.StreamMessageRequest.packet:type_name -> p4.v1.PacketOut - 38, // 63: p4.v1.StreamMessageRequest.digest_ack:type_name -> p4.v1.DigestListAck - 69, // 64: p4.v1.StreamMessageRequest.other:type_name -> google.protobuf.Any - 42, // 65: p4.v1.PacketOut.metadata:type_name -> p4.v1.PacketMetadata - 43, // 66: p4.v1.StreamMessageResponse.arbitration:type_name -> p4.v1.MasterArbitrationUpdate - 40, // 67: p4.v1.StreamMessageResponse.packet:type_name -> p4.v1.PacketIn - 41, // 68: p4.v1.StreamMessageResponse.digest:type_name -> p4.v1.DigestList - 45, // 69: p4.v1.StreamMessageResponse.idle_timeout_notification:type_name -> p4.v1.IdleTimeoutNotification - 69, // 70: p4.v1.StreamMessageResponse.other:type_name -> google.protobuf.Any - 46, // 71: p4.v1.StreamMessageResponse.error:type_name -> p4.v1.StreamError - 42, // 72: p4.v1.PacketIn.metadata:type_name -> p4.v1.PacketMetadata - 70, // 73: p4.v1.DigestList.data:type_name -> p4.v1.P4Data - 44, // 74: p4.v1.MasterArbitrationUpdate.role:type_name -> p4.v1.Role - 50, // 75: p4.v1.MasterArbitrationUpdate.election_id:type_name -> p4.v1.Uint128 - 71, // 76: p4.v1.MasterArbitrationUpdate.status:type_name -> google.rpc.Status - 69, // 77: p4.v1.Role.config:type_name -> google.protobuf.Any - 12, // 78: p4.v1.IdleTimeoutNotification.table_entry:type_name -> p4.v1.TableEntry - 47, // 79: p4.v1.StreamError.packet_out:type_name -> p4.v1.PacketOutError - 48, // 80: p4.v1.StreamError.digest_list_ack:type_name -> p4.v1.DigestListAckError - 49, // 81: p4.v1.StreamError.other:type_name -> p4.v1.StreamOtherError - 37, // 82: p4.v1.PacketOutError.packet_out:type_name -> p4.v1.PacketOut - 38, // 83: p4.v1.DigestListAckError.digest_list_ack:type_name -> p4.v1.DigestListAck - 69, // 84: p4.v1.StreamOtherError.other:type_name -> google.protobuf.Any - 50, // 85: p4.v1.SetForwardingPipelineConfigRequest.election_id:type_name -> p4.v1.Uint128 - 3, // 86: p4.v1.SetForwardingPipelineConfigRequest.action:type_name -> p4.v1.SetForwardingPipelineConfigRequest.Action - 53, // 87: p4.v1.SetForwardingPipelineConfigRequest.config:type_name -> p4.v1.ForwardingPipelineConfig - 72, // 88: p4.v1.ForwardingPipelineConfig.p4info:type_name -> p4.config.v1.P4Info - 68, // 89: p4.v1.ForwardingPipelineConfig.cookie:type_name -> p4.v1.ForwardingPipelineConfig.Cookie - 4, // 90: p4.v1.GetForwardingPipelineConfigRequest.response_type:type_name -> p4.v1.GetForwardingPipelineConfigRequest.ResponseType - 53, // 91: p4.v1.GetForwardingPipelineConfigResponse.config:type_name -> p4.v1.ForwardingPipelineConfig - 69, // 92: p4.v1.Error.details:type_name -> google.protobuf.Any - 5, // 93: p4.v1.P4Runtime.Write:input_type -> p4.v1.WriteRequest - 7, // 94: p4.v1.P4Runtime.Read:input_type -> p4.v1.ReadRequest - 51, // 95: p4.v1.P4Runtime.SetForwardingPipelineConfig:input_type -> p4.v1.SetForwardingPipelineConfigRequest - 54, // 96: p4.v1.P4Runtime.GetForwardingPipelineConfig:input_type -> p4.v1.GetForwardingPipelineConfigRequest - 36, // 97: p4.v1.P4Runtime.StreamChannel:input_type -> p4.v1.StreamMessageRequest - 57, // 98: p4.v1.P4Runtime.Capabilities:input_type -> p4.v1.CapabilitiesRequest - 6, // 99: p4.v1.P4Runtime.Write:output_type -> p4.v1.WriteResponse - 8, // 100: p4.v1.P4Runtime.Read:output_type -> p4.v1.ReadResponse - 52, // 101: p4.v1.P4Runtime.SetForwardingPipelineConfig:output_type -> p4.v1.SetForwardingPipelineConfigResponse - 55, // 102: p4.v1.P4Runtime.GetForwardingPipelineConfig:output_type -> p4.v1.GetForwardingPipelineConfigResponse - 39, // 103: p4.v1.P4Runtime.StreamChannel:output_type -> p4.v1.StreamMessageResponse - 58, // 104: p4.v1.P4Runtime.Capabilities:output_type -> p4.v1.CapabilitiesResponse - 99, // [99:105] is the sub-list for method output_type - 93, // [93:99] is the sub-list for method input_type - 93, // [93:93] is the sub-list for extension type_name - 93, // [93:93] is the sub-list for extension extendee - 0, // [0:93] is the sub-list for field type_name + 50, // 0: p4.v1.WriteRequest.election_id:type_name -> p4.v1.Uint128 + 9, // 1: p4.v1.WriteRequest.updates:type_name -> p4.v1.Update + 1, // 2: p4.v1.WriteRequest.atomicity:type_name -> p4.v1.WriteRequest.Atomicity + 10, // 3: p4.v1.ReadRequest.entities:type_name -> p4.v1.Entity + 10, // 4: p4.v1.ReadResponse.entities:type_name -> p4.v1.Entity + 2, // 5: p4.v1.Update.type:type_name -> p4.v1.Update.Type + 10, // 6: p4.v1.Update.entity:type_name -> p4.v1.Entity + 11, // 7: p4.v1.Entity.extern_entry:type_name -> p4.v1.ExternEntry + 12, // 8: p4.v1.Entity.table_entry:type_name -> p4.v1.TableEntry + 18, // 9: p4.v1.Entity.action_profile_member:type_name -> p4.v1.ActionProfileMember + 19, // 10: p4.v1.Entity.action_profile_group:type_name -> p4.v1.ActionProfileGroup + 21, // 11: p4.v1.Entity.meter_entry:type_name -> p4.v1.MeterEntry + 22, // 12: p4.v1.Entity.direct_meter_entry:type_name -> p4.v1.DirectMeterEntry + 24, // 13: p4.v1.Entity.counter_entry:type_name -> p4.v1.CounterEntry + 25, // 14: p4.v1.Entity.direct_counter_entry:type_name -> p4.v1.DirectCounterEntry + 28, // 15: p4.v1.Entity.packet_replication_engine_entry:type_name -> p4.v1.PacketReplicationEngineEntry + 33, // 16: p4.v1.Entity.value_set_entry:type_name -> p4.v1.ValueSetEntry + 34, // 17: p4.v1.Entity.register_entry:type_name -> p4.v1.RegisterEntry + 35, // 18: p4.v1.Entity.digest_entry:type_name -> p4.v1.DigestEntry + 60, // 19: p4.v1.Entity.generic_table_entry:type_name -> p4.v1.GenericTableEntry + 78, // 20: p4.v1.ExternEntry.entry:type_name -> google.protobuf.Any + 13, // 21: p4.v1.TableEntry.match:type_name -> p4.v1.FieldMatch + 14, // 22: p4.v1.TableEntry.action:type_name -> p4.v1.TableAction + 23, // 23: p4.v1.TableEntry.meter_config:type_name -> p4.v1.MeterConfig + 26, // 24: p4.v1.TableEntry.counter_data:type_name -> p4.v1.CounterData + 27, // 25: p4.v1.TableEntry.meter_counter_data:type_name -> p4.v1.MeterCounterData + 62, // 26: p4.v1.TableEntry.time_since_last_hit:type_name -> p4.v1.TableEntry.IdleTimeout + 60, // 27: p4.v1.TableEntry.resources:type_name -> p4.v1.GenericTableEntry + 63, // 28: p4.v1.FieldMatch.exact:type_name -> p4.v1.FieldMatch.Exact + 64, // 29: p4.v1.FieldMatch.ternary:type_name -> p4.v1.FieldMatch.Ternary + 65, // 30: p4.v1.FieldMatch.lpm:type_name -> p4.v1.FieldMatch.LPM + 66, // 31: p4.v1.FieldMatch.range:type_name -> p4.v1.FieldMatch.Range + 67, // 32: p4.v1.FieldMatch.optional:type_name -> p4.v1.FieldMatch.Optional + 78, // 33: p4.v1.FieldMatch.other:type_name -> google.protobuf.Any + 15, // 34: p4.v1.TableAction.action:type_name -> p4.v1.Action + 16, // 35: p4.v1.TableAction.action_profile_action_set:type_name -> p4.v1.ActionProfileActionSet + 68, // 36: p4.v1.Action.params:type_name -> p4.v1.Action.Param + 17, // 37: p4.v1.ActionProfileActionSet.action_profile_actions:type_name -> p4.v1.ActionProfileAction + 15, // 38: p4.v1.ActionProfileAction.action:type_name -> p4.v1.Action + 15, // 39: p4.v1.ActionProfileMember.action:type_name -> p4.v1.Action + 69, // 40: p4.v1.ActionProfileGroup.members:type_name -> p4.v1.ActionProfileGroup.Member + 20, // 41: p4.v1.MeterEntry.index:type_name -> p4.v1.Index + 23, // 42: p4.v1.MeterEntry.config:type_name -> p4.v1.MeterConfig + 27, // 43: p4.v1.MeterEntry.counter_data:type_name -> p4.v1.MeterCounterData + 12, // 44: p4.v1.DirectMeterEntry.table_entry:type_name -> p4.v1.TableEntry + 23, // 45: p4.v1.DirectMeterEntry.config:type_name -> p4.v1.MeterConfig + 27, // 46: p4.v1.DirectMeterEntry.counter_data:type_name -> p4.v1.MeterCounterData + 20, // 47: p4.v1.CounterEntry.index:type_name -> p4.v1.Index + 26, // 48: p4.v1.CounterEntry.data:type_name -> p4.v1.CounterData + 12, // 49: p4.v1.DirectCounterEntry.table_entry:type_name -> p4.v1.TableEntry + 26, // 50: p4.v1.DirectCounterEntry.data:type_name -> p4.v1.CounterData + 26, // 51: p4.v1.MeterCounterData.green:type_name -> p4.v1.CounterData + 26, // 52: p4.v1.MeterCounterData.yellow:type_name -> p4.v1.CounterData + 26, // 53: p4.v1.MeterCounterData.red:type_name -> p4.v1.CounterData + 30, // 54: p4.v1.PacketReplicationEngineEntry.multicast_group_entry:type_name -> p4.v1.MulticastGroupEntry + 31, // 55: p4.v1.PacketReplicationEngineEntry.clone_session_entry:type_name -> p4.v1.CloneSessionEntry + 29, // 56: p4.v1.MulticastGroupEntry.replicas:type_name -> p4.v1.Replica + 29, // 57: p4.v1.CloneSessionEntry.replicas:type_name -> p4.v1.Replica + 13, // 58: p4.v1.ValueSetMember.match:type_name -> p4.v1.FieldMatch + 32, // 59: p4.v1.ValueSetEntry.members:type_name -> p4.v1.ValueSetMember + 20, // 60: p4.v1.RegisterEntry.index:type_name -> p4.v1.Index + 79, // 61: p4.v1.RegisterEntry.data:type_name -> p4.v1.P4Data + 70, // 62: p4.v1.DigestEntry.config:type_name -> p4.v1.DigestEntry.Config + 43, // 63: p4.v1.StreamMessageRequest.arbitration:type_name -> p4.v1.MasterArbitrationUpdate + 37, // 64: p4.v1.StreamMessageRequest.packet:type_name -> p4.v1.PacketOut + 38, // 65: p4.v1.StreamMessageRequest.digest_ack:type_name -> p4.v1.DigestListAck + 78, // 66: p4.v1.StreamMessageRequest.other:type_name -> google.protobuf.Any + 42, // 67: p4.v1.PacketOut.metadata:type_name -> p4.v1.PacketMetadata + 43, // 68: p4.v1.StreamMessageResponse.arbitration:type_name -> p4.v1.MasterArbitrationUpdate + 40, // 69: p4.v1.StreamMessageResponse.packet:type_name -> p4.v1.PacketIn + 41, // 70: p4.v1.StreamMessageResponse.digest:type_name -> p4.v1.DigestList + 45, // 71: p4.v1.StreamMessageResponse.idle_timeout_notification:type_name -> p4.v1.IdleTimeoutNotification + 78, // 72: p4.v1.StreamMessageResponse.other:type_name -> google.protobuf.Any + 46, // 73: p4.v1.StreamMessageResponse.error:type_name -> p4.v1.StreamError + 42, // 74: p4.v1.PacketIn.metadata:type_name -> p4.v1.PacketMetadata + 79, // 75: p4.v1.DigestList.data:type_name -> p4.v1.P4Data + 44, // 76: p4.v1.MasterArbitrationUpdate.role:type_name -> p4.v1.Role + 50, // 77: p4.v1.MasterArbitrationUpdate.election_id:type_name -> p4.v1.Uint128 + 80, // 78: p4.v1.MasterArbitrationUpdate.status:type_name -> google.rpc.Status + 78, // 79: p4.v1.Role.config:type_name -> google.protobuf.Any + 12, // 80: p4.v1.IdleTimeoutNotification.table_entry:type_name -> p4.v1.TableEntry + 47, // 81: p4.v1.StreamError.packet_out:type_name -> p4.v1.PacketOutError + 48, // 82: p4.v1.StreamError.digest_list_ack:type_name -> p4.v1.DigestListAckError + 49, // 83: p4.v1.StreamError.other:type_name -> p4.v1.StreamOtherError + 37, // 84: p4.v1.PacketOutError.packet_out:type_name -> p4.v1.PacketOut + 38, // 85: p4.v1.DigestListAckError.digest_list_ack:type_name -> p4.v1.DigestListAck + 78, // 86: p4.v1.StreamOtherError.other:type_name -> google.protobuf.Any + 50, // 87: p4.v1.SetForwardingPipelineConfigRequest.election_id:type_name -> p4.v1.Uint128 + 3, // 88: p4.v1.SetForwardingPipelineConfigRequest.action:type_name -> p4.v1.SetForwardingPipelineConfigRequest.Action + 53, // 89: p4.v1.SetForwardingPipelineConfigRequest.config:type_name -> p4.v1.ForwardingPipelineConfig + 81, // 90: p4.v1.ForwardingPipelineConfig.p4info:type_name -> p4.config.v1.P4Info + 71, // 91: p4.v1.ForwardingPipelineConfig.cookie:type_name -> p4.v1.ForwardingPipelineConfig.Cookie + 4, // 92: p4.v1.GetForwardingPipelineConfigRequest.response_type:type_name -> p4.v1.GetForwardingPipelineConfigRequest.ResponseType + 53, // 93: p4.v1.GetForwardingPipelineConfigResponse.config:type_name -> p4.v1.ForwardingPipelineConfig + 78, // 94: p4.v1.Error.details:type_name -> google.protobuf.Any + 72, // 95: p4.v1.GenericFieldMatch.exact:type_name -> p4.v1.GenericFieldMatch.Exact + 73, // 96: p4.v1.GenericFieldMatch.ternary:type_name -> p4.v1.GenericFieldMatch.Ternary + 74, // 97: p4.v1.GenericFieldMatch.lpm:type_name -> p4.v1.GenericFieldMatch.LPM + 75, // 98: p4.v1.GenericFieldMatch.range:type_name -> p4.v1.GenericFieldMatch.Range + 76, // 99: p4.v1.GenericFieldMatch.optional:type_name -> p4.v1.GenericFieldMatch.Optional + 78, // 100: p4.v1.GenericFieldMatch.other:type_name -> google.protobuf.Any + 59, // 101: p4.v1.GenericTableEntry.match:type_name -> p4.v1.GenericFieldMatch + 61, // 102: p4.v1.GenericTableEntry.table_data_union:type_name -> p4.v1.TableDataUnion + 77, // 103: p4.v1.TableDataUnion.params:type_name -> p4.v1.TableDataUnion.Param + 82, // 104: p4.v1.GenericFieldMatch.Exact.value:type_name -> p4.v1.GenericData + 82, // 105: p4.v1.GenericFieldMatch.Optional.value:type_name -> p4.v1.GenericData + 82, // 106: p4.v1.TableDataUnion.Param.value:type_name -> p4.v1.GenericData + 5, // 107: p4.v1.P4Runtime.Write:input_type -> p4.v1.WriteRequest + 7, // 108: p4.v1.P4Runtime.Read:input_type -> p4.v1.ReadRequest + 51, // 109: p4.v1.P4Runtime.SetForwardingPipelineConfig:input_type -> p4.v1.SetForwardingPipelineConfigRequest + 54, // 110: p4.v1.P4Runtime.GetForwardingPipelineConfig:input_type -> p4.v1.GetForwardingPipelineConfigRequest + 36, // 111: p4.v1.P4Runtime.StreamChannel:input_type -> p4.v1.StreamMessageRequest + 57, // 112: p4.v1.P4Runtime.Capabilities:input_type -> p4.v1.CapabilitiesRequest + 6, // 113: p4.v1.P4Runtime.Write:output_type -> p4.v1.WriteResponse + 8, // 114: p4.v1.P4Runtime.Read:output_type -> p4.v1.ReadResponse + 52, // 115: p4.v1.P4Runtime.SetForwardingPipelineConfig:output_type -> p4.v1.SetForwardingPipelineConfigResponse + 55, // 116: p4.v1.P4Runtime.GetForwardingPipelineConfig:output_type -> p4.v1.GetForwardingPipelineConfigResponse + 39, // 117: p4.v1.P4Runtime.StreamChannel:output_type -> p4.v1.StreamMessageResponse + 58, // 118: p4.v1.P4Runtime.Capabilities:output_type -> p4.v1.CapabilitiesResponse + 113, // [113:119] is the sub-list for method output_type + 107, // [107:113] is the sub-list for method input_type + 107, // [107:107] is the sub-list for extension type_name + 107, // [107:107] is the sub-list for extension extendee + 0, // [0:107] is the sub-list for field type_name } func init() { file_p4_v1_p4runtime_proto_init() } @@ -6547,7 +7291,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TableEntry_IdleTimeout); i { + switch v := v.(*GenericFieldMatch); i { case 0: return &v.state case 1: @@ -6559,7 +7303,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_Exact); i { + switch v := v.(*GenericTableEntry); i { case 0: return &v.state case 1: @@ -6571,7 +7315,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_Ternary); i { + switch v := v.(*TableDataUnion); i { case 0: return &v.state case 1: @@ -6583,7 +7327,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_LPM); i { + switch v := v.(*TableEntry_IdleTimeout); i { case 0: return &v.state case 1: @@ -6595,7 +7339,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_Range); i { + switch v := v.(*FieldMatch_Exact); i { case 0: return &v.state case 1: @@ -6607,7 +7351,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FieldMatch_Optional); i { + switch v := v.(*FieldMatch_Ternary); i { case 0: return &v.state case 1: @@ -6619,7 +7363,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Action_Param); i { + switch v := v.(*FieldMatch_LPM); i { case 0: return &v.state case 1: @@ -6631,7 +7375,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionProfileGroup_Member); i { + switch v := v.(*FieldMatch_Range); i { case 0: return &v.state case 1: @@ -6643,7 +7387,7 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DigestEntry_Config); i { + switch v := v.(*FieldMatch_Optional); i { case 0: return &v.state case 1: @@ -6655,6 +7399,42 @@ func file_p4_v1_p4runtime_proto_init() { } } file_p4_v1_p4runtime_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Action_Param); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActionProfileGroup_Member); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DigestEntry_Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardingPipelineConfig_Cookie); i { case 0: return &v.state @@ -6666,6 +7446,78 @@ func file_p4_v1_p4runtime_proto_init() { return nil } } + file_p4_v1_p4runtime_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_Exact); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_Ternary); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_LPM); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_Range); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenericFieldMatch_Optional); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p4_v1_p4runtime_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TableDataUnion_Param); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_p4_v1_p4runtime_proto_msgTypes[5].OneofWrappers = []interface{}{ (*Entity_ExternEntry)(nil), @@ -6680,6 +7532,7 @@ func file_p4_v1_p4runtime_proto_init() { (*Entity_ValueSetEntry)(nil), (*Entity_RegisterEntry)(nil), (*Entity_DigestEntry)(nil), + (*Entity_GenericTableEntry)(nil), } file_p4_v1_p4runtime_proto_msgTypes[8].OneofWrappers = []interface{}{ (*FieldMatch_Exact_)(nil), @@ -6726,7 +7579,15 @@ func file_p4_v1_p4runtime_proto_init() { (*StreamError_DigestListAck)(nil), (*StreamError_Other)(nil), } - file_p4_v1_p4runtime_proto_msgTypes[61].OneofWrappers = []interface{}{ + file_p4_v1_p4runtime_proto_msgTypes[54].OneofWrappers = []interface{}{ + (*GenericFieldMatch_Exact_)(nil), + (*GenericFieldMatch_Ternary_)(nil), + (*GenericFieldMatch_Lpm)(nil), + (*GenericFieldMatch_Range_)(nil), + (*GenericFieldMatch_Optional_)(nil), + (*GenericFieldMatch_Other)(nil), + } + file_p4_v1_p4runtime_proto_msgTypes[64].OneofWrappers = []interface{}{ (*ActionProfileGroup_Member_Watch)(nil), (*ActionProfileGroup_Member_WatchPort)(nil), } @@ -6736,7 +7597,7 @@ func file_p4_v1_p4runtime_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p4_v1_p4runtime_proto_rawDesc, NumEnums: 5, - NumMessages: 64, + NumMessages: 73, NumExtensions: 0, NumServices: 1, }, diff --git a/py/p4/config/v1/p4info_pb2.py b/py/p4/config/v1/p4info_pb2.py index 30bce078..4dfda78e 100644 --- a/py/p4/config/v1/p4info_pb2.py +++ b/py/p4/config/v1/p4info_pb2.py @@ -21,7 +21,7 @@ syntax='proto3', serialized_options=b'Z+github.com/p4lang/p4runtime/go/p4/config/v1', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x19p4/config/v1/p4info.proto\x12\x0cp4.config.v1\x1a\x19google/protobuf/any.proto\x1a\x1ap4/config/v1/p4types.proto\"\x88\x05\n\x06P4Info\x12\'\n\x08pkg_info\x18\x01 \x01(\x0b\x32\x15.p4.config.v1.PkgInfo\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.p4.config.v1.Table\x12%\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\x14.p4.config.v1.Action\x12\x34\n\x0f\x61\x63tion_profiles\x18\x04 \x03(\x0b\x32\x1b.p4.config.v1.ActionProfile\x12\'\n\x08\x63ounters\x18\x05 \x03(\x0b\x32\x15.p4.config.v1.Counter\x12\x34\n\x0f\x64irect_counters\x18\x06 \x03(\x0b\x32\x1b.p4.config.v1.DirectCounter\x12#\n\x06meters\x18\x07 \x03(\x0b\x32\x13.p4.config.v1.Meter\x12\x30\n\rdirect_meters\x18\x08 \x03(\x0b\x32\x19.p4.config.v1.DirectMeter\x12J\n\x1a\x63ontroller_packet_metadata\x18\t \x03(\x0b\x32&.p4.config.v1.ControllerPacketMetadata\x12*\n\nvalue_sets\x18\n \x03(\x0b\x32\x16.p4.config.v1.ValueSet\x12)\n\tregisters\x18\x0b \x03(\x0b\x32\x16.p4.config.v1.Register\x12%\n\x07\x64igests\x18\x0c \x03(\x0b\x32\x14.p4.config.v1.Digest\x12%\n\x07\x65xterns\x18\x64 \x03(\x0b\x32\x14.p4.config.v1.Extern\x12,\n\ttype_info\x18\xc8\x01 \x01(\x0b\x32\x18.p4.config.v1.P4TypeInfo\"3\n\rDocumentation\x12\r\n\x05\x62rief\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\xa9\x02\n\x07PkgInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12(\n\x03\x64oc\x18\x03 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x0c\n\x04\x61rch\x18\x05 \x01(\t\x12\x14\n\x0corganization\x18\x06 \x01(\t\x12\x0f\n\x07\x63ontact\x18\x07 \x01(\t\x12\x0b\n\x03url\x18\x08 \x01(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x87\x02\n\x05P4Ids\"\xfd\x01\n\x06Prefix\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TION\x10\x01\x12\t\n\x05TABLE\x10\x02\x12\r\n\tVALUE_SET\x10\x03\x12\x15\n\x11\x43ONTROLLER_HEADER\x10\x04\x12\x15\n\x11PSA_EXTERNS_START\x10\x10\x12\x12\n\x0e\x41\x43TION_PROFILE\x10\x11\x12\x0b\n\x07\x43OUNTER\x10\x12\x12\x12\n\x0e\x44IRECT_COUNTER\x10\x13\x12\t\n\x05METER\x10\x14\x12\x10\n\x0c\x44IRECT_METER\x10\x15\x12\x0c\n\x08REGISTER\x10\x16\x12\n\n\x06\x44IGEST\x10\x17\x12\x18\n\x13OTHER_EXTERNS_START\x10\x80\x01\x12\x08\n\x03MAX\x10\xff\x01\"\xf2\x01\n\x08Preamble\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x06\x45xtern\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xtern_type_name\x18\x02 \x01(\t\x12/\n\tinstances\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.ExternInstance\"^\n\x0e\x45xternInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"\xdc\x03\n\nMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12\x38\n\nmatch_type\x18\x05 \x01(\x0e\x32\".p4.config.v1.MatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x07 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x08 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\xde\x03\n\x05Table\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12.\n\x0cmatch_fields\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12,\n\x0b\x61\x63tion_refs\x18\x03 \x03(\x0b\x32\x17.p4.config.v1.ActionRef\x12\x1f\n\x17\x63onst_default_action_id\x18\x04 \x01(\r\x12\x19\n\x11implementation_id\x18\x06 \x01(\r\x12\x1b\n\x13\x64irect_resource_ids\x18\x07 \x03(\r\x12\x0c\n\x04size\x18\x08 \x01(\x03\x12\x46\n\x15idle_timeout_behavior\x18\t \x01(\x0e\x32\'.p4.config.v1.Table.IdleTimeoutBehavior\x12\x16\n\x0eis_const_table\x18\n \x01(\x08\x12\x1b\n\x13has_initial_entries\x18\x0b \x01(\x08\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\"9\n\x13IdleTimeoutBehavior\x12\x0e\n\nNO_TIMEOUT\x10\x00\x12\x12\n\x0eNOTIFY_CONTROL\x10\x01\"\x9c\x02\n\tActionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.p4.config.v1.ActionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x81\x03\n\x06\x41\x63tion\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.p4.config.v1.Action.Param\x1a\xa0\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x82\x03\n\rActionProfile\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x11\n\ttable_ids\x18\x02 \x03(\r\x12\x15\n\rwith_selector\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x16\n\x0emax_group_size\x18\x05 \x01(\x05\x12\x42\n\x0esum_of_weights\x18\x06 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfWeightsH\x00\x12\x42\n\x0esum_of_members\x18\x07 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfMembersH\x00\x1a\x0e\n\x0cSumOfWeights\x1a\x44\n\x0cSumOfMembers\x12\x1e\n\x11max_member_weight\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x14\n\x12_max_member_weightB\x19\n\x17selector_size_semantics\"v\n\x0b\x43ounterSpec\x12,\n\x04unit\x18\x01 \x01(\x0e\x32\x1e.p4.config.v1.CounterSpec.Unit\"9\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\x12\x08\n\x04\x42OTH\x10\x03\"\x9e\x01\n\x07\x43ounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"{\n\rDirectCounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"h\n\tMeterSpec\x12*\n\x04unit\x18\x01 \x01(\x0e\x32\x1c.p4.config.v1.MeterSpec.Unit\"/\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\"\x9a\x01\n\x05Meter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"w\n\x0b\x44irectMeter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"\x83\x03\n\x18\x43ontrollerPacketMetadata\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x41\n\x08metadata\x18\x02 \x03(\x0b\x32/.p4.config.v1.ControllerPacketMetadata.Metadata\x1a\xf9\x01\n\x08Metadata\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12,\n\ttype_name\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x08ValueSet\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12\x0c\n\x04size\x18\x03 \x01(\x05\"\xa7\x01\n\x08Register\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"c\n\x06\x44igest\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpecB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' + serialized_pb=b'\n\x19p4/config/v1/p4info.proto\x12\x0cp4.config.v1\x1a\x19google/protobuf/any.proto\x1a\x1ap4/config/v1/p4types.proto\"\xe1\x05\n\x06P4Info\x12\'\n\x08pkg_info\x18\x01 \x01(\x0b\x32\x15.p4.config.v1.PkgInfo\x12#\n\x06tables\x18\x02 \x03(\x0b\x32\x13.p4.config.v1.Table\x12%\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\x14.p4.config.v1.Action\x12\x34\n\x0f\x61\x63tion_profiles\x18\x04 \x03(\x0b\x32\x1b.p4.config.v1.ActionProfile\x12\'\n\x08\x63ounters\x18\x05 \x03(\x0b\x32\x15.p4.config.v1.Counter\x12\x34\n\x0f\x64irect_counters\x18\x06 \x03(\x0b\x32\x1b.p4.config.v1.DirectCounter\x12#\n\x06meters\x18\x07 \x03(\x0b\x32\x13.p4.config.v1.Meter\x12\x30\n\rdirect_meters\x18\x08 \x03(\x0b\x32\x19.p4.config.v1.DirectMeter\x12J\n\x1a\x63ontroller_packet_metadata\x18\t \x03(\x0b\x32&.p4.config.v1.ControllerPacketMetadata\x12*\n\nvalue_sets\x18\n \x03(\x0b\x32\x16.p4.config.v1.ValueSet\x12)\n\tregisters\x18\x0b \x03(\x0b\x32\x16.p4.config.v1.Register\x12%\n\x07\x64igests\x18\x0c \x03(\x0b\x32\x14.p4.config.v1.Digest\x12\x32\n\x0egeneric_tables\x18\r \x03(\x0b\x32\x1a.p4.config.v1.GenericTable\x12#\n\x06unions\x18\x0e \x03(\x0b\x32\x13.p4.config.v1.Union\x12%\n\x07\x65xterns\x18\x64 \x03(\x0b\x32\x14.p4.config.v1.Extern\x12,\n\ttype_info\x18\xc8\x01 \x01(\x0b\x32\x18.p4.config.v1.P4TypeInfo\"3\n\rDocumentation\x12\r\n\x05\x62rief\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\xa9\x02\n\x07PkgInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12(\n\x03\x64oc\x18\x03 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x0c\n\x04\x61rch\x18\x05 \x01(\t\x12\x14\n\x0corganization\x18\x06 \x01(\t\x12\x0f\n\x07\x63ontact\x18\x07 \x01(\t\x12\x0b\n\x03url\x18\x08 \x01(\t\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x9a\x02\n\x05P4Ids\"\x90\x02\n\x06Prefix\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TION\x10\x01\x12\t\n\x05TABLE\x10\x02\x12\r\n\tVALUE_SET\x10\x03\x12\x15\n\x11\x43ONTROLLER_HEADER\x10\x04\x12\x15\n\x11PSA_EXTERNS_START\x10\x10\x12\x12\n\x0e\x41\x43TION_PROFILE\x10\x11\x12\x0b\n\x07\x43OUNTER\x10\x12\x12\x12\n\x0e\x44IRECT_COUNTER\x10\x13\x12\t\n\x05METER\x10\x14\x12\x10\n\x0c\x44IRECT_METER\x10\x15\x12\x0c\n\x08REGISTER\x10\x16\x12\n\n\x06\x44IGEST\x10\x17\x12\x11\n\rGENERIC_TABLE\x10\x18\x12\x18\n\x13OTHER_EXTERNS_START\x10\x80\x01\x12\x08\n\x03MAX\x10\xff\x01\"@\n\x10GenericTableType\",\n\x06Prefix\x12\x18\n\x14GENERIC_TABLES_START\x10\x00\x12\x08\n\x03MAX\x10\xff\x01\"\xf2\x01\n\x08Preamble\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x04 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x06\x45xtern\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xtern_type_name\x18\x02 \x01(\t\x12/\n\tinstances\x18\x03 \x03(\x0b\x32\x1c.p4.config.v1.ExternInstance\"^\n\x0e\x45xternInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"\xdc\x03\n\nMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\n \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12\x38\n\nmatch_type\x18\x05 \x01(\x0e\x32\".p4.config.v1.MatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x07 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x08 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\t \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\xde\x03\n\x05Table\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12.\n\x0cmatch_fields\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12,\n\x0b\x61\x63tion_refs\x18\x03 \x03(\x0b\x32\x17.p4.config.v1.ActionRef\x12\x1f\n\x17\x63onst_default_action_id\x18\x04 \x01(\r\x12\x19\n\x11implementation_id\x18\x06 \x01(\r\x12\x1b\n\x13\x64irect_resource_ids\x18\x07 \x03(\r\x12\x0c\n\x04size\x18\x08 \x01(\x03\x12\x46\n\x15idle_timeout_behavior\x18\t \x01(\x0e\x32\'.p4.config.v1.Table.IdleTimeoutBehavior\x12\x16\n\x0eis_const_table\x18\n \x01(\x08\x12\x1b\n\x13has_initial_entries\x18\x0b \x01(\x08\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\"9\n\x13IdleTimeoutBehavior\x12\x0e\n\nNO_TIMEOUT\x10\x00\x12\x12\n\x0eNOTIFY_CONTROL\x10\x01\"\x9c\x02\n\tActionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.p4.config.v1.ActionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\x81\x03\n\x06\x41\x63tion\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.p4.config.v1.Action.Param\x1a\xa0\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x08 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12,\n\ttype_name\x18\x06 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x07 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"\x82\x03\n\rActionProfile\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x11\n\ttable_ids\x18\x02 \x03(\r\x12\x15\n\rwith_selector\x18\x03 \x01(\x08\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x16\n\x0emax_group_size\x18\x05 \x01(\x05\x12\x42\n\x0esum_of_weights\x18\x06 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfWeightsH\x00\x12\x42\n\x0esum_of_members\x18\x07 \x01(\x0b\x32(.p4.config.v1.ActionProfile.SumOfMembersH\x00\x1a\x0e\n\x0cSumOfWeights\x1a\x44\n\x0cSumOfMembers\x12\x1e\n\x11max_member_weight\x18\x01 \x01(\x05H\x00\x88\x01\x01\x42\x14\n\x12_max_member_weightB\x19\n\x17selector_size_semantics\"v\n\x0b\x43ounterSpec\x12,\n\x04unit\x18\x01 \x01(\x0e\x32\x1e.p4.config.v1.CounterSpec.Unit\"9\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\x12\x08\n\x04\x42OTH\x10\x03\"\x9e\x01\n\x07\x43ounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"{\n\rDirectCounter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.p4.config.v1.CounterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"h\n\tMeterSpec\x12*\n\x04unit\x18\x01 \x01(\x0e\x32\x1c.p4.config.v1.MeterSpec.Unit\"/\n\x04Unit\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x0b\n\x07PACKETS\x10\x02\"\x9a\x01\n\x05Meter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"w\n\x0b\x44irectMeter\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.p4.config.v1.MeterSpec\x12\x17\n\x0f\x64irect_table_id\x18\x03 \x01(\r\"\x83\x03\n\x18\x43ontrollerPacketMetadata\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\x41\n\x08metadata\x18\x02 \x03(\x0b\x32/.p4.config.v1.ControllerPacketMetadata.Metadata\x1a\xf9\x01\n\x08Metadata\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x10\n\x08\x62itwidth\x18\x04 \x01(\x05\x12,\n\ttype_name\x18\x05 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"k\n\x08ValueSet\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.config.v1.MatchField\x12\x0c\n\x04size\x18\x03 \x01(\x05\"\xa7\x01\n\x08Register\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x32\n\x0findex_type_name\x18\x04 \x01(\x0b\x32\x19.p4.config.v1.P4NamedType\"c\n\x06\x44igest\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12/\n\ttype_spec\x18\x02 \x01(\x0b\x32\x1c.p4.config.v1.P4DataTypeSpec\"\xe0\x03\n\x11GenericMatchField\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x34\n\ttype_spec\x18\x03 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12?\n\nmatch_type\x18\x04 \x01(\x0e\x32).p4.config.v1.GenericMatchField.MatchTypeH\x00\x12\x1a\n\x10other_match_type\x18\x05 \x01(\tH\x00\x12(\n\x03\x64oc\x18\x06 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x13\n\x0b\x61nnotations\x18\x07 \x03(\t\x12\x42\n\x16structured_annotations\x18\x08 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\t \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"V\n\tMatchType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\t\n\x05\x45XACT\x10\x02\x12\x07\n\x03LPM\x10\x03\x12\x0b\n\x07TERNARY\x10\x04\x12\t\n\x05RANGE\x10\x05\x12\x0c\n\x08OPTIONAL\x10\x06\x42\x07\n\x05match\"\x9a\x02\n\x08UnionRef\x12\n\n\x02id\x18\x01 \x01(\r\x12+\n\x05scope\x18\x03 \x01(\x0e\x32\x1c.p4.config.v1.UnionRef.Scope\x12\x13\n\x0b\x61nnotations\x18\x02 \x03(\t\x12:\n\x14\x61nnotation_locations\x18\x05 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\x12\x42\n\x16structured_annotations\x18\x04 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\"@\n\x05Scope\x12\x15\n\x11TABLE_AND_DEFAULT\x10\x00\x12\x0e\n\nTABLE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45\x46\x41ULT_ONLY\x10\x02\"\xf5\x02\n\x05Union\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.p4.config.v1.Union.Param\x1a\x96\x02\n\x05Param\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x61nnotations\x18\x03 \x03(\t\x12\x34\n\ttype_spec\x18\x04 \x01(\x0b\x32!.p4.config.v1.GenericDataTypeSpec\x12(\n\x03\x64oc\x18\x05 \x01(\x0b\x32\x1b.p4.config.v1.Documentation\x12\x42\n\x16structured_annotations\x18\x06 \x03(\x0b\x32\".p4.config.v1.StructuredAnnotation\x12:\n\x14\x61nnotation_locations\x18\x07 \x03(\x0b\x32\x1c.p4.config.v1.SourceLocation\"}\n\x0cGenericTable\x12\x0f\n\x07type_id\x18\x01 \x01(\r\x12\x11\n\ttype_name\x18\x02 \x01(\t\x12\x12\n\nproperties\x18\x03 \x03(\t\x12\x35\n\tinstances\x18\x04 \x03(\x0b\x32\".p4.config.v1.GenericTableInstance\"\x89\x02\n\x14GenericTableInstance\x12(\n\x08preamble\x18\x01 \x01(\x0b\x32\x16.p4.config.v1.Preamble\x12=\n\x14generic_match_fields\x18\x02 \x03(\x0b\x32\x1f.p4.config.v1.GenericMatchField\x12*\n\nunion_refs\x18\x03 \x03(\x0b\x32\x16.p4.config.v1.UnionRef\x12\x1e\n\x16\x63onst_default_union_id\x18\x04 \x01(\r\x12\x0c\n\x04size\x18\x05 \x01(\x03\x12.\n\x10other_properties\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyB-Z+github.com/p4lang/p4runtime/go/p4/config/v1b\x06proto3' , dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,p4_dot_config_dot_v1_dot_p4types__pb2.DESCRIPTOR,]) @@ -100,23 +100,53 @@ type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( - name='OTHER_EXTERNS_START', index=13, number=128, + name='GENERIC_TABLE', index=13, number=24, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( - name='MAX', index=14, number=255, + name='OTHER_EXTERNS_START', index=14, number=128, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MAX', index=15, number=255, serialized_options=None, type=None, create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, - serialized_start=1113, - serialized_end=1366, + serialized_start=1202, + serialized_end=1474, ) _sym_db.RegisterEnumDescriptor(_P4IDS_PREFIX) +_GENERICTABLETYPE_PREFIX = _descriptor.EnumDescriptor( + name='Prefix', + full_name='p4.config.v1.GenericTableType.Prefix', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='GENERIC_TABLES_START', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MAX', index=1, number=255, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=1496, + serialized_end=1540, +) +_sym_db.RegisterEnumDescriptor(_GENERICTABLETYPE_PREFIX) + _MATCHFIELD_MATCHTYPE = _descriptor.EnumDescriptor( name='MatchType', full_name='p4.config.v1.MatchField.MatchType', @@ -157,8 +187,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2200, - serialized_end=2286, + serialized_start=2374, + serialized_end=2460, ) _sym_db.RegisterEnumDescriptor(_MATCHFIELD_MATCHTYPE) @@ -182,8 +212,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2719, - serialized_end=2776, + serialized_start=2893, + serialized_end=2950, ) _sym_db.RegisterEnumDescriptor(_TABLE_IDLETIMEOUTBEHAVIOR) @@ -212,8 +242,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2999, - serialized_end=3063, + serialized_start=3173, + serialized_end=3237, ) _sym_db.RegisterEnumDescriptor(_ACTIONREF_SCOPE) @@ -247,8 +277,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=3903, - serialized_end=3960, + serialized_start=4077, + serialized_end=4134, ) _sym_db.RegisterEnumDescriptor(_COUNTERSPEC_UNIT) @@ -277,11 +307,86 @@ ], containing_type=None, serialized_options=None, - serialized_start=3903, - serialized_end=3950, + serialized_start=4077, + serialized_end=4124, ) _sym_db.RegisterEnumDescriptor(_METERSPEC_UNIT) +_GENERICMATCHFIELD_MATCHTYPE = _descriptor.EnumDescriptor( + name='MatchType', + full_name='p4.config.v1.GenericMatchField.MatchType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='UNSPECIFIED', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='EXACT', index=1, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='LPM', index=2, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='TERNARY', index=3, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RANGE', index=4, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='OPTIONAL', index=5, number=6, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2374, + serialized_end=2460, +) +_sym_db.RegisterEnumDescriptor(_GENERICMATCHFIELD_MATCHTYPE) + +_UNIONREF_SCOPE = _descriptor.EnumDescriptor( + name='Scope', + full_name='p4.config.v1.UnionRef.Scope', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='TABLE_AND_DEFAULT', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='TABLE_ONLY', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DEFAULT_ONLY', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=3173, + serialized_end=3237, +) +_sym_db.RegisterEnumDescriptor(_UNIONREF_SCOPE) + _P4INFO = _descriptor.Descriptor( name='P4Info', @@ -376,14 +481,28 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='externs', full_name='p4.config.v1.P4Info.externs', index=12, + name='generic_tables', full_name='p4.config.v1.P4Info.generic_tables', index=12, + number=13, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='unions', full_name='p4.config.v1.P4Info.unions', index=13, + number=14, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='externs', full_name='p4.config.v1.P4Info.externs', index=14, number=100, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='type_info', full_name='p4.config.v1.P4Info.type_info', index=13, + name='type_info', full_name='p4.config.v1.P4Info.type_info', index=15, number=200, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, @@ -402,7 +521,7 @@ oneofs=[ ], serialized_start=99, - serialized_end=747, + serialized_end=836, ) @@ -440,8 +559,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=749, - serialized_end=800, + serialized_start=838, + serialized_end=889, ) @@ -535,8 +654,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=803, - serialized_end=1100, + serialized_start=892, + serialized_end=1189, ) @@ -561,8 +680,34 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1103, - serialized_end=1366, + serialized_start=1192, + serialized_end=1474, +) + + +_GENERICTABLETYPE = _descriptor.Descriptor( + name='GenericTableType', + full_name='p4.config.v1.GenericTableType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _GENERICTABLETYPE_PREFIX, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1476, + serialized_end=1540, ) @@ -635,8 +780,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1369, - serialized_end=1611, + serialized_start=1543, + serialized_end=1785, ) @@ -681,8 +826,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1613, - serialized_end=1720, + serialized_start=1787, + serialized_end=1894, ) @@ -720,8 +865,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1722, - serialized_end=1816, + serialized_start=1896, + serialized_end=1990, ) @@ -821,8 +966,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=1819, - serialized_end=2295, + serialized_start=1993, + serialized_end=2469, ) @@ -924,8 +1069,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2298, - serialized_end=2776, + serialized_start=2472, + serialized_end=2950, ) @@ -985,8 +1130,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2779, - serialized_end=3063, + serialized_start=2953, + serialized_end=3237, ) @@ -1066,8 +1211,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3163, - serialized_end=3451, + serialized_start=3337, + serialized_end=3625, ) _ACTION = _descriptor.Descriptor( @@ -1104,8 +1249,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3066, - serialized_end=3451, + serialized_start=3240, + serialized_end=3625, ) @@ -1129,8 +1274,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3729, - serialized_end=3743, + serialized_start=3903, + serialized_end=3917, ) _ACTIONPROFILE_SUMOFMEMBERS = _descriptor.Descriptor( @@ -1165,8 +1310,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=3745, - serialized_end=3813, + serialized_start=3919, + serialized_end=3987, ) _ACTIONPROFILE = _descriptor.Descriptor( @@ -1243,8 +1388,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=3454, - serialized_end=3840, + serialized_start=3628, + serialized_end=4014, ) @@ -1276,8 +1421,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3842, - serialized_end=3960, + serialized_start=4016, + serialized_end=4134, ) @@ -1329,8 +1474,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3963, - serialized_end=4121, + serialized_start=4137, + serialized_end=4295, ) @@ -1375,8 +1520,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4123, - serialized_end=4246, + serialized_start=4297, + serialized_end=4420, ) @@ -1408,8 +1553,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4248, - serialized_end=4352, + serialized_start=4422, + serialized_end=4526, ) @@ -1461,8 +1606,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4355, - serialized_end=4509, + serialized_start=4529, + serialized_end=4683, ) @@ -1507,8 +1652,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4511, - serialized_end=4630, + serialized_start=4685, + serialized_end=4804, ) @@ -1581,8 +1726,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4771, - serialized_end=5020, + serialized_start=4945, + serialized_end=5194, ) _CONTROLLERPACKETMETADATA = _descriptor.Descriptor( @@ -1619,8 +1764,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4633, - serialized_end=5020, + serialized_start=4807, + serialized_end=5194, ) @@ -1665,8 +1810,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5022, - serialized_end=5129, + serialized_start=5196, + serialized_end=5303, ) @@ -1718,8 +1863,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5132, - serialized_end=5299, + serialized_start=5306, + serialized_end=5473, ) @@ -1757,8 +1902,395 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5301, - serialized_end=5400, + serialized_start=5475, + serialized_end=5574, +) + + +_GENERICMATCHFIELD = _descriptor.Descriptor( + name='GenericMatchField', + full_name='p4.config.v1.GenericMatchField', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='p4.config.v1.GenericMatchField.id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.GenericMatchField.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type_spec', full_name='p4.config.v1.GenericMatchField.type_spec', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='match_type', full_name='p4.config.v1.GenericMatchField.match_type', index=3, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='other_match_type', full_name='p4.config.v1.GenericMatchField.other_match_type', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='doc', full_name='p4.config.v1.GenericMatchField.doc', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.GenericMatchField.annotations', index=6, + number=7, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.GenericMatchField.structured_annotations', index=7, + number=8, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.GenericMatchField.annotation_locations', index=8, + number=9, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _GENERICMATCHFIELD_MATCHTYPE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='match', full_name='p4.config.v1.GenericMatchField.match', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=5577, + serialized_end=6057, +) + + +_UNIONREF = _descriptor.Descriptor( + name='UnionRef', + full_name='p4.config.v1.UnionRef', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='p4.config.v1.UnionRef.id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='scope', full_name='p4.config.v1.UnionRef.scope', index=1, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.UnionRef.annotations', index=2, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.UnionRef.annotation_locations', index=3, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.UnionRef.structured_annotations', index=4, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _UNIONREF_SCOPE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6060, + serialized_end=6342, +) + + +_UNION_PARAM = _descriptor.Descriptor( + name='Param', + full_name='p4.config.v1.Union.Param', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='p4.config.v1.Union.Param.id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='p4.config.v1.Union.Param.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotations', full_name='p4.config.v1.Union.Param.annotations', index=2, + number=3, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type_spec', full_name='p4.config.v1.Union.Param.type_spec', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='doc', full_name='p4.config.v1.Union.Param.doc', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='structured_annotations', full_name='p4.config.v1.Union.Param.structured_annotations', index=5, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='annotation_locations', full_name='p4.config.v1.Union.Param.annotation_locations', index=6, + number=7, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6440, + serialized_end=6718, +) + +_UNION = _descriptor.Descriptor( + name='Union', + full_name='p4.config.v1.Union', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='preamble', full_name='p4.config.v1.Union.preamble', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='params', full_name='p4.config.v1.Union.params', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_UNION_PARAM, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6345, + serialized_end=6718, +) + + +_GENERICTABLE = _descriptor.Descriptor( + name='GenericTable', + full_name='p4.config.v1.GenericTable', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='type_id', full_name='p4.config.v1.GenericTable.type_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type_name', full_name='p4.config.v1.GenericTable.type_name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='properties', full_name='p4.config.v1.GenericTable.properties', index=2, + number=3, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='instances', full_name='p4.config.v1.GenericTable.instances', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6720, + serialized_end=6845, +) + + +_GENERICTABLEINSTANCE = _descriptor.Descriptor( + name='GenericTableInstance', + full_name='p4.config.v1.GenericTableInstance', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='preamble', full_name='p4.config.v1.GenericTableInstance.preamble', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='generic_match_fields', full_name='p4.config.v1.GenericTableInstance.generic_match_fields', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='union_refs', full_name='p4.config.v1.GenericTableInstance.union_refs', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='const_default_union_id', full_name='p4.config.v1.GenericTableInstance.const_default_union_id', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='size', full_name='p4.config.v1.GenericTableInstance.size', index=4, + number=5, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='other_properties', full_name='p4.config.v1.GenericTableInstance.other_properties', index=5, + number=100, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6848, + serialized_end=7113, ) _P4INFO.fields_by_name['pkg_info'].message_type = _PKGINFO @@ -1773,12 +2305,15 @@ _P4INFO.fields_by_name['value_sets'].message_type = _VALUESET _P4INFO.fields_by_name['registers'].message_type = _REGISTER _P4INFO.fields_by_name['digests'].message_type = _DIGEST +_P4INFO.fields_by_name['generic_tables'].message_type = _GENERICTABLE +_P4INFO.fields_by_name['unions'].message_type = _UNION _P4INFO.fields_by_name['externs'].message_type = _EXTERN _P4INFO.fields_by_name['type_info'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._P4TYPEINFO _PKGINFO.fields_by_name['doc'].message_type = _DOCUMENTATION _PKGINFO.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION _PKGINFO.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION _P4IDS_PREFIX.containing_type = _P4IDS +_GENERICTABLETYPE_PREFIX.containing_type = _GENERICTABLETYPE _PREAMBLE.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION _PREAMBLE.fields_by_name['doc'].message_type = _DOCUMENTATION _PREAMBLE.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION @@ -1855,10 +2390,39 @@ _REGISTER.fields_by_name['index_type_name'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._P4NAMEDTYPE _DIGEST.fields_by_name['preamble'].message_type = _PREAMBLE _DIGEST.fields_by_name['type_spec'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._P4DATATYPESPEC +_GENERICMATCHFIELD.fields_by_name['type_spec'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._GENERICDATATYPESPEC +_GENERICMATCHFIELD.fields_by_name['match_type'].enum_type = _GENERICMATCHFIELD_MATCHTYPE +_GENERICMATCHFIELD.fields_by_name['doc'].message_type = _DOCUMENTATION +_GENERICMATCHFIELD.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION +_GENERICMATCHFIELD.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION +_GENERICMATCHFIELD_MATCHTYPE.containing_type = _GENERICMATCHFIELD +_GENERICMATCHFIELD.oneofs_by_name['match'].fields.append( + _GENERICMATCHFIELD.fields_by_name['match_type']) +_GENERICMATCHFIELD.fields_by_name['match_type'].containing_oneof = _GENERICMATCHFIELD.oneofs_by_name['match'] +_GENERICMATCHFIELD.oneofs_by_name['match'].fields.append( + _GENERICMATCHFIELD.fields_by_name['other_match_type']) +_GENERICMATCHFIELD.fields_by_name['other_match_type'].containing_oneof = _GENERICMATCHFIELD.oneofs_by_name['match'] +_UNIONREF.fields_by_name['scope'].enum_type = _UNIONREF_SCOPE +_UNIONREF.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION +_UNIONREF.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION +_UNIONREF_SCOPE.containing_type = _UNIONREF +_UNION_PARAM.fields_by_name['type_spec'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._GENERICDATATYPESPEC +_UNION_PARAM.fields_by_name['doc'].message_type = _DOCUMENTATION +_UNION_PARAM.fields_by_name['structured_annotations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._STRUCTUREDANNOTATION +_UNION_PARAM.fields_by_name['annotation_locations'].message_type = p4_dot_config_dot_v1_dot_p4types__pb2._SOURCELOCATION +_UNION_PARAM.containing_type = _UNION +_UNION.fields_by_name['preamble'].message_type = _PREAMBLE +_UNION.fields_by_name['params'].message_type = _UNION_PARAM +_GENERICTABLE.fields_by_name['instances'].message_type = _GENERICTABLEINSTANCE +_GENERICTABLEINSTANCE.fields_by_name['preamble'].message_type = _PREAMBLE +_GENERICTABLEINSTANCE.fields_by_name['generic_match_fields'].message_type = _GENERICMATCHFIELD +_GENERICTABLEINSTANCE.fields_by_name['union_refs'].message_type = _UNIONREF +_GENERICTABLEINSTANCE.fields_by_name['other_properties'].message_type = google_dot_protobuf_dot_any__pb2._ANY DESCRIPTOR.message_types_by_name['P4Info'] = _P4INFO DESCRIPTOR.message_types_by_name['Documentation'] = _DOCUMENTATION DESCRIPTOR.message_types_by_name['PkgInfo'] = _PKGINFO DESCRIPTOR.message_types_by_name['P4Ids'] = _P4IDS +DESCRIPTOR.message_types_by_name['GenericTableType'] = _GENERICTABLETYPE DESCRIPTOR.message_types_by_name['Preamble'] = _PREAMBLE DESCRIPTOR.message_types_by_name['Extern'] = _EXTERN DESCRIPTOR.message_types_by_name['ExternInstance'] = _EXTERNINSTANCE @@ -1877,6 +2441,11 @@ DESCRIPTOR.message_types_by_name['ValueSet'] = _VALUESET DESCRIPTOR.message_types_by_name['Register'] = _REGISTER DESCRIPTOR.message_types_by_name['Digest'] = _DIGEST +DESCRIPTOR.message_types_by_name['GenericMatchField'] = _GENERICMATCHFIELD +DESCRIPTOR.message_types_by_name['UnionRef'] = _UNIONREF +DESCRIPTOR.message_types_by_name['Union'] = _UNION +DESCRIPTOR.message_types_by_name['GenericTable'] = _GENERICTABLE +DESCRIPTOR.message_types_by_name['GenericTableInstance'] = _GENERICTABLEINSTANCE _sym_db.RegisterFileDescriptor(DESCRIPTOR) P4Info = _reflection.GeneratedProtocolMessageType('P4Info', (_message.Message,), { @@ -1907,6 +2476,13 @@ }) _sym_db.RegisterMessage(P4Ids) +GenericTableType = _reflection.GeneratedProtocolMessageType('GenericTableType', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTABLETYPE, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTableType) + }) +_sym_db.RegisterMessage(GenericTableType) + Preamble = _reflection.GeneratedProtocolMessageType('Preamble', (_message.Message,), { 'DESCRIPTOR' : _PREAMBLE, '__module__' : 'p4.config.v1.p4info_pb2' @@ -2065,6 +2641,49 @@ }) _sym_db.RegisterMessage(Digest) +GenericMatchField = _reflection.GeneratedProtocolMessageType('GenericMatchField', (_message.Message,), { + 'DESCRIPTOR' : _GENERICMATCHFIELD, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericMatchField) + }) +_sym_db.RegisterMessage(GenericMatchField) + +UnionRef = _reflection.GeneratedProtocolMessageType('UnionRef', (_message.Message,), { + 'DESCRIPTOR' : _UNIONREF, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.UnionRef) + }) +_sym_db.RegisterMessage(UnionRef) + +Union = _reflection.GeneratedProtocolMessageType('Union', (_message.Message,), { + + 'Param' : _reflection.GeneratedProtocolMessageType('Param', (_message.Message,), { + 'DESCRIPTOR' : _UNION_PARAM, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.Union.Param) + }) + , + 'DESCRIPTOR' : _UNION, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.Union) + }) +_sym_db.RegisterMessage(Union) +_sym_db.RegisterMessage(Union.Param) + +GenericTable = _reflection.GeneratedProtocolMessageType('GenericTable', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTABLE, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTable) + }) +_sym_db.RegisterMessage(GenericTable) + +GenericTableInstance = _reflection.GeneratedProtocolMessageType('GenericTableInstance', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTABLEINSTANCE, + '__module__' : 'p4.config.v1.p4info_pb2' + # @@protoc_insertion_point(class_scope:p4.config.v1.GenericTableInstance) + }) +_sym_db.RegisterMessage(GenericTableInstance) + DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/p4/v1/p4runtime_pb2.py b/py/p4/v1/p4runtime_pb2.py index 0d4b8a0d..16b372f2 100644 --- a/py/p4/v1/p4runtime_pb2.py +++ b/py/p4/v1/p4runtime_pb2.py @@ -24,7 +24,7 @@ syntax='proto3', serialized_options=b'Z$github.com/p4lang/p4runtime/go/p4/v1\370\001\001', create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x15p4/v1/p4runtime.proto\x12\x05p4.v1\x1a\x19google/protobuf/any.proto\x1a\x17google/rpc/status.proto\x1a\x19p4/config/v1/p4info.proto\x1a\x12p4/v1/p4data.proto\"\x8c\x02\n\x0cWriteRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x13\n\x07role_id\x18\x02 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04role\x18\x06 \x01(\t\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12\x1e\n\x07updates\x18\x04 \x03(\x0b\x32\r.p4.v1.Update\x12\x30\n\tatomicity\x18\x05 \x01(\x0e\x32\x1d.p4.v1.WriteRequest.Atomicity\"O\n\tAtomicity\x12\x15\n\x11\x43ONTINUE_ON_ERROR\x10\x00\x12\x15\n\x11ROLLBACK_ON_ERROR\x10\x01\x12\x14\n\x10\x44\x41TAPLANE_ATOMIC\x10\x02\"\x0f\n\rWriteResponse\"O\n\x0bReadRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x0c\n\x04role\x18\x03 \x01(\t\x12\x1f\n\x08\x65ntities\x18\x02 \x03(\x0b\x32\r.p4.v1.Entity\"/\n\x0cReadResponse\x12\x1f\n\x08\x65ntities\x18\x01 \x03(\x0b\x32\r.p4.v1.Entity\"\x86\x01\n\x06Update\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.p4.v1.Update.Type\x12\x1d\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\r.p4.v1.Entity\";\n\x04Type\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06INSERT\x10\x01\x12\n\n\x06MODIFY\x10\x02\x12\n\n\x06\x44\x45LETE\x10\x03\"\x87\x05\n\x06\x45ntity\x12*\n\x0c\x65xtern_entry\x18\x01 \x01(\x0b\x32\x12.p4.v1.ExternEntryH\x00\x12(\n\x0btable_entry\x18\x02 \x01(\x0b\x32\x11.p4.v1.TableEntryH\x00\x12;\n\x15\x61\x63tion_profile_member\x18\x03 \x01(\x0b\x32\x1a.p4.v1.ActionProfileMemberH\x00\x12\x39\n\x14\x61\x63tion_profile_group\x18\x04 \x01(\x0b\x32\x19.p4.v1.ActionProfileGroupH\x00\x12(\n\x0bmeter_entry\x18\x05 \x01(\x0b\x32\x11.p4.v1.MeterEntryH\x00\x12\x35\n\x12\x64irect_meter_entry\x18\x06 \x01(\x0b\x32\x17.p4.v1.DirectMeterEntryH\x00\x12,\n\rcounter_entry\x18\x07 \x01(\x0b\x32\x13.p4.v1.CounterEntryH\x00\x12\x39\n\x14\x64irect_counter_entry\x18\x08 \x01(\x0b\x32\x19.p4.v1.DirectCounterEntryH\x00\x12N\n\x1fpacket_replication_engine_entry\x18\t \x01(\x0b\x32#.p4.v1.PacketReplicationEngineEntryH\x00\x12/\n\x0fvalue_set_entry\x18\n \x01(\x0b\x32\x14.p4.v1.ValueSetEntryH\x00\x12.\n\x0eregister_entry\x18\x0b \x01(\x0b\x32\x14.p4.v1.RegisterEntryH\x00\x12*\n\x0c\x64igest_entry\x18\x0c \x01(\x0b\x32\x12.p4.v1.DigestEntryH\x00\x42\x08\n\x06\x65ntity\"]\n\x0b\x45xternEntry\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x11\n\textern_id\x18\x02 \x01(\r\x12#\n\x05\x65ntry\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\"\xd7\x03\n\nTableEntry\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12 \n\x05match\x18\x02 \x03(\x0b\x32\x11.p4.v1.FieldMatch\x12\"\n\x06\x61\x63tion\x18\x03 \x01(\x0b\x32\x12.p4.v1.TableAction\x12\x10\n\x08priority\x18\x04 \x01(\x05\x12\x1f\n\x13\x63ontroller_metadata\x18\x05 \x01(\x04\x42\x02\x18\x01\x12(\n\x0cmeter_config\x18\x06 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12(\n\x0c\x63ounter_data\x18\x07 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\x33\n\x12meter_counter_data\x18\x0c \x01(\x0b\x32\x17.p4.v1.MeterCounterData\x12\x19\n\x11is_default_action\x18\x08 \x01(\x08\x12\x17\n\x0fidle_timeout_ns\x18\t \x01(\x03\x12:\n\x13time_since_last_hit\x18\n \x01(\x0b\x32\x1d.p4.v1.TableEntry.IdleTimeout\x12\x10\n\x08metadata\x18\x0b \x01(\x0c\x12\x10\n\x08is_const\x18\r \x01(\x08\x1a!\n\x0bIdleTimeout\x12\x12\n\nelapsed_ns\x18\x01 \x01(\x03\"\xda\x03\n\nFieldMatch\x12\x10\n\x08\x66ield_id\x18\x01 \x01(\r\x12(\n\x05\x65xact\x18\x02 \x01(\x0b\x32\x17.p4.v1.FieldMatch.ExactH\x00\x12,\n\x07ternary\x18\x03 \x01(\x0b\x32\x19.p4.v1.FieldMatch.TernaryH\x00\x12$\n\x03lpm\x18\x04 \x01(\x0b\x32\x15.p4.v1.FieldMatch.LPMH\x00\x12(\n\x05range\x18\x06 \x01(\x0b\x32\x17.p4.v1.FieldMatch.RangeH\x00\x12.\n\x08optional\x18\x07 \x01(\x0b\x32\x1a.p4.v1.FieldMatch.OptionalH\x00\x12%\n\x05other\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x1a\x16\n\x05\x45xact\x12\r\n\x05value\x18\x01 \x01(\x0c\x1a&\n\x07Ternary\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x0c\n\x04mask\x18\x02 \x01(\x0c\x1a(\n\x03LPM\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x12\n\nprefix_len\x18\x02 \x01(\x05\x1a\"\n\x05Range\x12\x0b\n\x03low\x18\x01 \x01(\x0c\x12\x0c\n\x04high\x18\x02 \x01(\x0c\x1a\x19\n\x08Optional\x12\r\n\x05value\x18\x01 \x01(\x0c\x42\x12\n\x10\x66ield_match_type\"\xc1\x01\n\x0bTableAction\x12\x1f\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32\r.p4.v1.ActionH\x00\x12\"\n\x18\x61\x63tion_profile_member_id\x18\x02 \x01(\rH\x00\x12!\n\x17\x61\x63tion_profile_group_id\x18\x03 \x01(\rH\x00\x12\x42\n\x19\x61\x63tion_profile_action_set\x18\x04 \x01(\x0b\x32\x1d.p4.v1.ActionProfileActionSetH\x00\x42\x06\n\x04type\"j\n\x06\x41\x63tion\x12\x11\n\taction_id\x18\x01 \x01(\r\x12#\n\x06params\x18\x04 \x03(\x0b\x32\x13.p4.v1.Action.Param\x1a(\n\x05Param\x12\x10\n\x08param_id\x18\x02 \x01(\r\x12\r\n\x05value\x18\x03 \x01(\x0c\"T\n\x16\x41\x63tionProfileActionSet\x12:\n\x16\x61\x63tion_profile_actions\x18\x01 \x03(\x0b\x32\x1a.p4.v1.ActionProfileAction\"}\n\x13\x41\x63tionProfileAction\x12\x1d\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32\r.p4.v1.Action\x12\x0e\n\x06weight\x18\x02 \x01(\x05\x12\x13\n\x05watch\x18\x03 \x01(\x05\x42\x02\x18\x01H\x00\x12\x14\n\nwatch_port\x18\x04 \x01(\x0cH\x00\x42\x0c\n\nwatch_kind\"b\n\x13\x41\x63tionProfileMember\x12\x19\n\x11\x61\x63tion_profile_id\x18\x01 \x01(\r\x12\x11\n\tmember_id\x18\x02 \x01(\r\x12\x1d\n\x06\x61\x63tion\x18\x03 \x01(\x0b\x32\r.p4.v1.Action\"\xec\x01\n\x12\x41\x63tionProfileGroup\x12\x19\n\x11\x61\x63tion_profile_id\x18\x01 \x01(\r\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12\x31\n\x07members\x18\x03 \x03(\x0b\x32 .p4.v1.ActionProfileGroup.Member\x12\x10\n\x08max_size\x18\x04 \x01(\x05\x1a\x64\n\x06Member\x12\x11\n\tmember_id\x18\x01 \x01(\r\x12\x0e\n\x06weight\x18\x02 \x01(\x05\x12\x13\n\x05watch\x18\x03 \x01(\x05\x42\x02\x18\x01H\x00\x12\x14\n\nwatch_port\x18\x04 \x01(\x0cH\x00\x42\x0c\n\nwatch_kind\"\x16\n\x05Index\x12\r\n\x05index\x18\x01 \x01(\x03\"\x8e\x01\n\nMeterEntry\x12\x10\n\x08meter_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12\"\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12-\n\x0c\x63ounter_data\x18\x04 \x01(\x0b\x32\x17.p4.v1.MeterCounterData\"\x8d\x01\n\x10\x44irectMeterEntry\x12&\n\x0btable_entry\x18\x01 \x01(\x0b\x32\x11.p4.v1.TableEntry\x12\"\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12-\n\x0c\x63ounter_data\x18\x03 \x01(\x0b\x32\x17.p4.v1.MeterCounterData\"G\n\x0bMeterConfig\x12\x0b\n\x03\x63ir\x18\x01 \x01(\x03\x12\x0e\n\x06\x63\x62urst\x18\x02 \x01(\x03\x12\x0b\n\x03pir\x18\x03 \x01(\x03\x12\x0e\n\x06pburst\x18\x04 \x01(\x03\"a\n\x0c\x43ounterEntry\x12\x12\n\ncounter_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12 \n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x12.p4.v1.CounterData\"^\n\x12\x44irectCounterEntry\x12&\n\x0btable_entry\x18\x01 \x01(\x0b\x32\x11.p4.v1.TableEntry\x12 \n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x12.p4.v1.CounterData\"7\n\x0b\x43ounterData\x12\x12\n\nbyte_count\x18\x01 \x01(\x03\x12\x14\n\x0cpacket_count\x18\x02 \x01(\x03\"z\n\x10MeterCounterData\x12!\n\x05green\x18\x01 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\"\n\x06yellow\x18\x02 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\x1f\n\x03red\x18\x03 \x01(\x0b\x32\x12.p4.v1.CounterData\"\x9c\x01\n\x1cPacketReplicationEngineEntry\x12;\n\x15multicast_group_entry\x18\x01 \x01(\x0b\x32\x1a.p4.v1.MulticastGroupEntryH\x00\x12\x37\n\x13\x63lone_session_entry\x18\x02 \x01(\x0b\x32\x18.p4.v1.CloneSessionEntryH\x00\x42\x06\n\x04type\"S\n\x07Replica\x12\x19\n\x0b\x65gress_port\x18\x01 \x01(\rB\x02\x18\x01H\x00\x12\x0e\n\x04port\x18\x03 \x01(\x0cH\x00\x12\x10\n\x08instance\x18\x02 \x01(\rB\x0b\n\tport_kind\"e\n\x13MulticastGroupEntry\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\r\x12 \n\x08replicas\x18\x02 \x03(\x0b\x32\x0e.p4.v1.Replica\x12\x10\n\x08metadata\x18\x03 \x01(\x0c\"\x80\x01\n\x11\x43loneSessionEntry\x12\x12\n\nsession_id\x18\x01 \x01(\r\x12 \n\x08replicas\x18\x02 \x03(\x0b\x32\x0e.p4.v1.Replica\x12\x18\n\x10\x63lass_of_service\x18\x03 \x01(\r\x12\x1b\n\x13packet_length_bytes\x18\x04 \x01(\x05\"2\n\x0eValueSetMember\x12 \n\x05match\x18\x01 \x03(\x0b\x32\x11.p4.v1.FieldMatch\"M\n\rValueSetEntry\x12\x14\n\x0cvalue_set_id\x18\x01 \x01(\r\x12&\n\x07members\x18\x02 \x03(\x0b\x32\x15.p4.v1.ValueSetMember\"^\n\rRegisterEntry\x12\x13\n\x0bregister_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12\x1b\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\r.p4.v1.P4Data\"\x9c\x01\n\x0b\x44igestEntry\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12)\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x19.p4.v1.DigestEntry.Config\x1aO\n\x06\x43onfig\x12\x16\n\x0emax_timeout_ns\x18\x01 \x01(\x03\x12\x15\n\rmax_list_size\x18\x02 \x01(\x05\x12\x16\n\x0e\x61\x63k_timeout_ns\x18\x03 \x01(\x03\"\xce\x01\n\x14StreamMessageRequest\x12\x35\n\x0b\x61rbitration\x18\x01 \x01(\x0b\x32\x1e.p4.v1.MasterArbitrationUpdateH\x00\x12\"\n\x06packet\x18\x02 \x01(\x0b\x32\x10.p4.v1.PacketOutH\x00\x12*\n\ndigest_ack\x18\x03 \x01(\x0b\x32\x14.p4.v1.DigestListAckH\x00\x12%\n\x05other\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x42\x08\n\x06update\"E\n\tPacketOut\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\'\n\x08metadata\x18\x02 \x03(\x0b\x32\x15.p4.v1.PacketMetadata\"3\n\rDigestListAck\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12\x0f\n\x07list_id\x18\x02 \x01(\x04\"\xb1\x02\n\x15StreamMessageResponse\x12\x35\n\x0b\x61rbitration\x18\x01 \x01(\x0b\x32\x1e.p4.v1.MasterArbitrationUpdateH\x00\x12!\n\x06packet\x18\x02 \x01(\x0b\x32\x0f.p4.v1.PacketInH\x00\x12#\n\x06\x64igest\x18\x03 \x01(\x0b\x32\x11.p4.v1.DigestListH\x00\x12\x43\n\x19idle_timeout_notification\x18\x04 \x01(\x0b\x32\x1e.p4.v1.IdleTimeoutNotificationH\x00\x12%\n\x05other\x18\x05 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x12#\n\x05\x65rror\x18\x06 \x01(\x0b\x32\x12.p4.v1.StreamErrorH\x00\x42\x08\n\x06update\"D\n\x08PacketIn\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\'\n\x08metadata\x18\x02 \x03(\x0b\x32\x15.p4.v1.PacketMetadata\"`\n\nDigestList\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12\x0f\n\x07list_id\x18\x02 \x01(\x04\x12\x1b\n\x04\x64\x61ta\x18\x03 \x03(\x0b\x32\r.p4.v1.P4Data\x12\x11\n\ttimestamp\x18\x04 \x01(\x03\"4\n\x0ePacketMetadata\x12\x13\n\x0bmetadata_id\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x90\x01\n\x17MasterArbitrationUpdate\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x19\n\x04role\x18\x02 \x01(\x0b\x32\x0b.p4.v1.Role\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12\"\n\x06status\x18\x04 \x01(\x0b\x32\x12.google.rpc.Status\"J\n\x04Role\x12\x0e\n\x02id\x18\x01 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04name\x18\x03 \x01(\t\x12$\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"T\n\x17IdleTimeoutNotification\x12&\n\x0btable_entry\x18\x01 \x03(\x0b\x32\x11.p4.v1.TableEntry\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"\xeb\x01\n\x0bStreamError\x12\x16\n\x0e\x63\x61nonical_code\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\r\n\x05space\x18\x03 \x01(\t\x12\x0c\n\x04\x63ode\x18\x04 \x01(\x05\x12+\n\npacket_out\x18\x05 \x01(\x0b\x32\x15.p4.v1.PacketOutErrorH\x00\x12\x34\n\x0f\x64igest_list_ack\x18\x06 \x01(\x0b\x32\x19.p4.v1.DigestListAckErrorH\x00\x12(\n\x05other\x18\x07 \x01(\x0b\x32\x17.p4.v1.StreamOtherErrorH\x00\x42\t\n\x07\x64\x65tails\"6\n\x0ePacketOutError\x12$\n\npacket_out\x18\x01 \x01(\x0b\x32\x10.p4.v1.PacketOut\"C\n\x12\x44igestListAckError\x12-\n\x0f\x64igest_list_ack\x18\x01 \x01(\x0b\x32\x14.p4.v1.DigestListAck\"7\n\x10StreamOtherError\x12#\n\x05other\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Any\"$\n\x07Uint128\x12\x0c\n\x04high\x18\x01 \x01(\x04\x12\x0b\n\x03low\x18\x02 \x01(\x04\"\xeb\x02\n\"SetForwardingPipelineConfigRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x13\n\x07role_id\x18\x02 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04role\x18\x06 \x01(\t\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12@\n\x06\x61\x63tion\x18\x04 \x01(\x0e\x32\x30.p4.v1.SetForwardingPipelineConfigRequest.Action\x12/\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x1f.p4.v1.ForwardingPipelineConfig\"w\n\x06\x41\x63tion\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06VERIFY\x10\x01\x12\x13\n\x0fVERIFY_AND_SAVE\x10\x02\x12\x15\n\x11VERIFY_AND_COMMIT\x10\x03\x12\n\n\x06\x43OMMIT\x10\x04\x12\x18\n\x14RECONCILE_AND_COMMIT\x10\x05\"%\n#SetForwardingPipelineConfigResponse\"\xac\x01\n\x18\x46orwardingPipelineConfig\x12$\n\x06p4info\x18\x01 \x01(\x0b\x32\x14.p4.config.v1.P4Info\x12\x18\n\x10p4_device_config\x18\x02 \x01(\x0c\x12\x36\n\x06\x63ookie\x18\x03 \x01(\x0b\x32&.p4.v1.ForwardingPipelineConfig.Cookie\x1a\x18\n\x06\x43ookie\x12\x0e\n\x06\x63ookie\x18\x01 \x01(\x04\"\xe5\x01\n\"GetForwardingPipelineConfigRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12M\n\rresponse_type\x18\x02 \x01(\x0e\x32\x36.p4.v1.GetForwardingPipelineConfigRequest.ResponseType\"]\n\x0cResponseType\x12\x07\n\x03\x41LL\x10\x00\x12\x0f\n\x0b\x43OOKIE_ONLY\x10\x01\x12\x15\n\x11P4INFO_AND_COOKIE\x10\x02\x12\x1c\n\x18\x44\x45VICE_CONFIG_AND_COOKIE\x10\x03\"V\n#GetForwardingPipelineConfigResponse\x12/\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x1f.p4.v1.ForwardingPipelineConfig\"t\n\x05\x45rror\x12\x16\n\x0e\x63\x61nonical_code\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\r\n\x05space\x18\x03 \x01(\t\x12\x0c\n\x04\x63ode\x18\x04 \x01(\x05\x12%\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x14.google.protobuf.Any\"\x15\n\x13\x43\x61pabilitiesRequest\"5\n\x14\x43\x61pabilitiesResponse\x12\x1d\n\x15p4runtime_api_version\x18\x01 \x01(\t*\x8a\x01\n\x07SdnPort\x12\x14\n\x10SDN_PORT_UNKNOWN\x10\x00\x12\x10\n\x0cSDN_PORT_MIN\x10\x01\x12\x19\n\x0cSDN_PORT_MAX\x10\xff\xfd\xff\xff\xff\xff\xff\xff\xff\x01\x12!\n\x14SDN_PORT_RECIRCULATE\x10\xfa\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x0cSDN_PORT_CPU\x10\xfd\xff\xff\xff\xff\xff\xff\xff\xff\x01\x32\x83\x04\n\tP4Runtime\x12\x34\n\x05Write\x12\x13.p4.v1.WriteRequest\x1a\x14.p4.v1.WriteResponse\"\x00\x12\x33\n\x04Read\x12\x12.p4.v1.ReadRequest\x1a\x13.p4.v1.ReadResponse\"\x00\x30\x01\x12v\n\x1bSetForwardingPipelineConfig\x12).p4.v1.SetForwardingPipelineConfigRequest\x1a*.p4.v1.SetForwardingPipelineConfigResponse\"\x00\x12v\n\x1bGetForwardingPipelineConfig\x12).p4.v1.GetForwardingPipelineConfigRequest\x1a*.p4.v1.GetForwardingPipelineConfigResponse\"\x00\x12P\n\rStreamChannel\x12\x1b.p4.v1.StreamMessageRequest\x1a\x1c.p4.v1.StreamMessageResponse\"\x00(\x01\x30\x01\x12I\n\x0c\x43\x61pabilities\x12\x1a.p4.v1.CapabilitiesRequest\x1a\x1b.p4.v1.CapabilitiesResponse\"\x00\x42)Z$github.com/p4lang/p4runtime/go/p4/v1\xf8\x01\x01\x62\x06proto3' + serialized_pb=b'\n\x15p4/v1/p4runtime.proto\x12\x05p4.v1\x1a\x19google/protobuf/any.proto\x1a\x17google/rpc/status.proto\x1a\x19p4/config/v1/p4info.proto\x1a\x12p4/v1/p4data.proto\"\x8c\x02\n\x0cWriteRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x13\n\x07role_id\x18\x02 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04role\x18\x06 \x01(\t\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12\x1e\n\x07updates\x18\x04 \x03(\x0b\x32\r.p4.v1.Update\x12\x30\n\tatomicity\x18\x05 \x01(\x0e\x32\x1d.p4.v1.WriteRequest.Atomicity\"O\n\tAtomicity\x12\x15\n\x11\x43ONTINUE_ON_ERROR\x10\x00\x12\x15\n\x11ROLLBACK_ON_ERROR\x10\x01\x12\x14\n\x10\x44\x41TAPLANE_ATOMIC\x10\x02\"\x0f\n\rWriteResponse\"O\n\x0bReadRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x0c\n\x04role\x18\x03 \x01(\t\x12\x1f\n\x08\x65ntities\x18\x02 \x03(\x0b\x32\r.p4.v1.Entity\"/\n\x0cReadResponse\x12\x1f\n\x08\x65ntities\x18\x01 \x03(\x0b\x32\r.p4.v1.Entity\"\x86\x01\n\x06Update\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.p4.v1.Update.Type\x12\x1d\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\r.p4.v1.Entity\";\n\x04Type\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06INSERT\x10\x01\x12\n\n\x06MODIFY\x10\x02\x12\n\n\x06\x44\x45LETE\x10\x03\"\xc0\x05\n\x06\x45ntity\x12*\n\x0c\x65xtern_entry\x18\x01 \x01(\x0b\x32\x12.p4.v1.ExternEntryH\x00\x12(\n\x0btable_entry\x18\x02 \x01(\x0b\x32\x11.p4.v1.TableEntryH\x00\x12;\n\x15\x61\x63tion_profile_member\x18\x03 \x01(\x0b\x32\x1a.p4.v1.ActionProfileMemberH\x00\x12\x39\n\x14\x61\x63tion_profile_group\x18\x04 \x01(\x0b\x32\x19.p4.v1.ActionProfileGroupH\x00\x12(\n\x0bmeter_entry\x18\x05 \x01(\x0b\x32\x11.p4.v1.MeterEntryH\x00\x12\x35\n\x12\x64irect_meter_entry\x18\x06 \x01(\x0b\x32\x17.p4.v1.DirectMeterEntryH\x00\x12,\n\rcounter_entry\x18\x07 \x01(\x0b\x32\x13.p4.v1.CounterEntryH\x00\x12\x39\n\x14\x64irect_counter_entry\x18\x08 \x01(\x0b\x32\x19.p4.v1.DirectCounterEntryH\x00\x12N\n\x1fpacket_replication_engine_entry\x18\t \x01(\x0b\x32#.p4.v1.PacketReplicationEngineEntryH\x00\x12/\n\x0fvalue_set_entry\x18\n \x01(\x0b\x32\x14.p4.v1.ValueSetEntryH\x00\x12.\n\x0eregister_entry\x18\x0b \x01(\x0b\x32\x14.p4.v1.RegisterEntryH\x00\x12*\n\x0c\x64igest_entry\x18\x0c \x01(\x0b\x32\x12.p4.v1.DigestEntryH\x00\x12\x37\n\x13generic_table_entry\x18\r \x01(\x0b\x32\x18.p4.v1.GenericTableEntryH\x00\x42\x08\n\x06\x65ntity\"]\n\x0b\x45xternEntry\x12\x16\n\x0e\x65xtern_type_id\x18\x01 \x01(\r\x12\x11\n\textern_id\x18\x02 \x01(\r\x12#\n\x05\x65ntry\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\"\x84\x04\n\nTableEntry\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12 \n\x05match\x18\x02 \x03(\x0b\x32\x11.p4.v1.FieldMatch\x12\"\n\x06\x61\x63tion\x18\x03 \x01(\x0b\x32\x12.p4.v1.TableAction\x12\x10\n\x08priority\x18\x04 \x01(\x05\x12\x1f\n\x13\x63ontroller_metadata\x18\x05 \x01(\x04\x42\x02\x18\x01\x12(\n\x0cmeter_config\x18\x06 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12(\n\x0c\x63ounter_data\x18\x07 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\x33\n\x12meter_counter_data\x18\x0c \x01(\x0b\x32\x17.p4.v1.MeterCounterData\x12\x19\n\x11is_default_action\x18\x08 \x01(\x08\x12\x17\n\x0fidle_timeout_ns\x18\t \x01(\x03\x12:\n\x13time_since_last_hit\x18\n \x01(\x0b\x32\x1d.p4.v1.TableEntry.IdleTimeout\x12\x10\n\x08metadata\x18\x0b \x01(\x0c\x12\x10\n\x08is_const\x18\r \x01(\x08\x12+\n\tresources\x18\x0e \x03(\x0b\x32\x18.p4.v1.GenericTableEntry\x1a!\n\x0bIdleTimeout\x12\x12\n\nelapsed_ns\x18\x01 \x01(\x03\"\xda\x03\n\nFieldMatch\x12\x10\n\x08\x66ield_id\x18\x01 \x01(\r\x12(\n\x05\x65xact\x18\x02 \x01(\x0b\x32\x17.p4.v1.FieldMatch.ExactH\x00\x12,\n\x07ternary\x18\x03 \x01(\x0b\x32\x19.p4.v1.FieldMatch.TernaryH\x00\x12$\n\x03lpm\x18\x04 \x01(\x0b\x32\x15.p4.v1.FieldMatch.LPMH\x00\x12(\n\x05range\x18\x06 \x01(\x0b\x32\x17.p4.v1.FieldMatch.RangeH\x00\x12.\n\x08optional\x18\x07 \x01(\x0b\x32\x1a.p4.v1.FieldMatch.OptionalH\x00\x12%\n\x05other\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x1a\x16\n\x05\x45xact\x12\r\n\x05value\x18\x01 \x01(\x0c\x1a&\n\x07Ternary\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x0c\n\x04mask\x18\x02 \x01(\x0c\x1a(\n\x03LPM\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x12\n\nprefix_len\x18\x02 \x01(\x05\x1a\"\n\x05Range\x12\x0b\n\x03low\x18\x01 \x01(\x0c\x12\x0c\n\x04high\x18\x02 \x01(\x0c\x1a\x19\n\x08Optional\x12\r\n\x05value\x18\x01 \x01(\x0c\x42\x12\n\x10\x66ield_match_type\"\xc1\x01\n\x0bTableAction\x12\x1f\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32\r.p4.v1.ActionH\x00\x12\"\n\x18\x61\x63tion_profile_member_id\x18\x02 \x01(\rH\x00\x12!\n\x17\x61\x63tion_profile_group_id\x18\x03 \x01(\rH\x00\x12\x42\n\x19\x61\x63tion_profile_action_set\x18\x04 \x01(\x0b\x32\x1d.p4.v1.ActionProfileActionSetH\x00\x42\x06\n\x04type\"j\n\x06\x41\x63tion\x12\x11\n\taction_id\x18\x01 \x01(\r\x12#\n\x06params\x18\x04 \x03(\x0b\x32\x13.p4.v1.Action.Param\x1a(\n\x05Param\x12\x10\n\x08param_id\x18\x02 \x01(\r\x12\r\n\x05value\x18\x03 \x01(\x0c\"T\n\x16\x41\x63tionProfileActionSet\x12:\n\x16\x61\x63tion_profile_actions\x18\x01 \x03(\x0b\x32\x1a.p4.v1.ActionProfileAction\"}\n\x13\x41\x63tionProfileAction\x12\x1d\n\x06\x61\x63tion\x18\x01 \x01(\x0b\x32\r.p4.v1.Action\x12\x0e\n\x06weight\x18\x02 \x01(\x05\x12\x13\n\x05watch\x18\x03 \x01(\x05\x42\x02\x18\x01H\x00\x12\x14\n\nwatch_port\x18\x04 \x01(\x0cH\x00\x42\x0c\n\nwatch_kind\"b\n\x13\x41\x63tionProfileMember\x12\x19\n\x11\x61\x63tion_profile_id\x18\x01 \x01(\r\x12\x11\n\tmember_id\x18\x02 \x01(\r\x12\x1d\n\x06\x61\x63tion\x18\x03 \x01(\x0b\x32\r.p4.v1.Action\"\xec\x01\n\x12\x41\x63tionProfileGroup\x12\x19\n\x11\x61\x63tion_profile_id\x18\x01 \x01(\r\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12\x31\n\x07members\x18\x03 \x03(\x0b\x32 .p4.v1.ActionProfileGroup.Member\x12\x10\n\x08max_size\x18\x04 \x01(\x05\x1a\x64\n\x06Member\x12\x11\n\tmember_id\x18\x01 \x01(\r\x12\x0e\n\x06weight\x18\x02 \x01(\x05\x12\x13\n\x05watch\x18\x03 \x01(\x05\x42\x02\x18\x01H\x00\x12\x14\n\nwatch_port\x18\x04 \x01(\x0cH\x00\x42\x0c\n\nwatch_kind\"\x16\n\x05Index\x12\r\n\x05index\x18\x01 \x01(\x03\"\x8e\x01\n\nMeterEntry\x12\x10\n\x08meter_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12\"\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12-\n\x0c\x63ounter_data\x18\x04 \x01(\x0b\x32\x17.p4.v1.MeterCounterData\"\x8d\x01\n\x10\x44irectMeterEntry\x12&\n\x0btable_entry\x18\x01 \x01(\x0b\x32\x11.p4.v1.TableEntry\x12\"\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x12.p4.v1.MeterConfig\x12-\n\x0c\x63ounter_data\x18\x03 \x01(\x0b\x32\x17.p4.v1.MeterCounterData\"G\n\x0bMeterConfig\x12\x0b\n\x03\x63ir\x18\x01 \x01(\x03\x12\x0e\n\x06\x63\x62urst\x18\x02 \x01(\x03\x12\x0b\n\x03pir\x18\x03 \x01(\x03\x12\x0e\n\x06pburst\x18\x04 \x01(\x03\"a\n\x0c\x43ounterEntry\x12\x12\n\ncounter_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12 \n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x12.p4.v1.CounterData\"^\n\x12\x44irectCounterEntry\x12&\n\x0btable_entry\x18\x01 \x01(\x0b\x32\x11.p4.v1.TableEntry\x12 \n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x12.p4.v1.CounterData\"7\n\x0b\x43ounterData\x12\x12\n\nbyte_count\x18\x01 \x01(\x03\x12\x14\n\x0cpacket_count\x18\x02 \x01(\x03\"z\n\x10MeterCounterData\x12!\n\x05green\x18\x01 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\"\n\x06yellow\x18\x02 \x01(\x0b\x32\x12.p4.v1.CounterData\x12\x1f\n\x03red\x18\x03 \x01(\x0b\x32\x12.p4.v1.CounterData\"\x9c\x01\n\x1cPacketReplicationEngineEntry\x12;\n\x15multicast_group_entry\x18\x01 \x01(\x0b\x32\x1a.p4.v1.MulticastGroupEntryH\x00\x12\x37\n\x13\x63lone_session_entry\x18\x02 \x01(\x0b\x32\x18.p4.v1.CloneSessionEntryH\x00\x42\x06\n\x04type\"S\n\x07Replica\x12\x19\n\x0b\x65gress_port\x18\x01 \x01(\rB\x02\x18\x01H\x00\x12\x0e\n\x04port\x18\x03 \x01(\x0cH\x00\x12\x10\n\x08instance\x18\x02 \x01(\rB\x0b\n\tport_kind\"e\n\x13MulticastGroupEntry\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\r\x12 \n\x08replicas\x18\x02 \x03(\x0b\x32\x0e.p4.v1.Replica\x12\x10\n\x08metadata\x18\x03 \x01(\x0c\"\x80\x01\n\x11\x43loneSessionEntry\x12\x12\n\nsession_id\x18\x01 \x01(\r\x12 \n\x08replicas\x18\x02 \x03(\x0b\x32\x0e.p4.v1.Replica\x12\x18\n\x10\x63lass_of_service\x18\x03 \x01(\r\x12\x1b\n\x13packet_length_bytes\x18\x04 \x01(\x05\"2\n\x0eValueSetMember\x12 \n\x05match\x18\x01 \x03(\x0b\x32\x11.p4.v1.FieldMatch\"M\n\rValueSetEntry\x12\x14\n\x0cvalue_set_id\x18\x01 \x01(\r\x12&\n\x07members\x18\x02 \x03(\x0b\x32\x15.p4.v1.ValueSetMember\"^\n\rRegisterEntry\x12\x13\n\x0bregister_id\x18\x01 \x01(\r\x12\x1b\n\x05index\x18\x02 \x01(\x0b\x32\x0c.p4.v1.Index\x12\x1b\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\r.p4.v1.P4Data\"\x9c\x01\n\x0b\x44igestEntry\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12)\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x19.p4.v1.DigestEntry.Config\x1aO\n\x06\x43onfig\x12\x16\n\x0emax_timeout_ns\x18\x01 \x01(\x03\x12\x15\n\rmax_list_size\x18\x02 \x01(\x05\x12\x16\n\x0e\x61\x63k_timeout_ns\x18\x03 \x01(\x03\"\xce\x01\n\x14StreamMessageRequest\x12\x35\n\x0b\x61rbitration\x18\x01 \x01(\x0b\x32\x1e.p4.v1.MasterArbitrationUpdateH\x00\x12\"\n\x06packet\x18\x02 \x01(\x0b\x32\x10.p4.v1.PacketOutH\x00\x12*\n\ndigest_ack\x18\x03 \x01(\x0b\x32\x14.p4.v1.DigestListAckH\x00\x12%\n\x05other\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x42\x08\n\x06update\"E\n\tPacketOut\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\'\n\x08metadata\x18\x02 \x03(\x0b\x32\x15.p4.v1.PacketMetadata\"3\n\rDigestListAck\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12\x0f\n\x07list_id\x18\x02 \x01(\x04\"\xb1\x02\n\x15StreamMessageResponse\x12\x35\n\x0b\x61rbitration\x18\x01 \x01(\x0b\x32\x1e.p4.v1.MasterArbitrationUpdateH\x00\x12!\n\x06packet\x18\x02 \x01(\x0b\x32\x0f.p4.v1.PacketInH\x00\x12#\n\x06\x64igest\x18\x03 \x01(\x0b\x32\x11.p4.v1.DigestListH\x00\x12\x43\n\x19idle_timeout_notification\x18\x04 \x01(\x0b\x32\x1e.p4.v1.IdleTimeoutNotificationH\x00\x12%\n\x05other\x18\x05 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x12#\n\x05\x65rror\x18\x06 \x01(\x0b\x32\x12.p4.v1.StreamErrorH\x00\x42\x08\n\x06update\"D\n\x08PacketIn\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\'\n\x08metadata\x18\x02 \x03(\x0b\x32\x15.p4.v1.PacketMetadata\"`\n\nDigestList\x12\x11\n\tdigest_id\x18\x01 \x01(\r\x12\x0f\n\x07list_id\x18\x02 \x01(\x04\x12\x1b\n\x04\x64\x61ta\x18\x03 \x03(\x0b\x32\r.p4.v1.P4Data\x12\x11\n\ttimestamp\x18\x04 \x01(\x03\"4\n\x0ePacketMetadata\x12\x13\n\x0bmetadata_id\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x90\x01\n\x17MasterArbitrationUpdate\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x19\n\x04role\x18\x02 \x01(\x0b\x32\x0b.p4.v1.Role\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12\"\n\x06status\x18\x04 \x01(\x0b\x32\x12.google.rpc.Status\"J\n\x04Role\x12\x0e\n\x02id\x18\x01 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04name\x18\x03 \x01(\t\x12$\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"T\n\x17IdleTimeoutNotification\x12&\n\x0btable_entry\x18\x01 \x03(\x0b\x32\x11.p4.v1.TableEntry\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"\xeb\x01\n\x0bStreamError\x12\x16\n\x0e\x63\x61nonical_code\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\r\n\x05space\x18\x03 \x01(\t\x12\x0c\n\x04\x63ode\x18\x04 \x01(\x05\x12+\n\npacket_out\x18\x05 \x01(\x0b\x32\x15.p4.v1.PacketOutErrorH\x00\x12\x34\n\x0f\x64igest_list_ack\x18\x06 \x01(\x0b\x32\x19.p4.v1.DigestListAckErrorH\x00\x12(\n\x05other\x18\x07 \x01(\x0b\x32\x17.p4.v1.StreamOtherErrorH\x00\x42\t\n\x07\x64\x65tails\"6\n\x0ePacketOutError\x12$\n\npacket_out\x18\x01 \x01(\x0b\x32\x10.p4.v1.PacketOut\"C\n\x12\x44igestListAckError\x12-\n\x0f\x64igest_list_ack\x18\x01 \x01(\x0b\x32\x14.p4.v1.DigestListAck\"7\n\x10StreamOtherError\x12#\n\x05other\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Any\"$\n\x07Uint128\x12\x0c\n\x04high\x18\x01 \x01(\x04\x12\x0b\n\x03low\x18\x02 \x01(\x04\"\xeb\x02\n\"SetForwardingPipelineConfigRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12\x13\n\x07role_id\x18\x02 \x01(\x04\x42\x02\x18\x01\x12\x0c\n\x04role\x18\x06 \x01(\t\x12#\n\x0b\x65lection_id\x18\x03 \x01(\x0b\x32\x0e.p4.v1.Uint128\x12@\n\x06\x61\x63tion\x18\x04 \x01(\x0e\x32\x30.p4.v1.SetForwardingPipelineConfigRequest.Action\x12/\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x1f.p4.v1.ForwardingPipelineConfig\"w\n\x06\x41\x63tion\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\n\n\x06VERIFY\x10\x01\x12\x13\n\x0fVERIFY_AND_SAVE\x10\x02\x12\x15\n\x11VERIFY_AND_COMMIT\x10\x03\x12\n\n\x06\x43OMMIT\x10\x04\x12\x18\n\x14RECONCILE_AND_COMMIT\x10\x05\"%\n#SetForwardingPipelineConfigResponse\"\xac\x01\n\x18\x46orwardingPipelineConfig\x12$\n\x06p4info\x18\x01 \x01(\x0b\x32\x14.p4.config.v1.P4Info\x12\x18\n\x10p4_device_config\x18\x02 \x01(\x0c\x12\x36\n\x06\x63ookie\x18\x03 \x01(\x0b\x32&.p4.v1.ForwardingPipelineConfig.Cookie\x1a\x18\n\x06\x43ookie\x12\x0e\n\x06\x63ookie\x18\x01 \x01(\x04\"\xe5\x01\n\"GetForwardingPipelineConfigRequest\x12\x11\n\tdevice_id\x18\x01 \x01(\x04\x12M\n\rresponse_type\x18\x02 \x01(\x0e\x32\x36.p4.v1.GetForwardingPipelineConfigRequest.ResponseType\"]\n\x0cResponseType\x12\x07\n\x03\x41LL\x10\x00\x12\x0f\n\x0b\x43OOKIE_ONLY\x10\x01\x12\x15\n\x11P4INFO_AND_COOKIE\x10\x02\x12\x1c\n\x18\x44\x45VICE_CONFIG_AND_COOKIE\x10\x03\"V\n#GetForwardingPipelineConfigResponse\x12/\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x1f.p4.v1.ForwardingPipelineConfig\"t\n\x05\x45rror\x12\x16\n\x0e\x63\x61nonical_code\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\r\n\x05space\x18\x03 \x01(\t\x12\x0c\n\x04\x63ode\x18\x04 \x01(\x05\x12%\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x14.google.protobuf.Any\"\x15\n\x13\x43\x61pabilitiesRequest\"5\n\x14\x43\x61pabilitiesResponse\x12\x1d\n\x15p4runtime_api_version\x18\x01 \x01(\t\"\xac\x04\n\x11GenericFieldMatch\x12\x10\n\x08\x66ield_id\x18\x01 \x01(\r\x12/\n\x05\x65xact\x18\x02 \x01(\x0b\x32\x1e.p4.v1.GenericFieldMatch.ExactH\x00\x12\x33\n\x07ternary\x18\x03 \x01(\x0b\x32 .p4.v1.GenericFieldMatch.TernaryH\x00\x12+\n\x03lpm\x18\x04 \x01(\x0b\x32\x1c.p4.v1.GenericFieldMatch.LPMH\x00\x12/\n\x05range\x18\x06 \x01(\x0b\x32\x1e.p4.v1.GenericFieldMatch.RangeH\x00\x12\x35\n\x08optional\x18\x07 \x01(\x0b\x32!.p4.v1.GenericFieldMatch.OptionalH\x00\x12%\n\x05other\x18\x64 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x1a*\n\x05\x45xact\x12!\n\x05value\x18\x01 \x01(\x0b\x32\x12.p4.v1.GenericData\x1a&\n\x07Ternary\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x0c\n\x04mask\x18\x02 \x01(\x0c\x1a(\n\x03LPM\x12\r\n\x05value\x18\x01 \x01(\x0c\x12\x12\n\nprefix_len\x18\x02 \x01(\x05\x1a\"\n\x05Range\x12\x0b\n\x03low\x18\x01 \x01(\x0c\x12\x0c\n\x04high\x18\x02 \x01(\x0c\x1a-\n\x08Optional\x12!\n\x05value\x18\x01 \x01(\x0b\x32\x12.p4.v1.GenericDataB\x12\n\x10\x66ield_match_type\"\xbd\x01\n\x11GenericTableEntry\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\'\n\x05match\x18\x02 \x03(\x0b\x32\x18.p4.v1.GenericFieldMatch\x12/\n\x10table_data_union\x18\x03 \x01(\x0b\x32\x15.p4.v1.TableDataUnion\x12\x10\n\x08priority\x18\x04 \x01(\x05\x12\x18\n\x10is_default_entry\x18\x05 \x01(\x08\x12\x10\n\x08metadata\x18\x06 \x01(\x0c\"\x8d\x01\n\x0eTableDataUnion\x12\x10\n\x08union_id\x18\x01 \x01(\r\x12+\n\x06params\x18\x04 \x03(\x0b\x32\x1b.p4.v1.TableDataUnion.Param\x1a<\n\x05Param\x12\x10\n\x08param_id\x18\x02 \x01(\r\x12!\n\x05value\x18\x03 \x01(\x0b\x32\x12.p4.v1.GenericData*\x8a\x01\n\x07SdnPort\x12\x14\n\x10SDN_PORT_UNKNOWN\x10\x00\x12\x10\n\x0cSDN_PORT_MIN\x10\x01\x12\x19\n\x0cSDN_PORT_MAX\x10\xff\xfd\xff\xff\xff\xff\xff\xff\xff\x01\x12!\n\x14SDN_PORT_RECIRCULATE\x10\xfa\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x0cSDN_PORT_CPU\x10\xfd\xff\xff\xff\xff\xff\xff\xff\xff\x01\x32\x83\x04\n\tP4Runtime\x12\x34\n\x05Write\x12\x13.p4.v1.WriteRequest\x1a\x14.p4.v1.WriteResponse\"\x00\x12\x33\n\x04Read\x12\x12.p4.v1.ReadRequest\x1a\x13.p4.v1.ReadResponse\"\x00\x30\x01\x12v\n\x1bSetForwardingPipelineConfig\x12).p4.v1.SetForwardingPipelineConfigRequest\x1a*.p4.v1.SetForwardingPipelineConfigResponse\"\x00\x12v\n\x1bGetForwardingPipelineConfig\x12).p4.v1.GetForwardingPipelineConfigRequest\x1a*.p4.v1.GetForwardingPipelineConfigResponse\"\x00\x12P\n\rStreamChannel\x12\x1b.p4.v1.StreamMessageRequest\x1a\x1c.p4.v1.StreamMessageResponse\"\x00(\x01\x30\x01\x12I\n\x0c\x43\x61pabilities\x12\x1a.p4.v1.CapabilitiesRequest\x1a\x1b.p4.v1.CapabilitiesResponse\"\x00\x42)Z$github.com/p4lang/p4runtime/go/p4/v1\xf8\x01\x01\x62\x06proto3' , dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,google_dot_rpc_dot_status__pb2.DESCRIPTOR,p4_dot_config_dot_v1_dot_p4info__pb2.DESCRIPTOR,p4_dot_v1_dot_p4data__pb2.DESCRIPTOR,]) @@ -63,8 +63,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=7591, - serialized_end=7729, + serialized_start=8588, + serialized_end=8726, ) _sym_db.RegisterEnumDescriptor(_SDNPORT) @@ -181,8 +181,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=6739, - serialized_end=6858, + serialized_start=6841, + serialized_end=6960, ) _sym_db.RegisterEnumDescriptor(_SETFORWARDINGPIPELINECONFIGREQUEST_ACTION) @@ -216,8 +216,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=7211, - serialized_end=7304, + serialized_start=7313, + serialized_end=7406, ) _sym_db.RegisterEnumDescriptor(_GETFORWARDINGPIPELINECONFIGREQUEST_RESPONSETYPE) @@ -525,6 +525,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='generic_table_entry', full_name='p4.v1.Entity.generic_table_entry', index=12, + number=13, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -543,7 +550,7 @@ fields=[]), ], serialized_start=687, - serialized_end=1334, + serialized_end=1391, ) @@ -588,8 +595,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1336, - serialized_end=1429, + serialized_start=1393, + serialized_end=1486, ) @@ -620,8 +627,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1870, - serialized_end=1903, + serialized_start=1972, + serialized_end=2005, ) _TABLEENTRY = _descriptor.Descriptor( @@ -723,6 +730,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='resources', full_name='p4.v1.TableEntry.resources', index=13, + number=14, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -735,8 +749,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1432, - serialized_end=1903, + serialized_start=1489, + serialized_end=2005, ) @@ -767,8 +781,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2193, - serialized_end=2215, + serialized_start=2295, + serialized_end=2317, ) _FIELDMATCH_TERNARY = _descriptor.Descriptor( @@ -805,8 +819,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2217, - serialized_end=2255, + serialized_start=2319, + serialized_end=2357, ) _FIELDMATCH_LPM = _descriptor.Descriptor( @@ -843,8 +857,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2257, - serialized_end=2297, + serialized_start=2359, + serialized_end=2399, ) _FIELDMATCH_RANGE = _descriptor.Descriptor( @@ -881,8 +895,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2299, - serialized_end=2333, + serialized_start=2401, + serialized_end=2435, ) _FIELDMATCH_OPTIONAL = _descriptor.Descriptor( @@ -912,8 +926,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2335, - serialized_end=2360, + serialized_start=2437, + serialized_end=2462, ) _FIELDMATCH = _descriptor.Descriptor( @@ -990,8 +1004,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=1906, - serialized_end=2380, + serialized_start=2008, + serialized_end=2482, ) @@ -1048,8 +1062,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=2383, - serialized_end=2576, + serialized_start=2485, + serialized_end=2678, ) @@ -1087,8 +1101,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2644, - serialized_end=2684, + serialized_start=2746, + serialized_end=2786, ) _ACTION = _descriptor.Descriptor( @@ -1125,8 +1139,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2578, - serialized_end=2684, + serialized_start=2680, + serialized_end=2786, ) @@ -1157,8 +1171,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2686, - serialized_end=2770, + serialized_start=2788, + serialized_end=2872, ) @@ -1215,8 +1229,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=2772, - serialized_end=2897, + serialized_start=2874, + serialized_end=2999, ) @@ -1261,8 +1275,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2899, - serialized_end=2997, + serialized_start=3001, + serialized_end=3099, ) @@ -1319,8 +1333,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=3136, - serialized_end=3236, + serialized_start=3238, + serialized_end=3338, ) _ACTIONPROFILEGROUP = _descriptor.Descriptor( @@ -1371,8 +1385,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3000, - serialized_end=3236, + serialized_start=3102, + serialized_end=3338, ) @@ -1403,8 +1417,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3238, - serialized_end=3260, + serialized_start=3340, + serialized_end=3362, ) @@ -1456,8 +1470,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3263, - serialized_end=3405, + serialized_start=3365, + serialized_end=3507, ) @@ -1502,8 +1516,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3408, - serialized_end=3549, + serialized_start=3510, + serialized_end=3651, ) @@ -1555,8 +1569,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3551, - serialized_end=3622, + serialized_start=3653, + serialized_end=3724, ) @@ -1601,8 +1615,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3624, - serialized_end=3721, + serialized_start=3726, + serialized_end=3823, ) @@ -1640,8 +1654,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3723, - serialized_end=3817, + serialized_start=3825, + serialized_end=3919, ) @@ -1679,8 +1693,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3819, - serialized_end=3874, + serialized_start=3921, + serialized_end=3976, ) @@ -1725,8 +1739,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3876, - serialized_end=3998, + serialized_start=3978, + serialized_end=4100, ) @@ -1769,8 +1783,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=4001, - serialized_end=4157, + serialized_start=4103, + serialized_end=4259, ) @@ -1820,8 +1834,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=4159, - serialized_end=4242, + serialized_start=4261, + serialized_end=4344, ) @@ -1866,8 +1880,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4244, - serialized_end=4345, + serialized_start=4346, + serialized_end=4447, ) @@ -1919,8 +1933,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4348, - serialized_end=4476, + serialized_start=4450, + serialized_end=4578, ) @@ -1951,8 +1965,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4478, - serialized_end=4528, + serialized_start=4580, + serialized_end=4630, ) @@ -1990,8 +2004,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4530, - serialized_end=4607, + serialized_start=4632, + serialized_end=4709, ) @@ -2036,8 +2050,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4609, - serialized_end=4703, + serialized_start=4711, + serialized_end=4805, ) @@ -2082,8 +2096,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4783, - serialized_end=4862, + serialized_start=4885, + serialized_end=4964, ) _DIGESTENTRY = _descriptor.Descriptor( @@ -2120,8 +2134,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4706, - serialized_end=4862, + serialized_start=4808, + serialized_end=4964, ) @@ -2178,8 +2192,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=4865, - serialized_end=5071, + serialized_start=4967, + serialized_end=5173, ) @@ -2217,8 +2231,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5073, - serialized_end=5142, + serialized_start=5175, + serialized_end=5244, ) @@ -2256,8 +2270,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5144, - serialized_end=5195, + serialized_start=5246, + serialized_end=5297, ) @@ -2328,8 +2342,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=5198, - serialized_end=5503, + serialized_start=5300, + serialized_end=5605, ) @@ -2367,8 +2381,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5505, - serialized_end=5573, + serialized_start=5607, + serialized_end=5675, ) @@ -2420,8 +2434,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5575, - serialized_end=5671, + serialized_start=5677, + serialized_end=5773, ) @@ -2459,8 +2473,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5673, - serialized_end=5725, + serialized_start=5775, + serialized_end=5827, ) @@ -2512,8 +2526,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5728, - serialized_end=5872, + serialized_start=5830, + serialized_end=5974, ) @@ -2558,8 +2572,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5874, - serialized_end=5948, + serialized_start=5976, + serialized_end=6050, ) @@ -2597,8 +2611,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5950, - serialized_end=6034, + serialized_start=6052, + serialized_end=6136, ) @@ -2676,8 +2690,8 @@ create_key=_descriptor._internal_create_key, fields=[]), ], - serialized_start=6037, - serialized_end=6272, + serialized_start=6139, + serialized_end=6374, ) @@ -2708,8 +2722,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6274, - serialized_end=6328, + serialized_start=6376, + serialized_end=6430, ) @@ -2740,8 +2754,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6330, - serialized_end=6397, + serialized_start=6432, + serialized_end=6499, ) @@ -2772,8 +2786,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6399, - serialized_end=6454, + serialized_start=6501, + serialized_end=6556, ) @@ -2811,8 +2825,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6456, - serialized_end=6492, + serialized_start=6558, + serialized_end=6594, ) @@ -2879,8 +2893,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6495, - serialized_end=6858, + serialized_start=6597, + serialized_end=6960, ) @@ -2904,8 +2918,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6860, - serialized_end=6897, + serialized_start=6962, + serialized_end=6999, ) @@ -2936,8 +2950,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7048, - serialized_end=7072, + serialized_start=7150, + serialized_end=7174, ) _FORWARDINGPIPELINECONFIG = _descriptor.Descriptor( @@ -2981,8 +2995,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6900, - serialized_end=7072, + serialized_start=7002, + serialized_end=7174, ) @@ -3021,8 +3035,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7075, - serialized_end=7304, + serialized_start=7177, + serialized_end=7406, ) @@ -3053,8 +3067,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7306, - serialized_end=7392, + serialized_start=7408, + serialized_end=7494, ) @@ -3113,8 +3127,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7394, - serialized_end=7510, + serialized_start=7496, + serialized_end=7612, ) @@ -3138,8 +3152,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7512, - serialized_end=7533, + serialized_start=7614, + serialized_end=7635, ) @@ -3170,8 +3184,407 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7535, - serialized_end=7588, + serialized_start=7637, + serialized_end=7690, +) + + +_GENERICFIELDMATCH_EXACT = _descriptor.Descriptor( + name='Exact', + full_name='p4.v1.GenericFieldMatch.Exact', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.GenericFieldMatch.Exact.value', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8022, + serialized_end=8064, +) + +_GENERICFIELDMATCH_TERNARY = _descriptor.Descriptor( + name='Ternary', + full_name='p4.v1.GenericFieldMatch.Ternary', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.GenericFieldMatch.Ternary.value', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mask', full_name='p4.v1.GenericFieldMatch.Ternary.mask', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2319, + serialized_end=2357, +) + +_GENERICFIELDMATCH_LPM = _descriptor.Descriptor( + name='LPM', + full_name='p4.v1.GenericFieldMatch.LPM', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.GenericFieldMatch.LPM.value', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='prefix_len', full_name='p4.v1.GenericFieldMatch.LPM.prefix_len', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2359, + serialized_end=2399, +) + +_GENERICFIELDMATCH_RANGE = _descriptor.Descriptor( + name='Range', + full_name='p4.v1.GenericFieldMatch.Range', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='low', full_name='p4.v1.GenericFieldMatch.Range.low', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='high', full_name='p4.v1.GenericFieldMatch.Range.high', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2401, + serialized_end=2435, +) + +_GENERICFIELDMATCH_OPTIONAL = _descriptor.Descriptor( + name='Optional', + full_name='p4.v1.GenericFieldMatch.Optional', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.GenericFieldMatch.Optional.value', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8184, + serialized_end=8229, +) + +_GENERICFIELDMATCH = _descriptor.Descriptor( + name='GenericFieldMatch', + full_name='p4.v1.GenericFieldMatch', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='field_id', full_name='p4.v1.GenericFieldMatch.field_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='exact', full_name='p4.v1.GenericFieldMatch.exact', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='ternary', full_name='p4.v1.GenericFieldMatch.ternary', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='lpm', full_name='p4.v1.GenericFieldMatch.lpm', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='range', full_name='p4.v1.GenericFieldMatch.range', index=4, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='optional', full_name='p4.v1.GenericFieldMatch.optional', index=5, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='other', full_name='p4.v1.GenericFieldMatch.other', index=6, + number=100, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_GENERICFIELDMATCH_EXACT, _GENERICFIELDMATCH_TERNARY, _GENERICFIELDMATCH_LPM, _GENERICFIELDMATCH_RANGE, _GENERICFIELDMATCH_OPTIONAL, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='field_match_type', full_name='p4.v1.GenericFieldMatch.field_match_type', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=7693, + serialized_end=8249, +) + + +_GENERICTABLEENTRY = _descriptor.Descriptor( + name='GenericTableEntry', + full_name='p4.v1.GenericTableEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='table_id', full_name='p4.v1.GenericTableEntry.table_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='match', full_name='p4.v1.GenericTableEntry.match', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='table_data_union', full_name='p4.v1.GenericTableEntry.table_data_union', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='priority', full_name='p4.v1.GenericTableEntry.priority', index=3, + number=4, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='is_default_entry', full_name='p4.v1.GenericTableEntry.is_default_entry', index=4, + number=5, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='metadata', full_name='p4.v1.GenericTableEntry.metadata', index=5, + number=6, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8252, + serialized_end=8441, +) + + +_TABLEDATAUNION_PARAM = _descriptor.Descriptor( + name='Param', + full_name='p4.v1.TableDataUnion.Param', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='param_id', full_name='p4.v1.TableDataUnion.Param.param_id', index=0, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='p4.v1.TableDataUnion.Param.value', index=1, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8525, + serialized_end=8585, +) + +_TABLEDATAUNION = _descriptor.Descriptor( + name='TableDataUnion', + full_name='p4.v1.TableDataUnion', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='union_id', full_name='p4.v1.TableDataUnion.union_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='params', full_name='p4.v1.TableDataUnion.params', index=1, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_TABLEDATAUNION_PARAM, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8444, + serialized_end=8585, ) _WRITEREQUEST.fields_by_name['election_id'].message_type = _UINT128 @@ -3195,6 +3608,7 @@ _ENTITY.fields_by_name['value_set_entry'].message_type = _VALUESETENTRY _ENTITY.fields_by_name['register_entry'].message_type = _REGISTERENTRY _ENTITY.fields_by_name['digest_entry'].message_type = _DIGESTENTRY +_ENTITY.fields_by_name['generic_table_entry'].message_type = _GENERICTABLEENTRY _ENTITY.oneofs_by_name['entity'].fields.append( _ENTITY.fields_by_name['extern_entry']) _ENTITY.fields_by_name['extern_entry'].containing_oneof = _ENTITY.oneofs_by_name['entity'] @@ -3231,6 +3645,9 @@ _ENTITY.oneofs_by_name['entity'].fields.append( _ENTITY.fields_by_name['digest_entry']) _ENTITY.fields_by_name['digest_entry'].containing_oneof = _ENTITY.oneofs_by_name['entity'] +_ENTITY.oneofs_by_name['entity'].fields.append( + _ENTITY.fields_by_name['generic_table_entry']) +_ENTITY.fields_by_name['generic_table_entry'].containing_oneof = _ENTITY.oneofs_by_name['entity'] _EXTERNENTRY.fields_by_name['entry'].message_type = google_dot_protobuf_dot_any__pb2._ANY _TABLEENTRY_IDLETIMEOUT.containing_type = _TABLEENTRY _TABLEENTRY.fields_by_name['match'].message_type = _FIELDMATCH @@ -3239,6 +3656,7 @@ _TABLEENTRY.fields_by_name['counter_data'].message_type = _COUNTERDATA _TABLEENTRY.fields_by_name['meter_counter_data'].message_type = _METERCOUNTERDATA _TABLEENTRY.fields_by_name['time_since_last_hit'].message_type = _TABLEENTRY_IDLETIMEOUT +_TABLEENTRY.fields_by_name['resources'].message_type = _GENERICTABLEENTRY _FIELDMATCH_EXACT.containing_type = _FIELDMATCH _FIELDMATCH_TERNARY.containing_type = _FIELDMATCH _FIELDMATCH_LPM.containing_type = _FIELDMATCH @@ -3410,6 +3828,42 @@ _GETFORWARDINGPIPELINECONFIGREQUEST_RESPONSETYPE.containing_type = _GETFORWARDINGPIPELINECONFIGREQUEST _GETFORWARDINGPIPELINECONFIGRESPONSE.fields_by_name['config'].message_type = _FORWARDINGPIPELINECONFIG _ERROR.fields_by_name['details'].message_type = google_dot_protobuf_dot_any__pb2._ANY +_GENERICFIELDMATCH_EXACT.fields_by_name['value'].message_type = p4_dot_v1_dot_p4data__pb2._GENERICDATA +_GENERICFIELDMATCH_EXACT.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH_TERNARY.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH_LPM.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH_RANGE.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH_OPTIONAL.fields_by_name['value'].message_type = p4_dot_v1_dot_p4data__pb2._GENERICDATA +_GENERICFIELDMATCH_OPTIONAL.containing_type = _GENERICFIELDMATCH +_GENERICFIELDMATCH.fields_by_name['exact'].message_type = _GENERICFIELDMATCH_EXACT +_GENERICFIELDMATCH.fields_by_name['ternary'].message_type = _GENERICFIELDMATCH_TERNARY +_GENERICFIELDMATCH.fields_by_name['lpm'].message_type = _GENERICFIELDMATCH_LPM +_GENERICFIELDMATCH.fields_by_name['range'].message_type = _GENERICFIELDMATCH_RANGE +_GENERICFIELDMATCH.fields_by_name['optional'].message_type = _GENERICFIELDMATCH_OPTIONAL +_GENERICFIELDMATCH.fields_by_name['other'].message_type = google_dot_protobuf_dot_any__pb2._ANY +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['exact']) +_GENERICFIELDMATCH.fields_by_name['exact'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['ternary']) +_GENERICFIELDMATCH.fields_by_name['ternary'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['lpm']) +_GENERICFIELDMATCH.fields_by_name['lpm'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['range']) +_GENERICFIELDMATCH.fields_by_name['range'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['optional']) +_GENERICFIELDMATCH.fields_by_name['optional'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICFIELDMATCH.oneofs_by_name['field_match_type'].fields.append( + _GENERICFIELDMATCH.fields_by_name['other']) +_GENERICFIELDMATCH.fields_by_name['other'].containing_oneof = _GENERICFIELDMATCH.oneofs_by_name['field_match_type'] +_GENERICTABLEENTRY.fields_by_name['match'].message_type = _GENERICFIELDMATCH +_GENERICTABLEENTRY.fields_by_name['table_data_union'].message_type = _TABLEDATAUNION +_TABLEDATAUNION_PARAM.fields_by_name['value'].message_type = p4_dot_v1_dot_p4data__pb2._GENERICDATA +_TABLEDATAUNION_PARAM.containing_type = _TABLEDATAUNION +_TABLEDATAUNION.fields_by_name['params'].message_type = _TABLEDATAUNION_PARAM DESCRIPTOR.message_types_by_name['WriteRequest'] = _WRITEREQUEST DESCRIPTOR.message_types_by_name['WriteResponse'] = _WRITERESPONSE DESCRIPTOR.message_types_by_name['ReadRequest'] = _READREQUEST @@ -3464,6 +3918,9 @@ DESCRIPTOR.message_types_by_name['Error'] = _ERROR DESCRIPTOR.message_types_by_name['CapabilitiesRequest'] = _CAPABILITIESREQUEST DESCRIPTOR.message_types_by_name['CapabilitiesResponse'] = _CAPABILITIESRESPONSE +DESCRIPTOR.message_types_by_name['GenericFieldMatch'] = _GENERICFIELDMATCH +DESCRIPTOR.message_types_by_name['GenericTableEntry'] = _GENERICTABLEENTRY +DESCRIPTOR.message_types_by_name['TableDataUnion'] = _TABLEDATAUNION DESCRIPTOR.enum_types_by_name['SdnPort'] = _SDNPORT _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -3925,6 +4382,75 @@ }) _sym_db.RegisterMessage(CapabilitiesResponse) +GenericFieldMatch = _reflection.GeneratedProtocolMessageType('GenericFieldMatch', (_message.Message,), { + + 'Exact' : _reflection.GeneratedProtocolMessageType('Exact', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_EXACT, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.Exact) + }) + , + + 'Ternary' : _reflection.GeneratedProtocolMessageType('Ternary', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_TERNARY, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.Ternary) + }) + , + + 'LPM' : _reflection.GeneratedProtocolMessageType('LPM', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_LPM, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.LPM) + }) + , + + 'Range' : _reflection.GeneratedProtocolMessageType('Range', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_RANGE, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.Range) + }) + , + + 'Optional' : _reflection.GeneratedProtocolMessageType('Optional', (_message.Message,), { + 'DESCRIPTOR' : _GENERICFIELDMATCH_OPTIONAL, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch.Optional) + }) + , + 'DESCRIPTOR' : _GENERICFIELDMATCH, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericFieldMatch) + }) +_sym_db.RegisterMessage(GenericFieldMatch) +_sym_db.RegisterMessage(GenericFieldMatch.Exact) +_sym_db.RegisterMessage(GenericFieldMatch.Ternary) +_sym_db.RegisterMessage(GenericFieldMatch.LPM) +_sym_db.RegisterMessage(GenericFieldMatch.Range) +_sym_db.RegisterMessage(GenericFieldMatch.Optional) + +GenericTableEntry = _reflection.GeneratedProtocolMessageType('GenericTableEntry', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTABLEENTRY, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.GenericTableEntry) + }) +_sym_db.RegisterMessage(GenericTableEntry) + +TableDataUnion = _reflection.GeneratedProtocolMessageType('TableDataUnion', (_message.Message,), { + + 'Param' : _reflection.GeneratedProtocolMessageType('Param', (_message.Message,), { + 'DESCRIPTOR' : _TABLEDATAUNION_PARAM, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.TableDataUnion.Param) + }) + , + 'DESCRIPTOR' : _TABLEDATAUNION, + '__module__' : 'p4.v1.p4runtime_pb2' + # @@protoc_insertion_point(class_scope:p4.v1.TableDataUnion) + }) +_sym_db.RegisterMessage(TableDataUnion) +_sym_db.RegisterMessage(TableDataUnion.Param) + DESCRIPTOR._options = None _WRITEREQUEST.fields_by_name['role_id']._options = None @@ -3942,8 +4468,8 @@ index=0, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=7732, - serialized_end=8247, + serialized_start=8729, + serialized_end=9244, methods=[ _descriptor.MethodDescriptor( name='Write',

iG_Q96xqNu<;&b-B_tO4}L)QGVc1tY`l1YQv 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 RAJAgd_8;Ass%m=q{{YtDNW}mE literal 0 HcmV?d00001 diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index b651f8ba..61b461d7 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -315,19 +315,17 @@ message GenericDataTypeSpec { GenericFloatType float = 2; GenericBoolType bool = 3; GenericNamedType struct = 4; - GenericNamedType bag = 5; - GenericNamedType list = 6; - GenericNamedType set = 7; - GenericNamedType ordered_set = 8; - GenericNamedType string = 9; - GenericNamedType enum = 10; - GenericNamedType serializable_enum = 11; - GenericNamedType new_type = 12; + GenericNamedType list = 5; + GenericNamedType unordered_set = 6; + GenericNamedType string = 7; + GenericNamedType enum = 8; + GenericNamedType serializable_enum = 9; + GenericNamedType new_type = 10; // P4 data type spec can help achieve parity with types being used // in P4 externs. For example, if Register is using a type in P4 // Data type spec, then it will make it easier to map here when using // GenericTables - P4DataTypeSpec p4_type = 13; + P4DataTypeSpec p4_type = 11; } } @@ -379,19 +377,6 @@ message GenericStructTypeSpec { repeated StructuredAnnotation structured_annotations = 6; } -// If a field is of type bag, then container_type is in p4info -// and value == "bag" -// unordered and duplicates_allowed -message GenericBagTypeSpec { - GenericDataTypeSpec type_spec = 1;// The element_type - repeated string annotations = 2; - // Optional. If present, the location of `annotations[i]` is given by - // `annotation_locations[i]`. - int32 min_size = 4; // 0 if not present - int32 max_size = 5; // no max size defined if not present - repeated SourceLocation annotation_locations = 6; - repeated StructuredAnnotation structured_annotations = 7; -} // If a field is of type list, then container_type is in p4info // and value == "list" // ordered and duplicates allowed. @@ -406,22 +391,9 @@ message GenericListTypeSpec { repeated SourceLocation annotation_locations = 6; repeated StructuredAnnotation structured_annotations = 7; } -// If a field is of type set, then container_type is in p4info -// and value == "set" -// Unordered and duplicates not allowed -message GenericSetTypeSpec { - GenericDataTypeSpec type_spec = 1;// The element_type - repeated string annotations = 2; - // Optional. If present, the location of `annotations[i]` is given by - // `annotation_locations[i]`. - int32 min_size = 4; // 0 if not present - int32 max_size = 5; // no max size defined if not present - repeated SourceLocation annotation_locations = 6; - repeated StructuredAnnotation structured_annotations = 7; -} // If a field is of type "unordered_set", then container_type is in p4info // value == "unordered_set" -// ordered and duplicates not allowed +// Unordered and duplicates not allowed message GenericUnorderedSetTypeSpec { GenericDataTypeSpec type_spec = 1;// The element_type repeated string annotations = 2; @@ -432,6 +404,17 @@ message GenericUnorderedSetTypeSpec { repeated SourceLocation annotation_locations = 6; repeated StructuredAnnotation structured_annotations = 7; } + +message GenericStringSpec { + string name = 1; + int32 min_size = 2; // 0 if not present + int32 max_size = 3; // no max size defined if not present + repeated string annotations = 4; + // Optional. If present, the location of `annotations[i]` is given by + // `annotation_locations[i]`. + repeated SourceLocation annotation_locations = 5; + repeated StructuredAnnotation structured_annotations = 6; +} message GenericEnumTypeSpec { message Member { string name = 1; @@ -499,4 +482,4 @@ message GenericNewTypeSpec { repeated StructuredAnnotation structured_annotations = 4; } -// End of P4 type specs -------------------------------------------------------- +// End of Generic type specs -------------------------------------------------------- From 74c1661f8a2130a68a4f95381d2fc98b484fe958 Mon Sep 17 00:00:00 2001 From: Antonin Bas Date: Thu, 6 Jul 2023 11:51:54 -0700 Subject: [PATCH 17/42] Update Go dependencies (#438) --- codegen/Dockerfile | 19 ++++--- codegen/update.sh | 2 +- go.mod | 19 ++++--- go.sum | 99 +++++++---------------------------- go/p4/config/v1/p4info.pb.go | 4 +- go/p4/config/v1/p4types.pb.go | 8 ++- go/p4/v1/p4data.pb.go | 3 +- go/p4/v1/p4runtime.pb.go | 83 ++++++++++++++++------------- go/p4/v1/p4runtime_grpc.pb.go | 77 ++++++++++++++++++--------- 9 files changed, 156 insertions(+), 158 deletions(-) diff --git a/codegen/Dockerfile b/codegen/Dockerfile index 24bd2be3..46e940d2 100644 --- a/codegen/Dockerfile +++ b/codegen/Dockerfile @@ -8,16 +8,23 @@ ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y --no-install-recommends software-properties-common git curl -ARG GO_VERSION=1.17.6 +ARG GO_VERSION=1.20.5 -RUN curl -o go.tar.gz https://dl.google.com/go/go$GO_VERSION.linux-amd64.tar.gz && \ - tar -C /usr/local -xzf go.tar.gz && \ - rm go.tar.gz +RUN set -eux; \ + dpkgArch="$(dpkg --print-architecture)"; \ + case "${dpkgArch##*-}" in \ + amd64) arch='amd64' ;; \ + arm64) arch='arm64' ;; \ + *) arch=''; echo >&2; echo >&2 "unsupported architecture '$dpkgArch'"; echo >&2 ; exit 1 ;; \ + esac; \ + curl -L -o go.tar.gz https://dl.google.com/go/go${GO_VERSION}.linux-${arch}.tar.gz; \ + tar -C /usr/local -xzf go.tar.gz; \ + rm -f go.tar.gz ENV PATH="${PATH}:/usr/local/go/bin:/root/go/bin" -RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26 -RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1 +RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31 +RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3 COPY . /p4runtime/ WORKDIR /p4runtime/ diff --git a/codegen/update.sh b/codegen/update.sh index 2bbfe440..aa8b1772 100755 --- a/codegen/update.sh +++ b/codegen/update.sh @@ -31,7 +31,7 @@ docker run --rm -u "$(id -u):$(id -g)" \ -e "GOPATH=/tmp/gopath" \ -v "$(pwd):/p4runtime" \ -w /p4runtime \ - golang:1.17 bash -c "go mod tidy" + golang:1.20 bash -c "go mod tidy" rm -rf "$tmpdir" diff --git a/go.mod b/go.mod index 33692258..95d27459 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,16 @@ module github.com/p4lang/p4runtime -go 1.14 +go 1.20 require ( - github.com/golang/protobuf v1.4.3 // indirect - github.com/google/go-cmp v0.5.1 // indirect - golang.org/x/sys v0.1.0 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect - google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 - google.golang.org/grpc v1.28.1 - google.golang.org/protobuf v1.25.0 + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 + google.golang.org/grpc v1.56.1 + google.golang.org/protobuf v1.31.0 +) + +require ( + github.com/golang/protobuf v1.5.3 // indirect + golang.org/x/net v0.9.0 // indirect + golang.org/x/sys v0.7.0 // indirect + golang.org/x/text v0.9.0 // indirect ) diff --git a/go.sum b/go.sum index 7b4aa843..cbe5ad09 100644 --- a/go.sum +++ b/go.sum @@ -1,81 +1,20 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.1 h1:C1QC6KzgSiLyBabDi87BbjaGreoRgGUF5nOyvfrAZ1k= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/grpc v1.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ= +google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= diff --git a/go/p4/config/v1/p4info.pb.go b/go/p4/config/v1/p4info.pb.go index b488f258..e8aedad1 100644 --- a/go/p4/config/v1/p4info.pb.go +++ b/go/p4/config/v1/p4info.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 +// protoc-gen-go v1.31.0 // protoc v3.18.1 // source: p4/config/v1/p4info.proto @@ -1025,6 +1025,7 @@ type MatchField struct { AnnotationLocations []*SourceLocation `protobuf:"bytes,10,rep,name=annotation_locations,json=annotationLocations,proto3" json:"annotation_locations,omitempty"` Bitwidth int32 `protobuf:"varint,4,opt,name=bitwidth,proto3" json:"bitwidth,omitempty"` // Types that are assignable to Match: + // // *MatchField_MatchType_ // *MatchField_OtherMatchType Match isMatchField_Match `protobuf_oneof:"match"` @@ -1454,6 +1455,7 @@ type ActionProfile struct { // specifies the semantics of `size` and `max_group_size` above // // Types that are assignable to SelectorSizeSemantics: + // // *ActionProfile_SumOfWeights_ // *ActionProfile_SumOfMembers_ SelectorSizeSemantics isActionProfile_SelectorSizeSemantics `protobuf_oneof:"selector_size_semantics"` diff --git a/go/p4/config/v1/p4types.pb.go b/go/p4/config/v1/p4types.pb.go index a128d9f5..fff41698 100644 --- a/go/p4/config/v1/p4types.pb.go +++ b/go/p4/config/v1/p4types.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 +// protoc-gen-go v1.31.0 // protoc v3.18.1 // source: p4/config/v1/p4types.proto @@ -143,6 +143,7 @@ type P4DataTypeSpec struct { unknownFields protoimpl.UnknownFields // Types that are assignable to TypeSpec: + // // *P4DataTypeSpec_Bitstring // *P4DataTypeSpec_Bool // *P4DataTypeSpec_Tuple @@ -488,6 +489,7 @@ type P4BitstringLikeTypeSpec struct { unknownFields protoimpl.UnknownFields // Types that are assignable to TypeSpec: + // // *P4BitstringLikeTypeSpec_Bit // *P4BitstringLikeTypeSpec_Int // *P4BitstringLikeTypeSpec_Varbit @@ -1231,6 +1233,7 @@ type Expression struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Value: + // // *Expression_StringValue // *Expression_Int64Value // *Expression_BoolValue @@ -1373,6 +1376,7 @@ type StructuredAnnotation struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Types that are assignable to Body: + // // *StructuredAnnotation_ExpressionList // *StructuredAnnotation_KvPairList Body isStructuredAnnotation_Body `protobuf_oneof:"body"` @@ -1751,6 +1755,7 @@ type P4NewTypeTranslation struct { // `sdn_bitwidth`, or as a string. // // Types that are assignable to SdnType: + // // *P4NewTypeTranslation_SdnBitwidth // *P4NewTypeTranslation_SdnString_ SdnType isP4NewTypeTranslation_SdnType `protobuf_oneof:"sdn_type"` @@ -1839,6 +1844,7 @@ type P4NewTypeSpec struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Representation: + // // *P4NewTypeSpec_OriginalType // *P4NewTypeSpec_TranslatedType Representation isP4NewTypeSpec_Representation `protobuf_oneof:"representation"` diff --git a/go/p4/v1/p4data.pb.go b/go/p4/v1/p4data.pb.go index 08f11c60..f287fb09 100644 --- a/go/p4/v1/p4data.pb.go +++ b/go/p4/v1/p4data.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 +// protoc-gen-go v1.31.0 // protoc v3.18.1 // source: p4/v1/p4data.proto @@ -40,6 +40,7 @@ type P4Data struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Data: + // // *P4Data_Bitstring // *P4Data_Varbit // *P4Data_Bool diff --git a/go/p4/v1/p4runtime.pb.go b/go/p4/v1/p4runtime.pb.go index 53cb539e..9dfadf7e 100644 --- a/go/p4/v1/p4runtime.pb.go +++ b/go/p4/v1/p4runtime.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 +// protoc-gen-go v1.31.0 // protoc v3.18.1 // source: p4/v1/p4runtime.proto @@ -39,7 +39,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ // Reserved controller-specified SDN port numbers for reference. type SdnPort int32 @@ -363,14 +363,14 @@ func (GetForwardingPipelineConfigRequest_ResponseType) EnumDescriptor() ([]byte, return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{49, 0} } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ type WriteRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields DeviceId uint64 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. RoleId uint64 `protobuf:"varint,2,opt,name=role_id,json=roleId,proto3" json:"role_id,omitempty"` Role string `protobuf:"bytes,6,opt,name=role,proto3" json:"role,omitempty"` ElectionId *Uint128 `protobuf:"bytes,3,opt,name=election_id,json=electionId,proto3" json:"election_id,omitempty"` @@ -420,7 +420,7 @@ func (x *WriteRequest) GetDeviceId() uint64 { return 0 } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. func (x *WriteRequest) GetRoleId() uint64 { if x != nil { return x.RoleId @@ -666,6 +666,7 @@ type Entity struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Entity: + // // *Entity_ExternEntry // *Entity_TableEntry // *Entity_ActionProfileMember @@ -965,7 +966,7 @@ type TableEntry struct { // a Read RPC. This is deprecated in favor of the more flexible metadata // field. // - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. ControllerMetadata uint64 `protobuf:"varint,5,opt,name=controller_metadata,json=controllerMetadata,proto3" json:"controller_metadata,omitempty"` // meter_config, counter_data and meter_counter_data are convenience fields // that enable the controller to configure the direct resources associated @@ -983,6 +984,7 @@ type TableEntry struct { // meter (if any) to its default configuration, while leaving counter_data // or meter_counter_data unset means that the counter (if any) will not be // updated. + // // Table read: // - If the table does not contain a direct resource, then the corresponding // field will not be set in the read table entry. @@ -1069,7 +1071,7 @@ func (x *TableEntry) GetPriority() int32 { return 0 } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. func (x *TableEntry) GetControllerMetadata() uint64 { if x != nil { return x.ControllerMetadata @@ -1134,6 +1136,7 @@ type FieldMatch struct { FieldId uint32 `protobuf:"varint,1,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"` // Types that are assignable to FieldMatchType: + // // *FieldMatch_Exact_ // *FieldMatch_Ternary_ // *FieldMatch_Lpm @@ -1280,6 +1283,7 @@ type TableAction struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Type: + // // *TableAction_Action // *TableAction_ActionProfileMemberId // *TableAction_ActionProfileGroupId @@ -1492,6 +1496,7 @@ type ActionProfileAction struct { Action *Action `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"` Weight int32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` // Types that are assignable to WatchKind: + // // *ActionProfileAction_Watch // *ActionProfileAction_WatchPort WatchKind isActionProfileAction_WatchKind `protobuf_oneof:"watch_kind"` @@ -1550,7 +1555,7 @@ func (m *ActionProfileAction) GetWatchKind() isActionProfileAction_WatchKind { return nil } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. func (x *ActionProfileAction) GetWatch() int32 { if x, ok := x.GetWatchKind().(*ActionProfileAction_Watch); ok { return x.Watch @@ -1572,7 +1577,7 @@ type isActionProfileAction_WatchKind interface { type ActionProfileAction_Watch struct { // Using int32 as ports is deprecated, use watch_port instead. // - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. Watch int32 `protobuf:"varint,3,opt,name=watch,proto3,oneof"` } @@ -1584,7 +1589,7 @@ func (*ActionProfileAction_Watch) isActionProfileAction_WatchKind() {} func (*ActionProfileAction_WatchPort) isActionProfileAction_WatchKind() {} -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ type ActionProfileMember struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1648,7 +1653,7 @@ func (x *ActionProfileMember) GetAction() *Action { return nil } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ type ActionProfileGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1780,7 +1785,7 @@ func (x *Index) GetIndex() int64 { return 0 } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ // For WriteRequest, Update.Type must be MODIFY. // For ReadRequest, the scope is defined as follows: // - All meter cells for all meters if meter_id = 0 (default). @@ -1856,14 +1861,14 @@ func (x *MeterEntry) GetCounterData() *MeterCounterData { return nil } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ // For WriteRequest, Update.Type must be MODIFY. INSERT and DELETE on direct // meters is not allowed and will return an error. The insertion/deletion // should happen as part of INSERT/DELETE on the associated table-entry. // For ReadRequest, the scope is defined as follows: -// - All meter cells for all tables if table_entry.table_id = 0. -// - All meter cells of a table if table_entry.table_id is present and -// table_entry.match is empty. +// - All meter cells for all tables if table_entry.table_id = 0. +// - All meter cells of a table if table_entry.table_id is present and +// table_entry.match is empty. type DirectMeterEntry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2010,7 +2015,7 @@ func (x *MeterConfig) GetPburst() int64 { return 0 } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ // For WriteRequest, Update.Type must be MODIFY. // For ReadRequest, the scope is defined as follows: // - All counter cells for all counters if counter_id = 0 (default). @@ -2078,14 +2083,14 @@ func (x *CounterEntry) GetData() *CounterData { return nil } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ // For WriteRequest, Update.Type must be MODIFY. INSERT and DELETE on direct // counters is not allowed and will return an error. The insertion/deletion // should happen as part of INSERT/DELETE on the associated table-entry. // For ReadRequest, the scope is defined as follows: -// - All counter cells for all tables if table_entry.table_id = 0. -// - All counter cells of a table if table_entry.table_id is present and -// table_entry.match is empty. +// - All counter cells for all tables if table_entry.table_id = 0. +// - All counter cells of a table if table_entry.table_id is present and +// table_entry.match is empty. type DirectCounterEntry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2261,7 +2266,7 @@ func (x *MeterCounterData) GetRed() *CounterData { return nil } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ // Only one instance of a Packet Replication Engine (PRE) is expected in the // P4 pipeline. Hence, no instance id is needed to access the PRE. type PacketReplicationEngineEntry struct { @@ -2270,6 +2275,7 @@ type PacketReplicationEngineEntry struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Type: + // // *PacketReplicationEngineEntry_MulticastGroupEntry // *PacketReplicationEngineEntry_CloneSessionEntry Type isPacketReplicationEngineEntry_Type `protobuf_oneof:"type"` @@ -2351,6 +2357,7 @@ type Replica struct { unknownFields protoimpl.UnknownFields // Types that are assignable to PortKind: + // // *Replica_EgressPort // *Replica_Port PortKind isReplica_PortKind `protobuf_oneof:"port_kind"` @@ -2396,7 +2403,7 @@ func (m *Replica) GetPortKind() isReplica_PortKind { return nil } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. func (x *Replica) GetEgressPort() uint32 { if x, ok := x.GetPortKind().(*Replica_EgressPort); ok { return x.EgressPort @@ -2425,7 +2432,7 @@ type isReplica_PortKind interface { type Replica_EgressPort struct { // Using uint32 as ports is deprecated, use port field instead. // - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. EgressPort uint32 `protobuf:"varint,1,opt,name=egress_port,json=egressPort,proto3,oneof"` } @@ -2631,7 +2638,7 @@ func (x *ValueSetMember) GetMatch() []*FieldMatch { return nil } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ // For writing and reading matches in a parser value set. A state transition // on an empty value set will never be taken. The number of matches must be at // most the size of the value set as specified by the size argument of the @@ -2701,7 +2708,7 @@ func (x *ValueSetEntry) GetMembers() []*ValueSetMember { return nil } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ type RegisterEntry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2765,7 +2772,7 @@ func (x *RegisterEntry) GetData() *P4Data { return nil } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ // Used to configure the digest extern only, not to stream digests or acks type DigestEntry struct { state protoimpl.MessageState @@ -2822,13 +2829,14 @@ func (x *DigestEntry) GetConfig() *DigestEntry_Config { return nil } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ type StreamMessageRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Update: + // // *StreamMessageRequest_Arbitration // *StreamMessageRequest_Packet // *StreamMessageRequest_DigestAck @@ -3055,6 +3063,7 @@ type StreamMessageResponse struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Update: + // // *StreamMessageResponse_Arbitration // *StreamMessageResponse_Packet // *StreamMessageResponse_Digest @@ -3470,7 +3479,7 @@ type Role struct { // Uniquely identifies this role. // - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` // Describes the role configuration, i.e. what operations, P4 entities, @@ -3513,7 +3522,7 @@ func (*Role) Descriptor() ([]byte, []int) { return file_p4_v1_p4runtime_proto_rawDescGZIP(), []int{39} } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. func (x *Role) GetId() uint64 { if x != nil { return x.Id @@ -3620,6 +3629,7 @@ type StreamError struct { // default value. // // Types that are assignable to Details: + // // *StreamError_PacketOut // *StreamError_DigestListAck // *StreamError_Other @@ -3937,14 +3947,14 @@ func (x *Uint128) GetLow() uint64 { return 0 } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ type SetForwardingPipelineConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields DeviceId uint64 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. RoleId uint64 `protobuf:"varint,2,opt,name=role_id,json=roleId,proto3" json:"role_id,omitempty"` Role string `protobuf:"bytes,6,opt,name=role,proto3" json:"role,omitempty"` ElectionId *Uint128 `protobuf:"bytes,3,opt,name=election_id,json=electionId,proto3" json:"election_id,omitempty"` @@ -3991,7 +4001,7 @@ func (x *SetForwardingPipelineConfigRequest) GetDeviceId() uint64 { return 0 } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. func (x *SetForwardingPipelineConfigRequest) GetRoleId() uint64 { if x != nil { return x.RoleId @@ -4320,7 +4330,7 @@ func (x *Error) GetDetails() *anypb.Any { return nil } -//------------------------------------------------------------------------------ +// ------------------------------------------------------------------------------ type CapabilitiesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4785,6 +4795,7 @@ type ActionProfileGroup_Member struct { MemberId uint32 `protobuf:"varint,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` Weight int32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` // Types that are assignable to WatchKind: + // // *ActionProfileGroup_Member_Watch // *ActionProfileGroup_Member_WatchPort WatchKind isActionProfileGroup_Member_WatchKind `protobuf_oneof:"watch_kind"` @@ -4843,7 +4854,7 @@ func (m *ActionProfileGroup_Member) GetWatchKind() isActionProfileGroup_Member_W return nil } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. func (x *ActionProfileGroup_Member) GetWatch() int32 { if x, ok := x.GetWatchKind().(*ActionProfileGroup_Member_Watch); ok { return x.Watch @@ -4865,7 +4876,7 @@ type isActionProfileGroup_Member_WatchKind interface { type ActionProfileGroup_Member_Watch struct { // Using int32 as ports is deprecated, use watch_port instead. // - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in p4/v1/p4runtime.proto. Watch int32 `protobuf:"varint,3,opt,name=watch,proto3,oneof"` } diff --git a/go/p4/v1/p4runtime_grpc.pb.go b/go/p4/v1/p4runtime_grpc.pb.go index 4985b2d7..dfecbe32 100644 --- a/go/p4/v1/p4runtime_grpc.pb.go +++ b/go/p4/v1/p4runtime_grpc.pb.go @@ -1,4 +1,24 @@ +// Copyright (c) 2016, Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.18.1 +// source: p4/v1/p4runtime.proto + +// This package and its contents are a work-in-progress. package v1 @@ -14,6 +34,15 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + P4Runtime_Write_FullMethodName = "/p4.v1.P4Runtime/Write" + P4Runtime_Read_FullMethodName = "/p4.v1.P4Runtime/Read" + P4Runtime_SetForwardingPipelineConfig_FullMethodName = "/p4.v1.P4Runtime/SetForwardingPipelineConfig" + P4Runtime_GetForwardingPipelineConfig_FullMethodName = "/p4.v1.P4Runtime/GetForwardingPipelineConfig" + P4Runtime_StreamChannel_FullMethodName = "/p4.v1.P4Runtime/StreamChannel" + P4Runtime_Capabilities_FullMethodName = "/p4.v1.P4Runtime/Capabilities" +) + // P4RuntimeClient is the client API for P4Runtime service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. @@ -29,13 +58,13 @@ type P4RuntimeClient interface { // Represents the bidirectional stream between the controller and the // switch (initiated by the controller), and is managed for the following // purposes: - // - connection initiation through client arbitration - // - indicating switch session liveness: the session is live when switch - // sends a positive client arbitration update to the controller, and is - // considered dead when either the stream breaks or the switch sends a - // negative update for client arbitration - // - the controller sending/receiving packets to/from the switch - // - streaming of notifications from the switch + // - connection initiation through client arbitration + // - indicating switch session liveness: the session is live when switch + // sends a positive client arbitration update to the controller, and is + // considered dead when either the stream breaks or the switch sends a + // negative update for client arbitration + // - the controller sending/receiving packets to/from the switch + // - streaming of notifications from the switch StreamChannel(ctx context.Context, opts ...grpc.CallOption) (P4Runtime_StreamChannelClient, error) Capabilities(ctx context.Context, in *CapabilitiesRequest, opts ...grpc.CallOption) (*CapabilitiesResponse, error) } @@ -50,7 +79,7 @@ func NewP4RuntimeClient(cc grpc.ClientConnInterface) P4RuntimeClient { func (c *p4RuntimeClient) Write(ctx context.Context, in *WriteRequest, opts ...grpc.CallOption) (*WriteResponse, error) { out := new(WriteResponse) - err := c.cc.Invoke(ctx, "/p4.v1.P4Runtime/Write", in, out, opts...) + err := c.cc.Invoke(ctx, P4Runtime_Write_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -58,7 +87,7 @@ func (c *p4RuntimeClient) Write(ctx context.Context, in *WriteRequest, opts ...g } func (c *p4RuntimeClient) Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (P4Runtime_ReadClient, error) { - stream, err := c.cc.NewStream(ctx, &P4Runtime_ServiceDesc.Streams[0], "/p4.v1.P4Runtime/Read", opts...) + stream, err := c.cc.NewStream(ctx, &P4Runtime_ServiceDesc.Streams[0], P4Runtime_Read_FullMethodName, opts...) if err != nil { return nil, err } @@ -91,7 +120,7 @@ func (x *p4RuntimeReadClient) Recv() (*ReadResponse, error) { func (c *p4RuntimeClient) SetForwardingPipelineConfig(ctx context.Context, in *SetForwardingPipelineConfigRequest, opts ...grpc.CallOption) (*SetForwardingPipelineConfigResponse, error) { out := new(SetForwardingPipelineConfigResponse) - err := c.cc.Invoke(ctx, "/p4.v1.P4Runtime/SetForwardingPipelineConfig", in, out, opts...) + err := c.cc.Invoke(ctx, P4Runtime_SetForwardingPipelineConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -100,7 +129,7 @@ func (c *p4RuntimeClient) SetForwardingPipelineConfig(ctx context.Context, in *S func (c *p4RuntimeClient) GetForwardingPipelineConfig(ctx context.Context, in *GetForwardingPipelineConfigRequest, opts ...grpc.CallOption) (*GetForwardingPipelineConfigResponse, error) { out := new(GetForwardingPipelineConfigResponse) - err := c.cc.Invoke(ctx, "/p4.v1.P4Runtime/GetForwardingPipelineConfig", in, out, opts...) + err := c.cc.Invoke(ctx, P4Runtime_GetForwardingPipelineConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -108,7 +137,7 @@ func (c *p4RuntimeClient) GetForwardingPipelineConfig(ctx context.Context, in *G } func (c *p4RuntimeClient) StreamChannel(ctx context.Context, opts ...grpc.CallOption) (P4Runtime_StreamChannelClient, error) { - stream, err := c.cc.NewStream(ctx, &P4Runtime_ServiceDesc.Streams[1], "/p4.v1.P4Runtime/StreamChannel", opts...) + stream, err := c.cc.NewStream(ctx, &P4Runtime_ServiceDesc.Streams[1], P4Runtime_StreamChannel_FullMethodName, opts...) if err != nil { return nil, err } @@ -140,7 +169,7 @@ func (x *p4RuntimeStreamChannelClient) Recv() (*StreamMessageResponse, error) { func (c *p4RuntimeClient) Capabilities(ctx context.Context, in *CapabilitiesRequest, opts ...grpc.CallOption) (*CapabilitiesResponse, error) { out := new(CapabilitiesResponse) - err := c.cc.Invoke(ctx, "/p4.v1.P4Runtime/Capabilities", in, out, opts...) + err := c.cc.Invoke(ctx, P4Runtime_Capabilities_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -162,13 +191,13 @@ type P4RuntimeServer interface { // Represents the bidirectional stream between the controller and the // switch (initiated by the controller), and is managed for the following // purposes: - // - connection initiation through client arbitration - // - indicating switch session liveness: the session is live when switch - // sends a positive client arbitration update to the controller, and is - // considered dead when either the stream breaks or the switch sends a - // negative update for client arbitration - // - the controller sending/receiving packets to/from the switch - // - streaming of notifications from the switch + // - connection initiation through client arbitration + // - indicating switch session liveness: the session is live when switch + // sends a positive client arbitration update to the controller, and is + // considered dead when either the stream breaks or the switch sends a + // negative update for client arbitration + // - the controller sending/receiving packets to/from the switch + // - streaming of notifications from the switch StreamChannel(P4Runtime_StreamChannelServer) error Capabilities(context.Context, *CapabilitiesRequest) (*CapabilitiesResponse, error) mustEmbedUnimplementedP4RuntimeServer() @@ -219,7 +248,7 @@ func _P4Runtime_Write_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/p4.v1.P4Runtime/Write", + FullMethod: P4Runtime_Write_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(P4RuntimeServer).Write(ctx, req.(*WriteRequest)) @@ -258,7 +287,7 @@ func _P4Runtime_SetForwardingPipelineConfig_Handler(srv interface{}, ctx context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/p4.v1.P4Runtime/SetForwardingPipelineConfig", + FullMethod: P4Runtime_SetForwardingPipelineConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(P4RuntimeServer).SetForwardingPipelineConfig(ctx, req.(*SetForwardingPipelineConfigRequest)) @@ -276,7 +305,7 @@ func _P4Runtime_GetForwardingPipelineConfig_Handler(srv interface{}, ctx context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/p4.v1.P4Runtime/GetForwardingPipelineConfig", + FullMethod: P4Runtime_GetForwardingPipelineConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(P4RuntimeServer).GetForwardingPipelineConfig(ctx, req.(*GetForwardingPipelineConfigRequest)) @@ -320,7 +349,7 @@ func _P4Runtime_Capabilities_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/p4.v1.P4Runtime/Capabilities", + FullMethod: P4Runtime_Capabilities_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(P4RuntimeServer).Capabilities(ctx, req.(*CapabilitiesRequest)) From d76a3640a223f47a43dc34e5565b72e43796ba57 Mon Sep 17 00:00:00 2001 From: Chris Sommers <31145757+chrispsommers@users.noreply.github.com> Date: Thu, 6 Jul 2023 12:08:17 -0700 Subject: [PATCH 18/42] Fixes https://github.com/p4lang/p4runtime/issues/439 (#440) Change CI workflow to skip publishing if PR spawned by dependabot --- .github/workflows/any-branch-uploads.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/any-branch-uploads.yml b/.github/workflows/any-branch-uploads.yml index 802e3868..9b1483cf 100644 --- a/.github/workflows/any-branch-uploads.yml +++ b/.github/workflows/any-branch-uploads.yml @@ -16,6 +16,7 @@ jobs: docker run -v `pwd`/docs/v1:/usr/src/p4-spec p4lang/p4rt-madoko:latest make ls docs/v1/build - name: Upload spec to S3 if needed + if: ${{ github.actor != 'dependabot[bot]' }} uses: jakejarvis/s3-sync-action@v0.5.1 with: args: --acl public-read --follow-symlinks --delete From be046f3995b7b2b67e9839f71e5aad2e3d35527a Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 7 Jul 2023 09:32:24 -0700 Subject: [PATCH 19/42] * Adding categories and properties in p4info * Adding example changes for above in GenericTables.md * Add default values to p4info. --- proto/p4/GenericTable.md | 17 ++++ proto/p4/config/v1/p4info.proto | 7 +- proto/p4/config/v1/p4types.proto | 25 +++--- proto/p4/v1/p4data.proto | 52 ++++++------ proto/p4/v1/p4runtime.proto | 132 ++++++++++++++++--------------- 5 files changed, 133 insertions(+), 100 deletions(-) diff --git a/proto/p4/GenericTable.md b/proto/p4/GenericTable.md index d6318c0e..c14cb4af 100644 --- a/proto/p4/GenericTable.md +++ b/proto/p4/GenericTable.md @@ -8,6 +8,23 @@ defining the data fields has been presented. Only 1 of them is required. generic_tables { generic_table_type_id : 145 generic_table_type_name : "MulticastGroup" + generic_table_category : "Regular-In" + generic_table_properties : { + read-only : False + } + generic_table_properties : { + modify-only : False + } + generic_table_properties : { + reset-only : False + } + generic_table_properties : { + volatile : False + } + generic_table_properties : { + indexed : True + } + preamble { id: 45332650 name: "MulticastGroup" diff --git a/proto/p4/config/v1/p4info.proto b/proto/p4/config/v1/p4info.proto index 160f3e99..283b72c8 100644 --- a/proto/p4/config/v1/p4info.proto +++ b/proto/p4/config/v1/p4info.proto @@ -417,6 +417,8 @@ message Digest { P4DataTypeSpec type_spec = 2; } +////// Begin : GenericTables messages + message GenericMatchField { uint32 id = 1; string name = 2; @@ -483,7 +485,9 @@ message Union { message GenericTable { uint32 generic_table_type_id = 1; string generic_table_type_name = 2; - repeated GenericTableInstance instances = 3; + string generic_table_category = 3; + repeated string generic_table_properties = 4 + repeated GenericTableInstance instances = 5; } message GenericTableInstance { @@ -500,3 +504,4 @@ message GenericTableInstance { google.protobuf.Any other_properties = 100; } +////// End: GenericTables diff --git a/proto/p4/config/v1/p4types.proto b/proto/p4/config/v1/p4types.proto index 61b461d7..41bc65f0 100644 --- a/proto/p4/config/v1/p4types.proto +++ b/proto/p4/config/v1/p4types.proto @@ -292,7 +292,7 @@ message P4NewTypeSpec { repeated StructuredAnnotation structured_annotations = 4; } -//////// Generic Data types +////// Begin : GenericTables messages // Instead of duplicating the type spec for these // every time the type is used, we include the type spec once in this @@ -355,14 +355,17 @@ message GenericBitstringLikeTypeSpec { message GenericBitTypeSpec { int32 bitwidth = 1; + int32 default_value = 2; } message GenericIntTypeSpec { int32 bitwidth = 1; + int32 default_value = 2; } message GenericVarbitTypeSpec { int32 max_bitwidth = 1; + int32 default_value = 2; } message GenericStructTypeSpec { message Member { @@ -418,36 +421,38 @@ message GenericStringSpec { message GenericEnumTypeSpec { message Member { string name = 1; - repeated string annotations = 2; + int32 default_value = 2; + repeated string annotations = 3; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. repeated SourceLocation annotation_locations = 4; - repeated StructuredAnnotation structured_annotations = 3; + repeated StructuredAnnotation structured_annotations = 5; } repeated Member members = 1; repeated string annotations = 2; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - repeated SourceLocation annotation_locations = 4; - repeated StructuredAnnotation structured_annotations = 3; + repeated SourceLocation annotation_locations = 3; + repeated StructuredAnnotation structured_annotations = 4; } message GenericSerializableEnumTypeSpec { message Member { string name = 1; bytes value = 2; - repeated string annotations = 3; + int32 default_value = 3; + repeated string annotations = 4; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. repeated SourceLocation annotation_locations = 5; - repeated StructuredAnnotation structured_annotations = 4; + repeated StructuredAnnotation structured_annotations = 6; } GenericBitTypeSpec underlying_type = 1; repeated Member members = 2; repeated string annotations = 3; // Optional. If present, the location of `annotations[i]` is given by // `annotation_locations[i]`. - repeated SourceLocation annotation_locations = 5; - repeated StructuredAnnotation structured_annotations = 4; + repeated SourceLocation annotation_locations = 4; + repeated StructuredAnnotation structured_annotations = 5; } // User defined types @@ -482,4 +487,4 @@ message GenericNewTypeSpec { repeated StructuredAnnotation structured_annotations = 4; } -// End of Generic type specs -------------------------------------------------------- +////// End: GenericTables diff --git a/proto/p4/v1/p4data.proto b/proto/p4/v1/p4data.proto index 300b8f87..b37de199 100644 --- a/proto/p4/v1/p4data.proto +++ b/proto/p4/v1/p4data.proto @@ -34,31 +34,6 @@ message P4Data { bytes enum_value = 12; // serializable enums only } } -message GenericData { - oneof data { - bytes bitstring = 1; - GenericVarbit varbitstring = 2; - float float = 3; - bool bool = 4; - GenericStructLike generic_struct = 5; // one struct - GenericList generic_list = 6; // list of bytes/floats/bool/structs/strings/enums/enum_values. - string string = 7; // control plane arbitrary length string - string enum = 8; // safe (non-serializable) enums only - bytes enum_value = 9; // serializable enums only - } -} -message GenericStructLike { - repeated GenericData members = 1; -} -message GenericList { - repeated GenericData members = 1; -} - -message GenericVarbit { - bytes bitstring = 1; - int32 bitwidth = 2; // dynamic bitwidth of the field -} - message P4Varbit { bytes bitstring = 1; int32 bitwidth = 2; // dynamic bitwidth of the field @@ -93,3 +68,30 @@ message P4HeaderUnionStack { // size of the header union stack, which is specified in P4Info. repeated P4HeaderUnion entries = 1; } +////// Begin : GenericTables messages +message GenericData { + oneof data { + bytes bitstring = 1; + GenericVarbit varbitstring = 2; + float float = 3; + bool bool = 4; + GenericStructLike generic_struct = 5; // one struct + GenericList generic_list = 6; // list of bytes/floats/bool/structs/strings/enums/enum_values. + string string = 7; // control plane arbitrary length string + string enum = 8; // safe (non-serializable) enums only + bytes enum_value = 9; // serializable enums only + } +} +message GenericStructLike { + repeated GenericData members = 1; +} +message GenericList { + repeated GenericData members = 1; +} + +message GenericVarbit { + bytes bitstring = 1; + int32 bitwidth = 2; // dynamic bitwidth of the field +} + +////// End: GenericTables diff --git a/proto/p4/v1/p4runtime.proto b/proto/p4/v1/p4runtime.proto index bd683dcd..cbc67227 100755 --- a/proto/p4/v1/p4runtime.proto +++ b/proto/p4/v1/p4runtime.proto @@ -257,43 +257,6 @@ message FieldMatch { .google.protobuf.Any other = 100; } } -message GenericFieldMatch { - uint32 field_id = 1; - - message Exact { - GenericData value = 1; - } - message Ternary { - bytes value = 1; - bytes mask = 2; - } - message LPM { - bytes value = 1; - int32 prefix_len = 2; // in bits - } - // A Range is logically a set that contains all values numerically between - // 'low' and 'high' inclusively. - message Range { - bytes low = 1; - bytes high = 2; - } - // If the Optional match should be a wildcard, the FieldMatch must be omitted. - // Otherwise, this behaves like an exact match. - message Optional { - GenericData value = 1; - } - - oneof field_match_type { - Exact exact = 2; - Ternary ternary = 3; - LPM lpm = 4; - Range range = 6; - Optional optional = 7; - // Architecture-specific match value; it corresponds to the other_match_type - // in the P4Info MatchField message. - .google.protobuf.Any other = 100; - } -} // table_actions ::= action_specification | action_profile_specification message TableAction { @@ -552,33 +515,6 @@ message DigestEntry { Config config = 2; } -message GenericTableEntry { - uint32 table_id = 1; - repeated GenericFieldMatch match = 2; - TableDataUnion table_data_union = 3; - // Should only be set if the match implies a TCAM lookup, i.e. at least one of - // the match fields is Optional, Ternary or Range. A higher number indicates - // higher priority. Only a highest priority entry that matches the packet - // must be selected. Multiple entries in the same table with the same - // priority value are permitted. See Section "TableEntry" in the - // specification for details of the behavior. - int32 priority = 4; - // Set to true if the table entry is being used to update the single default - // entry of the table. If true, the "match" field must be empty and - // the "data union" field must be populated with a valid data union. - bool is_default_entry = 5; - // Arbitrary metadata from the controller that is opaque to the target. - bytes metadata = 6; -} - -message TableDataUnion { - uint32 union_id = 1; - message Param { - uint32 param_id = 2; - GenericData value = 3; - } - repeated Param params = 4; -} //------------------------------------------------------------------------------ message StreamMessageRequest { @@ -865,3 +801,71 @@ message CapabilitiesResponse { // version of the P4Runtime API currently implemented by the server. string p4runtime_api_version = 1; } + +////// Begin : GenericTables messages +message GenericFieldMatch { + uint32 field_id = 1; + + message Exact { + GenericData value = 1; + } + message Ternary { + bytes value = 1; + bytes mask = 2; + } + message LPM { + bytes value = 1; + int32 prefix_len = 2; // in bits + } + // A Range is logically a set that contains all values numerically between + // 'low' and 'high' inclusively. + message Range { + bytes low = 1; + bytes high = 2; + } + // If the Optional match should be a wildcard, the FieldMatch must be omitted. + // Otherwise, this behaves like an exact match. + message Optional { + GenericData value = 1; + } + + oneof field_match_type { + Exact exact = 2; + Ternary ternary = 3; + LPM lpm = 4; + Range range = 6; + Optional optional = 7; + // Architecture-specific match value; it corresponds to the other_match_type + // in the P4Info MatchField message. + .google.protobuf.Any other = 100; + } +} + +message GenericTableEntry { + uint32 table_id = 1; + repeated GenericFieldMatch match = 2; + TableDataUnion table_data_union = 3; + // Should only be set if the match implies a TCAM lookup, i.e. at least one of + // the match fields is Optional, Ternary or Range. A higher number indicates + // higher priority. Only a highest priority entry that matches the packet + // must be selected. Multiple entries in the same table with the same + // priority value are permitted. See Section "TableEntry" in the + // specification for details of the behavior. + int32 priority = 4; + // Set to true if the table entry is being used to update the single default + // entry of the table. If true, the "match" field must be empty and + // the "data union" field must be populated with a valid data union. + bool is_default_entry = 5; + // Arbitrary metadata from the controller that is opaque to the target. + bytes metadata = 6; +} + +message TableDataUnion { + uint32 union_id = 1; + message Param { + uint32 param_id = 2; + GenericData value = 3; + } + repeated Param params = 4; +} +////// End: GenericTables From cd271fdda894e6aabd35b9c7a21aed38fd2cb0c2 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 13 Jul 2023 14:27:13 -0700 Subject: [PATCH 20/42] * Removed GenericTable category from the p4info * Added more text about generic table type * Corrected typos and reference links * Replaced png file with svg file * Removed is_const_table since table properties are present --- docs/v1/P4Runtime-Spec.mdk | 49 +++++++++++------- docs/v1/assets/generic-tables-insert-flow.png | Bin 246755 -> 0 bytes docs/v1/assets/generic-tables-insert-flow.svg | 4 ++ proto/p4/GenericTable.md | 1 - proto/p4/config/v1/p4info.proto | 9 ++-- 5 files changed, 37 insertions(+), 26 deletions(-) delete mode 100644 docs/v1/assets/generic-tables-insert-flow.png create mode 100644 docs/v1/assets/generic-tables-insert-flow.svg diff --git a/docs/v1/P4Runtime-Spec.mdk b/docs/v1/P4Runtime-Spec.mdk index b7cf93c5..14412ae4 100755 --- a/docs/v1/P4Runtime-Spec.mdk +++ b/docs/v1/P4Runtime-Spec.mdk @@ -4795,7 +4795,7 @@ section on [Extending P4Runtime for non-PSA Architectures](#sec-extending-p4runtime) for more information. ## `GenericTableEntry` -See section [GenericTableEntry p4runtime](#sec-p4runtime-generic-table-entry) for more info +See section [GenericTableEntry p4runtime](#sec-generic-table-entry) for more info # Error Reporting Messages { #sec-error-reporting-messages} @@ -6293,11 +6293,20 @@ can use Generic table to map to their own specific feature implementations as well. It defines the following fields -* `generic_table_type_id`, a 8-bit unsigned integer which uniquely identifies the - generic_table_type in the context of the architecture. +* `generic_table_type_id`, an 8-bit unsigned integer which uniquely identifies + the generic_table_type in the context of the architecture. This value is in the range of `[0x00, 0xff]`. - The ID in the preamble is created as `0x18` `generic_table_type_id` `16 bits of - generated ID`. + The ID in the preamble is created as `0x18 + generic_table_type_id + 16 bits + of generated ID by compiler`. The `generic_table_type` depicts a new table + "type" which would have similar properties. The organization of the table + type space is left up to the target. Some optional guidelines + * For P4 externs, any new extern to have a new table type. + * For non-P4 externs, options are + * All non-P4 tables grouped under one giant non_p4 table type + * Tables divided on the basis of categories. Categories are defined in the + spec but aren't part of the p4info. + * Every table has its own table-type. This can however lead to running out + of the 8 bit type ID space soon. Note that this value does not need to be unique across all architectures from all organizations, since at any given time every device managed by a P4Runtime server maps to a single P4Info @@ -6308,37 +6317,40 @@ It defines the following fields name which uniquely identifies this entity in the entire space including P4 objects -* `generic_table_category_type`, please check section [GenericTable categories](#sec-generic-table-categories) for more details +* `repeated string generic_table_properties`, please check generic-table + properties under section [GenericTable categories] + (#sec-generic-table-categories) for more details +* `repeated GenericTableInstance`, contains the info for one instance of + a generic-table-type. All tables of one type are grouped under this. +GenericTableInstance * `preamble`, a `Preamble` message with the ID, name, and alias of this GenericTable. -* `match_fields`, a repeated field of type `MatchField` representing the data to - be used to construct the lookup key matched in this table. For information check - the match_fields info in the [Table section](#sec-table) +* `generic_match_fields`, a repeated field of type `GenericMatchField` representing + the data to be used to construct the lookup key matched in this table. For + information check the generic_match_fields info in the [Generic Table section] + (#sec-generic-table-entry) * `union_refs`, a repeated `UnionRef` field representing the set of possible unions for this table. Functionally, it behaves same as that of ActionRefs. Hence it has been kept as ActionRefs itself. - Please check the action_refs info in the [Table section](#sec-table) + Please check the union_refs info in the [Generic Table section] + (#sec-generic-table-entry) * `const_default_union_id`, if this table has a constant default union, this field will carry the `uint32` identifier of that action, otherwise its value will be 0. A default union is the data when the key is null. It is similar to - a default action for Match Tables. - Being constant means that the control plane cannot - set a different default union at runtime or change the default union's - arguments. + a default action for Match Tables. Being constant means that the control + plane cannot set a different default union at runtime or change the default + union's arguments. * `size`, an `int64` describing the desired number of table entries that the target should support for the table. See the "Size" subsection within the "Table Properties" section of the P4~16~ language specification for details [@P4TableProperties]. -* `is_const_table`, a boolean flag indicating that the table cannot be modified - by the control plane at runtime. - * `other_properties`, an `Any` Protobuf message [@ProtoAny] to embed architecture-specific or target-specific table properties [@P4TableProperties] that the target wants to convey. @@ -6376,7 +6388,6 @@ conflict, like bool, then the P4 data type should be used. used. Otherwise, the GenericDataType is used ## `GenericTableEntry` { #sec-generic-table-entry} -See section [GenericTableEntry p4runtime](#sec-p4runtime-generic-table-entry) for more info GenericTableEntry can be used to program non-PSA externs or non-P4 target-specific "fixed" features to their implementation in a generic way. This provides an alternative @@ -6449,7 +6460,7 @@ limitation. It is recommended that, for the sake of portability, P4Runtime clients do not try to insert additional entries once the size indicated in P4Info has been reached. -## GenericTable Categories +## GenericTable Categories {#sec-generic-table-categories} All tables fall into certain "categories" which define what APIs are applicable on the table and the APIs. diff --git a/docs/v1/assets/generic-tables-insert-flow.png b/docs/v1/assets/generic-tables-insert-flow.png deleted file mode 100644 index 25d629a359487bc7d2392bbe81870bd61c8501ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246755 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