From 5b164af04920cbe89dd8694e449f78b52ff3cbfc Mon Sep 17 00:00:00 2001 From: Daniel Grau Date: Fri, 15 Nov 2024 18:47:10 +0000 Subject: [PATCH 1/2] Generate server boilerplate --- dataplane/apigen/apigen.go | 11 +- dataplane/apigen/ccgen/BUILD | 5 +- dataplane/apigen/ccgen/servergen.go | 188 + dataplane/apigen/typeinfo/typeinfo.go | 3 + dataplane/standalone/BUILD | 16 + dataplane/standalone/saiserver/BUILD | 14 + dataplane/standalone/saiserver/acl.cc | 162 + dataplane/standalone/saiserver/acl.h | 136 + dataplane/standalone/saiserver/bfd.cc | 57 + dataplane/standalone/saiserver/bfd.h | 60 + dataplane/standalone/saiserver/bmtor.cc | 115 + dataplane/standalone/saiserver/bmtor.h | 106 + dataplane/standalone/saiserver/bridge.cc | 92 + dataplane/standalone/saiserver/bridge.h | 85 + dataplane/standalone/saiserver/buffer.cc | 120 + dataplane/standalone/saiserver/buffer.h | 107 + dataplane/standalone/saiserver/common.h | 4 + dataplane/standalone/saiserver/counter.cc | 57 + dataplane/standalone/saiserver/counter.h | 60 + .../standalone/saiserver/debug_counter.cc | 50 + .../standalone/saiserver/debug_counter.h | 56 + dataplane/standalone/saiserver/dtel.cc | 162 + dataplane/standalone/saiserver/dtel.h | 133 + dataplane/standalone/saiserver/enum.cc | 27071 ++++++++++++++++ dataplane/standalone/saiserver/enum.h | 3002 ++ dataplane/standalone/saiserver/fdb.cc | 64 + dataplane/standalone/saiserver/fdb.h | 65 + .../saiserver/generic_programmable.cc | 50 + .../saiserver/generic_programmable.h | 58 + dataplane/standalone/saiserver/hash.cc | 71 + dataplane/standalone/saiserver/hash.h | 69 + dataplane/standalone/saiserver/hostif.cc | 157 + dataplane/standalone/saiserver/hostif.h | 132 + dataplane/standalone/saiserver/ipmc.cc | 50 + dataplane/standalone/saiserver/ipmc.h | 55 + dataplane/standalone/saiserver/ipmc_group.cc | 64 + dataplane/standalone/saiserver/ipmc_group.h | 65 + dataplane/standalone/saiserver/ipsec.cc | 120 + dataplane/standalone/saiserver/ipsec.h | 105 + .../standalone/saiserver/isolation_group.cc | 64 + .../standalone/saiserver/isolation_group.h | 67 + dataplane/standalone/saiserver/l2mc.cc | 50 + dataplane/standalone/saiserver/l2mc.h | 55 + dataplane/standalone/saiserver/l2mc_group.cc | 64 + dataplane/standalone/saiserver/l2mc_group.h | 65 + dataplane/standalone/saiserver/lag.cc | 92 + dataplane/standalone/saiserver/lag.h | 83 + dataplane/standalone/saiserver/macsec.cc | 183 + dataplane/standalone/saiserver/macsec.h | 150 + dataplane/standalone/saiserver/mcast_fdb.cc | 50 + dataplane/standalone/saiserver/mcast_fdb.h | 55 + dataplane/standalone/saiserver/mirror.cc | 50 + dataplane/standalone/saiserver/mirror.h | 55 + dataplane/standalone/saiserver/mpls.cc | 64 + dataplane/standalone/saiserver/mpls.h | 65 + dataplane/standalone/saiserver/my_mac.cc | 50 + dataplane/standalone/saiserver/my_mac.h | 55 + dataplane/standalone/saiserver/nat.cc | 92 + dataplane/standalone/saiserver/nat.h | 85 + dataplane/standalone/saiserver/neighbor.cc | 64 + dataplane/standalone/saiserver/neighbor.h | 65 + dataplane/standalone/saiserver/next_hop.cc | 64 + dataplane/standalone/saiserver/next_hop.h | 65 + .../standalone/saiserver/next_hop_group.cc | 134 + .../standalone/saiserver/next_hop_group.h | 116 + dataplane/standalone/saiserver/policer.cc | 57 + dataplane/standalone/saiserver/policer.h | 60 + dataplane/standalone/saiserver/port.cc | 155 + dataplane/standalone/saiserver/port.h | 128 + dataplane/standalone/saiserver/qos_map.cc | 50 + dataplane/standalone/saiserver/qos_map.h | 55 + dataplane/standalone/saiserver/queue.cc | 57 + dataplane/standalone/saiserver/queue.h | 60 + dataplane/standalone/saiserver/route.cc | 64 + dataplane/standalone/saiserver/route.h | 65 + .../standalone/saiserver/router_interface.cc | 57 + .../standalone/saiserver/router_interface.h | 61 + dataplane/standalone/saiserver/rpf_group.cc | 64 + dataplane/standalone/saiserver/rpf_group.h | 65 + .../standalone/saiserver/samplepacket.cc | 50 + dataplane/standalone/saiserver/samplepacket.h | 56 + dataplane/standalone/saiserver/scheduler.cc | 50 + dataplane/standalone/saiserver/scheduler.h | 55 + .../standalone/saiserver/scheduler_group.cc | 50 + .../standalone/saiserver/scheduler_group.h | 56 + dataplane/standalone/saiserver/srv6.cc | 106 + dataplane/standalone/saiserver/srv6.h | 95 + dataplane/standalone/saiserver/stp.cc | 85 + dataplane/standalone/saiserver/stp.h | 78 + dataplane/standalone/saiserver/switch.cc | 85 + dataplane/standalone/saiserver/switch.h | 80 + dataplane/standalone/saiserver/system_port.cc | 50 + dataplane/standalone/saiserver/system_port.h | 55 + dataplane/standalone/saiserver/tam.cc | 330 + dataplane/standalone/saiserver/tam.h | 253 + dataplane/standalone/saiserver/tunnel.cc | 141 + dataplane/standalone/saiserver/tunnel.h | 122 + dataplane/standalone/saiserver/udf.cc | 92 + dataplane/standalone/saiserver/udf.h | 83 + .../standalone/saiserver/virtual_router.cc | 50 + .../standalone/saiserver/virtual_router.h | 56 + dataplane/standalone/saiserver/vlan.cc | 99 + dataplane/standalone/saiserver/vlan.h | 88 + dataplane/standalone/saiserver/wred.cc | 50 + dataplane/standalone/saiserver/wred.h | 53 + dataplane/standalone/server.cc | 326 + 106 files changed, 38689 insertions(+), 2 deletions(-) create mode 100644 dataplane/apigen/ccgen/servergen.go create mode 100644 dataplane/standalone/saiserver/BUILD create mode 100644 dataplane/standalone/saiserver/acl.cc create mode 100644 dataplane/standalone/saiserver/acl.h create mode 100644 dataplane/standalone/saiserver/bfd.cc create mode 100644 dataplane/standalone/saiserver/bfd.h create mode 100644 dataplane/standalone/saiserver/bmtor.cc create mode 100644 dataplane/standalone/saiserver/bmtor.h create mode 100644 dataplane/standalone/saiserver/bridge.cc create mode 100644 dataplane/standalone/saiserver/bridge.h create mode 100644 dataplane/standalone/saiserver/buffer.cc create mode 100644 dataplane/standalone/saiserver/buffer.h create mode 100644 dataplane/standalone/saiserver/common.h create mode 100644 dataplane/standalone/saiserver/counter.cc create mode 100644 dataplane/standalone/saiserver/counter.h create mode 100644 dataplane/standalone/saiserver/debug_counter.cc create mode 100644 dataplane/standalone/saiserver/debug_counter.h create mode 100644 dataplane/standalone/saiserver/dtel.cc create mode 100644 dataplane/standalone/saiserver/dtel.h create mode 100644 dataplane/standalone/saiserver/enum.cc create mode 100644 dataplane/standalone/saiserver/enum.h create mode 100644 dataplane/standalone/saiserver/fdb.cc create mode 100644 dataplane/standalone/saiserver/fdb.h create mode 100644 dataplane/standalone/saiserver/generic_programmable.cc create mode 100644 dataplane/standalone/saiserver/generic_programmable.h create mode 100644 dataplane/standalone/saiserver/hash.cc create mode 100644 dataplane/standalone/saiserver/hash.h create mode 100644 dataplane/standalone/saiserver/hostif.cc create mode 100644 dataplane/standalone/saiserver/hostif.h create mode 100644 dataplane/standalone/saiserver/ipmc.cc create mode 100644 dataplane/standalone/saiserver/ipmc.h create mode 100644 dataplane/standalone/saiserver/ipmc_group.cc create mode 100644 dataplane/standalone/saiserver/ipmc_group.h create mode 100644 dataplane/standalone/saiserver/ipsec.cc create mode 100644 dataplane/standalone/saiserver/ipsec.h create mode 100644 dataplane/standalone/saiserver/isolation_group.cc create mode 100644 dataplane/standalone/saiserver/isolation_group.h create mode 100644 dataplane/standalone/saiserver/l2mc.cc create mode 100644 dataplane/standalone/saiserver/l2mc.h create mode 100644 dataplane/standalone/saiserver/l2mc_group.cc create mode 100644 dataplane/standalone/saiserver/l2mc_group.h create mode 100644 dataplane/standalone/saiserver/lag.cc create mode 100644 dataplane/standalone/saiserver/lag.h create mode 100644 dataplane/standalone/saiserver/macsec.cc create mode 100644 dataplane/standalone/saiserver/macsec.h create mode 100644 dataplane/standalone/saiserver/mcast_fdb.cc create mode 100644 dataplane/standalone/saiserver/mcast_fdb.h create mode 100644 dataplane/standalone/saiserver/mirror.cc create mode 100644 dataplane/standalone/saiserver/mirror.h create mode 100644 dataplane/standalone/saiserver/mpls.cc create mode 100644 dataplane/standalone/saiserver/mpls.h create mode 100644 dataplane/standalone/saiserver/my_mac.cc create mode 100644 dataplane/standalone/saiserver/my_mac.h create mode 100644 dataplane/standalone/saiserver/nat.cc create mode 100644 dataplane/standalone/saiserver/nat.h create mode 100644 dataplane/standalone/saiserver/neighbor.cc create mode 100644 dataplane/standalone/saiserver/neighbor.h create mode 100644 dataplane/standalone/saiserver/next_hop.cc create mode 100644 dataplane/standalone/saiserver/next_hop.h create mode 100644 dataplane/standalone/saiserver/next_hop_group.cc create mode 100644 dataplane/standalone/saiserver/next_hop_group.h create mode 100644 dataplane/standalone/saiserver/policer.cc create mode 100644 dataplane/standalone/saiserver/policer.h create mode 100644 dataplane/standalone/saiserver/port.cc create mode 100644 dataplane/standalone/saiserver/port.h create mode 100644 dataplane/standalone/saiserver/qos_map.cc create mode 100644 dataplane/standalone/saiserver/qos_map.h create mode 100644 dataplane/standalone/saiserver/queue.cc create mode 100644 dataplane/standalone/saiserver/queue.h create mode 100644 dataplane/standalone/saiserver/route.cc create mode 100644 dataplane/standalone/saiserver/route.h create mode 100644 dataplane/standalone/saiserver/router_interface.cc create mode 100644 dataplane/standalone/saiserver/router_interface.h create mode 100644 dataplane/standalone/saiserver/rpf_group.cc create mode 100644 dataplane/standalone/saiserver/rpf_group.h create mode 100644 dataplane/standalone/saiserver/samplepacket.cc create mode 100644 dataplane/standalone/saiserver/samplepacket.h create mode 100644 dataplane/standalone/saiserver/scheduler.cc create mode 100644 dataplane/standalone/saiserver/scheduler.h create mode 100644 dataplane/standalone/saiserver/scheduler_group.cc create mode 100644 dataplane/standalone/saiserver/scheduler_group.h create mode 100644 dataplane/standalone/saiserver/srv6.cc create mode 100644 dataplane/standalone/saiserver/srv6.h create mode 100644 dataplane/standalone/saiserver/stp.cc create mode 100644 dataplane/standalone/saiserver/stp.h create mode 100644 dataplane/standalone/saiserver/switch.cc create mode 100644 dataplane/standalone/saiserver/switch.h create mode 100644 dataplane/standalone/saiserver/system_port.cc create mode 100644 dataplane/standalone/saiserver/system_port.h create mode 100644 dataplane/standalone/saiserver/tam.cc create mode 100644 dataplane/standalone/saiserver/tam.h create mode 100644 dataplane/standalone/saiserver/tunnel.cc create mode 100644 dataplane/standalone/saiserver/tunnel.h create mode 100644 dataplane/standalone/saiserver/udf.cc create mode 100644 dataplane/standalone/saiserver/udf.h create mode 100644 dataplane/standalone/saiserver/virtual_router.cc create mode 100644 dataplane/standalone/saiserver/virtual_router.h create mode 100644 dataplane/standalone/saiserver/vlan.cc create mode 100644 dataplane/standalone/saiserver/vlan.h create mode 100644 dataplane/standalone/saiserver/wred.cc create mode 100644 dataplane/standalone/saiserver/wred.h create mode 100644 dataplane/standalone/server.cc diff --git a/dataplane/apigen/apigen.go b/dataplane/apigen/apigen.go index 2e6888f4..f11e09d3 100644 --- a/dataplane/apigen/apigen.go +++ b/dataplane/apigen/apigen.go @@ -53,7 +53,7 @@ func parse(headers []string, includePaths ...string) (*cc.AST, error) { var ( saiPath = flag.String("sai_path", "bazel-lemming/external/com_github_opencomputeproject_sai", "Path to SAI repo") clientOutDir = flag.String("client_out_dir", "dataplane/standalone/sai", "Output directory for C++ client code") - _ = flag.String("server_out_dir", "dataplane/standalone/saiserver", "Output directory for C++ server code") + serverOutDir = flag.String("server_out_dir", "dataplane/standalone/saiserver", "Output directory for C++ server code") protoOutDir = flag.String("proto_out_dir", "dataplane/proto/sai", "Output dirrectory for proto code") protoPackage = flag.String("proto_package", "lemming.dataplane.sai", "Package for generated proto code") protoGoPackage = flag.String("proto_go_package", "github.com/openconfig/lemming/dataplane/proto/sai", "Go package option in proto code") @@ -95,6 +95,10 @@ func generate() error { if err != nil { return err } + serverFiles, err := ccgen.GenServer(xmlInfo, sai, *protoOutDir, *serverOutDir) + if err != nil { + return err + } for file, content := range protos { if err := os.WriteFile(filepath.Join(*protoOutDir, file), []byte(content), 0o600); err != nil { @@ -106,6 +110,11 @@ func generate() error { return err } } + for file, content := range serverFiles { + if err := os.WriteFile(filepath.Join(*serverOutDir, file), []byte(content), 0o600); err != nil { + return err + } + } return nil } diff --git a/dataplane/apigen/ccgen/BUILD b/dataplane/apigen/ccgen/BUILD index 18519fee..205667cd 100644 --- a/dataplane/apigen/ccgen/BUILD +++ b/dataplane/apigen/ccgen/BUILD @@ -2,7 +2,10 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "ccgen", - srcs = ["ccgen.go"], + srcs = [ + "ccgen.go", + "servergen.go", + ], importpath = "github.com/openconfig/lemming/dataplane/apigen/ccgen", visibility = ["//visibility:public"], deps = [ diff --git a/dataplane/apigen/ccgen/servergen.go b/dataplane/apigen/ccgen/servergen.go new file mode 100644 index 00000000..eedf7086 --- /dev/null +++ b/dataplane/apigen/ccgen/servergen.go @@ -0,0 +1,188 @@ +// Copyright 2024 Google LLC +// +// 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. + +package ccgen + +import ( + "slices" + "strings" + "text/template" + + "github.com/openconfig/lemming/dataplane/apigen/docparser" + "github.com/openconfig/lemming/dataplane/apigen/saiast" + "github.com/openconfig/lemming/dataplane/apigen/typeinfo" +) + +func GenServer(doc *docparser.SAIInfo, sai *saiast.SAIAPI, protoOutDir, ccOutDir string) (map[string]string, error) { + files := make(map[string]string) + enums := enumFile{ + ProtoOutDir: protoOutDir, + CCOutDir: ccOutDir, + } + d, err := typeinfo.Data(doc, sai, "", "", ccOutDir, protoOutDir) + if err != nil { + return nil, err + } + for apiName, iface := range d.APIs { + var headerBuilder, implBuilder strings.Builder + if err := serverHdrTmpl.Execute(&headerBuilder, iface); err != nil { + return nil, err + } + if err := serverCCTmpl.Execute(&implBuilder, iface); err != nil { + return nil, err + } + files[apiName+".h"] = headerBuilder.String() + files[apiName+".cc"] = implBuilder.String() + enums.ProtoIncludes = append(enums.ProtoIncludes, apiName+".pb") + } + for name, enumDesc := range doc.Enums { + e := enum{ + SAIName: name, + ProtoName: saiast.TrimSAIName(name, true, false), + UnspecifiedName: saiast.TrimSAIName(name, false, true) + "_UNSPECIFIED", + } + if len(enumDesc) == 0 { + continue + } + seenVal := map[int]struct{}{} + for _, enumElemDesc := range enumDesc { + if _, ok := seenVal[enumElemDesc.Value]; ok { + continue + } + seenVal[enumElemDesc.Value] = struct{}{} + name := strings.TrimPrefix(enumElemDesc.Name, "SAI_") + // If the SAI name conflicts with unspecified proto name, then add SAI prefix, + // that way the proto enum value is always 1 greater than the c enum. + if name == e.UnspecifiedName { + name = strings.TrimSuffix(saiast.TrimSAIName(name, false, true), "_UNSPECIFIED") + "_SAI_UNSPECIFIED" + } + e.Elems = append(e.Elems, enumElem{ + SAIName: enumElemDesc.Name, + ProtoName: name, + }) + } + e.DefaultReturn = e.Elems[0].SAIName + enums.Enums = append(enums.Enums, e) + } + for name, attr := range doc.Attrs { + if _, ok := unsupportedEnum[name]; ok { + continue + } + e := enum{ + SAIName: "sai_" + strings.ToLower(name) + "_attr_t", + ProtoName: saiast.TrimSAIName(name+"_ATTR", true, false), + UnspecifiedName: saiast.TrimSAIName(name+"_ATTR", false, true) + "_UNSPECIFIED", + } + for _, val := range attr.ReadFields { + name := strings.TrimPrefix(val.EnumName, "SAI_") + // If the SAI name conflicts with unspecified proto name, then add SAI prefix, + // that way the proto enum value is always 1 greater than the c enum. + if name == e.UnspecifiedName { + name = strings.TrimSuffix(saiast.TrimSAIName(name+"_ATTR", false, true), "_UNSPECIFIED") + "_SAI_UNSPECIFIED" + } + e.Elems = append(e.Elems, enumElem{ + SAIName: val.EnumName, + ProtoName: name, + }) + } + e.DefaultReturn = e.Elems[0].SAIName + enums.Enums = append(enums.Enums, e) + } + slices.SortFunc(enums.Enums, func(a, b enum) int { return strings.Compare(a.SAIName, b.SAIName) }) + var headerBuilder, implBuilder strings.Builder + if err := enumHeaderTmpl.Execute(&headerBuilder, enums); err != nil { + return nil, err + } + if err := enumCCTmpl.Execute(&implBuilder, enums); err != nil { + return nil, err + } + files["enum.h"] = headerBuilder.String() + files["enum.cc"] = implBuilder.String() + + return files, nil +} + +var ( + serverHdrTmpl = template.Must(template.New("header").Parse(`// Copyright 2024 Google LLC +// +// 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. + +#ifndef {{ .IncludeGuard }} +#define {{ .IncludeGuard }} + +#include "{{ .ProtoOutDir }}/common.pb.h" +#include "{{ .ProtoOutDir }}/{{ .ProtoInclude }}.h" +#include "{{ .ProtoOutDir }}/{{ .GRPCInclude }}.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class {{ .ServiceName }} final : public lemming::dataplane::sai::{{ .ServiceName }}::Service { + public: + {{ range .Funcs }} + {{- if and .ProtoRPCName (not .IsStreaming) }} + grpc::Status {{ .ProtoRPCName }}(grpc::ServerContext* context, const lemming::dataplane::sai::{{ .ProtoRequestType }}* req, lemming::dataplane::sai::{{ .ProtoResponseType }}* resp); + {{- end }} + {{ end }} + {{ .APIType }} *api; +}; + +#endif // {{ .IncludeGuard }} +`)) + serverCCTmpl = template.Must(template.New("header").Parse(`// Copyright 2024 Google LLC +// +// 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. + +#include "{{ .CCOutDir }}/{{ .Header }}" +#include "{{ .CCOutDir }}/common.h" +#include "{{ .CCOutDir }}/enum.h" +#include "{{ .ProtoOutDir }}/common.pb.h" +#include "{{ .ProtoOutDir }}/{{ .ProtoInclude }}.h" +#include + +{{ range .Funcs }} +{{- if and .ProtoRPCName (not .IsStreaming) }} +grpc::Status {{ $.ServiceName }}::{{ .ProtoRPCName }}(grpc::ServerContext* context, const lemming::dataplane::sai::{{ .ProtoRequestType }}* req, lemming::dataplane::sai::{{ .ProtoResponseType }}* resp) { + return grpc::Status::OK; +} + +{{- end }} +{{ end }} +`)) +) diff --git a/dataplane/apigen/typeinfo/typeinfo.go b/dataplane/apigen/typeinfo/typeinfo.go index bd22838e..be1ce87f 100644 --- a/dataplane/apigen/typeinfo/typeinfo.go +++ b/dataplane/apigen/typeinfo/typeinfo.go @@ -58,6 +58,7 @@ type GenFunc struct { EntryVar string ConvertFunc string AttrConvertInsert string + IsStreaming bool } type APITemplate struct { @@ -98,6 +99,7 @@ func Data(doc *docparser.SAIInfo, sai *saiast.SAIAPI, protoPackage, protoGoPacka APIType: iface.Name, APIName: apiName, ProtoInclude: apiName + ".pb", + GRPCInclude: apiName + ".grpc.pb", CCOutDir: ccOutDir, } } @@ -578,6 +580,7 @@ func genStreamingRPC(docInfo *docparser.SAIInfo, apiName string, meta *saiast.Fu ProtoRequestType: req.Name, ProtoResponseType: "stream " + resp.Name, ProtoRPCName: strcase.UpperCamelCase(name), + IsStreaming: true, }) } } diff --git a/dataplane/standalone/BUILD b/dataplane/standalone/BUILD index 173da976..87473099 100644 --- a/dataplane/standalone/BUILD +++ b/dataplane/standalone/BUILD @@ -72,3 +72,19 @@ cc_binary( ":entrypoint", ], ) + +cc_binary( + name = "server", + srcs = ["server.cc"], + tags = ["manual"], + deps = [ + "//dataplane/standalone/saiserver", + "@com_github_grpc_grpc//:grpc++", + ], + linkopts = [ + "-lprotobuf", + "-lgrpc++", + "-lglog", + "-lsai" + ], +) diff --git a/dataplane/standalone/saiserver/BUILD b/dataplane/standalone/saiserver/BUILD new file mode 100644 index 00000000..c701358d --- /dev/null +++ b/dataplane/standalone/saiserver/BUILD @@ -0,0 +1,14 @@ +cc_library( + name = "saiserver", + srcs = glob(["*.cc"]), + hdrs = glob( + ["*.h"], + ), + visibility = ["//visibility:public"], + deps = [ + "//dataplane/proto/sai:sai_cc_grpc", + "//dataplane/proto/sai:sai_cc_proto", + "@com_github_google_glog//:glog", + "@com_github_opencomputeproject_sai//:sai", + ], +) diff --git a/dataplane/standalone/saiserver/acl.cc b/dataplane/standalone/saiserver/acl.cc new file mode 100644 index 00000000..6bce19c0 --- /dev/null +++ b/dataplane/standalone/saiserver/acl.cc @@ -0,0 +1,162 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/acl.h" + +#include + +#include "dataplane/proto/sai/acl.pb.h" +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Acl::CreateAclTable( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclTableRequest* req, + lemming::dataplane::sai::CreateAclTableResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::RemoveAclTable( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclTableRequest* req, + lemming::dataplane::sai::RemoveAclTableResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::GetAclTableAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclTableAttributeRequest* req, + lemming::dataplane::sai::GetAclTableAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::CreateAclEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclEntryRequest* req, + lemming::dataplane::sai::CreateAclEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::RemoveAclEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclEntryRequest* req, + lemming::dataplane::sai::RemoveAclEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::SetAclEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetAclEntryAttributeRequest* req, + lemming::dataplane::sai::SetAclEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::GetAclEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclEntryAttributeRequest* req, + lemming::dataplane::sai::GetAclEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::CreateAclCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclCounterRequest* req, + lemming::dataplane::sai::CreateAclCounterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::RemoveAclCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclCounterRequest* req, + lemming::dataplane::sai::RemoveAclCounterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::SetAclCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetAclCounterAttributeRequest* req, + lemming::dataplane::sai::SetAclCounterAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::GetAclCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclCounterAttributeRequest* req, + lemming::dataplane::sai::GetAclCounterAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::CreateAclRange( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclRangeRequest* req, + lemming::dataplane::sai::CreateAclRangeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::RemoveAclRange( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclRangeRequest* req, + lemming::dataplane::sai::RemoveAclRangeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::GetAclRangeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclRangeAttributeRequest* req, + lemming::dataplane::sai::GetAclRangeAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::CreateAclTableGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclTableGroupRequest* req, + lemming::dataplane::sai::CreateAclTableGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::RemoveAclTableGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclTableGroupRequest* req, + lemming::dataplane::sai::RemoveAclTableGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::GetAclTableGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclTableGroupAttributeRequest* req, + lemming::dataplane::sai::GetAclTableGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::CreateAclTableGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclTableGroupMemberRequest* req, + lemming::dataplane::sai::CreateAclTableGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::RemoveAclTableGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclTableGroupMemberRequest* req, + lemming::dataplane::sai::RemoveAclTableGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Acl::GetAclTableGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclTableGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetAclTableGroupMemberAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/acl.h b/dataplane/standalone/saiserver/acl.h new file mode 100644 index 00000000..e59d8822 --- /dev/null +++ b/dataplane/standalone/saiserver/acl.h @@ -0,0 +1,136 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_ACL_H_ +#define DATAPLANE_STANDALONE_SAI_ACL_H_ + +#include "dataplane/proto/sai/acl.grpc.pb.h" +#include "dataplane/proto/sai/acl.pb.h" +#include "dataplane/proto/sai/common.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Acl final : public lemming::dataplane::sai::Acl::Service { + public: + grpc::Status CreateAclTable( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclTableRequest* req, + lemming::dataplane::sai::CreateAclTableResponse* resp); + + grpc::Status RemoveAclTable( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclTableRequest* req, + lemming::dataplane::sai::RemoveAclTableResponse* resp); + + grpc::Status GetAclTableAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclTableAttributeRequest* req, + lemming::dataplane::sai::GetAclTableAttributeResponse* resp); + + grpc::Status CreateAclEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclEntryRequest* req, + lemming::dataplane::sai::CreateAclEntryResponse* resp); + + grpc::Status RemoveAclEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclEntryRequest* req, + lemming::dataplane::sai::RemoveAclEntryResponse* resp); + + grpc::Status SetAclEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetAclEntryAttributeRequest* req, + lemming::dataplane::sai::SetAclEntryAttributeResponse* resp); + + grpc::Status GetAclEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclEntryAttributeRequest* req, + lemming::dataplane::sai::GetAclEntryAttributeResponse* resp); + + grpc::Status CreateAclCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclCounterRequest* req, + lemming::dataplane::sai::CreateAclCounterResponse* resp); + + grpc::Status RemoveAclCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclCounterRequest* req, + lemming::dataplane::sai::RemoveAclCounterResponse* resp); + + grpc::Status SetAclCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetAclCounterAttributeRequest* req, + lemming::dataplane::sai::SetAclCounterAttributeResponse* resp); + + grpc::Status GetAclCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclCounterAttributeRequest* req, + lemming::dataplane::sai::GetAclCounterAttributeResponse* resp); + + grpc::Status CreateAclRange( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclRangeRequest* req, + lemming::dataplane::sai::CreateAclRangeResponse* resp); + + grpc::Status RemoveAclRange( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclRangeRequest* req, + lemming::dataplane::sai::RemoveAclRangeResponse* resp); + + grpc::Status GetAclRangeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclRangeAttributeRequest* req, + lemming::dataplane::sai::GetAclRangeAttributeResponse* resp); + + grpc::Status CreateAclTableGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclTableGroupRequest* req, + lemming::dataplane::sai::CreateAclTableGroupResponse* resp); + + grpc::Status RemoveAclTableGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclTableGroupRequest* req, + lemming::dataplane::sai::RemoveAclTableGroupResponse* resp); + + grpc::Status GetAclTableGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclTableGroupAttributeRequest* req, + lemming::dataplane::sai::GetAclTableGroupAttributeResponse* resp); + + grpc::Status CreateAclTableGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateAclTableGroupMemberRequest* req, + lemming::dataplane::sai::CreateAclTableGroupMemberResponse* resp); + + grpc::Status RemoveAclTableGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveAclTableGroupMemberRequest* req, + lemming::dataplane::sai::RemoveAclTableGroupMemberResponse* resp); + + grpc::Status GetAclTableGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetAclTableGroupMemberAttributeRequest* + req, + lemming::dataplane::sai::GetAclTableGroupMemberAttributeResponse* resp); + + sai_acl_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_ACL_H_ diff --git a/dataplane/standalone/saiserver/bfd.cc b/dataplane/standalone/saiserver/bfd.cc new file mode 100644 index 00000000..51d1e7a1 --- /dev/null +++ b/dataplane/standalone/saiserver/bfd.cc @@ -0,0 +1,57 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/bfd.h" + +#include + +#include "dataplane/proto/sai/bfd.pb.h" +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Bfd::CreateBfdSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBfdSessionRequest* req, + lemming::dataplane::sai::CreateBfdSessionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bfd::RemoveBfdSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBfdSessionRequest* req, + lemming::dataplane::sai::RemoveBfdSessionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bfd::SetBfdSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBfdSessionAttributeRequest* req, + lemming::dataplane::sai::SetBfdSessionAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bfd::GetBfdSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBfdSessionAttributeRequest* req, + lemming::dataplane::sai::GetBfdSessionAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bfd::GetBfdSessionStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBfdSessionStatsRequest* req, + lemming::dataplane::sai::GetBfdSessionStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/bfd.h b/dataplane/standalone/saiserver/bfd.h new file mode 100644 index 00000000..f6378565 --- /dev/null +++ b/dataplane/standalone/saiserver/bfd.h @@ -0,0 +1,60 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_BFD_H_ +#define DATAPLANE_STANDALONE_SAI_BFD_H_ + +#include "dataplane/proto/sai/bfd.grpc.pb.h" +#include "dataplane/proto/sai/bfd.pb.h" +#include "dataplane/proto/sai/common.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Bfd final : public lemming::dataplane::sai::Bfd::Service { + public: + grpc::Status CreateBfdSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBfdSessionRequest* req, + lemming::dataplane::sai::CreateBfdSessionResponse* resp); + + grpc::Status RemoveBfdSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBfdSessionRequest* req, + lemming::dataplane::sai::RemoveBfdSessionResponse* resp); + + grpc::Status SetBfdSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBfdSessionAttributeRequest* req, + lemming::dataplane::sai::SetBfdSessionAttributeResponse* resp); + + grpc::Status GetBfdSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBfdSessionAttributeRequest* req, + lemming::dataplane::sai::GetBfdSessionAttributeResponse* resp); + + grpc::Status GetBfdSessionStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBfdSessionStatsRequest* req, + lemming::dataplane::sai::GetBfdSessionStatsResponse* resp); + + sai_bfd_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_BFD_H_ diff --git a/dataplane/standalone/saiserver/bmtor.cc b/dataplane/standalone/saiserver/bmtor.cc new file mode 100644 index 00000000..a33d84f1 --- /dev/null +++ b/dataplane/standalone/saiserver/bmtor.cc @@ -0,0 +1,115 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/bmtor.h" + +#include + +#include "dataplane/proto/sai/bmtor.pb.h" +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Bmtor::CreateTableBitmapClassificationEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTableBitmapClassificationEntryRequest* + req, + lemming::dataplane::sai::CreateTableBitmapClassificationEntryResponse* + resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::RemoveTableBitmapClassificationEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTableBitmapClassificationEntryRequest* + req, + lemming::dataplane::sai::RemoveTableBitmapClassificationEntryResponse* + resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::GetTableBitmapClassificationEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai:: + GetTableBitmapClassificationEntryAttributeRequest* req, + lemming::dataplane::sai::GetTableBitmapClassificationEntryAttributeResponse* + resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::GetTableBitmapClassificationEntryStats( + grpc::ServerContext* context, + const lemming::dataplane::sai:: + GetTableBitmapClassificationEntryStatsRequest* req, + lemming::dataplane::sai::GetTableBitmapClassificationEntryStatsResponse* + resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::CreateTableBitmapRouterEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTableBitmapRouterEntryRequest* req, + lemming::dataplane::sai::CreateTableBitmapRouterEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::RemoveTableBitmapRouterEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTableBitmapRouterEntryRequest* req, + lemming::dataplane::sai::RemoveTableBitmapRouterEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::GetTableBitmapRouterEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTableBitmapRouterEntryAttributeRequest* + req, + lemming::dataplane::sai::GetTableBitmapRouterEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::GetTableBitmapRouterEntryStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTableBitmapRouterEntryStatsRequest* req, + lemming::dataplane::sai::GetTableBitmapRouterEntryStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::CreateTableMetaTunnelEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTableMetaTunnelEntryRequest* req, + lemming::dataplane::sai::CreateTableMetaTunnelEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::RemoveTableMetaTunnelEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTableMetaTunnelEntryRequest* req, + lemming::dataplane::sai::RemoveTableMetaTunnelEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::GetTableMetaTunnelEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTableMetaTunnelEntryAttributeRequest* req, + lemming::dataplane::sai::GetTableMetaTunnelEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bmtor::GetTableMetaTunnelEntryStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTableMetaTunnelEntryStatsRequest* req, + lemming::dataplane::sai::GetTableMetaTunnelEntryStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/bmtor.h b/dataplane/standalone/saiserver/bmtor.h new file mode 100644 index 00000000..cc130d9b --- /dev/null +++ b/dataplane/standalone/saiserver/bmtor.h @@ -0,0 +1,106 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_BMTOR_H_ +#define DATAPLANE_STANDALONE_SAI_BMTOR_H_ + +#include "dataplane/proto/sai/bmtor.grpc.pb.h" +#include "dataplane/proto/sai/bmtor.pb.h" +#include "dataplane/proto/sai/common.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Bmtor final : public lemming::dataplane::sai::Bmtor::Service { + public: + grpc::Status CreateTableBitmapClassificationEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai:: + CreateTableBitmapClassificationEntryRequest* req, + lemming::dataplane::sai::CreateTableBitmapClassificationEntryResponse* + resp); + + grpc::Status RemoveTableBitmapClassificationEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai:: + RemoveTableBitmapClassificationEntryRequest* req, + lemming::dataplane::sai::RemoveTableBitmapClassificationEntryResponse* + resp); + + grpc::Status GetTableBitmapClassificationEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai:: + GetTableBitmapClassificationEntryAttributeRequest* req, + lemming::dataplane::sai:: + GetTableBitmapClassificationEntryAttributeResponse* resp); + + grpc::Status GetTableBitmapClassificationEntryStats( + grpc::ServerContext* context, + const lemming::dataplane::sai:: + GetTableBitmapClassificationEntryStatsRequest* req, + lemming::dataplane::sai::GetTableBitmapClassificationEntryStatsResponse* + resp); + + grpc::Status CreateTableBitmapRouterEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTableBitmapRouterEntryRequest* req, + lemming::dataplane::sai::CreateTableBitmapRouterEntryResponse* resp); + + grpc::Status RemoveTableBitmapRouterEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTableBitmapRouterEntryRequest* req, + lemming::dataplane::sai::RemoveTableBitmapRouterEntryResponse* resp); + + grpc::Status GetTableBitmapRouterEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTableBitmapRouterEntryAttributeRequest* + req, + lemming::dataplane::sai::GetTableBitmapRouterEntryAttributeResponse* + resp); + + grpc::Status GetTableBitmapRouterEntryStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTableBitmapRouterEntryStatsRequest* req, + lemming::dataplane::sai::GetTableBitmapRouterEntryStatsResponse* resp); + + grpc::Status CreateTableMetaTunnelEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTableMetaTunnelEntryRequest* req, + lemming::dataplane::sai::CreateTableMetaTunnelEntryResponse* resp); + + grpc::Status RemoveTableMetaTunnelEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTableMetaTunnelEntryRequest* req, + lemming::dataplane::sai::RemoveTableMetaTunnelEntryResponse* resp); + + grpc::Status GetTableMetaTunnelEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTableMetaTunnelEntryAttributeRequest* + req, + lemming::dataplane::sai::GetTableMetaTunnelEntryAttributeResponse* resp); + + grpc::Status GetTableMetaTunnelEntryStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTableMetaTunnelEntryStatsRequest* req, + lemming::dataplane::sai::GetTableMetaTunnelEntryStatsResponse* resp); + + sai_bmtor_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_BMTOR_H_ diff --git a/dataplane/standalone/saiserver/bridge.cc b/dataplane/standalone/saiserver/bridge.cc new file mode 100644 index 00000000..5c3314b4 --- /dev/null +++ b/dataplane/standalone/saiserver/bridge.cc @@ -0,0 +1,92 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/bridge.h" + +#include + +#include "dataplane/proto/sai/bridge.pb.h" +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Bridge::CreateBridge( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBridgeRequest* req, + lemming::dataplane::sai::CreateBridgeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bridge::RemoveBridge( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBridgeRequest* req, + lemming::dataplane::sai::RemoveBridgeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bridge::SetBridgeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBridgeAttributeRequest* req, + lemming::dataplane::sai::SetBridgeAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bridge::GetBridgeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBridgeAttributeRequest* req, + lemming::dataplane::sai::GetBridgeAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bridge::GetBridgeStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBridgeStatsRequest* req, + lemming::dataplane::sai::GetBridgeStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bridge::CreateBridgePort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBridgePortRequest* req, + lemming::dataplane::sai::CreateBridgePortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bridge::RemoveBridgePort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBridgePortRequest* req, + lemming::dataplane::sai::RemoveBridgePortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bridge::SetBridgePortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBridgePortAttributeRequest* req, + lemming::dataplane::sai::SetBridgePortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bridge::GetBridgePortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBridgePortAttributeRequest* req, + lemming::dataplane::sai::GetBridgePortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Bridge::GetBridgePortStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBridgePortStatsRequest* req, + lemming::dataplane::sai::GetBridgePortStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/bridge.h b/dataplane/standalone/saiserver/bridge.h new file mode 100644 index 00000000..3ba7ee71 --- /dev/null +++ b/dataplane/standalone/saiserver/bridge.h @@ -0,0 +1,85 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_BRIDGE_H_ +#define DATAPLANE_STANDALONE_SAI_BRIDGE_H_ + +#include "dataplane/proto/sai/bridge.grpc.pb.h" +#include "dataplane/proto/sai/bridge.pb.h" +#include "dataplane/proto/sai/common.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Bridge final : public lemming::dataplane::sai::Bridge::Service { + public: + grpc::Status CreateBridge( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBridgeRequest* req, + lemming::dataplane::sai::CreateBridgeResponse* resp); + + grpc::Status RemoveBridge( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBridgeRequest* req, + lemming::dataplane::sai::RemoveBridgeResponse* resp); + + grpc::Status SetBridgeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBridgeAttributeRequest* req, + lemming::dataplane::sai::SetBridgeAttributeResponse* resp); + + grpc::Status GetBridgeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBridgeAttributeRequest* req, + lemming::dataplane::sai::GetBridgeAttributeResponse* resp); + + grpc::Status GetBridgeStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBridgeStatsRequest* req, + lemming::dataplane::sai::GetBridgeStatsResponse* resp); + + grpc::Status CreateBridgePort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBridgePortRequest* req, + lemming::dataplane::sai::CreateBridgePortResponse* resp); + + grpc::Status RemoveBridgePort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBridgePortRequest* req, + lemming::dataplane::sai::RemoveBridgePortResponse* resp); + + grpc::Status SetBridgePortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBridgePortAttributeRequest* req, + lemming::dataplane::sai::SetBridgePortAttributeResponse* resp); + + grpc::Status GetBridgePortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBridgePortAttributeRequest* req, + lemming::dataplane::sai::GetBridgePortAttributeResponse* resp); + + grpc::Status GetBridgePortStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBridgePortStatsRequest* req, + lemming::dataplane::sai::GetBridgePortStatsResponse* resp); + + sai_bridge_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_BRIDGE_H_ diff --git a/dataplane/standalone/saiserver/buffer.cc b/dataplane/standalone/saiserver/buffer.cc new file mode 100644 index 00000000..66ba270c --- /dev/null +++ b/dataplane/standalone/saiserver/buffer.cc @@ -0,0 +1,120 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/buffer.h" + +#include + +#include "dataplane/proto/sai/buffer.pb.h" +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Buffer::CreateBufferPool( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBufferPoolRequest* req, + lemming::dataplane::sai::CreateBufferPoolResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::RemoveBufferPool( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBufferPoolRequest* req, + lemming::dataplane::sai::RemoveBufferPoolResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::SetBufferPoolAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBufferPoolAttributeRequest* req, + lemming::dataplane::sai::SetBufferPoolAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::GetBufferPoolAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBufferPoolAttributeRequest* req, + lemming::dataplane::sai::GetBufferPoolAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::GetBufferPoolStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBufferPoolStatsRequest* req, + lemming::dataplane::sai::GetBufferPoolStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::CreateIngressPriorityGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIngressPriorityGroupRequest* req, + lemming::dataplane::sai::CreateIngressPriorityGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::RemoveIngressPriorityGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIngressPriorityGroupRequest* req, + lemming::dataplane::sai::RemoveIngressPriorityGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::SetIngressPriorityGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIngressPriorityGroupAttributeRequest* req, + lemming::dataplane::sai::SetIngressPriorityGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::GetIngressPriorityGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIngressPriorityGroupAttributeRequest* req, + lemming::dataplane::sai::GetIngressPriorityGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::GetIngressPriorityGroupStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIngressPriorityGroupStatsRequest* req, + lemming::dataplane::sai::GetIngressPriorityGroupStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::CreateBufferProfile( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBufferProfileRequest* req, + lemming::dataplane::sai::CreateBufferProfileResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::RemoveBufferProfile( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBufferProfileRequest* req, + lemming::dataplane::sai::RemoveBufferProfileResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::SetBufferProfileAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBufferProfileAttributeRequest* req, + lemming::dataplane::sai::SetBufferProfileAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Buffer::GetBufferProfileAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBufferProfileAttributeRequest* req, + lemming::dataplane::sai::GetBufferProfileAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/buffer.h b/dataplane/standalone/saiserver/buffer.h new file mode 100644 index 00000000..84efab9a --- /dev/null +++ b/dataplane/standalone/saiserver/buffer.h @@ -0,0 +1,107 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_BUFFER_H_ +#define DATAPLANE_STANDALONE_SAI_BUFFER_H_ + +#include "dataplane/proto/sai/buffer.grpc.pb.h" +#include "dataplane/proto/sai/buffer.pb.h" +#include "dataplane/proto/sai/common.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Buffer final : public lemming::dataplane::sai::Buffer::Service { + public: + grpc::Status CreateBufferPool( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBufferPoolRequest* req, + lemming::dataplane::sai::CreateBufferPoolResponse* resp); + + grpc::Status RemoveBufferPool( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBufferPoolRequest* req, + lemming::dataplane::sai::RemoveBufferPoolResponse* resp); + + grpc::Status SetBufferPoolAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBufferPoolAttributeRequest* req, + lemming::dataplane::sai::SetBufferPoolAttributeResponse* resp); + + grpc::Status GetBufferPoolAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBufferPoolAttributeRequest* req, + lemming::dataplane::sai::GetBufferPoolAttributeResponse* resp); + + grpc::Status GetBufferPoolStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBufferPoolStatsRequest* req, + lemming::dataplane::sai::GetBufferPoolStatsResponse* resp); + + grpc::Status CreateIngressPriorityGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIngressPriorityGroupRequest* req, + lemming::dataplane::sai::CreateIngressPriorityGroupResponse* resp); + + grpc::Status RemoveIngressPriorityGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIngressPriorityGroupRequest* req, + lemming::dataplane::sai::RemoveIngressPriorityGroupResponse* resp); + + grpc::Status SetIngressPriorityGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIngressPriorityGroupAttributeRequest* + req, + lemming::dataplane::sai::SetIngressPriorityGroupAttributeResponse* resp); + + grpc::Status GetIngressPriorityGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIngressPriorityGroupAttributeRequest* + req, + lemming::dataplane::sai::GetIngressPriorityGroupAttributeResponse* resp); + + grpc::Status GetIngressPriorityGroupStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIngressPriorityGroupStatsRequest* req, + lemming::dataplane::sai::GetIngressPriorityGroupStatsResponse* resp); + + grpc::Status CreateBufferProfile( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateBufferProfileRequest* req, + lemming::dataplane::sai::CreateBufferProfileResponse* resp); + + grpc::Status RemoveBufferProfile( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveBufferProfileRequest* req, + lemming::dataplane::sai::RemoveBufferProfileResponse* resp); + + grpc::Status SetBufferProfileAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetBufferProfileAttributeRequest* req, + lemming::dataplane::sai::SetBufferProfileAttributeResponse* resp); + + grpc::Status GetBufferProfileAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetBufferProfileAttributeRequest* req, + lemming::dataplane::sai::GetBufferProfileAttributeResponse* resp); + + sai_buffer_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_BUFFER_H_ diff --git a/dataplane/standalone/saiserver/common.h b/dataplane/standalone/saiserver/common.h new file mode 100644 index 00000000..39bc7c11 --- /dev/null +++ b/dataplane/standalone/saiserver/common.h @@ -0,0 +1,4 @@ +#ifndef DATAPLANE_STANDALONE_SAISERVER_COMMON_H_ +#define DATAPLANE_STANDALONE_SAISERVER_COMMON_H_ + +#endif // DATAPLANE_STANDALONE_SAISERVER_COMMON_H_ diff --git a/dataplane/standalone/saiserver/counter.cc b/dataplane/standalone/saiserver/counter.cc new file mode 100644 index 00000000..a46a1c87 --- /dev/null +++ b/dataplane/standalone/saiserver/counter.cc @@ -0,0 +1,57 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/counter.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/counter.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Counter::CreateCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateCounterRequest* req, + lemming::dataplane::sai::CreateCounterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Counter::RemoveCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveCounterRequest* req, + lemming::dataplane::sai::RemoveCounterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Counter::SetCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetCounterAttributeRequest* req, + lemming::dataplane::sai::SetCounterAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Counter::GetCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetCounterAttributeRequest* req, + lemming::dataplane::sai::GetCounterAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Counter::GetCounterStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetCounterStatsRequest* req, + lemming::dataplane::sai::GetCounterStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/counter.h b/dataplane/standalone/saiserver/counter.h new file mode 100644 index 00000000..f24600ed --- /dev/null +++ b/dataplane/standalone/saiserver/counter.h @@ -0,0 +1,60 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_COUNTER_H_ +#define DATAPLANE_STANDALONE_SAI_COUNTER_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/counter.grpc.pb.h" +#include "dataplane/proto/sai/counter.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Counter final : public lemming::dataplane::sai::Counter::Service { + public: + grpc::Status CreateCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateCounterRequest* req, + lemming::dataplane::sai::CreateCounterResponse* resp); + + grpc::Status RemoveCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveCounterRequest* req, + lemming::dataplane::sai::RemoveCounterResponse* resp); + + grpc::Status SetCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetCounterAttributeRequest* req, + lemming::dataplane::sai::SetCounterAttributeResponse* resp); + + grpc::Status GetCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetCounterAttributeRequest* req, + lemming::dataplane::sai::GetCounterAttributeResponse* resp); + + grpc::Status GetCounterStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetCounterStatsRequest* req, + lemming::dataplane::sai::GetCounterStatsResponse* resp); + + sai_counter_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_COUNTER_H_ diff --git a/dataplane/standalone/saiserver/debug_counter.cc b/dataplane/standalone/saiserver/debug_counter.cc new file mode 100644 index 00000000..23b7d1c3 --- /dev/null +++ b/dataplane/standalone/saiserver/debug_counter.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/debug_counter.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/debug_counter.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status DebugCounter::CreateDebugCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDebugCounterRequest* req, + lemming::dataplane::sai::CreateDebugCounterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status DebugCounter::RemoveDebugCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDebugCounterRequest* req, + lemming::dataplane::sai::RemoveDebugCounterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status DebugCounter::SetDebugCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDebugCounterAttributeRequest* req, + lemming::dataplane::sai::SetDebugCounterAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status DebugCounter::GetDebugCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDebugCounterAttributeRequest* req, + lemming::dataplane::sai::GetDebugCounterAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/debug_counter.h b/dataplane/standalone/saiserver/debug_counter.h new file mode 100644 index 00000000..4f43e1e4 --- /dev/null +++ b/dataplane/standalone/saiserver/debug_counter.h @@ -0,0 +1,56 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_DEBUG_COUNTER_H_ +#define DATAPLANE_STANDALONE_SAI_DEBUG_COUNTER_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/debug_counter.grpc.pb.h" +#include "dataplane/proto/sai/debug_counter.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class DebugCounter final + : public lemming::dataplane::sai::DebugCounter::Service { + public: + grpc::Status CreateDebugCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDebugCounterRequest* req, + lemming::dataplane::sai::CreateDebugCounterResponse* resp); + + grpc::Status RemoveDebugCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDebugCounterRequest* req, + lemming::dataplane::sai::RemoveDebugCounterResponse* resp); + + grpc::Status SetDebugCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDebugCounterAttributeRequest* req, + lemming::dataplane::sai::SetDebugCounterAttributeResponse* resp); + + grpc::Status GetDebugCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDebugCounterAttributeRequest* req, + lemming::dataplane::sai::GetDebugCounterAttributeResponse* resp); + + sai_debug_counter_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_DEBUG_COUNTER_H_ diff --git a/dataplane/standalone/saiserver/dtel.cc b/dataplane/standalone/saiserver/dtel.cc new file mode 100644 index 00000000..7ca9bdb5 --- /dev/null +++ b/dataplane/standalone/saiserver/dtel.cc @@ -0,0 +1,162 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/dtel.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/dtel.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Dtel::CreateDtel( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelRequest* req, + lemming::dataplane::sai::CreateDtelResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::RemoveDtel( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelRequest* req, + lemming::dataplane::sai::RemoveDtelResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::SetDtelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelAttributeRequest* req, + lemming::dataplane::sai::SetDtelAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::GetDtelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelAttributeRequest* req, + lemming::dataplane::sai::GetDtelAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::CreateDtelQueueReport( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelQueueReportRequest* req, + lemming::dataplane::sai::CreateDtelQueueReportResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::RemoveDtelQueueReport( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelQueueReportRequest* req, + lemming::dataplane::sai::RemoveDtelQueueReportResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::SetDtelQueueReportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelQueueReportAttributeRequest* req, + lemming::dataplane::sai::SetDtelQueueReportAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::GetDtelQueueReportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelQueueReportAttributeRequest* req, + lemming::dataplane::sai::GetDtelQueueReportAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::CreateDtelIntSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelIntSessionRequest* req, + lemming::dataplane::sai::CreateDtelIntSessionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::RemoveDtelIntSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelIntSessionRequest* req, + lemming::dataplane::sai::RemoveDtelIntSessionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::SetDtelIntSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelIntSessionAttributeRequest* req, + lemming::dataplane::sai::SetDtelIntSessionAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::GetDtelIntSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelIntSessionAttributeRequest* req, + lemming::dataplane::sai::GetDtelIntSessionAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::CreateDtelReportSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelReportSessionRequest* req, + lemming::dataplane::sai::CreateDtelReportSessionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::RemoveDtelReportSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelReportSessionRequest* req, + lemming::dataplane::sai::RemoveDtelReportSessionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::SetDtelReportSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelReportSessionAttributeRequest* req, + lemming::dataplane::sai::SetDtelReportSessionAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::GetDtelReportSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelReportSessionAttributeRequest* req, + lemming::dataplane::sai::GetDtelReportSessionAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::CreateDtelEvent( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelEventRequest* req, + lemming::dataplane::sai::CreateDtelEventResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::RemoveDtelEvent( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelEventRequest* req, + lemming::dataplane::sai::RemoveDtelEventResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::SetDtelEventAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelEventAttributeRequest* req, + lemming::dataplane::sai::SetDtelEventAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Dtel::GetDtelEventAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelEventAttributeRequest* req, + lemming::dataplane::sai::GetDtelEventAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/dtel.h b/dataplane/standalone/saiserver/dtel.h new file mode 100644 index 00000000..32f33636 --- /dev/null +++ b/dataplane/standalone/saiserver/dtel.h @@ -0,0 +1,133 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_DTEL_H_ +#define DATAPLANE_STANDALONE_SAI_DTEL_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/dtel.grpc.pb.h" +#include "dataplane/proto/sai/dtel.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Dtel final : public lemming::dataplane::sai::Dtel::Service { + public: + grpc::Status CreateDtel(grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelRequest* req, + lemming::dataplane::sai::CreateDtelResponse* resp); + + grpc::Status RemoveDtel(grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelRequest* req, + lemming::dataplane::sai::RemoveDtelResponse* resp); + + grpc::Status SetDtelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelAttributeRequest* req, + lemming::dataplane::sai::SetDtelAttributeResponse* resp); + + grpc::Status GetDtelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelAttributeRequest* req, + lemming::dataplane::sai::GetDtelAttributeResponse* resp); + + grpc::Status CreateDtelQueueReport( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelQueueReportRequest* req, + lemming::dataplane::sai::CreateDtelQueueReportResponse* resp); + + grpc::Status RemoveDtelQueueReport( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelQueueReportRequest* req, + lemming::dataplane::sai::RemoveDtelQueueReportResponse* resp); + + grpc::Status SetDtelQueueReportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelQueueReportAttributeRequest* req, + lemming::dataplane::sai::SetDtelQueueReportAttributeResponse* resp); + + grpc::Status GetDtelQueueReportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelQueueReportAttributeRequest* req, + lemming::dataplane::sai::GetDtelQueueReportAttributeResponse* resp); + + grpc::Status CreateDtelIntSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelIntSessionRequest* req, + lemming::dataplane::sai::CreateDtelIntSessionResponse* resp); + + grpc::Status RemoveDtelIntSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelIntSessionRequest* req, + lemming::dataplane::sai::RemoveDtelIntSessionResponse* resp); + + grpc::Status SetDtelIntSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelIntSessionAttributeRequest* req, + lemming::dataplane::sai::SetDtelIntSessionAttributeResponse* resp); + + grpc::Status GetDtelIntSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelIntSessionAttributeRequest* req, + lemming::dataplane::sai::GetDtelIntSessionAttributeResponse* resp); + + grpc::Status CreateDtelReportSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelReportSessionRequest* req, + lemming::dataplane::sai::CreateDtelReportSessionResponse* resp); + + grpc::Status RemoveDtelReportSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelReportSessionRequest* req, + lemming::dataplane::sai::RemoveDtelReportSessionResponse* resp); + + grpc::Status SetDtelReportSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelReportSessionAttributeRequest* req, + lemming::dataplane::sai::SetDtelReportSessionAttributeResponse* resp); + + grpc::Status GetDtelReportSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelReportSessionAttributeRequest* req, + lemming::dataplane::sai::GetDtelReportSessionAttributeResponse* resp); + + grpc::Status CreateDtelEvent( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateDtelEventRequest* req, + lemming::dataplane::sai::CreateDtelEventResponse* resp); + + grpc::Status RemoveDtelEvent( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveDtelEventRequest* req, + lemming::dataplane::sai::RemoveDtelEventResponse* resp); + + grpc::Status SetDtelEventAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetDtelEventAttributeRequest* req, + lemming::dataplane::sai::SetDtelEventAttributeResponse* resp); + + grpc::Status GetDtelEventAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetDtelEventAttributeRequest* req, + lemming::dataplane::sai::GetDtelEventAttributeResponse* resp); + + sai_dtel_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_DTEL_H_ diff --git a/dataplane/standalone/saiserver/enum.cc b/dataplane/standalone/saiserver/enum.cc new file mode 100644 index 00000000..1d417bdd --- /dev/null +++ b/dataplane/standalone/saiserver/enum.cc @@ -0,0 +1,27071 @@ + +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/enum.h" + +lemming::dataplane::sai::AclActionType convert_sai_acl_action_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_ACTION_TYPE_REDIRECT: + return lemming::dataplane::sai::ACL_ACTION_TYPE_REDIRECT; + + case SAI_ACL_ACTION_TYPE_ENDPOINT_IP: + return lemming::dataplane::sai::ACL_ACTION_TYPE_ENDPOINT_IP; + + case SAI_ACL_ACTION_TYPE_REDIRECT_LIST: + return lemming::dataplane::sai::ACL_ACTION_TYPE_REDIRECT_LIST; + + case SAI_ACL_ACTION_TYPE_PACKET_ACTION: + return lemming::dataplane::sai::ACL_ACTION_TYPE_PACKET_ACTION; + + case SAI_ACL_ACTION_TYPE_FLOOD: + return lemming::dataplane::sai::ACL_ACTION_TYPE_FLOOD; + + case SAI_ACL_ACTION_TYPE_COUNTER: + return lemming::dataplane::sai::ACL_ACTION_TYPE_COUNTER; + + case SAI_ACL_ACTION_TYPE_MIRROR_INGRESS: + return lemming::dataplane::sai::ACL_ACTION_TYPE_MIRROR_INGRESS; + + case SAI_ACL_ACTION_TYPE_MIRROR_EGRESS: + return lemming::dataplane::sai::ACL_ACTION_TYPE_MIRROR_EGRESS; + + case SAI_ACL_ACTION_TYPE_SET_POLICER: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_POLICER; + + case SAI_ACL_ACTION_TYPE_DECREMENT_TTL: + return lemming::dataplane::sai::ACL_ACTION_TYPE_DECREMENT_TTL; + + case SAI_ACL_ACTION_TYPE_SET_TC: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_TC; + + case SAI_ACL_ACTION_TYPE_SET_PACKET_COLOR: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_PACKET_COLOR; + + case SAI_ACL_ACTION_TYPE_SET_INNER_VLAN_ID: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_INNER_VLAN_ID; + + case SAI_ACL_ACTION_TYPE_SET_INNER_VLAN_PRI: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_INNER_VLAN_PRI; + + case SAI_ACL_ACTION_TYPE_SET_OUTER_VLAN_ID: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_OUTER_VLAN_ID; + + case SAI_ACL_ACTION_TYPE_SET_OUTER_VLAN_PRI: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_OUTER_VLAN_PRI; + + case SAI_ACL_ACTION_TYPE_ADD_VLAN_ID: + return lemming::dataplane::sai::ACL_ACTION_TYPE_ADD_VLAN_ID; + + case SAI_ACL_ACTION_TYPE_ADD_VLAN_PRI: + return lemming::dataplane::sai::ACL_ACTION_TYPE_ADD_VLAN_PRI; + + case SAI_ACL_ACTION_TYPE_SET_SRC_MAC: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_SRC_MAC; + + case SAI_ACL_ACTION_TYPE_SET_DST_MAC: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DST_MAC; + + case SAI_ACL_ACTION_TYPE_SET_SRC_IP: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_SRC_IP; + + case SAI_ACL_ACTION_TYPE_SET_DST_IP: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DST_IP; + + case SAI_ACL_ACTION_TYPE_SET_SRC_IPV6: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_SRC_IPV6; + + case SAI_ACL_ACTION_TYPE_SET_DST_IPV6: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DST_IPV6; + + case SAI_ACL_ACTION_TYPE_SET_DSCP: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DSCP; + + case SAI_ACL_ACTION_TYPE_SET_ECN: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_ECN; + + case SAI_ACL_ACTION_TYPE_SET_L4_SRC_PORT: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_L4_SRC_PORT; + + case SAI_ACL_ACTION_TYPE_SET_L4_DST_PORT: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_L4_DST_PORT; + + case SAI_ACL_ACTION_TYPE_INGRESS_SAMPLEPACKET_ENABLE: + return lemming::dataplane::sai:: + ACL_ACTION_TYPE_INGRESS_SAMPLEPACKET_ENABLE; + + case SAI_ACL_ACTION_TYPE_EGRESS_SAMPLEPACKET_ENABLE: + return lemming::dataplane::sai:: + ACL_ACTION_TYPE_EGRESS_SAMPLEPACKET_ENABLE; + + case SAI_ACL_ACTION_TYPE_SET_ACL_META_DATA: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_ACL_META_DATA; + + case SAI_ACL_ACTION_TYPE_EGRESS_BLOCK_PORT_LIST: + return lemming::dataplane::sai::ACL_ACTION_TYPE_EGRESS_BLOCK_PORT_LIST; + + case SAI_ACL_ACTION_TYPE_SET_USER_TRAP_ID: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_USER_TRAP_ID; + + case SAI_ACL_ACTION_TYPE_SET_DO_NOT_LEARN: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DO_NOT_LEARN; + + case SAI_ACL_ACTION_TYPE_ACL_DTEL_FLOW_OP: + return lemming::dataplane::sai::ACL_ACTION_TYPE_ACL_DTEL_FLOW_OP; + + case SAI_ACL_ACTION_TYPE_DTEL_INT_SESSION: + return lemming::dataplane::sai::ACL_ACTION_TYPE_DTEL_INT_SESSION; + + case SAI_ACL_ACTION_TYPE_DTEL_DROP_REPORT_ENABLE: + return lemming::dataplane::sai::ACL_ACTION_TYPE_DTEL_DROP_REPORT_ENABLE; + + case SAI_ACL_ACTION_TYPE_DTEL_TAIL_DROP_REPORT_ENABLE: + return lemming::dataplane::sai:: + ACL_ACTION_TYPE_DTEL_TAIL_DROP_REPORT_ENABLE; + + case SAI_ACL_ACTION_TYPE_DTEL_FLOW_SAMPLE_PERCENT: + return lemming::dataplane::sai::ACL_ACTION_TYPE_DTEL_FLOW_SAMPLE_PERCENT; + + case SAI_ACL_ACTION_TYPE_DTEL_REPORT_ALL_PACKETS: + return lemming::dataplane::sai::ACL_ACTION_TYPE_DTEL_REPORT_ALL_PACKETS; + + case SAI_ACL_ACTION_TYPE_NO_NAT: + return lemming::dataplane::sai::ACL_ACTION_TYPE_NO_NAT; + + case SAI_ACL_ACTION_TYPE_INT_INSERT: + return lemming::dataplane::sai::ACL_ACTION_TYPE_INT_INSERT; + + case SAI_ACL_ACTION_TYPE_INT_DELETE: + return lemming::dataplane::sai::ACL_ACTION_TYPE_INT_DELETE; + + case SAI_ACL_ACTION_TYPE_INT_REPORT_FLOW: + return lemming::dataplane::sai::ACL_ACTION_TYPE_INT_REPORT_FLOW; + + case SAI_ACL_ACTION_TYPE_INT_REPORT_DROPS: + return lemming::dataplane::sai::ACL_ACTION_TYPE_INT_REPORT_DROPS; + + case SAI_ACL_ACTION_TYPE_INT_REPORT_TAIL_DROPS: + return lemming::dataplane::sai::ACL_ACTION_TYPE_INT_REPORT_TAIL_DROPS; + + case SAI_ACL_ACTION_TYPE_TAM_INT_OBJECT: + return lemming::dataplane::sai::ACL_ACTION_TYPE_TAM_INT_OBJECT; + + case SAI_ACL_ACTION_TYPE_SET_ISOLATION_GROUP: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_ISOLATION_GROUP; + + case SAI_ACL_ACTION_TYPE_MACSEC_FLOW: + return lemming::dataplane::sai::ACL_ACTION_TYPE_MACSEC_FLOW; + + case SAI_ACL_ACTION_TYPE_SET_LAG_HASH_ID: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_LAG_HASH_ID; + + case SAI_ACL_ACTION_TYPE_SET_ECMP_HASH_ID: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_ECMP_HASH_ID; + + case SAI_ACL_ACTION_TYPE_SET_VRF: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_VRF; + + case SAI_ACL_ACTION_TYPE_SET_FORWARDING_CLASS: + return lemming::dataplane::sai::ACL_ACTION_TYPE_SET_FORWARDING_CLASS; + + default: + return lemming::dataplane::sai::ACL_ACTION_TYPE_UNSPECIFIED; + } +} +sai_acl_action_type_t convert_sai_acl_action_type_t_to_sai( + lemming::dataplane::sai::AclActionType val) { + switch (val) { + case lemming::dataplane::sai::ACL_ACTION_TYPE_REDIRECT: + return SAI_ACL_ACTION_TYPE_REDIRECT; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_ENDPOINT_IP: + return SAI_ACL_ACTION_TYPE_ENDPOINT_IP; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_REDIRECT_LIST: + return SAI_ACL_ACTION_TYPE_REDIRECT_LIST; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_PACKET_ACTION: + return SAI_ACL_ACTION_TYPE_PACKET_ACTION; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_FLOOD: + return SAI_ACL_ACTION_TYPE_FLOOD; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_COUNTER: + return SAI_ACL_ACTION_TYPE_COUNTER; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_MIRROR_INGRESS: + return SAI_ACL_ACTION_TYPE_MIRROR_INGRESS; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_MIRROR_EGRESS: + return SAI_ACL_ACTION_TYPE_MIRROR_EGRESS; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_POLICER: + return SAI_ACL_ACTION_TYPE_SET_POLICER; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_DECREMENT_TTL: + return SAI_ACL_ACTION_TYPE_DECREMENT_TTL; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_TC: + return SAI_ACL_ACTION_TYPE_SET_TC; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_PACKET_COLOR: + return SAI_ACL_ACTION_TYPE_SET_PACKET_COLOR; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_INNER_VLAN_ID: + return SAI_ACL_ACTION_TYPE_SET_INNER_VLAN_ID; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_INNER_VLAN_PRI: + return SAI_ACL_ACTION_TYPE_SET_INNER_VLAN_PRI; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_OUTER_VLAN_ID: + return SAI_ACL_ACTION_TYPE_SET_OUTER_VLAN_ID; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_OUTER_VLAN_PRI: + return SAI_ACL_ACTION_TYPE_SET_OUTER_VLAN_PRI; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_ADD_VLAN_ID: + return SAI_ACL_ACTION_TYPE_ADD_VLAN_ID; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_ADD_VLAN_PRI: + return SAI_ACL_ACTION_TYPE_ADD_VLAN_PRI; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_SRC_MAC: + return SAI_ACL_ACTION_TYPE_SET_SRC_MAC; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DST_MAC: + return SAI_ACL_ACTION_TYPE_SET_DST_MAC; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_SRC_IP: + return SAI_ACL_ACTION_TYPE_SET_SRC_IP; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DST_IP: + return SAI_ACL_ACTION_TYPE_SET_DST_IP; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_SRC_IPV6: + return SAI_ACL_ACTION_TYPE_SET_SRC_IPV6; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DST_IPV6: + return SAI_ACL_ACTION_TYPE_SET_DST_IPV6; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DSCP: + return SAI_ACL_ACTION_TYPE_SET_DSCP; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_ECN: + return SAI_ACL_ACTION_TYPE_SET_ECN; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_L4_SRC_PORT: + return SAI_ACL_ACTION_TYPE_SET_L4_SRC_PORT; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_L4_DST_PORT: + return SAI_ACL_ACTION_TYPE_SET_L4_DST_PORT; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_INGRESS_SAMPLEPACKET_ENABLE: + return SAI_ACL_ACTION_TYPE_INGRESS_SAMPLEPACKET_ENABLE; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_EGRESS_SAMPLEPACKET_ENABLE: + return SAI_ACL_ACTION_TYPE_EGRESS_SAMPLEPACKET_ENABLE; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_ACL_META_DATA: + return SAI_ACL_ACTION_TYPE_SET_ACL_META_DATA; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_EGRESS_BLOCK_PORT_LIST: + return SAI_ACL_ACTION_TYPE_EGRESS_BLOCK_PORT_LIST; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_USER_TRAP_ID: + return SAI_ACL_ACTION_TYPE_SET_USER_TRAP_ID; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_DO_NOT_LEARN: + return SAI_ACL_ACTION_TYPE_SET_DO_NOT_LEARN; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_ACL_DTEL_FLOW_OP: + return SAI_ACL_ACTION_TYPE_ACL_DTEL_FLOW_OP; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_DTEL_INT_SESSION: + return SAI_ACL_ACTION_TYPE_DTEL_INT_SESSION; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_DTEL_DROP_REPORT_ENABLE: + return SAI_ACL_ACTION_TYPE_DTEL_DROP_REPORT_ENABLE; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_DTEL_TAIL_DROP_REPORT_ENABLE: + return SAI_ACL_ACTION_TYPE_DTEL_TAIL_DROP_REPORT_ENABLE; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_DTEL_FLOW_SAMPLE_PERCENT: + return SAI_ACL_ACTION_TYPE_DTEL_FLOW_SAMPLE_PERCENT; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_DTEL_REPORT_ALL_PACKETS: + return SAI_ACL_ACTION_TYPE_DTEL_REPORT_ALL_PACKETS; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_NO_NAT: + return SAI_ACL_ACTION_TYPE_NO_NAT; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_INT_INSERT: + return SAI_ACL_ACTION_TYPE_INT_INSERT; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_INT_DELETE: + return SAI_ACL_ACTION_TYPE_INT_DELETE; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_INT_REPORT_FLOW: + return SAI_ACL_ACTION_TYPE_INT_REPORT_FLOW; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_INT_REPORT_DROPS: + return SAI_ACL_ACTION_TYPE_INT_REPORT_DROPS; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_INT_REPORT_TAIL_DROPS: + return SAI_ACL_ACTION_TYPE_INT_REPORT_TAIL_DROPS; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_TAM_INT_OBJECT: + return SAI_ACL_ACTION_TYPE_TAM_INT_OBJECT; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_ISOLATION_GROUP: + return SAI_ACL_ACTION_TYPE_SET_ISOLATION_GROUP; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_MACSEC_FLOW: + return SAI_ACL_ACTION_TYPE_MACSEC_FLOW; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_LAG_HASH_ID: + return SAI_ACL_ACTION_TYPE_SET_LAG_HASH_ID; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_ECMP_HASH_ID: + return SAI_ACL_ACTION_TYPE_SET_ECMP_HASH_ID; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_VRF: + return SAI_ACL_ACTION_TYPE_SET_VRF; + + case lemming::dataplane::sai::ACL_ACTION_TYPE_SET_FORWARDING_CLASS: + return SAI_ACL_ACTION_TYPE_SET_FORWARDING_CLASS; + + default: + return SAI_ACL_ACTION_TYPE_REDIRECT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_acl_action_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_action_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_action_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_action_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclBindPointType +convert_sai_acl_bind_point_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ACL_BIND_POINT_TYPE_PORT: + return lemming::dataplane::sai::ACL_BIND_POINT_TYPE_PORT; + + case SAI_ACL_BIND_POINT_TYPE_LAG: + return lemming::dataplane::sai::ACL_BIND_POINT_TYPE_LAG; + + case SAI_ACL_BIND_POINT_TYPE_VLAN: + return lemming::dataplane::sai::ACL_BIND_POINT_TYPE_VLAN; + + case SAI_ACL_BIND_POINT_TYPE_ROUTER_INTERFACE: + return lemming::dataplane::sai::ACL_BIND_POINT_TYPE_ROUTER_INTERFACE; + + case SAI_ACL_BIND_POINT_TYPE_SWITCH: + return lemming::dataplane::sai::ACL_BIND_POINT_TYPE_SWITCH; + + default: + return lemming::dataplane::sai::ACL_BIND_POINT_TYPE_UNSPECIFIED; + } +} +sai_acl_bind_point_type_t convert_sai_acl_bind_point_type_t_to_sai( + lemming::dataplane::sai::AclBindPointType val) { + switch (val) { + case lemming::dataplane::sai::ACL_BIND_POINT_TYPE_PORT: + return SAI_ACL_BIND_POINT_TYPE_PORT; + + case lemming::dataplane::sai::ACL_BIND_POINT_TYPE_LAG: + return SAI_ACL_BIND_POINT_TYPE_LAG; + + case lemming::dataplane::sai::ACL_BIND_POINT_TYPE_VLAN: + return SAI_ACL_BIND_POINT_TYPE_VLAN; + + case lemming::dataplane::sai::ACL_BIND_POINT_TYPE_ROUTER_INTERFACE: + return SAI_ACL_BIND_POINT_TYPE_ROUTER_INTERFACE; + + case lemming::dataplane::sai::ACL_BIND_POINT_TYPE_SWITCH: + return SAI_ACL_BIND_POINT_TYPE_SWITCH; + + default: + return SAI_ACL_BIND_POINT_TYPE_PORT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_acl_bind_point_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_bind_point_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_bind_point_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_bind_point_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclCounterAttr convert_sai_acl_counter_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_COUNTER_ATTR_TABLE_ID: + return lemming::dataplane::sai::ACL_COUNTER_ATTR_TABLE_ID; + + case SAI_ACL_COUNTER_ATTR_ENABLE_PACKET_COUNT: + return lemming::dataplane::sai::ACL_COUNTER_ATTR_ENABLE_PACKET_COUNT; + + case SAI_ACL_COUNTER_ATTR_ENABLE_BYTE_COUNT: + return lemming::dataplane::sai::ACL_COUNTER_ATTR_ENABLE_BYTE_COUNT; + + case SAI_ACL_COUNTER_ATTR_PACKETS: + return lemming::dataplane::sai::ACL_COUNTER_ATTR_PACKETS; + + case SAI_ACL_COUNTER_ATTR_BYTES: + return lemming::dataplane::sai::ACL_COUNTER_ATTR_BYTES; + + case SAI_ACL_COUNTER_ATTR_LABEL: + return lemming::dataplane::sai::ACL_COUNTER_ATTR_LABEL; + + default: + return lemming::dataplane::sai::ACL_COUNTER_ATTR_UNSPECIFIED; + } +} +sai_acl_counter_attr_t convert_sai_acl_counter_attr_t_to_sai( + lemming::dataplane::sai::AclCounterAttr val) { + switch (val) { + case lemming::dataplane::sai::ACL_COUNTER_ATTR_TABLE_ID: + return SAI_ACL_COUNTER_ATTR_TABLE_ID; + + case lemming::dataplane::sai::ACL_COUNTER_ATTR_ENABLE_PACKET_COUNT: + return SAI_ACL_COUNTER_ATTR_ENABLE_PACKET_COUNT; + + case lemming::dataplane::sai::ACL_COUNTER_ATTR_ENABLE_BYTE_COUNT: + return SAI_ACL_COUNTER_ATTR_ENABLE_BYTE_COUNT; + + case lemming::dataplane::sai::ACL_COUNTER_ATTR_PACKETS: + return SAI_ACL_COUNTER_ATTR_PACKETS; + + case lemming::dataplane::sai::ACL_COUNTER_ATTR_BYTES: + return SAI_ACL_COUNTER_ATTR_BYTES; + + case lemming::dataplane::sai::ACL_COUNTER_ATTR_LABEL: + return SAI_ACL_COUNTER_ATTR_LABEL; + + default: + return SAI_ACL_COUNTER_ATTR_TABLE_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_acl_counter_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_counter_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_counter_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_counter_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclDtelFlowOp convert_sai_acl_dtel_flow_op_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_DTEL_FLOW_OP_NOP: + return lemming::dataplane::sai::ACL_DTEL_FLOW_OP_NOP; + + case SAI_ACL_DTEL_FLOW_OP_INT: + return lemming::dataplane::sai::ACL_DTEL_FLOW_OP_INT; + + case SAI_ACL_DTEL_FLOW_OP_IOAM: + return lemming::dataplane::sai::ACL_DTEL_FLOW_OP_IOAM; + + case SAI_ACL_DTEL_FLOW_OP_POSTCARD: + return lemming::dataplane::sai::ACL_DTEL_FLOW_OP_POSTCARD; + + default: + return lemming::dataplane::sai::ACL_DTEL_FLOW_OP_UNSPECIFIED; + } +} +sai_acl_dtel_flow_op_t convert_sai_acl_dtel_flow_op_t_to_sai( + lemming::dataplane::sai::AclDtelFlowOp val) { + switch (val) { + case lemming::dataplane::sai::ACL_DTEL_FLOW_OP_NOP: + return SAI_ACL_DTEL_FLOW_OP_NOP; + + case lemming::dataplane::sai::ACL_DTEL_FLOW_OP_INT: + return SAI_ACL_DTEL_FLOW_OP_INT; + + case lemming::dataplane::sai::ACL_DTEL_FLOW_OP_IOAM: + return SAI_ACL_DTEL_FLOW_OP_IOAM; + + case lemming::dataplane::sai::ACL_DTEL_FLOW_OP_POSTCARD: + return SAI_ACL_DTEL_FLOW_OP_POSTCARD; + + default: + return SAI_ACL_DTEL_FLOW_OP_NOP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_acl_dtel_flow_op_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_dtel_flow_op_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_dtel_flow_op_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_dtel_flow_op_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclEntryAttr convert_sai_acl_entry_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_ENTRY_ATTR_TABLE_ID: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_TABLE_ID; + + case SAI_ACL_ENTRY_ATTR_PRIORITY: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_PRIORITY; + + case SAI_ACL_ENTRY_ATTR_ADMIN_STATE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ADMIN_STATE; + + case SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6; + + case SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD3: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD3; + + case SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD2: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD2; + + case SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD1: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD1; + + case SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD0: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD0; + + case SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6; + + case SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD3: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD3; + + case SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD2: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD2; + + case SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD1: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD1; + + case SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD0: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD0; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IPV6: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_SRC_IPV6; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IPV6: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_DST_IPV6; + + case SAI_ACL_ENTRY_ATTR_FIELD_SRC_MAC: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_MAC; + + case SAI_ACL_ENTRY_ATTR_FIELD_DST_MAC: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_MAC; + + case SAI_ACL_ENTRY_ATTR_FIELD_SRC_IP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IP; + + case SAI_ACL_ENTRY_ATTR_FIELD_DST_IP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IP; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_SRC_IP; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_DST_IP; + + case SAI_ACL_ENTRY_ATTR_FIELD_IN_PORTS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IN_PORTS; + + case SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORTS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUT_PORTS; + + case SAI_ACL_ENTRY_ATTR_FIELD_IN_PORT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IN_PORT; + + case SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUT_PORT; + + case SAI_ACL_ENTRY_ATTR_FIELD_SRC_PORT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_PORT; + + case SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_ID: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_ID; + + case SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_PRI: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_PRI; + + case SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_CFI: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_CFI; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_ID: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_VLAN_ID; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_PRI: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_VLAN_PRI; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_CFI: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_VLAN_CFI; + + case SAI_ACL_ENTRY_ATTR_FIELD_L4_SRC_PORT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_L4_SRC_PORT; + + case SAI_ACL_ENTRY_ATTR_FIELD_L4_DST_PORT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_L4_DST_PORT; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_SRC_PORT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_L4_SRC_PORT; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_DST_PORT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_L4_DST_PORT; + + case SAI_ACL_ENTRY_ATTR_FIELD_ETHER_TYPE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ETHER_TYPE; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_ETHER_TYPE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_ETHER_TYPE; + + case SAI_ACL_ENTRY_ATTR_FIELD_IP_PROTOCOL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IP_PROTOCOL; + + case SAI_ACL_ENTRY_ATTR_FIELD_INNER_IP_PROTOCOL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_IP_PROTOCOL; + + case SAI_ACL_ENTRY_ATTR_FIELD_IP_IDENTIFICATION: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IP_IDENTIFICATION; + + case SAI_ACL_ENTRY_ATTR_FIELD_DSCP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DSCP; + + case SAI_ACL_ENTRY_ATTR_FIELD_ECN: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ECN; + + case SAI_ACL_ENTRY_ATTR_FIELD_TTL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TTL; + + case SAI_ACL_ENTRY_ATTR_FIELD_TOS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TOS; + + case SAI_ACL_ENTRY_ATTR_FIELD_IP_FLAGS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IP_FLAGS; + + case SAI_ACL_ENTRY_ATTR_FIELD_TCP_FLAGS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TCP_FLAGS; + + case SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_TYPE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ACL_IP_TYPE; + + case SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_FRAG: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ACL_IP_FRAG; + + case SAI_ACL_ENTRY_ATTR_FIELD_IPV6_FLOW_LABEL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IPV6_FLOW_LABEL; + + case SAI_ACL_ENTRY_ATTR_FIELD_TC: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TC; + + case SAI_ACL_ENTRY_ATTR_FIELD_ICMP_TYPE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ICMP_TYPE; + + case SAI_ACL_ENTRY_ATTR_FIELD_ICMP_CODE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ICMP_CODE; + + case SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_TYPE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ICMPV6_TYPE; + + case SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_CODE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ICMPV6_CODE; + + case SAI_ACL_ENTRY_ATTR_FIELD_PACKET_VLAN: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_PACKET_VLAN; + + case SAI_ACL_ENTRY_ATTR_FIELD_TUNNEL_VNI: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TUNNEL_VNI; + + case SAI_ACL_ENTRY_ATTR_FIELD_HAS_VLAN_TAG: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_HAS_VLAN_TAG; + + case SAI_ACL_ENTRY_ATTR_FIELD_MACSEC_SCI: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MACSEC_SCI; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_LABEL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_LABEL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_TTL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_TTL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_EXP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_EXP; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_BOS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_BOS; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_LABEL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_LABEL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_TTL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_TTL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_EXP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_EXP; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_BOS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_BOS; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_LABEL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_LABEL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_TTL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_TTL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_EXP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_EXP; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_BOS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_BOS; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_LABEL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_LABEL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_TTL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_TTL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_EXP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_EXP; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_BOS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_BOS; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_LABEL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_LABEL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_TTL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_TTL; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_EXP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_EXP; + + case SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_BOS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_BOS; + + case SAI_ACL_ENTRY_ATTR_FIELD_FDB_DST_USER_META: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_FDB_DST_USER_META; + + case SAI_ACL_ENTRY_ATTR_FIELD_ROUTE_DST_USER_META: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ROUTE_DST_USER_META; + + case SAI_ACL_ENTRY_ATTR_FIELD_NEIGHBOR_DST_USER_META: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_FIELD_NEIGHBOR_DST_USER_META; + + case SAI_ACL_ENTRY_ATTR_FIELD_PORT_USER_META: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_PORT_USER_META; + + case SAI_ACL_ENTRY_ATTR_FIELD_VLAN_USER_META: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_VLAN_USER_META; + + case SAI_ACL_ENTRY_ATTR_FIELD_ACL_USER_META: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ACL_USER_META; + + case SAI_ACL_ENTRY_ATTR_FIELD_FDB_NPU_META_DST_HIT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_FDB_NPU_META_DST_HIT; + + case SAI_ACL_ENTRY_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT; + + case SAI_ACL_ENTRY_ATTR_FIELD_ROUTE_NPU_META_DST_HIT: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_FIELD_ROUTE_NPU_META_DST_HIT; + + case SAI_ACL_ENTRY_ATTR_FIELD_BTH_OPCODE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_BTH_OPCODE; + + case SAI_ACL_ENTRY_ATTR_FIELD_AETH_SYNDROME: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_AETH_SYNDROME; + + case SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN; + + case SAI_ACL_ENTRY_ATTR_FIELD_ACL_RANGE_TYPE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ACL_RANGE_TYPE; + + case SAI_ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER; + + case SAI_ACL_ENTRY_ATTR_FIELD_GRE_KEY: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_GRE_KEY; + + case SAI_ACL_ENTRY_ATTR_FIELD_TAM_INT_TYPE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TAM_INT_TYPE; + + case SAI_ACL_ENTRY_ATTR_ACTION_REDIRECT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_REDIRECT; + + case SAI_ACL_ENTRY_ATTR_ACTION_ENDPOINT_IP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_ENDPOINT_IP; + + case SAI_ACL_ENTRY_ATTR_ACTION_REDIRECT_LIST: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_REDIRECT_LIST; + + case SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_PACKET_ACTION; + + case SAI_ACL_ENTRY_ATTR_ACTION_FLOOD: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_FLOOD; + + case SAI_ACL_ENTRY_ATTR_ACTION_COUNTER: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_COUNTER; + + case SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_INGRESS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_MIRROR_INGRESS; + + case SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_EGRESS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_MIRROR_EGRESS; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_POLICER: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_POLICER; + + case SAI_ACL_ENTRY_ATTR_ACTION_DECREMENT_TTL: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_DECREMENT_TTL; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_TC: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_TC; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_PACKET_COLOR: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_PACKET_COLOR; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_ID: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_ID; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_PRI: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_PRI; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_ID: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_ID; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_PRI: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_PRI; + + case SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_ID: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_ADD_VLAN_ID; + + case SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_PRI: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_ADD_VLAN_PRI; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_MAC: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_SRC_MAC; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_MAC: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DST_MAC; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_SRC_IP; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DST_IP; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IPV6: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_SRC_IPV6; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IPV6: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DST_IPV6; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_DSCP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DSCP; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_ECN: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_ECN; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_SRC_PORT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_L4_SRC_PORT; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_DST_PORT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_L4_DST_PORT; + + case SAI_ACL_ENTRY_ATTR_ACTION_INGRESS_SAMPLEPACKET_ENABLE: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_INGRESS_SAMPLEPACKET_ENABLE; + + case SAI_ACL_ENTRY_ATTR_ACTION_EGRESS_SAMPLEPACKET_ENABLE: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_EGRESS_SAMPLEPACKET_ENABLE; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA; + + case SAI_ACL_ENTRY_ATTR_ACTION_EGRESS_BLOCK_PORT_LIST: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_EGRESS_BLOCK_PORT_LIST; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_USER_TRAP_ID: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_USER_TRAP_ID; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_DO_NOT_LEARN: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DO_NOT_LEARN; + + case SAI_ACL_ENTRY_ATTR_ACTION_ACL_DTEL_FLOW_OP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_ACL_DTEL_FLOW_OP; + + case SAI_ACL_ENTRY_ATTR_ACTION_DTEL_INT_SESSION: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_DTEL_INT_SESSION; + + case SAI_ACL_ENTRY_ATTR_ACTION_DTEL_DROP_REPORT_ENABLE: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_DTEL_DROP_REPORT_ENABLE; + + case SAI_ACL_ENTRY_ATTR_ACTION_DTEL_TAIL_DROP_REPORT_ENABLE: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_DTEL_TAIL_DROP_REPORT_ENABLE; + + case SAI_ACL_ENTRY_ATTR_ACTION_DTEL_FLOW_SAMPLE_PERCENT: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_DTEL_FLOW_SAMPLE_PERCENT; + + case SAI_ACL_ENTRY_ATTR_ACTION_DTEL_REPORT_ALL_PACKETS: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_DTEL_REPORT_ALL_PACKETS; + + case SAI_ACL_ENTRY_ATTR_ACTION_NO_NAT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_NO_NAT; + + case SAI_ACL_ENTRY_ATTR_ACTION_INT_INSERT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_INT_INSERT; + + case SAI_ACL_ENTRY_ATTR_ACTION_INT_DELETE: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_INT_DELETE; + + case SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_FLOW: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_INT_REPORT_FLOW; + + case SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_DROPS: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_INT_REPORT_DROPS; + + case SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_TAIL_DROPS: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_INT_REPORT_TAIL_DROPS; + + case SAI_ACL_ENTRY_ATTR_ACTION_TAM_INT_OBJECT: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_TAM_INT_OBJECT; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_ISOLATION_GROUP: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_ISOLATION_GROUP; + + case SAI_ACL_ENTRY_ATTR_ACTION_MACSEC_FLOW: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_MACSEC_FLOW; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_LAG_HASH_ID: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_LAG_HASH_ID; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_ECMP_HASH_ID: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_ECMP_HASH_ID; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_VRF: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_VRF; + + case SAI_ACL_ENTRY_ATTR_ACTION_SET_FORWARDING_CLASS: + return lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_SET_FORWARDING_CLASS; + + default: + return lemming::dataplane::sai::ACL_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_acl_entry_attr_t convert_sai_acl_entry_attr_t_to_sai( + lemming::dataplane::sai::AclEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::ACL_ENTRY_ATTR_TABLE_ID: + return SAI_ACL_ENTRY_ATTR_TABLE_ID; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_PRIORITY: + return SAI_ACL_ENTRY_ATTR_PRIORITY; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ADMIN_STATE: + return SAI_ACL_ENTRY_ATTR_ADMIN_STATE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6: + return SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD3: + return SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD3; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD2: + return SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD2; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD1: + return SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD1; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD0: + return SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD0; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6: + return SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD3: + return SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD3; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD2: + return SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD2; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD1: + return SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD1; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD0: + return SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD0; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_SRC_IPV6: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IPV6; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_DST_IPV6: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IPV6; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_MAC: + return SAI_ACL_ENTRY_ATTR_FIELD_SRC_MAC; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_MAC: + return SAI_ACL_ENTRY_ATTR_FIELD_DST_MAC; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_IP: + return SAI_ACL_ENTRY_ATTR_FIELD_SRC_IP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DST_IP: + return SAI_ACL_ENTRY_ATTR_FIELD_DST_IP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_SRC_IP: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_DST_IP: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IN_PORTS: + return SAI_ACL_ENTRY_ATTR_FIELD_IN_PORTS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUT_PORTS: + return SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORTS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IN_PORT: + return SAI_ACL_ENTRY_ATTR_FIELD_IN_PORT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUT_PORT: + return SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_SRC_PORT: + return SAI_ACL_ENTRY_ATTR_FIELD_SRC_PORT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_ID: + return SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_ID; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_PRI: + return SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_PRI; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_CFI: + return SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_CFI; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_VLAN_ID: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_ID; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_VLAN_PRI: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_PRI; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_VLAN_CFI: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_CFI; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_L4_SRC_PORT: + return SAI_ACL_ENTRY_ATTR_FIELD_L4_SRC_PORT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_L4_DST_PORT: + return SAI_ACL_ENTRY_ATTR_FIELD_L4_DST_PORT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_L4_SRC_PORT: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_SRC_PORT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_L4_DST_PORT: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_DST_PORT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ETHER_TYPE: + return SAI_ACL_ENTRY_ATTR_FIELD_ETHER_TYPE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_ETHER_TYPE: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_ETHER_TYPE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IP_PROTOCOL: + return SAI_ACL_ENTRY_ATTR_FIELD_IP_PROTOCOL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_INNER_IP_PROTOCOL: + return SAI_ACL_ENTRY_ATTR_FIELD_INNER_IP_PROTOCOL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IP_IDENTIFICATION: + return SAI_ACL_ENTRY_ATTR_FIELD_IP_IDENTIFICATION; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_DSCP: + return SAI_ACL_ENTRY_ATTR_FIELD_DSCP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ECN: + return SAI_ACL_ENTRY_ATTR_FIELD_ECN; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TTL: + return SAI_ACL_ENTRY_ATTR_FIELD_TTL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TOS: + return SAI_ACL_ENTRY_ATTR_FIELD_TOS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IP_FLAGS: + return SAI_ACL_ENTRY_ATTR_FIELD_IP_FLAGS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TCP_FLAGS: + return SAI_ACL_ENTRY_ATTR_FIELD_TCP_FLAGS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ACL_IP_TYPE: + return SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_TYPE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ACL_IP_FRAG: + return SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_FRAG; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IPV6_FLOW_LABEL: + return SAI_ACL_ENTRY_ATTR_FIELD_IPV6_FLOW_LABEL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TC: + return SAI_ACL_ENTRY_ATTR_FIELD_TC; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ICMP_TYPE: + return SAI_ACL_ENTRY_ATTR_FIELD_ICMP_TYPE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ICMP_CODE: + return SAI_ACL_ENTRY_ATTR_FIELD_ICMP_CODE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ICMPV6_TYPE: + return SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_TYPE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ICMPV6_CODE: + return SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_CODE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_PACKET_VLAN: + return SAI_ACL_ENTRY_ATTR_FIELD_PACKET_VLAN; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TUNNEL_VNI: + return SAI_ACL_ENTRY_ATTR_FIELD_TUNNEL_VNI; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_HAS_VLAN_TAG: + return SAI_ACL_ENTRY_ATTR_FIELD_HAS_VLAN_TAG; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MACSEC_SCI: + return SAI_ACL_ENTRY_ATTR_FIELD_MACSEC_SCI; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_LABEL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_LABEL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_TTL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_TTL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_EXP: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_EXP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_BOS: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_BOS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_LABEL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_LABEL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_TTL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_TTL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_EXP: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_EXP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_BOS: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_BOS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_LABEL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_LABEL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_TTL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_TTL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_EXP: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_EXP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_BOS: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_BOS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_LABEL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_LABEL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_TTL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_TTL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_EXP: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_EXP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_BOS: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_BOS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_LABEL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_LABEL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_TTL: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_TTL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_EXP: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_EXP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_BOS: + return SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_BOS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_FDB_DST_USER_META: + return SAI_ACL_ENTRY_ATTR_FIELD_FDB_DST_USER_META; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ROUTE_DST_USER_META: + return SAI_ACL_ENTRY_ATTR_FIELD_ROUTE_DST_USER_META; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_NEIGHBOR_DST_USER_META: + return SAI_ACL_ENTRY_ATTR_FIELD_NEIGHBOR_DST_USER_META; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_PORT_USER_META: + return SAI_ACL_ENTRY_ATTR_FIELD_PORT_USER_META; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_VLAN_USER_META: + return SAI_ACL_ENTRY_ATTR_FIELD_VLAN_USER_META; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ACL_USER_META: + return SAI_ACL_ENTRY_ATTR_FIELD_ACL_USER_META; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_FDB_NPU_META_DST_HIT: + return SAI_ACL_ENTRY_ATTR_FIELD_FDB_NPU_META_DST_HIT; + + case lemming::dataplane::sai:: + ACL_ENTRY_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT: + return SAI_ACL_ENTRY_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ROUTE_NPU_META_DST_HIT: + return SAI_ACL_ENTRY_ATTR_FIELD_ROUTE_NPU_META_DST_HIT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_BTH_OPCODE: + return SAI_ACL_ENTRY_ATTR_FIELD_BTH_OPCODE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_AETH_SYNDROME: + return SAI_ACL_ENTRY_ATTR_FIELD_AETH_SYNDROME; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN: + return SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_ACL_RANGE_TYPE: + return SAI_ACL_ENTRY_ATTR_FIELD_ACL_RANGE_TYPE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER: + return SAI_ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_GRE_KEY: + return SAI_ACL_ENTRY_ATTR_FIELD_GRE_KEY; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_FIELD_TAM_INT_TYPE: + return SAI_ACL_ENTRY_ATTR_FIELD_TAM_INT_TYPE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_REDIRECT: + return SAI_ACL_ENTRY_ATTR_ACTION_REDIRECT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_ENDPOINT_IP: + return SAI_ACL_ENTRY_ATTR_ACTION_ENDPOINT_IP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_REDIRECT_LIST: + return SAI_ACL_ENTRY_ATTR_ACTION_REDIRECT_LIST; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_PACKET_ACTION: + return SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_FLOOD: + return SAI_ACL_ENTRY_ATTR_ACTION_FLOOD; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_COUNTER: + return SAI_ACL_ENTRY_ATTR_ACTION_COUNTER; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_MIRROR_INGRESS: + return SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_INGRESS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_MIRROR_EGRESS: + return SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_EGRESS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_POLICER: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_POLICER; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_DECREMENT_TTL: + return SAI_ACL_ENTRY_ATTR_ACTION_DECREMENT_TTL; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_TC: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_TC; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_PACKET_COLOR: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_PACKET_COLOR; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_ID: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_ID; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_PRI: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_PRI; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_ID: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_ID; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_PRI: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_PRI; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_ADD_VLAN_ID: + return SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_ID; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_ADD_VLAN_PRI: + return SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_PRI; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_SRC_MAC: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_MAC; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DST_MAC: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_MAC; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_SRC_IP: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DST_IP: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_SRC_IPV6: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IPV6; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DST_IPV6: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IPV6; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DSCP: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_DSCP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_ECN: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_ECN; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_L4_SRC_PORT: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_SRC_PORT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_L4_DST_PORT: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_DST_PORT; + + case lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_INGRESS_SAMPLEPACKET_ENABLE: + return SAI_ACL_ENTRY_ATTR_ACTION_INGRESS_SAMPLEPACKET_ENABLE; + + case lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_EGRESS_SAMPLEPACKET_ENABLE: + return SAI_ACL_ENTRY_ATTR_ACTION_EGRESS_SAMPLEPACKET_ENABLE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_EGRESS_BLOCK_PORT_LIST: + return SAI_ACL_ENTRY_ATTR_ACTION_EGRESS_BLOCK_PORT_LIST; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_USER_TRAP_ID: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_USER_TRAP_ID; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_DO_NOT_LEARN: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_DO_NOT_LEARN; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_ACL_DTEL_FLOW_OP: + return SAI_ACL_ENTRY_ATTR_ACTION_ACL_DTEL_FLOW_OP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_DTEL_INT_SESSION: + return SAI_ACL_ENTRY_ATTR_ACTION_DTEL_INT_SESSION; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_DTEL_DROP_REPORT_ENABLE: + return SAI_ACL_ENTRY_ATTR_ACTION_DTEL_DROP_REPORT_ENABLE; + + case lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_DTEL_TAIL_DROP_REPORT_ENABLE: + return SAI_ACL_ENTRY_ATTR_ACTION_DTEL_TAIL_DROP_REPORT_ENABLE; + + case lemming::dataplane::sai:: + ACL_ENTRY_ATTR_ACTION_DTEL_FLOW_SAMPLE_PERCENT: + return SAI_ACL_ENTRY_ATTR_ACTION_DTEL_FLOW_SAMPLE_PERCENT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_DTEL_REPORT_ALL_PACKETS: + return SAI_ACL_ENTRY_ATTR_ACTION_DTEL_REPORT_ALL_PACKETS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_NO_NAT: + return SAI_ACL_ENTRY_ATTR_ACTION_NO_NAT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_INT_INSERT: + return SAI_ACL_ENTRY_ATTR_ACTION_INT_INSERT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_INT_DELETE: + return SAI_ACL_ENTRY_ATTR_ACTION_INT_DELETE; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_INT_REPORT_FLOW: + return SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_FLOW; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_INT_REPORT_DROPS: + return SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_DROPS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_INT_REPORT_TAIL_DROPS: + return SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_TAIL_DROPS; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_TAM_INT_OBJECT: + return SAI_ACL_ENTRY_ATTR_ACTION_TAM_INT_OBJECT; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_ISOLATION_GROUP: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_ISOLATION_GROUP; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_MACSEC_FLOW: + return SAI_ACL_ENTRY_ATTR_ACTION_MACSEC_FLOW; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_LAG_HASH_ID: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_LAG_HASH_ID; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_ECMP_HASH_ID: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_ECMP_HASH_ID; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_VRF: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_VRF; + + case lemming::dataplane::sai::ACL_ENTRY_ATTR_ACTION_SET_FORWARDING_CLASS: + return SAI_ACL_ENTRY_ATTR_ACTION_SET_FORWARDING_CLASS; + + default: + return SAI_ACL_ENTRY_ATTR_TABLE_ID; + } +} + +google::protobuf::RepeatedField convert_list_sai_acl_entry_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclIpFrag convert_sai_acl_ip_frag_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_IP_FRAG_ANY: + return lemming::dataplane::sai::ACL_IP_FRAG_ANY; + + case SAI_ACL_IP_FRAG_NON_FRAG: + return lemming::dataplane::sai::ACL_IP_FRAG_NON_FRAG; + + case SAI_ACL_IP_FRAG_NON_FRAG_OR_HEAD: + return lemming::dataplane::sai::ACL_IP_FRAG_NON_FRAG_OR_HEAD; + + case SAI_ACL_IP_FRAG_HEAD: + return lemming::dataplane::sai::ACL_IP_FRAG_HEAD; + + case SAI_ACL_IP_FRAG_NON_HEAD: + return lemming::dataplane::sai::ACL_IP_FRAG_NON_HEAD; + + default: + return lemming::dataplane::sai::ACL_IP_FRAG_UNSPECIFIED; + } +} +sai_acl_ip_frag_t convert_sai_acl_ip_frag_t_to_sai( + lemming::dataplane::sai::AclIpFrag val) { + switch (val) { + case lemming::dataplane::sai::ACL_IP_FRAG_ANY: + return SAI_ACL_IP_FRAG_ANY; + + case lemming::dataplane::sai::ACL_IP_FRAG_NON_FRAG: + return SAI_ACL_IP_FRAG_NON_FRAG; + + case lemming::dataplane::sai::ACL_IP_FRAG_NON_FRAG_OR_HEAD: + return SAI_ACL_IP_FRAG_NON_FRAG_OR_HEAD; + + case lemming::dataplane::sai::ACL_IP_FRAG_HEAD: + return SAI_ACL_IP_FRAG_HEAD; + + case lemming::dataplane::sai::ACL_IP_FRAG_NON_HEAD: + return SAI_ACL_IP_FRAG_NON_HEAD; + + default: + return SAI_ACL_IP_FRAG_ANY; + } +} + +google::protobuf::RepeatedField convert_list_sai_acl_ip_frag_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_ip_frag_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_ip_frag_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_ip_frag_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclIpType convert_sai_acl_ip_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_IP_TYPE_ANY: + return lemming::dataplane::sai::ACL_IP_TYPE_ANY; + + case SAI_ACL_IP_TYPE_IP: + return lemming::dataplane::sai::ACL_IP_TYPE_IP; + + case SAI_ACL_IP_TYPE_NON_IP: + return lemming::dataplane::sai::ACL_IP_TYPE_NON_IP; + + case SAI_ACL_IP_TYPE_IPV4ANY: + return lemming::dataplane::sai::ACL_IP_TYPE_IPV4ANY; + + case SAI_ACL_IP_TYPE_NON_IPV4: + return lemming::dataplane::sai::ACL_IP_TYPE_NON_IPV4; + + case SAI_ACL_IP_TYPE_IPV6ANY: + return lemming::dataplane::sai::ACL_IP_TYPE_IPV6ANY; + + case SAI_ACL_IP_TYPE_NON_IPV6: + return lemming::dataplane::sai::ACL_IP_TYPE_NON_IPV6; + + case SAI_ACL_IP_TYPE_ARP: + return lemming::dataplane::sai::ACL_IP_TYPE_ARP; + + case SAI_ACL_IP_TYPE_ARP_REQUEST: + return lemming::dataplane::sai::ACL_IP_TYPE_ARP_REQUEST; + + case SAI_ACL_IP_TYPE_ARP_REPLY: + return lemming::dataplane::sai::ACL_IP_TYPE_ARP_REPLY; + + default: + return lemming::dataplane::sai::ACL_IP_TYPE_UNSPECIFIED; + } +} +sai_acl_ip_type_t convert_sai_acl_ip_type_t_to_sai( + lemming::dataplane::sai::AclIpType val) { + switch (val) { + case lemming::dataplane::sai::ACL_IP_TYPE_ANY: + return SAI_ACL_IP_TYPE_ANY; + + case lemming::dataplane::sai::ACL_IP_TYPE_IP: + return SAI_ACL_IP_TYPE_IP; + + case lemming::dataplane::sai::ACL_IP_TYPE_NON_IP: + return SAI_ACL_IP_TYPE_NON_IP; + + case lemming::dataplane::sai::ACL_IP_TYPE_IPV4ANY: + return SAI_ACL_IP_TYPE_IPV4ANY; + + case lemming::dataplane::sai::ACL_IP_TYPE_NON_IPV4: + return SAI_ACL_IP_TYPE_NON_IPV4; + + case lemming::dataplane::sai::ACL_IP_TYPE_IPV6ANY: + return SAI_ACL_IP_TYPE_IPV6ANY; + + case lemming::dataplane::sai::ACL_IP_TYPE_NON_IPV6: + return SAI_ACL_IP_TYPE_NON_IPV6; + + case lemming::dataplane::sai::ACL_IP_TYPE_ARP: + return SAI_ACL_IP_TYPE_ARP; + + case lemming::dataplane::sai::ACL_IP_TYPE_ARP_REQUEST: + return SAI_ACL_IP_TYPE_ARP_REQUEST; + + case lemming::dataplane::sai::ACL_IP_TYPE_ARP_REPLY: + return SAI_ACL_IP_TYPE_ARP_REPLY; + + default: + return SAI_ACL_IP_TYPE_ANY; + } +} + +google::protobuf::RepeatedField convert_list_sai_acl_ip_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_ip_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_ip_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_ip_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclRangeAttr convert_sai_acl_range_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_RANGE_ATTR_TYPE: + return lemming::dataplane::sai::ACL_RANGE_ATTR_TYPE; + + case SAI_ACL_RANGE_ATTR_LIMIT: + return lemming::dataplane::sai::ACL_RANGE_ATTR_LIMIT; + + default: + return lemming::dataplane::sai::ACL_RANGE_ATTR_UNSPECIFIED; + } +} +sai_acl_range_attr_t convert_sai_acl_range_attr_t_to_sai( + lemming::dataplane::sai::AclRangeAttr val) { + switch (val) { + case lemming::dataplane::sai::ACL_RANGE_ATTR_TYPE: + return SAI_ACL_RANGE_ATTR_TYPE; + + case lemming::dataplane::sai::ACL_RANGE_ATTR_LIMIT: + return SAI_ACL_RANGE_ATTR_LIMIT; + + default: + return SAI_ACL_RANGE_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_acl_range_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_range_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_range_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_range_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclRangeType convert_sai_acl_range_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_RANGE_TYPE_L4_SRC_PORT_RANGE: + return lemming::dataplane::sai::ACL_RANGE_TYPE_L4_SRC_PORT_RANGE; + + case SAI_ACL_RANGE_TYPE_L4_DST_PORT_RANGE: + return lemming::dataplane::sai::ACL_RANGE_TYPE_L4_DST_PORT_RANGE; + + case SAI_ACL_RANGE_TYPE_OUTER_VLAN: + return lemming::dataplane::sai::ACL_RANGE_TYPE_OUTER_VLAN; + + case SAI_ACL_RANGE_TYPE_INNER_VLAN: + return lemming::dataplane::sai::ACL_RANGE_TYPE_INNER_VLAN; + + case SAI_ACL_RANGE_TYPE_PACKET_LENGTH: + return lemming::dataplane::sai::ACL_RANGE_TYPE_PACKET_LENGTH; + + default: + return lemming::dataplane::sai::ACL_RANGE_TYPE_UNSPECIFIED; + } +} +sai_acl_range_type_t convert_sai_acl_range_type_t_to_sai( + lemming::dataplane::sai::AclRangeType val) { + switch (val) { + case lemming::dataplane::sai::ACL_RANGE_TYPE_L4_SRC_PORT_RANGE: + return SAI_ACL_RANGE_TYPE_L4_SRC_PORT_RANGE; + + case lemming::dataplane::sai::ACL_RANGE_TYPE_L4_DST_PORT_RANGE: + return SAI_ACL_RANGE_TYPE_L4_DST_PORT_RANGE; + + case lemming::dataplane::sai::ACL_RANGE_TYPE_OUTER_VLAN: + return SAI_ACL_RANGE_TYPE_OUTER_VLAN; + + case lemming::dataplane::sai::ACL_RANGE_TYPE_INNER_VLAN: + return SAI_ACL_RANGE_TYPE_INNER_VLAN; + + case lemming::dataplane::sai::ACL_RANGE_TYPE_PACKET_LENGTH: + return SAI_ACL_RANGE_TYPE_PACKET_LENGTH; + + default: + return SAI_ACL_RANGE_TYPE_L4_SRC_PORT_RANGE; + } +} + +google::protobuf::RepeatedField convert_list_sai_acl_range_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_range_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_range_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_range_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclStage convert_sai_acl_stage_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_STAGE_INGRESS: + return lemming::dataplane::sai::ACL_STAGE_INGRESS; + + case SAI_ACL_STAGE_EGRESS: + return lemming::dataplane::sai::ACL_STAGE_EGRESS; + + case SAI_ACL_STAGE_INGRESS_MACSEC: + return lemming::dataplane::sai::ACL_STAGE_INGRESS_MACSEC; + + case SAI_ACL_STAGE_EGRESS_MACSEC: + return lemming::dataplane::sai::ACL_STAGE_EGRESS_MACSEC; + + case SAI_ACL_STAGE_PRE_INGRESS: + return lemming::dataplane::sai::ACL_STAGE_PRE_INGRESS; + + default: + return lemming::dataplane::sai::ACL_STAGE_UNSPECIFIED; + } +} +sai_acl_stage_t convert_sai_acl_stage_t_to_sai( + lemming::dataplane::sai::AclStage val) { + switch (val) { + case lemming::dataplane::sai::ACL_STAGE_INGRESS: + return SAI_ACL_STAGE_INGRESS; + + case lemming::dataplane::sai::ACL_STAGE_EGRESS: + return SAI_ACL_STAGE_EGRESS; + + case lemming::dataplane::sai::ACL_STAGE_INGRESS_MACSEC: + return SAI_ACL_STAGE_INGRESS_MACSEC; + + case lemming::dataplane::sai::ACL_STAGE_EGRESS_MACSEC: + return SAI_ACL_STAGE_EGRESS_MACSEC; + + case lemming::dataplane::sai::ACL_STAGE_PRE_INGRESS: + return SAI_ACL_STAGE_PRE_INGRESS; + + default: + return SAI_ACL_STAGE_INGRESS; + } +} + +google::protobuf::RepeatedField convert_list_sai_acl_stage_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_stage_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_stage_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_stage_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclTableAttr convert_sai_acl_table_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ACL_TABLE_ATTR_ACL_STAGE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_ACL_STAGE; + + case SAI_ACL_TABLE_ATTR_ACL_BIND_POINT_TYPE_LIST: + return lemming::dataplane::sai::ACL_TABLE_ATTR_ACL_BIND_POINT_TYPE_LIST; + + case SAI_ACL_TABLE_ATTR_SIZE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_SIZE; + + case SAI_ACL_TABLE_ATTR_ACL_ACTION_TYPE_LIST: + return lemming::dataplane::sai::ACL_TABLE_ATTR_ACL_ACTION_TYPE_LIST; + + case SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6; + + case SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD3: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD3; + + case SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD2: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD2; + + case SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD1: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD1; + + case SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD0: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD0; + + case SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6; + + case SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD3: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD3; + + case SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD2: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD2; + + case SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD1: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD1; + + case SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD0: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD0; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IPV6: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_SRC_IPV6; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IPV6: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_DST_IPV6; + + case SAI_ACL_TABLE_ATTR_FIELD_SRC_MAC: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_MAC; + + case SAI_ACL_TABLE_ATTR_FIELD_DST_MAC: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_MAC; + + case SAI_ACL_TABLE_ATTR_FIELD_SRC_IP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IP; + + case SAI_ACL_TABLE_ATTR_FIELD_DST_IP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IP; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_SRC_IP; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_DST_IP; + + case SAI_ACL_TABLE_ATTR_FIELD_IN_PORTS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IN_PORTS; + + case SAI_ACL_TABLE_ATTR_FIELD_OUT_PORTS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUT_PORTS; + + case SAI_ACL_TABLE_ATTR_FIELD_IN_PORT: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IN_PORT; + + case SAI_ACL_TABLE_ATTR_FIELD_OUT_PORT: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUT_PORT; + + case SAI_ACL_TABLE_ATTR_FIELD_SRC_PORT: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_PORT; + + case SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_ID: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUTER_VLAN_ID; + + case SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_PRI: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUTER_VLAN_PRI; + + case SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_CFI: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUTER_VLAN_CFI; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_ID: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_VLAN_ID; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_PRI: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_VLAN_PRI; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_CFI: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_VLAN_CFI; + + case SAI_ACL_TABLE_ATTR_FIELD_L4_SRC_PORT: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_L4_SRC_PORT; + + case SAI_ACL_TABLE_ATTR_FIELD_L4_DST_PORT: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_L4_DST_PORT; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_SRC_PORT: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_L4_SRC_PORT; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_DST_PORT: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_L4_DST_PORT; + + case SAI_ACL_TABLE_ATTR_FIELD_ETHER_TYPE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ETHER_TYPE; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_ETHER_TYPE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_ETHER_TYPE; + + case SAI_ACL_TABLE_ATTR_FIELD_IP_PROTOCOL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IP_PROTOCOL; + + case SAI_ACL_TABLE_ATTR_FIELD_INNER_IP_PROTOCOL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_IP_PROTOCOL; + + case SAI_ACL_TABLE_ATTR_FIELD_IP_IDENTIFICATION: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IP_IDENTIFICATION; + + case SAI_ACL_TABLE_ATTR_FIELD_DSCP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DSCP; + + case SAI_ACL_TABLE_ATTR_FIELD_ECN: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ECN; + + case SAI_ACL_TABLE_ATTR_FIELD_TTL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TTL; + + case SAI_ACL_TABLE_ATTR_FIELD_TOS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TOS; + + case SAI_ACL_TABLE_ATTR_FIELD_IP_FLAGS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IP_FLAGS; + + case SAI_ACL_TABLE_ATTR_FIELD_TCP_FLAGS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TCP_FLAGS; + + case SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE; + + case SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_FRAG: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ACL_IP_FRAG; + + case SAI_ACL_TABLE_ATTR_FIELD_IPV6_FLOW_LABEL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IPV6_FLOW_LABEL; + + case SAI_ACL_TABLE_ATTR_FIELD_TC: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TC; + + case SAI_ACL_TABLE_ATTR_FIELD_ICMP_TYPE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ICMP_TYPE; + + case SAI_ACL_TABLE_ATTR_FIELD_ICMP_CODE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ICMP_CODE; + + case SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_TYPE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ICMPV6_TYPE; + + case SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_CODE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ICMPV6_CODE; + + case SAI_ACL_TABLE_ATTR_FIELD_PACKET_VLAN: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_PACKET_VLAN; + + case SAI_ACL_TABLE_ATTR_FIELD_TUNNEL_VNI: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TUNNEL_VNI; + + case SAI_ACL_TABLE_ATTR_FIELD_HAS_VLAN_TAG: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_HAS_VLAN_TAG; + + case SAI_ACL_TABLE_ATTR_FIELD_MACSEC_SCI: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MACSEC_SCI; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_LABEL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_LABEL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_TTL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_TTL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_EXP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_EXP; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_BOS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_BOS; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_LABEL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_LABEL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_TTL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_TTL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_EXP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_EXP; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_BOS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_BOS; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_LABEL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_LABEL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_TTL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_TTL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_EXP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_EXP; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_BOS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_BOS; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_LABEL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_LABEL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_TTL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_TTL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_EXP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_EXP; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_BOS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_BOS; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_LABEL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_LABEL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_TTL: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_TTL; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_EXP: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_EXP; + + case SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_BOS: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_BOS; + + case SAI_ACL_TABLE_ATTR_FIELD_FDB_DST_USER_META: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_FDB_DST_USER_META; + + case SAI_ACL_TABLE_ATTR_FIELD_ROUTE_DST_USER_META: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ROUTE_DST_USER_META; + + case SAI_ACL_TABLE_ATTR_FIELD_NEIGHBOR_DST_USER_META: + return lemming::dataplane::sai:: + ACL_TABLE_ATTR_FIELD_NEIGHBOR_DST_USER_META; + + case SAI_ACL_TABLE_ATTR_FIELD_PORT_USER_META: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_PORT_USER_META; + + case SAI_ACL_TABLE_ATTR_FIELD_VLAN_USER_META: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_VLAN_USER_META; + + case SAI_ACL_TABLE_ATTR_FIELD_ACL_USER_META: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ACL_USER_META; + + case SAI_ACL_TABLE_ATTR_FIELD_FDB_NPU_META_DST_HIT: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_FDB_NPU_META_DST_HIT; + + case SAI_ACL_TABLE_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT: + return lemming::dataplane::sai:: + ACL_TABLE_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT; + + case SAI_ACL_TABLE_ATTR_FIELD_ROUTE_NPU_META_DST_HIT: + return lemming::dataplane::sai:: + ACL_TABLE_ATTR_FIELD_ROUTE_NPU_META_DST_HIT; + + case SAI_ACL_TABLE_ATTR_FIELD_BTH_OPCODE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_BTH_OPCODE; + + case SAI_ACL_TABLE_ATTR_FIELD_AETH_SYNDROME: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_AETH_SYNDROME; + + case SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN: + return lemming::dataplane::sai:: + ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN; + + case SAI_ACL_TABLE_ATTR_FIELD_ACL_RANGE_TYPE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ACL_RANGE_TYPE; + + case SAI_ACL_TABLE_ATTR_FIELD_IPV6_NEXT_HEADER: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IPV6_NEXT_HEADER; + + case SAI_ACL_TABLE_ATTR_FIELD_GRE_KEY: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_GRE_KEY; + + case SAI_ACL_TABLE_ATTR_FIELD_TAM_INT_TYPE: + return lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TAM_INT_TYPE; + + case SAI_ACL_TABLE_ATTR_ENTRY_LIST: + return lemming::dataplane::sai::ACL_TABLE_ATTR_ENTRY_LIST; + + case SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY: + return lemming::dataplane::sai::ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY; + + case SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER: + return lemming::dataplane::sai::ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER; + + default: + return lemming::dataplane::sai::ACL_TABLE_ATTR_UNSPECIFIED; + } +} +sai_acl_table_attr_t convert_sai_acl_table_attr_t_to_sai( + lemming::dataplane::sai::AclTableAttr val) { + switch (val) { + case lemming::dataplane::sai::ACL_TABLE_ATTR_ACL_STAGE: + return SAI_ACL_TABLE_ATTR_ACL_STAGE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_ACL_BIND_POINT_TYPE_LIST: + return SAI_ACL_TABLE_ATTR_ACL_BIND_POINT_TYPE_LIST; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_SIZE: + return SAI_ACL_TABLE_ATTR_SIZE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_ACL_ACTION_TYPE_LIST: + return SAI_ACL_TABLE_ATTR_ACL_ACTION_TYPE_LIST; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6: + return SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD3: + return SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD3; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD2: + return SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD2; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD1: + return SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD1; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD0: + return SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD0; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6: + return SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD3: + return SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD3; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD2: + return SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD2; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD1: + return SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD1; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD0: + return SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD0; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_SRC_IPV6: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IPV6; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_DST_IPV6: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IPV6; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_MAC: + return SAI_ACL_TABLE_ATTR_FIELD_SRC_MAC; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_MAC: + return SAI_ACL_TABLE_ATTR_FIELD_DST_MAC; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_IP: + return SAI_ACL_TABLE_ATTR_FIELD_SRC_IP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DST_IP: + return SAI_ACL_TABLE_ATTR_FIELD_DST_IP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_SRC_IP: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_DST_IP: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IN_PORTS: + return SAI_ACL_TABLE_ATTR_FIELD_IN_PORTS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUT_PORTS: + return SAI_ACL_TABLE_ATTR_FIELD_OUT_PORTS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IN_PORT: + return SAI_ACL_TABLE_ATTR_FIELD_IN_PORT; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUT_PORT: + return SAI_ACL_TABLE_ATTR_FIELD_OUT_PORT; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_SRC_PORT: + return SAI_ACL_TABLE_ATTR_FIELD_SRC_PORT; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUTER_VLAN_ID: + return SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_ID; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUTER_VLAN_PRI: + return SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_PRI; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_OUTER_VLAN_CFI: + return SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_CFI; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_VLAN_ID: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_ID; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_VLAN_PRI: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_PRI; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_VLAN_CFI: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_CFI; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_L4_SRC_PORT: + return SAI_ACL_TABLE_ATTR_FIELD_L4_SRC_PORT; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_L4_DST_PORT: + return SAI_ACL_TABLE_ATTR_FIELD_L4_DST_PORT; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_L4_SRC_PORT: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_SRC_PORT; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_L4_DST_PORT: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_DST_PORT; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ETHER_TYPE: + return SAI_ACL_TABLE_ATTR_FIELD_ETHER_TYPE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_ETHER_TYPE: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_ETHER_TYPE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IP_PROTOCOL: + return SAI_ACL_TABLE_ATTR_FIELD_IP_PROTOCOL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_INNER_IP_PROTOCOL: + return SAI_ACL_TABLE_ATTR_FIELD_INNER_IP_PROTOCOL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IP_IDENTIFICATION: + return SAI_ACL_TABLE_ATTR_FIELD_IP_IDENTIFICATION; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_DSCP: + return SAI_ACL_TABLE_ATTR_FIELD_DSCP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ECN: + return SAI_ACL_TABLE_ATTR_FIELD_ECN; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TTL: + return SAI_ACL_TABLE_ATTR_FIELD_TTL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TOS: + return SAI_ACL_TABLE_ATTR_FIELD_TOS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IP_FLAGS: + return SAI_ACL_TABLE_ATTR_FIELD_IP_FLAGS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TCP_FLAGS: + return SAI_ACL_TABLE_ATTR_FIELD_TCP_FLAGS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE: + return SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ACL_IP_FRAG: + return SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_FRAG; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IPV6_FLOW_LABEL: + return SAI_ACL_TABLE_ATTR_FIELD_IPV6_FLOW_LABEL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TC: + return SAI_ACL_TABLE_ATTR_FIELD_TC; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ICMP_TYPE: + return SAI_ACL_TABLE_ATTR_FIELD_ICMP_TYPE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ICMP_CODE: + return SAI_ACL_TABLE_ATTR_FIELD_ICMP_CODE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ICMPV6_TYPE: + return SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_TYPE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ICMPV6_CODE: + return SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_CODE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_PACKET_VLAN: + return SAI_ACL_TABLE_ATTR_FIELD_PACKET_VLAN; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TUNNEL_VNI: + return SAI_ACL_TABLE_ATTR_FIELD_TUNNEL_VNI; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_HAS_VLAN_TAG: + return SAI_ACL_TABLE_ATTR_FIELD_HAS_VLAN_TAG; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MACSEC_SCI: + return SAI_ACL_TABLE_ATTR_FIELD_MACSEC_SCI; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_LABEL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_LABEL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_TTL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_TTL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_EXP: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_EXP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_BOS: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_BOS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_LABEL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_LABEL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_TTL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_TTL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_EXP: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_EXP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_BOS: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_BOS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_LABEL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_LABEL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_TTL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_TTL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_EXP: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_EXP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_BOS: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_BOS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_LABEL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_LABEL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_TTL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_TTL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_EXP: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_EXP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_BOS: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_BOS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_LABEL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_LABEL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_TTL: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_TTL; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_EXP: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_EXP; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_BOS: + return SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_BOS; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_FDB_DST_USER_META: + return SAI_ACL_TABLE_ATTR_FIELD_FDB_DST_USER_META; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ROUTE_DST_USER_META: + return SAI_ACL_TABLE_ATTR_FIELD_ROUTE_DST_USER_META; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_NEIGHBOR_DST_USER_META: + return SAI_ACL_TABLE_ATTR_FIELD_NEIGHBOR_DST_USER_META; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_PORT_USER_META: + return SAI_ACL_TABLE_ATTR_FIELD_PORT_USER_META; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_VLAN_USER_META: + return SAI_ACL_TABLE_ATTR_FIELD_VLAN_USER_META; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ACL_USER_META: + return SAI_ACL_TABLE_ATTR_FIELD_ACL_USER_META; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_FDB_NPU_META_DST_HIT: + return SAI_ACL_TABLE_ATTR_FIELD_FDB_NPU_META_DST_HIT; + + case lemming::dataplane::sai:: + ACL_TABLE_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT: + return SAI_ACL_TABLE_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ROUTE_NPU_META_DST_HIT: + return SAI_ACL_TABLE_ATTR_FIELD_ROUTE_NPU_META_DST_HIT; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_BTH_OPCODE: + return SAI_ACL_TABLE_ATTR_FIELD_BTH_OPCODE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_AETH_SYNDROME: + return SAI_ACL_TABLE_ATTR_FIELD_AETH_SYNDROME; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN: + return SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_ACL_RANGE_TYPE: + return SAI_ACL_TABLE_ATTR_FIELD_ACL_RANGE_TYPE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_IPV6_NEXT_HEADER: + return SAI_ACL_TABLE_ATTR_FIELD_IPV6_NEXT_HEADER; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_GRE_KEY: + return SAI_ACL_TABLE_ATTR_FIELD_GRE_KEY; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_FIELD_TAM_INT_TYPE: + return SAI_ACL_TABLE_ATTR_FIELD_TAM_INT_TYPE; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_ENTRY_LIST: + return SAI_ACL_TABLE_ATTR_ENTRY_LIST; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY: + return SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY; + + case lemming::dataplane::sai::ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER: + return SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER; + + default: + return SAI_ACL_TABLE_ATTR_ACL_STAGE; + } +} + +google::protobuf::RepeatedField convert_list_sai_acl_table_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_table_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_table_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_table_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclTableGroupAttr +convert_sai_acl_table_group_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ACL_TABLE_GROUP_ATTR_ACL_STAGE: + return lemming::dataplane::sai::ACL_TABLE_GROUP_ATTR_ACL_STAGE; + + case SAI_ACL_TABLE_GROUP_ATTR_ACL_BIND_POINT_TYPE_LIST: + return lemming::dataplane::sai:: + ACL_TABLE_GROUP_ATTR_ACL_BIND_POINT_TYPE_LIST; + + case SAI_ACL_TABLE_GROUP_ATTR_TYPE: + return lemming::dataplane::sai::ACL_TABLE_GROUP_ATTR_TYPE; + + case SAI_ACL_TABLE_GROUP_ATTR_MEMBER_LIST: + return lemming::dataplane::sai::ACL_TABLE_GROUP_ATTR_MEMBER_LIST; + + default: + return lemming::dataplane::sai::ACL_TABLE_GROUP_ATTR_UNSPECIFIED; + } +} +sai_acl_table_group_attr_t convert_sai_acl_table_group_attr_t_to_sai( + lemming::dataplane::sai::AclTableGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::ACL_TABLE_GROUP_ATTR_ACL_STAGE: + return SAI_ACL_TABLE_GROUP_ATTR_ACL_STAGE; + + case lemming::dataplane::sai::ACL_TABLE_GROUP_ATTR_ACL_BIND_POINT_TYPE_LIST: + return SAI_ACL_TABLE_GROUP_ATTR_ACL_BIND_POINT_TYPE_LIST; + + case lemming::dataplane::sai::ACL_TABLE_GROUP_ATTR_TYPE: + return SAI_ACL_TABLE_GROUP_ATTR_TYPE; + + case lemming::dataplane::sai::ACL_TABLE_GROUP_ATTR_MEMBER_LIST: + return SAI_ACL_TABLE_GROUP_ATTR_MEMBER_LIST; + + default: + return SAI_ACL_TABLE_GROUP_ATTR_ACL_STAGE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_acl_table_group_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_table_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_table_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_table_group_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclTableGroupMemberAttr +convert_sai_acl_table_group_member_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_GROUP_ID: + return lemming::dataplane::sai:: + ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_GROUP_ID; + + case SAI_ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_ID: + return lemming::dataplane::sai::ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_ID; + + case SAI_ACL_TABLE_GROUP_MEMBER_ATTR_PRIORITY: + return lemming::dataplane::sai::ACL_TABLE_GROUP_MEMBER_ATTR_PRIORITY; + + default: + return lemming::dataplane::sai::ACL_TABLE_GROUP_MEMBER_ATTR_UNSPECIFIED; + } +} +sai_acl_table_group_member_attr_t +convert_sai_acl_table_group_member_attr_t_to_sai( + lemming::dataplane::sai::AclTableGroupMemberAttr val) { + switch (val) { + case lemming::dataplane::sai:: + ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_GROUP_ID: + return SAI_ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_GROUP_ID; + + case lemming::dataplane::sai::ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_ID: + return SAI_ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_ID; + + case lemming::dataplane::sai::ACL_TABLE_GROUP_MEMBER_ATTR_PRIORITY: + return SAI_ACL_TABLE_GROUP_MEMBER_ATTR_PRIORITY; + + default: + return SAI_ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_GROUP_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_acl_table_group_member_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_acl_table_group_member_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_table_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_table_group_member_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::AclTableGroupType +convert_sai_acl_table_group_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ACL_TABLE_GROUP_TYPE_SEQUENTIAL: + return lemming::dataplane::sai::ACL_TABLE_GROUP_TYPE_SEQUENTIAL; + + case SAI_ACL_TABLE_GROUP_TYPE_PARALLEL: + return lemming::dataplane::sai::ACL_TABLE_GROUP_TYPE_PARALLEL; + + default: + return lemming::dataplane::sai::ACL_TABLE_GROUP_TYPE_UNSPECIFIED; + } +} +sai_acl_table_group_type_t convert_sai_acl_table_group_type_t_to_sai( + lemming::dataplane::sai::AclTableGroupType val) { + switch (val) { + case lemming::dataplane::sai::ACL_TABLE_GROUP_TYPE_SEQUENTIAL: + return SAI_ACL_TABLE_GROUP_TYPE_SEQUENTIAL; + + case lemming::dataplane::sai::ACL_TABLE_GROUP_TYPE_PARALLEL: + return SAI_ACL_TABLE_GROUP_TYPE_PARALLEL; + + default: + return SAI_ACL_TABLE_GROUP_TYPE_SEQUENTIAL; + } +} + +google::protobuf::RepeatedField +convert_list_sai_acl_table_group_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_acl_table_group_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_acl_table_group_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_acl_table_group_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::ApiExtensions convert_sai_api_extensions_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_API_EXTENSIONS_RANGE_START: + return lemming::dataplane::sai::API_EXTENSIONS_RANGE_START; + + case SAI_API_EXTENSIONS_RANGE_END: + return lemming::dataplane::sai::API_EXTENSIONS_RANGE_END; + + default: + return lemming::dataplane::sai::API_EXTENSIONS_UNSPECIFIED; + } +} +sai_api_extensions_t convert_sai_api_extensions_t_to_sai( + lemming::dataplane::sai::ApiExtensions val) { + switch (val) { + case lemming::dataplane::sai::API_EXTENSIONS_RANGE_START: + return SAI_API_EXTENSIONS_RANGE_START; + + case lemming::dataplane::sai::API_EXTENSIONS_RANGE_END: + return SAI_API_EXTENSIONS_RANGE_END; + + default: + return SAI_API_EXTENSIONS_RANGE_START; + } +} + +google::protobuf::RepeatedField convert_list_sai_api_extensions_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_api_extensions_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_api_extensions_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_api_extensions_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::Api convert_sai_api_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_API_UNSPECIFIED: + return lemming::dataplane::sai::API_SAI_UNSPECIFIED; + + case SAI_API_SWITCH: + return lemming::dataplane::sai::API_SWITCH; + + case SAI_API_PORT: + return lemming::dataplane::sai::API_PORT; + + case SAI_API_FDB: + return lemming::dataplane::sai::API_FDB; + + case SAI_API_VLAN: + return lemming::dataplane::sai::API_VLAN; + + case SAI_API_VIRTUAL_ROUTER: + return lemming::dataplane::sai::API_VIRTUAL_ROUTER; + + case SAI_API_ROUTE: + return lemming::dataplane::sai::API_ROUTE; + + case SAI_API_NEXT_HOP: + return lemming::dataplane::sai::API_NEXT_HOP; + + case SAI_API_NEXT_HOP_GROUP: + return lemming::dataplane::sai::API_NEXT_HOP_GROUP; + + case SAI_API_ROUTER_INTERFACE: + return lemming::dataplane::sai::API_ROUTER_INTERFACE; + + case SAI_API_NEIGHBOR: + return lemming::dataplane::sai::API_NEIGHBOR; + + case SAI_API_ACL: + return lemming::dataplane::sai::API_ACL; + + case SAI_API_HOSTIF: + return lemming::dataplane::sai::API_HOSTIF; + + case SAI_API_MIRROR: + return lemming::dataplane::sai::API_MIRROR; + + case SAI_API_SAMPLEPACKET: + return lemming::dataplane::sai::API_SAMPLEPACKET; + + case SAI_API_STP: + return lemming::dataplane::sai::API_STP; + + case SAI_API_LAG: + return lemming::dataplane::sai::API_LAG; + + case SAI_API_POLICER: + return lemming::dataplane::sai::API_POLICER; + + case SAI_API_WRED: + return lemming::dataplane::sai::API_WRED; + + case SAI_API_QOS_MAP: + return lemming::dataplane::sai::API_QOS_MAP; + + case SAI_API_QUEUE: + return lemming::dataplane::sai::API_QUEUE; + + case SAI_API_SCHEDULER: + return lemming::dataplane::sai::API_SCHEDULER; + + case SAI_API_SCHEDULER_GROUP: + return lemming::dataplane::sai::API_SCHEDULER_GROUP; + + case SAI_API_BUFFER: + return lemming::dataplane::sai::API_BUFFER; + + case SAI_API_HASH: + return lemming::dataplane::sai::API_HASH; + + case SAI_API_UDF: + return lemming::dataplane::sai::API_UDF; + + case SAI_API_TUNNEL: + return lemming::dataplane::sai::API_TUNNEL; + + case SAI_API_L2MC: + return lemming::dataplane::sai::API_L2MC; + + case SAI_API_IPMC: + return lemming::dataplane::sai::API_IPMC; + + case SAI_API_RPF_GROUP: + return lemming::dataplane::sai::API_RPF_GROUP; + + case SAI_API_L2MC_GROUP: + return lemming::dataplane::sai::API_L2MC_GROUP; + + case SAI_API_IPMC_GROUP: + return lemming::dataplane::sai::API_IPMC_GROUP; + + case SAI_API_MCAST_FDB: + return lemming::dataplane::sai::API_MCAST_FDB; + + case SAI_API_BRIDGE: + return lemming::dataplane::sai::API_BRIDGE; + + case SAI_API_TAM: + return lemming::dataplane::sai::API_TAM; + + case SAI_API_SRV6: + return lemming::dataplane::sai::API_SRV6; + + case SAI_API_MPLS: + return lemming::dataplane::sai::API_MPLS; + + case SAI_API_DTEL: + return lemming::dataplane::sai::API_DTEL; + + case SAI_API_BFD: + return lemming::dataplane::sai::API_BFD; + + case SAI_API_ISOLATION_GROUP: + return lemming::dataplane::sai::API_ISOLATION_GROUP; + + case SAI_API_NAT: + return lemming::dataplane::sai::API_NAT; + + case SAI_API_COUNTER: + return lemming::dataplane::sai::API_COUNTER; + + case SAI_API_DEBUG_COUNTER: + return lemming::dataplane::sai::API_DEBUG_COUNTER; + + case SAI_API_MACSEC: + return lemming::dataplane::sai::API_MACSEC; + + case SAI_API_SYSTEM_PORT: + return lemming::dataplane::sai::API_SYSTEM_PORT; + + case SAI_API_MY_MAC: + return lemming::dataplane::sai::API_MY_MAC; + + case SAI_API_IPSEC: + return lemming::dataplane::sai::API_IPSEC; + + case SAI_API_GENERIC_PROGRAMMABLE: + return lemming::dataplane::sai::API_GENERIC_PROGRAMMABLE; + + case SAI_API_MAX: + return lemming::dataplane::sai::API_MAX; + + default: + return lemming::dataplane::sai::API_UNSPECIFIED; + } +} +sai_api_t convert_sai_api_t_to_sai(lemming::dataplane::sai::Api val) { + switch (val) { + case lemming::dataplane::sai::API_SAI_UNSPECIFIED: + return SAI_API_UNSPECIFIED; + + case lemming::dataplane::sai::API_SWITCH: + return SAI_API_SWITCH; + + case lemming::dataplane::sai::API_PORT: + return SAI_API_PORT; + + case lemming::dataplane::sai::API_FDB: + return SAI_API_FDB; + + case lemming::dataplane::sai::API_VLAN: + return SAI_API_VLAN; + + case lemming::dataplane::sai::API_VIRTUAL_ROUTER: + return SAI_API_VIRTUAL_ROUTER; + + case lemming::dataplane::sai::API_ROUTE: + return SAI_API_ROUTE; + + case lemming::dataplane::sai::API_NEXT_HOP: + return SAI_API_NEXT_HOP; + + case lemming::dataplane::sai::API_NEXT_HOP_GROUP: + return SAI_API_NEXT_HOP_GROUP; + + case lemming::dataplane::sai::API_ROUTER_INTERFACE: + return SAI_API_ROUTER_INTERFACE; + + case lemming::dataplane::sai::API_NEIGHBOR: + return SAI_API_NEIGHBOR; + + case lemming::dataplane::sai::API_ACL: + return SAI_API_ACL; + + case lemming::dataplane::sai::API_HOSTIF: + return SAI_API_HOSTIF; + + case lemming::dataplane::sai::API_MIRROR: + return SAI_API_MIRROR; + + case lemming::dataplane::sai::API_SAMPLEPACKET: + return SAI_API_SAMPLEPACKET; + + case lemming::dataplane::sai::API_STP: + return SAI_API_STP; + + case lemming::dataplane::sai::API_LAG: + return SAI_API_LAG; + + case lemming::dataplane::sai::API_POLICER: + return SAI_API_POLICER; + + case lemming::dataplane::sai::API_WRED: + return SAI_API_WRED; + + case lemming::dataplane::sai::API_QOS_MAP: + return SAI_API_QOS_MAP; + + case lemming::dataplane::sai::API_QUEUE: + return SAI_API_QUEUE; + + case lemming::dataplane::sai::API_SCHEDULER: + return SAI_API_SCHEDULER; + + case lemming::dataplane::sai::API_SCHEDULER_GROUP: + return SAI_API_SCHEDULER_GROUP; + + case lemming::dataplane::sai::API_BUFFER: + return SAI_API_BUFFER; + + case lemming::dataplane::sai::API_HASH: + return SAI_API_HASH; + + case lemming::dataplane::sai::API_UDF: + return SAI_API_UDF; + + case lemming::dataplane::sai::API_TUNNEL: + return SAI_API_TUNNEL; + + case lemming::dataplane::sai::API_L2MC: + return SAI_API_L2MC; + + case lemming::dataplane::sai::API_IPMC: + return SAI_API_IPMC; + + case lemming::dataplane::sai::API_RPF_GROUP: + return SAI_API_RPF_GROUP; + + case lemming::dataplane::sai::API_L2MC_GROUP: + return SAI_API_L2MC_GROUP; + + case lemming::dataplane::sai::API_IPMC_GROUP: + return SAI_API_IPMC_GROUP; + + case lemming::dataplane::sai::API_MCAST_FDB: + return SAI_API_MCAST_FDB; + + case lemming::dataplane::sai::API_BRIDGE: + return SAI_API_BRIDGE; + + case lemming::dataplane::sai::API_TAM: + return SAI_API_TAM; + + case lemming::dataplane::sai::API_SRV6: + return SAI_API_SRV6; + + case lemming::dataplane::sai::API_MPLS: + return SAI_API_MPLS; + + case lemming::dataplane::sai::API_DTEL: + return SAI_API_DTEL; + + case lemming::dataplane::sai::API_BFD: + return SAI_API_BFD; + + case lemming::dataplane::sai::API_ISOLATION_GROUP: + return SAI_API_ISOLATION_GROUP; + + case lemming::dataplane::sai::API_NAT: + return SAI_API_NAT; + + case lemming::dataplane::sai::API_COUNTER: + return SAI_API_COUNTER; + + case lemming::dataplane::sai::API_DEBUG_COUNTER: + return SAI_API_DEBUG_COUNTER; + + case lemming::dataplane::sai::API_MACSEC: + return SAI_API_MACSEC; + + case lemming::dataplane::sai::API_SYSTEM_PORT: + return SAI_API_SYSTEM_PORT; + + case lemming::dataplane::sai::API_MY_MAC: + return SAI_API_MY_MAC; + + case lemming::dataplane::sai::API_IPSEC: + return SAI_API_IPSEC; + + case lemming::dataplane::sai::API_GENERIC_PROGRAMMABLE: + return SAI_API_GENERIC_PROGRAMMABLE; + + case lemming::dataplane::sai::API_MAX: + return SAI_API_MAX; + + default: + return SAI_API_UNSPECIFIED; + } +} + +google::protobuf::RepeatedField convert_list_sai_api_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_api_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_api_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_api_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BfdEncapsulationType +convert_sai_bfd_encapsulation_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BFD_ENCAPSULATION_TYPE_IP_IN_IP: + return lemming::dataplane::sai::BFD_ENCAPSULATION_TYPE_IP_IN_IP; + + case SAI_BFD_ENCAPSULATION_TYPE_L3_GRE_TUNNEL: + return lemming::dataplane::sai::BFD_ENCAPSULATION_TYPE_L3_GRE_TUNNEL; + + case SAI_BFD_ENCAPSULATION_TYPE_NONE: + return lemming::dataplane::sai::BFD_ENCAPSULATION_TYPE_NONE; + + default: + return lemming::dataplane::sai::BFD_ENCAPSULATION_TYPE_UNSPECIFIED; + } +} +sai_bfd_encapsulation_type_t convert_sai_bfd_encapsulation_type_t_to_sai( + lemming::dataplane::sai::BfdEncapsulationType val) { + switch (val) { + case lemming::dataplane::sai::BFD_ENCAPSULATION_TYPE_IP_IN_IP: + return SAI_BFD_ENCAPSULATION_TYPE_IP_IN_IP; + + case lemming::dataplane::sai::BFD_ENCAPSULATION_TYPE_L3_GRE_TUNNEL: + return SAI_BFD_ENCAPSULATION_TYPE_L3_GRE_TUNNEL; + + case lemming::dataplane::sai::BFD_ENCAPSULATION_TYPE_NONE: + return SAI_BFD_ENCAPSULATION_TYPE_NONE; + + default: + return SAI_BFD_ENCAPSULATION_TYPE_IP_IN_IP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bfd_encapsulation_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bfd_encapsulation_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bfd_encapsulation_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bfd_encapsulation_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BfdSessionAttr convert_sai_bfd_session_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BFD_SESSION_ATTR_TYPE: + return lemming::dataplane::sai::BFD_SESSION_ATTR_TYPE; + + case SAI_BFD_SESSION_ATTR_HW_LOOKUP_VALID: + return lemming::dataplane::sai::BFD_SESSION_ATTR_HW_LOOKUP_VALID; + + case SAI_BFD_SESSION_ATTR_VIRTUAL_ROUTER: + return lemming::dataplane::sai::BFD_SESSION_ATTR_VIRTUAL_ROUTER; + + case SAI_BFD_SESSION_ATTR_PORT: + return lemming::dataplane::sai::BFD_SESSION_ATTR_PORT; + + case SAI_BFD_SESSION_ATTR_LOCAL_DISCRIMINATOR: + return lemming::dataplane::sai::BFD_SESSION_ATTR_LOCAL_DISCRIMINATOR; + + case SAI_BFD_SESSION_ATTR_REMOTE_DISCRIMINATOR: + return lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_DISCRIMINATOR; + + case SAI_BFD_SESSION_ATTR_UDP_SRC_PORT: + return lemming::dataplane::sai::BFD_SESSION_ATTR_UDP_SRC_PORT; + + case SAI_BFD_SESSION_ATTR_TC: + return lemming::dataplane::sai::BFD_SESSION_ATTR_TC; + + case SAI_BFD_SESSION_ATTR_VLAN_TPID: + return lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_TPID; + + case SAI_BFD_SESSION_ATTR_VLAN_ID: + return lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_ID; + + case SAI_BFD_SESSION_ATTR_VLAN_PRI: + return lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_PRI; + + case SAI_BFD_SESSION_ATTR_VLAN_CFI: + return lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_CFI; + + case SAI_BFD_SESSION_ATTR_VLAN_HEADER_VALID: + return lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_HEADER_VALID; + + case SAI_BFD_SESSION_ATTR_BFD_ENCAPSULATION_TYPE: + return lemming::dataplane::sai::BFD_SESSION_ATTR_BFD_ENCAPSULATION_TYPE; + + case SAI_BFD_SESSION_ATTR_IPHDR_VERSION: + return lemming::dataplane::sai::BFD_SESSION_ATTR_IPHDR_VERSION; + + case SAI_BFD_SESSION_ATTR_TOS: + return lemming::dataplane::sai::BFD_SESSION_ATTR_TOS; + + case SAI_BFD_SESSION_ATTR_TTL: + return lemming::dataplane::sai::BFD_SESSION_ATTR_TTL; + + case SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS: + return lemming::dataplane::sai::BFD_SESSION_ATTR_SRC_IP_ADDRESS; + + case SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS: + return lemming::dataplane::sai::BFD_SESSION_ATTR_DST_IP_ADDRESS; + + case SAI_BFD_SESSION_ATTR_TUNNEL_TOS: + return lemming::dataplane::sai::BFD_SESSION_ATTR_TUNNEL_TOS; + + case SAI_BFD_SESSION_ATTR_TUNNEL_TTL: + return lemming::dataplane::sai::BFD_SESSION_ATTR_TUNNEL_TTL; + + case SAI_BFD_SESSION_ATTR_TUNNEL_SRC_IP_ADDRESS: + return lemming::dataplane::sai::BFD_SESSION_ATTR_TUNNEL_SRC_IP_ADDRESS; + + case SAI_BFD_SESSION_ATTR_TUNNEL_DST_IP_ADDRESS: + return lemming::dataplane::sai::BFD_SESSION_ATTR_TUNNEL_DST_IP_ADDRESS; + + case SAI_BFD_SESSION_ATTR_SRC_MAC_ADDRESS: + return lemming::dataplane::sai::BFD_SESSION_ATTR_SRC_MAC_ADDRESS; + + case SAI_BFD_SESSION_ATTR_DST_MAC_ADDRESS: + return lemming::dataplane::sai::BFD_SESSION_ATTR_DST_MAC_ADDRESS; + + case SAI_BFD_SESSION_ATTR_ECHO_ENABLE: + return lemming::dataplane::sai::BFD_SESSION_ATTR_ECHO_ENABLE; + + case SAI_BFD_SESSION_ATTR_MULTIHOP: + return lemming::dataplane::sai::BFD_SESSION_ATTR_MULTIHOP; + + case SAI_BFD_SESSION_ATTR_CBIT: + return lemming::dataplane::sai::BFD_SESSION_ATTR_CBIT; + + case SAI_BFD_SESSION_ATTR_MIN_TX: + return lemming::dataplane::sai::BFD_SESSION_ATTR_MIN_TX; + + case SAI_BFD_SESSION_ATTR_MIN_RX: + return lemming::dataplane::sai::BFD_SESSION_ATTR_MIN_RX; + + case SAI_BFD_SESSION_ATTR_MULTIPLIER: + return lemming::dataplane::sai::BFD_SESSION_ATTR_MULTIPLIER; + + case SAI_BFD_SESSION_ATTR_REMOTE_MIN_TX: + return lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_MIN_TX; + + case SAI_BFD_SESSION_ATTR_REMOTE_MIN_RX: + return lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_MIN_RX; + + case SAI_BFD_SESSION_ATTR_STATE: + return lemming::dataplane::sai::BFD_SESSION_ATTR_STATE; + + case SAI_BFD_SESSION_ATTR_OFFLOAD_TYPE: + return lemming::dataplane::sai::BFD_SESSION_ATTR_OFFLOAD_TYPE; + + case SAI_BFD_SESSION_ATTR_NEGOTIATED_TX: + return lemming::dataplane::sai::BFD_SESSION_ATTR_NEGOTIATED_TX; + + case SAI_BFD_SESSION_ATTR_NEGOTIATED_RX: + return lemming::dataplane::sai::BFD_SESSION_ATTR_NEGOTIATED_RX; + + case SAI_BFD_SESSION_ATTR_LOCAL_DIAG: + return lemming::dataplane::sai::BFD_SESSION_ATTR_LOCAL_DIAG; + + case SAI_BFD_SESSION_ATTR_REMOTE_DIAG: + return lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_DIAG; + + case SAI_BFD_SESSION_ATTR_REMOTE_MULTIPLIER: + return lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_MULTIPLIER; + + default: + return lemming::dataplane::sai::BFD_SESSION_ATTR_UNSPECIFIED; + } +} +sai_bfd_session_attr_t convert_sai_bfd_session_attr_t_to_sai( + lemming::dataplane::sai::BfdSessionAttr val) { + switch (val) { + case lemming::dataplane::sai::BFD_SESSION_ATTR_TYPE: + return SAI_BFD_SESSION_ATTR_TYPE; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_HW_LOOKUP_VALID: + return SAI_BFD_SESSION_ATTR_HW_LOOKUP_VALID; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_VIRTUAL_ROUTER: + return SAI_BFD_SESSION_ATTR_VIRTUAL_ROUTER; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_PORT: + return SAI_BFD_SESSION_ATTR_PORT; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_LOCAL_DISCRIMINATOR: + return SAI_BFD_SESSION_ATTR_LOCAL_DISCRIMINATOR; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_DISCRIMINATOR: + return SAI_BFD_SESSION_ATTR_REMOTE_DISCRIMINATOR; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_UDP_SRC_PORT: + return SAI_BFD_SESSION_ATTR_UDP_SRC_PORT; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_TC: + return SAI_BFD_SESSION_ATTR_TC; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_TPID: + return SAI_BFD_SESSION_ATTR_VLAN_TPID; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_ID: + return SAI_BFD_SESSION_ATTR_VLAN_ID; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_PRI: + return SAI_BFD_SESSION_ATTR_VLAN_PRI; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_CFI: + return SAI_BFD_SESSION_ATTR_VLAN_CFI; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_VLAN_HEADER_VALID: + return SAI_BFD_SESSION_ATTR_VLAN_HEADER_VALID; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_BFD_ENCAPSULATION_TYPE: + return SAI_BFD_SESSION_ATTR_BFD_ENCAPSULATION_TYPE; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_IPHDR_VERSION: + return SAI_BFD_SESSION_ATTR_IPHDR_VERSION; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_TOS: + return SAI_BFD_SESSION_ATTR_TOS; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_TTL: + return SAI_BFD_SESSION_ATTR_TTL; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_SRC_IP_ADDRESS: + return SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_DST_IP_ADDRESS: + return SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_TUNNEL_TOS: + return SAI_BFD_SESSION_ATTR_TUNNEL_TOS; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_TUNNEL_TTL: + return SAI_BFD_SESSION_ATTR_TUNNEL_TTL; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_TUNNEL_SRC_IP_ADDRESS: + return SAI_BFD_SESSION_ATTR_TUNNEL_SRC_IP_ADDRESS; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_TUNNEL_DST_IP_ADDRESS: + return SAI_BFD_SESSION_ATTR_TUNNEL_DST_IP_ADDRESS; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_SRC_MAC_ADDRESS: + return SAI_BFD_SESSION_ATTR_SRC_MAC_ADDRESS; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_DST_MAC_ADDRESS: + return SAI_BFD_SESSION_ATTR_DST_MAC_ADDRESS; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_ECHO_ENABLE: + return SAI_BFD_SESSION_ATTR_ECHO_ENABLE; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_MULTIHOP: + return SAI_BFD_SESSION_ATTR_MULTIHOP; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_CBIT: + return SAI_BFD_SESSION_ATTR_CBIT; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_MIN_TX: + return SAI_BFD_SESSION_ATTR_MIN_TX; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_MIN_RX: + return SAI_BFD_SESSION_ATTR_MIN_RX; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_MULTIPLIER: + return SAI_BFD_SESSION_ATTR_MULTIPLIER; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_MIN_TX: + return SAI_BFD_SESSION_ATTR_REMOTE_MIN_TX; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_MIN_RX: + return SAI_BFD_SESSION_ATTR_REMOTE_MIN_RX; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_STATE: + return SAI_BFD_SESSION_ATTR_STATE; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_OFFLOAD_TYPE: + return SAI_BFD_SESSION_ATTR_OFFLOAD_TYPE; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_NEGOTIATED_TX: + return SAI_BFD_SESSION_ATTR_NEGOTIATED_TX; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_NEGOTIATED_RX: + return SAI_BFD_SESSION_ATTR_NEGOTIATED_RX; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_LOCAL_DIAG: + return SAI_BFD_SESSION_ATTR_LOCAL_DIAG; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_DIAG: + return SAI_BFD_SESSION_ATTR_REMOTE_DIAG; + + case lemming::dataplane::sai::BFD_SESSION_ATTR_REMOTE_MULTIPLIER: + return SAI_BFD_SESSION_ATTR_REMOTE_MULTIPLIER; + + default: + return SAI_BFD_SESSION_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bfd_session_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bfd_session_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bfd_session_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bfd_session_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BfdSessionOffloadType +convert_sai_bfd_session_offload_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BFD_SESSION_OFFLOAD_TYPE_NONE: + return lemming::dataplane::sai::BFD_SESSION_OFFLOAD_TYPE_NONE; + + case SAI_BFD_SESSION_OFFLOAD_TYPE_FULL: + return lemming::dataplane::sai::BFD_SESSION_OFFLOAD_TYPE_FULL; + + case SAI_BFD_SESSION_OFFLOAD_TYPE_SUSTENANCE: + return lemming::dataplane::sai::BFD_SESSION_OFFLOAD_TYPE_SUSTENANCE; + + default: + return lemming::dataplane::sai::BFD_SESSION_OFFLOAD_TYPE_UNSPECIFIED; + } +} +sai_bfd_session_offload_type_t convert_sai_bfd_session_offload_type_t_to_sai( + lemming::dataplane::sai::BfdSessionOffloadType val) { + switch (val) { + case lemming::dataplane::sai::BFD_SESSION_OFFLOAD_TYPE_NONE: + return SAI_BFD_SESSION_OFFLOAD_TYPE_NONE; + + case lemming::dataplane::sai::BFD_SESSION_OFFLOAD_TYPE_FULL: + return SAI_BFD_SESSION_OFFLOAD_TYPE_FULL; + + case lemming::dataplane::sai::BFD_SESSION_OFFLOAD_TYPE_SUSTENANCE: + return SAI_BFD_SESSION_OFFLOAD_TYPE_SUSTENANCE; + + default: + return SAI_BFD_SESSION_OFFLOAD_TYPE_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bfd_session_offload_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_bfd_session_offload_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bfd_session_offload_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bfd_session_offload_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BfdSessionStat convert_sai_bfd_session_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BFD_SESSION_STAT_IN_PACKETS: + return lemming::dataplane::sai::BFD_SESSION_STAT_IN_PACKETS; + + case SAI_BFD_SESSION_STAT_OUT_PACKETS: + return lemming::dataplane::sai::BFD_SESSION_STAT_OUT_PACKETS; + + case SAI_BFD_SESSION_STAT_DROP_PACKETS: + return lemming::dataplane::sai::BFD_SESSION_STAT_DROP_PACKETS; + + default: + return lemming::dataplane::sai::BFD_SESSION_STAT_UNSPECIFIED; + } +} +sai_bfd_session_stat_t convert_sai_bfd_session_stat_t_to_sai( + lemming::dataplane::sai::BfdSessionStat val) { + switch (val) { + case lemming::dataplane::sai::BFD_SESSION_STAT_IN_PACKETS: + return SAI_BFD_SESSION_STAT_IN_PACKETS; + + case lemming::dataplane::sai::BFD_SESSION_STAT_OUT_PACKETS: + return SAI_BFD_SESSION_STAT_OUT_PACKETS; + + case lemming::dataplane::sai::BFD_SESSION_STAT_DROP_PACKETS: + return SAI_BFD_SESSION_STAT_DROP_PACKETS; + + default: + return SAI_BFD_SESSION_STAT_IN_PACKETS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bfd_session_stat_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bfd_session_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bfd_session_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bfd_session_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BfdSessionState +convert_sai_bfd_session_state_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BFD_SESSION_STATE_ADMIN_DOWN: + return lemming::dataplane::sai::BFD_SESSION_STATE_ADMIN_DOWN; + + case SAI_BFD_SESSION_STATE_DOWN: + return lemming::dataplane::sai::BFD_SESSION_STATE_DOWN; + + case SAI_BFD_SESSION_STATE_INIT: + return lemming::dataplane::sai::BFD_SESSION_STATE_INIT; + + case SAI_BFD_SESSION_STATE_UP: + return lemming::dataplane::sai::BFD_SESSION_STATE_UP; + + default: + return lemming::dataplane::sai::BFD_SESSION_STATE_UNSPECIFIED; + } +} +sai_bfd_session_state_t convert_sai_bfd_session_state_t_to_sai( + lemming::dataplane::sai::BfdSessionState val) { + switch (val) { + case lemming::dataplane::sai::BFD_SESSION_STATE_ADMIN_DOWN: + return SAI_BFD_SESSION_STATE_ADMIN_DOWN; + + case lemming::dataplane::sai::BFD_SESSION_STATE_DOWN: + return SAI_BFD_SESSION_STATE_DOWN; + + case lemming::dataplane::sai::BFD_SESSION_STATE_INIT: + return SAI_BFD_SESSION_STATE_INIT; + + case lemming::dataplane::sai::BFD_SESSION_STATE_UP: + return SAI_BFD_SESSION_STATE_UP; + + default: + return SAI_BFD_SESSION_STATE_ADMIN_DOWN; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bfd_session_state_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bfd_session_state_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bfd_session_state_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bfd_session_state_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BfdSessionType convert_sai_bfd_session_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BFD_SESSION_TYPE_DEMAND_ACTIVE: + return lemming::dataplane::sai::BFD_SESSION_TYPE_DEMAND_ACTIVE; + + case SAI_BFD_SESSION_TYPE_DEMAND_PASSIVE: + return lemming::dataplane::sai::BFD_SESSION_TYPE_DEMAND_PASSIVE; + + case SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE: + return lemming::dataplane::sai::BFD_SESSION_TYPE_ASYNC_ACTIVE; + + case SAI_BFD_SESSION_TYPE_ASYNC_PASSIVE: + return lemming::dataplane::sai::BFD_SESSION_TYPE_ASYNC_PASSIVE; + + default: + return lemming::dataplane::sai::BFD_SESSION_TYPE_UNSPECIFIED; + } +} +sai_bfd_session_type_t convert_sai_bfd_session_type_t_to_sai( + lemming::dataplane::sai::BfdSessionType val) { + switch (val) { + case lemming::dataplane::sai::BFD_SESSION_TYPE_DEMAND_ACTIVE: + return SAI_BFD_SESSION_TYPE_DEMAND_ACTIVE; + + case lemming::dataplane::sai::BFD_SESSION_TYPE_DEMAND_PASSIVE: + return SAI_BFD_SESSION_TYPE_DEMAND_PASSIVE; + + case lemming::dataplane::sai::BFD_SESSION_TYPE_ASYNC_ACTIVE: + return SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE; + + case lemming::dataplane::sai::BFD_SESSION_TYPE_ASYNC_PASSIVE: + return SAI_BFD_SESSION_TYPE_ASYNC_PASSIVE; + + default: + return SAI_BFD_SESSION_TYPE_DEMAND_ACTIVE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bfd_session_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bfd_session_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bfd_session_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bfd_session_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BridgeAttr convert_sai_bridge_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BRIDGE_ATTR_TYPE: + return lemming::dataplane::sai::BRIDGE_ATTR_TYPE; + + case SAI_BRIDGE_ATTR_PORT_LIST: + return lemming::dataplane::sai::BRIDGE_ATTR_PORT_LIST; + + case SAI_BRIDGE_ATTR_MAX_LEARNED_ADDRESSES: + return lemming::dataplane::sai::BRIDGE_ATTR_MAX_LEARNED_ADDRESSES; + + case SAI_BRIDGE_ATTR_LEARN_DISABLE: + return lemming::dataplane::sai::BRIDGE_ATTR_LEARN_DISABLE; + + case SAI_BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE: + return lemming::dataplane::sai:: + BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE; + + case SAI_BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_GROUP: + return lemming::dataplane::sai::BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_GROUP; + + case SAI_BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE: + return lemming::dataplane::sai:: + BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE; + + case SAI_BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_GROUP: + return lemming::dataplane::sai::BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_GROUP; + + case SAI_BRIDGE_ATTR_BROADCAST_FLOOD_CONTROL_TYPE: + return lemming::dataplane::sai::BRIDGE_ATTR_BROADCAST_FLOOD_CONTROL_TYPE; + + case SAI_BRIDGE_ATTR_BROADCAST_FLOOD_GROUP: + return lemming::dataplane::sai::BRIDGE_ATTR_BROADCAST_FLOOD_GROUP; + + default: + return lemming::dataplane::sai::BRIDGE_ATTR_UNSPECIFIED; + } +} +sai_bridge_attr_t convert_sai_bridge_attr_t_to_sai( + lemming::dataplane::sai::BridgeAttr val) { + switch (val) { + case lemming::dataplane::sai::BRIDGE_ATTR_TYPE: + return SAI_BRIDGE_ATTR_TYPE; + + case lemming::dataplane::sai::BRIDGE_ATTR_PORT_LIST: + return SAI_BRIDGE_ATTR_PORT_LIST; + + case lemming::dataplane::sai::BRIDGE_ATTR_MAX_LEARNED_ADDRESSES: + return SAI_BRIDGE_ATTR_MAX_LEARNED_ADDRESSES; + + case lemming::dataplane::sai::BRIDGE_ATTR_LEARN_DISABLE: + return SAI_BRIDGE_ATTR_LEARN_DISABLE; + + case lemming::dataplane::sai:: + BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE: + return SAI_BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE; + + case lemming::dataplane::sai::BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_GROUP: + return SAI_BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_GROUP; + + case lemming::dataplane::sai:: + BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE: + return SAI_BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE; + + case lemming::dataplane::sai::BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_GROUP: + return SAI_BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_GROUP; + + case lemming::dataplane::sai::BRIDGE_ATTR_BROADCAST_FLOOD_CONTROL_TYPE: + return SAI_BRIDGE_ATTR_BROADCAST_FLOOD_CONTROL_TYPE; + + case lemming::dataplane::sai::BRIDGE_ATTR_BROADCAST_FLOOD_GROUP: + return SAI_BRIDGE_ATTR_BROADCAST_FLOOD_GROUP; + + default: + return SAI_BRIDGE_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_bridge_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bridge_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bridge_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bridge_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BridgeFloodControlType +convert_sai_bridge_flood_control_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BRIDGE_FLOOD_CONTROL_TYPE_SUB_PORTS: + return lemming::dataplane::sai::BRIDGE_FLOOD_CONTROL_TYPE_SUB_PORTS; + + case SAI_BRIDGE_FLOOD_CONTROL_TYPE_NONE: + return lemming::dataplane::sai::BRIDGE_FLOOD_CONTROL_TYPE_NONE; + + case SAI_BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP: + return lemming::dataplane::sai::BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP; + + case SAI_BRIDGE_FLOOD_CONTROL_TYPE_COMBINED: + return lemming::dataplane::sai::BRIDGE_FLOOD_CONTROL_TYPE_COMBINED; + + default: + return lemming::dataplane::sai::BRIDGE_FLOOD_CONTROL_TYPE_UNSPECIFIED; + } +} +sai_bridge_flood_control_type_t convert_sai_bridge_flood_control_type_t_to_sai( + lemming::dataplane::sai::BridgeFloodControlType val) { + switch (val) { + case lemming::dataplane::sai::BRIDGE_FLOOD_CONTROL_TYPE_SUB_PORTS: + return SAI_BRIDGE_FLOOD_CONTROL_TYPE_SUB_PORTS; + + case lemming::dataplane::sai::BRIDGE_FLOOD_CONTROL_TYPE_NONE: + return SAI_BRIDGE_FLOOD_CONTROL_TYPE_NONE; + + case lemming::dataplane::sai::BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP: + return SAI_BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP; + + case lemming::dataplane::sai::BRIDGE_FLOOD_CONTROL_TYPE_COMBINED: + return SAI_BRIDGE_FLOOD_CONTROL_TYPE_COMBINED; + + default: + return SAI_BRIDGE_FLOOD_CONTROL_TYPE_SUB_PORTS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bridge_flood_control_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_bridge_flood_control_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bridge_flood_control_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bridge_flood_control_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BridgePortAttr convert_sai_bridge_port_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BRIDGE_PORT_ATTR_TYPE: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_TYPE; + + case SAI_BRIDGE_PORT_ATTR_PORT_ID: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_PORT_ID; + + case SAI_BRIDGE_PORT_ATTR_TAGGING_MODE: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_TAGGING_MODE; + + case SAI_BRIDGE_PORT_ATTR_VLAN_ID: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_VLAN_ID; + + case SAI_BRIDGE_PORT_ATTR_RIF_ID: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_RIF_ID; + + case SAI_BRIDGE_PORT_ATTR_TUNNEL_ID: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_TUNNEL_ID; + + case SAI_BRIDGE_PORT_ATTR_BRIDGE_ID: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_BRIDGE_ID; + + case SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_FDB_LEARNING_MODE; + + case SAI_BRIDGE_PORT_ATTR_MAX_LEARNED_ADDRESSES: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_MAX_LEARNED_ADDRESSES; + + case SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_LIMIT_VIOLATION_PACKET_ACTION: + return lemming::dataplane::sai:: + BRIDGE_PORT_ATTR_FDB_LEARNING_LIMIT_VIOLATION_PACKET_ACTION; + + case SAI_BRIDGE_PORT_ATTR_ADMIN_STATE: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_ADMIN_STATE; + + case SAI_BRIDGE_PORT_ATTR_INGRESS_FILTERING: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_INGRESS_FILTERING; + + case SAI_BRIDGE_PORT_ATTR_EGRESS_FILTERING: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_EGRESS_FILTERING; + + case SAI_BRIDGE_PORT_ATTR_ISOLATION_GROUP: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_ISOLATION_GROUP; + + default: + return lemming::dataplane::sai::BRIDGE_PORT_ATTR_UNSPECIFIED; + } +} +sai_bridge_port_attr_t convert_sai_bridge_port_attr_t_to_sai( + lemming::dataplane::sai::BridgePortAttr val) { + switch (val) { + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_TYPE: + return SAI_BRIDGE_PORT_ATTR_TYPE; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_PORT_ID: + return SAI_BRIDGE_PORT_ATTR_PORT_ID; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_TAGGING_MODE: + return SAI_BRIDGE_PORT_ATTR_TAGGING_MODE; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_VLAN_ID: + return SAI_BRIDGE_PORT_ATTR_VLAN_ID; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_RIF_ID: + return SAI_BRIDGE_PORT_ATTR_RIF_ID; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_TUNNEL_ID: + return SAI_BRIDGE_PORT_ATTR_TUNNEL_ID; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_BRIDGE_ID: + return SAI_BRIDGE_PORT_ATTR_BRIDGE_ID; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_FDB_LEARNING_MODE: + return SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_MAX_LEARNED_ADDRESSES: + return SAI_BRIDGE_PORT_ATTR_MAX_LEARNED_ADDRESSES; + + case lemming::dataplane::sai:: + BRIDGE_PORT_ATTR_FDB_LEARNING_LIMIT_VIOLATION_PACKET_ACTION: + return SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_LIMIT_VIOLATION_PACKET_ACTION; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_ADMIN_STATE: + return SAI_BRIDGE_PORT_ATTR_ADMIN_STATE; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_INGRESS_FILTERING: + return SAI_BRIDGE_PORT_ATTR_INGRESS_FILTERING; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_EGRESS_FILTERING: + return SAI_BRIDGE_PORT_ATTR_EGRESS_FILTERING; + + case lemming::dataplane::sai::BRIDGE_PORT_ATTR_ISOLATION_GROUP: + return SAI_BRIDGE_PORT_ATTR_ISOLATION_GROUP; + + default: + return SAI_BRIDGE_PORT_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bridge_port_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bridge_port_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bridge_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bridge_port_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BridgePortFdbLearningMode +convert_sai_bridge_port_fdb_learning_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BRIDGE_PORT_FDB_LEARNING_MODE_DROP: + return lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_DROP; + + case SAI_BRIDGE_PORT_FDB_LEARNING_MODE_DISABLE: + return lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_DISABLE; + + case SAI_BRIDGE_PORT_FDB_LEARNING_MODE_HW: + return lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_HW; + + case SAI_BRIDGE_PORT_FDB_LEARNING_MODE_CPU_TRAP: + return lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_CPU_TRAP; + + case SAI_BRIDGE_PORT_FDB_LEARNING_MODE_CPU_LOG: + return lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_CPU_LOG; + + case SAI_BRIDGE_PORT_FDB_LEARNING_MODE_FDB_NOTIFICATION: + return lemming::dataplane::sai:: + BRIDGE_PORT_FDB_LEARNING_MODE_FDB_NOTIFICATION; + + default: + return lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_UNSPECIFIED; + } +} +sai_bridge_port_fdb_learning_mode_t +convert_sai_bridge_port_fdb_learning_mode_t_to_sai( + lemming::dataplane::sai::BridgePortFdbLearningMode val) { + switch (val) { + case lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_DROP: + return SAI_BRIDGE_PORT_FDB_LEARNING_MODE_DROP; + + case lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_DISABLE: + return SAI_BRIDGE_PORT_FDB_LEARNING_MODE_DISABLE; + + case lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_HW: + return SAI_BRIDGE_PORT_FDB_LEARNING_MODE_HW; + + case lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_CPU_TRAP: + return SAI_BRIDGE_PORT_FDB_LEARNING_MODE_CPU_TRAP; + + case lemming::dataplane::sai::BRIDGE_PORT_FDB_LEARNING_MODE_CPU_LOG: + return SAI_BRIDGE_PORT_FDB_LEARNING_MODE_CPU_LOG; + + case lemming::dataplane::sai:: + BRIDGE_PORT_FDB_LEARNING_MODE_FDB_NOTIFICATION: + return SAI_BRIDGE_PORT_FDB_LEARNING_MODE_FDB_NOTIFICATION; + + default: + return SAI_BRIDGE_PORT_FDB_LEARNING_MODE_DROP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bridge_port_fdb_learning_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_bridge_port_fdb_learning_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bridge_port_fdb_learning_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bridge_port_fdb_learning_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BridgePortStat convert_sai_bridge_port_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BRIDGE_PORT_STAT_IN_OCTETS: + return lemming::dataplane::sai::BRIDGE_PORT_STAT_IN_OCTETS; + + case SAI_BRIDGE_PORT_STAT_IN_PACKETS: + return lemming::dataplane::sai::BRIDGE_PORT_STAT_IN_PACKETS; + + case SAI_BRIDGE_PORT_STAT_OUT_OCTETS: + return lemming::dataplane::sai::BRIDGE_PORT_STAT_OUT_OCTETS; + + case SAI_BRIDGE_PORT_STAT_OUT_PACKETS: + return lemming::dataplane::sai::BRIDGE_PORT_STAT_OUT_PACKETS; + + default: + return lemming::dataplane::sai::BRIDGE_PORT_STAT_UNSPECIFIED; + } +} +sai_bridge_port_stat_t convert_sai_bridge_port_stat_t_to_sai( + lemming::dataplane::sai::BridgePortStat val) { + switch (val) { + case lemming::dataplane::sai::BRIDGE_PORT_STAT_IN_OCTETS: + return SAI_BRIDGE_PORT_STAT_IN_OCTETS; + + case lemming::dataplane::sai::BRIDGE_PORT_STAT_IN_PACKETS: + return SAI_BRIDGE_PORT_STAT_IN_PACKETS; + + case lemming::dataplane::sai::BRIDGE_PORT_STAT_OUT_OCTETS: + return SAI_BRIDGE_PORT_STAT_OUT_OCTETS; + + case lemming::dataplane::sai::BRIDGE_PORT_STAT_OUT_PACKETS: + return SAI_BRIDGE_PORT_STAT_OUT_PACKETS; + + default: + return SAI_BRIDGE_PORT_STAT_IN_OCTETS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bridge_port_stat_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bridge_port_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bridge_port_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bridge_port_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BridgePortTaggingMode +convert_sai_bridge_port_tagging_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BRIDGE_PORT_TAGGING_MODE_UNTAGGED: + return lemming::dataplane::sai::BRIDGE_PORT_TAGGING_MODE_UNTAGGED; + + case SAI_BRIDGE_PORT_TAGGING_MODE_TAGGED: + return lemming::dataplane::sai::BRIDGE_PORT_TAGGING_MODE_TAGGED; + + default: + return lemming::dataplane::sai::BRIDGE_PORT_TAGGING_MODE_UNSPECIFIED; + } +} +sai_bridge_port_tagging_mode_t convert_sai_bridge_port_tagging_mode_t_to_sai( + lemming::dataplane::sai::BridgePortTaggingMode val) { + switch (val) { + case lemming::dataplane::sai::BRIDGE_PORT_TAGGING_MODE_UNTAGGED: + return SAI_BRIDGE_PORT_TAGGING_MODE_UNTAGGED; + + case lemming::dataplane::sai::BRIDGE_PORT_TAGGING_MODE_TAGGED: + return SAI_BRIDGE_PORT_TAGGING_MODE_TAGGED; + + default: + return SAI_BRIDGE_PORT_TAGGING_MODE_UNTAGGED; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bridge_port_tagging_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_bridge_port_tagging_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bridge_port_tagging_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bridge_port_tagging_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BridgePortType convert_sai_bridge_port_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BRIDGE_PORT_TYPE_PORT: + return lemming::dataplane::sai::BRIDGE_PORT_TYPE_PORT; + + case SAI_BRIDGE_PORT_TYPE_SUB_PORT: + return lemming::dataplane::sai::BRIDGE_PORT_TYPE_SUB_PORT; + + case SAI_BRIDGE_PORT_TYPE_1Q_ROUTER: + return lemming::dataplane::sai::BRIDGE_PORT_TYPE_1Q_ROUTER; + + case SAI_BRIDGE_PORT_TYPE_1D_ROUTER: + return lemming::dataplane::sai::BRIDGE_PORT_TYPE_1D_ROUTER; + + case SAI_BRIDGE_PORT_TYPE_TUNNEL: + return lemming::dataplane::sai::BRIDGE_PORT_TYPE_TUNNEL; + + default: + return lemming::dataplane::sai::BRIDGE_PORT_TYPE_UNSPECIFIED; + } +} +sai_bridge_port_type_t convert_sai_bridge_port_type_t_to_sai( + lemming::dataplane::sai::BridgePortType val) { + switch (val) { + case lemming::dataplane::sai::BRIDGE_PORT_TYPE_PORT: + return SAI_BRIDGE_PORT_TYPE_PORT; + + case lemming::dataplane::sai::BRIDGE_PORT_TYPE_SUB_PORT: + return SAI_BRIDGE_PORT_TYPE_SUB_PORT; + + case lemming::dataplane::sai::BRIDGE_PORT_TYPE_1Q_ROUTER: + return SAI_BRIDGE_PORT_TYPE_1Q_ROUTER; + + case lemming::dataplane::sai::BRIDGE_PORT_TYPE_1D_ROUTER: + return SAI_BRIDGE_PORT_TYPE_1D_ROUTER; + + case lemming::dataplane::sai::BRIDGE_PORT_TYPE_TUNNEL: + return SAI_BRIDGE_PORT_TYPE_TUNNEL; + + default: + return SAI_BRIDGE_PORT_TYPE_PORT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bridge_port_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bridge_port_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bridge_port_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bridge_port_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BridgeStat convert_sai_bridge_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BRIDGE_STAT_IN_OCTETS: + return lemming::dataplane::sai::BRIDGE_STAT_IN_OCTETS; + + case SAI_BRIDGE_STAT_IN_PACKETS: + return lemming::dataplane::sai::BRIDGE_STAT_IN_PACKETS; + + case SAI_BRIDGE_STAT_OUT_OCTETS: + return lemming::dataplane::sai::BRIDGE_STAT_OUT_OCTETS; + + case SAI_BRIDGE_STAT_OUT_PACKETS: + return lemming::dataplane::sai::BRIDGE_STAT_OUT_PACKETS; + + default: + return lemming::dataplane::sai::BRIDGE_STAT_UNSPECIFIED; + } +} +sai_bridge_stat_t convert_sai_bridge_stat_t_to_sai( + lemming::dataplane::sai::BridgeStat val) { + switch (val) { + case lemming::dataplane::sai::BRIDGE_STAT_IN_OCTETS: + return SAI_BRIDGE_STAT_IN_OCTETS; + + case lemming::dataplane::sai::BRIDGE_STAT_IN_PACKETS: + return SAI_BRIDGE_STAT_IN_PACKETS; + + case lemming::dataplane::sai::BRIDGE_STAT_OUT_OCTETS: + return SAI_BRIDGE_STAT_OUT_OCTETS; + + case lemming::dataplane::sai::BRIDGE_STAT_OUT_PACKETS: + return SAI_BRIDGE_STAT_OUT_PACKETS; + + default: + return SAI_BRIDGE_STAT_IN_OCTETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_bridge_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bridge_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bridge_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bridge_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BridgeType convert_sai_bridge_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BRIDGE_TYPE_1Q: + return lemming::dataplane::sai::BRIDGE_TYPE_1Q; + + case SAI_BRIDGE_TYPE_1D: + return lemming::dataplane::sai::BRIDGE_TYPE_1D; + + default: + return lemming::dataplane::sai::BRIDGE_TYPE_UNSPECIFIED; + } +} +sai_bridge_type_t convert_sai_bridge_type_t_to_sai( + lemming::dataplane::sai::BridgeType val) { + switch (val) { + case lemming::dataplane::sai::BRIDGE_TYPE_1Q: + return SAI_BRIDGE_TYPE_1Q; + + case lemming::dataplane::sai::BRIDGE_TYPE_1D: + return SAI_BRIDGE_TYPE_1D; + + default: + return SAI_BRIDGE_TYPE_1Q; + } +} + +google::protobuf::RepeatedField convert_list_sai_bridge_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bridge_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bridge_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bridge_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BufferPoolAttr convert_sai_buffer_pool_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BUFFER_POOL_ATTR_SHARED_SIZE: + return lemming::dataplane::sai::BUFFER_POOL_ATTR_SHARED_SIZE; + + case SAI_BUFFER_POOL_ATTR_TYPE: + return lemming::dataplane::sai::BUFFER_POOL_ATTR_TYPE; + + case SAI_BUFFER_POOL_ATTR_SIZE: + return lemming::dataplane::sai::BUFFER_POOL_ATTR_SIZE; + + case SAI_BUFFER_POOL_ATTR_THRESHOLD_MODE: + return lemming::dataplane::sai::BUFFER_POOL_ATTR_THRESHOLD_MODE; + + case SAI_BUFFER_POOL_ATTR_TAM: + return lemming::dataplane::sai::BUFFER_POOL_ATTR_TAM; + + case SAI_BUFFER_POOL_ATTR_XOFF_SIZE: + return lemming::dataplane::sai::BUFFER_POOL_ATTR_XOFF_SIZE; + + case SAI_BUFFER_POOL_ATTR_WRED_PROFILE_ID: + return lemming::dataplane::sai::BUFFER_POOL_ATTR_WRED_PROFILE_ID; + + default: + return lemming::dataplane::sai::BUFFER_POOL_ATTR_UNSPECIFIED; + } +} +sai_buffer_pool_attr_t convert_sai_buffer_pool_attr_t_to_sai( + lemming::dataplane::sai::BufferPoolAttr val) { + switch (val) { + case lemming::dataplane::sai::BUFFER_POOL_ATTR_SHARED_SIZE: + return SAI_BUFFER_POOL_ATTR_SHARED_SIZE; + + case lemming::dataplane::sai::BUFFER_POOL_ATTR_TYPE: + return SAI_BUFFER_POOL_ATTR_TYPE; + + case lemming::dataplane::sai::BUFFER_POOL_ATTR_SIZE: + return SAI_BUFFER_POOL_ATTR_SIZE; + + case lemming::dataplane::sai::BUFFER_POOL_ATTR_THRESHOLD_MODE: + return SAI_BUFFER_POOL_ATTR_THRESHOLD_MODE; + + case lemming::dataplane::sai::BUFFER_POOL_ATTR_TAM: + return SAI_BUFFER_POOL_ATTR_TAM; + + case lemming::dataplane::sai::BUFFER_POOL_ATTR_XOFF_SIZE: + return SAI_BUFFER_POOL_ATTR_XOFF_SIZE; + + case lemming::dataplane::sai::BUFFER_POOL_ATTR_WRED_PROFILE_ID: + return SAI_BUFFER_POOL_ATTR_WRED_PROFILE_ID; + + default: + return SAI_BUFFER_POOL_ATTR_SHARED_SIZE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_buffer_pool_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_buffer_pool_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_buffer_pool_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_buffer_pool_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BufferPoolStat convert_sai_buffer_pool_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai::BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES; + + case SAI_BUFFER_POOL_STAT_WATERMARK_BYTES: + return lemming::dataplane::sai::BUFFER_POOL_STAT_WATERMARK_BYTES; + + case SAI_BUFFER_POOL_STAT_DROPPED_PACKETS: + return lemming::dataplane::sai::BUFFER_POOL_STAT_DROPPED_PACKETS; + + case SAI_BUFFER_POOL_STAT_GREEN_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_GREEN_WRED_DROPPED_PACKETS; + + case SAI_BUFFER_POOL_STAT_GREEN_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::BUFFER_POOL_STAT_GREEN_WRED_DROPPED_BYTES; + + case SAI_BUFFER_POOL_STAT_YELLOW_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_YELLOW_WRED_DROPPED_PACKETS; + + case SAI_BUFFER_POOL_STAT_YELLOW_WRED_DROPPED_BYTES: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_YELLOW_WRED_DROPPED_BYTES; + + case SAI_BUFFER_POOL_STAT_RED_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::BUFFER_POOL_STAT_RED_WRED_DROPPED_PACKETS; + + case SAI_BUFFER_POOL_STAT_RED_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::BUFFER_POOL_STAT_RED_WRED_DROPPED_BYTES; + + case SAI_BUFFER_POOL_STAT_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::BUFFER_POOL_STAT_WRED_DROPPED_PACKETS; + + case SAI_BUFFER_POOL_STAT_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::BUFFER_POOL_STAT_WRED_DROPPED_BYTES; + + case SAI_BUFFER_POOL_STAT_GREEN_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_GREEN_WRED_ECN_MARKED_PACKETS; + + case SAI_BUFFER_POOL_STAT_GREEN_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_GREEN_WRED_ECN_MARKED_BYTES; + + case SAI_BUFFER_POOL_STAT_YELLOW_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_YELLOW_WRED_ECN_MARKED_PACKETS; + + case SAI_BUFFER_POOL_STAT_YELLOW_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_YELLOW_WRED_ECN_MARKED_BYTES; + + case SAI_BUFFER_POOL_STAT_RED_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_RED_WRED_ECN_MARKED_PACKETS; + + case SAI_BUFFER_POOL_STAT_RED_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_RED_WRED_ECN_MARKED_BYTES; + + case SAI_BUFFER_POOL_STAT_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai::BUFFER_POOL_STAT_WRED_ECN_MARKED_PACKETS; + + case SAI_BUFFER_POOL_STAT_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai::BUFFER_POOL_STAT_WRED_ECN_MARKED_BYTES; + + case SAI_BUFFER_POOL_STAT_XOFF_ROOM_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_XOFF_ROOM_CURR_OCCUPANCY_BYTES; + + case SAI_BUFFER_POOL_STAT_XOFF_ROOM_WATERMARK_BYTES: + return lemming::dataplane::sai:: + BUFFER_POOL_STAT_XOFF_ROOM_WATERMARK_BYTES; + + case SAI_BUFFER_POOL_STAT_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::BUFFER_POOL_STAT_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::BUFFER_POOL_STAT_UNSPECIFIED; + } +} +sai_buffer_pool_stat_t convert_sai_buffer_pool_stat_t_to_sai( + lemming::dataplane::sai::BufferPoolStat val) { + switch (val) { + case lemming::dataplane::sai::BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES: + return SAI_BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_WATERMARK_BYTES: + return SAI_BUFFER_POOL_STAT_WATERMARK_BYTES; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_DROPPED_PACKETS: + return SAI_BUFFER_POOL_STAT_DROPPED_PACKETS; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_GREEN_WRED_DROPPED_PACKETS: + return SAI_BUFFER_POOL_STAT_GREEN_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_GREEN_WRED_DROPPED_BYTES: + return SAI_BUFFER_POOL_STAT_GREEN_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_YELLOW_WRED_DROPPED_PACKETS: + return SAI_BUFFER_POOL_STAT_YELLOW_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_YELLOW_WRED_DROPPED_BYTES: + return SAI_BUFFER_POOL_STAT_YELLOW_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_RED_WRED_DROPPED_PACKETS: + return SAI_BUFFER_POOL_STAT_RED_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_RED_WRED_DROPPED_BYTES: + return SAI_BUFFER_POOL_STAT_RED_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_WRED_DROPPED_PACKETS: + return SAI_BUFFER_POOL_STAT_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_WRED_DROPPED_BYTES: + return SAI_BUFFER_POOL_STAT_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai:: + BUFFER_POOL_STAT_GREEN_WRED_ECN_MARKED_PACKETS: + return SAI_BUFFER_POOL_STAT_GREEN_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_GREEN_WRED_ECN_MARKED_BYTES: + return SAI_BUFFER_POOL_STAT_GREEN_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai:: + BUFFER_POOL_STAT_YELLOW_WRED_ECN_MARKED_PACKETS: + return SAI_BUFFER_POOL_STAT_YELLOW_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_YELLOW_WRED_ECN_MARKED_BYTES: + return SAI_BUFFER_POOL_STAT_YELLOW_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_RED_WRED_ECN_MARKED_PACKETS: + return SAI_BUFFER_POOL_STAT_RED_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_RED_WRED_ECN_MARKED_BYTES: + return SAI_BUFFER_POOL_STAT_RED_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_WRED_ECN_MARKED_PACKETS: + return SAI_BUFFER_POOL_STAT_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_WRED_ECN_MARKED_BYTES: + return SAI_BUFFER_POOL_STAT_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai:: + BUFFER_POOL_STAT_XOFF_ROOM_CURR_OCCUPANCY_BYTES: + return SAI_BUFFER_POOL_STAT_XOFF_ROOM_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_XOFF_ROOM_WATERMARK_BYTES: + return SAI_BUFFER_POOL_STAT_XOFF_ROOM_WATERMARK_BYTES; + + case lemming::dataplane::sai::BUFFER_POOL_STAT_CUSTOM_RANGE_BASE: + return SAI_BUFFER_POOL_STAT_CUSTOM_RANGE_BASE; + + default: + return SAI_BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES; + } +} + +google::protobuf::RepeatedField +convert_list_sai_buffer_pool_stat_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_buffer_pool_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_buffer_pool_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_buffer_pool_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BufferPoolThresholdMode +convert_sai_buffer_pool_threshold_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BUFFER_POOL_THRESHOLD_MODE_STATIC: + return lemming::dataplane::sai::BUFFER_POOL_THRESHOLD_MODE_STATIC; + + case SAI_BUFFER_POOL_THRESHOLD_MODE_DYNAMIC: + return lemming::dataplane::sai::BUFFER_POOL_THRESHOLD_MODE_DYNAMIC; + + default: + return lemming::dataplane::sai::BUFFER_POOL_THRESHOLD_MODE_UNSPECIFIED; + } +} +sai_buffer_pool_threshold_mode_t +convert_sai_buffer_pool_threshold_mode_t_to_sai( + lemming::dataplane::sai::BufferPoolThresholdMode val) { + switch (val) { + case lemming::dataplane::sai::BUFFER_POOL_THRESHOLD_MODE_STATIC: + return SAI_BUFFER_POOL_THRESHOLD_MODE_STATIC; + + case lemming::dataplane::sai::BUFFER_POOL_THRESHOLD_MODE_DYNAMIC: + return SAI_BUFFER_POOL_THRESHOLD_MODE_DYNAMIC; + + default: + return SAI_BUFFER_POOL_THRESHOLD_MODE_STATIC; + } +} + +google::protobuf::RepeatedField +convert_list_sai_buffer_pool_threshold_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_buffer_pool_threshold_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_buffer_pool_threshold_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_buffer_pool_threshold_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BufferPoolType convert_sai_buffer_pool_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_BUFFER_POOL_TYPE_INGRESS: + return lemming::dataplane::sai::BUFFER_POOL_TYPE_INGRESS; + + case SAI_BUFFER_POOL_TYPE_EGRESS: + return lemming::dataplane::sai::BUFFER_POOL_TYPE_EGRESS; + + case SAI_BUFFER_POOL_TYPE_BOTH: + return lemming::dataplane::sai::BUFFER_POOL_TYPE_BOTH; + + default: + return lemming::dataplane::sai::BUFFER_POOL_TYPE_UNSPECIFIED; + } +} +sai_buffer_pool_type_t convert_sai_buffer_pool_type_t_to_sai( + lemming::dataplane::sai::BufferPoolType val) { + switch (val) { + case lemming::dataplane::sai::BUFFER_POOL_TYPE_INGRESS: + return SAI_BUFFER_POOL_TYPE_INGRESS; + + case lemming::dataplane::sai::BUFFER_POOL_TYPE_EGRESS: + return SAI_BUFFER_POOL_TYPE_EGRESS; + + case lemming::dataplane::sai::BUFFER_POOL_TYPE_BOTH: + return SAI_BUFFER_POOL_TYPE_BOTH; + + default: + return SAI_BUFFER_POOL_TYPE_INGRESS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_buffer_pool_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_buffer_pool_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_buffer_pool_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_buffer_pool_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BufferProfileAttr +convert_sai_buffer_profile_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BUFFER_PROFILE_ATTR_POOL_ID: + return lemming::dataplane::sai::BUFFER_PROFILE_ATTR_POOL_ID; + + case SAI_BUFFER_PROFILE_ATTR_RESERVED_BUFFER_SIZE: + return lemming::dataplane::sai::BUFFER_PROFILE_ATTR_RESERVED_BUFFER_SIZE; + + case SAI_BUFFER_PROFILE_ATTR_THRESHOLD_MODE: + return lemming::dataplane::sai::BUFFER_PROFILE_ATTR_THRESHOLD_MODE; + + case SAI_BUFFER_PROFILE_ATTR_SHARED_DYNAMIC_TH: + return lemming::dataplane::sai::BUFFER_PROFILE_ATTR_SHARED_DYNAMIC_TH; + + case SAI_BUFFER_PROFILE_ATTR_SHARED_STATIC_TH: + return lemming::dataplane::sai::BUFFER_PROFILE_ATTR_SHARED_STATIC_TH; + + case SAI_BUFFER_PROFILE_ATTR_XOFF_TH: + return lemming::dataplane::sai::BUFFER_PROFILE_ATTR_XOFF_TH; + + case SAI_BUFFER_PROFILE_ATTR_XON_TH: + return lemming::dataplane::sai::BUFFER_PROFILE_ATTR_XON_TH; + + case SAI_BUFFER_PROFILE_ATTR_XON_OFFSET_TH: + return lemming::dataplane::sai::BUFFER_PROFILE_ATTR_XON_OFFSET_TH; + + default: + return lemming::dataplane::sai::BUFFER_PROFILE_ATTR_UNSPECIFIED; + } +} +sai_buffer_profile_attr_t convert_sai_buffer_profile_attr_t_to_sai( + lemming::dataplane::sai::BufferProfileAttr val) { + switch (val) { + case lemming::dataplane::sai::BUFFER_PROFILE_ATTR_POOL_ID: + return SAI_BUFFER_PROFILE_ATTR_POOL_ID; + + case lemming::dataplane::sai::BUFFER_PROFILE_ATTR_RESERVED_BUFFER_SIZE: + return SAI_BUFFER_PROFILE_ATTR_RESERVED_BUFFER_SIZE; + + case lemming::dataplane::sai::BUFFER_PROFILE_ATTR_THRESHOLD_MODE: + return SAI_BUFFER_PROFILE_ATTR_THRESHOLD_MODE; + + case lemming::dataplane::sai::BUFFER_PROFILE_ATTR_SHARED_DYNAMIC_TH: + return SAI_BUFFER_PROFILE_ATTR_SHARED_DYNAMIC_TH; + + case lemming::dataplane::sai::BUFFER_PROFILE_ATTR_SHARED_STATIC_TH: + return SAI_BUFFER_PROFILE_ATTR_SHARED_STATIC_TH; + + case lemming::dataplane::sai::BUFFER_PROFILE_ATTR_XOFF_TH: + return SAI_BUFFER_PROFILE_ATTR_XOFF_TH; + + case lemming::dataplane::sai::BUFFER_PROFILE_ATTR_XON_TH: + return SAI_BUFFER_PROFILE_ATTR_XON_TH; + + case lemming::dataplane::sai::BUFFER_PROFILE_ATTR_XON_OFFSET_TH: + return SAI_BUFFER_PROFILE_ATTR_XON_OFFSET_TH; + + default: + return SAI_BUFFER_PROFILE_ATTR_POOL_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_buffer_profile_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_buffer_profile_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_buffer_profile_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_buffer_profile_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BufferProfileThresholdMode +convert_sai_buffer_profile_threshold_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BUFFER_PROFILE_THRESHOLD_MODE_STATIC: + return lemming::dataplane::sai::BUFFER_PROFILE_THRESHOLD_MODE_STATIC; + + case SAI_BUFFER_PROFILE_THRESHOLD_MODE_DYNAMIC: + return lemming::dataplane::sai::BUFFER_PROFILE_THRESHOLD_MODE_DYNAMIC; + + default: + return lemming::dataplane::sai::BUFFER_PROFILE_THRESHOLD_MODE_UNSPECIFIED; + } +} +sai_buffer_profile_threshold_mode_t +convert_sai_buffer_profile_threshold_mode_t_to_sai( + lemming::dataplane::sai::BufferProfileThresholdMode val) { + switch (val) { + case lemming::dataplane::sai::BUFFER_PROFILE_THRESHOLD_MODE_STATIC: + return SAI_BUFFER_PROFILE_THRESHOLD_MODE_STATIC; + + case lemming::dataplane::sai::BUFFER_PROFILE_THRESHOLD_MODE_DYNAMIC: + return SAI_BUFFER_PROFILE_THRESHOLD_MODE_DYNAMIC; + + default: + return SAI_BUFFER_PROFILE_THRESHOLD_MODE_STATIC; + } +} + +google::protobuf::RepeatedField +convert_list_sai_buffer_profile_threshold_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_buffer_profile_threshold_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_buffer_profile_threshold_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_buffer_profile_threshold_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::BulkOpErrorMode +convert_sai_bulk_op_error_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR: + return lemming::dataplane::sai::BULK_OP_ERROR_MODE_STOP_ON_ERROR; + + case SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR: + return lemming::dataplane::sai::BULK_OP_ERROR_MODE_IGNORE_ERROR; + + default: + return lemming::dataplane::sai::BULK_OP_ERROR_MODE_UNSPECIFIED; + } +} +sai_bulk_op_error_mode_t convert_sai_bulk_op_error_mode_t_to_sai( + lemming::dataplane::sai::BulkOpErrorMode val) { + switch (val) { + case lemming::dataplane::sai::BULK_OP_ERROR_MODE_STOP_ON_ERROR: + return SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR; + + case lemming::dataplane::sai::BULK_OP_ERROR_MODE_IGNORE_ERROR: + return SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR; + + default: + return SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR; + } +} + +google::protobuf::RepeatedField +convert_list_sai_bulk_op_error_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_bulk_op_error_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_bulk_op_error_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_bulk_op_error_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::CommonApi convert_sai_common_api_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_COMMON_API_CREATE: + return lemming::dataplane::sai::COMMON_API_CREATE; + + case SAI_COMMON_API_REMOVE: + return lemming::dataplane::sai::COMMON_API_REMOVE; + + case SAI_COMMON_API_SET: + return lemming::dataplane::sai::COMMON_API_SET; + + case SAI_COMMON_API_GET: + return lemming::dataplane::sai::COMMON_API_GET; + + case SAI_COMMON_API_BULK_CREATE: + return lemming::dataplane::sai::COMMON_API_BULK_CREATE; + + case SAI_COMMON_API_BULK_REMOVE: + return lemming::dataplane::sai::COMMON_API_BULK_REMOVE; + + case SAI_COMMON_API_BULK_SET: + return lemming::dataplane::sai::COMMON_API_BULK_SET; + + case SAI_COMMON_API_BULK_GET: + return lemming::dataplane::sai::COMMON_API_BULK_GET; + + case SAI_COMMON_API_MAX: + return lemming::dataplane::sai::COMMON_API_MAX; + + default: + return lemming::dataplane::sai::COMMON_API_UNSPECIFIED; + } +} +sai_common_api_t convert_sai_common_api_t_to_sai( + lemming::dataplane::sai::CommonApi val) { + switch (val) { + case lemming::dataplane::sai::COMMON_API_CREATE: + return SAI_COMMON_API_CREATE; + + case lemming::dataplane::sai::COMMON_API_REMOVE: + return SAI_COMMON_API_REMOVE; + + case lemming::dataplane::sai::COMMON_API_SET: + return SAI_COMMON_API_SET; + + case lemming::dataplane::sai::COMMON_API_GET: + return SAI_COMMON_API_GET; + + case lemming::dataplane::sai::COMMON_API_BULK_CREATE: + return SAI_COMMON_API_BULK_CREATE; + + case lemming::dataplane::sai::COMMON_API_BULK_REMOVE: + return SAI_COMMON_API_BULK_REMOVE; + + case lemming::dataplane::sai::COMMON_API_BULK_SET: + return SAI_COMMON_API_BULK_SET; + + case lemming::dataplane::sai::COMMON_API_BULK_GET: + return SAI_COMMON_API_BULK_GET; + + case lemming::dataplane::sai::COMMON_API_MAX: + return SAI_COMMON_API_MAX; + + default: + return SAI_COMMON_API_CREATE; + } +} + +google::protobuf::RepeatedField convert_list_sai_common_api_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_common_api_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_common_api_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_common_api_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::CounterAttr convert_sai_counter_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_COUNTER_ATTR_TYPE: + return lemming::dataplane::sai::COUNTER_ATTR_TYPE; + + case SAI_COUNTER_ATTR_LABEL: + return lemming::dataplane::sai::COUNTER_ATTR_LABEL; + + default: + return lemming::dataplane::sai::COUNTER_ATTR_UNSPECIFIED; + } +} +sai_counter_attr_t convert_sai_counter_attr_t_to_sai( + lemming::dataplane::sai::CounterAttr val) { + switch (val) { + case lemming::dataplane::sai::COUNTER_ATTR_TYPE: + return SAI_COUNTER_ATTR_TYPE; + + case lemming::dataplane::sai::COUNTER_ATTR_LABEL: + return SAI_COUNTER_ATTR_LABEL; + + default: + return SAI_COUNTER_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_counter_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_counter_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_counter_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_counter_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::CounterStat convert_sai_counter_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_COUNTER_STAT_PACKETS: + return lemming::dataplane::sai::COUNTER_STAT_PACKETS; + + case SAI_COUNTER_STAT_BYTES: + return lemming::dataplane::sai::COUNTER_STAT_BYTES; + + case SAI_COUNTER_STAT_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::COUNTER_STAT_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::COUNTER_STAT_UNSPECIFIED; + } +} +sai_counter_stat_t convert_sai_counter_stat_t_to_sai( + lemming::dataplane::sai::CounterStat val) { + switch (val) { + case lemming::dataplane::sai::COUNTER_STAT_PACKETS: + return SAI_COUNTER_STAT_PACKETS; + + case lemming::dataplane::sai::COUNTER_STAT_BYTES: + return SAI_COUNTER_STAT_BYTES; + + case lemming::dataplane::sai::COUNTER_STAT_CUSTOM_RANGE_BASE: + return SAI_COUNTER_STAT_CUSTOM_RANGE_BASE; + + default: + return SAI_COUNTER_STAT_PACKETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_counter_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_counter_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_counter_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_counter_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::CounterType convert_sai_counter_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_COUNTER_TYPE_REGULAR: + return lemming::dataplane::sai::COUNTER_TYPE_REGULAR; + + default: + return lemming::dataplane::sai::COUNTER_TYPE_UNSPECIFIED; + } +} +sai_counter_type_t convert_sai_counter_type_t_to_sai( + lemming::dataplane::sai::CounterType val) { + switch (val) { + case lemming::dataplane::sai::COUNTER_TYPE_REGULAR: + return SAI_COUNTER_TYPE_REGULAR; + + default: + return SAI_COUNTER_TYPE_REGULAR; + } +} + +google::protobuf::RepeatedField convert_list_sai_counter_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_counter_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_counter_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_counter_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::DebugCounterAttr +convert_sai_debug_counter_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_DEBUG_COUNTER_ATTR_INDEX: + return lemming::dataplane::sai::DEBUG_COUNTER_ATTR_INDEX; + + case SAI_DEBUG_COUNTER_ATTR_TYPE: + return lemming::dataplane::sai::DEBUG_COUNTER_ATTR_TYPE; + + case SAI_DEBUG_COUNTER_ATTR_BIND_METHOD: + return lemming::dataplane::sai::DEBUG_COUNTER_ATTR_BIND_METHOD; + + case SAI_DEBUG_COUNTER_ATTR_IN_DROP_REASON_LIST: + return lemming::dataplane::sai::DEBUG_COUNTER_ATTR_IN_DROP_REASON_LIST; + + case SAI_DEBUG_COUNTER_ATTR_OUT_DROP_REASON_LIST: + return lemming::dataplane::sai::DEBUG_COUNTER_ATTR_OUT_DROP_REASON_LIST; + + default: + return lemming::dataplane::sai::DEBUG_COUNTER_ATTR_UNSPECIFIED; + } +} +sai_debug_counter_attr_t convert_sai_debug_counter_attr_t_to_sai( + lemming::dataplane::sai::DebugCounterAttr val) { + switch (val) { + case lemming::dataplane::sai::DEBUG_COUNTER_ATTR_INDEX: + return SAI_DEBUG_COUNTER_ATTR_INDEX; + + case lemming::dataplane::sai::DEBUG_COUNTER_ATTR_TYPE: + return SAI_DEBUG_COUNTER_ATTR_TYPE; + + case lemming::dataplane::sai::DEBUG_COUNTER_ATTR_BIND_METHOD: + return SAI_DEBUG_COUNTER_ATTR_BIND_METHOD; + + case lemming::dataplane::sai::DEBUG_COUNTER_ATTR_IN_DROP_REASON_LIST: + return SAI_DEBUG_COUNTER_ATTR_IN_DROP_REASON_LIST; + + case lemming::dataplane::sai::DEBUG_COUNTER_ATTR_OUT_DROP_REASON_LIST: + return SAI_DEBUG_COUNTER_ATTR_OUT_DROP_REASON_LIST; + + default: + return SAI_DEBUG_COUNTER_ATTR_INDEX; + } +} + +google::protobuf::RepeatedField +convert_list_sai_debug_counter_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_debug_counter_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_debug_counter_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_debug_counter_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::DebugCounterBindMethod +convert_sai_debug_counter_bind_method_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_DEBUG_COUNTER_BIND_METHOD_AUTOMATIC: + return lemming::dataplane::sai::DEBUG_COUNTER_BIND_METHOD_AUTOMATIC; + + default: + return lemming::dataplane::sai::DEBUG_COUNTER_BIND_METHOD_UNSPECIFIED; + } +} +sai_debug_counter_bind_method_t convert_sai_debug_counter_bind_method_t_to_sai( + lemming::dataplane::sai::DebugCounterBindMethod val) { + switch (val) { + case lemming::dataplane::sai::DEBUG_COUNTER_BIND_METHOD_AUTOMATIC: + return SAI_DEBUG_COUNTER_BIND_METHOD_AUTOMATIC; + + default: + return SAI_DEBUG_COUNTER_BIND_METHOD_AUTOMATIC; + } +} + +google::protobuf::RepeatedField +convert_list_sai_debug_counter_bind_method_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_debug_counter_bind_method_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_debug_counter_bind_method_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_debug_counter_bind_method_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::DebugCounterType +convert_sai_debug_counter_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_DEBUG_COUNTER_TYPE_PORT_IN_DROP_REASONS: + return lemming::dataplane::sai::DEBUG_COUNTER_TYPE_PORT_IN_DROP_REASONS; + + case SAI_DEBUG_COUNTER_TYPE_PORT_OUT_DROP_REASONS: + return lemming::dataplane::sai::DEBUG_COUNTER_TYPE_PORT_OUT_DROP_REASONS; + + case SAI_DEBUG_COUNTER_TYPE_SWITCH_IN_DROP_REASONS: + return lemming::dataplane::sai::DEBUG_COUNTER_TYPE_SWITCH_IN_DROP_REASONS; + + case SAI_DEBUG_COUNTER_TYPE_SWITCH_OUT_DROP_REASONS: + return lemming::dataplane::sai:: + DEBUG_COUNTER_TYPE_SWITCH_OUT_DROP_REASONS; + + default: + return lemming::dataplane::sai::DEBUG_COUNTER_TYPE_UNSPECIFIED; + } +} +sai_debug_counter_type_t convert_sai_debug_counter_type_t_to_sai( + lemming::dataplane::sai::DebugCounterType val) { + switch (val) { + case lemming::dataplane::sai::DEBUG_COUNTER_TYPE_PORT_IN_DROP_REASONS: + return SAI_DEBUG_COUNTER_TYPE_PORT_IN_DROP_REASONS; + + case lemming::dataplane::sai::DEBUG_COUNTER_TYPE_PORT_OUT_DROP_REASONS: + return SAI_DEBUG_COUNTER_TYPE_PORT_OUT_DROP_REASONS; + + case lemming::dataplane::sai::DEBUG_COUNTER_TYPE_SWITCH_IN_DROP_REASONS: + return SAI_DEBUG_COUNTER_TYPE_SWITCH_IN_DROP_REASONS; + + case lemming::dataplane::sai::DEBUG_COUNTER_TYPE_SWITCH_OUT_DROP_REASONS: + return SAI_DEBUG_COUNTER_TYPE_SWITCH_OUT_DROP_REASONS; + + default: + return SAI_DEBUG_COUNTER_TYPE_PORT_IN_DROP_REASONS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_debug_counter_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_debug_counter_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_debug_counter_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_debug_counter_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::DtelAttr convert_sai_dtel_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_DTEL_ATTR_INT_ENDPOINT_ENABLE: + return lemming::dataplane::sai::DTEL_ATTR_INT_ENDPOINT_ENABLE; + + case SAI_DTEL_ATTR_INT_TRANSIT_ENABLE: + return lemming::dataplane::sai::DTEL_ATTR_INT_TRANSIT_ENABLE; + + case SAI_DTEL_ATTR_POSTCARD_ENABLE: + return lemming::dataplane::sai::DTEL_ATTR_POSTCARD_ENABLE; + + case SAI_DTEL_ATTR_DROP_REPORT_ENABLE: + return lemming::dataplane::sai::DTEL_ATTR_DROP_REPORT_ENABLE; + + case SAI_DTEL_ATTR_QUEUE_REPORT_ENABLE: + return lemming::dataplane::sai::DTEL_ATTR_QUEUE_REPORT_ENABLE; + + case SAI_DTEL_ATTR_SWITCH_ID: + return lemming::dataplane::sai::DTEL_ATTR_SWITCH_ID; + + case SAI_DTEL_ATTR_FLOW_STATE_CLEAR_CYCLE: + return lemming::dataplane::sai::DTEL_ATTR_FLOW_STATE_CLEAR_CYCLE; + + case SAI_DTEL_ATTR_LATENCY_SENSITIVITY: + return lemming::dataplane::sai::DTEL_ATTR_LATENCY_SENSITIVITY; + + case SAI_DTEL_ATTR_SINK_PORT_LIST: + return lemming::dataplane::sai::DTEL_ATTR_SINK_PORT_LIST; + + case SAI_DTEL_ATTR_INT_L4_DSCP: + return lemming::dataplane::sai::DTEL_ATTR_INT_L4_DSCP; + + default: + return lemming::dataplane::sai::DTEL_ATTR_UNSPECIFIED; + } +} +sai_dtel_attr_t convert_sai_dtel_attr_t_to_sai( + lemming::dataplane::sai::DtelAttr val) { + switch (val) { + case lemming::dataplane::sai::DTEL_ATTR_INT_ENDPOINT_ENABLE: + return SAI_DTEL_ATTR_INT_ENDPOINT_ENABLE; + + case lemming::dataplane::sai::DTEL_ATTR_INT_TRANSIT_ENABLE: + return SAI_DTEL_ATTR_INT_TRANSIT_ENABLE; + + case lemming::dataplane::sai::DTEL_ATTR_POSTCARD_ENABLE: + return SAI_DTEL_ATTR_POSTCARD_ENABLE; + + case lemming::dataplane::sai::DTEL_ATTR_DROP_REPORT_ENABLE: + return SAI_DTEL_ATTR_DROP_REPORT_ENABLE; + + case lemming::dataplane::sai::DTEL_ATTR_QUEUE_REPORT_ENABLE: + return SAI_DTEL_ATTR_QUEUE_REPORT_ENABLE; + + case lemming::dataplane::sai::DTEL_ATTR_SWITCH_ID: + return SAI_DTEL_ATTR_SWITCH_ID; + + case lemming::dataplane::sai::DTEL_ATTR_FLOW_STATE_CLEAR_CYCLE: + return SAI_DTEL_ATTR_FLOW_STATE_CLEAR_CYCLE; + + case lemming::dataplane::sai::DTEL_ATTR_LATENCY_SENSITIVITY: + return SAI_DTEL_ATTR_LATENCY_SENSITIVITY; + + case lemming::dataplane::sai::DTEL_ATTR_SINK_PORT_LIST: + return SAI_DTEL_ATTR_SINK_PORT_LIST; + + case lemming::dataplane::sai::DTEL_ATTR_INT_L4_DSCP: + return SAI_DTEL_ATTR_INT_L4_DSCP; + + default: + return SAI_DTEL_ATTR_INT_ENDPOINT_ENABLE; + } +} + +google::protobuf::RepeatedField convert_list_sai_dtel_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_dtel_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_dtel_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_dtel_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::DtelEventAttr convert_sai_dtel_event_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_DTEL_EVENT_ATTR_TYPE: + return lemming::dataplane::sai::DTEL_EVENT_ATTR_TYPE; + + case SAI_DTEL_EVENT_ATTR_REPORT_SESSION: + return lemming::dataplane::sai::DTEL_EVENT_ATTR_REPORT_SESSION; + + case SAI_DTEL_EVENT_ATTR_DSCP_VALUE: + return lemming::dataplane::sai::DTEL_EVENT_ATTR_DSCP_VALUE; + + default: + return lemming::dataplane::sai::DTEL_EVENT_ATTR_UNSPECIFIED; + } +} +sai_dtel_event_attr_t convert_sai_dtel_event_attr_t_to_sai( + lemming::dataplane::sai::DtelEventAttr val) { + switch (val) { + case lemming::dataplane::sai::DTEL_EVENT_ATTR_TYPE: + return SAI_DTEL_EVENT_ATTR_TYPE; + + case lemming::dataplane::sai::DTEL_EVENT_ATTR_REPORT_SESSION: + return SAI_DTEL_EVENT_ATTR_REPORT_SESSION; + + case lemming::dataplane::sai::DTEL_EVENT_ATTR_DSCP_VALUE: + return SAI_DTEL_EVENT_ATTR_DSCP_VALUE; + + default: + return SAI_DTEL_EVENT_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_dtel_event_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_dtel_event_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_dtel_event_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_dtel_event_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::DtelEventType convert_sai_dtel_event_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_DTEL_EVENT_TYPE_FLOW_STATE: + return lemming::dataplane::sai::DTEL_EVENT_TYPE_FLOW_STATE; + + case SAI_DTEL_EVENT_TYPE_FLOW_REPORT_ALL_PACKETS: + return lemming::dataplane::sai::DTEL_EVENT_TYPE_FLOW_REPORT_ALL_PACKETS; + + case SAI_DTEL_EVENT_TYPE_FLOW_TCPFLAG: + return lemming::dataplane::sai::DTEL_EVENT_TYPE_FLOW_TCPFLAG; + + case SAI_DTEL_EVENT_TYPE_QUEUE_REPORT_THRESHOLD_BREACH: + return lemming::dataplane::sai:: + DTEL_EVENT_TYPE_QUEUE_REPORT_THRESHOLD_BREACH; + + case SAI_DTEL_EVENT_TYPE_QUEUE_REPORT_TAIL_DROP: + return lemming::dataplane::sai::DTEL_EVENT_TYPE_QUEUE_REPORT_TAIL_DROP; + + case SAI_DTEL_EVENT_TYPE_DROP_REPORT: + return lemming::dataplane::sai::DTEL_EVENT_TYPE_DROP_REPORT; + + case SAI_DTEL_EVENT_TYPE_MAX: + return lemming::dataplane::sai::DTEL_EVENT_TYPE_MAX; + + default: + return lemming::dataplane::sai::DTEL_EVENT_TYPE_UNSPECIFIED; + } +} +sai_dtel_event_type_t convert_sai_dtel_event_type_t_to_sai( + lemming::dataplane::sai::DtelEventType val) { + switch (val) { + case lemming::dataplane::sai::DTEL_EVENT_TYPE_FLOW_STATE: + return SAI_DTEL_EVENT_TYPE_FLOW_STATE; + + case lemming::dataplane::sai::DTEL_EVENT_TYPE_FLOW_REPORT_ALL_PACKETS: + return SAI_DTEL_EVENT_TYPE_FLOW_REPORT_ALL_PACKETS; + + case lemming::dataplane::sai::DTEL_EVENT_TYPE_FLOW_TCPFLAG: + return SAI_DTEL_EVENT_TYPE_FLOW_TCPFLAG; + + case lemming::dataplane::sai::DTEL_EVENT_TYPE_QUEUE_REPORT_THRESHOLD_BREACH: + return SAI_DTEL_EVENT_TYPE_QUEUE_REPORT_THRESHOLD_BREACH; + + case lemming::dataplane::sai::DTEL_EVENT_TYPE_QUEUE_REPORT_TAIL_DROP: + return SAI_DTEL_EVENT_TYPE_QUEUE_REPORT_TAIL_DROP; + + case lemming::dataplane::sai::DTEL_EVENT_TYPE_DROP_REPORT: + return SAI_DTEL_EVENT_TYPE_DROP_REPORT; + + case lemming::dataplane::sai::DTEL_EVENT_TYPE_MAX: + return SAI_DTEL_EVENT_TYPE_MAX; + + default: + return SAI_DTEL_EVENT_TYPE_FLOW_STATE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_dtel_event_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_dtel_event_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_dtel_event_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_dtel_event_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::DtelIntSessionAttr +convert_sai_dtel_int_session_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_DTEL_INT_SESSION_ATTR_MAX_HOP_COUNT: + return lemming::dataplane::sai::DTEL_INT_SESSION_ATTR_MAX_HOP_COUNT; + + case SAI_DTEL_INT_SESSION_ATTR_COLLECT_SWITCH_ID: + return lemming::dataplane::sai::DTEL_INT_SESSION_ATTR_COLLECT_SWITCH_ID; + + case SAI_DTEL_INT_SESSION_ATTR_COLLECT_SWITCH_PORTS: + return lemming::dataplane::sai:: + DTEL_INT_SESSION_ATTR_COLLECT_SWITCH_PORTS; + + case SAI_DTEL_INT_SESSION_ATTR_COLLECT_INGRESS_TIMESTAMP: + return lemming::dataplane::sai:: + DTEL_INT_SESSION_ATTR_COLLECT_INGRESS_TIMESTAMP; + + case SAI_DTEL_INT_SESSION_ATTR_COLLECT_EGRESS_TIMESTAMP: + return lemming::dataplane::sai:: + DTEL_INT_SESSION_ATTR_COLLECT_EGRESS_TIMESTAMP; + + case SAI_DTEL_INT_SESSION_ATTR_COLLECT_QUEUE_INFO: + return lemming::dataplane::sai::DTEL_INT_SESSION_ATTR_COLLECT_QUEUE_INFO; + + default: + return lemming::dataplane::sai::DTEL_INT_SESSION_ATTR_UNSPECIFIED; + } +} +sai_dtel_int_session_attr_t convert_sai_dtel_int_session_attr_t_to_sai( + lemming::dataplane::sai::DtelIntSessionAttr val) { + switch (val) { + case lemming::dataplane::sai::DTEL_INT_SESSION_ATTR_MAX_HOP_COUNT: + return SAI_DTEL_INT_SESSION_ATTR_MAX_HOP_COUNT; + + case lemming::dataplane::sai::DTEL_INT_SESSION_ATTR_COLLECT_SWITCH_ID: + return SAI_DTEL_INT_SESSION_ATTR_COLLECT_SWITCH_ID; + + case lemming::dataplane::sai::DTEL_INT_SESSION_ATTR_COLLECT_SWITCH_PORTS: + return SAI_DTEL_INT_SESSION_ATTR_COLLECT_SWITCH_PORTS; + + case lemming::dataplane::sai:: + DTEL_INT_SESSION_ATTR_COLLECT_INGRESS_TIMESTAMP: + return SAI_DTEL_INT_SESSION_ATTR_COLLECT_INGRESS_TIMESTAMP; + + case lemming::dataplane::sai:: + DTEL_INT_SESSION_ATTR_COLLECT_EGRESS_TIMESTAMP: + return SAI_DTEL_INT_SESSION_ATTR_COLLECT_EGRESS_TIMESTAMP; + + case lemming::dataplane::sai::DTEL_INT_SESSION_ATTR_COLLECT_QUEUE_INFO: + return SAI_DTEL_INT_SESSION_ATTR_COLLECT_QUEUE_INFO; + + default: + return SAI_DTEL_INT_SESSION_ATTR_MAX_HOP_COUNT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_dtel_int_session_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_dtel_int_session_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_dtel_int_session_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_dtel_int_session_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::DtelQueueReportAttr +convert_sai_dtel_queue_report_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_DTEL_QUEUE_REPORT_ATTR_QUEUE_ID: + return lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_QUEUE_ID; + + case SAI_DTEL_QUEUE_REPORT_ATTR_DEPTH_THRESHOLD: + return lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_DEPTH_THRESHOLD; + + case SAI_DTEL_QUEUE_REPORT_ATTR_LATENCY_THRESHOLD: + return lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_LATENCY_THRESHOLD; + + case SAI_DTEL_QUEUE_REPORT_ATTR_BREACH_QUOTA: + return lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_BREACH_QUOTA; + + case SAI_DTEL_QUEUE_REPORT_ATTR_TAIL_DROP: + return lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_TAIL_DROP; + + default: + return lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_UNSPECIFIED; + } +} +sai_dtel_queue_report_attr_t convert_sai_dtel_queue_report_attr_t_to_sai( + lemming::dataplane::sai::DtelQueueReportAttr val) { + switch (val) { + case lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_QUEUE_ID: + return SAI_DTEL_QUEUE_REPORT_ATTR_QUEUE_ID; + + case lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_DEPTH_THRESHOLD: + return SAI_DTEL_QUEUE_REPORT_ATTR_DEPTH_THRESHOLD; + + case lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_LATENCY_THRESHOLD: + return SAI_DTEL_QUEUE_REPORT_ATTR_LATENCY_THRESHOLD; + + case lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_BREACH_QUOTA: + return SAI_DTEL_QUEUE_REPORT_ATTR_BREACH_QUOTA; + + case lemming::dataplane::sai::DTEL_QUEUE_REPORT_ATTR_TAIL_DROP: + return SAI_DTEL_QUEUE_REPORT_ATTR_TAIL_DROP; + + default: + return SAI_DTEL_QUEUE_REPORT_ATTR_QUEUE_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_dtel_queue_report_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_dtel_queue_report_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_dtel_queue_report_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_dtel_queue_report_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::DtelReportSessionAttr +convert_sai_dtel_report_session_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_DTEL_REPORT_SESSION_ATTR_SRC_IP: + return lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_SRC_IP; + + case SAI_DTEL_REPORT_SESSION_ATTR_DST_IP_LIST: + return lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_DST_IP_LIST; + + case SAI_DTEL_REPORT_SESSION_ATTR_VIRTUAL_ROUTER_ID: + return lemming::dataplane::sai:: + DTEL_REPORT_SESSION_ATTR_VIRTUAL_ROUTER_ID; + + case SAI_DTEL_REPORT_SESSION_ATTR_TRUNCATE_SIZE: + return lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_TRUNCATE_SIZE; + + case SAI_DTEL_REPORT_SESSION_ATTR_UDP_DST_PORT: + return lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_UDP_DST_PORT; + + default: + return lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_UNSPECIFIED; + } +} +sai_dtel_report_session_attr_t convert_sai_dtel_report_session_attr_t_to_sai( + lemming::dataplane::sai::DtelReportSessionAttr val) { + switch (val) { + case lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_SRC_IP: + return SAI_DTEL_REPORT_SESSION_ATTR_SRC_IP; + + case lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_DST_IP_LIST: + return SAI_DTEL_REPORT_SESSION_ATTR_DST_IP_LIST; + + case lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_VIRTUAL_ROUTER_ID: + return SAI_DTEL_REPORT_SESSION_ATTR_VIRTUAL_ROUTER_ID; + + case lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_TRUNCATE_SIZE: + return SAI_DTEL_REPORT_SESSION_ATTR_TRUNCATE_SIZE; + + case lemming::dataplane::sai::DTEL_REPORT_SESSION_ATTR_UDP_DST_PORT: + return SAI_DTEL_REPORT_SESSION_ATTR_UDP_DST_PORT; + + default: + return SAI_DTEL_REPORT_SESSION_ATTR_SRC_IP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_dtel_report_session_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_dtel_report_session_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_dtel_report_session_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_dtel_report_session_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::EcnMarkMode convert_sai_ecn_mark_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ECN_MARK_MODE_NONE: + return lemming::dataplane::sai::ECN_MARK_MODE_NONE; + + case SAI_ECN_MARK_MODE_GREEN: + return lemming::dataplane::sai::ECN_MARK_MODE_GREEN; + + case SAI_ECN_MARK_MODE_YELLOW: + return lemming::dataplane::sai::ECN_MARK_MODE_YELLOW; + + case SAI_ECN_MARK_MODE_RED: + return lemming::dataplane::sai::ECN_MARK_MODE_RED; + + case SAI_ECN_MARK_MODE_GREEN_YELLOW: + return lemming::dataplane::sai::ECN_MARK_MODE_GREEN_YELLOW; + + case SAI_ECN_MARK_MODE_GREEN_RED: + return lemming::dataplane::sai::ECN_MARK_MODE_GREEN_RED; + + case SAI_ECN_MARK_MODE_YELLOW_RED: + return lemming::dataplane::sai::ECN_MARK_MODE_YELLOW_RED; + + case SAI_ECN_MARK_MODE_ALL: + return lemming::dataplane::sai::ECN_MARK_MODE_ALL; + + default: + return lemming::dataplane::sai::ECN_MARK_MODE_UNSPECIFIED; + } +} +sai_ecn_mark_mode_t convert_sai_ecn_mark_mode_t_to_sai( + lemming::dataplane::sai::EcnMarkMode val) { + switch (val) { + case lemming::dataplane::sai::ECN_MARK_MODE_NONE: + return SAI_ECN_MARK_MODE_NONE; + + case lemming::dataplane::sai::ECN_MARK_MODE_GREEN: + return SAI_ECN_MARK_MODE_GREEN; + + case lemming::dataplane::sai::ECN_MARK_MODE_YELLOW: + return SAI_ECN_MARK_MODE_YELLOW; + + case lemming::dataplane::sai::ECN_MARK_MODE_RED: + return SAI_ECN_MARK_MODE_RED; + + case lemming::dataplane::sai::ECN_MARK_MODE_GREEN_YELLOW: + return SAI_ECN_MARK_MODE_GREEN_YELLOW; + + case lemming::dataplane::sai::ECN_MARK_MODE_GREEN_RED: + return SAI_ECN_MARK_MODE_GREEN_RED; + + case lemming::dataplane::sai::ECN_MARK_MODE_YELLOW_RED: + return SAI_ECN_MARK_MODE_YELLOW_RED; + + case lemming::dataplane::sai::ECN_MARK_MODE_ALL: + return SAI_ECN_MARK_MODE_ALL; + + default: + return SAI_ECN_MARK_MODE_NONE; + } +} + +google::protobuf::RepeatedField convert_list_sai_ecn_mark_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ecn_mark_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ecn_mark_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ecn_mark_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::ErspanEncapsulationType +convert_sai_erspan_encapsulation_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ERSPAN_ENCAPSULATION_TYPE_MIRROR_L3_GRE_TUNNEL: + return lemming::dataplane::sai:: + ERSPAN_ENCAPSULATION_TYPE_MIRROR_L3_GRE_TUNNEL; + + default: + return lemming::dataplane::sai::ERSPAN_ENCAPSULATION_TYPE_UNSPECIFIED; + } +} +sai_erspan_encapsulation_type_t convert_sai_erspan_encapsulation_type_t_to_sai( + lemming::dataplane::sai::ErspanEncapsulationType val) { + switch (val) { + case lemming::dataplane::sai:: + ERSPAN_ENCAPSULATION_TYPE_MIRROR_L3_GRE_TUNNEL: + return SAI_ERSPAN_ENCAPSULATION_TYPE_MIRROR_L3_GRE_TUNNEL; + + default: + return SAI_ERSPAN_ENCAPSULATION_TYPE_MIRROR_L3_GRE_TUNNEL; + } +} + +google::protobuf::RepeatedField +convert_list_sai_erspan_encapsulation_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_erspan_encapsulation_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_erspan_encapsulation_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_erspan_encapsulation_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::FdbEntryAttr convert_sai_fdb_entry_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_FDB_ENTRY_ATTR_TYPE: + return lemming::dataplane::sai::FDB_ENTRY_ATTR_TYPE; + + case SAI_FDB_ENTRY_ATTR_PACKET_ACTION: + return lemming::dataplane::sai::FDB_ENTRY_ATTR_PACKET_ACTION; + + case SAI_FDB_ENTRY_ATTR_USER_TRAP_ID: + return lemming::dataplane::sai::FDB_ENTRY_ATTR_USER_TRAP_ID; + + case SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID: + return lemming::dataplane::sai::FDB_ENTRY_ATTR_BRIDGE_PORT_ID; + + case SAI_FDB_ENTRY_ATTR_META_DATA: + return lemming::dataplane::sai::FDB_ENTRY_ATTR_META_DATA; + + case SAI_FDB_ENTRY_ATTR_ENDPOINT_IP: + return lemming::dataplane::sai::FDB_ENTRY_ATTR_ENDPOINT_IP; + + case SAI_FDB_ENTRY_ATTR_COUNTER_ID: + return lemming::dataplane::sai::FDB_ENTRY_ATTR_COUNTER_ID; + + case SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE: + return lemming::dataplane::sai::FDB_ENTRY_ATTR_ALLOW_MAC_MOVE; + + default: + return lemming::dataplane::sai::FDB_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_fdb_entry_attr_t convert_sai_fdb_entry_attr_t_to_sai( + lemming::dataplane::sai::FdbEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::FDB_ENTRY_ATTR_TYPE: + return SAI_FDB_ENTRY_ATTR_TYPE; + + case lemming::dataplane::sai::FDB_ENTRY_ATTR_PACKET_ACTION: + return SAI_FDB_ENTRY_ATTR_PACKET_ACTION; + + case lemming::dataplane::sai::FDB_ENTRY_ATTR_USER_TRAP_ID: + return SAI_FDB_ENTRY_ATTR_USER_TRAP_ID; + + case lemming::dataplane::sai::FDB_ENTRY_ATTR_BRIDGE_PORT_ID: + return SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID; + + case lemming::dataplane::sai::FDB_ENTRY_ATTR_META_DATA: + return SAI_FDB_ENTRY_ATTR_META_DATA; + + case lemming::dataplane::sai::FDB_ENTRY_ATTR_ENDPOINT_IP: + return SAI_FDB_ENTRY_ATTR_ENDPOINT_IP; + + case lemming::dataplane::sai::FDB_ENTRY_ATTR_COUNTER_ID: + return SAI_FDB_ENTRY_ATTR_COUNTER_ID; + + case lemming::dataplane::sai::FDB_ENTRY_ATTR_ALLOW_MAC_MOVE: + return SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE; + + default: + return SAI_FDB_ENTRY_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_fdb_entry_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_fdb_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_fdb_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_fdb_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::FdbEntryType convert_sai_fdb_entry_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_FDB_ENTRY_TYPE_DYNAMIC: + return lemming::dataplane::sai::FDB_ENTRY_TYPE_DYNAMIC; + + case SAI_FDB_ENTRY_TYPE_STATIC: + return lemming::dataplane::sai::FDB_ENTRY_TYPE_STATIC; + + default: + return lemming::dataplane::sai::FDB_ENTRY_TYPE_UNSPECIFIED; + } +} +sai_fdb_entry_type_t convert_sai_fdb_entry_type_t_to_sai( + lemming::dataplane::sai::FdbEntryType val) { + switch (val) { + case lemming::dataplane::sai::FDB_ENTRY_TYPE_DYNAMIC: + return SAI_FDB_ENTRY_TYPE_DYNAMIC; + + case lemming::dataplane::sai::FDB_ENTRY_TYPE_STATIC: + return SAI_FDB_ENTRY_TYPE_STATIC; + + default: + return SAI_FDB_ENTRY_TYPE_DYNAMIC; + } +} + +google::protobuf::RepeatedField convert_list_sai_fdb_entry_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_fdb_entry_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_fdb_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_fdb_entry_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::FdbEvent convert_sai_fdb_event_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_FDB_EVENT_LEARNED: + return lemming::dataplane::sai::FDB_EVENT_LEARNED; + + case SAI_FDB_EVENT_AGED: + return lemming::dataplane::sai::FDB_EVENT_AGED; + + case SAI_FDB_EVENT_MOVE: + return lemming::dataplane::sai::FDB_EVENT_MOVE; + + case SAI_FDB_EVENT_FLUSHED: + return lemming::dataplane::sai::FDB_EVENT_FLUSHED; + + default: + return lemming::dataplane::sai::FDB_EVENT_UNSPECIFIED; + } +} +sai_fdb_event_t convert_sai_fdb_event_t_to_sai( + lemming::dataplane::sai::FdbEvent val) { + switch (val) { + case lemming::dataplane::sai::FDB_EVENT_LEARNED: + return SAI_FDB_EVENT_LEARNED; + + case lemming::dataplane::sai::FDB_EVENT_AGED: + return SAI_FDB_EVENT_AGED; + + case lemming::dataplane::sai::FDB_EVENT_MOVE: + return SAI_FDB_EVENT_MOVE; + + case lemming::dataplane::sai::FDB_EVENT_FLUSHED: + return SAI_FDB_EVENT_FLUSHED; + + default: + return SAI_FDB_EVENT_LEARNED; + } +} + +google::protobuf::RepeatedField convert_list_sai_fdb_event_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_fdb_event_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_fdb_event_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_fdb_event_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::FdbFlushEntryType +convert_sai_fdb_flush_entry_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_FDB_FLUSH_ENTRY_TYPE_DYNAMIC: + return lemming::dataplane::sai::FDB_FLUSH_ENTRY_TYPE_DYNAMIC; + + case SAI_FDB_FLUSH_ENTRY_TYPE_STATIC: + return lemming::dataplane::sai::FDB_FLUSH_ENTRY_TYPE_STATIC; + + case SAI_FDB_FLUSH_ENTRY_TYPE_ALL: + return lemming::dataplane::sai::FDB_FLUSH_ENTRY_TYPE_ALL; + + default: + return lemming::dataplane::sai::FDB_FLUSH_ENTRY_TYPE_UNSPECIFIED; + } +} +sai_fdb_flush_entry_type_t convert_sai_fdb_flush_entry_type_t_to_sai( + lemming::dataplane::sai::FdbFlushEntryType val) { + switch (val) { + case lemming::dataplane::sai::FDB_FLUSH_ENTRY_TYPE_DYNAMIC: + return SAI_FDB_FLUSH_ENTRY_TYPE_DYNAMIC; + + case lemming::dataplane::sai::FDB_FLUSH_ENTRY_TYPE_STATIC: + return SAI_FDB_FLUSH_ENTRY_TYPE_STATIC; + + case lemming::dataplane::sai::FDB_FLUSH_ENTRY_TYPE_ALL: + return SAI_FDB_FLUSH_ENTRY_TYPE_ALL; + + default: + return SAI_FDB_FLUSH_ENTRY_TYPE_DYNAMIC; + } +} + +google::protobuf::RepeatedField +convert_list_sai_fdb_flush_entry_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_fdb_flush_entry_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_fdb_flush_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_fdb_flush_entry_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::FineGrainedHashFieldAttr +convert_sai_fine_grained_hash_field_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_FINE_GRAINED_HASH_FIELD_ATTR_NATIVE_HASH_FIELD: + return lemming::dataplane::sai:: + FINE_GRAINED_HASH_FIELD_ATTR_NATIVE_HASH_FIELD; + + case SAI_FINE_GRAINED_HASH_FIELD_ATTR_IPV4_MASK: + return lemming::dataplane::sai::FINE_GRAINED_HASH_FIELD_ATTR_IPV4_MASK; + + case SAI_FINE_GRAINED_HASH_FIELD_ATTR_IPV6_MASK: + return lemming::dataplane::sai::FINE_GRAINED_HASH_FIELD_ATTR_IPV6_MASK; + + case SAI_FINE_GRAINED_HASH_FIELD_ATTR_SEQUENCE_ID: + return lemming::dataplane::sai::FINE_GRAINED_HASH_FIELD_ATTR_SEQUENCE_ID; + + default: + return lemming::dataplane::sai::FINE_GRAINED_HASH_FIELD_ATTR_UNSPECIFIED; + } +} +sai_fine_grained_hash_field_attr_t +convert_sai_fine_grained_hash_field_attr_t_to_sai( + lemming::dataplane::sai::FineGrainedHashFieldAttr val) { + switch (val) { + case lemming::dataplane::sai:: + FINE_GRAINED_HASH_FIELD_ATTR_NATIVE_HASH_FIELD: + return SAI_FINE_GRAINED_HASH_FIELD_ATTR_NATIVE_HASH_FIELD; + + case lemming::dataplane::sai::FINE_GRAINED_HASH_FIELD_ATTR_IPV4_MASK: + return SAI_FINE_GRAINED_HASH_FIELD_ATTR_IPV4_MASK; + + case lemming::dataplane::sai::FINE_GRAINED_HASH_FIELD_ATTR_IPV6_MASK: + return SAI_FINE_GRAINED_HASH_FIELD_ATTR_IPV6_MASK; + + case lemming::dataplane::sai::FINE_GRAINED_HASH_FIELD_ATTR_SEQUENCE_ID: + return SAI_FINE_GRAINED_HASH_FIELD_ATTR_SEQUENCE_ID; + + default: + return SAI_FINE_GRAINED_HASH_FIELD_ATTR_NATIVE_HASH_FIELD; + } +} + +google::protobuf::RepeatedField +convert_list_sai_fine_grained_hash_field_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_fine_grained_hash_field_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_fine_grained_hash_field_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_fine_grained_hash_field_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::GenericProgrammableAttr +convert_sai_generic_programmable_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_GENERIC_PROGRAMMABLE_ATTR_OBJECT_NAME: + return lemming::dataplane::sai::GENERIC_PROGRAMMABLE_ATTR_OBJECT_NAME; + + case SAI_GENERIC_PROGRAMMABLE_ATTR_ENTRY: + return lemming::dataplane::sai::GENERIC_PROGRAMMABLE_ATTR_ENTRY; + + case SAI_GENERIC_PROGRAMMABLE_ATTR_COUNTER_ID: + return lemming::dataplane::sai::GENERIC_PROGRAMMABLE_ATTR_COUNTER_ID; + + default: + return lemming::dataplane::sai::GENERIC_PROGRAMMABLE_ATTR_UNSPECIFIED; + } +} +sai_generic_programmable_attr_t convert_sai_generic_programmable_attr_t_to_sai( + lemming::dataplane::sai::GenericProgrammableAttr val) { + switch (val) { + case lemming::dataplane::sai::GENERIC_PROGRAMMABLE_ATTR_OBJECT_NAME: + return SAI_GENERIC_PROGRAMMABLE_ATTR_OBJECT_NAME; + + case lemming::dataplane::sai::GENERIC_PROGRAMMABLE_ATTR_ENTRY: + return SAI_GENERIC_PROGRAMMABLE_ATTR_ENTRY; + + case lemming::dataplane::sai::GENERIC_PROGRAMMABLE_ATTR_COUNTER_ID: + return SAI_GENERIC_PROGRAMMABLE_ATTR_COUNTER_ID; + + default: + return SAI_GENERIC_PROGRAMMABLE_ATTR_OBJECT_NAME; + } +} + +google::protobuf::RepeatedField +convert_list_sai_generic_programmable_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_generic_programmable_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_generic_programmable_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_generic_programmable_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HashAlgorithm convert_sai_hash_algorithm_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_HASH_ALGORITHM_CRC: + return lemming::dataplane::sai::HASH_ALGORITHM_CRC; + + case SAI_HASH_ALGORITHM_XOR: + return lemming::dataplane::sai::HASH_ALGORITHM_XOR; + + case SAI_HASH_ALGORITHM_RANDOM: + return lemming::dataplane::sai::HASH_ALGORITHM_RANDOM; + + case SAI_HASH_ALGORITHM_CRC_32LO: + return lemming::dataplane::sai::HASH_ALGORITHM_CRC_32LO; + + case SAI_HASH_ALGORITHM_CRC_32HI: + return lemming::dataplane::sai::HASH_ALGORITHM_CRC_32HI; + + case SAI_HASH_ALGORITHM_CRC_CCITT: + return lemming::dataplane::sai::HASH_ALGORITHM_CRC_CCITT; + + case SAI_HASH_ALGORITHM_CRC_XOR: + return lemming::dataplane::sai::HASH_ALGORITHM_CRC_XOR; + + default: + return lemming::dataplane::sai::HASH_ALGORITHM_UNSPECIFIED; + } +} +sai_hash_algorithm_t convert_sai_hash_algorithm_t_to_sai( + lemming::dataplane::sai::HashAlgorithm val) { + switch (val) { + case lemming::dataplane::sai::HASH_ALGORITHM_CRC: + return SAI_HASH_ALGORITHM_CRC; + + case lemming::dataplane::sai::HASH_ALGORITHM_XOR: + return SAI_HASH_ALGORITHM_XOR; + + case lemming::dataplane::sai::HASH_ALGORITHM_RANDOM: + return SAI_HASH_ALGORITHM_RANDOM; + + case lemming::dataplane::sai::HASH_ALGORITHM_CRC_32LO: + return SAI_HASH_ALGORITHM_CRC_32LO; + + case lemming::dataplane::sai::HASH_ALGORITHM_CRC_32HI: + return SAI_HASH_ALGORITHM_CRC_32HI; + + case lemming::dataplane::sai::HASH_ALGORITHM_CRC_CCITT: + return SAI_HASH_ALGORITHM_CRC_CCITT; + + case lemming::dataplane::sai::HASH_ALGORITHM_CRC_XOR: + return SAI_HASH_ALGORITHM_CRC_XOR; + + default: + return SAI_HASH_ALGORITHM_CRC; + } +} + +google::protobuf::RepeatedField convert_list_sai_hash_algorithm_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_hash_algorithm_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hash_algorithm_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hash_algorithm_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HashAttr convert_sai_hash_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_HASH_ATTR_NATIVE_HASH_FIELD_LIST: + return lemming::dataplane::sai::HASH_ATTR_NATIVE_HASH_FIELD_LIST; + + case SAI_HASH_ATTR_UDF_GROUP_LIST: + return lemming::dataplane::sai::HASH_ATTR_UDF_GROUP_LIST; + + case SAI_HASH_ATTR_FINE_GRAINED_HASH_FIELD_LIST: + return lemming::dataplane::sai::HASH_ATTR_FINE_GRAINED_HASH_FIELD_LIST; + + default: + return lemming::dataplane::sai::HASH_ATTR_UNSPECIFIED; + } +} +sai_hash_attr_t convert_sai_hash_attr_t_to_sai( + lemming::dataplane::sai::HashAttr val) { + switch (val) { + case lemming::dataplane::sai::HASH_ATTR_NATIVE_HASH_FIELD_LIST: + return SAI_HASH_ATTR_NATIVE_HASH_FIELD_LIST; + + case lemming::dataplane::sai::HASH_ATTR_UDF_GROUP_LIST: + return SAI_HASH_ATTR_UDF_GROUP_LIST; + + case lemming::dataplane::sai::HASH_ATTR_FINE_GRAINED_HASH_FIELD_LIST: + return SAI_HASH_ATTR_FINE_GRAINED_HASH_FIELD_LIST; + + default: + return SAI_HASH_ATTR_NATIVE_HASH_FIELD_LIST; + } +} + +google::protobuf::RepeatedField convert_list_sai_hash_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_hash_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hash_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hash_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifAttr convert_sai_hostif_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_ATTR_TYPE: + return lemming::dataplane::sai::HOSTIF_ATTR_TYPE; + + case SAI_HOSTIF_ATTR_OBJ_ID: + return lemming::dataplane::sai::HOSTIF_ATTR_OBJ_ID; + + case SAI_HOSTIF_ATTR_NAME: + return lemming::dataplane::sai::HOSTIF_ATTR_NAME; + + case SAI_HOSTIF_ATTR_OPER_STATUS: + return lemming::dataplane::sai::HOSTIF_ATTR_OPER_STATUS; + + case SAI_HOSTIF_ATTR_QUEUE: + return lemming::dataplane::sai::HOSTIF_ATTR_QUEUE; + + case SAI_HOSTIF_ATTR_VLAN_TAG: + return lemming::dataplane::sai::HOSTIF_ATTR_VLAN_TAG; + + case SAI_HOSTIF_ATTR_GENETLINK_MCGRP_NAME: + return lemming::dataplane::sai::HOSTIF_ATTR_GENETLINK_MCGRP_NAME; + + default: + return lemming::dataplane::sai::HOSTIF_ATTR_UNSPECIFIED; + } +} +sai_hostif_attr_t convert_sai_hostif_attr_t_to_sai( + lemming::dataplane::sai::HostifAttr val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_ATTR_TYPE: + return SAI_HOSTIF_ATTR_TYPE; + + case lemming::dataplane::sai::HOSTIF_ATTR_OBJ_ID: + return SAI_HOSTIF_ATTR_OBJ_ID; + + case lemming::dataplane::sai::HOSTIF_ATTR_NAME: + return SAI_HOSTIF_ATTR_NAME; + + case lemming::dataplane::sai::HOSTIF_ATTR_OPER_STATUS: + return SAI_HOSTIF_ATTR_OPER_STATUS; + + case lemming::dataplane::sai::HOSTIF_ATTR_QUEUE: + return SAI_HOSTIF_ATTR_QUEUE; + + case lemming::dataplane::sai::HOSTIF_ATTR_VLAN_TAG: + return SAI_HOSTIF_ATTR_VLAN_TAG; + + case lemming::dataplane::sai::HOSTIF_ATTR_GENETLINK_MCGRP_NAME: + return SAI_HOSTIF_ATTR_GENETLINK_MCGRP_NAME; + + default: + return SAI_HOSTIF_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_hostif_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_hostif_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifTableEntryAttr +convert_sai_hostif_table_entry_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_TABLE_ENTRY_ATTR_TYPE: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_TYPE; + + case SAI_HOSTIF_TABLE_ENTRY_ATTR_OBJ_ID: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_OBJ_ID; + + case SAI_HOSTIF_TABLE_ENTRY_ATTR_TRAP_ID: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_TRAP_ID; + + case SAI_HOSTIF_TABLE_ENTRY_ATTR_CHANNEL_TYPE: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_CHANNEL_TYPE; + + case SAI_HOSTIF_TABLE_ENTRY_ATTR_HOST_IF: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_HOST_IF; + + default: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_hostif_table_entry_attr_t convert_sai_hostif_table_entry_attr_t_to_sai( + lemming::dataplane::sai::HostifTableEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_TYPE: + return SAI_HOSTIF_TABLE_ENTRY_ATTR_TYPE; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_OBJ_ID: + return SAI_HOSTIF_TABLE_ENTRY_ATTR_OBJ_ID; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_TRAP_ID: + return SAI_HOSTIF_TABLE_ENTRY_ATTR_TRAP_ID; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_CHANNEL_TYPE: + return SAI_HOSTIF_TABLE_ENTRY_ATTR_CHANNEL_TYPE; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_ATTR_HOST_IF: + return SAI_HOSTIF_TABLE_ENTRY_ATTR_HOST_IF; + + default: + return SAI_HOSTIF_TABLE_ENTRY_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_hostif_table_entry_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_hostif_table_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_table_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_table_entry_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifTableEntryChannelType +convert_sai_hostif_table_entry_channel_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_CB: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_CB; + + case SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_FD: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_FD; + + case SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_PHYSICAL_PORT: + return lemming::dataplane::sai:: + HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_PHYSICAL_PORT; + + case SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_LOGICAL_PORT: + return lemming::dataplane::sai:: + HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_LOGICAL_PORT; + + case SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_L3: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_L3; + + case SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_GENETLINK: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_GENETLINK; + + default: + return lemming::dataplane::sai:: + HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_UNSPECIFIED; + } +} +sai_hostif_table_entry_channel_type_t +convert_sai_hostif_table_entry_channel_type_t_to_sai( + lemming::dataplane::sai::HostifTableEntryChannelType val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_CB: + return SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_CB; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_FD: + return SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_FD; + + case lemming::dataplane::sai:: + HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_PHYSICAL_PORT: + return SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_PHYSICAL_PORT; + + case lemming::dataplane::sai:: + HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_LOGICAL_PORT: + return SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_LOGICAL_PORT; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_L3: + return SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_L3; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_GENETLINK: + return SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_GENETLINK; + + default: + return SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_CB; + } +} + +google::protobuf::RepeatedField +convert_list_sai_hostif_table_entry_channel_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_hostif_table_entry_channel_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_table_entry_channel_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_table_entry_channel_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifTableEntryType +convert_sai_hostif_table_entry_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_TABLE_ENTRY_TYPE_PORT: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_PORT; + + case SAI_HOSTIF_TABLE_ENTRY_TYPE_LAG: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_LAG; + + case SAI_HOSTIF_TABLE_ENTRY_TYPE_VLAN: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_VLAN; + + case SAI_HOSTIF_TABLE_ENTRY_TYPE_TRAP_ID: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_TRAP_ID; + + case SAI_HOSTIF_TABLE_ENTRY_TYPE_WILDCARD: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_WILDCARD; + + default: + return lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_UNSPECIFIED; + } +} +sai_hostif_table_entry_type_t convert_sai_hostif_table_entry_type_t_to_sai( + lemming::dataplane::sai::HostifTableEntryType val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_PORT: + return SAI_HOSTIF_TABLE_ENTRY_TYPE_PORT; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_LAG: + return SAI_HOSTIF_TABLE_ENTRY_TYPE_LAG; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_VLAN: + return SAI_HOSTIF_TABLE_ENTRY_TYPE_VLAN; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_TRAP_ID: + return SAI_HOSTIF_TABLE_ENTRY_TYPE_TRAP_ID; + + case lemming::dataplane::sai::HOSTIF_TABLE_ENTRY_TYPE_WILDCARD: + return SAI_HOSTIF_TABLE_ENTRY_TYPE_WILDCARD; + + default: + return SAI_HOSTIF_TABLE_ENTRY_TYPE_PORT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_hostif_table_entry_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_hostif_table_entry_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_table_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_table_entry_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifTrapAttr convert_sai_hostif_trap_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_TRAP_ATTR_TRAP_TYPE: + return lemming::dataplane::sai::HOSTIF_TRAP_ATTR_TRAP_TYPE; + + case SAI_HOSTIF_TRAP_ATTR_PACKET_ACTION: + return lemming::dataplane::sai::HOSTIF_TRAP_ATTR_PACKET_ACTION; + + case SAI_HOSTIF_TRAP_ATTR_TRAP_PRIORITY: + return lemming::dataplane::sai::HOSTIF_TRAP_ATTR_TRAP_PRIORITY; + + case SAI_HOSTIF_TRAP_ATTR_EXCLUDE_PORT_LIST: + return lemming::dataplane::sai::HOSTIF_TRAP_ATTR_EXCLUDE_PORT_LIST; + + case SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP: + return lemming::dataplane::sai::HOSTIF_TRAP_ATTR_TRAP_GROUP; + + case SAI_HOSTIF_TRAP_ATTR_MIRROR_SESSION: + return lemming::dataplane::sai::HOSTIF_TRAP_ATTR_MIRROR_SESSION; + + case SAI_HOSTIF_TRAP_ATTR_COUNTER_ID: + return lemming::dataplane::sai::HOSTIF_TRAP_ATTR_COUNTER_ID; + + default: + return lemming::dataplane::sai::HOSTIF_TRAP_ATTR_UNSPECIFIED; + } +} +sai_hostif_trap_attr_t convert_sai_hostif_trap_attr_t_to_sai( + lemming::dataplane::sai::HostifTrapAttr val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_TRAP_ATTR_TRAP_TYPE: + return SAI_HOSTIF_TRAP_ATTR_TRAP_TYPE; + + case lemming::dataplane::sai::HOSTIF_TRAP_ATTR_PACKET_ACTION: + return SAI_HOSTIF_TRAP_ATTR_PACKET_ACTION; + + case lemming::dataplane::sai::HOSTIF_TRAP_ATTR_TRAP_PRIORITY: + return SAI_HOSTIF_TRAP_ATTR_TRAP_PRIORITY; + + case lemming::dataplane::sai::HOSTIF_TRAP_ATTR_EXCLUDE_PORT_LIST: + return SAI_HOSTIF_TRAP_ATTR_EXCLUDE_PORT_LIST; + + case lemming::dataplane::sai::HOSTIF_TRAP_ATTR_TRAP_GROUP: + return SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP; + + case lemming::dataplane::sai::HOSTIF_TRAP_ATTR_MIRROR_SESSION: + return SAI_HOSTIF_TRAP_ATTR_MIRROR_SESSION; + + case lemming::dataplane::sai::HOSTIF_TRAP_ATTR_COUNTER_ID: + return SAI_HOSTIF_TRAP_ATTR_COUNTER_ID; + + default: + return SAI_HOSTIF_TRAP_ATTR_TRAP_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_hostif_trap_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_hostif_trap_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_trap_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_trap_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifTrapGroupAttr +convert_sai_hostif_trap_group_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_TRAP_GROUP_ATTR_ADMIN_STATE: + return lemming::dataplane::sai::HOSTIF_TRAP_GROUP_ATTR_ADMIN_STATE; + + case SAI_HOSTIF_TRAP_GROUP_ATTR_QUEUE: + return lemming::dataplane::sai::HOSTIF_TRAP_GROUP_ATTR_QUEUE; + + case SAI_HOSTIF_TRAP_GROUP_ATTR_POLICER: + return lemming::dataplane::sai::HOSTIF_TRAP_GROUP_ATTR_POLICER; + + case SAI_HOSTIF_TRAP_GROUP_ATTR_OBJECT_STAGE: + return lemming::dataplane::sai::HOSTIF_TRAP_GROUP_ATTR_OBJECT_STAGE; + + default: + return lemming::dataplane::sai::HOSTIF_TRAP_GROUP_ATTR_UNSPECIFIED; + } +} +sai_hostif_trap_group_attr_t convert_sai_hostif_trap_group_attr_t_to_sai( + lemming::dataplane::sai::HostifTrapGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_TRAP_GROUP_ATTR_ADMIN_STATE: + return SAI_HOSTIF_TRAP_GROUP_ATTR_ADMIN_STATE; + + case lemming::dataplane::sai::HOSTIF_TRAP_GROUP_ATTR_QUEUE: + return SAI_HOSTIF_TRAP_GROUP_ATTR_QUEUE; + + case lemming::dataplane::sai::HOSTIF_TRAP_GROUP_ATTR_POLICER: + return SAI_HOSTIF_TRAP_GROUP_ATTR_POLICER; + + case lemming::dataplane::sai::HOSTIF_TRAP_GROUP_ATTR_OBJECT_STAGE: + return SAI_HOSTIF_TRAP_GROUP_ATTR_OBJECT_STAGE; + + default: + return SAI_HOSTIF_TRAP_GROUP_ATTR_ADMIN_STATE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_hostif_trap_group_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_hostif_trap_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_trap_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_trap_group_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifTrapType convert_sai_hostif_trap_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_TRAP_TYPE_START: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_START; + + case SAI_HOSTIF_TRAP_TYPE_LACP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_LACP; + + case SAI_HOSTIF_TRAP_TYPE_EAPOL: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_EAPOL; + + case SAI_HOSTIF_TRAP_TYPE_LLDP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_LLDP; + + case SAI_HOSTIF_TRAP_TYPE_PVRST: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PVRST; + + case SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_QUERY: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_QUERY; + + case SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_LEAVE: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_LEAVE; + + case SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V1_REPORT: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_V1_REPORT; + + case SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V2_REPORT: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_V2_REPORT; + + case SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V3_REPORT: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_V3_REPORT; + + case SAI_HOSTIF_TRAP_TYPE_SAMPLEPACKET: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SAMPLEPACKET; + + case SAI_HOSTIF_TRAP_TYPE_UDLD: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_UDLD; + + case SAI_HOSTIF_TRAP_TYPE_CDP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_CDP; + + case SAI_HOSTIF_TRAP_TYPE_VTP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_VTP; + + case SAI_HOSTIF_TRAP_TYPE_DTP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DTP; + + case SAI_HOSTIF_TRAP_TYPE_PAGP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PAGP; + + case SAI_HOSTIF_TRAP_TYPE_PTP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PTP; + + case SAI_HOSTIF_TRAP_TYPE_PTP_TX_EVENT: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PTP_TX_EVENT; + + case SAI_HOSTIF_TRAP_TYPE_DHCP_L2: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DHCP_L2; + + case SAI_HOSTIF_TRAP_TYPE_DHCPV6_L2: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DHCPV6_L2; + + case SAI_HOSTIF_TRAP_TYPE_SWITCH_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SWITCH_CUSTOM_RANGE_BASE; + + case SAI_HOSTIF_TRAP_TYPE_ARP_REQUEST: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_ARP_REQUEST; + + case SAI_HOSTIF_TRAP_TYPE_ARP_RESPONSE: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_ARP_RESPONSE; + + case SAI_HOSTIF_TRAP_TYPE_DHCP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DHCP; + + case SAI_HOSTIF_TRAP_TYPE_OSPF: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_OSPF; + + case SAI_HOSTIF_TRAP_TYPE_PIM: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PIM; + + case SAI_HOSTIF_TRAP_TYPE_VRRP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_VRRP; + + case SAI_HOSTIF_TRAP_TYPE_DHCPV6: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DHCPV6; + + case SAI_HOSTIF_TRAP_TYPE_OSPFV6: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_OSPFV6; + + case SAI_HOSTIF_TRAP_TYPE_VRRPV6: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_VRRPV6; + + case SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_DISCOVERY: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_DISCOVERY; + + case SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_V2: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_MLD_V1_V2; + + case SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_REPORT: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_MLD_V1_REPORT; + + case SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_DONE: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_MLD_V1_DONE; + + case SAI_HOSTIF_TRAP_TYPE_MLD_V2_REPORT: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_MLD_V2_REPORT; + + case SAI_HOSTIF_TRAP_TYPE_UNKNOWN_L3_MULTICAST: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_UNKNOWN_L3_MULTICAST; + + case SAI_HOSTIF_TRAP_TYPE_SNAT_MISS: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SNAT_MISS; + + case SAI_HOSTIF_TRAP_TYPE_DNAT_MISS: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DNAT_MISS; + + case SAI_HOSTIF_TRAP_TYPE_NAT_HAIRPIN: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_NAT_HAIRPIN; + + case SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_SOLICITATION: + return lemming::dataplane::sai:: + HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_SOLICITATION; + + case SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_ADVERTISEMENT: + return lemming::dataplane::sai:: + HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_ADVERTISEMENT; + + case SAI_HOSTIF_TRAP_TYPE_ISIS: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_ISIS; + + case SAI_HOSTIF_TRAP_TYPE_ROUTER_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_ROUTER_CUSTOM_RANGE_BASE; + + case SAI_HOSTIF_TRAP_TYPE_IP2ME: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IP2ME; + + case SAI_HOSTIF_TRAP_TYPE_SSH: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SSH; + + case SAI_HOSTIF_TRAP_TYPE_SNMP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SNMP; + + case SAI_HOSTIF_TRAP_TYPE_BGP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BGP; + + case SAI_HOSTIF_TRAP_TYPE_BGPV6: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BGPV6; + + case SAI_HOSTIF_TRAP_TYPE_BFD: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BFD; + + case SAI_HOSTIF_TRAP_TYPE_BFDV6: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BFDV6; + + case SAI_HOSTIF_TRAP_TYPE_BFD_MICRO: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BFD_MICRO; + + case SAI_HOSTIF_TRAP_TYPE_BFDV6_MICRO: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BFDV6_MICRO; + + case SAI_HOSTIF_TRAP_TYPE_LDP: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_LDP; + + case SAI_HOSTIF_TRAP_TYPE_GNMI: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_GNMI; + + case SAI_HOSTIF_TRAP_TYPE_P4RT: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_P4RT; + + case SAI_HOSTIF_TRAP_TYPE_NTPCLIENT: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_NTPCLIENT; + + case SAI_HOSTIF_TRAP_TYPE_NTPSERVER: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_NTPSERVER; + + case SAI_HOSTIF_TRAP_TYPE_LOCAL_IP_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai:: + HOSTIF_TRAP_TYPE_LOCAL_IP_CUSTOM_RANGE_BASE; + + case SAI_HOSTIF_TRAP_TYPE_L3_MTU_ERROR: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_L3_MTU_ERROR; + + case SAI_HOSTIF_TRAP_TYPE_TTL_ERROR: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_TTL_ERROR; + + case SAI_HOSTIF_TRAP_TYPE_STATIC_FDB_MOVE: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_STATIC_FDB_MOVE; + + case SAI_HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_EGRESS_BUFFER: + return lemming::dataplane::sai:: + HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_EGRESS_BUFFER; + + case SAI_HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_WRED: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_WRED; + + case SAI_HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_ROUTER: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_ROUTER; + + case SAI_HOSTIF_TRAP_TYPE_MPLS_TTL_ERROR: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_MPLS_TTL_ERROR; + + case SAI_HOSTIF_TRAP_TYPE_MPLS_ROUTER_ALERT_LABEL: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_MPLS_ROUTER_ALERT_LABEL; + + case SAI_HOSTIF_TRAP_TYPE_MPLS_LABEL_LOOKUP_MISS: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_MPLS_LABEL_LOOKUP_MISS; + + case SAI_HOSTIF_TRAP_TYPE_CUSTOM_EXCEPTION_RANGE_BASE: + return lemming::dataplane::sai:: + HOSTIF_TRAP_TYPE_CUSTOM_EXCEPTION_RANGE_BASE; + + case SAI_HOSTIF_TRAP_TYPE_END: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_END; + + default: + return lemming::dataplane::sai::HOSTIF_TRAP_TYPE_UNSPECIFIED; + } +} +sai_hostif_trap_type_t convert_sai_hostif_trap_type_t_to_sai( + lemming::dataplane::sai::HostifTrapType val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_START: + return SAI_HOSTIF_TRAP_TYPE_START; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_LACP: + return SAI_HOSTIF_TRAP_TYPE_LACP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_EAPOL: + return SAI_HOSTIF_TRAP_TYPE_EAPOL; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_LLDP: + return SAI_HOSTIF_TRAP_TYPE_LLDP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PVRST: + return SAI_HOSTIF_TRAP_TYPE_PVRST; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_QUERY: + return SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_QUERY; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_LEAVE: + return SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_LEAVE; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_V1_REPORT: + return SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V1_REPORT; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_V2_REPORT: + return SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V2_REPORT; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IGMP_TYPE_V3_REPORT: + return SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V3_REPORT; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SAMPLEPACKET: + return SAI_HOSTIF_TRAP_TYPE_SAMPLEPACKET; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_UDLD: + return SAI_HOSTIF_TRAP_TYPE_UDLD; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_CDP: + return SAI_HOSTIF_TRAP_TYPE_CDP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_VTP: + return SAI_HOSTIF_TRAP_TYPE_VTP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DTP: + return SAI_HOSTIF_TRAP_TYPE_DTP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PAGP: + return SAI_HOSTIF_TRAP_TYPE_PAGP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PTP: + return SAI_HOSTIF_TRAP_TYPE_PTP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PTP_TX_EVENT: + return SAI_HOSTIF_TRAP_TYPE_PTP_TX_EVENT; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DHCP_L2: + return SAI_HOSTIF_TRAP_TYPE_DHCP_L2; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DHCPV6_L2: + return SAI_HOSTIF_TRAP_TYPE_DHCPV6_L2; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SWITCH_CUSTOM_RANGE_BASE: + return SAI_HOSTIF_TRAP_TYPE_SWITCH_CUSTOM_RANGE_BASE; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_ARP_REQUEST: + return SAI_HOSTIF_TRAP_TYPE_ARP_REQUEST; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_ARP_RESPONSE: + return SAI_HOSTIF_TRAP_TYPE_ARP_RESPONSE; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DHCP: + return SAI_HOSTIF_TRAP_TYPE_DHCP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_OSPF: + return SAI_HOSTIF_TRAP_TYPE_OSPF; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PIM: + return SAI_HOSTIF_TRAP_TYPE_PIM; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_VRRP: + return SAI_HOSTIF_TRAP_TYPE_VRRP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DHCPV6: + return SAI_HOSTIF_TRAP_TYPE_DHCPV6; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_OSPFV6: + return SAI_HOSTIF_TRAP_TYPE_OSPFV6; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_VRRPV6: + return SAI_HOSTIF_TRAP_TYPE_VRRPV6; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_DISCOVERY: + return SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_DISCOVERY; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_MLD_V1_V2: + return SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_V2; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_MLD_V1_REPORT: + return SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_REPORT; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_MLD_V1_DONE: + return SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_DONE; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_MLD_V2_REPORT: + return SAI_HOSTIF_TRAP_TYPE_MLD_V2_REPORT; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_UNKNOWN_L3_MULTICAST: + return SAI_HOSTIF_TRAP_TYPE_UNKNOWN_L3_MULTICAST; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SNAT_MISS: + return SAI_HOSTIF_TRAP_TYPE_SNAT_MISS; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_DNAT_MISS: + return SAI_HOSTIF_TRAP_TYPE_DNAT_MISS; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_NAT_HAIRPIN: + return SAI_HOSTIF_TRAP_TYPE_NAT_HAIRPIN; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_SOLICITATION: + return SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_SOLICITATION; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_ADVERTISEMENT: + return SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_ADVERTISEMENT; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_ISIS: + return SAI_HOSTIF_TRAP_TYPE_ISIS; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_ROUTER_CUSTOM_RANGE_BASE: + return SAI_HOSTIF_TRAP_TYPE_ROUTER_CUSTOM_RANGE_BASE; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_IP2ME: + return SAI_HOSTIF_TRAP_TYPE_IP2ME; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SSH: + return SAI_HOSTIF_TRAP_TYPE_SSH; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_SNMP: + return SAI_HOSTIF_TRAP_TYPE_SNMP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BGP: + return SAI_HOSTIF_TRAP_TYPE_BGP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BGPV6: + return SAI_HOSTIF_TRAP_TYPE_BGPV6; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BFD: + return SAI_HOSTIF_TRAP_TYPE_BFD; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BFDV6: + return SAI_HOSTIF_TRAP_TYPE_BFDV6; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BFD_MICRO: + return SAI_HOSTIF_TRAP_TYPE_BFD_MICRO; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_BFDV6_MICRO: + return SAI_HOSTIF_TRAP_TYPE_BFDV6_MICRO; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_LDP: + return SAI_HOSTIF_TRAP_TYPE_LDP; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_GNMI: + return SAI_HOSTIF_TRAP_TYPE_GNMI; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_P4RT: + return SAI_HOSTIF_TRAP_TYPE_P4RT; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_NTPCLIENT: + return SAI_HOSTIF_TRAP_TYPE_NTPCLIENT; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_NTPSERVER: + return SAI_HOSTIF_TRAP_TYPE_NTPSERVER; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_LOCAL_IP_CUSTOM_RANGE_BASE: + return SAI_HOSTIF_TRAP_TYPE_LOCAL_IP_CUSTOM_RANGE_BASE; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_L3_MTU_ERROR: + return SAI_HOSTIF_TRAP_TYPE_L3_MTU_ERROR; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_TTL_ERROR: + return SAI_HOSTIF_TRAP_TYPE_TTL_ERROR; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_STATIC_FDB_MOVE: + return SAI_HOSTIF_TRAP_TYPE_STATIC_FDB_MOVE; + + case lemming::dataplane::sai:: + HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_EGRESS_BUFFER: + return SAI_HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_EGRESS_BUFFER; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_WRED: + return SAI_HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_WRED; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_ROUTER: + return SAI_HOSTIF_TRAP_TYPE_PIPELINE_DISCARD_ROUTER; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_MPLS_TTL_ERROR: + return SAI_HOSTIF_TRAP_TYPE_MPLS_TTL_ERROR; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_MPLS_ROUTER_ALERT_LABEL: + return SAI_HOSTIF_TRAP_TYPE_MPLS_ROUTER_ALERT_LABEL; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_MPLS_LABEL_LOOKUP_MISS: + return SAI_HOSTIF_TRAP_TYPE_MPLS_LABEL_LOOKUP_MISS; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_CUSTOM_EXCEPTION_RANGE_BASE: + return SAI_HOSTIF_TRAP_TYPE_CUSTOM_EXCEPTION_RANGE_BASE; + + case lemming::dataplane::sai::HOSTIF_TRAP_TYPE_END: + return SAI_HOSTIF_TRAP_TYPE_END; + + default: + return SAI_HOSTIF_TRAP_TYPE_START; + } +} + +google::protobuf::RepeatedField +convert_list_sai_hostif_trap_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_hostif_trap_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_trap_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_trap_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifTxType convert_sai_hostif_tx_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_TX_TYPE_PIPELINE_BYPASS: + return lemming::dataplane::sai::HOSTIF_TX_TYPE_PIPELINE_BYPASS; + + case SAI_HOSTIF_TX_TYPE_PIPELINE_LOOKUP: + return lemming::dataplane::sai::HOSTIF_TX_TYPE_PIPELINE_LOOKUP; + + case SAI_HOSTIF_TX_TYPE_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::HOSTIF_TX_TYPE_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::HOSTIF_TX_TYPE_UNSPECIFIED; + } +} +sai_hostif_tx_type_t convert_sai_hostif_tx_type_t_to_sai( + lemming::dataplane::sai::HostifTxType val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_TX_TYPE_PIPELINE_BYPASS: + return SAI_HOSTIF_TX_TYPE_PIPELINE_BYPASS; + + case lemming::dataplane::sai::HOSTIF_TX_TYPE_PIPELINE_LOOKUP: + return SAI_HOSTIF_TX_TYPE_PIPELINE_LOOKUP; + + case lemming::dataplane::sai::HOSTIF_TX_TYPE_CUSTOM_RANGE_BASE: + return SAI_HOSTIF_TX_TYPE_CUSTOM_RANGE_BASE; + + default: + return SAI_HOSTIF_TX_TYPE_PIPELINE_BYPASS; + } +} + +google::protobuf::RepeatedField convert_list_sai_hostif_tx_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_hostif_tx_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_tx_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_tx_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifType convert_sai_hostif_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_TYPE_NETDEV: + return lemming::dataplane::sai::HOSTIF_TYPE_NETDEV; + + case SAI_HOSTIF_TYPE_FD: + return lemming::dataplane::sai::HOSTIF_TYPE_FD; + + case SAI_HOSTIF_TYPE_GENETLINK: + return lemming::dataplane::sai::HOSTIF_TYPE_GENETLINK; + + default: + return lemming::dataplane::sai::HOSTIF_TYPE_UNSPECIFIED; + } +} +sai_hostif_type_t convert_sai_hostif_type_t_to_sai( + lemming::dataplane::sai::HostifType val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_TYPE_NETDEV: + return SAI_HOSTIF_TYPE_NETDEV; + + case lemming::dataplane::sai::HOSTIF_TYPE_FD: + return SAI_HOSTIF_TYPE_FD; + + case lemming::dataplane::sai::HOSTIF_TYPE_GENETLINK: + return SAI_HOSTIF_TYPE_GENETLINK; + + default: + return SAI_HOSTIF_TYPE_NETDEV; + } +} + +google::protobuf::RepeatedField convert_list_sai_hostif_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_hostif_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifUserDefinedTrapAttr +convert_sai_hostif_user_defined_trap_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_USER_DEFINED_TRAP_ATTR_TYPE: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_ATTR_TYPE; + + case SAI_HOSTIF_USER_DEFINED_TRAP_ATTR_TRAP_PRIORITY: + return lemming::dataplane::sai:: + HOSTIF_USER_DEFINED_TRAP_ATTR_TRAP_PRIORITY; + + case SAI_HOSTIF_USER_DEFINED_TRAP_ATTR_TRAP_GROUP: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_ATTR_TRAP_GROUP; + + default: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_ATTR_UNSPECIFIED; + } +} +sai_hostif_user_defined_trap_attr_t +convert_sai_hostif_user_defined_trap_attr_t_to_sai( + lemming::dataplane::sai::HostifUserDefinedTrapAttr val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_ATTR_TYPE: + return SAI_HOSTIF_USER_DEFINED_TRAP_ATTR_TYPE; + + case lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_ATTR_TRAP_PRIORITY: + return SAI_HOSTIF_USER_DEFINED_TRAP_ATTR_TRAP_PRIORITY; + + case lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_ATTR_TRAP_GROUP: + return SAI_HOSTIF_USER_DEFINED_TRAP_ATTR_TRAP_GROUP; + + default: + return SAI_HOSTIF_USER_DEFINED_TRAP_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_hostif_user_defined_trap_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_hostif_user_defined_trap_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_user_defined_trap_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_user_defined_trap_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifUserDefinedTrapType +convert_sai_hostif_user_defined_trap_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_START: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_START; + + case SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_NEIGHBOR: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_NEIGHBOR; + + case SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_ACL: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_ACL; + + case SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_FDB: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_FDB; + + case SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_INSEG_ENTRY: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_INSEG_ENTRY; + + case SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai:: + HOSTIF_USER_DEFINED_TRAP_TYPE_CUSTOM_RANGE_BASE; + + case SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_END: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_END; + + default: + return lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_UNSPECIFIED; + } +} +sai_hostif_user_defined_trap_type_t +convert_sai_hostif_user_defined_trap_type_t_to_sai( + lemming::dataplane::sai::HostifUserDefinedTrapType val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_START: + return SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_START; + + case lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_NEIGHBOR: + return SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_NEIGHBOR; + + case lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_ACL: + return SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_ACL; + + case lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_FDB: + return SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_FDB; + + case lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_INSEG_ENTRY: + return SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_INSEG_ENTRY; + + case lemming::dataplane::sai:: + HOSTIF_USER_DEFINED_TRAP_TYPE_CUSTOM_RANGE_BASE: + return SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_CUSTOM_RANGE_BASE; + + case lemming::dataplane::sai::HOSTIF_USER_DEFINED_TRAP_TYPE_END: + return SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_END; + + default: + return SAI_HOSTIF_USER_DEFINED_TRAP_TYPE_START; + } +} + +google::protobuf::RepeatedField +convert_list_sai_hostif_user_defined_trap_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_hostif_user_defined_trap_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_user_defined_trap_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_user_defined_trap_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::HostifVlanTag convert_sai_hostif_vlan_tag_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_HOSTIF_VLAN_TAG_STRIP: + return lemming::dataplane::sai::HOSTIF_VLAN_TAG_STRIP; + + case SAI_HOSTIF_VLAN_TAG_KEEP: + return lemming::dataplane::sai::HOSTIF_VLAN_TAG_KEEP; + + case SAI_HOSTIF_VLAN_TAG_ORIGINAL: + return lemming::dataplane::sai::HOSTIF_VLAN_TAG_ORIGINAL; + + default: + return lemming::dataplane::sai::HOSTIF_VLAN_TAG_UNSPECIFIED; + } +} +sai_hostif_vlan_tag_t convert_sai_hostif_vlan_tag_t_to_sai( + lemming::dataplane::sai::HostifVlanTag val) { + switch (val) { + case lemming::dataplane::sai::HOSTIF_VLAN_TAG_STRIP: + return SAI_HOSTIF_VLAN_TAG_STRIP; + + case lemming::dataplane::sai::HOSTIF_VLAN_TAG_KEEP: + return SAI_HOSTIF_VLAN_TAG_KEEP; + + case lemming::dataplane::sai::HOSTIF_VLAN_TAG_ORIGINAL: + return SAI_HOSTIF_VLAN_TAG_ORIGINAL; + + default: + return SAI_HOSTIF_VLAN_TAG_STRIP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_hostif_vlan_tag_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_hostif_vlan_tag_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_hostif_vlan_tag_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_hostif_vlan_tag_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::InDropReason convert_sai_in_drop_reason_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IN_DROP_REASON_START: + return lemming::dataplane::sai::IN_DROP_REASON_START; + + case SAI_IN_DROP_REASON_SMAC_MULTICAST: + return lemming::dataplane::sai::IN_DROP_REASON_SMAC_MULTICAST; + + case SAI_IN_DROP_REASON_SMAC_EQUALS_DMAC: + return lemming::dataplane::sai::IN_DROP_REASON_SMAC_EQUALS_DMAC; + + case SAI_IN_DROP_REASON_DMAC_RESERVED: + return lemming::dataplane::sai::IN_DROP_REASON_DMAC_RESERVED; + + case SAI_IN_DROP_REASON_VLAN_TAG_NOT_ALLOWED: + return lemming::dataplane::sai::IN_DROP_REASON_VLAN_TAG_NOT_ALLOWED; + + case SAI_IN_DROP_REASON_INGRESS_VLAN_FILTER: + return lemming::dataplane::sai::IN_DROP_REASON_INGRESS_VLAN_FILTER; + + case SAI_IN_DROP_REASON_INGRESS_STP_FILTER: + return lemming::dataplane::sai::IN_DROP_REASON_INGRESS_STP_FILTER; + + case SAI_IN_DROP_REASON_FDB_UC_DISCARD: + return lemming::dataplane::sai::IN_DROP_REASON_FDB_UC_DISCARD; + + case SAI_IN_DROP_REASON_FDB_MC_DISCARD: + return lemming::dataplane::sai::IN_DROP_REASON_FDB_MC_DISCARD; + + case SAI_IN_DROP_REASON_L2_LOOPBACK_FILTER: + return lemming::dataplane::sai::IN_DROP_REASON_L2_LOOPBACK_FILTER; + + case SAI_IN_DROP_REASON_EXCEEDS_L2_MTU: + return lemming::dataplane::sai::IN_DROP_REASON_EXCEEDS_L2_MTU; + + case SAI_IN_DROP_REASON_L3_ANY: + return lemming::dataplane::sai::IN_DROP_REASON_L3_ANY; + + case SAI_IN_DROP_REASON_EXCEEDS_L3_MTU: + return lemming::dataplane::sai::IN_DROP_REASON_EXCEEDS_L3_MTU; + + case SAI_IN_DROP_REASON_TTL: + return lemming::dataplane::sai::IN_DROP_REASON_TTL; + + case SAI_IN_DROP_REASON_L3_LOOPBACK_FILTER: + return lemming::dataplane::sai::IN_DROP_REASON_L3_LOOPBACK_FILTER; + + case SAI_IN_DROP_REASON_NON_ROUTABLE: + return lemming::dataplane::sai::IN_DROP_REASON_NON_ROUTABLE; + + case SAI_IN_DROP_REASON_NO_L3_HEADER: + return lemming::dataplane::sai::IN_DROP_REASON_NO_L3_HEADER; + + case SAI_IN_DROP_REASON_IP_HEADER_ERROR: + return lemming::dataplane::sai::IN_DROP_REASON_IP_HEADER_ERROR; + + case SAI_IN_DROP_REASON_UC_DIP_MC_DMAC: + return lemming::dataplane::sai::IN_DROP_REASON_UC_DIP_MC_DMAC; + + case SAI_IN_DROP_REASON_DIP_LOOPBACK: + return lemming::dataplane::sai::IN_DROP_REASON_DIP_LOOPBACK; + + case SAI_IN_DROP_REASON_SIP_LOOPBACK: + return lemming::dataplane::sai::IN_DROP_REASON_SIP_LOOPBACK; + + case SAI_IN_DROP_REASON_SIP_MC: + return lemming::dataplane::sai::IN_DROP_REASON_SIP_MC; + + case SAI_IN_DROP_REASON_SIP_CLASS_E: + return lemming::dataplane::sai::IN_DROP_REASON_SIP_CLASS_E; + + case SAI_IN_DROP_REASON_SIP_UNSPECIFIED: + return lemming::dataplane::sai::IN_DROP_REASON_SIP_UNSPECIFIED; + + case SAI_IN_DROP_REASON_MC_DMAC_MISMATCH: + return lemming::dataplane::sai::IN_DROP_REASON_MC_DMAC_MISMATCH; + + case SAI_IN_DROP_REASON_SIP_EQUALS_DIP: + return lemming::dataplane::sai::IN_DROP_REASON_SIP_EQUALS_DIP; + + case SAI_IN_DROP_REASON_SIP_BC: + return lemming::dataplane::sai::IN_DROP_REASON_SIP_BC; + + case SAI_IN_DROP_REASON_DIP_LOCAL: + return lemming::dataplane::sai::IN_DROP_REASON_DIP_LOCAL; + + case SAI_IN_DROP_REASON_DIP_LINK_LOCAL: + return lemming::dataplane::sai::IN_DROP_REASON_DIP_LINK_LOCAL; + + case SAI_IN_DROP_REASON_SIP_LINK_LOCAL: + return lemming::dataplane::sai::IN_DROP_REASON_SIP_LINK_LOCAL; + + case SAI_IN_DROP_REASON_IPV6_MC_SCOPE0: + return lemming::dataplane::sai::IN_DROP_REASON_IPV6_MC_SCOPE0; + + case SAI_IN_DROP_REASON_IPV6_MC_SCOPE1: + return lemming::dataplane::sai::IN_DROP_REASON_IPV6_MC_SCOPE1; + + case SAI_IN_DROP_REASON_IRIF_DISABLED: + return lemming::dataplane::sai::IN_DROP_REASON_IRIF_DISABLED; + + case SAI_IN_DROP_REASON_ERIF_DISABLED: + return lemming::dataplane::sai::IN_DROP_REASON_ERIF_DISABLED; + + case SAI_IN_DROP_REASON_LPM4_MISS: + return lemming::dataplane::sai::IN_DROP_REASON_LPM4_MISS; + + case SAI_IN_DROP_REASON_LPM6_MISS: + return lemming::dataplane::sai::IN_DROP_REASON_LPM6_MISS; + + case SAI_IN_DROP_REASON_BLACKHOLE_ROUTE: + return lemming::dataplane::sai::IN_DROP_REASON_BLACKHOLE_ROUTE; + + case SAI_IN_DROP_REASON_BLACKHOLE_ARP: + return lemming::dataplane::sai::IN_DROP_REASON_BLACKHOLE_ARP; + + case SAI_IN_DROP_REASON_UNRESOLVED_NEXT_HOP: + return lemming::dataplane::sai::IN_DROP_REASON_UNRESOLVED_NEXT_HOP; + + case SAI_IN_DROP_REASON_L3_EGRESS_LINK_DOWN: + return lemming::dataplane::sai::IN_DROP_REASON_L3_EGRESS_LINK_DOWN; + + case SAI_IN_DROP_REASON_DECAP_ERROR: + return lemming::dataplane::sai::IN_DROP_REASON_DECAP_ERROR; + + case SAI_IN_DROP_REASON_ACL_ANY: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_ANY; + + case SAI_IN_DROP_REASON_ACL_INGRESS_PORT: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_PORT; + + case SAI_IN_DROP_REASON_ACL_INGRESS_LAG: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_LAG; + + case SAI_IN_DROP_REASON_ACL_INGRESS_VLAN: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_VLAN; + + case SAI_IN_DROP_REASON_ACL_INGRESS_RIF: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_RIF; + + case SAI_IN_DROP_REASON_ACL_INGRESS_SWITCH: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_SWITCH; + + case SAI_IN_DROP_REASON_ACL_EGRESS_PORT: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_PORT; + + case SAI_IN_DROP_REASON_ACL_EGRESS_LAG: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_LAG; + + case SAI_IN_DROP_REASON_ACL_EGRESS_VLAN: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_VLAN; + + case SAI_IN_DROP_REASON_ACL_EGRESS_RIF: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_RIF; + + case SAI_IN_DROP_REASON_ACL_EGRESS_SWITCH: + return lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_SWITCH; + + case SAI_IN_DROP_REASON_FDB_AND_BLACKHOLE_DISCARDS: + return lemming::dataplane::sai::IN_DROP_REASON_FDB_AND_BLACKHOLE_DISCARDS; + + case SAI_IN_DROP_REASON_MPLS_MISS: + return lemming::dataplane::sai::IN_DROP_REASON_MPLS_MISS; + + case SAI_IN_DROP_REASON_SRV6_LOCAL_SID_DROP: + return lemming::dataplane::sai::IN_DROP_REASON_SRV6_LOCAL_SID_DROP; + + case SAI_IN_DROP_REASON_END: + return lemming::dataplane::sai::IN_DROP_REASON_END; + + case SAI_IN_DROP_REASON_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::IN_DROP_REASON_CUSTOM_RANGE_BASE; + + case SAI_IN_DROP_REASON_CUSTOM_RANGE_END: + return lemming::dataplane::sai::IN_DROP_REASON_CUSTOM_RANGE_END; + + default: + return lemming::dataplane::sai::IN_DROP_REASON_UNSPECIFIED; + } +} +sai_in_drop_reason_t convert_sai_in_drop_reason_t_to_sai( + lemming::dataplane::sai::InDropReason val) { + switch (val) { + case lemming::dataplane::sai::IN_DROP_REASON_START: + return SAI_IN_DROP_REASON_START; + + case lemming::dataplane::sai::IN_DROP_REASON_SMAC_MULTICAST: + return SAI_IN_DROP_REASON_SMAC_MULTICAST; + + case lemming::dataplane::sai::IN_DROP_REASON_SMAC_EQUALS_DMAC: + return SAI_IN_DROP_REASON_SMAC_EQUALS_DMAC; + + case lemming::dataplane::sai::IN_DROP_REASON_DMAC_RESERVED: + return SAI_IN_DROP_REASON_DMAC_RESERVED; + + case lemming::dataplane::sai::IN_DROP_REASON_VLAN_TAG_NOT_ALLOWED: + return SAI_IN_DROP_REASON_VLAN_TAG_NOT_ALLOWED; + + case lemming::dataplane::sai::IN_DROP_REASON_INGRESS_VLAN_FILTER: + return SAI_IN_DROP_REASON_INGRESS_VLAN_FILTER; + + case lemming::dataplane::sai::IN_DROP_REASON_INGRESS_STP_FILTER: + return SAI_IN_DROP_REASON_INGRESS_STP_FILTER; + + case lemming::dataplane::sai::IN_DROP_REASON_FDB_UC_DISCARD: + return SAI_IN_DROP_REASON_FDB_UC_DISCARD; + + case lemming::dataplane::sai::IN_DROP_REASON_FDB_MC_DISCARD: + return SAI_IN_DROP_REASON_FDB_MC_DISCARD; + + case lemming::dataplane::sai::IN_DROP_REASON_L2_LOOPBACK_FILTER: + return SAI_IN_DROP_REASON_L2_LOOPBACK_FILTER; + + case lemming::dataplane::sai::IN_DROP_REASON_EXCEEDS_L2_MTU: + return SAI_IN_DROP_REASON_EXCEEDS_L2_MTU; + + case lemming::dataplane::sai::IN_DROP_REASON_L3_ANY: + return SAI_IN_DROP_REASON_L3_ANY; + + case lemming::dataplane::sai::IN_DROP_REASON_EXCEEDS_L3_MTU: + return SAI_IN_DROP_REASON_EXCEEDS_L3_MTU; + + case lemming::dataplane::sai::IN_DROP_REASON_TTL: + return SAI_IN_DROP_REASON_TTL; + + case lemming::dataplane::sai::IN_DROP_REASON_L3_LOOPBACK_FILTER: + return SAI_IN_DROP_REASON_L3_LOOPBACK_FILTER; + + case lemming::dataplane::sai::IN_DROP_REASON_NON_ROUTABLE: + return SAI_IN_DROP_REASON_NON_ROUTABLE; + + case lemming::dataplane::sai::IN_DROP_REASON_NO_L3_HEADER: + return SAI_IN_DROP_REASON_NO_L3_HEADER; + + case lemming::dataplane::sai::IN_DROP_REASON_IP_HEADER_ERROR: + return SAI_IN_DROP_REASON_IP_HEADER_ERROR; + + case lemming::dataplane::sai::IN_DROP_REASON_UC_DIP_MC_DMAC: + return SAI_IN_DROP_REASON_UC_DIP_MC_DMAC; + + case lemming::dataplane::sai::IN_DROP_REASON_DIP_LOOPBACK: + return SAI_IN_DROP_REASON_DIP_LOOPBACK; + + case lemming::dataplane::sai::IN_DROP_REASON_SIP_LOOPBACK: + return SAI_IN_DROP_REASON_SIP_LOOPBACK; + + case lemming::dataplane::sai::IN_DROP_REASON_SIP_MC: + return SAI_IN_DROP_REASON_SIP_MC; + + case lemming::dataplane::sai::IN_DROP_REASON_SIP_CLASS_E: + return SAI_IN_DROP_REASON_SIP_CLASS_E; + + case lemming::dataplane::sai::IN_DROP_REASON_SIP_UNSPECIFIED: + return SAI_IN_DROP_REASON_SIP_UNSPECIFIED; + + case lemming::dataplane::sai::IN_DROP_REASON_MC_DMAC_MISMATCH: + return SAI_IN_DROP_REASON_MC_DMAC_MISMATCH; + + case lemming::dataplane::sai::IN_DROP_REASON_SIP_EQUALS_DIP: + return SAI_IN_DROP_REASON_SIP_EQUALS_DIP; + + case lemming::dataplane::sai::IN_DROP_REASON_SIP_BC: + return SAI_IN_DROP_REASON_SIP_BC; + + case lemming::dataplane::sai::IN_DROP_REASON_DIP_LOCAL: + return SAI_IN_DROP_REASON_DIP_LOCAL; + + case lemming::dataplane::sai::IN_DROP_REASON_DIP_LINK_LOCAL: + return SAI_IN_DROP_REASON_DIP_LINK_LOCAL; + + case lemming::dataplane::sai::IN_DROP_REASON_SIP_LINK_LOCAL: + return SAI_IN_DROP_REASON_SIP_LINK_LOCAL; + + case lemming::dataplane::sai::IN_DROP_REASON_IPV6_MC_SCOPE0: + return SAI_IN_DROP_REASON_IPV6_MC_SCOPE0; + + case lemming::dataplane::sai::IN_DROP_REASON_IPV6_MC_SCOPE1: + return SAI_IN_DROP_REASON_IPV6_MC_SCOPE1; + + case lemming::dataplane::sai::IN_DROP_REASON_IRIF_DISABLED: + return SAI_IN_DROP_REASON_IRIF_DISABLED; + + case lemming::dataplane::sai::IN_DROP_REASON_ERIF_DISABLED: + return SAI_IN_DROP_REASON_ERIF_DISABLED; + + case lemming::dataplane::sai::IN_DROP_REASON_LPM4_MISS: + return SAI_IN_DROP_REASON_LPM4_MISS; + + case lemming::dataplane::sai::IN_DROP_REASON_LPM6_MISS: + return SAI_IN_DROP_REASON_LPM6_MISS; + + case lemming::dataplane::sai::IN_DROP_REASON_BLACKHOLE_ROUTE: + return SAI_IN_DROP_REASON_BLACKHOLE_ROUTE; + + case lemming::dataplane::sai::IN_DROP_REASON_BLACKHOLE_ARP: + return SAI_IN_DROP_REASON_BLACKHOLE_ARP; + + case lemming::dataplane::sai::IN_DROP_REASON_UNRESOLVED_NEXT_HOP: + return SAI_IN_DROP_REASON_UNRESOLVED_NEXT_HOP; + + case lemming::dataplane::sai::IN_DROP_REASON_L3_EGRESS_LINK_DOWN: + return SAI_IN_DROP_REASON_L3_EGRESS_LINK_DOWN; + + case lemming::dataplane::sai::IN_DROP_REASON_DECAP_ERROR: + return SAI_IN_DROP_REASON_DECAP_ERROR; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_ANY: + return SAI_IN_DROP_REASON_ACL_ANY; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_PORT: + return SAI_IN_DROP_REASON_ACL_INGRESS_PORT; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_LAG: + return SAI_IN_DROP_REASON_ACL_INGRESS_LAG; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_VLAN: + return SAI_IN_DROP_REASON_ACL_INGRESS_VLAN; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_RIF: + return SAI_IN_DROP_REASON_ACL_INGRESS_RIF; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_INGRESS_SWITCH: + return SAI_IN_DROP_REASON_ACL_INGRESS_SWITCH; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_PORT: + return SAI_IN_DROP_REASON_ACL_EGRESS_PORT; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_LAG: + return SAI_IN_DROP_REASON_ACL_EGRESS_LAG; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_VLAN: + return SAI_IN_DROP_REASON_ACL_EGRESS_VLAN; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_RIF: + return SAI_IN_DROP_REASON_ACL_EGRESS_RIF; + + case lemming::dataplane::sai::IN_DROP_REASON_ACL_EGRESS_SWITCH: + return SAI_IN_DROP_REASON_ACL_EGRESS_SWITCH; + + case lemming::dataplane::sai::IN_DROP_REASON_FDB_AND_BLACKHOLE_DISCARDS: + return SAI_IN_DROP_REASON_FDB_AND_BLACKHOLE_DISCARDS; + + case lemming::dataplane::sai::IN_DROP_REASON_MPLS_MISS: + return SAI_IN_DROP_REASON_MPLS_MISS; + + case lemming::dataplane::sai::IN_DROP_REASON_SRV6_LOCAL_SID_DROP: + return SAI_IN_DROP_REASON_SRV6_LOCAL_SID_DROP; + + case lemming::dataplane::sai::IN_DROP_REASON_END: + return SAI_IN_DROP_REASON_END; + + case lemming::dataplane::sai::IN_DROP_REASON_CUSTOM_RANGE_BASE: + return SAI_IN_DROP_REASON_CUSTOM_RANGE_BASE; + + case lemming::dataplane::sai::IN_DROP_REASON_CUSTOM_RANGE_END: + return SAI_IN_DROP_REASON_CUSTOM_RANGE_END; + + default: + return SAI_IN_DROP_REASON_START; + } +} + +google::protobuf::RepeatedField convert_list_sai_in_drop_reason_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_in_drop_reason_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_in_drop_reason_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_in_drop_reason_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IngressPriorityGroupAttr +convert_sai_ingress_priority_group_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE: + return lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE; + + case SAI_INGRESS_PRIORITY_GROUP_ATTR_PORT: + return lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_ATTR_PORT; + + case SAI_INGRESS_PRIORITY_GROUP_ATTR_TAM: + return lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_ATTR_TAM; + + case SAI_INGRESS_PRIORITY_GROUP_ATTR_INDEX: + return lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_ATTR_INDEX; + + default: + return lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_ATTR_UNSPECIFIED; + } +} +sai_ingress_priority_group_attr_t +convert_sai_ingress_priority_group_attr_t_to_sai( + lemming::dataplane::sai::IngressPriorityGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE: + return SAI_INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE; + + case lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_ATTR_PORT: + return SAI_INGRESS_PRIORITY_GROUP_ATTR_PORT; + + case lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_ATTR_TAM: + return SAI_INGRESS_PRIORITY_GROUP_ATTR_TAM; + + case lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_ATTR_INDEX: + return SAI_INGRESS_PRIORITY_GROUP_ATTR_INDEX; + + default: + return SAI_INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ingress_priority_group_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_ingress_priority_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ingress_priority_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ingress_priority_group_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IngressPriorityGroupStat +convert_sai_ingress_priority_group_stat_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_INGRESS_PRIORITY_GROUP_STAT_PACKETS: + return lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_STAT_PACKETS; + + case SAI_INGRESS_PRIORITY_GROUP_STAT_BYTES: + return lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_STAT_BYTES; + + case SAI_INGRESS_PRIORITY_GROUP_STAT_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_CURR_OCCUPANCY_BYTES; + + case SAI_INGRESS_PRIORITY_GROUP_STAT_WATERMARK_BYTES: + return lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_WATERMARK_BYTES; + + case SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_SHARED_CURR_OCCUPANCY_BYTES; + + case SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES: + return lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES; + + case SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_CURR_OCCUPANCY_BYTES; + + case SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES: + return lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES; + + case SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS: + return lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS; + + case SAI_INGRESS_PRIORITY_GROUP_STAT_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_STAT_UNSPECIFIED; + } +} +sai_ingress_priority_group_stat_t +convert_sai_ingress_priority_group_stat_t_to_sai( + lemming::dataplane::sai::IngressPriorityGroupStat val) { + switch (val) { + case lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_STAT_PACKETS: + return SAI_INGRESS_PRIORITY_GROUP_STAT_PACKETS; + + case lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_STAT_BYTES: + return SAI_INGRESS_PRIORITY_GROUP_STAT_BYTES; + + case lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_CURR_OCCUPANCY_BYTES: + return SAI_INGRESS_PRIORITY_GROUP_STAT_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_STAT_WATERMARK_BYTES: + return SAI_INGRESS_PRIORITY_GROUP_STAT_WATERMARK_BYTES; + + case lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_SHARED_CURR_OCCUPANCY_BYTES: + return SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES: + return SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES; + + case lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_CURR_OCCUPANCY_BYTES: + return SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai:: + INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES: + return SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES; + + case lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS: + return SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS; + + case lemming::dataplane::sai::INGRESS_PRIORITY_GROUP_STAT_CUSTOM_RANGE_BASE: + return SAI_INGRESS_PRIORITY_GROUP_STAT_CUSTOM_RANGE_BASE; + + default: + return SAI_INGRESS_PRIORITY_GROUP_STAT_PACKETS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ingress_priority_group_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_ingress_priority_group_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ingress_priority_group_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ingress_priority_group_stat_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::InsegEntryAttr convert_sai_inseg_entry_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_INSEG_ENTRY_ATTR_NUM_OF_POP: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_NUM_OF_POP; + + case SAI_INSEG_ENTRY_ATTR_PACKET_ACTION: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_PACKET_ACTION; + + case SAI_INSEG_ENTRY_ATTR_TRAP_PRIORITY: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_TRAP_PRIORITY; + + case SAI_INSEG_ENTRY_ATTR_NEXT_HOP_ID: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_NEXT_HOP_ID; + + case SAI_INSEG_ENTRY_ATTR_PSC_TYPE: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_PSC_TYPE; + + case SAI_INSEG_ENTRY_ATTR_QOS_TC: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_QOS_TC; + + case SAI_INSEG_ENTRY_ATTR_MPLS_EXP_TO_TC_MAP: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_MPLS_EXP_TO_TC_MAP; + + case SAI_INSEG_ENTRY_ATTR_MPLS_EXP_TO_COLOR_MAP: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_MPLS_EXP_TO_COLOR_MAP; + + case SAI_INSEG_ENTRY_ATTR_POP_TTL_MODE: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_POP_TTL_MODE; + + case SAI_INSEG_ENTRY_ATTR_POP_QOS_MODE: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_POP_QOS_MODE; + + case SAI_INSEG_ENTRY_ATTR_COUNTER_ID: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_COUNTER_ID; + + default: + return lemming::dataplane::sai::INSEG_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_inseg_entry_attr_t convert_sai_inseg_entry_attr_t_to_sai( + lemming::dataplane::sai::InsegEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_NUM_OF_POP: + return SAI_INSEG_ENTRY_ATTR_NUM_OF_POP; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_PACKET_ACTION: + return SAI_INSEG_ENTRY_ATTR_PACKET_ACTION; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_TRAP_PRIORITY: + return SAI_INSEG_ENTRY_ATTR_TRAP_PRIORITY; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_NEXT_HOP_ID: + return SAI_INSEG_ENTRY_ATTR_NEXT_HOP_ID; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_PSC_TYPE: + return SAI_INSEG_ENTRY_ATTR_PSC_TYPE; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_QOS_TC: + return SAI_INSEG_ENTRY_ATTR_QOS_TC; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_MPLS_EXP_TO_TC_MAP: + return SAI_INSEG_ENTRY_ATTR_MPLS_EXP_TO_TC_MAP; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_MPLS_EXP_TO_COLOR_MAP: + return SAI_INSEG_ENTRY_ATTR_MPLS_EXP_TO_COLOR_MAP; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_POP_TTL_MODE: + return SAI_INSEG_ENTRY_ATTR_POP_TTL_MODE; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_POP_QOS_MODE: + return SAI_INSEG_ENTRY_ATTR_POP_QOS_MODE; + + case lemming::dataplane::sai::INSEG_ENTRY_ATTR_COUNTER_ID: + return SAI_INSEG_ENTRY_ATTR_COUNTER_ID; + + default: + return SAI_INSEG_ENTRY_ATTR_NUM_OF_POP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_inseg_entry_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_inseg_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_inseg_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_inseg_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::InsegEntryPopQosMode +convert_sai_inseg_entry_pop_qos_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_INSEG_ENTRY_POP_QOS_MODE_UNIFORM: + return lemming::dataplane::sai::INSEG_ENTRY_POP_QOS_MODE_UNIFORM; + + case SAI_INSEG_ENTRY_POP_QOS_MODE_PIPE: + return lemming::dataplane::sai::INSEG_ENTRY_POP_QOS_MODE_PIPE; + + default: + return lemming::dataplane::sai::INSEG_ENTRY_POP_QOS_MODE_UNSPECIFIED; + } +} +sai_inseg_entry_pop_qos_mode_t convert_sai_inseg_entry_pop_qos_mode_t_to_sai( + lemming::dataplane::sai::InsegEntryPopQosMode val) { + switch (val) { + case lemming::dataplane::sai::INSEG_ENTRY_POP_QOS_MODE_UNIFORM: + return SAI_INSEG_ENTRY_POP_QOS_MODE_UNIFORM; + + case lemming::dataplane::sai::INSEG_ENTRY_POP_QOS_MODE_PIPE: + return SAI_INSEG_ENTRY_POP_QOS_MODE_PIPE; + + default: + return SAI_INSEG_ENTRY_POP_QOS_MODE_UNIFORM; + } +} + +google::protobuf::RepeatedField +convert_list_sai_inseg_entry_pop_qos_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_inseg_entry_pop_qos_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_inseg_entry_pop_qos_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_inseg_entry_pop_qos_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::InsegEntryPopTtlMode +convert_sai_inseg_entry_pop_ttl_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_INSEG_ENTRY_POP_TTL_MODE_UNIFORM: + return lemming::dataplane::sai::INSEG_ENTRY_POP_TTL_MODE_UNIFORM; + + case SAI_INSEG_ENTRY_POP_TTL_MODE_PIPE: + return lemming::dataplane::sai::INSEG_ENTRY_POP_TTL_MODE_PIPE; + + default: + return lemming::dataplane::sai::INSEG_ENTRY_POP_TTL_MODE_UNSPECIFIED; + } +} +sai_inseg_entry_pop_ttl_mode_t convert_sai_inseg_entry_pop_ttl_mode_t_to_sai( + lemming::dataplane::sai::InsegEntryPopTtlMode val) { + switch (val) { + case lemming::dataplane::sai::INSEG_ENTRY_POP_TTL_MODE_UNIFORM: + return SAI_INSEG_ENTRY_POP_TTL_MODE_UNIFORM; + + case lemming::dataplane::sai::INSEG_ENTRY_POP_TTL_MODE_PIPE: + return SAI_INSEG_ENTRY_POP_TTL_MODE_PIPE; + + default: + return SAI_INSEG_ENTRY_POP_TTL_MODE_UNIFORM; + } +} + +google::protobuf::RepeatedField +convert_list_sai_inseg_entry_pop_ttl_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_inseg_entry_pop_ttl_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_inseg_entry_pop_ttl_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_inseg_entry_pop_ttl_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::InsegEntryPscType +convert_sai_inseg_entry_psc_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_INSEG_ENTRY_PSC_TYPE_ELSP: + return lemming::dataplane::sai::INSEG_ENTRY_PSC_TYPE_ELSP; + + case SAI_INSEG_ENTRY_PSC_TYPE_LLSP: + return lemming::dataplane::sai::INSEG_ENTRY_PSC_TYPE_LLSP; + + default: + return lemming::dataplane::sai::INSEG_ENTRY_PSC_TYPE_UNSPECIFIED; + } +} +sai_inseg_entry_psc_type_t convert_sai_inseg_entry_psc_type_t_to_sai( + lemming::dataplane::sai::InsegEntryPscType val) { + switch (val) { + case lemming::dataplane::sai::INSEG_ENTRY_PSC_TYPE_ELSP: + return SAI_INSEG_ENTRY_PSC_TYPE_ELSP; + + case lemming::dataplane::sai::INSEG_ENTRY_PSC_TYPE_LLSP: + return SAI_INSEG_ENTRY_PSC_TYPE_LLSP; + + default: + return SAI_INSEG_ENTRY_PSC_TYPE_ELSP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_inseg_entry_psc_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_inseg_entry_psc_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_inseg_entry_psc_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_inseg_entry_psc_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpAddrFamily convert_sai_ip_addr_family_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IP_ADDR_FAMILY_IPV4: + return lemming::dataplane::sai::IP_ADDR_FAMILY_IPV4; + + case SAI_IP_ADDR_FAMILY_IPV6: + return lemming::dataplane::sai::IP_ADDR_FAMILY_IPV6; + + default: + return lemming::dataplane::sai::IP_ADDR_FAMILY_UNSPECIFIED; + } +} +sai_ip_addr_family_t convert_sai_ip_addr_family_t_to_sai( + lemming::dataplane::sai::IpAddrFamily val) { + switch (val) { + case lemming::dataplane::sai::IP_ADDR_FAMILY_IPV4: + return SAI_IP_ADDR_FAMILY_IPV4; + + case lemming::dataplane::sai::IP_ADDR_FAMILY_IPV6: + return SAI_IP_ADDR_FAMILY_IPV6; + + default: + return SAI_IP_ADDR_FAMILY_IPV4; + } +} + +google::protobuf::RepeatedField convert_list_sai_ip_addr_family_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ip_addr_family_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ip_addr_family_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ip_addr_family_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpmcEntryAttr convert_sai_ipmc_entry_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPMC_ENTRY_ATTR_PACKET_ACTION: + return lemming::dataplane::sai::IPMC_ENTRY_ATTR_PACKET_ACTION; + + case SAI_IPMC_ENTRY_ATTR_OUTPUT_GROUP_ID: + return lemming::dataplane::sai::IPMC_ENTRY_ATTR_OUTPUT_GROUP_ID; + + case SAI_IPMC_ENTRY_ATTR_RPF_GROUP_ID: + return lemming::dataplane::sai::IPMC_ENTRY_ATTR_RPF_GROUP_ID; + + case SAI_IPMC_ENTRY_ATTR_COUNTER_ID: + return lemming::dataplane::sai::IPMC_ENTRY_ATTR_COUNTER_ID; + + default: + return lemming::dataplane::sai::IPMC_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_ipmc_entry_attr_t convert_sai_ipmc_entry_attr_t_to_sai( + lemming::dataplane::sai::IpmcEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::IPMC_ENTRY_ATTR_PACKET_ACTION: + return SAI_IPMC_ENTRY_ATTR_PACKET_ACTION; + + case lemming::dataplane::sai::IPMC_ENTRY_ATTR_OUTPUT_GROUP_ID: + return SAI_IPMC_ENTRY_ATTR_OUTPUT_GROUP_ID; + + case lemming::dataplane::sai::IPMC_ENTRY_ATTR_RPF_GROUP_ID: + return SAI_IPMC_ENTRY_ATTR_RPF_GROUP_ID; + + case lemming::dataplane::sai::IPMC_ENTRY_ATTR_COUNTER_ID: + return SAI_IPMC_ENTRY_ATTR_COUNTER_ID; + + default: + return SAI_IPMC_ENTRY_ATTR_PACKET_ACTION; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ipmc_entry_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipmc_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipmc_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipmc_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpmcEntryType convert_sai_ipmc_entry_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPMC_ENTRY_TYPE_SG: + return lemming::dataplane::sai::IPMC_ENTRY_TYPE_SG; + + case SAI_IPMC_ENTRY_TYPE_XG: + return lemming::dataplane::sai::IPMC_ENTRY_TYPE_XG; + + default: + return lemming::dataplane::sai::IPMC_ENTRY_TYPE_UNSPECIFIED; + } +} +sai_ipmc_entry_type_t convert_sai_ipmc_entry_type_t_to_sai( + lemming::dataplane::sai::IpmcEntryType val) { + switch (val) { + case lemming::dataplane::sai::IPMC_ENTRY_TYPE_SG: + return SAI_IPMC_ENTRY_TYPE_SG; + + case lemming::dataplane::sai::IPMC_ENTRY_TYPE_XG: + return SAI_IPMC_ENTRY_TYPE_XG; + + default: + return SAI_IPMC_ENTRY_TYPE_SG; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ipmc_entry_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipmc_entry_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipmc_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipmc_entry_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpmcGroupAttr convert_sai_ipmc_group_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPMC_GROUP_ATTR_IPMC_OUTPUT_COUNT: + return lemming::dataplane::sai::IPMC_GROUP_ATTR_IPMC_OUTPUT_COUNT; + + case SAI_IPMC_GROUP_ATTR_IPMC_MEMBER_LIST: + return lemming::dataplane::sai::IPMC_GROUP_ATTR_IPMC_MEMBER_LIST; + + default: + return lemming::dataplane::sai::IPMC_GROUP_ATTR_UNSPECIFIED; + } +} +sai_ipmc_group_attr_t convert_sai_ipmc_group_attr_t_to_sai( + lemming::dataplane::sai::IpmcGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::IPMC_GROUP_ATTR_IPMC_OUTPUT_COUNT: + return SAI_IPMC_GROUP_ATTR_IPMC_OUTPUT_COUNT; + + case lemming::dataplane::sai::IPMC_GROUP_ATTR_IPMC_MEMBER_LIST: + return SAI_IPMC_GROUP_ATTR_IPMC_MEMBER_LIST; + + default: + return SAI_IPMC_GROUP_ATTR_IPMC_OUTPUT_COUNT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ipmc_group_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipmc_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipmc_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipmc_group_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpmcGroupMemberAttr +convert_sai_ipmc_group_member_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_IPMC_GROUP_MEMBER_ATTR_IPMC_GROUP_ID: + return lemming::dataplane::sai::IPMC_GROUP_MEMBER_ATTR_IPMC_GROUP_ID; + + case SAI_IPMC_GROUP_MEMBER_ATTR_IPMC_OUTPUT_ID: + return lemming::dataplane::sai::IPMC_GROUP_MEMBER_ATTR_IPMC_OUTPUT_ID; + + default: + return lemming::dataplane::sai::IPMC_GROUP_MEMBER_ATTR_UNSPECIFIED; + } +} +sai_ipmc_group_member_attr_t convert_sai_ipmc_group_member_attr_t_to_sai( + lemming::dataplane::sai::IpmcGroupMemberAttr val) { + switch (val) { + case lemming::dataplane::sai::IPMC_GROUP_MEMBER_ATTR_IPMC_GROUP_ID: + return SAI_IPMC_GROUP_MEMBER_ATTR_IPMC_GROUP_ID; + + case lemming::dataplane::sai::IPMC_GROUP_MEMBER_ATTR_IPMC_OUTPUT_ID: + return SAI_IPMC_GROUP_MEMBER_ATTR_IPMC_OUTPUT_ID; + + default: + return SAI_IPMC_GROUP_MEMBER_ATTR_IPMC_GROUP_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ipmc_group_member_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipmc_group_member_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipmc_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipmc_group_member_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpsecAttr convert_sai_ipsec_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPSEC_ATTR_TERM_REMOTE_IP_MATCH_SUPPORTED: + return lemming::dataplane::sai::IPSEC_ATTR_TERM_REMOTE_IP_MATCH_SUPPORTED; + + case SAI_IPSEC_ATTR_SWITCHING_MODE_CUT_THROUGH_SUPPORTED: + return lemming::dataplane::sai:: + IPSEC_ATTR_SWITCHING_MODE_CUT_THROUGH_SUPPORTED; + + case SAI_IPSEC_ATTR_SWITCHING_MODE_STORE_AND_FORWARD_SUPPORTED: + return lemming::dataplane::sai:: + IPSEC_ATTR_SWITCHING_MODE_STORE_AND_FORWARD_SUPPORTED; + + case SAI_IPSEC_ATTR_STATS_MODE_READ_SUPPORTED: + return lemming::dataplane::sai::IPSEC_ATTR_STATS_MODE_READ_SUPPORTED; + + case SAI_IPSEC_ATTR_STATS_MODE_READ_CLEAR_SUPPORTED: + return lemming::dataplane::sai:: + IPSEC_ATTR_STATS_MODE_READ_CLEAR_SUPPORTED; + + case SAI_IPSEC_ATTR_SN_32BIT_SUPPORTED: + return lemming::dataplane::sai::IPSEC_ATTR_SN_32BIT_SUPPORTED; + + case SAI_IPSEC_ATTR_ESN_64BIT_SUPPORTED: + return lemming::dataplane::sai::IPSEC_ATTR_ESN_64BIT_SUPPORTED; + + case SAI_IPSEC_ATTR_SUPPORTED_CIPHER_LIST: + return lemming::dataplane::sai::IPSEC_ATTR_SUPPORTED_CIPHER_LIST; + + case SAI_IPSEC_ATTR_SYSTEM_SIDE_MTU: + return lemming::dataplane::sai::IPSEC_ATTR_SYSTEM_SIDE_MTU; + + case SAI_IPSEC_ATTR_WARM_BOOT_SUPPORTED: + return lemming::dataplane::sai::IPSEC_ATTR_WARM_BOOT_SUPPORTED; + + case SAI_IPSEC_ATTR_WARM_BOOT_ENABLE: + return lemming::dataplane::sai::IPSEC_ATTR_WARM_BOOT_ENABLE; + + case SAI_IPSEC_ATTR_EXTERNAL_SA_INDEX_ENABLE: + return lemming::dataplane::sai::IPSEC_ATTR_EXTERNAL_SA_INDEX_ENABLE; + + case SAI_IPSEC_ATTR_CTAG_TPID: + return lemming::dataplane::sai::IPSEC_ATTR_CTAG_TPID; + + case SAI_IPSEC_ATTR_STAG_TPID: + return lemming::dataplane::sai::IPSEC_ATTR_STAG_TPID; + + case SAI_IPSEC_ATTR_MAX_VLAN_TAGS_PARSED: + return lemming::dataplane::sai::IPSEC_ATTR_MAX_VLAN_TAGS_PARSED; + + case SAI_IPSEC_ATTR_OCTET_COUNT_HIGH_WATERMARK: + return lemming::dataplane::sai::IPSEC_ATTR_OCTET_COUNT_HIGH_WATERMARK; + + case SAI_IPSEC_ATTR_OCTET_COUNT_LOW_WATERMARK: + return lemming::dataplane::sai::IPSEC_ATTR_OCTET_COUNT_LOW_WATERMARK; + + case SAI_IPSEC_ATTR_STATS_MODE: + return lemming::dataplane::sai::IPSEC_ATTR_STATS_MODE; + + case SAI_IPSEC_ATTR_AVAILABLE_IPSEC_SA: + return lemming::dataplane::sai::IPSEC_ATTR_AVAILABLE_IPSEC_SA; + + case SAI_IPSEC_ATTR_SA_LIST: + return lemming::dataplane::sai::IPSEC_ATTR_SA_LIST; + + default: + return lemming::dataplane::sai::IPSEC_ATTR_UNSPECIFIED; + } +} +sai_ipsec_attr_t convert_sai_ipsec_attr_t_to_sai( + lemming::dataplane::sai::IpsecAttr val) { + switch (val) { + case lemming::dataplane::sai::IPSEC_ATTR_TERM_REMOTE_IP_MATCH_SUPPORTED: + return SAI_IPSEC_ATTR_TERM_REMOTE_IP_MATCH_SUPPORTED; + + case lemming::dataplane::sai:: + IPSEC_ATTR_SWITCHING_MODE_CUT_THROUGH_SUPPORTED: + return SAI_IPSEC_ATTR_SWITCHING_MODE_CUT_THROUGH_SUPPORTED; + + case lemming::dataplane::sai:: + IPSEC_ATTR_SWITCHING_MODE_STORE_AND_FORWARD_SUPPORTED: + return SAI_IPSEC_ATTR_SWITCHING_MODE_STORE_AND_FORWARD_SUPPORTED; + + case lemming::dataplane::sai::IPSEC_ATTR_STATS_MODE_READ_SUPPORTED: + return SAI_IPSEC_ATTR_STATS_MODE_READ_SUPPORTED; + + case lemming::dataplane::sai::IPSEC_ATTR_STATS_MODE_READ_CLEAR_SUPPORTED: + return SAI_IPSEC_ATTR_STATS_MODE_READ_CLEAR_SUPPORTED; + + case lemming::dataplane::sai::IPSEC_ATTR_SN_32BIT_SUPPORTED: + return SAI_IPSEC_ATTR_SN_32BIT_SUPPORTED; + + case lemming::dataplane::sai::IPSEC_ATTR_ESN_64BIT_SUPPORTED: + return SAI_IPSEC_ATTR_ESN_64BIT_SUPPORTED; + + case lemming::dataplane::sai::IPSEC_ATTR_SUPPORTED_CIPHER_LIST: + return SAI_IPSEC_ATTR_SUPPORTED_CIPHER_LIST; + + case lemming::dataplane::sai::IPSEC_ATTR_SYSTEM_SIDE_MTU: + return SAI_IPSEC_ATTR_SYSTEM_SIDE_MTU; + + case lemming::dataplane::sai::IPSEC_ATTR_WARM_BOOT_SUPPORTED: + return SAI_IPSEC_ATTR_WARM_BOOT_SUPPORTED; + + case lemming::dataplane::sai::IPSEC_ATTR_WARM_BOOT_ENABLE: + return SAI_IPSEC_ATTR_WARM_BOOT_ENABLE; + + case lemming::dataplane::sai::IPSEC_ATTR_EXTERNAL_SA_INDEX_ENABLE: + return SAI_IPSEC_ATTR_EXTERNAL_SA_INDEX_ENABLE; + + case lemming::dataplane::sai::IPSEC_ATTR_CTAG_TPID: + return SAI_IPSEC_ATTR_CTAG_TPID; + + case lemming::dataplane::sai::IPSEC_ATTR_STAG_TPID: + return SAI_IPSEC_ATTR_STAG_TPID; + + case lemming::dataplane::sai::IPSEC_ATTR_MAX_VLAN_TAGS_PARSED: + return SAI_IPSEC_ATTR_MAX_VLAN_TAGS_PARSED; + + case lemming::dataplane::sai::IPSEC_ATTR_OCTET_COUNT_HIGH_WATERMARK: + return SAI_IPSEC_ATTR_OCTET_COUNT_HIGH_WATERMARK; + + case lemming::dataplane::sai::IPSEC_ATTR_OCTET_COUNT_LOW_WATERMARK: + return SAI_IPSEC_ATTR_OCTET_COUNT_LOW_WATERMARK; + + case lemming::dataplane::sai::IPSEC_ATTR_STATS_MODE: + return SAI_IPSEC_ATTR_STATS_MODE; + + case lemming::dataplane::sai::IPSEC_ATTR_AVAILABLE_IPSEC_SA: + return SAI_IPSEC_ATTR_AVAILABLE_IPSEC_SA; + + case lemming::dataplane::sai::IPSEC_ATTR_SA_LIST: + return SAI_IPSEC_ATTR_SA_LIST; + + default: + return SAI_IPSEC_ATTR_TERM_REMOTE_IP_MATCH_SUPPORTED; + } +} + +google::protobuf::RepeatedField convert_list_sai_ipsec_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipsec_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipsec_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipsec_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpsecCipher convert_sai_ipsec_cipher_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPSEC_CIPHER_AES128_GCM16: + return lemming::dataplane::sai::IPSEC_CIPHER_AES128_GCM16; + + case SAI_IPSEC_CIPHER_AES256_GCM16: + return lemming::dataplane::sai::IPSEC_CIPHER_AES256_GCM16; + + case SAI_IPSEC_CIPHER_AES128_GMAC: + return lemming::dataplane::sai::IPSEC_CIPHER_AES128_GMAC; + + case SAI_IPSEC_CIPHER_AES256_GMAC: + return lemming::dataplane::sai::IPSEC_CIPHER_AES256_GMAC; + + default: + return lemming::dataplane::sai::IPSEC_CIPHER_UNSPECIFIED; + } +} +sai_ipsec_cipher_t convert_sai_ipsec_cipher_t_to_sai( + lemming::dataplane::sai::IpsecCipher val) { + switch (val) { + case lemming::dataplane::sai::IPSEC_CIPHER_AES128_GCM16: + return SAI_IPSEC_CIPHER_AES128_GCM16; + + case lemming::dataplane::sai::IPSEC_CIPHER_AES256_GCM16: + return SAI_IPSEC_CIPHER_AES256_GCM16; + + case lemming::dataplane::sai::IPSEC_CIPHER_AES128_GMAC: + return SAI_IPSEC_CIPHER_AES128_GMAC; + + case lemming::dataplane::sai::IPSEC_CIPHER_AES256_GMAC: + return SAI_IPSEC_CIPHER_AES256_GMAC; + + default: + return SAI_IPSEC_CIPHER_AES128_GCM16; + } +} + +google::protobuf::RepeatedField convert_list_sai_ipsec_cipher_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipsec_cipher_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipsec_cipher_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipsec_cipher_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpsecDirection convert_sai_ipsec_direction_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPSEC_DIRECTION_EGRESS: + return lemming::dataplane::sai::IPSEC_DIRECTION_EGRESS; + + case SAI_IPSEC_DIRECTION_INGRESS: + return lemming::dataplane::sai::IPSEC_DIRECTION_INGRESS; + + default: + return lemming::dataplane::sai::IPSEC_DIRECTION_UNSPECIFIED; + } +} +sai_ipsec_direction_t convert_sai_ipsec_direction_t_to_sai( + lemming::dataplane::sai::IpsecDirection val) { + switch (val) { + case lemming::dataplane::sai::IPSEC_DIRECTION_EGRESS: + return SAI_IPSEC_DIRECTION_EGRESS; + + case lemming::dataplane::sai::IPSEC_DIRECTION_INGRESS: + return SAI_IPSEC_DIRECTION_INGRESS; + + default: + return SAI_IPSEC_DIRECTION_EGRESS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ipsec_direction_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipsec_direction_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipsec_direction_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipsec_direction_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpsecPortAttr convert_sai_ipsec_port_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPSEC_PORT_ATTR_PORT_ID: + return lemming::dataplane::sai::IPSEC_PORT_ATTR_PORT_ID; + + case SAI_IPSEC_PORT_ATTR_CTAG_ENABLE: + return lemming::dataplane::sai::IPSEC_PORT_ATTR_CTAG_ENABLE; + + case SAI_IPSEC_PORT_ATTR_STAG_ENABLE: + return lemming::dataplane::sai::IPSEC_PORT_ATTR_STAG_ENABLE; + + case SAI_IPSEC_PORT_ATTR_NATIVE_VLAN_ID: + return lemming::dataplane::sai::IPSEC_PORT_ATTR_NATIVE_VLAN_ID; + + case SAI_IPSEC_PORT_ATTR_VRF_FROM_PACKET_VLAN_ENABLE: + return lemming::dataplane::sai:: + IPSEC_PORT_ATTR_VRF_FROM_PACKET_VLAN_ENABLE; + + case SAI_IPSEC_PORT_ATTR_SWITCH_SWITCHING_MODE: + return lemming::dataplane::sai::IPSEC_PORT_ATTR_SWITCH_SWITCHING_MODE; + + default: + return lemming::dataplane::sai::IPSEC_PORT_ATTR_UNSPECIFIED; + } +} +sai_ipsec_port_attr_t convert_sai_ipsec_port_attr_t_to_sai( + lemming::dataplane::sai::IpsecPortAttr val) { + switch (val) { + case lemming::dataplane::sai::IPSEC_PORT_ATTR_PORT_ID: + return SAI_IPSEC_PORT_ATTR_PORT_ID; + + case lemming::dataplane::sai::IPSEC_PORT_ATTR_CTAG_ENABLE: + return SAI_IPSEC_PORT_ATTR_CTAG_ENABLE; + + case lemming::dataplane::sai::IPSEC_PORT_ATTR_STAG_ENABLE: + return SAI_IPSEC_PORT_ATTR_STAG_ENABLE; + + case lemming::dataplane::sai::IPSEC_PORT_ATTR_NATIVE_VLAN_ID: + return SAI_IPSEC_PORT_ATTR_NATIVE_VLAN_ID; + + case lemming::dataplane::sai::IPSEC_PORT_ATTR_VRF_FROM_PACKET_VLAN_ENABLE: + return SAI_IPSEC_PORT_ATTR_VRF_FROM_PACKET_VLAN_ENABLE; + + case lemming::dataplane::sai::IPSEC_PORT_ATTR_SWITCH_SWITCHING_MODE: + return SAI_IPSEC_PORT_ATTR_SWITCH_SWITCHING_MODE; + + default: + return SAI_IPSEC_PORT_ATTR_PORT_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ipsec_port_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipsec_port_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipsec_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipsec_port_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpsecPortStat convert_sai_ipsec_port_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPSEC_PORT_STAT_TX_ERROR_PKTS: + return lemming::dataplane::sai::IPSEC_PORT_STAT_TX_ERROR_PKTS; + + case SAI_IPSEC_PORT_STAT_TX_IPSEC_PKTS: + return lemming::dataplane::sai::IPSEC_PORT_STAT_TX_IPSEC_PKTS; + + case SAI_IPSEC_PORT_STAT_TX_NON_IPSEC_PKTS: + return lemming::dataplane::sai::IPSEC_PORT_STAT_TX_NON_IPSEC_PKTS; + + case SAI_IPSEC_PORT_STAT_RX_ERROR_PKTS: + return lemming::dataplane::sai::IPSEC_PORT_STAT_RX_ERROR_PKTS; + + case SAI_IPSEC_PORT_STAT_RX_IPSEC_PKTS: + return lemming::dataplane::sai::IPSEC_PORT_STAT_RX_IPSEC_PKTS; + + case SAI_IPSEC_PORT_STAT_RX_NON_IPSEC_PKTS: + return lemming::dataplane::sai::IPSEC_PORT_STAT_RX_NON_IPSEC_PKTS; + + default: + return lemming::dataplane::sai::IPSEC_PORT_STAT_UNSPECIFIED; + } +} +sai_ipsec_port_stat_t convert_sai_ipsec_port_stat_t_to_sai( + lemming::dataplane::sai::IpsecPortStat val) { + switch (val) { + case lemming::dataplane::sai::IPSEC_PORT_STAT_TX_ERROR_PKTS: + return SAI_IPSEC_PORT_STAT_TX_ERROR_PKTS; + + case lemming::dataplane::sai::IPSEC_PORT_STAT_TX_IPSEC_PKTS: + return SAI_IPSEC_PORT_STAT_TX_IPSEC_PKTS; + + case lemming::dataplane::sai::IPSEC_PORT_STAT_TX_NON_IPSEC_PKTS: + return SAI_IPSEC_PORT_STAT_TX_NON_IPSEC_PKTS; + + case lemming::dataplane::sai::IPSEC_PORT_STAT_RX_ERROR_PKTS: + return SAI_IPSEC_PORT_STAT_RX_ERROR_PKTS; + + case lemming::dataplane::sai::IPSEC_PORT_STAT_RX_IPSEC_PKTS: + return SAI_IPSEC_PORT_STAT_RX_IPSEC_PKTS; + + case lemming::dataplane::sai::IPSEC_PORT_STAT_RX_NON_IPSEC_PKTS: + return SAI_IPSEC_PORT_STAT_RX_NON_IPSEC_PKTS; + + default: + return SAI_IPSEC_PORT_STAT_TX_ERROR_PKTS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ipsec_port_stat_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipsec_port_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipsec_port_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipsec_port_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpsecSaAttr convert_sai_ipsec_sa_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPSEC_SA_ATTR_IPSEC_DIRECTION: + return lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_DIRECTION; + + case SAI_IPSEC_SA_ATTR_IPSEC_ID: + return lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_ID; + + case SAI_IPSEC_SA_ATTR_OCTET_COUNT_STATUS: + return lemming::dataplane::sai::IPSEC_SA_ATTR_OCTET_COUNT_STATUS; + + case SAI_IPSEC_SA_ATTR_EXTERNAL_SA_INDEX: + return lemming::dataplane::sai::IPSEC_SA_ATTR_EXTERNAL_SA_INDEX; + + case SAI_IPSEC_SA_ATTR_SA_INDEX: + return lemming::dataplane::sai::IPSEC_SA_ATTR_SA_INDEX; + + case SAI_IPSEC_SA_ATTR_IPSEC_PORT_LIST: + return lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_PORT_LIST; + + case SAI_IPSEC_SA_ATTR_IPSEC_SPI: + return lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_SPI; + + case SAI_IPSEC_SA_ATTR_IPSEC_ESN_ENABLE: + return lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_ESN_ENABLE; + + case SAI_IPSEC_SA_ATTR_IPSEC_CIPHER: + return lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_CIPHER; + + case SAI_IPSEC_SA_ATTR_ENCRYPT_KEY: + return lemming::dataplane::sai::IPSEC_SA_ATTR_ENCRYPT_KEY; + + case SAI_IPSEC_SA_ATTR_SALT: + return lemming::dataplane::sai::IPSEC_SA_ATTR_SALT; + + case SAI_IPSEC_SA_ATTR_AUTH_KEY: + return lemming::dataplane::sai::IPSEC_SA_ATTR_AUTH_KEY; + + case SAI_IPSEC_SA_ATTR_IPSEC_REPLAY_PROTECTION_ENABLE: + return lemming::dataplane::sai:: + IPSEC_SA_ATTR_IPSEC_REPLAY_PROTECTION_ENABLE; + + case SAI_IPSEC_SA_ATTR_IPSEC_REPLAY_PROTECTION_WINDOW: + return lemming::dataplane::sai:: + IPSEC_SA_ATTR_IPSEC_REPLAY_PROTECTION_WINDOW; + + case SAI_IPSEC_SA_ATTR_TERM_DST_IP: + return lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_DST_IP; + + case SAI_IPSEC_SA_ATTR_TERM_VLAN_ID_ENABLE: + return lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_VLAN_ID_ENABLE; + + case SAI_IPSEC_SA_ATTR_TERM_VLAN_ID: + return lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_VLAN_ID; + + case SAI_IPSEC_SA_ATTR_TERM_SRC_IP_ENABLE: + return lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_SRC_IP_ENABLE; + + case SAI_IPSEC_SA_ATTR_TERM_SRC_IP: + return lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_SRC_IP; + + case SAI_IPSEC_SA_ATTR_EGRESS_ESN: + return lemming::dataplane::sai::IPSEC_SA_ATTR_EGRESS_ESN; + + case SAI_IPSEC_SA_ATTR_MINIMUM_INGRESS_ESN: + return lemming::dataplane::sai::IPSEC_SA_ATTR_MINIMUM_INGRESS_ESN; + + default: + return lemming::dataplane::sai::IPSEC_SA_ATTR_UNSPECIFIED; + } +} +sai_ipsec_sa_attr_t convert_sai_ipsec_sa_attr_t_to_sai( + lemming::dataplane::sai::IpsecSaAttr val) { + switch (val) { + case lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_DIRECTION: + return SAI_IPSEC_SA_ATTR_IPSEC_DIRECTION; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_ID: + return SAI_IPSEC_SA_ATTR_IPSEC_ID; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_OCTET_COUNT_STATUS: + return SAI_IPSEC_SA_ATTR_OCTET_COUNT_STATUS; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_EXTERNAL_SA_INDEX: + return SAI_IPSEC_SA_ATTR_EXTERNAL_SA_INDEX; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_SA_INDEX: + return SAI_IPSEC_SA_ATTR_SA_INDEX; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_PORT_LIST: + return SAI_IPSEC_SA_ATTR_IPSEC_PORT_LIST; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_SPI: + return SAI_IPSEC_SA_ATTR_IPSEC_SPI; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_ESN_ENABLE: + return SAI_IPSEC_SA_ATTR_IPSEC_ESN_ENABLE; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_CIPHER: + return SAI_IPSEC_SA_ATTR_IPSEC_CIPHER; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_ENCRYPT_KEY: + return SAI_IPSEC_SA_ATTR_ENCRYPT_KEY; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_SALT: + return SAI_IPSEC_SA_ATTR_SALT; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_AUTH_KEY: + return SAI_IPSEC_SA_ATTR_AUTH_KEY; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_REPLAY_PROTECTION_ENABLE: + return SAI_IPSEC_SA_ATTR_IPSEC_REPLAY_PROTECTION_ENABLE; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_IPSEC_REPLAY_PROTECTION_WINDOW: + return SAI_IPSEC_SA_ATTR_IPSEC_REPLAY_PROTECTION_WINDOW; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_DST_IP: + return SAI_IPSEC_SA_ATTR_TERM_DST_IP; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_VLAN_ID_ENABLE: + return SAI_IPSEC_SA_ATTR_TERM_VLAN_ID_ENABLE; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_VLAN_ID: + return SAI_IPSEC_SA_ATTR_TERM_VLAN_ID; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_SRC_IP_ENABLE: + return SAI_IPSEC_SA_ATTR_TERM_SRC_IP_ENABLE; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_TERM_SRC_IP: + return SAI_IPSEC_SA_ATTR_TERM_SRC_IP; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_EGRESS_ESN: + return SAI_IPSEC_SA_ATTR_EGRESS_ESN; + + case lemming::dataplane::sai::IPSEC_SA_ATTR_MINIMUM_INGRESS_ESN: + return SAI_IPSEC_SA_ATTR_MINIMUM_INGRESS_ESN; + + default: + return SAI_IPSEC_SA_ATTR_IPSEC_DIRECTION; + } +} + +google::protobuf::RepeatedField convert_list_sai_ipsec_sa_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipsec_sa_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipsec_sa_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipsec_sa_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpsecSaOctetCountStatus +convert_sai_ipsec_sa_octet_count_status_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_IPSEC_SA_OCTET_COUNT_STATUS_BELOW_LOW_WATERMARK: + return lemming::dataplane::sai:: + IPSEC_SA_OCTET_COUNT_STATUS_BELOW_LOW_WATERMARK; + + case SAI_IPSEC_SA_OCTET_COUNT_STATUS_BELOW_HIGH_WATERMARK: + return lemming::dataplane::sai:: + IPSEC_SA_OCTET_COUNT_STATUS_BELOW_HIGH_WATERMARK; + + case SAI_IPSEC_SA_OCTET_COUNT_STATUS_ABOVE_HIGH_WATERMARK: + return lemming::dataplane::sai:: + IPSEC_SA_OCTET_COUNT_STATUS_ABOVE_HIGH_WATERMARK; + + default: + return lemming::dataplane::sai::IPSEC_SA_OCTET_COUNT_STATUS_UNSPECIFIED; + } +} +sai_ipsec_sa_octet_count_status_t +convert_sai_ipsec_sa_octet_count_status_t_to_sai( + lemming::dataplane::sai::IpsecSaOctetCountStatus val) { + switch (val) { + case lemming::dataplane::sai:: + IPSEC_SA_OCTET_COUNT_STATUS_BELOW_LOW_WATERMARK: + return SAI_IPSEC_SA_OCTET_COUNT_STATUS_BELOW_LOW_WATERMARK; + + case lemming::dataplane::sai:: + IPSEC_SA_OCTET_COUNT_STATUS_BELOW_HIGH_WATERMARK: + return SAI_IPSEC_SA_OCTET_COUNT_STATUS_BELOW_HIGH_WATERMARK; + + case lemming::dataplane::sai:: + IPSEC_SA_OCTET_COUNT_STATUS_ABOVE_HIGH_WATERMARK: + return SAI_IPSEC_SA_OCTET_COUNT_STATUS_ABOVE_HIGH_WATERMARK; + + default: + return SAI_IPSEC_SA_OCTET_COUNT_STATUS_BELOW_LOW_WATERMARK; + } +} + +google::protobuf::RepeatedField +convert_list_sai_ipsec_sa_octet_count_status_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_ipsec_sa_octet_count_status_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipsec_sa_octet_count_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipsec_sa_octet_count_status_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IpsecSaStat convert_sai_ipsec_sa_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_IPSEC_SA_STAT_PROTECTED_OCTETS: + return lemming::dataplane::sai::IPSEC_SA_STAT_PROTECTED_OCTETS; + + case SAI_IPSEC_SA_STAT_PROTECTED_PKTS: + return lemming::dataplane::sai::IPSEC_SA_STAT_PROTECTED_PKTS; + + case SAI_IPSEC_SA_STAT_GOOD_PKTS: + return lemming::dataplane::sai::IPSEC_SA_STAT_GOOD_PKTS; + + case SAI_IPSEC_SA_STAT_BAD_HEADER_PKTS_IN: + return lemming::dataplane::sai::IPSEC_SA_STAT_BAD_HEADER_PKTS_IN; + + case SAI_IPSEC_SA_STAT_REPLAYED_PKTS_IN: + return lemming::dataplane::sai::IPSEC_SA_STAT_REPLAYED_PKTS_IN; + + case SAI_IPSEC_SA_STAT_LATE_PKTS_IN: + return lemming::dataplane::sai::IPSEC_SA_STAT_LATE_PKTS_IN; + + case SAI_IPSEC_SA_STAT_BAD_TRAILER_PKTS_IN: + return lemming::dataplane::sai::IPSEC_SA_STAT_BAD_TRAILER_PKTS_IN; + + case SAI_IPSEC_SA_STAT_AUTH_FAIL_PKTS_IN: + return lemming::dataplane::sai::IPSEC_SA_STAT_AUTH_FAIL_PKTS_IN; + + case SAI_IPSEC_SA_STAT_DUMMY_DROPPED_PKTS_IN: + return lemming::dataplane::sai::IPSEC_SA_STAT_DUMMY_DROPPED_PKTS_IN; + + case SAI_IPSEC_SA_STAT_OTHER_DROPPED_PKTS: + return lemming::dataplane::sai::IPSEC_SA_STAT_OTHER_DROPPED_PKTS; + + default: + return lemming::dataplane::sai::IPSEC_SA_STAT_UNSPECIFIED; + } +} +sai_ipsec_sa_stat_t convert_sai_ipsec_sa_stat_t_to_sai( + lemming::dataplane::sai::IpsecSaStat val) { + switch (val) { + case lemming::dataplane::sai::IPSEC_SA_STAT_PROTECTED_OCTETS: + return SAI_IPSEC_SA_STAT_PROTECTED_OCTETS; + + case lemming::dataplane::sai::IPSEC_SA_STAT_PROTECTED_PKTS: + return SAI_IPSEC_SA_STAT_PROTECTED_PKTS; + + case lemming::dataplane::sai::IPSEC_SA_STAT_GOOD_PKTS: + return SAI_IPSEC_SA_STAT_GOOD_PKTS; + + case lemming::dataplane::sai::IPSEC_SA_STAT_BAD_HEADER_PKTS_IN: + return SAI_IPSEC_SA_STAT_BAD_HEADER_PKTS_IN; + + case lemming::dataplane::sai::IPSEC_SA_STAT_REPLAYED_PKTS_IN: + return SAI_IPSEC_SA_STAT_REPLAYED_PKTS_IN; + + case lemming::dataplane::sai::IPSEC_SA_STAT_LATE_PKTS_IN: + return SAI_IPSEC_SA_STAT_LATE_PKTS_IN; + + case lemming::dataplane::sai::IPSEC_SA_STAT_BAD_TRAILER_PKTS_IN: + return SAI_IPSEC_SA_STAT_BAD_TRAILER_PKTS_IN; + + case lemming::dataplane::sai::IPSEC_SA_STAT_AUTH_FAIL_PKTS_IN: + return SAI_IPSEC_SA_STAT_AUTH_FAIL_PKTS_IN; + + case lemming::dataplane::sai::IPSEC_SA_STAT_DUMMY_DROPPED_PKTS_IN: + return SAI_IPSEC_SA_STAT_DUMMY_DROPPED_PKTS_IN; + + case lemming::dataplane::sai::IPSEC_SA_STAT_OTHER_DROPPED_PKTS: + return SAI_IPSEC_SA_STAT_OTHER_DROPPED_PKTS; + + default: + return SAI_IPSEC_SA_STAT_PROTECTED_OCTETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_ipsec_sa_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_ipsec_sa_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_ipsec_sa_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_ipsec_sa_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IsolationGroupAttr +convert_sai_isolation_group_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ISOLATION_GROUP_ATTR_TYPE: + return lemming::dataplane::sai::ISOLATION_GROUP_ATTR_TYPE; + + case SAI_ISOLATION_GROUP_ATTR_ISOLATION_MEMBER_LIST: + return lemming::dataplane::sai:: + ISOLATION_GROUP_ATTR_ISOLATION_MEMBER_LIST; + + default: + return lemming::dataplane::sai::ISOLATION_GROUP_ATTR_UNSPECIFIED; + } +} +sai_isolation_group_attr_t convert_sai_isolation_group_attr_t_to_sai( + lemming::dataplane::sai::IsolationGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::ISOLATION_GROUP_ATTR_TYPE: + return SAI_ISOLATION_GROUP_ATTR_TYPE; + + case lemming::dataplane::sai::ISOLATION_GROUP_ATTR_ISOLATION_MEMBER_LIST: + return SAI_ISOLATION_GROUP_ATTR_ISOLATION_MEMBER_LIST; + + default: + return SAI_ISOLATION_GROUP_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_isolation_group_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_isolation_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_isolation_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_isolation_group_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IsolationGroupMemberAttr +convert_sai_isolation_group_member_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ISOLATION_GROUP_MEMBER_ATTR_ISOLATION_GROUP_ID: + return lemming::dataplane::sai:: + ISOLATION_GROUP_MEMBER_ATTR_ISOLATION_GROUP_ID; + + case SAI_ISOLATION_GROUP_MEMBER_ATTR_ISOLATION_OBJECT: + return lemming::dataplane::sai:: + ISOLATION_GROUP_MEMBER_ATTR_ISOLATION_OBJECT; + + default: + return lemming::dataplane::sai::ISOLATION_GROUP_MEMBER_ATTR_UNSPECIFIED; + } +} +sai_isolation_group_member_attr_t +convert_sai_isolation_group_member_attr_t_to_sai( + lemming::dataplane::sai::IsolationGroupMemberAttr val) { + switch (val) { + case lemming::dataplane::sai:: + ISOLATION_GROUP_MEMBER_ATTR_ISOLATION_GROUP_ID: + return SAI_ISOLATION_GROUP_MEMBER_ATTR_ISOLATION_GROUP_ID; + + case lemming::dataplane::sai::ISOLATION_GROUP_MEMBER_ATTR_ISOLATION_OBJECT: + return SAI_ISOLATION_GROUP_MEMBER_ATTR_ISOLATION_OBJECT; + + default: + return SAI_ISOLATION_GROUP_MEMBER_ATTR_ISOLATION_GROUP_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_isolation_group_member_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_isolation_group_member_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_isolation_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_isolation_group_member_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::IsolationGroupType +convert_sai_isolation_group_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ISOLATION_GROUP_TYPE_PORT: + return lemming::dataplane::sai::ISOLATION_GROUP_TYPE_PORT; + + case SAI_ISOLATION_GROUP_TYPE_BRIDGE_PORT: + return lemming::dataplane::sai::ISOLATION_GROUP_TYPE_BRIDGE_PORT; + + default: + return lemming::dataplane::sai::ISOLATION_GROUP_TYPE_UNSPECIFIED; + } +} +sai_isolation_group_type_t convert_sai_isolation_group_type_t_to_sai( + lemming::dataplane::sai::IsolationGroupType val) { + switch (val) { + case lemming::dataplane::sai::ISOLATION_GROUP_TYPE_PORT: + return SAI_ISOLATION_GROUP_TYPE_PORT; + + case lemming::dataplane::sai::ISOLATION_GROUP_TYPE_BRIDGE_PORT: + return SAI_ISOLATION_GROUP_TYPE_BRIDGE_PORT; + + default: + return SAI_ISOLATION_GROUP_TYPE_PORT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_isolation_group_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_isolation_group_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_isolation_group_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_isolation_group_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::L2mcEntryAttr convert_sai_l2mc_entry_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_L2MC_ENTRY_ATTR_PACKET_ACTION: + return lemming::dataplane::sai::L2MC_ENTRY_ATTR_PACKET_ACTION; + + case SAI_L2MC_ENTRY_ATTR_OUTPUT_GROUP_ID: + return lemming::dataplane::sai::L2MC_ENTRY_ATTR_OUTPUT_GROUP_ID; + + default: + return lemming::dataplane::sai::L2MC_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_l2mc_entry_attr_t convert_sai_l2mc_entry_attr_t_to_sai( + lemming::dataplane::sai::L2mcEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::L2MC_ENTRY_ATTR_PACKET_ACTION: + return SAI_L2MC_ENTRY_ATTR_PACKET_ACTION; + + case lemming::dataplane::sai::L2MC_ENTRY_ATTR_OUTPUT_GROUP_ID: + return SAI_L2MC_ENTRY_ATTR_OUTPUT_GROUP_ID; + + default: + return SAI_L2MC_ENTRY_ATTR_PACKET_ACTION; + } +} + +google::protobuf::RepeatedField +convert_list_sai_l2mc_entry_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_l2mc_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_l2mc_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_l2mc_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::L2mcEntryType convert_sai_l2mc_entry_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_L2MC_ENTRY_TYPE_SG: + return lemming::dataplane::sai::L2MC_ENTRY_TYPE_SG; + + case SAI_L2MC_ENTRY_TYPE_XG: + return lemming::dataplane::sai::L2MC_ENTRY_TYPE_XG; + + default: + return lemming::dataplane::sai::L2MC_ENTRY_TYPE_UNSPECIFIED; + } +} +sai_l2mc_entry_type_t convert_sai_l2mc_entry_type_t_to_sai( + lemming::dataplane::sai::L2mcEntryType val) { + switch (val) { + case lemming::dataplane::sai::L2MC_ENTRY_TYPE_SG: + return SAI_L2MC_ENTRY_TYPE_SG; + + case lemming::dataplane::sai::L2MC_ENTRY_TYPE_XG: + return SAI_L2MC_ENTRY_TYPE_XG; + + default: + return SAI_L2MC_ENTRY_TYPE_SG; + } +} + +google::protobuf::RepeatedField +convert_list_sai_l2mc_entry_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_l2mc_entry_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_l2mc_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_l2mc_entry_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::L2mcGroupAttr convert_sai_l2mc_group_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_L2MC_GROUP_ATTR_L2MC_OUTPUT_COUNT: + return lemming::dataplane::sai::L2MC_GROUP_ATTR_L2MC_OUTPUT_COUNT; + + case SAI_L2MC_GROUP_ATTR_L2MC_MEMBER_LIST: + return lemming::dataplane::sai::L2MC_GROUP_ATTR_L2MC_MEMBER_LIST; + + default: + return lemming::dataplane::sai::L2MC_GROUP_ATTR_UNSPECIFIED; + } +} +sai_l2mc_group_attr_t convert_sai_l2mc_group_attr_t_to_sai( + lemming::dataplane::sai::L2mcGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::L2MC_GROUP_ATTR_L2MC_OUTPUT_COUNT: + return SAI_L2MC_GROUP_ATTR_L2MC_OUTPUT_COUNT; + + case lemming::dataplane::sai::L2MC_GROUP_ATTR_L2MC_MEMBER_LIST: + return SAI_L2MC_GROUP_ATTR_L2MC_MEMBER_LIST; + + default: + return SAI_L2MC_GROUP_ATTR_L2MC_OUTPUT_COUNT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_l2mc_group_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_l2mc_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_l2mc_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_l2mc_group_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::L2mcGroupMemberAttr +convert_sai_l2mc_group_member_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_L2MC_GROUP_MEMBER_ATTR_L2MC_GROUP_ID: + return lemming::dataplane::sai::L2MC_GROUP_MEMBER_ATTR_L2MC_GROUP_ID; + + case SAI_L2MC_GROUP_MEMBER_ATTR_L2MC_OUTPUT_ID: + return lemming::dataplane::sai::L2MC_GROUP_MEMBER_ATTR_L2MC_OUTPUT_ID; + + case SAI_L2MC_GROUP_MEMBER_ATTR_L2MC_ENDPOINT_IP: + return lemming::dataplane::sai::L2MC_GROUP_MEMBER_ATTR_L2MC_ENDPOINT_IP; + + default: + return lemming::dataplane::sai::L2MC_GROUP_MEMBER_ATTR_UNSPECIFIED; + } +} +sai_l2mc_group_member_attr_t convert_sai_l2mc_group_member_attr_t_to_sai( + lemming::dataplane::sai::L2mcGroupMemberAttr val) { + switch (val) { + case lemming::dataplane::sai::L2MC_GROUP_MEMBER_ATTR_L2MC_GROUP_ID: + return SAI_L2MC_GROUP_MEMBER_ATTR_L2MC_GROUP_ID; + + case lemming::dataplane::sai::L2MC_GROUP_MEMBER_ATTR_L2MC_OUTPUT_ID: + return SAI_L2MC_GROUP_MEMBER_ATTR_L2MC_OUTPUT_ID; + + case lemming::dataplane::sai::L2MC_GROUP_MEMBER_ATTR_L2MC_ENDPOINT_IP: + return SAI_L2MC_GROUP_MEMBER_ATTR_L2MC_ENDPOINT_IP; + + default: + return SAI_L2MC_GROUP_MEMBER_ATTR_L2MC_GROUP_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_l2mc_group_member_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_l2mc_group_member_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_l2mc_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_l2mc_group_member_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::LagAttr convert_sai_lag_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_LAG_ATTR_PORT_LIST: + return lemming::dataplane::sai::LAG_ATTR_PORT_LIST; + + case SAI_LAG_ATTR_INGRESS_ACL: + return lemming::dataplane::sai::LAG_ATTR_INGRESS_ACL; + + case SAI_LAG_ATTR_EGRESS_ACL: + return lemming::dataplane::sai::LAG_ATTR_EGRESS_ACL; + + case SAI_LAG_ATTR_PORT_VLAN_ID: + return lemming::dataplane::sai::LAG_ATTR_PORT_VLAN_ID; + + case SAI_LAG_ATTR_DEFAULT_VLAN_PRIORITY: + return lemming::dataplane::sai::LAG_ATTR_DEFAULT_VLAN_PRIORITY; + + case SAI_LAG_ATTR_DROP_UNTAGGED: + return lemming::dataplane::sai::LAG_ATTR_DROP_UNTAGGED; + + case SAI_LAG_ATTR_DROP_TAGGED: + return lemming::dataplane::sai::LAG_ATTR_DROP_TAGGED; + + case SAI_LAG_ATTR_TPID: + return lemming::dataplane::sai::LAG_ATTR_TPID; + + case SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID: + return lemming::dataplane::sai::LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID; + + case SAI_LAG_ATTR_LABEL: + return lemming::dataplane::sai::LAG_ATTR_LABEL; + + default: + return lemming::dataplane::sai::LAG_ATTR_UNSPECIFIED; + } +} +sai_lag_attr_t convert_sai_lag_attr_t_to_sai( + lemming::dataplane::sai::LagAttr val) { + switch (val) { + case lemming::dataplane::sai::LAG_ATTR_PORT_LIST: + return SAI_LAG_ATTR_PORT_LIST; + + case lemming::dataplane::sai::LAG_ATTR_INGRESS_ACL: + return SAI_LAG_ATTR_INGRESS_ACL; + + case lemming::dataplane::sai::LAG_ATTR_EGRESS_ACL: + return SAI_LAG_ATTR_EGRESS_ACL; + + case lemming::dataplane::sai::LAG_ATTR_PORT_VLAN_ID: + return SAI_LAG_ATTR_PORT_VLAN_ID; + + case lemming::dataplane::sai::LAG_ATTR_DEFAULT_VLAN_PRIORITY: + return SAI_LAG_ATTR_DEFAULT_VLAN_PRIORITY; + + case lemming::dataplane::sai::LAG_ATTR_DROP_UNTAGGED: + return SAI_LAG_ATTR_DROP_UNTAGGED; + + case lemming::dataplane::sai::LAG_ATTR_DROP_TAGGED: + return SAI_LAG_ATTR_DROP_TAGGED; + + case lemming::dataplane::sai::LAG_ATTR_TPID: + return SAI_LAG_ATTR_TPID; + + case lemming::dataplane::sai::LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID: + return SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID; + + case lemming::dataplane::sai::LAG_ATTR_LABEL: + return SAI_LAG_ATTR_LABEL; + + default: + return SAI_LAG_ATTR_PORT_LIST; + } +} + +google::protobuf::RepeatedField convert_list_sai_lag_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_lag_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_lag_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_lag_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::LagMemberAttr convert_sai_lag_member_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_LAG_MEMBER_ATTR_LAG_ID: + return lemming::dataplane::sai::LAG_MEMBER_ATTR_LAG_ID; + + case SAI_LAG_MEMBER_ATTR_PORT_ID: + return lemming::dataplane::sai::LAG_MEMBER_ATTR_PORT_ID; + + case SAI_LAG_MEMBER_ATTR_EGRESS_DISABLE: + return lemming::dataplane::sai::LAG_MEMBER_ATTR_EGRESS_DISABLE; + + case SAI_LAG_MEMBER_ATTR_INGRESS_DISABLE: + return lemming::dataplane::sai::LAG_MEMBER_ATTR_INGRESS_DISABLE; + + default: + return lemming::dataplane::sai::LAG_MEMBER_ATTR_UNSPECIFIED; + } +} +sai_lag_member_attr_t convert_sai_lag_member_attr_t_to_sai( + lemming::dataplane::sai::LagMemberAttr val) { + switch (val) { + case lemming::dataplane::sai::LAG_MEMBER_ATTR_LAG_ID: + return SAI_LAG_MEMBER_ATTR_LAG_ID; + + case lemming::dataplane::sai::LAG_MEMBER_ATTR_PORT_ID: + return SAI_LAG_MEMBER_ATTR_PORT_ID; + + case lemming::dataplane::sai::LAG_MEMBER_ATTR_EGRESS_DISABLE: + return SAI_LAG_MEMBER_ATTR_EGRESS_DISABLE; + + case lemming::dataplane::sai::LAG_MEMBER_ATTR_INGRESS_DISABLE: + return SAI_LAG_MEMBER_ATTR_INGRESS_DISABLE; + + default: + return SAI_LAG_MEMBER_ATTR_LAG_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_lag_member_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_lag_member_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_lag_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_lag_member_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::LogLevel convert_sai_log_level_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_LOG_LEVEL_DEBUG: + return lemming::dataplane::sai::LOG_LEVEL_DEBUG; + + case SAI_LOG_LEVEL_INFO: + return lemming::dataplane::sai::LOG_LEVEL_INFO; + + case SAI_LOG_LEVEL_NOTICE: + return lemming::dataplane::sai::LOG_LEVEL_NOTICE; + + case SAI_LOG_LEVEL_WARN: + return lemming::dataplane::sai::LOG_LEVEL_WARN; + + case SAI_LOG_LEVEL_ERROR: + return lemming::dataplane::sai::LOG_LEVEL_ERROR; + + case SAI_LOG_LEVEL_CRITICAL: + return lemming::dataplane::sai::LOG_LEVEL_CRITICAL; + + default: + return lemming::dataplane::sai::LOG_LEVEL_UNSPECIFIED; + } +} +sai_log_level_t convert_sai_log_level_t_to_sai( + lemming::dataplane::sai::LogLevel val) { + switch (val) { + case lemming::dataplane::sai::LOG_LEVEL_DEBUG: + return SAI_LOG_LEVEL_DEBUG; + + case lemming::dataplane::sai::LOG_LEVEL_INFO: + return SAI_LOG_LEVEL_INFO; + + case lemming::dataplane::sai::LOG_LEVEL_NOTICE: + return SAI_LOG_LEVEL_NOTICE; + + case lemming::dataplane::sai::LOG_LEVEL_WARN: + return SAI_LOG_LEVEL_WARN; + + case lemming::dataplane::sai::LOG_LEVEL_ERROR: + return SAI_LOG_LEVEL_ERROR; + + case lemming::dataplane::sai::LOG_LEVEL_CRITICAL: + return SAI_LOG_LEVEL_CRITICAL; + + default: + return SAI_LOG_LEVEL_DEBUG; + } +} + +google::protobuf::RepeatedField convert_list_sai_log_level_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_log_level_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_log_level_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_log_level_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecAttr convert_sai_macsec_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_ATTR_DIRECTION: + return lemming::dataplane::sai::MACSEC_ATTR_DIRECTION; + + case SAI_MACSEC_ATTR_SWITCHING_MODE_CUT_THROUGH_SUPPORTED: + return lemming::dataplane::sai:: + MACSEC_ATTR_SWITCHING_MODE_CUT_THROUGH_SUPPORTED; + + case SAI_MACSEC_ATTR_SWITCHING_MODE_STORE_AND_FORWARD_SUPPORTED: + return lemming::dataplane::sai:: + MACSEC_ATTR_SWITCHING_MODE_STORE_AND_FORWARD_SUPPORTED; + + case SAI_MACSEC_ATTR_STATS_MODE_READ_SUPPORTED: + return lemming::dataplane::sai::MACSEC_ATTR_STATS_MODE_READ_SUPPORTED; + + case SAI_MACSEC_ATTR_STATS_MODE_READ_CLEAR_SUPPORTED: + return lemming::dataplane::sai:: + MACSEC_ATTR_STATS_MODE_READ_CLEAR_SUPPORTED; + + case SAI_MACSEC_ATTR_SCI_IN_INGRESS_MACSEC_ACL: + return lemming::dataplane::sai::MACSEC_ATTR_SCI_IN_INGRESS_MACSEC_ACL; + + case SAI_MACSEC_ATTR_SUPPORTED_CIPHER_SUITE_LIST: + return lemming::dataplane::sai::MACSEC_ATTR_SUPPORTED_CIPHER_SUITE_LIST; + + case SAI_MACSEC_ATTR_PN_32BIT_SUPPORTED: + return lemming::dataplane::sai::MACSEC_ATTR_PN_32BIT_SUPPORTED; + + case SAI_MACSEC_ATTR_XPN_64BIT_SUPPORTED: + return lemming::dataplane::sai::MACSEC_ATTR_XPN_64BIT_SUPPORTED; + + case SAI_MACSEC_ATTR_GCM_AES128_SUPPORTED: + return lemming::dataplane::sai::MACSEC_ATTR_GCM_AES128_SUPPORTED; + + case SAI_MACSEC_ATTR_GCM_AES256_SUPPORTED: + return lemming::dataplane::sai::MACSEC_ATTR_GCM_AES256_SUPPORTED; + + case SAI_MACSEC_ATTR_SECTAG_OFFSETS_SUPPORTED: + return lemming::dataplane::sai::MACSEC_ATTR_SECTAG_OFFSETS_SUPPORTED; + + case SAI_MACSEC_ATTR_SYSTEM_SIDE_MTU: + return lemming::dataplane::sai::MACSEC_ATTR_SYSTEM_SIDE_MTU; + + case SAI_MACSEC_ATTR_WARM_BOOT_SUPPORTED: + return lemming::dataplane::sai::MACSEC_ATTR_WARM_BOOT_SUPPORTED; + + case SAI_MACSEC_ATTR_WARM_BOOT_ENABLE: + return lemming::dataplane::sai::MACSEC_ATTR_WARM_BOOT_ENABLE; + + case SAI_MACSEC_ATTR_CTAG_TPID: + return lemming::dataplane::sai::MACSEC_ATTR_CTAG_TPID; + + case SAI_MACSEC_ATTR_STAG_TPID: + return lemming::dataplane::sai::MACSEC_ATTR_STAG_TPID; + + case SAI_MACSEC_ATTR_MAX_VLAN_TAGS_PARSED: + return lemming::dataplane::sai::MACSEC_ATTR_MAX_VLAN_TAGS_PARSED; + + case SAI_MACSEC_ATTR_STATS_MODE: + return lemming::dataplane::sai::MACSEC_ATTR_STATS_MODE; + + case SAI_MACSEC_ATTR_PHYSICAL_BYPASS_ENABLE: + return lemming::dataplane::sai::MACSEC_ATTR_PHYSICAL_BYPASS_ENABLE; + + case SAI_MACSEC_ATTR_SUPPORTED_PORT_LIST: + return lemming::dataplane::sai::MACSEC_ATTR_SUPPORTED_PORT_LIST; + + case SAI_MACSEC_ATTR_AVAILABLE_MACSEC_FLOW: + return lemming::dataplane::sai::MACSEC_ATTR_AVAILABLE_MACSEC_FLOW; + + case SAI_MACSEC_ATTR_FLOW_LIST: + return lemming::dataplane::sai::MACSEC_ATTR_FLOW_LIST; + + case SAI_MACSEC_ATTR_AVAILABLE_MACSEC_SC: + return lemming::dataplane::sai::MACSEC_ATTR_AVAILABLE_MACSEC_SC; + + case SAI_MACSEC_ATTR_AVAILABLE_MACSEC_SA: + return lemming::dataplane::sai::MACSEC_ATTR_AVAILABLE_MACSEC_SA; + + case SAI_MACSEC_ATTR_MAX_SECURE_ASSOCIATIONS_PER_SC: + return lemming::dataplane::sai:: + MACSEC_ATTR_MAX_SECURE_ASSOCIATIONS_PER_SC; + + default: + return lemming::dataplane::sai::MACSEC_ATTR_UNSPECIFIED; + } +} +sai_macsec_attr_t convert_sai_macsec_attr_t_to_sai( + lemming::dataplane::sai::MacsecAttr val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_ATTR_DIRECTION: + return SAI_MACSEC_ATTR_DIRECTION; + + case lemming::dataplane::sai:: + MACSEC_ATTR_SWITCHING_MODE_CUT_THROUGH_SUPPORTED: + return SAI_MACSEC_ATTR_SWITCHING_MODE_CUT_THROUGH_SUPPORTED; + + case lemming::dataplane::sai:: + MACSEC_ATTR_SWITCHING_MODE_STORE_AND_FORWARD_SUPPORTED: + return SAI_MACSEC_ATTR_SWITCHING_MODE_STORE_AND_FORWARD_SUPPORTED; + + case lemming::dataplane::sai::MACSEC_ATTR_STATS_MODE_READ_SUPPORTED: + return SAI_MACSEC_ATTR_STATS_MODE_READ_SUPPORTED; + + case lemming::dataplane::sai::MACSEC_ATTR_STATS_MODE_READ_CLEAR_SUPPORTED: + return SAI_MACSEC_ATTR_STATS_MODE_READ_CLEAR_SUPPORTED; + + case lemming::dataplane::sai::MACSEC_ATTR_SCI_IN_INGRESS_MACSEC_ACL: + return SAI_MACSEC_ATTR_SCI_IN_INGRESS_MACSEC_ACL; + + case lemming::dataplane::sai::MACSEC_ATTR_SUPPORTED_CIPHER_SUITE_LIST: + return SAI_MACSEC_ATTR_SUPPORTED_CIPHER_SUITE_LIST; + + case lemming::dataplane::sai::MACSEC_ATTR_PN_32BIT_SUPPORTED: + return SAI_MACSEC_ATTR_PN_32BIT_SUPPORTED; + + case lemming::dataplane::sai::MACSEC_ATTR_XPN_64BIT_SUPPORTED: + return SAI_MACSEC_ATTR_XPN_64BIT_SUPPORTED; + + case lemming::dataplane::sai::MACSEC_ATTR_GCM_AES128_SUPPORTED: + return SAI_MACSEC_ATTR_GCM_AES128_SUPPORTED; + + case lemming::dataplane::sai::MACSEC_ATTR_GCM_AES256_SUPPORTED: + return SAI_MACSEC_ATTR_GCM_AES256_SUPPORTED; + + case lemming::dataplane::sai::MACSEC_ATTR_SECTAG_OFFSETS_SUPPORTED: + return SAI_MACSEC_ATTR_SECTAG_OFFSETS_SUPPORTED; + + case lemming::dataplane::sai::MACSEC_ATTR_SYSTEM_SIDE_MTU: + return SAI_MACSEC_ATTR_SYSTEM_SIDE_MTU; + + case lemming::dataplane::sai::MACSEC_ATTR_WARM_BOOT_SUPPORTED: + return SAI_MACSEC_ATTR_WARM_BOOT_SUPPORTED; + + case lemming::dataplane::sai::MACSEC_ATTR_WARM_BOOT_ENABLE: + return SAI_MACSEC_ATTR_WARM_BOOT_ENABLE; + + case lemming::dataplane::sai::MACSEC_ATTR_CTAG_TPID: + return SAI_MACSEC_ATTR_CTAG_TPID; + + case lemming::dataplane::sai::MACSEC_ATTR_STAG_TPID: + return SAI_MACSEC_ATTR_STAG_TPID; + + case lemming::dataplane::sai::MACSEC_ATTR_MAX_VLAN_TAGS_PARSED: + return SAI_MACSEC_ATTR_MAX_VLAN_TAGS_PARSED; + + case lemming::dataplane::sai::MACSEC_ATTR_STATS_MODE: + return SAI_MACSEC_ATTR_STATS_MODE; + + case lemming::dataplane::sai::MACSEC_ATTR_PHYSICAL_BYPASS_ENABLE: + return SAI_MACSEC_ATTR_PHYSICAL_BYPASS_ENABLE; + + case lemming::dataplane::sai::MACSEC_ATTR_SUPPORTED_PORT_LIST: + return SAI_MACSEC_ATTR_SUPPORTED_PORT_LIST; + + case lemming::dataplane::sai::MACSEC_ATTR_AVAILABLE_MACSEC_FLOW: + return SAI_MACSEC_ATTR_AVAILABLE_MACSEC_FLOW; + + case lemming::dataplane::sai::MACSEC_ATTR_FLOW_LIST: + return SAI_MACSEC_ATTR_FLOW_LIST; + + case lemming::dataplane::sai::MACSEC_ATTR_AVAILABLE_MACSEC_SC: + return SAI_MACSEC_ATTR_AVAILABLE_MACSEC_SC; + + case lemming::dataplane::sai::MACSEC_ATTR_AVAILABLE_MACSEC_SA: + return SAI_MACSEC_ATTR_AVAILABLE_MACSEC_SA; + + case lemming::dataplane::sai::MACSEC_ATTR_MAX_SECURE_ASSOCIATIONS_PER_SC: + return SAI_MACSEC_ATTR_MAX_SECURE_ASSOCIATIONS_PER_SC; + + default: + return SAI_MACSEC_ATTR_DIRECTION; + } +} + +google::protobuf::RepeatedField convert_list_sai_macsec_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecCipherSuite +convert_sai_macsec_cipher_suite_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_CIPHER_SUITE_GCM_AES_128: + return lemming::dataplane::sai::MACSEC_CIPHER_SUITE_GCM_AES_128; + + case SAI_MACSEC_CIPHER_SUITE_GCM_AES_256: + return lemming::dataplane::sai::MACSEC_CIPHER_SUITE_GCM_AES_256; + + case SAI_MACSEC_CIPHER_SUITE_GCM_AES_XPN_128: + return lemming::dataplane::sai::MACSEC_CIPHER_SUITE_GCM_AES_XPN_128; + + case SAI_MACSEC_CIPHER_SUITE_GCM_AES_XPN_256: + return lemming::dataplane::sai::MACSEC_CIPHER_SUITE_GCM_AES_XPN_256; + + default: + return lemming::dataplane::sai::MACSEC_CIPHER_SUITE_UNSPECIFIED; + } +} +sai_macsec_cipher_suite_t convert_sai_macsec_cipher_suite_t_to_sai( + lemming::dataplane::sai::MacsecCipherSuite val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_CIPHER_SUITE_GCM_AES_128: + return SAI_MACSEC_CIPHER_SUITE_GCM_AES_128; + + case lemming::dataplane::sai::MACSEC_CIPHER_SUITE_GCM_AES_256: + return SAI_MACSEC_CIPHER_SUITE_GCM_AES_256; + + case lemming::dataplane::sai::MACSEC_CIPHER_SUITE_GCM_AES_XPN_128: + return SAI_MACSEC_CIPHER_SUITE_GCM_AES_XPN_128; + + case lemming::dataplane::sai::MACSEC_CIPHER_SUITE_GCM_AES_XPN_256: + return SAI_MACSEC_CIPHER_SUITE_GCM_AES_XPN_256; + + default: + return SAI_MACSEC_CIPHER_SUITE_GCM_AES_128; + } +} + +google::protobuf::RepeatedField +convert_list_sai_macsec_cipher_suite_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_cipher_suite_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_cipher_suite_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_cipher_suite_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecDirection +convert_sai_macsec_direction_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_DIRECTION_EGRESS: + return lemming::dataplane::sai::MACSEC_DIRECTION_EGRESS; + + case SAI_MACSEC_DIRECTION_INGRESS: + return lemming::dataplane::sai::MACSEC_DIRECTION_INGRESS; + + default: + return lemming::dataplane::sai::MACSEC_DIRECTION_UNSPECIFIED; + } +} +sai_macsec_direction_t convert_sai_macsec_direction_t_to_sai( + lemming::dataplane::sai::MacsecDirection val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_DIRECTION_EGRESS: + return SAI_MACSEC_DIRECTION_EGRESS; + + case lemming::dataplane::sai::MACSEC_DIRECTION_INGRESS: + return SAI_MACSEC_DIRECTION_INGRESS; + + default: + return SAI_MACSEC_DIRECTION_EGRESS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_macsec_direction_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_direction_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_direction_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_direction_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecFlowAttr convert_sai_macsec_flow_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_FLOW_ATTR_MACSEC_DIRECTION: + return lemming::dataplane::sai::MACSEC_FLOW_ATTR_MACSEC_DIRECTION; + + case SAI_MACSEC_FLOW_ATTR_ACL_ENTRY_LIST: + return lemming::dataplane::sai::MACSEC_FLOW_ATTR_ACL_ENTRY_LIST; + + case SAI_MACSEC_FLOW_ATTR_SC_LIST: + return lemming::dataplane::sai::MACSEC_FLOW_ATTR_SC_LIST; + + default: + return lemming::dataplane::sai::MACSEC_FLOW_ATTR_UNSPECIFIED; + } +} +sai_macsec_flow_attr_t convert_sai_macsec_flow_attr_t_to_sai( + lemming::dataplane::sai::MacsecFlowAttr val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_FLOW_ATTR_MACSEC_DIRECTION: + return SAI_MACSEC_FLOW_ATTR_MACSEC_DIRECTION; + + case lemming::dataplane::sai::MACSEC_FLOW_ATTR_ACL_ENTRY_LIST: + return SAI_MACSEC_FLOW_ATTR_ACL_ENTRY_LIST; + + case lemming::dataplane::sai::MACSEC_FLOW_ATTR_SC_LIST: + return SAI_MACSEC_FLOW_ATTR_SC_LIST; + + default: + return SAI_MACSEC_FLOW_ATTR_MACSEC_DIRECTION; + } +} + +google::protobuf::RepeatedField +convert_list_sai_macsec_flow_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_flow_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_flow_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_flow_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecFlowStat convert_sai_macsec_flow_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_FLOW_STAT_OTHER_ERR: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_OTHER_ERR; + + case SAI_MACSEC_FLOW_STAT_OCTETS_UNCONTROLLED: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_OCTETS_UNCONTROLLED; + + case SAI_MACSEC_FLOW_STAT_OCTETS_CONTROLLED: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_OCTETS_CONTROLLED; + + case SAI_MACSEC_FLOW_STAT_OUT_OCTETS_COMMON: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_OUT_OCTETS_COMMON; + + case SAI_MACSEC_FLOW_STAT_UCAST_PKTS_UNCONTROLLED: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_UCAST_PKTS_UNCONTROLLED; + + case SAI_MACSEC_FLOW_STAT_UCAST_PKTS_CONTROLLED: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_UCAST_PKTS_CONTROLLED; + + case SAI_MACSEC_FLOW_STAT_MULTICAST_PKTS_UNCONTROLLED: + return lemming::dataplane::sai:: + MACSEC_FLOW_STAT_MULTICAST_PKTS_UNCONTROLLED; + + case SAI_MACSEC_FLOW_STAT_MULTICAST_PKTS_CONTROLLED: + return lemming::dataplane::sai:: + MACSEC_FLOW_STAT_MULTICAST_PKTS_CONTROLLED; + + case SAI_MACSEC_FLOW_STAT_BROADCAST_PKTS_UNCONTROLLED: + return lemming::dataplane::sai:: + MACSEC_FLOW_STAT_BROADCAST_PKTS_UNCONTROLLED; + + case SAI_MACSEC_FLOW_STAT_BROADCAST_PKTS_CONTROLLED: + return lemming::dataplane::sai:: + MACSEC_FLOW_STAT_BROADCAST_PKTS_CONTROLLED; + + case SAI_MACSEC_FLOW_STAT_CONTROL_PKTS: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_CONTROL_PKTS; + + case SAI_MACSEC_FLOW_STAT_PKTS_UNTAGGED: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_PKTS_UNTAGGED; + + case SAI_MACSEC_FLOW_STAT_IN_TAGGED_CONTROL_PKTS: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_TAGGED_CONTROL_PKTS; + + case SAI_MACSEC_FLOW_STAT_OUT_PKTS_TOO_LONG: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_OUT_PKTS_TOO_LONG; + + case SAI_MACSEC_FLOW_STAT_IN_PKTS_NO_TAG: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_NO_TAG; + + case SAI_MACSEC_FLOW_STAT_IN_PKTS_BAD_TAG: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_BAD_TAG; + + case SAI_MACSEC_FLOW_STAT_IN_PKTS_NO_SCI: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_NO_SCI; + + case SAI_MACSEC_FLOW_STAT_IN_PKTS_UNKNOWN_SCI: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_UNKNOWN_SCI; + + case SAI_MACSEC_FLOW_STAT_IN_PKTS_OVERRUN: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_OVERRUN; + + default: + return lemming::dataplane::sai::MACSEC_FLOW_STAT_UNSPECIFIED; + } +} +sai_macsec_flow_stat_t convert_sai_macsec_flow_stat_t_to_sai( + lemming::dataplane::sai::MacsecFlowStat val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_FLOW_STAT_OTHER_ERR: + return SAI_MACSEC_FLOW_STAT_OTHER_ERR; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_OCTETS_UNCONTROLLED: + return SAI_MACSEC_FLOW_STAT_OCTETS_UNCONTROLLED; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_OCTETS_CONTROLLED: + return SAI_MACSEC_FLOW_STAT_OCTETS_CONTROLLED; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_OUT_OCTETS_COMMON: + return SAI_MACSEC_FLOW_STAT_OUT_OCTETS_COMMON; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_UCAST_PKTS_UNCONTROLLED: + return SAI_MACSEC_FLOW_STAT_UCAST_PKTS_UNCONTROLLED; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_UCAST_PKTS_CONTROLLED: + return SAI_MACSEC_FLOW_STAT_UCAST_PKTS_CONTROLLED; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_MULTICAST_PKTS_UNCONTROLLED: + return SAI_MACSEC_FLOW_STAT_MULTICAST_PKTS_UNCONTROLLED; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_MULTICAST_PKTS_CONTROLLED: + return SAI_MACSEC_FLOW_STAT_MULTICAST_PKTS_CONTROLLED; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_BROADCAST_PKTS_UNCONTROLLED: + return SAI_MACSEC_FLOW_STAT_BROADCAST_PKTS_UNCONTROLLED; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_BROADCAST_PKTS_CONTROLLED: + return SAI_MACSEC_FLOW_STAT_BROADCAST_PKTS_CONTROLLED; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_CONTROL_PKTS: + return SAI_MACSEC_FLOW_STAT_CONTROL_PKTS; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_PKTS_UNTAGGED: + return SAI_MACSEC_FLOW_STAT_PKTS_UNTAGGED; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_TAGGED_CONTROL_PKTS: + return SAI_MACSEC_FLOW_STAT_IN_TAGGED_CONTROL_PKTS; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_OUT_PKTS_TOO_LONG: + return SAI_MACSEC_FLOW_STAT_OUT_PKTS_TOO_LONG; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_NO_TAG: + return SAI_MACSEC_FLOW_STAT_IN_PKTS_NO_TAG; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_BAD_TAG: + return SAI_MACSEC_FLOW_STAT_IN_PKTS_BAD_TAG; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_NO_SCI: + return SAI_MACSEC_FLOW_STAT_IN_PKTS_NO_SCI; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_UNKNOWN_SCI: + return SAI_MACSEC_FLOW_STAT_IN_PKTS_UNKNOWN_SCI; + + case lemming::dataplane::sai::MACSEC_FLOW_STAT_IN_PKTS_OVERRUN: + return SAI_MACSEC_FLOW_STAT_IN_PKTS_OVERRUN; + + default: + return SAI_MACSEC_FLOW_STAT_OTHER_ERR; + } +} + +google::protobuf::RepeatedField +convert_list_sai_macsec_flow_stat_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_flow_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_flow_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_flow_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecMaxSecureAssociationsPerSc +convert_sai_macsec_max_secure_associations_per_sc_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_TWO: + return lemming::dataplane::sai::MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_TWO; + + case SAI_MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_FOUR: + return lemming::dataplane::sai:: + MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_FOUR; + + default: + return lemming::dataplane::sai:: + MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_UNSPECIFIED; + } +} +sai_macsec_max_secure_associations_per_sc_t +convert_sai_macsec_max_secure_associations_per_sc_t_to_sai( + lemming::dataplane::sai::MacsecMaxSecureAssociationsPerSc val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_TWO: + return SAI_MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_TWO; + + case lemming::dataplane::sai::MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_FOUR: + return SAI_MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_FOUR; + + default: + return SAI_MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_TWO; + } +} + +google::protobuf::RepeatedField +convert_list_sai_macsec_max_secure_associations_per_sc_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_max_secure_associations_per_sc_t_to_proto( + list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_max_secure_associations_per_sc_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_max_secure_associations_per_sc_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecPortAttr convert_sai_macsec_port_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_PORT_ATTR_MACSEC_DIRECTION: + return lemming::dataplane::sai::MACSEC_PORT_ATTR_MACSEC_DIRECTION; + + case SAI_MACSEC_PORT_ATTR_PORT_ID: + return lemming::dataplane::sai::MACSEC_PORT_ATTR_PORT_ID; + + case SAI_MACSEC_PORT_ATTR_CTAG_ENABLE: + return lemming::dataplane::sai::MACSEC_PORT_ATTR_CTAG_ENABLE; + + case SAI_MACSEC_PORT_ATTR_STAG_ENABLE: + return lemming::dataplane::sai::MACSEC_PORT_ATTR_STAG_ENABLE; + + case SAI_MACSEC_PORT_ATTR_SWITCH_SWITCHING_MODE: + return lemming::dataplane::sai::MACSEC_PORT_ATTR_SWITCH_SWITCHING_MODE; + + default: + return lemming::dataplane::sai::MACSEC_PORT_ATTR_UNSPECIFIED; + } +} +sai_macsec_port_attr_t convert_sai_macsec_port_attr_t_to_sai( + lemming::dataplane::sai::MacsecPortAttr val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_PORT_ATTR_MACSEC_DIRECTION: + return SAI_MACSEC_PORT_ATTR_MACSEC_DIRECTION; + + case lemming::dataplane::sai::MACSEC_PORT_ATTR_PORT_ID: + return SAI_MACSEC_PORT_ATTR_PORT_ID; + + case lemming::dataplane::sai::MACSEC_PORT_ATTR_CTAG_ENABLE: + return SAI_MACSEC_PORT_ATTR_CTAG_ENABLE; + + case lemming::dataplane::sai::MACSEC_PORT_ATTR_STAG_ENABLE: + return SAI_MACSEC_PORT_ATTR_STAG_ENABLE; + + case lemming::dataplane::sai::MACSEC_PORT_ATTR_SWITCH_SWITCHING_MODE: + return SAI_MACSEC_PORT_ATTR_SWITCH_SWITCHING_MODE; + + default: + return SAI_MACSEC_PORT_ATTR_MACSEC_DIRECTION; + } +} + +google::protobuf::RepeatedField +convert_list_sai_macsec_port_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_port_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_port_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecPortStat convert_sai_macsec_port_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_PORT_STAT_PRE_MACSEC_DROP_PKTS: + return lemming::dataplane::sai::MACSEC_PORT_STAT_PRE_MACSEC_DROP_PKTS; + + case SAI_MACSEC_PORT_STAT_CONTROL_PKTS: + return lemming::dataplane::sai::MACSEC_PORT_STAT_CONTROL_PKTS; + + case SAI_MACSEC_PORT_STAT_DATA_PKTS: + return lemming::dataplane::sai::MACSEC_PORT_STAT_DATA_PKTS; + + default: + return lemming::dataplane::sai::MACSEC_PORT_STAT_UNSPECIFIED; + } +} +sai_macsec_port_stat_t convert_sai_macsec_port_stat_t_to_sai( + lemming::dataplane::sai::MacsecPortStat val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_PORT_STAT_PRE_MACSEC_DROP_PKTS: + return SAI_MACSEC_PORT_STAT_PRE_MACSEC_DROP_PKTS; + + case lemming::dataplane::sai::MACSEC_PORT_STAT_CONTROL_PKTS: + return SAI_MACSEC_PORT_STAT_CONTROL_PKTS; + + case lemming::dataplane::sai::MACSEC_PORT_STAT_DATA_PKTS: + return SAI_MACSEC_PORT_STAT_DATA_PKTS; + + default: + return SAI_MACSEC_PORT_STAT_PRE_MACSEC_DROP_PKTS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_macsec_port_stat_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_port_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_port_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_port_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecSaAttr convert_sai_macsec_sa_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_SA_ATTR_MACSEC_DIRECTION: + return lemming::dataplane::sai::MACSEC_SA_ATTR_MACSEC_DIRECTION; + + case SAI_MACSEC_SA_ATTR_SC_ID: + return lemming::dataplane::sai::MACSEC_SA_ATTR_SC_ID; + + case SAI_MACSEC_SA_ATTR_AN: + return lemming::dataplane::sai::MACSEC_SA_ATTR_AN; + + case SAI_MACSEC_SA_ATTR_SAK: + return lemming::dataplane::sai::MACSEC_SA_ATTR_SAK; + + case SAI_MACSEC_SA_ATTR_SALT: + return lemming::dataplane::sai::MACSEC_SA_ATTR_SALT; + + case SAI_MACSEC_SA_ATTR_AUTH_KEY: + return lemming::dataplane::sai::MACSEC_SA_ATTR_AUTH_KEY; + + case SAI_MACSEC_SA_ATTR_CONFIGURED_EGRESS_XPN: + return lemming::dataplane::sai::MACSEC_SA_ATTR_CONFIGURED_EGRESS_XPN; + + case SAI_MACSEC_SA_ATTR_CURRENT_XPN: + return lemming::dataplane::sai::MACSEC_SA_ATTR_CURRENT_XPN; + + case SAI_MACSEC_SA_ATTR_MINIMUM_INGRESS_XPN: + return lemming::dataplane::sai::MACSEC_SA_ATTR_MINIMUM_INGRESS_XPN; + + case SAI_MACSEC_SA_ATTR_MACSEC_SSCI: + return lemming::dataplane::sai::MACSEC_SA_ATTR_MACSEC_SSCI; + + default: + return lemming::dataplane::sai::MACSEC_SA_ATTR_UNSPECIFIED; + } +} +sai_macsec_sa_attr_t convert_sai_macsec_sa_attr_t_to_sai( + lemming::dataplane::sai::MacsecSaAttr val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_SA_ATTR_MACSEC_DIRECTION: + return SAI_MACSEC_SA_ATTR_MACSEC_DIRECTION; + + case lemming::dataplane::sai::MACSEC_SA_ATTR_SC_ID: + return SAI_MACSEC_SA_ATTR_SC_ID; + + case lemming::dataplane::sai::MACSEC_SA_ATTR_AN: + return SAI_MACSEC_SA_ATTR_AN; + + case lemming::dataplane::sai::MACSEC_SA_ATTR_SAK: + return SAI_MACSEC_SA_ATTR_SAK; + + case lemming::dataplane::sai::MACSEC_SA_ATTR_SALT: + return SAI_MACSEC_SA_ATTR_SALT; + + case lemming::dataplane::sai::MACSEC_SA_ATTR_AUTH_KEY: + return SAI_MACSEC_SA_ATTR_AUTH_KEY; + + case lemming::dataplane::sai::MACSEC_SA_ATTR_CONFIGURED_EGRESS_XPN: + return SAI_MACSEC_SA_ATTR_CONFIGURED_EGRESS_XPN; + + case lemming::dataplane::sai::MACSEC_SA_ATTR_CURRENT_XPN: + return SAI_MACSEC_SA_ATTR_CURRENT_XPN; + + case lemming::dataplane::sai::MACSEC_SA_ATTR_MINIMUM_INGRESS_XPN: + return SAI_MACSEC_SA_ATTR_MINIMUM_INGRESS_XPN; + + case lemming::dataplane::sai::MACSEC_SA_ATTR_MACSEC_SSCI: + return SAI_MACSEC_SA_ATTR_MACSEC_SSCI; + + default: + return SAI_MACSEC_SA_ATTR_MACSEC_DIRECTION; + } +} + +google::protobuf::RepeatedField convert_list_sai_macsec_sa_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_sa_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_sa_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_sa_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecSaStat convert_sai_macsec_sa_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED: + return lemming::dataplane::sai::MACSEC_SA_STAT_OCTETS_ENCRYPTED; + + case SAI_MACSEC_SA_STAT_OCTETS_PROTECTED: + return lemming::dataplane::sai::MACSEC_SA_STAT_OCTETS_PROTECTED; + + case SAI_MACSEC_SA_STAT_OUT_PKTS_ENCRYPTED: + return lemming::dataplane::sai::MACSEC_SA_STAT_OUT_PKTS_ENCRYPTED; + + case SAI_MACSEC_SA_STAT_OUT_PKTS_PROTECTED: + return lemming::dataplane::sai::MACSEC_SA_STAT_OUT_PKTS_PROTECTED; + + case SAI_MACSEC_SA_STAT_IN_PKTS_UNCHECKED: + return lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_UNCHECKED; + + case SAI_MACSEC_SA_STAT_IN_PKTS_DELAYED: + return lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_DELAYED; + + case SAI_MACSEC_SA_STAT_IN_PKTS_LATE: + return lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_LATE; + + case SAI_MACSEC_SA_STAT_IN_PKTS_INVALID: + return lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_INVALID; + + case SAI_MACSEC_SA_STAT_IN_PKTS_NOT_VALID: + return lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_NOT_VALID; + + case SAI_MACSEC_SA_STAT_IN_PKTS_NOT_USING_SA: + return lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_NOT_USING_SA; + + case SAI_MACSEC_SA_STAT_IN_PKTS_UNUSED_SA: + return lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_UNUSED_SA; + + case SAI_MACSEC_SA_STAT_IN_PKTS_OK: + return lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_OK; + + default: + return lemming::dataplane::sai::MACSEC_SA_STAT_UNSPECIFIED; + } +} +sai_macsec_sa_stat_t convert_sai_macsec_sa_stat_t_to_sai( + lemming::dataplane::sai::MacsecSaStat val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_SA_STAT_OCTETS_ENCRYPTED: + return SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED; + + case lemming::dataplane::sai::MACSEC_SA_STAT_OCTETS_PROTECTED: + return SAI_MACSEC_SA_STAT_OCTETS_PROTECTED; + + case lemming::dataplane::sai::MACSEC_SA_STAT_OUT_PKTS_ENCRYPTED: + return SAI_MACSEC_SA_STAT_OUT_PKTS_ENCRYPTED; + + case lemming::dataplane::sai::MACSEC_SA_STAT_OUT_PKTS_PROTECTED: + return SAI_MACSEC_SA_STAT_OUT_PKTS_PROTECTED; + + case lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_UNCHECKED: + return SAI_MACSEC_SA_STAT_IN_PKTS_UNCHECKED; + + case lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_DELAYED: + return SAI_MACSEC_SA_STAT_IN_PKTS_DELAYED; + + case lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_LATE: + return SAI_MACSEC_SA_STAT_IN_PKTS_LATE; + + case lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_INVALID: + return SAI_MACSEC_SA_STAT_IN_PKTS_INVALID; + + case lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_NOT_VALID: + return SAI_MACSEC_SA_STAT_IN_PKTS_NOT_VALID; + + case lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_NOT_USING_SA: + return SAI_MACSEC_SA_STAT_IN_PKTS_NOT_USING_SA; + + case lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_UNUSED_SA: + return SAI_MACSEC_SA_STAT_IN_PKTS_UNUSED_SA; + + case lemming::dataplane::sai::MACSEC_SA_STAT_IN_PKTS_OK: + return SAI_MACSEC_SA_STAT_IN_PKTS_OK; + + default: + return SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED; + } +} + +google::protobuf::RepeatedField convert_list_sai_macsec_sa_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_sa_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_sa_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_sa_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecScAttr convert_sai_macsec_sc_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_SC_ATTR_MACSEC_DIRECTION: + return lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_DIRECTION; + + case SAI_MACSEC_SC_ATTR_FLOW_ID: + return lemming::dataplane::sai::MACSEC_SC_ATTR_FLOW_ID; + + case SAI_MACSEC_SC_ATTR_MACSEC_SCI: + return lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_SCI; + + case SAI_MACSEC_SC_ATTR_MACSEC_EXPLICIT_SCI_ENABLE: + return lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_EXPLICIT_SCI_ENABLE; + + case SAI_MACSEC_SC_ATTR_MACSEC_SECTAG_OFFSET: + return lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_SECTAG_OFFSET; + + case SAI_MACSEC_SC_ATTR_ACTIVE_EGRESS_SA_ID: + return lemming::dataplane::sai::MACSEC_SC_ATTR_ACTIVE_EGRESS_SA_ID; + + case SAI_MACSEC_SC_ATTR_MACSEC_REPLAY_PROTECTION_ENABLE: + return lemming::dataplane::sai:: + MACSEC_SC_ATTR_MACSEC_REPLAY_PROTECTION_ENABLE; + + case SAI_MACSEC_SC_ATTR_MACSEC_REPLAY_PROTECTION_WINDOW: + return lemming::dataplane::sai:: + MACSEC_SC_ATTR_MACSEC_REPLAY_PROTECTION_WINDOW; + + case SAI_MACSEC_SC_ATTR_SA_LIST: + return lemming::dataplane::sai::MACSEC_SC_ATTR_SA_LIST; + + case SAI_MACSEC_SC_ATTR_MACSEC_CIPHER_SUITE: + return lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_CIPHER_SUITE; + + case SAI_MACSEC_SC_ATTR_ENCRYPTION_ENABLE: + return lemming::dataplane::sai::MACSEC_SC_ATTR_ENCRYPTION_ENABLE; + + default: + return lemming::dataplane::sai::MACSEC_SC_ATTR_UNSPECIFIED; + } +} +sai_macsec_sc_attr_t convert_sai_macsec_sc_attr_t_to_sai( + lemming::dataplane::sai::MacsecScAttr val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_DIRECTION: + return SAI_MACSEC_SC_ATTR_MACSEC_DIRECTION; + + case lemming::dataplane::sai::MACSEC_SC_ATTR_FLOW_ID: + return SAI_MACSEC_SC_ATTR_FLOW_ID; + + case lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_SCI: + return SAI_MACSEC_SC_ATTR_MACSEC_SCI; + + case lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_EXPLICIT_SCI_ENABLE: + return SAI_MACSEC_SC_ATTR_MACSEC_EXPLICIT_SCI_ENABLE; + + case lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_SECTAG_OFFSET: + return SAI_MACSEC_SC_ATTR_MACSEC_SECTAG_OFFSET; + + case lemming::dataplane::sai::MACSEC_SC_ATTR_ACTIVE_EGRESS_SA_ID: + return SAI_MACSEC_SC_ATTR_ACTIVE_EGRESS_SA_ID; + + case lemming::dataplane::sai:: + MACSEC_SC_ATTR_MACSEC_REPLAY_PROTECTION_ENABLE: + return SAI_MACSEC_SC_ATTR_MACSEC_REPLAY_PROTECTION_ENABLE; + + case lemming::dataplane::sai:: + MACSEC_SC_ATTR_MACSEC_REPLAY_PROTECTION_WINDOW: + return SAI_MACSEC_SC_ATTR_MACSEC_REPLAY_PROTECTION_WINDOW; + + case lemming::dataplane::sai::MACSEC_SC_ATTR_SA_LIST: + return SAI_MACSEC_SC_ATTR_SA_LIST; + + case lemming::dataplane::sai::MACSEC_SC_ATTR_MACSEC_CIPHER_SUITE: + return SAI_MACSEC_SC_ATTR_MACSEC_CIPHER_SUITE; + + case lemming::dataplane::sai::MACSEC_SC_ATTR_ENCRYPTION_ENABLE: + return SAI_MACSEC_SC_ATTR_ENCRYPTION_ENABLE; + + default: + return SAI_MACSEC_SC_ATTR_MACSEC_DIRECTION; + } +} + +google::protobuf::RepeatedField convert_list_sai_macsec_sc_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_sc_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_sc_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_sc_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MacsecScStat convert_sai_macsec_sc_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MACSEC_SC_STAT_SA_NOT_IN_USE: + return lemming::dataplane::sai::MACSEC_SC_STAT_SA_NOT_IN_USE; + + default: + return lemming::dataplane::sai::MACSEC_SC_STAT_UNSPECIFIED; + } +} +sai_macsec_sc_stat_t convert_sai_macsec_sc_stat_t_to_sai( + lemming::dataplane::sai::MacsecScStat val) { + switch (val) { + case lemming::dataplane::sai::MACSEC_SC_STAT_SA_NOT_IN_USE: + return SAI_MACSEC_SC_STAT_SA_NOT_IN_USE; + + default: + return SAI_MACSEC_SC_STAT_SA_NOT_IN_USE; + } +} + +google::protobuf::RepeatedField convert_list_sai_macsec_sc_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_macsec_sc_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_macsec_sc_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_macsec_sc_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::McastFdbEntryAttr +convert_sai_mcast_fdb_entry_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_MCAST_FDB_ENTRY_ATTR_GROUP_ID: + return lemming::dataplane::sai::MCAST_FDB_ENTRY_ATTR_GROUP_ID; + + case SAI_MCAST_FDB_ENTRY_ATTR_PACKET_ACTION: + return lemming::dataplane::sai::MCAST_FDB_ENTRY_ATTR_PACKET_ACTION; + + case SAI_MCAST_FDB_ENTRY_ATTR_META_DATA: + return lemming::dataplane::sai::MCAST_FDB_ENTRY_ATTR_META_DATA; + + default: + return lemming::dataplane::sai::MCAST_FDB_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_mcast_fdb_entry_attr_t convert_sai_mcast_fdb_entry_attr_t_to_sai( + lemming::dataplane::sai::McastFdbEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::MCAST_FDB_ENTRY_ATTR_GROUP_ID: + return SAI_MCAST_FDB_ENTRY_ATTR_GROUP_ID; + + case lemming::dataplane::sai::MCAST_FDB_ENTRY_ATTR_PACKET_ACTION: + return SAI_MCAST_FDB_ENTRY_ATTR_PACKET_ACTION; + + case lemming::dataplane::sai::MCAST_FDB_ENTRY_ATTR_META_DATA: + return SAI_MCAST_FDB_ENTRY_ATTR_META_DATA; + + default: + return SAI_MCAST_FDB_ENTRY_ATTR_GROUP_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_mcast_fdb_entry_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_mcast_fdb_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_mcast_fdb_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_mcast_fdb_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MeterType convert_sai_meter_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_METER_TYPE_PACKETS: + return lemming::dataplane::sai::METER_TYPE_PACKETS; + + case SAI_METER_TYPE_BYTES: + return lemming::dataplane::sai::METER_TYPE_BYTES; + + case SAI_METER_TYPE_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::METER_TYPE_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::METER_TYPE_UNSPECIFIED; + } +} +sai_meter_type_t convert_sai_meter_type_t_to_sai( + lemming::dataplane::sai::MeterType val) { + switch (val) { + case lemming::dataplane::sai::METER_TYPE_PACKETS: + return SAI_METER_TYPE_PACKETS; + + case lemming::dataplane::sai::METER_TYPE_BYTES: + return SAI_METER_TYPE_BYTES; + + case lemming::dataplane::sai::METER_TYPE_CUSTOM_RANGE_BASE: + return SAI_METER_TYPE_CUSTOM_RANGE_BASE; + + default: + return SAI_METER_TYPE_PACKETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_meter_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_meter_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_meter_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_meter_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MirrorSessionAttr +convert_sai_mirror_session_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_MIRROR_SESSION_ATTR_TYPE: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_TYPE; + + case SAI_MIRROR_SESSION_ATTR_MONITOR_PORT: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_MONITOR_PORT; + + case SAI_MIRROR_SESSION_ATTR_TRUNCATE_SIZE: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_TRUNCATE_SIZE; + + case SAI_MIRROR_SESSION_ATTR_SAMPLE_RATE: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_SAMPLE_RATE; + + case SAI_MIRROR_SESSION_ATTR_CONGESTION_MODE: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_CONGESTION_MODE; + + case SAI_MIRROR_SESSION_ATTR_TC: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_TC; + + case SAI_MIRROR_SESSION_ATTR_VLAN_TPID: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_TPID; + + case SAI_MIRROR_SESSION_ATTR_VLAN_ID: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_ID; + + case SAI_MIRROR_SESSION_ATTR_VLAN_PRI: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_PRI; + + case SAI_MIRROR_SESSION_ATTR_VLAN_CFI: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_CFI; + + case SAI_MIRROR_SESSION_ATTR_VLAN_HEADER_VALID: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_HEADER_VALID; + + case SAI_MIRROR_SESSION_ATTR_ERSPAN_ENCAPSULATION_TYPE: + return lemming::dataplane::sai:: + MIRROR_SESSION_ATTR_ERSPAN_ENCAPSULATION_TYPE; + + case SAI_MIRROR_SESSION_ATTR_IPHDR_VERSION: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_IPHDR_VERSION; + + case SAI_MIRROR_SESSION_ATTR_TOS: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_TOS; + + case SAI_MIRROR_SESSION_ATTR_TTL: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_TTL; + + case SAI_MIRROR_SESSION_ATTR_SRC_IP_ADDRESS: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_SRC_IP_ADDRESS; + + case SAI_MIRROR_SESSION_ATTR_DST_IP_ADDRESS: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_DST_IP_ADDRESS; + + case SAI_MIRROR_SESSION_ATTR_SRC_MAC_ADDRESS: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_SRC_MAC_ADDRESS; + + case SAI_MIRROR_SESSION_ATTR_DST_MAC_ADDRESS: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_DST_MAC_ADDRESS; + + case SAI_MIRROR_SESSION_ATTR_GRE_PROTOCOL_TYPE: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_GRE_PROTOCOL_TYPE; + + case SAI_MIRROR_SESSION_ATTR_MONITOR_PORTLIST_VALID: + return lemming::dataplane::sai:: + MIRROR_SESSION_ATTR_MONITOR_PORTLIST_VALID; + + case SAI_MIRROR_SESSION_ATTR_MONITOR_PORTLIST: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_MONITOR_PORTLIST; + + case SAI_MIRROR_SESSION_ATTR_POLICER: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_POLICER; + + case SAI_MIRROR_SESSION_ATTR_UDP_SRC_PORT: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_UDP_SRC_PORT; + + case SAI_MIRROR_SESSION_ATTR_UDP_DST_PORT: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_UDP_DST_PORT; + + case SAI_MIRROR_SESSION_ATTR_COUNTER_ID: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_COUNTER_ID; + + default: + return lemming::dataplane::sai::MIRROR_SESSION_ATTR_UNSPECIFIED; + } +} +sai_mirror_session_attr_t convert_sai_mirror_session_attr_t_to_sai( + lemming::dataplane::sai::MirrorSessionAttr val) { + switch (val) { + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_TYPE: + return SAI_MIRROR_SESSION_ATTR_TYPE; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_MONITOR_PORT: + return SAI_MIRROR_SESSION_ATTR_MONITOR_PORT; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_TRUNCATE_SIZE: + return SAI_MIRROR_SESSION_ATTR_TRUNCATE_SIZE; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_SAMPLE_RATE: + return SAI_MIRROR_SESSION_ATTR_SAMPLE_RATE; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_CONGESTION_MODE: + return SAI_MIRROR_SESSION_ATTR_CONGESTION_MODE; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_TC: + return SAI_MIRROR_SESSION_ATTR_TC; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_TPID: + return SAI_MIRROR_SESSION_ATTR_VLAN_TPID; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_ID: + return SAI_MIRROR_SESSION_ATTR_VLAN_ID; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_PRI: + return SAI_MIRROR_SESSION_ATTR_VLAN_PRI; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_CFI: + return SAI_MIRROR_SESSION_ATTR_VLAN_CFI; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_VLAN_HEADER_VALID: + return SAI_MIRROR_SESSION_ATTR_VLAN_HEADER_VALID; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_ERSPAN_ENCAPSULATION_TYPE: + return SAI_MIRROR_SESSION_ATTR_ERSPAN_ENCAPSULATION_TYPE; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_IPHDR_VERSION: + return SAI_MIRROR_SESSION_ATTR_IPHDR_VERSION; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_TOS: + return SAI_MIRROR_SESSION_ATTR_TOS; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_TTL: + return SAI_MIRROR_SESSION_ATTR_TTL; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_SRC_IP_ADDRESS: + return SAI_MIRROR_SESSION_ATTR_SRC_IP_ADDRESS; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_DST_IP_ADDRESS: + return SAI_MIRROR_SESSION_ATTR_DST_IP_ADDRESS; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_SRC_MAC_ADDRESS: + return SAI_MIRROR_SESSION_ATTR_SRC_MAC_ADDRESS; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_DST_MAC_ADDRESS: + return SAI_MIRROR_SESSION_ATTR_DST_MAC_ADDRESS; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_GRE_PROTOCOL_TYPE: + return SAI_MIRROR_SESSION_ATTR_GRE_PROTOCOL_TYPE; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_MONITOR_PORTLIST_VALID: + return SAI_MIRROR_SESSION_ATTR_MONITOR_PORTLIST_VALID; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_MONITOR_PORTLIST: + return SAI_MIRROR_SESSION_ATTR_MONITOR_PORTLIST; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_POLICER: + return SAI_MIRROR_SESSION_ATTR_POLICER; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_UDP_SRC_PORT: + return SAI_MIRROR_SESSION_ATTR_UDP_SRC_PORT; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_UDP_DST_PORT: + return SAI_MIRROR_SESSION_ATTR_UDP_DST_PORT; + + case lemming::dataplane::sai::MIRROR_SESSION_ATTR_COUNTER_ID: + return SAI_MIRROR_SESSION_ATTR_COUNTER_ID; + + default: + return SAI_MIRROR_SESSION_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_mirror_session_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_mirror_session_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_mirror_session_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_mirror_session_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MirrorSessionCongestionMode +convert_sai_mirror_session_congestion_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_MIRROR_SESSION_CONGESTION_MODE_INDEPENDENT: + return lemming::dataplane::sai:: + MIRROR_SESSION_CONGESTION_MODE_INDEPENDENT; + + case SAI_MIRROR_SESSION_CONGESTION_MODE_CORRELATED: + return lemming::dataplane::sai::MIRROR_SESSION_CONGESTION_MODE_CORRELATED; + + default: + return lemming::dataplane::sai:: + MIRROR_SESSION_CONGESTION_MODE_UNSPECIFIED; + } +} +sai_mirror_session_congestion_mode_t +convert_sai_mirror_session_congestion_mode_t_to_sai( + lemming::dataplane::sai::MirrorSessionCongestionMode val) { + switch (val) { + case lemming::dataplane::sai::MIRROR_SESSION_CONGESTION_MODE_INDEPENDENT: + return SAI_MIRROR_SESSION_CONGESTION_MODE_INDEPENDENT; + + case lemming::dataplane::sai::MIRROR_SESSION_CONGESTION_MODE_CORRELATED: + return SAI_MIRROR_SESSION_CONGESTION_MODE_CORRELATED; + + default: + return SAI_MIRROR_SESSION_CONGESTION_MODE_INDEPENDENT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_mirror_session_congestion_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_mirror_session_congestion_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_mirror_session_congestion_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_mirror_session_congestion_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MirrorSessionType +convert_sai_mirror_session_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_MIRROR_SESSION_TYPE_LOCAL: + return lemming::dataplane::sai::MIRROR_SESSION_TYPE_LOCAL; + + case SAI_MIRROR_SESSION_TYPE_REMOTE: + return lemming::dataplane::sai::MIRROR_SESSION_TYPE_REMOTE; + + case SAI_MIRROR_SESSION_TYPE_ENHANCED_REMOTE: + return lemming::dataplane::sai::MIRROR_SESSION_TYPE_ENHANCED_REMOTE; + + case SAI_MIRROR_SESSION_TYPE_SFLOW: + return lemming::dataplane::sai::MIRROR_SESSION_TYPE_SFLOW; + + default: + return lemming::dataplane::sai::MIRROR_SESSION_TYPE_UNSPECIFIED; + } +} +sai_mirror_session_type_t convert_sai_mirror_session_type_t_to_sai( + lemming::dataplane::sai::MirrorSessionType val) { + switch (val) { + case lemming::dataplane::sai::MIRROR_SESSION_TYPE_LOCAL: + return SAI_MIRROR_SESSION_TYPE_LOCAL; + + case lemming::dataplane::sai::MIRROR_SESSION_TYPE_REMOTE: + return SAI_MIRROR_SESSION_TYPE_REMOTE; + + case lemming::dataplane::sai::MIRROR_SESSION_TYPE_ENHANCED_REMOTE: + return SAI_MIRROR_SESSION_TYPE_ENHANCED_REMOTE; + + case lemming::dataplane::sai::MIRROR_SESSION_TYPE_SFLOW: + return SAI_MIRROR_SESSION_TYPE_SFLOW; + + default: + return SAI_MIRROR_SESSION_TYPE_LOCAL; + } +} + +google::protobuf::RepeatedField +convert_list_sai_mirror_session_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_mirror_session_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_mirror_session_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_mirror_session_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MyMacAttr convert_sai_my_mac_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MY_MAC_ATTR_PRIORITY: + return lemming::dataplane::sai::MY_MAC_ATTR_PRIORITY; + + case SAI_MY_MAC_ATTR_PORT_ID: + return lemming::dataplane::sai::MY_MAC_ATTR_PORT_ID; + + case SAI_MY_MAC_ATTR_VLAN_ID: + return lemming::dataplane::sai::MY_MAC_ATTR_VLAN_ID; + + case SAI_MY_MAC_ATTR_MAC_ADDRESS: + return lemming::dataplane::sai::MY_MAC_ATTR_MAC_ADDRESS; + + case SAI_MY_MAC_ATTR_MAC_ADDRESS_MASK: + return lemming::dataplane::sai::MY_MAC_ATTR_MAC_ADDRESS_MASK; + + default: + return lemming::dataplane::sai::MY_MAC_ATTR_UNSPECIFIED; + } +} +sai_my_mac_attr_t convert_sai_my_mac_attr_t_to_sai( + lemming::dataplane::sai::MyMacAttr val) { + switch (val) { + case lemming::dataplane::sai::MY_MAC_ATTR_PRIORITY: + return SAI_MY_MAC_ATTR_PRIORITY; + + case lemming::dataplane::sai::MY_MAC_ATTR_PORT_ID: + return SAI_MY_MAC_ATTR_PORT_ID; + + case lemming::dataplane::sai::MY_MAC_ATTR_VLAN_ID: + return SAI_MY_MAC_ATTR_VLAN_ID; + + case lemming::dataplane::sai::MY_MAC_ATTR_MAC_ADDRESS: + return SAI_MY_MAC_ATTR_MAC_ADDRESS; + + case lemming::dataplane::sai::MY_MAC_ATTR_MAC_ADDRESS_MASK: + return SAI_MY_MAC_ATTR_MAC_ADDRESS_MASK; + + default: + return SAI_MY_MAC_ATTR_PRIORITY; + } +} + +google::protobuf::RepeatedField convert_list_sai_my_mac_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_my_mac_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_my_mac_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_my_mac_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MySidEntryAttr +convert_sai_my_sid_entry_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR: + return lemming::dataplane::sai::MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR; + + case SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR_FLAVOR: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR_FLAVOR; + + case SAI_MY_SID_ENTRY_ATTR_PACKET_ACTION: + return lemming::dataplane::sai::MY_SID_ENTRY_ATTR_PACKET_ACTION; + + case SAI_MY_SID_ENTRY_ATTR_TRAP_PRIORITY: + return lemming::dataplane::sai::MY_SID_ENTRY_ATTR_TRAP_PRIORITY; + + case SAI_MY_SID_ENTRY_ATTR_NEXT_HOP_ID: + return lemming::dataplane::sai::MY_SID_ENTRY_ATTR_NEXT_HOP_ID; + + case SAI_MY_SID_ENTRY_ATTR_TUNNEL_ID: + return lemming::dataplane::sai::MY_SID_ENTRY_ATTR_TUNNEL_ID; + + case SAI_MY_SID_ENTRY_ATTR_VRF: + return lemming::dataplane::sai::MY_SID_ENTRY_ATTR_VRF; + + case SAI_MY_SID_ENTRY_ATTR_COUNTER_ID: + return lemming::dataplane::sai::MY_SID_ENTRY_ATTR_COUNTER_ID; + + default: + return lemming::dataplane::sai::MY_SID_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_my_sid_entry_attr_t convert_sai_my_sid_entry_attr_t_to_sai( + lemming::dataplane::sai::MySidEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR: + return SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR; + + case lemming::dataplane::sai::MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR_FLAVOR: + return SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR_FLAVOR; + + case lemming::dataplane::sai::MY_SID_ENTRY_ATTR_PACKET_ACTION: + return SAI_MY_SID_ENTRY_ATTR_PACKET_ACTION; + + case lemming::dataplane::sai::MY_SID_ENTRY_ATTR_TRAP_PRIORITY: + return SAI_MY_SID_ENTRY_ATTR_TRAP_PRIORITY; + + case lemming::dataplane::sai::MY_SID_ENTRY_ATTR_NEXT_HOP_ID: + return SAI_MY_SID_ENTRY_ATTR_NEXT_HOP_ID; + + case lemming::dataplane::sai::MY_SID_ENTRY_ATTR_TUNNEL_ID: + return SAI_MY_SID_ENTRY_ATTR_TUNNEL_ID; + + case lemming::dataplane::sai::MY_SID_ENTRY_ATTR_VRF: + return SAI_MY_SID_ENTRY_ATTR_VRF; + + case lemming::dataplane::sai::MY_SID_ENTRY_ATTR_COUNTER_ID: + return SAI_MY_SID_ENTRY_ATTR_COUNTER_ID; + + default: + return SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR; + } +} + +google::protobuf::RepeatedField +convert_list_sai_my_sid_entry_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_my_sid_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_my_sid_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_my_sid_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MySidEntryEndpointBehaviorFlavor +convert_sai_my_sid_entry_endpoint_behavior_flavor_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_NONE: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_NONE; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USP: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USP; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USD: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USD; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USP: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USP; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USD_AND_USP: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USD_AND_USP; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USP_AND_USD: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USP_AND_USD; + + default: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_UNSPECIFIED; + } +} +sai_my_sid_entry_endpoint_behavior_flavor_t +convert_sai_my_sid_entry_endpoint_behavior_flavor_t_to_sai( + lemming::dataplane::sai::MySidEntryEndpointBehaviorFlavor val) { + switch (val) { + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_NONE: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_NONE; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USP: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USP; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USD: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USD; + + case lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USP: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USP; + + case lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USD_AND_USP: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_USD_AND_USP; + + case lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD; + + case lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USP_AND_USD: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USP_AND_USD; + + default: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_my_sid_entry_endpoint_behavior_flavor_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_my_sid_entry_endpoint_behavior_flavor_t_to_proto( + list.list[i])); + } + return proto_list; +} +void convert_list_sai_my_sid_entry_endpoint_behavior_flavor_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_my_sid_entry_endpoint_behavior_flavor_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::MySidEntryEndpointBehavior +convert_sai_my_sid_entry_endpoint_behavior_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_T: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_T; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX6: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX6; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX4: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX4; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT6: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT6; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT4: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT4; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT46: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT46; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS_RED: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS_RED; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT_RED: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT_RED; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UN: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UN; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UA: + return lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UA; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_CUSTOM_RANGE_START: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_CUSTOM_RANGE_START; + + case SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_CUSTOM_RANGE_END: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_CUSTOM_RANGE_END; + + default: + return lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UNSPECIFIED; + } +} +sai_my_sid_entry_endpoint_behavior_t +convert_sai_my_sid_entry_endpoint_behavior_t_to_sai( + lemming::dataplane::sai::MySidEntryEndpointBehavior val) { + switch (val) { + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_T: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_T; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX6: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX6; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX4: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX4; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT6: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT6; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT4: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT4; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT46: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT46; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS_RED: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS_RED; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT_RED: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT_RED; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UN: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UN; + + case lemming::dataplane::sai::MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UA: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UA; + + case lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_CUSTOM_RANGE_START: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_CUSTOM_RANGE_START; + + case lemming::dataplane::sai:: + MY_SID_ENTRY_ENDPOINT_BEHAVIOR_CUSTOM_RANGE_END: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_CUSTOM_RANGE_END; + + default: + return SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E; + } +} + +google::protobuf::RepeatedField +convert_list_sai_my_sid_entry_endpoint_behavior_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_my_sid_entry_endpoint_behavior_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_my_sid_entry_endpoint_behavior_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_my_sid_entry_endpoint_behavior_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NatEntryAttr convert_sai_nat_entry_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_NAT_ENTRY_ATTR_NAT_TYPE: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_NAT_TYPE; + + case SAI_NAT_ENTRY_ATTR_SRC_IP: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_SRC_IP; + + case SAI_NAT_ENTRY_ATTR_SRC_IP_MASK: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_SRC_IP_MASK; + + case SAI_NAT_ENTRY_ATTR_VR_ID: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_VR_ID; + + case SAI_NAT_ENTRY_ATTR_DST_IP: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_DST_IP; + + case SAI_NAT_ENTRY_ATTR_DST_IP_MASK: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_DST_IP_MASK; + + case SAI_NAT_ENTRY_ATTR_L4_SRC_PORT: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_L4_SRC_PORT; + + case SAI_NAT_ENTRY_ATTR_L4_DST_PORT: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_L4_DST_PORT; + + case SAI_NAT_ENTRY_ATTR_ENABLE_PACKET_COUNT: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_ENABLE_PACKET_COUNT; + + case SAI_NAT_ENTRY_ATTR_PACKET_COUNT: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_PACKET_COUNT; + + case SAI_NAT_ENTRY_ATTR_ENABLE_BYTE_COUNT: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_ENABLE_BYTE_COUNT; + + case SAI_NAT_ENTRY_ATTR_BYTE_COUNT: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_BYTE_COUNT; + + case SAI_NAT_ENTRY_ATTR_HIT_BIT_COR: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_HIT_BIT_COR; + + case SAI_NAT_ENTRY_ATTR_HIT_BIT: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_HIT_BIT; + + case SAI_NAT_ENTRY_ATTR_AGING_TIME: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_AGING_TIME; + + default: + return lemming::dataplane::sai::NAT_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_nat_entry_attr_t convert_sai_nat_entry_attr_t_to_sai( + lemming::dataplane::sai::NatEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::NAT_ENTRY_ATTR_NAT_TYPE: + return SAI_NAT_ENTRY_ATTR_NAT_TYPE; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_SRC_IP: + return SAI_NAT_ENTRY_ATTR_SRC_IP; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_SRC_IP_MASK: + return SAI_NAT_ENTRY_ATTR_SRC_IP_MASK; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_VR_ID: + return SAI_NAT_ENTRY_ATTR_VR_ID; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_DST_IP: + return SAI_NAT_ENTRY_ATTR_DST_IP; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_DST_IP_MASK: + return SAI_NAT_ENTRY_ATTR_DST_IP_MASK; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_L4_SRC_PORT: + return SAI_NAT_ENTRY_ATTR_L4_SRC_PORT; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_L4_DST_PORT: + return SAI_NAT_ENTRY_ATTR_L4_DST_PORT; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_ENABLE_PACKET_COUNT: + return SAI_NAT_ENTRY_ATTR_ENABLE_PACKET_COUNT; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_PACKET_COUNT: + return SAI_NAT_ENTRY_ATTR_PACKET_COUNT; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_ENABLE_BYTE_COUNT: + return SAI_NAT_ENTRY_ATTR_ENABLE_BYTE_COUNT; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_BYTE_COUNT: + return SAI_NAT_ENTRY_ATTR_BYTE_COUNT; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_HIT_BIT_COR: + return SAI_NAT_ENTRY_ATTR_HIT_BIT_COR; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_HIT_BIT: + return SAI_NAT_ENTRY_ATTR_HIT_BIT; + + case lemming::dataplane::sai::NAT_ENTRY_ATTR_AGING_TIME: + return SAI_NAT_ENTRY_ATTR_AGING_TIME; + + default: + return SAI_NAT_ENTRY_ATTR_NAT_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_nat_entry_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_nat_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_nat_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_nat_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NatEvent convert_sai_nat_event_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_NAT_EVENT_NONE: + return lemming::dataplane::sai::NAT_EVENT_NONE; + + case SAI_NAT_EVENT_AGED: + return lemming::dataplane::sai::NAT_EVENT_AGED; + + default: + return lemming::dataplane::sai::NAT_EVENT_UNSPECIFIED; + } +} +sai_nat_event_t convert_sai_nat_event_t_to_sai( + lemming::dataplane::sai::NatEvent val) { + switch (val) { + case lemming::dataplane::sai::NAT_EVENT_NONE: + return SAI_NAT_EVENT_NONE; + + case lemming::dataplane::sai::NAT_EVENT_AGED: + return SAI_NAT_EVENT_AGED; + + default: + return SAI_NAT_EVENT_NONE; + } +} + +google::protobuf::RepeatedField convert_list_sai_nat_event_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_nat_event_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_nat_event_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_nat_event_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NatType convert_sai_nat_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_NAT_TYPE_NONE: + return lemming::dataplane::sai::NAT_TYPE_NONE; + + case SAI_NAT_TYPE_SOURCE_NAT: + return lemming::dataplane::sai::NAT_TYPE_SOURCE_NAT; + + case SAI_NAT_TYPE_DESTINATION_NAT: + return lemming::dataplane::sai::NAT_TYPE_DESTINATION_NAT; + + case SAI_NAT_TYPE_DOUBLE_NAT: + return lemming::dataplane::sai::NAT_TYPE_DOUBLE_NAT; + + case SAI_NAT_TYPE_DESTINATION_NAT_POOL: + return lemming::dataplane::sai::NAT_TYPE_DESTINATION_NAT_POOL; + + default: + return lemming::dataplane::sai::NAT_TYPE_UNSPECIFIED; + } +} +sai_nat_type_t convert_sai_nat_type_t_to_sai( + lemming::dataplane::sai::NatType val) { + switch (val) { + case lemming::dataplane::sai::NAT_TYPE_NONE: + return SAI_NAT_TYPE_NONE; + + case lemming::dataplane::sai::NAT_TYPE_SOURCE_NAT: + return SAI_NAT_TYPE_SOURCE_NAT; + + case lemming::dataplane::sai::NAT_TYPE_DESTINATION_NAT: + return SAI_NAT_TYPE_DESTINATION_NAT; + + case lemming::dataplane::sai::NAT_TYPE_DOUBLE_NAT: + return SAI_NAT_TYPE_DOUBLE_NAT; + + case lemming::dataplane::sai::NAT_TYPE_DESTINATION_NAT_POOL: + return SAI_NAT_TYPE_DESTINATION_NAT_POOL; + + default: + return SAI_NAT_TYPE_NONE; + } +} + +google::protobuf::RepeatedField convert_list_sai_nat_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_nat_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_nat_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_nat_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NatZoneCounterAttr +convert_sai_nat_zone_counter_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_NAT_ZONE_COUNTER_ATTR_NAT_TYPE: + return lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_NAT_TYPE; + + case SAI_NAT_ZONE_COUNTER_ATTR_ZONE_ID: + return lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_ZONE_ID; + + case SAI_NAT_ZONE_COUNTER_ATTR_ENABLE_DISCARD: + return lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_ENABLE_DISCARD; + + case SAI_NAT_ZONE_COUNTER_ATTR_DISCARD_PACKET_COUNT: + return lemming::dataplane::sai:: + NAT_ZONE_COUNTER_ATTR_DISCARD_PACKET_COUNT; + + case SAI_NAT_ZONE_COUNTER_ATTR_ENABLE_TRANSLATION_NEEDED: + return lemming::dataplane::sai:: + NAT_ZONE_COUNTER_ATTR_ENABLE_TRANSLATION_NEEDED; + + case SAI_NAT_ZONE_COUNTER_ATTR_TRANSLATION_NEEDED_PACKET_COUNT: + return lemming::dataplane::sai:: + NAT_ZONE_COUNTER_ATTR_TRANSLATION_NEEDED_PACKET_COUNT; + + case SAI_NAT_ZONE_COUNTER_ATTR_ENABLE_TRANSLATIONS: + return lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_ENABLE_TRANSLATIONS; + + case SAI_NAT_ZONE_COUNTER_ATTR_TRANSLATIONS_PACKET_COUNT: + return lemming::dataplane::sai:: + NAT_ZONE_COUNTER_ATTR_TRANSLATIONS_PACKET_COUNT; + + default: + return lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_UNSPECIFIED; + } +} +sai_nat_zone_counter_attr_t convert_sai_nat_zone_counter_attr_t_to_sai( + lemming::dataplane::sai::NatZoneCounterAttr val) { + switch (val) { + case lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_NAT_TYPE: + return SAI_NAT_ZONE_COUNTER_ATTR_NAT_TYPE; + + case lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_ZONE_ID: + return SAI_NAT_ZONE_COUNTER_ATTR_ZONE_ID; + + case lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_ENABLE_DISCARD: + return SAI_NAT_ZONE_COUNTER_ATTR_ENABLE_DISCARD; + + case lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_DISCARD_PACKET_COUNT: + return SAI_NAT_ZONE_COUNTER_ATTR_DISCARD_PACKET_COUNT; + + case lemming::dataplane::sai:: + NAT_ZONE_COUNTER_ATTR_ENABLE_TRANSLATION_NEEDED: + return SAI_NAT_ZONE_COUNTER_ATTR_ENABLE_TRANSLATION_NEEDED; + + case lemming::dataplane::sai:: + NAT_ZONE_COUNTER_ATTR_TRANSLATION_NEEDED_PACKET_COUNT: + return SAI_NAT_ZONE_COUNTER_ATTR_TRANSLATION_NEEDED_PACKET_COUNT; + + case lemming::dataplane::sai::NAT_ZONE_COUNTER_ATTR_ENABLE_TRANSLATIONS: + return SAI_NAT_ZONE_COUNTER_ATTR_ENABLE_TRANSLATIONS; + + case lemming::dataplane::sai:: + NAT_ZONE_COUNTER_ATTR_TRANSLATIONS_PACKET_COUNT: + return SAI_NAT_ZONE_COUNTER_ATTR_TRANSLATIONS_PACKET_COUNT; + + default: + return SAI_NAT_ZONE_COUNTER_ATTR_NAT_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_nat_zone_counter_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_nat_zone_counter_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_nat_zone_counter_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_nat_zone_counter_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NativeHashField +convert_sai_native_hash_field_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_NATIVE_HASH_FIELD_SRC_IP: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_SRC_IP; + + case SAI_NATIVE_HASH_FIELD_DST_IP: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_DST_IP; + + case SAI_NATIVE_HASH_FIELD_INNER_SRC_IP: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_SRC_IP; + + case SAI_NATIVE_HASH_FIELD_INNER_DST_IP: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_DST_IP; + + case SAI_NATIVE_HASH_FIELD_SRC_IPV4: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_SRC_IPV4; + + case SAI_NATIVE_HASH_FIELD_DST_IPV4: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_DST_IPV4; + + case SAI_NATIVE_HASH_FIELD_SRC_IPV6: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_SRC_IPV6; + + case SAI_NATIVE_HASH_FIELD_DST_IPV6: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_DST_IPV6; + + case SAI_NATIVE_HASH_FIELD_INNER_SRC_IPV4: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_SRC_IPV4; + + case SAI_NATIVE_HASH_FIELD_INNER_DST_IPV4: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_DST_IPV4; + + case SAI_NATIVE_HASH_FIELD_INNER_SRC_IPV6: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_SRC_IPV6; + + case SAI_NATIVE_HASH_FIELD_INNER_DST_IPV6: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_DST_IPV6; + + case SAI_NATIVE_HASH_FIELD_VLAN_ID: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_VLAN_ID; + + case SAI_NATIVE_HASH_FIELD_IP_PROTOCOL: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_IP_PROTOCOL; + + case SAI_NATIVE_HASH_FIELD_ETHERTYPE: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_ETHERTYPE; + + case SAI_NATIVE_HASH_FIELD_L4_SRC_PORT: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_L4_SRC_PORT; + + case SAI_NATIVE_HASH_FIELD_L4_DST_PORT: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_L4_DST_PORT; + + case SAI_NATIVE_HASH_FIELD_SRC_MAC: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_SRC_MAC; + + case SAI_NATIVE_HASH_FIELD_DST_MAC: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_DST_MAC; + + case SAI_NATIVE_HASH_FIELD_IN_PORT: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_IN_PORT; + + case SAI_NATIVE_HASH_FIELD_INNER_IP_PROTOCOL: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_IP_PROTOCOL; + + case SAI_NATIVE_HASH_FIELD_INNER_ETHERTYPE: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_ETHERTYPE; + + case SAI_NATIVE_HASH_FIELD_INNER_L4_SRC_PORT: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_L4_SRC_PORT; + + case SAI_NATIVE_HASH_FIELD_INNER_L4_DST_PORT: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_L4_DST_PORT; + + case SAI_NATIVE_HASH_FIELD_INNER_SRC_MAC: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_SRC_MAC; + + case SAI_NATIVE_HASH_FIELD_INNER_DST_MAC: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_DST_MAC; + + case SAI_NATIVE_HASH_FIELD_MPLS_LABEL_ALL: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_ALL; + + case SAI_NATIVE_HASH_FIELD_MPLS_LABEL_0: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_0; + + case SAI_NATIVE_HASH_FIELD_MPLS_LABEL_1: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_1; + + case SAI_NATIVE_HASH_FIELD_MPLS_LABEL_2: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_2; + + case SAI_NATIVE_HASH_FIELD_MPLS_LABEL_3: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_3; + + case SAI_NATIVE_HASH_FIELD_MPLS_LABEL_4: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_4; + + case SAI_NATIVE_HASH_FIELD_IPV6_FLOW_LABEL: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_IPV6_FLOW_LABEL; + + case SAI_NATIVE_HASH_FIELD_NONE: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_NONE; + + default: + return lemming::dataplane::sai::NATIVE_HASH_FIELD_UNSPECIFIED; + } +} +sai_native_hash_field_t convert_sai_native_hash_field_t_to_sai( + lemming::dataplane::sai::NativeHashField val) { + switch (val) { + case lemming::dataplane::sai::NATIVE_HASH_FIELD_SRC_IP: + return SAI_NATIVE_HASH_FIELD_SRC_IP; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_DST_IP: + return SAI_NATIVE_HASH_FIELD_DST_IP; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_SRC_IP: + return SAI_NATIVE_HASH_FIELD_INNER_SRC_IP; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_DST_IP: + return SAI_NATIVE_HASH_FIELD_INNER_DST_IP; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_SRC_IPV4: + return SAI_NATIVE_HASH_FIELD_SRC_IPV4; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_DST_IPV4: + return SAI_NATIVE_HASH_FIELD_DST_IPV4; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_SRC_IPV6: + return SAI_NATIVE_HASH_FIELD_SRC_IPV6; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_DST_IPV6: + return SAI_NATIVE_HASH_FIELD_DST_IPV6; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_SRC_IPV4: + return SAI_NATIVE_HASH_FIELD_INNER_SRC_IPV4; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_DST_IPV4: + return SAI_NATIVE_HASH_FIELD_INNER_DST_IPV4; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_SRC_IPV6: + return SAI_NATIVE_HASH_FIELD_INNER_SRC_IPV6; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_DST_IPV6: + return SAI_NATIVE_HASH_FIELD_INNER_DST_IPV6; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_VLAN_ID: + return SAI_NATIVE_HASH_FIELD_VLAN_ID; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_IP_PROTOCOL: + return SAI_NATIVE_HASH_FIELD_IP_PROTOCOL; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_ETHERTYPE: + return SAI_NATIVE_HASH_FIELD_ETHERTYPE; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_L4_SRC_PORT: + return SAI_NATIVE_HASH_FIELD_L4_SRC_PORT; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_L4_DST_PORT: + return SAI_NATIVE_HASH_FIELD_L4_DST_PORT; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_SRC_MAC: + return SAI_NATIVE_HASH_FIELD_SRC_MAC; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_DST_MAC: + return SAI_NATIVE_HASH_FIELD_DST_MAC; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_IN_PORT: + return SAI_NATIVE_HASH_FIELD_IN_PORT; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_IP_PROTOCOL: + return SAI_NATIVE_HASH_FIELD_INNER_IP_PROTOCOL; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_ETHERTYPE: + return SAI_NATIVE_HASH_FIELD_INNER_ETHERTYPE; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_L4_SRC_PORT: + return SAI_NATIVE_HASH_FIELD_INNER_L4_SRC_PORT; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_L4_DST_PORT: + return SAI_NATIVE_HASH_FIELD_INNER_L4_DST_PORT; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_SRC_MAC: + return SAI_NATIVE_HASH_FIELD_INNER_SRC_MAC; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_INNER_DST_MAC: + return SAI_NATIVE_HASH_FIELD_INNER_DST_MAC; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_ALL: + return SAI_NATIVE_HASH_FIELD_MPLS_LABEL_ALL; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_0: + return SAI_NATIVE_HASH_FIELD_MPLS_LABEL_0; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_1: + return SAI_NATIVE_HASH_FIELD_MPLS_LABEL_1; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_2: + return SAI_NATIVE_HASH_FIELD_MPLS_LABEL_2; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_3: + return SAI_NATIVE_HASH_FIELD_MPLS_LABEL_3; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_MPLS_LABEL_4: + return SAI_NATIVE_HASH_FIELD_MPLS_LABEL_4; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_IPV6_FLOW_LABEL: + return SAI_NATIVE_HASH_FIELD_IPV6_FLOW_LABEL; + + case lemming::dataplane::sai::NATIVE_HASH_FIELD_NONE: + return SAI_NATIVE_HASH_FIELD_NONE; + + default: + return SAI_NATIVE_HASH_FIELD_SRC_IP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_native_hash_field_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_native_hash_field_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_native_hash_field_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_native_hash_field_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NeighborEntryAttr +convert_sai_neighbor_entry_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS; + + case SAI_NEIGHBOR_ENTRY_ATTR_PACKET_ACTION: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_PACKET_ACTION; + + case SAI_NEIGHBOR_ENTRY_ATTR_USER_TRAP_ID: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_USER_TRAP_ID; + + case SAI_NEIGHBOR_ENTRY_ATTR_NO_HOST_ROUTE: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_NO_HOST_ROUTE; + + case SAI_NEIGHBOR_ENTRY_ATTR_META_DATA: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_META_DATA; + + case SAI_NEIGHBOR_ENTRY_ATTR_COUNTER_ID: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_COUNTER_ID; + + case SAI_NEIGHBOR_ENTRY_ATTR_ENCAP_INDEX: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_ENCAP_INDEX; + + case SAI_NEIGHBOR_ENTRY_ATTR_ENCAP_IMPOSE_INDEX: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_ENCAP_IMPOSE_INDEX; + + case SAI_NEIGHBOR_ENTRY_ATTR_IS_LOCAL: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_IS_LOCAL; + + case SAI_NEIGHBOR_ENTRY_ATTR_IP_ADDR_FAMILY: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_IP_ADDR_FAMILY; + + default: + return lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_neighbor_entry_attr_t convert_sai_neighbor_entry_attr_t_to_sai( + lemming::dataplane::sai::NeighborEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS: + return SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS; + + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_PACKET_ACTION: + return SAI_NEIGHBOR_ENTRY_ATTR_PACKET_ACTION; + + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_USER_TRAP_ID: + return SAI_NEIGHBOR_ENTRY_ATTR_USER_TRAP_ID; + + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_NO_HOST_ROUTE: + return SAI_NEIGHBOR_ENTRY_ATTR_NO_HOST_ROUTE; + + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_META_DATA: + return SAI_NEIGHBOR_ENTRY_ATTR_META_DATA; + + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_COUNTER_ID: + return SAI_NEIGHBOR_ENTRY_ATTR_COUNTER_ID; + + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_ENCAP_INDEX: + return SAI_NEIGHBOR_ENTRY_ATTR_ENCAP_INDEX; + + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_ENCAP_IMPOSE_INDEX: + return SAI_NEIGHBOR_ENTRY_ATTR_ENCAP_IMPOSE_INDEX; + + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_IS_LOCAL: + return SAI_NEIGHBOR_ENTRY_ATTR_IS_LOCAL; + + case lemming::dataplane::sai::NEIGHBOR_ENTRY_ATTR_IP_ADDR_FAMILY: + return SAI_NEIGHBOR_ENTRY_ATTR_IP_ADDR_FAMILY; + + default: + return SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_neighbor_entry_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_neighbor_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_neighbor_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_neighbor_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NextHopAttr convert_sai_next_hop_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_NEXT_HOP_ATTR_TYPE: + return lemming::dataplane::sai::NEXT_HOP_ATTR_TYPE; + + case SAI_NEXT_HOP_ATTR_IP: + return lemming::dataplane::sai::NEXT_HOP_ATTR_IP; + + case SAI_NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: + return lemming::dataplane::sai::NEXT_HOP_ATTR_ROUTER_INTERFACE_ID; + + case SAI_NEXT_HOP_ATTR_TUNNEL_ID: + return lemming::dataplane::sai::NEXT_HOP_ATTR_TUNNEL_ID; + + case SAI_NEXT_HOP_ATTR_TUNNEL_VNI: + return lemming::dataplane::sai::NEXT_HOP_ATTR_TUNNEL_VNI; + + case SAI_NEXT_HOP_ATTR_TUNNEL_MAC: + return lemming::dataplane::sai::NEXT_HOP_ATTR_TUNNEL_MAC; + + case SAI_NEXT_HOP_ATTR_SRV6_SIDLIST_ID: + return lemming::dataplane::sai::NEXT_HOP_ATTR_SRV6_SIDLIST_ID; + + case SAI_NEXT_HOP_ATTR_LABELSTACK: + return lemming::dataplane::sai::NEXT_HOP_ATTR_LABELSTACK; + + case SAI_NEXT_HOP_ATTR_COUNTER_ID: + return lemming::dataplane::sai::NEXT_HOP_ATTR_COUNTER_ID; + + case SAI_NEXT_HOP_ATTR_DISABLE_DECREMENT_TTL: + return lemming::dataplane::sai::NEXT_HOP_ATTR_DISABLE_DECREMENT_TTL; + + case SAI_NEXT_HOP_ATTR_OUTSEG_TYPE: + return lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_TYPE; + + case SAI_NEXT_HOP_ATTR_OUTSEG_TTL_MODE: + return lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_TTL_MODE; + + case SAI_NEXT_HOP_ATTR_OUTSEG_TTL_VALUE: + return lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_TTL_VALUE; + + case SAI_NEXT_HOP_ATTR_OUTSEG_EXP_MODE: + return lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_EXP_MODE; + + case SAI_NEXT_HOP_ATTR_OUTSEG_EXP_VALUE: + return lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_EXP_VALUE; + + case SAI_NEXT_HOP_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP: + return lemming::dataplane::sai:: + NEXT_HOP_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP; + + default: + return lemming::dataplane::sai::NEXT_HOP_ATTR_UNSPECIFIED; + } +} +sai_next_hop_attr_t convert_sai_next_hop_attr_t_to_sai( + lemming::dataplane::sai::NextHopAttr val) { + switch (val) { + case lemming::dataplane::sai::NEXT_HOP_ATTR_TYPE: + return SAI_NEXT_HOP_ATTR_TYPE; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_IP: + return SAI_NEXT_HOP_ATTR_IP; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_ROUTER_INTERFACE_ID: + return SAI_NEXT_HOP_ATTR_ROUTER_INTERFACE_ID; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_TUNNEL_ID: + return SAI_NEXT_HOP_ATTR_TUNNEL_ID; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_TUNNEL_VNI: + return SAI_NEXT_HOP_ATTR_TUNNEL_VNI; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_TUNNEL_MAC: + return SAI_NEXT_HOP_ATTR_TUNNEL_MAC; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_SRV6_SIDLIST_ID: + return SAI_NEXT_HOP_ATTR_SRV6_SIDLIST_ID; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_LABELSTACK: + return SAI_NEXT_HOP_ATTR_LABELSTACK; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_COUNTER_ID: + return SAI_NEXT_HOP_ATTR_COUNTER_ID; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_DISABLE_DECREMENT_TTL: + return SAI_NEXT_HOP_ATTR_DISABLE_DECREMENT_TTL; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_TYPE: + return SAI_NEXT_HOP_ATTR_OUTSEG_TYPE; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_TTL_MODE: + return SAI_NEXT_HOP_ATTR_OUTSEG_TTL_MODE; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_TTL_VALUE: + return SAI_NEXT_HOP_ATTR_OUTSEG_TTL_VALUE; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_EXP_MODE: + return SAI_NEXT_HOP_ATTR_OUTSEG_EXP_MODE; + + case lemming::dataplane::sai::NEXT_HOP_ATTR_OUTSEG_EXP_VALUE: + return SAI_NEXT_HOP_ATTR_OUTSEG_EXP_VALUE; + + case lemming::dataplane::sai:: + NEXT_HOP_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP: + return SAI_NEXT_HOP_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP; + + default: + return SAI_NEXT_HOP_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_next_hop_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_next_hop_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_next_hop_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_next_hop_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NextHopGroupAttr +convert_sai_next_hop_group_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_COUNT: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_NEXT_HOP_COUNT; + + case SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_LIST: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_LIST; + + case SAI_NEXT_HOP_GROUP_ATTR_TYPE: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_TYPE; + + case SAI_NEXT_HOP_GROUP_ATTR_SET_SWITCHOVER: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_SET_SWITCHOVER; + + case SAI_NEXT_HOP_GROUP_ATTR_COUNTER_ID: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_COUNTER_ID; + + case SAI_NEXT_HOP_GROUP_ATTR_CONFIGURED_SIZE: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_CONFIGURED_SIZE; + + case SAI_NEXT_HOP_GROUP_ATTR_REAL_SIZE: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_REAL_SIZE; + + case SAI_NEXT_HOP_GROUP_ATTR_SELECTION_MAP: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_SELECTION_MAP; + + case SAI_NEXT_HOP_GROUP_ATTR_HIERARCHICAL_NEXTHOP: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_HIERARCHICAL_NEXTHOP; + + case SAI_NEXT_HOP_GROUP_ATTR_ARS_OBJECT_ID: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_ARS_OBJECT_ID; + + case SAI_NEXT_HOP_GROUP_ATTR_ARS_PACKET_DROPS: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_ARS_PACKET_DROPS; + + case SAI_NEXT_HOP_GROUP_ATTR_ARS_NEXT_HOP_REASSIGNMENTS: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_ATTR_ARS_NEXT_HOP_REASSIGNMENTS; + + case SAI_NEXT_HOP_GROUP_ATTR_ARS_PORT_REASSIGNMENTS: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_ATTR_ARS_PORT_REASSIGNMENTS; + + case SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_LIST: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_NEXT_HOP_LIST; + + case SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_WEIGHT_LIST: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_WEIGHT_LIST; + + case SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_COUNTER_LIST: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_COUNTER_LIST; + + default: + return lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_UNSPECIFIED; + } +} +sai_next_hop_group_attr_t convert_sai_next_hop_group_attr_t_to_sai( + lemming::dataplane::sai::NextHopGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_NEXT_HOP_COUNT: + return SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_COUNT; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_LIST: + return SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_LIST; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_TYPE: + return SAI_NEXT_HOP_GROUP_ATTR_TYPE; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_SET_SWITCHOVER: + return SAI_NEXT_HOP_GROUP_ATTR_SET_SWITCHOVER; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_COUNTER_ID: + return SAI_NEXT_HOP_GROUP_ATTR_COUNTER_ID; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_CONFIGURED_SIZE: + return SAI_NEXT_HOP_GROUP_ATTR_CONFIGURED_SIZE; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_REAL_SIZE: + return SAI_NEXT_HOP_GROUP_ATTR_REAL_SIZE; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_SELECTION_MAP: + return SAI_NEXT_HOP_GROUP_ATTR_SELECTION_MAP; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_HIERARCHICAL_NEXTHOP: + return SAI_NEXT_HOP_GROUP_ATTR_HIERARCHICAL_NEXTHOP; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_ARS_OBJECT_ID: + return SAI_NEXT_HOP_GROUP_ATTR_ARS_OBJECT_ID; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_ARS_PACKET_DROPS: + return SAI_NEXT_HOP_GROUP_ATTR_ARS_PACKET_DROPS; + + case lemming::dataplane::sai:: + NEXT_HOP_GROUP_ATTR_ARS_NEXT_HOP_REASSIGNMENTS: + return SAI_NEXT_HOP_GROUP_ATTR_ARS_NEXT_HOP_REASSIGNMENTS; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_ARS_PORT_REASSIGNMENTS: + return SAI_NEXT_HOP_GROUP_ATTR_ARS_PORT_REASSIGNMENTS; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_ATTR_NEXT_HOP_LIST: + return SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_LIST; + + case lemming::dataplane::sai:: + NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_WEIGHT_LIST: + return SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_WEIGHT_LIST; + + case lemming::dataplane::sai:: + NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_COUNTER_LIST: + return SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_MEMBER_COUNTER_LIST; + + default: + return SAI_NEXT_HOP_GROUP_ATTR_NEXT_HOP_COUNT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_next_hop_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_next_hop_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_next_hop_group_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NextHopGroupMapAttr +convert_sai_next_hop_group_map_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_NEXT_HOP_GROUP_MAP_ATTR_TYPE: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MAP_ATTR_TYPE; + + case SAI_NEXT_HOP_GROUP_MAP_ATTR_MAP_TO_VALUE_LIST: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MAP_ATTR_MAP_TO_VALUE_LIST; + + default: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MAP_ATTR_UNSPECIFIED; + } +} +sai_next_hop_group_map_attr_t convert_sai_next_hop_group_map_attr_t_to_sai( + lemming::dataplane::sai::NextHopGroupMapAttr val) { + switch (val) { + case lemming::dataplane::sai::NEXT_HOP_GROUP_MAP_ATTR_TYPE: + return SAI_NEXT_HOP_GROUP_MAP_ATTR_TYPE; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MAP_ATTR_MAP_TO_VALUE_LIST: + return SAI_NEXT_HOP_GROUP_MAP_ATTR_MAP_TO_VALUE_LIST; + + default: + return SAI_NEXT_HOP_GROUP_MAP_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_map_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_next_hop_group_map_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_next_hop_group_map_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_next_hop_group_map_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NextHopGroupMapType +convert_sai_next_hop_group_map_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_NEXT_HOP_GROUP_MAP_TYPE_FORWARDING_CLASS_TO_INDEX: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MAP_TYPE_FORWARDING_CLASS_TO_INDEX; + + default: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MAP_TYPE_UNSPECIFIED; + } +} +sai_next_hop_group_map_type_t convert_sai_next_hop_group_map_type_t_to_sai( + lemming::dataplane::sai::NextHopGroupMapType val) { + switch (val) { + case lemming::dataplane::sai:: + NEXT_HOP_GROUP_MAP_TYPE_FORWARDING_CLASS_TO_INDEX: + return SAI_NEXT_HOP_GROUP_MAP_TYPE_FORWARDING_CLASS_TO_INDEX; + + default: + return SAI_NEXT_HOP_GROUP_MAP_TYPE_FORWARDING_CLASS_TO_INDEX; + } +} + +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_map_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_next_hop_group_map_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_next_hop_group_map_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_next_hop_group_map_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NextHopGroupMemberAttr +convert_sai_next_hop_group_member_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID; + + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID; + + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT; + + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_CONFIGURED_ROLE: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_ATTR_CONFIGURED_ROLE; + + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_OBSERVED_ROLE: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_OBSERVED_ROLE; + + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_MONITORED_OBJECT: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_ATTR_MONITORED_OBJECT; + + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_INDEX: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_INDEX; + + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_SEQUENCE_ID: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_SEQUENCE_ID; + + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_COUNTER_ID: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_COUNTER_ID; + + case SAI_NEXT_HOP_GROUP_MEMBER_ATTR_ARS_ALTERNATE_PATH: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_ATTR_ARS_ALTERNATE_PATH; + + default: + return lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_UNSPECIFIED; + } +} +sai_next_hop_group_member_attr_t +convert_sai_next_hop_group_member_attr_t_to_sai( + lemming::dataplane::sai::NextHopGroupMemberAttr val) { + switch (val) { + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_CONFIGURED_ROLE: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_CONFIGURED_ROLE; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_OBSERVED_ROLE: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_OBSERVED_ROLE; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_MONITORED_OBJECT: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_MONITORED_OBJECT; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_INDEX: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_INDEX; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_SEQUENCE_ID: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_SEQUENCE_ID; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_COUNTER_ID: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_COUNTER_ID; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_ATTR_ARS_ALTERNATE_PATH: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_ARS_ALTERNATE_PATH; + + default: + return SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_member_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_next_hop_group_member_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_next_hop_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_next_hop_group_member_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NextHopGroupMemberConfiguredRole +convert_sai_next_hop_group_member_configured_role_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_PRIMARY: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_PRIMARY; + + case SAI_NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_STANDBY: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_STANDBY; + + default: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_UNSPECIFIED; + } +} +sai_next_hop_group_member_configured_role_t +convert_sai_next_hop_group_member_configured_role_t_to_sai( + lemming::dataplane::sai::NextHopGroupMemberConfiguredRole val) { + switch (val) { + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_PRIMARY: + return SAI_NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_PRIMARY; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_STANDBY: + return SAI_NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_STANDBY; + + default: + return SAI_NEXT_HOP_GROUP_MEMBER_CONFIGURED_ROLE_PRIMARY; + } +} + +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_member_configured_role_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_next_hop_group_member_configured_role_t_to_proto( + list.list[i])); + } + return proto_list; +} +void convert_list_sai_next_hop_group_member_configured_role_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_next_hop_group_member_configured_role_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NextHopGroupMemberObservedRole +convert_sai_next_hop_group_member_observed_role_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_ACTIVE: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_ACTIVE; + + case SAI_NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_INACTIVE: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_INACTIVE; + + default: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_UNSPECIFIED; + } +} +sai_next_hop_group_member_observed_role_t +convert_sai_next_hop_group_member_observed_role_t_to_sai( + lemming::dataplane::sai::NextHopGroupMemberObservedRole val) { + switch (val) { + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_ACTIVE: + return SAI_NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_ACTIVE; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_INACTIVE: + return SAI_NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_INACTIVE; + + default: + return SAI_NEXT_HOP_GROUP_MEMBER_OBSERVED_ROLE_ACTIVE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_member_observed_role_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_next_hop_group_member_observed_role_t_to_proto( + list.list[i])); + } + return proto_list; +} +void convert_list_sai_next_hop_group_member_observed_role_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_next_hop_group_member_observed_role_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NextHopGroupType +convert_sai_next_hop_group_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP: + return lemming::dataplane::sai:: + NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP; + + case SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_ORDERED_ECMP: + return lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_DYNAMIC_ORDERED_ECMP; + + case SAI_NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP: + return lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP; + + case SAI_NEXT_HOP_GROUP_TYPE_PROTECTION: + return lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_PROTECTION; + + case SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED: + return lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_CLASS_BASED; + + case SAI_NEXT_HOP_GROUP_TYPE_ECMP_WITH_MEMBERS: + return lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_ECMP_WITH_MEMBERS; + + default: + return lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_UNSPECIFIED; + } +} +sai_next_hop_group_type_t convert_sai_next_hop_group_type_t_to_sai( + lemming::dataplane::sai::NextHopGroupType val) { + switch (val) { + case lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP: + return SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_DYNAMIC_ORDERED_ECMP: + return SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_ORDERED_ECMP; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP: + return SAI_NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_PROTECTION: + return SAI_NEXT_HOP_GROUP_TYPE_PROTECTION; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_CLASS_BASED: + return SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED; + + case lemming::dataplane::sai::NEXT_HOP_GROUP_TYPE_ECMP_WITH_MEMBERS: + return SAI_NEXT_HOP_GROUP_TYPE_ECMP_WITH_MEMBERS; + + default: + return SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_next_hop_group_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_next_hop_group_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_next_hop_group_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::NextHopType convert_sai_next_hop_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_NEXT_HOP_TYPE_IP: + return lemming::dataplane::sai::NEXT_HOP_TYPE_IP; + + case SAI_NEXT_HOP_TYPE_MPLS: + return lemming::dataplane::sai::NEXT_HOP_TYPE_MPLS; + + case SAI_NEXT_HOP_TYPE_TUNNEL_ENCAP: + return lemming::dataplane::sai::NEXT_HOP_TYPE_TUNNEL_ENCAP; + + case SAI_NEXT_HOP_TYPE_SRV6_SIDLIST: + return lemming::dataplane::sai::NEXT_HOP_TYPE_SRV6_SIDLIST; + + default: + return lemming::dataplane::sai::NEXT_HOP_TYPE_UNSPECIFIED; + } +} +sai_next_hop_type_t convert_sai_next_hop_type_t_to_sai( + lemming::dataplane::sai::NextHopType val) { + switch (val) { + case lemming::dataplane::sai::NEXT_HOP_TYPE_IP: + return SAI_NEXT_HOP_TYPE_IP; + + case lemming::dataplane::sai::NEXT_HOP_TYPE_MPLS: + return SAI_NEXT_HOP_TYPE_MPLS; + + case lemming::dataplane::sai::NEXT_HOP_TYPE_TUNNEL_ENCAP: + return SAI_NEXT_HOP_TYPE_TUNNEL_ENCAP; + + case lemming::dataplane::sai::NEXT_HOP_TYPE_SRV6_SIDLIST: + return SAI_NEXT_HOP_TYPE_SRV6_SIDLIST; + + default: + return SAI_NEXT_HOP_TYPE_IP; + } +} + +google::protobuf::RepeatedField convert_list_sai_next_hop_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_next_hop_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_next_hop_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_next_hop_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::ObjectStage convert_sai_object_stage_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_OBJECT_STAGE_BOTH: + return lemming::dataplane::sai::OBJECT_STAGE_BOTH; + + case SAI_OBJECT_STAGE_INGRESS: + return lemming::dataplane::sai::OBJECT_STAGE_INGRESS; + + case SAI_OBJECT_STAGE_EGRESS: + return lemming::dataplane::sai::OBJECT_STAGE_EGRESS; + + default: + return lemming::dataplane::sai::OBJECT_STAGE_UNSPECIFIED; + } +} +sai_object_stage_t convert_sai_object_stage_t_to_sai( + lemming::dataplane::sai::ObjectStage val) { + switch (val) { + case lemming::dataplane::sai::OBJECT_STAGE_BOTH: + return SAI_OBJECT_STAGE_BOTH; + + case lemming::dataplane::sai::OBJECT_STAGE_INGRESS: + return SAI_OBJECT_STAGE_INGRESS; + + case lemming::dataplane::sai::OBJECT_STAGE_EGRESS: + return SAI_OBJECT_STAGE_EGRESS; + + default: + return SAI_OBJECT_STAGE_BOTH; + } +} + +google::protobuf::RepeatedField convert_list_sai_object_stage_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_object_stage_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_object_stage_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_object_stage_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::ObjectTypeExtensions +convert_sai_object_type_extensions_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START: + return lemming::dataplane::sai::OBJECT_TYPE_EXTENSIONS_RANGE_START; + + case SAI_OBJECT_TYPE_TABLE_BITMAP_ROUTER_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_TABLE_BITMAP_ROUTER_ENTRY; + + case SAI_OBJECT_TYPE_TABLE_META_TUNNEL_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_TABLE_META_TUNNEL_ENTRY; + + case SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END: + return lemming::dataplane::sai::OBJECT_TYPE_EXTENSIONS_RANGE_END; + + default: + return lemming::dataplane::sai::OBJECT_TYPE_EXTENSIONS_UNSPECIFIED; + } +} +sai_object_type_extensions_t convert_sai_object_type_extensions_t_to_sai( + lemming::dataplane::sai::ObjectTypeExtensions val) { + switch (val) { + case lemming::dataplane::sai::OBJECT_TYPE_EXTENSIONS_RANGE_START: + return SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START; + + case lemming::dataplane::sai::OBJECT_TYPE_TABLE_BITMAP_ROUTER_ENTRY: + return SAI_OBJECT_TYPE_TABLE_BITMAP_ROUTER_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_TABLE_META_TUNNEL_ENTRY: + return SAI_OBJECT_TYPE_TABLE_META_TUNNEL_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_EXTENSIONS_RANGE_END: + return SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END; + + default: + return SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START; + } +} + +google::protobuf::RepeatedField +convert_list_sai_object_type_extensions_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_object_type_extensions_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_object_type_extensions_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_object_type_extensions_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::ObjectType convert_sai_object_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_OBJECT_TYPE_NULL: + return lemming::dataplane::sai::OBJECT_TYPE_NULL; + + case SAI_OBJECT_TYPE_PORT: + return lemming::dataplane::sai::OBJECT_TYPE_PORT; + + case SAI_OBJECT_TYPE_LAG: + return lemming::dataplane::sai::OBJECT_TYPE_LAG; + + case SAI_OBJECT_TYPE_VIRTUAL_ROUTER: + return lemming::dataplane::sai::OBJECT_TYPE_VIRTUAL_ROUTER; + + case SAI_OBJECT_TYPE_NEXT_HOP: + return lemming::dataplane::sai::OBJECT_TYPE_NEXT_HOP; + + case SAI_OBJECT_TYPE_NEXT_HOP_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_NEXT_HOP_GROUP; + + case SAI_OBJECT_TYPE_ROUTER_INTERFACE: + return lemming::dataplane::sai::OBJECT_TYPE_ROUTER_INTERFACE; + + case SAI_OBJECT_TYPE_ACL_TABLE: + return lemming::dataplane::sai::OBJECT_TYPE_ACL_TABLE; + + case SAI_OBJECT_TYPE_ACL_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_ACL_ENTRY; + + case SAI_OBJECT_TYPE_ACL_COUNTER: + return lemming::dataplane::sai::OBJECT_TYPE_ACL_COUNTER; + + case SAI_OBJECT_TYPE_ACL_RANGE: + return lemming::dataplane::sai::OBJECT_TYPE_ACL_RANGE; + + case SAI_OBJECT_TYPE_ACL_TABLE_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_ACL_TABLE_GROUP; + + case SAI_OBJECT_TYPE_ACL_TABLE_GROUP_MEMBER: + return lemming::dataplane::sai::OBJECT_TYPE_ACL_TABLE_GROUP_MEMBER; + + case SAI_OBJECT_TYPE_HOSTIF: + return lemming::dataplane::sai::OBJECT_TYPE_HOSTIF; + + case SAI_OBJECT_TYPE_MIRROR_SESSION: + return lemming::dataplane::sai::OBJECT_TYPE_MIRROR_SESSION; + + case SAI_OBJECT_TYPE_SAMPLEPACKET: + return lemming::dataplane::sai::OBJECT_TYPE_SAMPLEPACKET; + + case SAI_OBJECT_TYPE_STP: + return lemming::dataplane::sai::OBJECT_TYPE_STP; + + case SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_TRAP_GROUP; + + case SAI_OBJECT_TYPE_POLICER: + return lemming::dataplane::sai::OBJECT_TYPE_POLICER; + + case SAI_OBJECT_TYPE_WRED: + return lemming::dataplane::sai::OBJECT_TYPE_WRED; + + case SAI_OBJECT_TYPE_QOS_MAP: + return lemming::dataplane::sai::OBJECT_TYPE_QOS_MAP; + + case SAI_OBJECT_TYPE_QUEUE: + return lemming::dataplane::sai::OBJECT_TYPE_QUEUE; + + case SAI_OBJECT_TYPE_SCHEDULER: + return lemming::dataplane::sai::OBJECT_TYPE_SCHEDULER; + + case SAI_OBJECT_TYPE_SCHEDULER_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_SCHEDULER_GROUP; + + case SAI_OBJECT_TYPE_BUFFER_POOL: + return lemming::dataplane::sai::OBJECT_TYPE_BUFFER_POOL; + + case SAI_OBJECT_TYPE_BUFFER_PROFILE: + return lemming::dataplane::sai::OBJECT_TYPE_BUFFER_PROFILE; + + case SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_INGRESS_PRIORITY_GROUP; + + case SAI_OBJECT_TYPE_LAG_MEMBER: + return lemming::dataplane::sai::OBJECT_TYPE_LAG_MEMBER; + + case SAI_OBJECT_TYPE_HASH: + return lemming::dataplane::sai::OBJECT_TYPE_HASH; + + case SAI_OBJECT_TYPE_UDF: + return lemming::dataplane::sai::OBJECT_TYPE_UDF; + + case SAI_OBJECT_TYPE_UDF_MATCH: + return lemming::dataplane::sai::OBJECT_TYPE_UDF_MATCH; + + case SAI_OBJECT_TYPE_UDF_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_UDF_GROUP; + + case SAI_OBJECT_TYPE_FDB_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_FDB_ENTRY; + + case SAI_OBJECT_TYPE_SWITCH: + return lemming::dataplane::sai::OBJECT_TYPE_SWITCH; + + case SAI_OBJECT_TYPE_HOSTIF_TRAP: + return lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_TRAP; + + case SAI_OBJECT_TYPE_HOSTIF_TABLE_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_TABLE_ENTRY; + + case SAI_OBJECT_TYPE_NEIGHBOR_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_NEIGHBOR_ENTRY; + + case SAI_OBJECT_TYPE_ROUTE_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_ROUTE_ENTRY; + + case SAI_OBJECT_TYPE_VLAN: + return lemming::dataplane::sai::OBJECT_TYPE_VLAN; + + case SAI_OBJECT_TYPE_VLAN_MEMBER: + return lemming::dataplane::sai::OBJECT_TYPE_VLAN_MEMBER; + + case SAI_OBJECT_TYPE_HOSTIF_PACKET: + return lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_PACKET; + + case SAI_OBJECT_TYPE_TUNNEL_MAP: + return lemming::dataplane::sai::OBJECT_TYPE_TUNNEL_MAP; + + case SAI_OBJECT_TYPE_TUNNEL: + return lemming::dataplane::sai::OBJECT_TYPE_TUNNEL; + + case SAI_OBJECT_TYPE_TUNNEL_TERM_TABLE_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_TUNNEL_TERM_TABLE_ENTRY; + + case SAI_OBJECT_TYPE_FDB_FLUSH: + return lemming::dataplane::sai::OBJECT_TYPE_FDB_FLUSH; + + case SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER: + return lemming::dataplane::sai::OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER; + + case SAI_OBJECT_TYPE_STP_PORT: + return lemming::dataplane::sai::OBJECT_TYPE_STP_PORT; + + case SAI_OBJECT_TYPE_RPF_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_RPF_GROUP; + + case SAI_OBJECT_TYPE_RPF_GROUP_MEMBER: + return lemming::dataplane::sai::OBJECT_TYPE_RPF_GROUP_MEMBER; + + case SAI_OBJECT_TYPE_L2MC_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_L2MC_GROUP; + + case SAI_OBJECT_TYPE_L2MC_GROUP_MEMBER: + return lemming::dataplane::sai::OBJECT_TYPE_L2MC_GROUP_MEMBER; + + case SAI_OBJECT_TYPE_IPMC_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_IPMC_GROUP; + + case SAI_OBJECT_TYPE_IPMC_GROUP_MEMBER: + return lemming::dataplane::sai::OBJECT_TYPE_IPMC_GROUP_MEMBER; + + case SAI_OBJECT_TYPE_L2MC_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_L2MC_ENTRY; + + case SAI_OBJECT_TYPE_IPMC_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_IPMC_ENTRY; + + case SAI_OBJECT_TYPE_MCAST_FDB_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_MCAST_FDB_ENTRY; + + case SAI_OBJECT_TYPE_HOSTIF_USER_DEFINED_TRAP: + return lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_USER_DEFINED_TRAP; + + case SAI_OBJECT_TYPE_BRIDGE: + return lemming::dataplane::sai::OBJECT_TYPE_BRIDGE; + + case SAI_OBJECT_TYPE_BRIDGE_PORT: + return lemming::dataplane::sai::OBJECT_TYPE_BRIDGE_PORT; + + case SAI_OBJECT_TYPE_TUNNEL_MAP_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_TUNNEL_MAP_ENTRY; + + case SAI_OBJECT_TYPE_TAM: + return lemming::dataplane::sai::OBJECT_TYPE_TAM; + + case SAI_OBJECT_TYPE_SRV6_SIDLIST: + return lemming::dataplane::sai::OBJECT_TYPE_SRV6_SIDLIST; + + case SAI_OBJECT_TYPE_PORT_POOL: + return lemming::dataplane::sai::OBJECT_TYPE_PORT_POOL; + + case SAI_OBJECT_TYPE_INSEG_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_INSEG_ENTRY; + + case SAI_OBJECT_TYPE_DTEL: + return lemming::dataplane::sai::OBJECT_TYPE_DTEL; + + case SAI_OBJECT_TYPE_DTEL_QUEUE_REPORT: + return lemming::dataplane::sai::OBJECT_TYPE_DTEL_QUEUE_REPORT; + + case SAI_OBJECT_TYPE_DTEL_INT_SESSION: + return lemming::dataplane::sai::OBJECT_TYPE_DTEL_INT_SESSION; + + case SAI_OBJECT_TYPE_DTEL_REPORT_SESSION: + return lemming::dataplane::sai::OBJECT_TYPE_DTEL_REPORT_SESSION; + + case SAI_OBJECT_TYPE_DTEL_EVENT: + return lemming::dataplane::sai::OBJECT_TYPE_DTEL_EVENT; + + case SAI_OBJECT_TYPE_BFD_SESSION: + return lemming::dataplane::sai::OBJECT_TYPE_BFD_SESSION; + + case SAI_OBJECT_TYPE_ISOLATION_GROUP: + return lemming::dataplane::sai::OBJECT_TYPE_ISOLATION_GROUP; + + case SAI_OBJECT_TYPE_ISOLATION_GROUP_MEMBER: + return lemming::dataplane::sai::OBJECT_TYPE_ISOLATION_GROUP_MEMBER; + + case SAI_OBJECT_TYPE_TAM_MATH_FUNC: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_MATH_FUNC; + + case SAI_OBJECT_TYPE_TAM_REPORT: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_REPORT; + + case SAI_OBJECT_TYPE_TAM_EVENT_THRESHOLD: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_EVENT_THRESHOLD; + + case SAI_OBJECT_TYPE_TAM_TEL_TYPE: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_TEL_TYPE; + + case SAI_OBJECT_TYPE_TAM_TRANSPORT: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_TRANSPORT; + + case SAI_OBJECT_TYPE_TAM_TELEMETRY: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_TELEMETRY; + + case SAI_OBJECT_TYPE_TAM_COLLECTOR: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_COLLECTOR; + + case SAI_OBJECT_TYPE_TAM_EVENT_ACTION: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_EVENT_ACTION; + + case SAI_OBJECT_TYPE_TAM_EVENT: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_EVENT; + + case SAI_OBJECT_TYPE_NAT_ZONE_COUNTER: + return lemming::dataplane::sai::OBJECT_TYPE_NAT_ZONE_COUNTER; + + case SAI_OBJECT_TYPE_NAT_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_NAT_ENTRY; + + case SAI_OBJECT_TYPE_TAM_INT: + return lemming::dataplane::sai::OBJECT_TYPE_TAM_INT; + + case SAI_OBJECT_TYPE_COUNTER: + return lemming::dataplane::sai::OBJECT_TYPE_COUNTER; + + case SAI_OBJECT_TYPE_DEBUG_COUNTER: + return lemming::dataplane::sai::OBJECT_TYPE_DEBUG_COUNTER; + + case SAI_OBJECT_TYPE_PORT_CONNECTOR: + return lemming::dataplane::sai::OBJECT_TYPE_PORT_CONNECTOR; + + case SAI_OBJECT_TYPE_PORT_SERDES: + return lemming::dataplane::sai::OBJECT_TYPE_PORT_SERDES; + + case SAI_OBJECT_TYPE_MACSEC: + return lemming::dataplane::sai::OBJECT_TYPE_MACSEC; + + case SAI_OBJECT_TYPE_MACSEC_PORT: + return lemming::dataplane::sai::OBJECT_TYPE_MACSEC_PORT; + + case SAI_OBJECT_TYPE_MACSEC_FLOW: + return lemming::dataplane::sai::OBJECT_TYPE_MACSEC_FLOW; + + case SAI_OBJECT_TYPE_MACSEC_SC: + return lemming::dataplane::sai::OBJECT_TYPE_MACSEC_SC; + + case SAI_OBJECT_TYPE_MACSEC_SA: + return lemming::dataplane::sai::OBJECT_TYPE_MACSEC_SA; + + case SAI_OBJECT_TYPE_SYSTEM_PORT: + return lemming::dataplane::sai::OBJECT_TYPE_SYSTEM_PORT; + + case SAI_OBJECT_TYPE_FINE_GRAINED_HASH_FIELD: + return lemming::dataplane::sai::OBJECT_TYPE_FINE_GRAINED_HASH_FIELD; + + case SAI_OBJECT_TYPE_SWITCH_TUNNEL: + return lemming::dataplane::sai::OBJECT_TYPE_SWITCH_TUNNEL; + + case SAI_OBJECT_TYPE_MY_SID_ENTRY: + return lemming::dataplane::sai::OBJECT_TYPE_MY_SID_ENTRY; + + case SAI_OBJECT_TYPE_MY_MAC: + return lemming::dataplane::sai::OBJECT_TYPE_MY_MAC; + + case SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MAP: + return lemming::dataplane::sai::OBJECT_TYPE_NEXT_HOP_GROUP_MAP; + + case SAI_OBJECT_TYPE_IPSEC: + return lemming::dataplane::sai::OBJECT_TYPE_IPSEC; + + case SAI_OBJECT_TYPE_IPSEC_PORT: + return lemming::dataplane::sai::OBJECT_TYPE_IPSEC_PORT; + + case SAI_OBJECT_TYPE_IPSEC_SA: + return lemming::dataplane::sai::OBJECT_TYPE_IPSEC_SA; + + case SAI_OBJECT_TYPE_GENERIC_PROGRAMMABLE: + return lemming::dataplane::sai::OBJECT_TYPE_GENERIC_PROGRAMMABLE; + + case SAI_OBJECT_TYPE_MAX: + return lemming::dataplane::sai::OBJECT_TYPE_MAX; + + default: + return lemming::dataplane::sai::OBJECT_TYPE_UNSPECIFIED; + } +} +sai_object_type_t convert_sai_object_type_t_to_sai( + lemming::dataplane::sai::ObjectType val) { + switch (val) { + case lemming::dataplane::sai::OBJECT_TYPE_NULL: + return SAI_OBJECT_TYPE_NULL; + + case lemming::dataplane::sai::OBJECT_TYPE_PORT: + return SAI_OBJECT_TYPE_PORT; + + case lemming::dataplane::sai::OBJECT_TYPE_LAG: + return SAI_OBJECT_TYPE_LAG; + + case lemming::dataplane::sai::OBJECT_TYPE_VIRTUAL_ROUTER: + return SAI_OBJECT_TYPE_VIRTUAL_ROUTER; + + case lemming::dataplane::sai::OBJECT_TYPE_NEXT_HOP: + return SAI_OBJECT_TYPE_NEXT_HOP; + + case lemming::dataplane::sai::OBJECT_TYPE_NEXT_HOP_GROUP: + return SAI_OBJECT_TYPE_NEXT_HOP_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_ROUTER_INTERFACE: + return SAI_OBJECT_TYPE_ROUTER_INTERFACE; + + case lemming::dataplane::sai::OBJECT_TYPE_ACL_TABLE: + return SAI_OBJECT_TYPE_ACL_TABLE; + + case lemming::dataplane::sai::OBJECT_TYPE_ACL_ENTRY: + return SAI_OBJECT_TYPE_ACL_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_ACL_COUNTER: + return SAI_OBJECT_TYPE_ACL_COUNTER; + + case lemming::dataplane::sai::OBJECT_TYPE_ACL_RANGE: + return SAI_OBJECT_TYPE_ACL_RANGE; + + case lemming::dataplane::sai::OBJECT_TYPE_ACL_TABLE_GROUP: + return SAI_OBJECT_TYPE_ACL_TABLE_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_ACL_TABLE_GROUP_MEMBER: + return SAI_OBJECT_TYPE_ACL_TABLE_GROUP_MEMBER; + + case lemming::dataplane::sai::OBJECT_TYPE_HOSTIF: + return SAI_OBJECT_TYPE_HOSTIF; + + case lemming::dataplane::sai::OBJECT_TYPE_MIRROR_SESSION: + return SAI_OBJECT_TYPE_MIRROR_SESSION; + + case lemming::dataplane::sai::OBJECT_TYPE_SAMPLEPACKET: + return SAI_OBJECT_TYPE_SAMPLEPACKET; + + case lemming::dataplane::sai::OBJECT_TYPE_STP: + return SAI_OBJECT_TYPE_STP; + + case lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_TRAP_GROUP: + return SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_POLICER: + return SAI_OBJECT_TYPE_POLICER; + + case lemming::dataplane::sai::OBJECT_TYPE_WRED: + return SAI_OBJECT_TYPE_WRED; + + case lemming::dataplane::sai::OBJECT_TYPE_QOS_MAP: + return SAI_OBJECT_TYPE_QOS_MAP; + + case lemming::dataplane::sai::OBJECT_TYPE_QUEUE: + return SAI_OBJECT_TYPE_QUEUE; + + case lemming::dataplane::sai::OBJECT_TYPE_SCHEDULER: + return SAI_OBJECT_TYPE_SCHEDULER; + + case lemming::dataplane::sai::OBJECT_TYPE_SCHEDULER_GROUP: + return SAI_OBJECT_TYPE_SCHEDULER_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_BUFFER_POOL: + return SAI_OBJECT_TYPE_BUFFER_POOL; + + case lemming::dataplane::sai::OBJECT_TYPE_BUFFER_PROFILE: + return SAI_OBJECT_TYPE_BUFFER_PROFILE; + + case lemming::dataplane::sai::OBJECT_TYPE_INGRESS_PRIORITY_GROUP: + return SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_LAG_MEMBER: + return SAI_OBJECT_TYPE_LAG_MEMBER; + + case lemming::dataplane::sai::OBJECT_TYPE_HASH: + return SAI_OBJECT_TYPE_HASH; + + case lemming::dataplane::sai::OBJECT_TYPE_UDF: + return SAI_OBJECT_TYPE_UDF; + + case lemming::dataplane::sai::OBJECT_TYPE_UDF_MATCH: + return SAI_OBJECT_TYPE_UDF_MATCH; + + case lemming::dataplane::sai::OBJECT_TYPE_UDF_GROUP: + return SAI_OBJECT_TYPE_UDF_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_FDB_ENTRY: + return SAI_OBJECT_TYPE_FDB_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_SWITCH: + return SAI_OBJECT_TYPE_SWITCH; + + case lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_TRAP: + return SAI_OBJECT_TYPE_HOSTIF_TRAP; + + case lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_TABLE_ENTRY: + return SAI_OBJECT_TYPE_HOSTIF_TABLE_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_NEIGHBOR_ENTRY: + return SAI_OBJECT_TYPE_NEIGHBOR_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_ROUTE_ENTRY: + return SAI_OBJECT_TYPE_ROUTE_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_VLAN: + return SAI_OBJECT_TYPE_VLAN; + + case lemming::dataplane::sai::OBJECT_TYPE_VLAN_MEMBER: + return SAI_OBJECT_TYPE_VLAN_MEMBER; + + case lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_PACKET: + return SAI_OBJECT_TYPE_HOSTIF_PACKET; + + case lemming::dataplane::sai::OBJECT_TYPE_TUNNEL_MAP: + return SAI_OBJECT_TYPE_TUNNEL_MAP; + + case lemming::dataplane::sai::OBJECT_TYPE_TUNNEL: + return SAI_OBJECT_TYPE_TUNNEL; + + case lemming::dataplane::sai::OBJECT_TYPE_TUNNEL_TERM_TABLE_ENTRY: + return SAI_OBJECT_TYPE_TUNNEL_TERM_TABLE_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_FDB_FLUSH: + return SAI_OBJECT_TYPE_FDB_FLUSH; + + case lemming::dataplane::sai::OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER: + return SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER; + + case lemming::dataplane::sai::OBJECT_TYPE_STP_PORT: + return SAI_OBJECT_TYPE_STP_PORT; + + case lemming::dataplane::sai::OBJECT_TYPE_RPF_GROUP: + return SAI_OBJECT_TYPE_RPF_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_RPF_GROUP_MEMBER: + return SAI_OBJECT_TYPE_RPF_GROUP_MEMBER; + + case lemming::dataplane::sai::OBJECT_TYPE_L2MC_GROUP: + return SAI_OBJECT_TYPE_L2MC_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_L2MC_GROUP_MEMBER: + return SAI_OBJECT_TYPE_L2MC_GROUP_MEMBER; + + case lemming::dataplane::sai::OBJECT_TYPE_IPMC_GROUP: + return SAI_OBJECT_TYPE_IPMC_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_IPMC_GROUP_MEMBER: + return SAI_OBJECT_TYPE_IPMC_GROUP_MEMBER; + + case lemming::dataplane::sai::OBJECT_TYPE_L2MC_ENTRY: + return SAI_OBJECT_TYPE_L2MC_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_IPMC_ENTRY: + return SAI_OBJECT_TYPE_IPMC_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_MCAST_FDB_ENTRY: + return SAI_OBJECT_TYPE_MCAST_FDB_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_HOSTIF_USER_DEFINED_TRAP: + return SAI_OBJECT_TYPE_HOSTIF_USER_DEFINED_TRAP; + + case lemming::dataplane::sai::OBJECT_TYPE_BRIDGE: + return SAI_OBJECT_TYPE_BRIDGE; + + case lemming::dataplane::sai::OBJECT_TYPE_BRIDGE_PORT: + return SAI_OBJECT_TYPE_BRIDGE_PORT; + + case lemming::dataplane::sai::OBJECT_TYPE_TUNNEL_MAP_ENTRY: + return SAI_OBJECT_TYPE_TUNNEL_MAP_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM: + return SAI_OBJECT_TYPE_TAM; + + case lemming::dataplane::sai::OBJECT_TYPE_SRV6_SIDLIST: + return SAI_OBJECT_TYPE_SRV6_SIDLIST; + + case lemming::dataplane::sai::OBJECT_TYPE_PORT_POOL: + return SAI_OBJECT_TYPE_PORT_POOL; + + case lemming::dataplane::sai::OBJECT_TYPE_INSEG_ENTRY: + return SAI_OBJECT_TYPE_INSEG_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_DTEL: + return SAI_OBJECT_TYPE_DTEL; + + case lemming::dataplane::sai::OBJECT_TYPE_DTEL_QUEUE_REPORT: + return SAI_OBJECT_TYPE_DTEL_QUEUE_REPORT; + + case lemming::dataplane::sai::OBJECT_TYPE_DTEL_INT_SESSION: + return SAI_OBJECT_TYPE_DTEL_INT_SESSION; + + case lemming::dataplane::sai::OBJECT_TYPE_DTEL_REPORT_SESSION: + return SAI_OBJECT_TYPE_DTEL_REPORT_SESSION; + + case lemming::dataplane::sai::OBJECT_TYPE_DTEL_EVENT: + return SAI_OBJECT_TYPE_DTEL_EVENT; + + case lemming::dataplane::sai::OBJECT_TYPE_BFD_SESSION: + return SAI_OBJECT_TYPE_BFD_SESSION; + + case lemming::dataplane::sai::OBJECT_TYPE_ISOLATION_GROUP: + return SAI_OBJECT_TYPE_ISOLATION_GROUP; + + case lemming::dataplane::sai::OBJECT_TYPE_ISOLATION_GROUP_MEMBER: + return SAI_OBJECT_TYPE_ISOLATION_GROUP_MEMBER; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_MATH_FUNC: + return SAI_OBJECT_TYPE_TAM_MATH_FUNC; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_REPORT: + return SAI_OBJECT_TYPE_TAM_REPORT; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_EVENT_THRESHOLD: + return SAI_OBJECT_TYPE_TAM_EVENT_THRESHOLD; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_TEL_TYPE: + return SAI_OBJECT_TYPE_TAM_TEL_TYPE; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_TRANSPORT: + return SAI_OBJECT_TYPE_TAM_TRANSPORT; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_TELEMETRY: + return SAI_OBJECT_TYPE_TAM_TELEMETRY; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_COLLECTOR: + return SAI_OBJECT_TYPE_TAM_COLLECTOR; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_EVENT_ACTION: + return SAI_OBJECT_TYPE_TAM_EVENT_ACTION; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_EVENT: + return SAI_OBJECT_TYPE_TAM_EVENT; + + case lemming::dataplane::sai::OBJECT_TYPE_NAT_ZONE_COUNTER: + return SAI_OBJECT_TYPE_NAT_ZONE_COUNTER; + + case lemming::dataplane::sai::OBJECT_TYPE_NAT_ENTRY: + return SAI_OBJECT_TYPE_NAT_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_TAM_INT: + return SAI_OBJECT_TYPE_TAM_INT; + + case lemming::dataplane::sai::OBJECT_TYPE_COUNTER: + return SAI_OBJECT_TYPE_COUNTER; + + case lemming::dataplane::sai::OBJECT_TYPE_DEBUG_COUNTER: + return SAI_OBJECT_TYPE_DEBUG_COUNTER; + + case lemming::dataplane::sai::OBJECT_TYPE_PORT_CONNECTOR: + return SAI_OBJECT_TYPE_PORT_CONNECTOR; + + case lemming::dataplane::sai::OBJECT_TYPE_PORT_SERDES: + return SAI_OBJECT_TYPE_PORT_SERDES; + + case lemming::dataplane::sai::OBJECT_TYPE_MACSEC: + return SAI_OBJECT_TYPE_MACSEC; + + case lemming::dataplane::sai::OBJECT_TYPE_MACSEC_PORT: + return SAI_OBJECT_TYPE_MACSEC_PORT; + + case lemming::dataplane::sai::OBJECT_TYPE_MACSEC_FLOW: + return SAI_OBJECT_TYPE_MACSEC_FLOW; + + case lemming::dataplane::sai::OBJECT_TYPE_MACSEC_SC: + return SAI_OBJECT_TYPE_MACSEC_SC; + + case lemming::dataplane::sai::OBJECT_TYPE_MACSEC_SA: + return SAI_OBJECT_TYPE_MACSEC_SA; + + case lemming::dataplane::sai::OBJECT_TYPE_SYSTEM_PORT: + return SAI_OBJECT_TYPE_SYSTEM_PORT; + + case lemming::dataplane::sai::OBJECT_TYPE_FINE_GRAINED_HASH_FIELD: + return SAI_OBJECT_TYPE_FINE_GRAINED_HASH_FIELD; + + case lemming::dataplane::sai::OBJECT_TYPE_SWITCH_TUNNEL: + return SAI_OBJECT_TYPE_SWITCH_TUNNEL; + + case lemming::dataplane::sai::OBJECT_TYPE_MY_SID_ENTRY: + return SAI_OBJECT_TYPE_MY_SID_ENTRY; + + case lemming::dataplane::sai::OBJECT_TYPE_MY_MAC: + return SAI_OBJECT_TYPE_MY_MAC; + + case lemming::dataplane::sai::OBJECT_TYPE_NEXT_HOP_GROUP_MAP: + return SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MAP; + + case lemming::dataplane::sai::OBJECT_TYPE_IPSEC: + return SAI_OBJECT_TYPE_IPSEC; + + case lemming::dataplane::sai::OBJECT_TYPE_IPSEC_PORT: + return SAI_OBJECT_TYPE_IPSEC_PORT; + + case lemming::dataplane::sai::OBJECT_TYPE_IPSEC_SA: + return SAI_OBJECT_TYPE_IPSEC_SA; + + case lemming::dataplane::sai::OBJECT_TYPE_GENERIC_PROGRAMMABLE: + return SAI_OBJECT_TYPE_GENERIC_PROGRAMMABLE; + + case lemming::dataplane::sai::OBJECT_TYPE_MAX: + return SAI_OBJECT_TYPE_MAX; + + default: + return SAI_OBJECT_TYPE_NULL; + } +} + +google::protobuf::RepeatedField convert_list_sai_object_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_object_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_object_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_object_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::OutDropReason convert_sai_out_drop_reason_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_OUT_DROP_REASON_START: + return lemming::dataplane::sai::OUT_DROP_REASON_START; + + case SAI_OUT_DROP_REASON_EGRESS_VLAN_FILTER: + return lemming::dataplane::sai::OUT_DROP_REASON_EGRESS_VLAN_FILTER; + + case SAI_OUT_DROP_REASON_L3_ANY: + return lemming::dataplane::sai::OUT_DROP_REASON_L3_ANY; + + case SAI_OUT_DROP_REASON_L3_EGRESS_LINK_DOWN: + return lemming::dataplane::sai::OUT_DROP_REASON_L3_EGRESS_LINK_DOWN; + + case SAI_OUT_DROP_REASON_TUNNEL_LOOPBACK_PACKET_DROP: + return lemming::dataplane::sai:: + OUT_DROP_REASON_TUNNEL_LOOPBACK_PACKET_DROP; + + case SAI_OUT_DROP_REASON_END: + return lemming::dataplane::sai::OUT_DROP_REASON_END; + + case SAI_OUT_DROP_REASON_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::OUT_DROP_REASON_CUSTOM_RANGE_BASE; + + case SAI_OUT_DROP_REASON_CUSTOM_RANGE_END: + return lemming::dataplane::sai::OUT_DROP_REASON_CUSTOM_RANGE_END; + + default: + return lemming::dataplane::sai::OUT_DROP_REASON_UNSPECIFIED; + } +} +sai_out_drop_reason_t convert_sai_out_drop_reason_t_to_sai( + lemming::dataplane::sai::OutDropReason val) { + switch (val) { + case lemming::dataplane::sai::OUT_DROP_REASON_START: + return SAI_OUT_DROP_REASON_START; + + case lemming::dataplane::sai::OUT_DROP_REASON_EGRESS_VLAN_FILTER: + return SAI_OUT_DROP_REASON_EGRESS_VLAN_FILTER; + + case lemming::dataplane::sai::OUT_DROP_REASON_L3_ANY: + return SAI_OUT_DROP_REASON_L3_ANY; + + case lemming::dataplane::sai::OUT_DROP_REASON_L3_EGRESS_LINK_DOWN: + return SAI_OUT_DROP_REASON_L3_EGRESS_LINK_DOWN; + + case lemming::dataplane::sai::OUT_DROP_REASON_TUNNEL_LOOPBACK_PACKET_DROP: + return SAI_OUT_DROP_REASON_TUNNEL_LOOPBACK_PACKET_DROP; + + case lemming::dataplane::sai::OUT_DROP_REASON_END: + return SAI_OUT_DROP_REASON_END; + + case lemming::dataplane::sai::OUT_DROP_REASON_CUSTOM_RANGE_BASE: + return SAI_OUT_DROP_REASON_CUSTOM_RANGE_BASE; + + case lemming::dataplane::sai::OUT_DROP_REASON_CUSTOM_RANGE_END: + return SAI_OUT_DROP_REASON_CUSTOM_RANGE_END; + + default: + return SAI_OUT_DROP_REASON_START; + } +} + +google::protobuf::RepeatedField +convert_list_sai_out_drop_reason_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_out_drop_reason_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_out_drop_reason_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_out_drop_reason_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::OutsegExpMode convert_sai_outseg_exp_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_OUTSEG_EXP_MODE_UNIFORM: + return lemming::dataplane::sai::OUTSEG_EXP_MODE_UNIFORM; + + case SAI_OUTSEG_EXP_MODE_PIPE: + return lemming::dataplane::sai::OUTSEG_EXP_MODE_PIPE; + + default: + return lemming::dataplane::sai::OUTSEG_EXP_MODE_UNSPECIFIED; + } +} +sai_outseg_exp_mode_t convert_sai_outseg_exp_mode_t_to_sai( + lemming::dataplane::sai::OutsegExpMode val) { + switch (val) { + case lemming::dataplane::sai::OUTSEG_EXP_MODE_UNIFORM: + return SAI_OUTSEG_EXP_MODE_UNIFORM; + + case lemming::dataplane::sai::OUTSEG_EXP_MODE_PIPE: + return SAI_OUTSEG_EXP_MODE_PIPE; + + default: + return SAI_OUTSEG_EXP_MODE_UNIFORM; + } +} + +google::protobuf::RepeatedField +convert_list_sai_outseg_exp_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_outseg_exp_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_outseg_exp_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_outseg_exp_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::OutsegTtlMode convert_sai_outseg_ttl_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_OUTSEG_TTL_MODE_UNIFORM: + return lemming::dataplane::sai::OUTSEG_TTL_MODE_UNIFORM; + + case SAI_OUTSEG_TTL_MODE_PIPE: + return lemming::dataplane::sai::OUTSEG_TTL_MODE_PIPE; + + default: + return lemming::dataplane::sai::OUTSEG_TTL_MODE_UNSPECIFIED; + } +} +sai_outseg_ttl_mode_t convert_sai_outseg_ttl_mode_t_to_sai( + lemming::dataplane::sai::OutsegTtlMode val) { + switch (val) { + case lemming::dataplane::sai::OUTSEG_TTL_MODE_UNIFORM: + return SAI_OUTSEG_TTL_MODE_UNIFORM; + + case lemming::dataplane::sai::OUTSEG_TTL_MODE_PIPE: + return SAI_OUTSEG_TTL_MODE_PIPE; + + default: + return SAI_OUTSEG_TTL_MODE_UNIFORM; + } +} + +google::protobuf::RepeatedField +convert_list_sai_outseg_ttl_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_outseg_ttl_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_outseg_ttl_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_outseg_ttl_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::OutsegType convert_sai_outseg_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_OUTSEG_TYPE_PUSH: + return lemming::dataplane::sai::OUTSEG_TYPE_PUSH; + + case SAI_OUTSEG_TYPE_SWAP: + return lemming::dataplane::sai::OUTSEG_TYPE_SWAP; + + default: + return lemming::dataplane::sai::OUTSEG_TYPE_UNSPECIFIED; + } +} +sai_outseg_type_t convert_sai_outseg_type_t_to_sai( + lemming::dataplane::sai::OutsegType val) { + switch (val) { + case lemming::dataplane::sai::OUTSEG_TYPE_PUSH: + return SAI_OUTSEG_TYPE_PUSH; + + case lemming::dataplane::sai::OUTSEG_TYPE_SWAP: + return SAI_OUTSEG_TYPE_SWAP; + + default: + return SAI_OUTSEG_TYPE_PUSH; + } +} + +google::protobuf::RepeatedField convert_list_sai_outseg_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_outseg_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_outseg_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_outseg_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PacketAction convert_sai_packet_action_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PACKET_ACTION_DROP: + return lemming::dataplane::sai::PACKET_ACTION_DROP; + + case SAI_PACKET_ACTION_FORWARD: + return lemming::dataplane::sai::PACKET_ACTION_FORWARD; + + case SAI_PACKET_ACTION_COPY: + return lemming::dataplane::sai::PACKET_ACTION_COPY; + + case SAI_PACKET_ACTION_COPY_CANCEL: + return lemming::dataplane::sai::PACKET_ACTION_COPY_CANCEL; + + case SAI_PACKET_ACTION_TRAP: + return lemming::dataplane::sai::PACKET_ACTION_TRAP; + + case SAI_PACKET_ACTION_LOG: + return lemming::dataplane::sai::PACKET_ACTION_LOG; + + case SAI_PACKET_ACTION_DENY: + return lemming::dataplane::sai::PACKET_ACTION_DENY; + + case SAI_PACKET_ACTION_TRANSIT: + return lemming::dataplane::sai::PACKET_ACTION_TRANSIT; + + case SAI_PACKET_ACTION_DONOTDROP: + return lemming::dataplane::sai::PACKET_ACTION_DONOTDROP; + + default: + return lemming::dataplane::sai::PACKET_ACTION_UNSPECIFIED; + } +} +sai_packet_action_t convert_sai_packet_action_t_to_sai( + lemming::dataplane::sai::PacketAction val) { + switch (val) { + case lemming::dataplane::sai::PACKET_ACTION_DROP: + return SAI_PACKET_ACTION_DROP; + + case lemming::dataplane::sai::PACKET_ACTION_FORWARD: + return SAI_PACKET_ACTION_FORWARD; + + case lemming::dataplane::sai::PACKET_ACTION_COPY: + return SAI_PACKET_ACTION_COPY; + + case lemming::dataplane::sai::PACKET_ACTION_COPY_CANCEL: + return SAI_PACKET_ACTION_COPY_CANCEL; + + case lemming::dataplane::sai::PACKET_ACTION_TRAP: + return SAI_PACKET_ACTION_TRAP; + + case lemming::dataplane::sai::PACKET_ACTION_LOG: + return SAI_PACKET_ACTION_LOG; + + case lemming::dataplane::sai::PACKET_ACTION_DENY: + return SAI_PACKET_ACTION_DENY; + + case lemming::dataplane::sai::PACKET_ACTION_TRANSIT: + return SAI_PACKET_ACTION_TRANSIT; + + case lemming::dataplane::sai::PACKET_ACTION_DONOTDROP: + return SAI_PACKET_ACTION_DONOTDROP; + + default: + return SAI_PACKET_ACTION_DROP; + } +} + +google::protobuf::RepeatedField convert_list_sai_packet_action_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_packet_action_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_packet_action_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_packet_action_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PacketColor convert_sai_packet_color_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PACKET_COLOR_GREEN: + return lemming::dataplane::sai::PACKET_COLOR_GREEN; + + case SAI_PACKET_COLOR_YELLOW: + return lemming::dataplane::sai::PACKET_COLOR_YELLOW; + + case SAI_PACKET_COLOR_RED: + return lemming::dataplane::sai::PACKET_COLOR_RED; + + default: + return lemming::dataplane::sai::PACKET_COLOR_UNSPECIFIED; + } +} +sai_packet_color_t convert_sai_packet_color_t_to_sai( + lemming::dataplane::sai::PacketColor val) { + switch (val) { + case lemming::dataplane::sai::PACKET_COLOR_GREEN: + return SAI_PACKET_COLOR_GREEN; + + case lemming::dataplane::sai::PACKET_COLOR_YELLOW: + return SAI_PACKET_COLOR_YELLOW; + + case lemming::dataplane::sai::PACKET_COLOR_RED: + return SAI_PACKET_COLOR_RED; + + default: + return SAI_PACKET_COLOR_GREEN; + } +} + +google::protobuf::RepeatedField convert_list_sai_packet_color_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_packet_color_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_packet_color_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_packet_color_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PacketVlan convert_sai_packet_vlan_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PACKET_VLAN_UNTAG: + return lemming::dataplane::sai::PACKET_VLAN_UNTAG; + + case SAI_PACKET_VLAN_SINGLE_OUTER_TAG: + return lemming::dataplane::sai::PACKET_VLAN_SINGLE_OUTER_TAG; + + case SAI_PACKET_VLAN_DOUBLE_TAG: + return lemming::dataplane::sai::PACKET_VLAN_DOUBLE_TAG; + + default: + return lemming::dataplane::sai::PACKET_VLAN_UNSPECIFIED; + } +} +sai_packet_vlan_t convert_sai_packet_vlan_t_to_sai( + lemming::dataplane::sai::PacketVlan val) { + switch (val) { + case lemming::dataplane::sai::PACKET_VLAN_UNTAG: + return SAI_PACKET_VLAN_UNTAG; + + case lemming::dataplane::sai::PACKET_VLAN_SINGLE_OUTER_TAG: + return SAI_PACKET_VLAN_SINGLE_OUTER_TAG; + + case lemming::dataplane::sai::PACKET_VLAN_DOUBLE_TAG: + return SAI_PACKET_VLAN_DOUBLE_TAG; + + default: + return SAI_PACKET_VLAN_UNTAG; + } +} + +google::protobuf::RepeatedField convert_list_sai_packet_vlan_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_packet_vlan_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_packet_vlan_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_packet_vlan_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PolicerAttr convert_sai_policer_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_POLICER_ATTR_METER_TYPE: + return lemming::dataplane::sai::POLICER_ATTR_METER_TYPE; + + case SAI_POLICER_ATTR_MODE: + return lemming::dataplane::sai::POLICER_ATTR_MODE; + + case SAI_POLICER_ATTR_COLOR_SOURCE: + return lemming::dataplane::sai::POLICER_ATTR_COLOR_SOURCE; + + case SAI_POLICER_ATTR_CBS: + return lemming::dataplane::sai::POLICER_ATTR_CBS; + + case SAI_POLICER_ATTR_CIR: + return lemming::dataplane::sai::POLICER_ATTR_CIR; + + case SAI_POLICER_ATTR_PBS: + return lemming::dataplane::sai::POLICER_ATTR_PBS; + + case SAI_POLICER_ATTR_PIR: + return lemming::dataplane::sai::POLICER_ATTR_PIR; + + case SAI_POLICER_ATTR_GREEN_PACKET_ACTION: + return lemming::dataplane::sai::POLICER_ATTR_GREEN_PACKET_ACTION; + + case SAI_POLICER_ATTR_YELLOW_PACKET_ACTION: + return lemming::dataplane::sai::POLICER_ATTR_YELLOW_PACKET_ACTION; + + case SAI_POLICER_ATTR_RED_PACKET_ACTION: + return lemming::dataplane::sai::POLICER_ATTR_RED_PACKET_ACTION; + + case SAI_POLICER_ATTR_ENABLE_COUNTER_PACKET_ACTION_LIST: + return lemming::dataplane::sai:: + POLICER_ATTR_ENABLE_COUNTER_PACKET_ACTION_LIST; + + case SAI_POLICER_ATTR_OBJECT_STAGE: + return lemming::dataplane::sai::POLICER_ATTR_OBJECT_STAGE; + + default: + return lemming::dataplane::sai::POLICER_ATTR_UNSPECIFIED; + } +} +sai_policer_attr_t convert_sai_policer_attr_t_to_sai( + lemming::dataplane::sai::PolicerAttr val) { + switch (val) { + case lemming::dataplane::sai::POLICER_ATTR_METER_TYPE: + return SAI_POLICER_ATTR_METER_TYPE; + + case lemming::dataplane::sai::POLICER_ATTR_MODE: + return SAI_POLICER_ATTR_MODE; + + case lemming::dataplane::sai::POLICER_ATTR_COLOR_SOURCE: + return SAI_POLICER_ATTR_COLOR_SOURCE; + + case lemming::dataplane::sai::POLICER_ATTR_CBS: + return SAI_POLICER_ATTR_CBS; + + case lemming::dataplane::sai::POLICER_ATTR_CIR: + return SAI_POLICER_ATTR_CIR; + + case lemming::dataplane::sai::POLICER_ATTR_PBS: + return SAI_POLICER_ATTR_PBS; + + case lemming::dataplane::sai::POLICER_ATTR_PIR: + return SAI_POLICER_ATTR_PIR; + + case lemming::dataplane::sai::POLICER_ATTR_GREEN_PACKET_ACTION: + return SAI_POLICER_ATTR_GREEN_PACKET_ACTION; + + case lemming::dataplane::sai::POLICER_ATTR_YELLOW_PACKET_ACTION: + return SAI_POLICER_ATTR_YELLOW_PACKET_ACTION; + + case lemming::dataplane::sai::POLICER_ATTR_RED_PACKET_ACTION: + return SAI_POLICER_ATTR_RED_PACKET_ACTION; + + case lemming::dataplane::sai:: + POLICER_ATTR_ENABLE_COUNTER_PACKET_ACTION_LIST: + return SAI_POLICER_ATTR_ENABLE_COUNTER_PACKET_ACTION_LIST; + + case lemming::dataplane::sai::POLICER_ATTR_OBJECT_STAGE: + return SAI_POLICER_ATTR_OBJECT_STAGE; + + default: + return SAI_POLICER_ATTR_METER_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_policer_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_policer_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_policer_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_policer_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PolicerColorSource +convert_sai_policer_color_source_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_POLICER_COLOR_SOURCE_BLIND: + return lemming::dataplane::sai::POLICER_COLOR_SOURCE_BLIND; + + case SAI_POLICER_COLOR_SOURCE_AWARE: + return lemming::dataplane::sai::POLICER_COLOR_SOURCE_AWARE; + + case SAI_POLICER_COLOR_SOURCE_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::POLICER_COLOR_SOURCE_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::POLICER_COLOR_SOURCE_UNSPECIFIED; + } +} +sai_policer_color_source_t convert_sai_policer_color_source_t_to_sai( + lemming::dataplane::sai::PolicerColorSource val) { + switch (val) { + case lemming::dataplane::sai::POLICER_COLOR_SOURCE_BLIND: + return SAI_POLICER_COLOR_SOURCE_BLIND; + + case lemming::dataplane::sai::POLICER_COLOR_SOURCE_AWARE: + return SAI_POLICER_COLOR_SOURCE_AWARE; + + case lemming::dataplane::sai::POLICER_COLOR_SOURCE_CUSTOM_RANGE_BASE: + return SAI_POLICER_COLOR_SOURCE_CUSTOM_RANGE_BASE; + + default: + return SAI_POLICER_COLOR_SOURCE_BLIND; + } +} + +google::protobuf::RepeatedField +convert_list_sai_policer_color_source_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_policer_color_source_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_policer_color_source_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_policer_color_source_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PolicerMode convert_sai_policer_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_POLICER_MODE_SR_TCM: + return lemming::dataplane::sai::POLICER_MODE_SR_TCM; + + case SAI_POLICER_MODE_TR_TCM: + return lemming::dataplane::sai::POLICER_MODE_TR_TCM; + + case SAI_POLICER_MODE_STORM_CONTROL: + return lemming::dataplane::sai::POLICER_MODE_STORM_CONTROL; + + case SAI_POLICER_MODE_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::POLICER_MODE_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::POLICER_MODE_UNSPECIFIED; + } +} +sai_policer_mode_t convert_sai_policer_mode_t_to_sai( + lemming::dataplane::sai::PolicerMode val) { + switch (val) { + case lemming::dataplane::sai::POLICER_MODE_SR_TCM: + return SAI_POLICER_MODE_SR_TCM; + + case lemming::dataplane::sai::POLICER_MODE_TR_TCM: + return SAI_POLICER_MODE_TR_TCM; + + case lemming::dataplane::sai::POLICER_MODE_STORM_CONTROL: + return SAI_POLICER_MODE_STORM_CONTROL; + + case lemming::dataplane::sai::POLICER_MODE_CUSTOM_RANGE_BASE: + return SAI_POLICER_MODE_CUSTOM_RANGE_BASE; + + default: + return SAI_POLICER_MODE_SR_TCM; + } +} + +google::protobuf::RepeatedField convert_list_sai_policer_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_policer_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_policer_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_policer_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PolicerStat convert_sai_policer_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_POLICER_STAT_PACKETS: + return lemming::dataplane::sai::POLICER_STAT_PACKETS; + + case SAI_POLICER_STAT_ATTR_BYTES: + return lemming::dataplane::sai::POLICER_STAT_ATTR_BYTES; + + case SAI_POLICER_STAT_GREEN_PACKETS: + return lemming::dataplane::sai::POLICER_STAT_GREEN_PACKETS; + + case SAI_POLICER_STAT_GREEN_BYTES: + return lemming::dataplane::sai::POLICER_STAT_GREEN_BYTES; + + case SAI_POLICER_STAT_YELLOW_PACKETS: + return lemming::dataplane::sai::POLICER_STAT_YELLOW_PACKETS; + + case SAI_POLICER_STAT_YELLOW_BYTES: + return lemming::dataplane::sai::POLICER_STAT_YELLOW_BYTES; + + case SAI_POLICER_STAT_RED_PACKETS: + return lemming::dataplane::sai::POLICER_STAT_RED_PACKETS; + + case SAI_POLICER_STAT_RED_BYTES: + return lemming::dataplane::sai::POLICER_STAT_RED_BYTES; + + case SAI_POLICER_STAT_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::POLICER_STAT_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::POLICER_STAT_UNSPECIFIED; + } +} +sai_policer_stat_t convert_sai_policer_stat_t_to_sai( + lemming::dataplane::sai::PolicerStat val) { + switch (val) { + case lemming::dataplane::sai::POLICER_STAT_PACKETS: + return SAI_POLICER_STAT_PACKETS; + + case lemming::dataplane::sai::POLICER_STAT_ATTR_BYTES: + return SAI_POLICER_STAT_ATTR_BYTES; + + case lemming::dataplane::sai::POLICER_STAT_GREEN_PACKETS: + return SAI_POLICER_STAT_GREEN_PACKETS; + + case lemming::dataplane::sai::POLICER_STAT_GREEN_BYTES: + return SAI_POLICER_STAT_GREEN_BYTES; + + case lemming::dataplane::sai::POLICER_STAT_YELLOW_PACKETS: + return SAI_POLICER_STAT_YELLOW_PACKETS; + + case lemming::dataplane::sai::POLICER_STAT_YELLOW_BYTES: + return SAI_POLICER_STAT_YELLOW_BYTES; + + case lemming::dataplane::sai::POLICER_STAT_RED_PACKETS: + return SAI_POLICER_STAT_RED_PACKETS; + + case lemming::dataplane::sai::POLICER_STAT_RED_BYTES: + return SAI_POLICER_STAT_RED_BYTES; + + case lemming::dataplane::sai::POLICER_STAT_CUSTOM_RANGE_BASE: + return SAI_POLICER_STAT_CUSTOM_RANGE_BASE; + + default: + return SAI_POLICER_STAT_PACKETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_policer_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_policer_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_policer_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_policer_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortAttr convert_sai_port_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_ATTR_TYPE: + return lemming::dataplane::sai::PORT_ATTR_TYPE; + + case SAI_PORT_ATTR_OPER_STATUS: + return lemming::dataplane::sai::PORT_ATTR_OPER_STATUS; + + case SAI_PORT_ATTR_SUPPORTED_BREAKOUT_MODE_TYPE: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_BREAKOUT_MODE_TYPE; + + case SAI_PORT_ATTR_CURRENT_BREAKOUT_MODE_TYPE: + return lemming::dataplane::sai::PORT_ATTR_CURRENT_BREAKOUT_MODE_TYPE; + + case SAI_PORT_ATTR_QOS_NUMBER_OF_QUEUES: + return lemming::dataplane::sai::PORT_ATTR_QOS_NUMBER_OF_QUEUES; + + case SAI_PORT_ATTR_QOS_QUEUE_LIST: + return lemming::dataplane::sai::PORT_ATTR_QOS_QUEUE_LIST; + + case SAI_PORT_ATTR_QOS_NUMBER_OF_SCHEDULER_GROUPS: + return lemming::dataplane::sai::PORT_ATTR_QOS_NUMBER_OF_SCHEDULER_GROUPS; + + case SAI_PORT_ATTR_QOS_SCHEDULER_GROUP_LIST: + return lemming::dataplane::sai::PORT_ATTR_QOS_SCHEDULER_GROUP_LIST; + + case SAI_PORT_ATTR_QOS_MAXIMUM_HEADROOM_SIZE: + return lemming::dataplane::sai::PORT_ATTR_QOS_MAXIMUM_HEADROOM_SIZE; + + case SAI_PORT_ATTR_SUPPORTED_SPEED: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_SPEED; + + case SAI_PORT_ATTR_SUPPORTED_FEC_MODE: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_FEC_MODE; + + case SAI_PORT_ATTR_SUPPORTED_FEC_MODE_EXTENDED: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_FEC_MODE_EXTENDED; + + case SAI_PORT_ATTR_SUPPORTED_HALF_DUPLEX_SPEED: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_HALF_DUPLEX_SPEED; + + case SAI_PORT_ATTR_SUPPORTED_AUTO_NEG_MODE: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_AUTO_NEG_MODE; + + case SAI_PORT_ATTR_SUPPORTED_FLOW_CONTROL_MODE: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_FLOW_CONTROL_MODE; + + case SAI_PORT_ATTR_SUPPORTED_ASYMMETRIC_PAUSE_MODE: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_ASYMMETRIC_PAUSE_MODE; + + case SAI_PORT_ATTR_SUPPORTED_MEDIA_TYPE: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_MEDIA_TYPE; + + case SAI_PORT_ATTR_REMOTE_ADVERTISED_SPEED: + return lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_SPEED; + + case SAI_PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE: + return lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE; + + case SAI_PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE_EXTENDED: + return lemming::dataplane::sai:: + PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE_EXTENDED; + + case SAI_PORT_ATTR_REMOTE_ADVERTISED_HALF_DUPLEX_SPEED: + return lemming::dataplane::sai:: + PORT_ATTR_REMOTE_ADVERTISED_HALF_DUPLEX_SPEED; + + case SAI_PORT_ATTR_REMOTE_ADVERTISED_AUTO_NEG_MODE: + return lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_AUTO_NEG_MODE; + + case SAI_PORT_ATTR_REMOTE_ADVERTISED_FLOW_CONTROL_MODE: + return lemming::dataplane::sai:: + PORT_ATTR_REMOTE_ADVERTISED_FLOW_CONTROL_MODE; + + case SAI_PORT_ATTR_REMOTE_ADVERTISED_ASYMMETRIC_PAUSE_MODE: + return lemming::dataplane::sai:: + PORT_ATTR_REMOTE_ADVERTISED_ASYMMETRIC_PAUSE_MODE; + + case SAI_PORT_ATTR_REMOTE_ADVERTISED_MEDIA_TYPE: + return lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_MEDIA_TYPE; + + case SAI_PORT_ATTR_REMOTE_ADVERTISED_OUI_CODE: + return lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_OUI_CODE; + + case SAI_PORT_ATTR_NUMBER_OF_INGRESS_PRIORITY_GROUPS: + return lemming::dataplane::sai:: + PORT_ATTR_NUMBER_OF_INGRESS_PRIORITY_GROUPS; + + case SAI_PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST: + return lemming::dataplane::sai::PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST; + + case SAI_PORT_ATTR_EYE_VALUES: + return lemming::dataplane::sai::PORT_ATTR_EYE_VALUES; + + case SAI_PORT_ATTR_OPER_SPEED: + return lemming::dataplane::sai::PORT_ATTR_OPER_SPEED; + + case SAI_PORT_ATTR_HW_LANE_LIST: + return lemming::dataplane::sai::PORT_ATTR_HW_LANE_LIST; + + case SAI_PORT_ATTR_SPEED: + return lemming::dataplane::sai::PORT_ATTR_SPEED; + + case SAI_PORT_ATTR_FULL_DUPLEX_MODE: + return lemming::dataplane::sai::PORT_ATTR_FULL_DUPLEX_MODE; + + case SAI_PORT_ATTR_AUTO_NEG_MODE: + return lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_MODE; + + case SAI_PORT_ATTR_ADMIN_STATE: + return lemming::dataplane::sai::PORT_ATTR_ADMIN_STATE; + + case SAI_PORT_ATTR_MEDIA_TYPE: + return lemming::dataplane::sai::PORT_ATTR_MEDIA_TYPE; + + case SAI_PORT_ATTR_ADVERTISED_SPEED: + return lemming::dataplane::sai::PORT_ATTR_ADVERTISED_SPEED; + + case SAI_PORT_ATTR_ADVERTISED_FEC_MODE: + return lemming::dataplane::sai::PORT_ATTR_ADVERTISED_FEC_MODE; + + case SAI_PORT_ATTR_ADVERTISED_FEC_MODE_EXTENDED: + return lemming::dataplane::sai::PORT_ATTR_ADVERTISED_FEC_MODE_EXTENDED; + + case SAI_PORT_ATTR_ADVERTISED_HALF_DUPLEX_SPEED: + return lemming::dataplane::sai::PORT_ATTR_ADVERTISED_HALF_DUPLEX_SPEED; + + case SAI_PORT_ATTR_ADVERTISED_AUTO_NEG_MODE: + return lemming::dataplane::sai::PORT_ATTR_ADVERTISED_AUTO_NEG_MODE; + + case SAI_PORT_ATTR_ADVERTISED_FLOW_CONTROL_MODE: + return lemming::dataplane::sai::PORT_ATTR_ADVERTISED_FLOW_CONTROL_MODE; + + case SAI_PORT_ATTR_ADVERTISED_ASYMMETRIC_PAUSE_MODE: + return lemming::dataplane::sai:: + PORT_ATTR_ADVERTISED_ASYMMETRIC_PAUSE_MODE; + + case SAI_PORT_ATTR_ADVERTISED_MEDIA_TYPE: + return lemming::dataplane::sai::PORT_ATTR_ADVERTISED_MEDIA_TYPE; + + case SAI_PORT_ATTR_ADVERTISED_OUI_CODE: + return lemming::dataplane::sai::PORT_ATTR_ADVERTISED_OUI_CODE; + + case SAI_PORT_ATTR_PORT_VLAN_ID: + return lemming::dataplane::sai::PORT_ATTR_PORT_VLAN_ID; + + case SAI_PORT_ATTR_DEFAULT_VLAN_PRIORITY: + return lemming::dataplane::sai::PORT_ATTR_DEFAULT_VLAN_PRIORITY; + + case SAI_PORT_ATTR_DROP_UNTAGGED: + return lemming::dataplane::sai::PORT_ATTR_DROP_UNTAGGED; + + case SAI_PORT_ATTR_DROP_TAGGED: + return lemming::dataplane::sai::PORT_ATTR_DROP_TAGGED; + + case SAI_PORT_ATTR_INTERNAL_LOOPBACK_MODE: + return lemming::dataplane::sai::PORT_ATTR_INTERNAL_LOOPBACK_MODE; + + case SAI_PORT_ATTR_USE_EXTENDED_FEC: + return lemming::dataplane::sai::PORT_ATTR_USE_EXTENDED_FEC; + + case SAI_PORT_ATTR_FEC_MODE: + return lemming::dataplane::sai::PORT_ATTR_FEC_MODE; + + case SAI_PORT_ATTR_FEC_MODE_EXTENDED: + return lemming::dataplane::sai::PORT_ATTR_FEC_MODE_EXTENDED; + + case SAI_PORT_ATTR_UPDATE_DSCP: + return lemming::dataplane::sai::PORT_ATTR_UPDATE_DSCP; + + case SAI_PORT_ATTR_MTU: + return lemming::dataplane::sai::PORT_ATTR_MTU; + + case SAI_PORT_ATTR_FLOOD_STORM_CONTROL_POLICER_ID: + return lemming::dataplane::sai::PORT_ATTR_FLOOD_STORM_CONTROL_POLICER_ID; + + case SAI_PORT_ATTR_BROADCAST_STORM_CONTROL_POLICER_ID: + return lemming::dataplane::sai:: + PORT_ATTR_BROADCAST_STORM_CONTROL_POLICER_ID; + + case SAI_PORT_ATTR_MULTICAST_STORM_CONTROL_POLICER_ID: + return lemming::dataplane::sai:: + PORT_ATTR_MULTICAST_STORM_CONTROL_POLICER_ID; + + case SAI_PORT_ATTR_GLOBAL_FLOW_CONTROL_MODE: + return lemming::dataplane::sai::PORT_ATTR_GLOBAL_FLOW_CONTROL_MODE; + + case SAI_PORT_ATTR_INGRESS_ACL: + return lemming::dataplane::sai::PORT_ATTR_INGRESS_ACL; + + case SAI_PORT_ATTR_EGRESS_ACL: + return lemming::dataplane::sai::PORT_ATTR_EGRESS_ACL; + + case SAI_PORT_ATTR_INGRESS_MACSEC_ACL: + return lemming::dataplane::sai::PORT_ATTR_INGRESS_MACSEC_ACL; + + case SAI_PORT_ATTR_EGRESS_MACSEC_ACL: + return lemming::dataplane::sai::PORT_ATTR_EGRESS_MACSEC_ACL; + + case SAI_PORT_ATTR_MACSEC_PORT_LIST: + return lemming::dataplane::sai::PORT_ATTR_MACSEC_PORT_LIST; + + case SAI_PORT_ATTR_INGRESS_MIRROR_SESSION: + return lemming::dataplane::sai::PORT_ATTR_INGRESS_MIRROR_SESSION; + + case SAI_PORT_ATTR_EGRESS_MIRROR_SESSION: + return lemming::dataplane::sai::PORT_ATTR_EGRESS_MIRROR_SESSION; + + case SAI_PORT_ATTR_INGRESS_SAMPLEPACKET_ENABLE: + return lemming::dataplane::sai::PORT_ATTR_INGRESS_SAMPLEPACKET_ENABLE; + + case SAI_PORT_ATTR_EGRESS_SAMPLEPACKET_ENABLE: + return lemming::dataplane::sai::PORT_ATTR_EGRESS_SAMPLEPACKET_ENABLE; + + case SAI_PORT_ATTR_INGRESS_SAMPLE_MIRROR_SESSION: + return lemming::dataplane::sai::PORT_ATTR_INGRESS_SAMPLE_MIRROR_SESSION; + + case SAI_PORT_ATTR_EGRESS_SAMPLE_MIRROR_SESSION: + return lemming::dataplane::sai::PORT_ATTR_EGRESS_SAMPLE_MIRROR_SESSION; + + case SAI_PORT_ATTR_POLICER_ID: + return lemming::dataplane::sai::PORT_ATTR_POLICER_ID; + + case SAI_PORT_ATTR_QOS_DEFAULT_TC: + return lemming::dataplane::sai::PORT_ATTR_QOS_DEFAULT_TC; + + case SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_DOT1P_TO_TC_MAP; + + case SAI_PORT_ATTR_QOS_DOT1P_TO_COLOR_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_DOT1P_TO_COLOR_MAP; + + case SAI_PORT_ATTR_QOS_DSCP_TO_TC_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_DSCP_TO_TC_MAP; + + case SAI_PORT_ATTR_QOS_DSCP_TO_COLOR_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_DSCP_TO_COLOR_MAP; + + case SAI_PORT_ATTR_QOS_TC_TO_QUEUE_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_TC_TO_QUEUE_MAP; + + case SAI_PORT_ATTR_QOS_TC_AND_COLOR_TO_DOT1P_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_TC_AND_COLOR_TO_DOT1P_MAP; + + case SAI_PORT_ATTR_QOS_TC_AND_COLOR_TO_DSCP_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_TC_AND_COLOR_TO_DSCP_MAP; + + case SAI_PORT_ATTR_QOS_TC_TO_PRIORITY_GROUP_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_TC_TO_PRIORITY_GROUP_MAP; + + case SAI_PORT_ATTR_QOS_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP: + return lemming::dataplane::sai:: + PORT_ATTR_QOS_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP; + + case SAI_PORT_ATTR_QOS_PFC_PRIORITY_TO_QUEUE_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_PFC_PRIORITY_TO_QUEUE_MAP; + + case SAI_PORT_ATTR_QOS_SCHEDULER_PROFILE_ID: + return lemming::dataplane::sai::PORT_ATTR_QOS_SCHEDULER_PROFILE_ID; + + case SAI_PORT_ATTR_QOS_INGRESS_BUFFER_PROFILE_LIST: + return lemming::dataplane::sai::PORT_ATTR_QOS_INGRESS_BUFFER_PROFILE_LIST; + + case SAI_PORT_ATTR_QOS_EGRESS_BUFFER_PROFILE_LIST: + return lemming::dataplane::sai::PORT_ATTR_QOS_EGRESS_BUFFER_PROFILE_LIST; + + case SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_MODE: + return lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL_MODE; + + case SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL: + return lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL; + + case SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_RX: + return lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL_RX; + + case SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_TX: + return lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL_TX; + + case SAI_PORT_ATTR_META_DATA: + return lemming::dataplane::sai::PORT_ATTR_META_DATA; + + case SAI_PORT_ATTR_EGRESS_BLOCK_PORT_LIST: + return lemming::dataplane::sai::PORT_ATTR_EGRESS_BLOCK_PORT_LIST; + + case SAI_PORT_ATTR_HW_PROFILE_ID: + return lemming::dataplane::sai::PORT_ATTR_HW_PROFILE_ID; + + case SAI_PORT_ATTR_EEE_ENABLE: + return lemming::dataplane::sai::PORT_ATTR_EEE_ENABLE; + + case SAI_PORT_ATTR_EEE_IDLE_TIME: + return lemming::dataplane::sai::PORT_ATTR_EEE_IDLE_TIME; + + case SAI_PORT_ATTR_EEE_WAKE_TIME: + return lemming::dataplane::sai::PORT_ATTR_EEE_WAKE_TIME; + + case SAI_PORT_ATTR_PORT_POOL_LIST: + return lemming::dataplane::sai::PORT_ATTR_PORT_POOL_LIST; + + case SAI_PORT_ATTR_ISOLATION_GROUP: + return lemming::dataplane::sai::PORT_ATTR_ISOLATION_GROUP; + + case SAI_PORT_ATTR_PKT_TX_ENABLE: + return lemming::dataplane::sai::PORT_ATTR_PKT_TX_ENABLE; + + case SAI_PORT_ATTR_TAM_OBJECT: + return lemming::dataplane::sai::PORT_ATTR_TAM_OBJECT; + + case SAI_PORT_ATTR_SERDES_PREEMPHASIS: + return lemming::dataplane::sai::PORT_ATTR_SERDES_PREEMPHASIS; + + case SAI_PORT_ATTR_SERDES_IDRIVER: + return lemming::dataplane::sai::PORT_ATTR_SERDES_IDRIVER; + + case SAI_PORT_ATTR_SERDES_IPREDRIVER: + return lemming::dataplane::sai::PORT_ATTR_SERDES_IPREDRIVER; + + case SAI_PORT_ATTR_LINK_TRAINING_ENABLE: + return lemming::dataplane::sai::PORT_ATTR_LINK_TRAINING_ENABLE; + + case SAI_PORT_ATTR_PTP_MODE: + return lemming::dataplane::sai::PORT_ATTR_PTP_MODE; + + case SAI_PORT_ATTR_INTERFACE_TYPE: + return lemming::dataplane::sai::PORT_ATTR_INTERFACE_TYPE; + + case SAI_PORT_ATTR_ADVERTISED_INTERFACE_TYPE: + return lemming::dataplane::sai::PORT_ATTR_ADVERTISED_INTERFACE_TYPE; + + case SAI_PORT_ATTR_REFERENCE_CLOCK: + return lemming::dataplane::sai::PORT_ATTR_REFERENCE_CLOCK; + + case SAI_PORT_ATTR_PRBS_POLYNOMIAL: + return lemming::dataplane::sai::PORT_ATTR_PRBS_POLYNOMIAL; + + case SAI_PORT_ATTR_PORT_SERDES_ID: + return lemming::dataplane::sai::PORT_ATTR_PORT_SERDES_ID; + + case SAI_PORT_ATTR_LINK_TRAINING_FAILURE_STATUS: + return lemming::dataplane::sai::PORT_ATTR_LINK_TRAINING_FAILURE_STATUS; + + case SAI_PORT_ATTR_LINK_TRAINING_RX_STATUS: + return lemming::dataplane::sai::PORT_ATTR_LINK_TRAINING_RX_STATUS; + + case SAI_PORT_ATTR_PRBS_CONFIG: + return lemming::dataplane::sai::PORT_ATTR_PRBS_CONFIG; + + case SAI_PORT_ATTR_PRBS_LOCK_STATUS: + return lemming::dataplane::sai::PORT_ATTR_PRBS_LOCK_STATUS; + + case SAI_PORT_ATTR_PRBS_LOCK_LOSS_STATUS: + return lemming::dataplane::sai::PORT_ATTR_PRBS_LOCK_LOSS_STATUS; + + case SAI_PORT_ATTR_PRBS_RX_STATUS: + return lemming::dataplane::sai::PORT_ATTR_PRBS_RX_STATUS; + + case SAI_PORT_ATTR_PRBS_RX_STATE: + return lemming::dataplane::sai::PORT_ATTR_PRBS_RX_STATE; + + case SAI_PORT_ATTR_AUTO_NEG_STATUS: + return lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_STATUS; + + case SAI_PORT_ATTR_DISABLE_DECREMENT_TTL: + return lemming::dataplane::sai::PORT_ATTR_DISABLE_DECREMENT_TTL; + + case SAI_PORT_ATTR_QOS_MPLS_EXP_TO_TC_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_MPLS_EXP_TO_TC_MAP; + + case SAI_PORT_ATTR_QOS_MPLS_EXP_TO_COLOR_MAP: + return lemming::dataplane::sai::PORT_ATTR_QOS_MPLS_EXP_TO_COLOR_MAP; + + case SAI_PORT_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP: + return lemming::dataplane::sai:: + PORT_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP; + + case SAI_PORT_ATTR_TPID: + return lemming::dataplane::sai::PORT_ATTR_TPID; + + case SAI_PORT_ATTR_ERR_STATUS_LIST: + return lemming::dataplane::sai::PORT_ATTR_ERR_STATUS_LIST; + + case SAI_PORT_ATTR_FABRIC_ATTACHED: + return lemming::dataplane::sai::PORT_ATTR_FABRIC_ATTACHED; + + case SAI_PORT_ATTR_FABRIC_ATTACHED_SWITCH_TYPE: + return lemming::dataplane::sai::PORT_ATTR_FABRIC_ATTACHED_SWITCH_TYPE; + + case SAI_PORT_ATTR_FABRIC_ATTACHED_SWITCH_ID: + return lemming::dataplane::sai::PORT_ATTR_FABRIC_ATTACHED_SWITCH_ID; + + case SAI_PORT_ATTR_FABRIC_ATTACHED_PORT_INDEX: + return lemming::dataplane::sai::PORT_ATTR_FABRIC_ATTACHED_PORT_INDEX; + + case SAI_PORT_ATTR_FABRIC_REACHABILITY: + return lemming::dataplane::sai::PORT_ATTR_FABRIC_REACHABILITY; + + case SAI_PORT_ATTR_SYSTEM_PORT: + return lemming::dataplane::sai::PORT_ATTR_SYSTEM_PORT; + + case SAI_PORT_ATTR_AUTO_NEG_FEC_MODE_OVERRIDE: + return lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_FEC_MODE_OVERRIDE; + + case SAI_PORT_ATTR_LOOPBACK_MODE: + return lemming::dataplane::sai::PORT_ATTR_LOOPBACK_MODE; + + case SAI_PORT_ATTR_MDIX_MODE_STATUS: + return lemming::dataplane::sai::PORT_ATTR_MDIX_MODE_STATUS; + + case SAI_PORT_ATTR_MDIX_MODE_CONFIG: + return lemming::dataplane::sai::PORT_ATTR_MDIX_MODE_CONFIG; + + case SAI_PORT_ATTR_AUTO_NEG_CONFIG_MODE: + return lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_CONFIG_MODE; + + case SAI_PORT_ATTR_1000X_SGMII_SLAVE_AUTODETECT: + return lemming::dataplane::sai::PORT_ATTR_1000X_SGMII_SLAVE_AUTODETECT; + + case SAI_PORT_ATTR_MODULE_TYPE: + return lemming::dataplane::sai::PORT_ATTR_MODULE_TYPE; + + case SAI_PORT_ATTR_DUAL_MEDIA: + return lemming::dataplane::sai::PORT_ATTR_DUAL_MEDIA; + + case SAI_PORT_ATTR_AUTO_NEG_FEC_MODE_EXTENDED: + return lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_FEC_MODE_EXTENDED; + + case SAI_PORT_ATTR_IPG: + return lemming::dataplane::sai::PORT_ATTR_IPG; + + case SAI_PORT_ATTR_GLOBAL_FLOW_CONTROL_FORWARD: + return lemming::dataplane::sai::PORT_ATTR_GLOBAL_FLOW_CONTROL_FORWARD; + + case SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_FORWARD: + return lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL_FORWARD; + + case SAI_PORT_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP: + return lemming::dataplane::sai:: + PORT_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP; + + case SAI_PORT_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP: + return lemming::dataplane::sai:: + PORT_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP; + + case SAI_PORT_ATTR_IPSEC_PORT: + return lemming::dataplane::sai::PORT_ATTR_IPSEC_PORT; + + case SAI_PORT_ATTR_PFC_TC_DLD_INTERVAL_RANGE: + return lemming::dataplane::sai::PORT_ATTR_PFC_TC_DLD_INTERVAL_RANGE; + + case SAI_PORT_ATTR_PFC_TC_DLD_INTERVAL: + return lemming::dataplane::sai::PORT_ATTR_PFC_TC_DLD_INTERVAL; + + case SAI_PORT_ATTR_PFC_TC_DLR_INTERVAL_RANGE: + return lemming::dataplane::sai::PORT_ATTR_PFC_TC_DLR_INTERVAL_RANGE; + + case SAI_PORT_ATTR_PFC_TC_DLR_INTERVAL: + return lemming::dataplane::sai::PORT_ATTR_PFC_TC_DLR_INTERVAL; + + case SAI_PORT_ATTR_SUPPORTED_LINK_TRAINING_MODE: + return lemming::dataplane::sai::PORT_ATTR_SUPPORTED_LINK_TRAINING_MODE; + + case SAI_PORT_ATTR_RX_SIGNAL_DETECT: + return lemming::dataplane::sai::PORT_ATTR_RX_SIGNAL_DETECT; + + case SAI_PORT_ATTR_RX_LOCK_STATUS: + return lemming::dataplane::sai::PORT_ATTR_RX_LOCK_STATUS; + + case SAI_PORT_ATTR_PCS_RX_LINK_STATUS: + return lemming::dataplane::sai::PORT_ATTR_PCS_RX_LINK_STATUS; + + case SAI_PORT_ATTR_FEC_ALIGNMENT_LOCK: + return lemming::dataplane::sai::PORT_ATTR_FEC_ALIGNMENT_LOCK; + + case SAI_PORT_ATTR_FABRIC_ISOLATE: + return lemming::dataplane::sai::PORT_ATTR_FABRIC_ISOLATE; + + case SAI_PORT_ATTR_MAX_FEC_SYMBOL_ERRORS_DETECTABLE: + return lemming::dataplane::sai:: + PORT_ATTR_MAX_FEC_SYMBOL_ERRORS_DETECTABLE; + + default: + return lemming::dataplane::sai::PORT_ATTR_UNSPECIFIED; + } +} +sai_port_attr_t convert_sai_port_attr_t_to_sai( + lemming::dataplane::sai::PortAttr val) { + switch (val) { + case lemming::dataplane::sai::PORT_ATTR_TYPE: + return SAI_PORT_ATTR_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_OPER_STATUS: + return SAI_PORT_ATTR_OPER_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_BREAKOUT_MODE_TYPE: + return SAI_PORT_ATTR_SUPPORTED_BREAKOUT_MODE_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_CURRENT_BREAKOUT_MODE_TYPE: + return SAI_PORT_ATTR_CURRENT_BREAKOUT_MODE_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_QOS_NUMBER_OF_QUEUES: + return SAI_PORT_ATTR_QOS_NUMBER_OF_QUEUES; + + case lemming::dataplane::sai::PORT_ATTR_QOS_QUEUE_LIST: + return SAI_PORT_ATTR_QOS_QUEUE_LIST; + + case lemming::dataplane::sai::PORT_ATTR_QOS_NUMBER_OF_SCHEDULER_GROUPS: + return SAI_PORT_ATTR_QOS_NUMBER_OF_SCHEDULER_GROUPS; + + case lemming::dataplane::sai::PORT_ATTR_QOS_SCHEDULER_GROUP_LIST: + return SAI_PORT_ATTR_QOS_SCHEDULER_GROUP_LIST; + + case lemming::dataplane::sai::PORT_ATTR_QOS_MAXIMUM_HEADROOM_SIZE: + return SAI_PORT_ATTR_QOS_MAXIMUM_HEADROOM_SIZE; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_SPEED: + return SAI_PORT_ATTR_SUPPORTED_SPEED; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_FEC_MODE: + return SAI_PORT_ATTR_SUPPORTED_FEC_MODE; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_FEC_MODE_EXTENDED: + return SAI_PORT_ATTR_SUPPORTED_FEC_MODE_EXTENDED; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_HALF_DUPLEX_SPEED: + return SAI_PORT_ATTR_SUPPORTED_HALF_DUPLEX_SPEED; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_AUTO_NEG_MODE: + return SAI_PORT_ATTR_SUPPORTED_AUTO_NEG_MODE; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_FLOW_CONTROL_MODE: + return SAI_PORT_ATTR_SUPPORTED_FLOW_CONTROL_MODE; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_ASYMMETRIC_PAUSE_MODE: + return SAI_PORT_ATTR_SUPPORTED_ASYMMETRIC_PAUSE_MODE; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_MEDIA_TYPE: + return SAI_PORT_ATTR_SUPPORTED_MEDIA_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_SPEED: + return SAI_PORT_ATTR_REMOTE_ADVERTISED_SPEED; + + case lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE: + return SAI_PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE; + + case lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE_EXTENDED: + return SAI_PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE_EXTENDED; + + case lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_HALF_DUPLEX_SPEED: + return SAI_PORT_ATTR_REMOTE_ADVERTISED_HALF_DUPLEX_SPEED; + + case lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_AUTO_NEG_MODE: + return SAI_PORT_ATTR_REMOTE_ADVERTISED_AUTO_NEG_MODE; + + case lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_FLOW_CONTROL_MODE: + return SAI_PORT_ATTR_REMOTE_ADVERTISED_FLOW_CONTROL_MODE; + + case lemming::dataplane::sai:: + PORT_ATTR_REMOTE_ADVERTISED_ASYMMETRIC_PAUSE_MODE: + return SAI_PORT_ATTR_REMOTE_ADVERTISED_ASYMMETRIC_PAUSE_MODE; + + case lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_MEDIA_TYPE: + return SAI_PORT_ATTR_REMOTE_ADVERTISED_MEDIA_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_REMOTE_ADVERTISED_OUI_CODE: + return SAI_PORT_ATTR_REMOTE_ADVERTISED_OUI_CODE; + + case lemming::dataplane::sai::PORT_ATTR_NUMBER_OF_INGRESS_PRIORITY_GROUPS: + return SAI_PORT_ATTR_NUMBER_OF_INGRESS_PRIORITY_GROUPS; + + case lemming::dataplane::sai::PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST: + return SAI_PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST; + + case lemming::dataplane::sai::PORT_ATTR_EYE_VALUES: + return SAI_PORT_ATTR_EYE_VALUES; + + case lemming::dataplane::sai::PORT_ATTR_OPER_SPEED: + return SAI_PORT_ATTR_OPER_SPEED; + + case lemming::dataplane::sai::PORT_ATTR_HW_LANE_LIST: + return SAI_PORT_ATTR_HW_LANE_LIST; + + case lemming::dataplane::sai::PORT_ATTR_SPEED: + return SAI_PORT_ATTR_SPEED; + + case lemming::dataplane::sai::PORT_ATTR_FULL_DUPLEX_MODE: + return SAI_PORT_ATTR_FULL_DUPLEX_MODE; + + case lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_MODE: + return SAI_PORT_ATTR_AUTO_NEG_MODE; + + case lemming::dataplane::sai::PORT_ATTR_ADMIN_STATE: + return SAI_PORT_ATTR_ADMIN_STATE; + + case lemming::dataplane::sai::PORT_ATTR_MEDIA_TYPE: + return SAI_PORT_ATTR_MEDIA_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_SPEED: + return SAI_PORT_ATTR_ADVERTISED_SPEED; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_FEC_MODE: + return SAI_PORT_ATTR_ADVERTISED_FEC_MODE; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_FEC_MODE_EXTENDED: + return SAI_PORT_ATTR_ADVERTISED_FEC_MODE_EXTENDED; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_HALF_DUPLEX_SPEED: + return SAI_PORT_ATTR_ADVERTISED_HALF_DUPLEX_SPEED; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_AUTO_NEG_MODE: + return SAI_PORT_ATTR_ADVERTISED_AUTO_NEG_MODE; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_FLOW_CONTROL_MODE: + return SAI_PORT_ATTR_ADVERTISED_FLOW_CONTROL_MODE; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_ASYMMETRIC_PAUSE_MODE: + return SAI_PORT_ATTR_ADVERTISED_ASYMMETRIC_PAUSE_MODE; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_MEDIA_TYPE: + return SAI_PORT_ATTR_ADVERTISED_MEDIA_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_OUI_CODE: + return SAI_PORT_ATTR_ADVERTISED_OUI_CODE; + + case lemming::dataplane::sai::PORT_ATTR_PORT_VLAN_ID: + return SAI_PORT_ATTR_PORT_VLAN_ID; + + case lemming::dataplane::sai::PORT_ATTR_DEFAULT_VLAN_PRIORITY: + return SAI_PORT_ATTR_DEFAULT_VLAN_PRIORITY; + + case lemming::dataplane::sai::PORT_ATTR_DROP_UNTAGGED: + return SAI_PORT_ATTR_DROP_UNTAGGED; + + case lemming::dataplane::sai::PORT_ATTR_DROP_TAGGED: + return SAI_PORT_ATTR_DROP_TAGGED; + + case lemming::dataplane::sai::PORT_ATTR_INTERNAL_LOOPBACK_MODE: + return SAI_PORT_ATTR_INTERNAL_LOOPBACK_MODE; + + case lemming::dataplane::sai::PORT_ATTR_USE_EXTENDED_FEC: + return SAI_PORT_ATTR_USE_EXTENDED_FEC; + + case lemming::dataplane::sai::PORT_ATTR_FEC_MODE: + return SAI_PORT_ATTR_FEC_MODE; + + case lemming::dataplane::sai::PORT_ATTR_FEC_MODE_EXTENDED: + return SAI_PORT_ATTR_FEC_MODE_EXTENDED; + + case lemming::dataplane::sai::PORT_ATTR_UPDATE_DSCP: + return SAI_PORT_ATTR_UPDATE_DSCP; + + case lemming::dataplane::sai::PORT_ATTR_MTU: + return SAI_PORT_ATTR_MTU; + + case lemming::dataplane::sai::PORT_ATTR_FLOOD_STORM_CONTROL_POLICER_ID: + return SAI_PORT_ATTR_FLOOD_STORM_CONTROL_POLICER_ID; + + case lemming::dataplane::sai::PORT_ATTR_BROADCAST_STORM_CONTROL_POLICER_ID: + return SAI_PORT_ATTR_BROADCAST_STORM_CONTROL_POLICER_ID; + + case lemming::dataplane::sai::PORT_ATTR_MULTICAST_STORM_CONTROL_POLICER_ID: + return SAI_PORT_ATTR_MULTICAST_STORM_CONTROL_POLICER_ID; + + case lemming::dataplane::sai::PORT_ATTR_GLOBAL_FLOW_CONTROL_MODE: + return SAI_PORT_ATTR_GLOBAL_FLOW_CONTROL_MODE; + + case lemming::dataplane::sai::PORT_ATTR_INGRESS_ACL: + return SAI_PORT_ATTR_INGRESS_ACL; + + case lemming::dataplane::sai::PORT_ATTR_EGRESS_ACL: + return SAI_PORT_ATTR_EGRESS_ACL; + + case lemming::dataplane::sai::PORT_ATTR_INGRESS_MACSEC_ACL: + return SAI_PORT_ATTR_INGRESS_MACSEC_ACL; + + case lemming::dataplane::sai::PORT_ATTR_EGRESS_MACSEC_ACL: + return SAI_PORT_ATTR_EGRESS_MACSEC_ACL; + + case lemming::dataplane::sai::PORT_ATTR_MACSEC_PORT_LIST: + return SAI_PORT_ATTR_MACSEC_PORT_LIST; + + case lemming::dataplane::sai::PORT_ATTR_INGRESS_MIRROR_SESSION: + return SAI_PORT_ATTR_INGRESS_MIRROR_SESSION; + + case lemming::dataplane::sai::PORT_ATTR_EGRESS_MIRROR_SESSION: + return SAI_PORT_ATTR_EGRESS_MIRROR_SESSION; + + case lemming::dataplane::sai::PORT_ATTR_INGRESS_SAMPLEPACKET_ENABLE: + return SAI_PORT_ATTR_INGRESS_SAMPLEPACKET_ENABLE; + + case lemming::dataplane::sai::PORT_ATTR_EGRESS_SAMPLEPACKET_ENABLE: + return SAI_PORT_ATTR_EGRESS_SAMPLEPACKET_ENABLE; + + case lemming::dataplane::sai::PORT_ATTR_INGRESS_SAMPLE_MIRROR_SESSION: + return SAI_PORT_ATTR_INGRESS_SAMPLE_MIRROR_SESSION; + + case lemming::dataplane::sai::PORT_ATTR_EGRESS_SAMPLE_MIRROR_SESSION: + return SAI_PORT_ATTR_EGRESS_SAMPLE_MIRROR_SESSION; + + case lemming::dataplane::sai::PORT_ATTR_POLICER_ID: + return SAI_PORT_ATTR_POLICER_ID; + + case lemming::dataplane::sai::PORT_ATTR_QOS_DEFAULT_TC: + return SAI_PORT_ATTR_QOS_DEFAULT_TC; + + case lemming::dataplane::sai::PORT_ATTR_QOS_DOT1P_TO_TC_MAP: + return SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_DOT1P_TO_COLOR_MAP: + return SAI_PORT_ATTR_QOS_DOT1P_TO_COLOR_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_DSCP_TO_TC_MAP: + return SAI_PORT_ATTR_QOS_DSCP_TO_TC_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_DSCP_TO_COLOR_MAP: + return SAI_PORT_ATTR_QOS_DSCP_TO_COLOR_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_TC_TO_QUEUE_MAP: + return SAI_PORT_ATTR_QOS_TC_TO_QUEUE_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_TC_AND_COLOR_TO_DOT1P_MAP: + return SAI_PORT_ATTR_QOS_TC_AND_COLOR_TO_DOT1P_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_TC_AND_COLOR_TO_DSCP_MAP: + return SAI_PORT_ATTR_QOS_TC_AND_COLOR_TO_DSCP_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_TC_TO_PRIORITY_GROUP_MAP: + return SAI_PORT_ATTR_QOS_TC_TO_PRIORITY_GROUP_MAP; + + case lemming::dataplane::sai:: + PORT_ATTR_QOS_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP: + return SAI_PORT_ATTR_QOS_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_PFC_PRIORITY_TO_QUEUE_MAP: + return SAI_PORT_ATTR_QOS_PFC_PRIORITY_TO_QUEUE_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_SCHEDULER_PROFILE_ID: + return SAI_PORT_ATTR_QOS_SCHEDULER_PROFILE_ID; + + case lemming::dataplane::sai::PORT_ATTR_QOS_INGRESS_BUFFER_PROFILE_LIST: + return SAI_PORT_ATTR_QOS_INGRESS_BUFFER_PROFILE_LIST; + + case lemming::dataplane::sai::PORT_ATTR_QOS_EGRESS_BUFFER_PROFILE_LIST: + return SAI_PORT_ATTR_QOS_EGRESS_BUFFER_PROFILE_LIST; + + case lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL_MODE: + return SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_MODE; + + case lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL: + return SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL; + + case lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL_RX: + return SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_RX; + + case lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL_TX: + return SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_TX; + + case lemming::dataplane::sai::PORT_ATTR_META_DATA: + return SAI_PORT_ATTR_META_DATA; + + case lemming::dataplane::sai::PORT_ATTR_EGRESS_BLOCK_PORT_LIST: + return SAI_PORT_ATTR_EGRESS_BLOCK_PORT_LIST; + + case lemming::dataplane::sai::PORT_ATTR_HW_PROFILE_ID: + return SAI_PORT_ATTR_HW_PROFILE_ID; + + case lemming::dataplane::sai::PORT_ATTR_EEE_ENABLE: + return SAI_PORT_ATTR_EEE_ENABLE; + + case lemming::dataplane::sai::PORT_ATTR_EEE_IDLE_TIME: + return SAI_PORT_ATTR_EEE_IDLE_TIME; + + case lemming::dataplane::sai::PORT_ATTR_EEE_WAKE_TIME: + return SAI_PORT_ATTR_EEE_WAKE_TIME; + + case lemming::dataplane::sai::PORT_ATTR_PORT_POOL_LIST: + return SAI_PORT_ATTR_PORT_POOL_LIST; + + case lemming::dataplane::sai::PORT_ATTR_ISOLATION_GROUP: + return SAI_PORT_ATTR_ISOLATION_GROUP; + + case lemming::dataplane::sai::PORT_ATTR_PKT_TX_ENABLE: + return SAI_PORT_ATTR_PKT_TX_ENABLE; + + case lemming::dataplane::sai::PORT_ATTR_TAM_OBJECT: + return SAI_PORT_ATTR_TAM_OBJECT; + + case lemming::dataplane::sai::PORT_ATTR_SERDES_PREEMPHASIS: + return SAI_PORT_ATTR_SERDES_PREEMPHASIS; + + case lemming::dataplane::sai::PORT_ATTR_SERDES_IDRIVER: + return SAI_PORT_ATTR_SERDES_IDRIVER; + + case lemming::dataplane::sai::PORT_ATTR_SERDES_IPREDRIVER: + return SAI_PORT_ATTR_SERDES_IPREDRIVER; + + case lemming::dataplane::sai::PORT_ATTR_LINK_TRAINING_ENABLE: + return SAI_PORT_ATTR_LINK_TRAINING_ENABLE; + + case lemming::dataplane::sai::PORT_ATTR_PTP_MODE: + return SAI_PORT_ATTR_PTP_MODE; + + case lemming::dataplane::sai::PORT_ATTR_INTERFACE_TYPE: + return SAI_PORT_ATTR_INTERFACE_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_ADVERTISED_INTERFACE_TYPE: + return SAI_PORT_ATTR_ADVERTISED_INTERFACE_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_REFERENCE_CLOCK: + return SAI_PORT_ATTR_REFERENCE_CLOCK; + + case lemming::dataplane::sai::PORT_ATTR_PRBS_POLYNOMIAL: + return SAI_PORT_ATTR_PRBS_POLYNOMIAL; + + case lemming::dataplane::sai::PORT_ATTR_PORT_SERDES_ID: + return SAI_PORT_ATTR_PORT_SERDES_ID; + + case lemming::dataplane::sai::PORT_ATTR_LINK_TRAINING_FAILURE_STATUS: + return SAI_PORT_ATTR_LINK_TRAINING_FAILURE_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_LINK_TRAINING_RX_STATUS: + return SAI_PORT_ATTR_LINK_TRAINING_RX_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_PRBS_CONFIG: + return SAI_PORT_ATTR_PRBS_CONFIG; + + case lemming::dataplane::sai::PORT_ATTR_PRBS_LOCK_STATUS: + return SAI_PORT_ATTR_PRBS_LOCK_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_PRBS_LOCK_LOSS_STATUS: + return SAI_PORT_ATTR_PRBS_LOCK_LOSS_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_PRBS_RX_STATUS: + return SAI_PORT_ATTR_PRBS_RX_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_PRBS_RX_STATE: + return SAI_PORT_ATTR_PRBS_RX_STATE; + + case lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_STATUS: + return SAI_PORT_ATTR_AUTO_NEG_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_DISABLE_DECREMENT_TTL: + return SAI_PORT_ATTR_DISABLE_DECREMENT_TTL; + + case lemming::dataplane::sai::PORT_ATTR_QOS_MPLS_EXP_TO_TC_MAP: + return SAI_PORT_ATTR_QOS_MPLS_EXP_TO_TC_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_MPLS_EXP_TO_COLOR_MAP: + return SAI_PORT_ATTR_QOS_MPLS_EXP_TO_COLOR_MAP; + + case lemming::dataplane::sai::PORT_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP: + return SAI_PORT_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP; + + case lemming::dataplane::sai::PORT_ATTR_TPID: + return SAI_PORT_ATTR_TPID; + + case lemming::dataplane::sai::PORT_ATTR_ERR_STATUS_LIST: + return SAI_PORT_ATTR_ERR_STATUS_LIST; + + case lemming::dataplane::sai::PORT_ATTR_FABRIC_ATTACHED: + return SAI_PORT_ATTR_FABRIC_ATTACHED; + + case lemming::dataplane::sai::PORT_ATTR_FABRIC_ATTACHED_SWITCH_TYPE: + return SAI_PORT_ATTR_FABRIC_ATTACHED_SWITCH_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_FABRIC_ATTACHED_SWITCH_ID: + return SAI_PORT_ATTR_FABRIC_ATTACHED_SWITCH_ID; + + case lemming::dataplane::sai::PORT_ATTR_FABRIC_ATTACHED_PORT_INDEX: + return SAI_PORT_ATTR_FABRIC_ATTACHED_PORT_INDEX; + + case lemming::dataplane::sai::PORT_ATTR_FABRIC_REACHABILITY: + return SAI_PORT_ATTR_FABRIC_REACHABILITY; + + case lemming::dataplane::sai::PORT_ATTR_SYSTEM_PORT: + return SAI_PORT_ATTR_SYSTEM_PORT; + + case lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_FEC_MODE_OVERRIDE: + return SAI_PORT_ATTR_AUTO_NEG_FEC_MODE_OVERRIDE; + + case lemming::dataplane::sai::PORT_ATTR_LOOPBACK_MODE: + return SAI_PORT_ATTR_LOOPBACK_MODE; + + case lemming::dataplane::sai::PORT_ATTR_MDIX_MODE_STATUS: + return SAI_PORT_ATTR_MDIX_MODE_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_MDIX_MODE_CONFIG: + return SAI_PORT_ATTR_MDIX_MODE_CONFIG; + + case lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_CONFIG_MODE: + return SAI_PORT_ATTR_AUTO_NEG_CONFIG_MODE; + + case lemming::dataplane::sai::PORT_ATTR_1000X_SGMII_SLAVE_AUTODETECT: + return SAI_PORT_ATTR_1000X_SGMII_SLAVE_AUTODETECT; + + case lemming::dataplane::sai::PORT_ATTR_MODULE_TYPE: + return SAI_PORT_ATTR_MODULE_TYPE; + + case lemming::dataplane::sai::PORT_ATTR_DUAL_MEDIA: + return SAI_PORT_ATTR_DUAL_MEDIA; + + case lemming::dataplane::sai::PORT_ATTR_AUTO_NEG_FEC_MODE_EXTENDED: + return SAI_PORT_ATTR_AUTO_NEG_FEC_MODE_EXTENDED; + + case lemming::dataplane::sai::PORT_ATTR_IPG: + return SAI_PORT_ATTR_IPG; + + case lemming::dataplane::sai::PORT_ATTR_GLOBAL_FLOW_CONTROL_FORWARD: + return SAI_PORT_ATTR_GLOBAL_FLOW_CONTROL_FORWARD; + + case lemming::dataplane::sai::PORT_ATTR_PRIORITY_FLOW_CONTROL_FORWARD: + return SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_FORWARD; + + case lemming::dataplane::sai::PORT_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP: + return SAI_PORT_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP; + + case lemming::dataplane::sai:: + PORT_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP: + return SAI_PORT_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP; + + case lemming::dataplane::sai::PORT_ATTR_IPSEC_PORT: + return SAI_PORT_ATTR_IPSEC_PORT; + + case lemming::dataplane::sai::PORT_ATTR_PFC_TC_DLD_INTERVAL_RANGE: + return SAI_PORT_ATTR_PFC_TC_DLD_INTERVAL_RANGE; + + case lemming::dataplane::sai::PORT_ATTR_PFC_TC_DLD_INTERVAL: + return SAI_PORT_ATTR_PFC_TC_DLD_INTERVAL; + + case lemming::dataplane::sai::PORT_ATTR_PFC_TC_DLR_INTERVAL_RANGE: + return SAI_PORT_ATTR_PFC_TC_DLR_INTERVAL_RANGE; + + case lemming::dataplane::sai::PORT_ATTR_PFC_TC_DLR_INTERVAL: + return SAI_PORT_ATTR_PFC_TC_DLR_INTERVAL; + + case lemming::dataplane::sai::PORT_ATTR_SUPPORTED_LINK_TRAINING_MODE: + return SAI_PORT_ATTR_SUPPORTED_LINK_TRAINING_MODE; + + case lemming::dataplane::sai::PORT_ATTR_RX_SIGNAL_DETECT: + return SAI_PORT_ATTR_RX_SIGNAL_DETECT; + + case lemming::dataplane::sai::PORT_ATTR_RX_LOCK_STATUS: + return SAI_PORT_ATTR_RX_LOCK_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_PCS_RX_LINK_STATUS: + return SAI_PORT_ATTR_PCS_RX_LINK_STATUS; + + case lemming::dataplane::sai::PORT_ATTR_FEC_ALIGNMENT_LOCK: + return SAI_PORT_ATTR_FEC_ALIGNMENT_LOCK; + + case lemming::dataplane::sai::PORT_ATTR_FABRIC_ISOLATE: + return SAI_PORT_ATTR_FABRIC_ISOLATE; + + case lemming::dataplane::sai::PORT_ATTR_MAX_FEC_SYMBOL_ERRORS_DETECTABLE: + return SAI_PORT_ATTR_MAX_FEC_SYMBOL_ERRORS_DETECTABLE; + + default: + return SAI_PORT_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_port_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortAutoNegConfigMode +convert_sai_port_auto_neg_config_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_AUTO_NEG_CONFIG_MODE_DISABLED: + return lemming::dataplane::sai::PORT_AUTO_NEG_CONFIG_MODE_DISABLED; + + case SAI_PORT_AUTO_NEG_CONFIG_MODE_AUTO: + return lemming::dataplane::sai::PORT_AUTO_NEG_CONFIG_MODE_AUTO; + + case SAI_PORT_AUTO_NEG_CONFIG_MODE_SLAVE: + return lemming::dataplane::sai::PORT_AUTO_NEG_CONFIG_MODE_SLAVE; + + case SAI_PORT_AUTO_NEG_CONFIG_MODE_MASTER: + return lemming::dataplane::sai::PORT_AUTO_NEG_CONFIG_MODE_MASTER; + + default: + return lemming::dataplane::sai::PORT_AUTO_NEG_CONFIG_MODE_UNSPECIFIED; + } +} +sai_port_auto_neg_config_mode_t convert_sai_port_auto_neg_config_mode_t_to_sai( + lemming::dataplane::sai::PortAutoNegConfigMode val) { + switch (val) { + case lemming::dataplane::sai::PORT_AUTO_NEG_CONFIG_MODE_DISABLED: + return SAI_PORT_AUTO_NEG_CONFIG_MODE_DISABLED; + + case lemming::dataplane::sai::PORT_AUTO_NEG_CONFIG_MODE_AUTO: + return SAI_PORT_AUTO_NEG_CONFIG_MODE_AUTO; + + case lemming::dataplane::sai::PORT_AUTO_NEG_CONFIG_MODE_SLAVE: + return SAI_PORT_AUTO_NEG_CONFIG_MODE_SLAVE; + + case lemming::dataplane::sai::PORT_AUTO_NEG_CONFIG_MODE_MASTER: + return SAI_PORT_AUTO_NEG_CONFIG_MODE_MASTER; + + default: + return SAI_PORT_AUTO_NEG_CONFIG_MODE_DISABLED; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_auto_neg_config_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_port_auto_neg_config_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_auto_neg_config_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_auto_neg_config_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortBreakoutModeType +convert_sai_port_breakout_mode_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_BREAKOUT_MODE_TYPE_1_LANE: + return lemming::dataplane::sai::PORT_BREAKOUT_MODE_TYPE_1_LANE; + + case SAI_PORT_BREAKOUT_MODE_TYPE_2_LANE: + return lemming::dataplane::sai::PORT_BREAKOUT_MODE_TYPE_2_LANE; + + case SAI_PORT_BREAKOUT_MODE_TYPE_4_LANE: + return lemming::dataplane::sai::PORT_BREAKOUT_MODE_TYPE_4_LANE; + + case SAI_PORT_BREAKOUT_MODE_TYPE_MAX: + return lemming::dataplane::sai::PORT_BREAKOUT_MODE_TYPE_MAX; + + default: + return lemming::dataplane::sai::PORT_BREAKOUT_MODE_TYPE_UNSPECIFIED; + } +} +sai_port_breakout_mode_type_t convert_sai_port_breakout_mode_type_t_to_sai( + lemming::dataplane::sai::PortBreakoutModeType val) { + switch (val) { + case lemming::dataplane::sai::PORT_BREAKOUT_MODE_TYPE_1_LANE: + return SAI_PORT_BREAKOUT_MODE_TYPE_1_LANE; + + case lemming::dataplane::sai::PORT_BREAKOUT_MODE_TYPE_2_LANE: + return SAI_PORT_BREAKOUT_MODE_TYPE_2_LANE; + + case lemming::dataplane::sai::PORT_BREAKOUT_MODE_TYPE_4_LANE: + return SAI_PORT_BREAKOUT_MODE_TYPE_4_LANE; + + case lemming::dataplane::sai::PORT_BREAKOUT_MODE_TYPE_MAX: + return SAI_PORT_BREAKOUT_MODE_TYPE_MAX; + + default: + return SAI_PORT_BREAKOUT_MODE_TYPE_1_LANE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_breakout_mode_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_port_breakout_mode_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_breakout_mode_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_breakout_mode_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortConnectorAttr +convert_sai_port_connector_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_CONNECTOR_ATTR_SYSTEM_SIDE_PORT_ID: + return lemming::dataplane::sai::PORT_CONNECTOR_ATTR_SYSTEM_SIDE_PORT_ID; + + case SAI_PORT_CONNECTOR_ATTR_LINE_SIDE_PORT_ID: + return lemming::dataplane::sai::PORT_CONNECTOR_ATTR_LINE_SIDE_PORT_ID; + + case SAI_PORT_CONNECTOR_ATTR_SYSTEM_SIDE_FAILOVER_PORT_ID: + return lemming::dataplane::sai:: + PORT_CONNECTOR_ATTR_SYSTEM_SIDE_FAILOVER_PORT_ID; + + case SAI_PORT_CONNECTOR_ATTR_LINE_SIDE_FAILOVER_PORT_ID: + return lemming::dataplane::sai:: + PORT_CONNECTOR_ATTR_LINE_SIDE_FAILOVER_PORT_ID; + + case SAI_PORT_CONNECTOR_ATTR_FAILOVER_MODE: + return lemming::dataplane::sai::PORT_CONNECTOR_ATTR_FAILOVER_MODE; + + default: + return lemming::dataplane::sai::PORT_CONNECTOR_ATTR_UNSPECIFIED; + } +} +sai_port_connector_attr_t convert_sai_port_connector_attr_t_to_sai( + lemming::dataplane::sai::PortConnectorAttr val) { + switch (val) { + case lemming::dataplane::sai::PORT_CONNECTOR_ATTR_SYSTEM_SIDE_PORT_ID: + return SAI_PORT_CONNECTOR_ATTR_SYSTEM_SIDE_PORT_ID; + + case lemming::dataplane::sai::PORT_CONNECTOR_ATTR_LINE_SIDE_PORT_ID: + return SAI_PORT_CONNECTOR_ATTR_LINE_SIDE_PORT_ID; + + case lemming::dataplane::sai:: + PORT_CONNECTOR_ATTR_SYSTEM_SIDE_FAILOVER_PORT_ID: + return SAI_PORT_CONNECTOR_ATTR_SYSTEM_SIDE_FAILOVER_PORT_ID; + + case lemming::dataplane::sai:: + PORT_CONNECTOR_ATTR_LINE_SIDE_FAILOVER_PORT_ID: + return SAI_PORT_CONNECTOR_ATTR_LINE_SIDE_FAILOVER_PORT_ID; + + case lemming::dataplane::sai::PORT_CONNECTOR_ATTR_FAILOVER_MODE: + return SAI_PORT_CONNECTOR_ATTR_FAILOVER_MODE; + + default: + return SAI_PORT_CONNECTOR_ATTR_SYSTEM_SIDE_PORT_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_connector_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_connector_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_connector_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_connector_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortConnectorFailoverMode +convert_sai_port_connector_failover_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_CONNECTOR_FAILOVER_MODE_DISABLE: + return lemming::dataplane::sai::PORT_CONNECTOR_FAILOVER_MODE_DISABLE; + + case SAI_PORT_CONNECTOR_FAILOVER_MODE_PRIMARY: + return lemming::dataplane::sai::PORT_CONNECTOR_FAILOVER_MODE_PRIMARY; + + case SAI_PORT_CONNECTOR_FAILOVER_MODE_SECONDARY: + return lemming::dataplane::sai::PORT_CONNECTOR_FAILOVER_MODE_SECONDARY; + + default: + return lemming::dataplane::sai::PORT_CONNECTOR_FAILOVER_MODE_UNSPECIFIED; + } +} +sai_port_connector_failover_mode_t +convert_sai_port_connector_failover_mode_t_to_sai( + lemming::dataplane::sai::PortConnectorFailoverMode val) { + switch (val) { + case lemming::dataplane::sai::PORT_CONNECTOR_FAILOVER_MODE_DISABLE: + return SAI_PORT_CONNECTOR_FAILOVER_MODE_DISABLE; + + case lemming::dataplane::sai::PORT_CONNECTOR_FAILOVER_MODE_PRIMARY: + return SAI_PORT_CONNECTOR_FAILOVER_MODE_PRIMARY; + + case lemming::dataplane::sai::PORT_CONNECTOR_FAILOVER_MODE_SECONDARY: + return SAI_PORT_CONNECTOR_FAILOVER_MODE_SECONDARY; + + default: + return SAI_PORT_CONNECTOR_FAILOVER_MODE_DISABLE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_connector_failover_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_port_connector_failover_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_connector_failover_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_connector_failover_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortDualMedia convert_sai_port_dual_media_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_DUAL_MEDIA_NONE: + return lemming::dataplane::sai::PORT_DUAL_MEDIA_NONE; + + case SAI_PORT_DUAL_MEDIA_COPPER_ONLY: + return lemming::dataplane::sai::PORT_DUAL_MEDIA_COPPER_ONLY; + + case SAI_PORT_DUAL_MEDIA_FIBER_ONLY: + return lemming::dataplane::sai::PORT_DUAL_MEDIA_FIBER_ONLY; + + case SAI_PORT_DUAL_MEDIA_COPPER_PREFERRED: + return lemming::dataplane::sai::PORT_DUAL_MEDIA_COPPER_PREFERRED; + + case SAI_PORT_DUAL_MEDIA_FIBER_PREFERRED: + return lemming::dataplane::sai::PORT_DUAL_MEDIA_FIBER_PREFERRED; + + default: + return lemming::dataplane::sai::PORT_DUAL_MEDIA_UNSPECIFIED; + } +} +sai_port_dual_media_t convert_sai_port_dual_media_t_to_sai( + lemming::dataplane::sai::PortDualMedia val) { + switch (val) { + case lemming::dataplane::sai::PORT_DUAL_MEDIA_NONE: + return SAI_PORT_DUAL_MEDIA_NONE; + + case lemming::dataplane::sai::PORT_DUAL_MEDIA_COPPER_ONLY: + return SAI_PORT_DUAL_MEDIA_COPPER_ONLY; + + case lemming::dataplane::sai::PORT_DUAL_MEDIA_FIBER_ONLY: + return SAI_PORT_DUAL_MEDIA_FIBER_ONLY; + + case lemming::dataplane::sai::PORT_DUAL_MEDIA_COPPER_PREFERRED: + return SAI_PORT_DUAL_MEDIA_COPPER_PREFERRED; + + case lemming::dataplane::sai::PORT_DUAL_MEDIA_FIBER_PREFERRED: + return SAI_PORT_DUAL_MEDIA_FIBER_PREFERRED; + + default: + return SAI_PORT_DUAL_MEDIA_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_dual_media_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_dual_media_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_dual_media_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_dual_media_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortErrStatus convert_sai_port_err_status_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_ERR_STATUS_DATA_UNIT_CRC_ERROR: + return lemming::dataplane::sai::PORT_ERR_STATUS_DATA_UNIT_CRC_ERROR; + + case SAI_PORT_ERR_STATUS_DATA_UNIT_SIZE: + return lemming::dataplane::sai::PORT_ERR_STATUS_DATA_UNIT_SIZE; + + case SAI_PORT_ERR_STATUS_DATA_UNIT_MISALIGNMENT_ERROR: + return lemming::dataplane::sai:: + PORT_ERR_STATUS_DATA_UNIT_MISALIGNMENT_ERROR; + + case SAI_PORT_ERR_STATUS_CODE_GROUP_ERROR: + return lemming::dataplane::sai::PORT_ERR_STATUS_CODE_GROUP_ERROR; + + case SAI_PORT_ERR_STATUS_SIGNAL_LOCAL_ERROR: + return lemming::dataplane::sai::PORT_ERR_STATUS_SIGNAL_LOCAL_ERROR; + + case SAI_PORT_ERR_STATUS_NO_RX_REACHABILITY: + return lemming::dataplane::sai::PORT_ERR_STATUS_NO_RX_REACHABILITY; + + case SAI_PORT_ERR_STATUS_CRC_RATE: + return lemming::dataplane::sai::PORT_ERR_STATUS_CRC_RATE; + + case SAI_PORT_ERR_STATUS_REMOTE_FAULT_STATUS: + return lemming::dataplane::sai::PORT_ERR_STATUS_REMOTE_FAULT_STATUS; + + case SAI_PORT_ERR_STATUS_MAX: + return lemming::dataplane::sai::PORT_ERR_STATUS_MAX; + + default: + return lemming::dataplane::sai::PORT_ERR_STATUS_UNSPECIFIED; + } +} +sai_port_err_status_t convert_sai_port_err_status_t_to_sai( + lemming::dataplane::sai::PortErrStatus val) { + switch (val) { + case lemming::dataplane::sai::PORT_ERR_STATUS_DATA_UNIT_CRC_ERROR: + return SAI_PORT_ERR_STATUS_DATA_UNIT_CRC_ERROR; + + case lemming::dataplane::sai::PORT_ERR_STATUS_DATA_UNIT_SIZE: + return SAI_PORT_ERR_STATUS_DATA_UNIT_SIZE; + + case lemming::dataplane::sai::PORT_ERR_STATUS_DATA_UNIT_MISALIGNMENT_ERROR: + return SAI_PORT_ERR_STATUS_DATA_UNIT_MISALIGNMENT_ERROR; + + case lemming::dataplane::sai::PORT_ERR_STATUS_CODE_GROUP_ERROR: + return SAI_PORT_ERR_STATUS_CODE_GROUP_ERROR; + + case lemming::dataplane::sai::PORT_ERR_STATUS_SIGNAL_LOCAL_ERROR: + return SAI_PORT_ERR_STATUS_SIGNAL_LOCAL_ERROR; + + case lemming::dataplane::sai::PORT_ERR_STATUS_NO_RX_REACHABILITY: + return SAI_PORT_ERR_STATUS_NO_RX_REACHABILITY; + + case lemming::dataplane::sai::PORT_ERR_STATUS_CRC_RATE: + return SAI_PORT_ERR_STATUS_CRC_RATE; + + case lemming::dataplane::sai::PORT_ERR_STATUS_REMOTE_FAULT_STATUS: + return SAI_PORT_ERR_STATUS_REMOTE_FAULT_STATUS; + + case lemming::dataplane::sai::PORT_ERR_STATUS_MAX: + return SAI_PORT_ERR_STATUS_MAX; + + default: + return SAI_PORT_ERR_STATUS_DATA_UNIT_CRC_ERROR; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_err_status_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_err_status_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_err_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_err_status_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortFecModeExtended +convert_sai_port_fec_mode_extended_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_FEC_MODE_EXTENDED_NONE: + return lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_NONE; + + case SAI_PORT_FEC_MODE_EXTENDED_RS528: + return lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_RS528; + + case SAI_PORT_FEC_MODE_EXTENDED_RS544: + return lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_RS544; + + case SAI_PORT_FEC_MODE_EXTENDED_RS544_INTERLEAVED: + return lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_RS544_INTERLEAVED; + + case SAI_PORT_FEC_MODE_EXTENDED_FC: + return lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_FC; + + default: + return lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_UNSPECIFIED; + } +} +sai_port_fec_mode_extended_t convert_sai_port_fec_mode_extended_t_to_sai( + lemming::dataplane::sai::PortFecModeExtended val) { + switch (val) { + case lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_NONE: + return SAI_PORT_FEC_MODE_EXTENDED_NONE; + + case lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_RS528: + return SAI_PORT_FEC_MODE_EXTENDED_RS528; + + case lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_RS544: + return SAI_PORT_FEC_MODE_EXTENDED_RS544; + + case lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_RS544_INTERLEAVED: + return SAI_PORT_FEC_MODE_EXTENDED_RS544_INTERLEAVED; + + case lemming::dataplane::sai::PORT_FEC_MODE_EXTENDED_FC: + return SAI_PORT_FEC_MODE_EXTENDED_FC; + + default: + return SAI_PORT_FEC_MODE_EXTENDED_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_fec_mode_extended_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_fec_mode_extended_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_fec_mode_extended_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_fec_mode_extended_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortFecMode convert_sai_port_fec_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_FEC_MODE_NONE: + return lemming::dataplane::sai::PORT_FEC_MODE_NONE; + + case SAI_PORT_FEC_MODE_RS: + return lemming::dataplane::sai::PORT_FEC_MODE_RS; + + case SAI_PORT_FEC_MODE_FC: + return lemming::dataplane::sai::PORT_FEC_MODE_FC; + + default: + return lemming::dataplane::sai::PORT_FEC_MODE_UNSPECIFIED; + } +} +sai_port_fec_mode_t convert_sai_port_fec_mode_t_to_sai( + lemming::dataplane::sai::PortFecMode val) { + switch (val) { + case lemming::dataplane::sai::PORT_FEC_MODE_NONE: + return SAI_PORT_FEC_MODE_NONE; + + case lemming::dataplane::sai::PORT_FEC_MODE_RS: + return SAI_PORT_FEC_MODE_RS; + + case lemming::dataplane::sai::PORT_FEC_MODE_FC: + return SAI_PORT_FEC_MODE_FC; + + default: + return SAI_PORT_FEC_MODE_NONE; + } +} + +google::protobuf::RepeatedField convert_list_sai_port_fec_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_fec_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_fec_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_fec_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortFlowControlMode +convert_sai_port_flow_control_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_FLOW_CONTROL_MODE_DISABLE: + return lemming::dataplane::sai::PORT_FLOW_CONTROL_MODE_DISABLE; + + case SAI_PORT_FLOW_CONTROL_MODE_TX_ONLY: + return lemming::dataplane::sai::PORT_FLOW_CONTROL_MODE_TX_ONLY; + + case SAI_PORT_FLOW_CONTROL_MODE_RX_ONLY: + return lemming::dataplane::sai::PORT_FLOW_CONTROL_MODE_RX_ONLY; + + case SAI_PORT_FLOW_CONTROL_MODE_BOTH_ENABLE: + return lemming::dataplane::sai::PORT_FLOW_CONTROL_MODE_BOTH_ENABLE; + + default: + return lemming::dataplane::sai::PORT_FLOW_CONTROL_MODE_UNSPECIFIED; + } +} +sai_port_flow_control_mode_t convert_sai_port_flow_control_mode_t_to_sai( + lemming::dataplane::sai::PortFlowControlMode val) { + switch (val) { + case lemming::dataplane::sai::PORT_FLOW_CONTROL_MODE_DISABLE: + return SAI_PORT_FLOW_CONTROL_MODE_DISABLE; + + case lemming::dataplane::sai::PORT_FLOW_CONTROL_MODE_TX_ONLY: + return SAI_PORT_FLOW_CONTROL_MODE_TX_ONLY; + + case lemming::dataplane::sai::PORT_FLOW_CONTROL_MODE_RX_ONLY: + return SAI_PORT_FLOW_CONTROL_MODE_RX_ONLY; + + case lemming::dataplane::sai::PORT_FLOW_CONTROL_MODE_BOTH_ENABLE: + return SAI_PORT_FLOW_CONTROL_MODE_BOTH_ENABLE; + + default: + return SAI_PORT_FLOW_CONTROL_MODE_DISABLE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_flow_control_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_flow_control_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_flow_control_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_flow_control_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortInterfaceType +convert_sai_port_interface_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_INTERFACE_TYPE_NONE: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_NONE; + + case SAI_PORT_INTERFACE_TYPE_CR: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_CR; + + case SAI_PORT_INTERFACE_TYPE_CR2: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_CR2; + + case SAI_PORT_INTERFACE_TYPE_CR4: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_CR4; + + case SAI_PORT_INTERFACE_TYPE_SR: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_SR; + + case SAI_PORT_INTERFACE_TYPE_SR2: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_SR2; + + case SAI_PORT_INTERFACE_TYPE_SR4: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_SR4; + + case SAI_PORT_INTERFACE_TYPE_LR: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_LR; + + case SAI_PORT_INTERFACE_TYPE_LR4: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_LR4; + + case SAI_PORT_INTERFACE_TYPE_KR: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_KR; + + case SAI_PORT_INTERFACE_TYPE_KR4: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_KR4; + + case SAI_PORT_INTERFACE_TYPE_CAUI: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_CAUI; + + case SAI_PORT_INTERFACE_TYPE_GMII: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_GMII; + + case SAI_PORT_INTERFACE_TYPE_SFI: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_SFI; + + case SAI_PORT_INTERFACE_TYPE_XLAUI: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_XLAUI; + + case SAI_PORT_INTERFACE_TYPE_KR2: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_KR2; + + case SAI_PORT_INTERFACE_TYPE_CAUI4: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_CAUI4; + + case SAI_PORT_INTERFACE_TYPE_XAUI: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_XAUI; + + case SAI_PORT_INTERFACE_TYPE_XFI: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_XFI; + + case SAI_PORT_INTERFACE_TYPE_XGMII: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_XGMII; + + case SAI_PORT_INTERFACE_TYPE_CR8: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_CR8; + + case SAI_PORT_INTERFACE_TYPE_KR8: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_KR8; + + case SAI_PORT_INTERFACE_TYPE_SR8: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_SR8; + + case SAI_PORT_INTERFACE_TYPE_LR8: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_LR8; + + case SAI_PORT_INTERFACE_TYPE_MAX: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_MAX; + + default: + return lemming::dataplane::sai::PORT_INTERFACE_TYPE_UNSPECIFIED; + } +} +sai_port_interface_type_t convert_sai_port_interface_type_t_to_sai( + lemming::dataplane::sai::PortInterfaceType val) { + switch (val) { + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_NONE: + return SAI_PORT_INTERFACE_TYPE_NONE; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_CR: + return SAI_PORT_INTERFACE_TYPE_CR; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_CR2: + return SAI_PORT_INTERFACE_TYPE_CR2; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_CR4: + return SAI_PORT_INTERFACE_TYPE_CR4; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_SR: + return SAI_PORT_INTERFACE_TYPE_SR; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_SR2: + return SAI_PORT_INTERFACE_TYPE_SR2; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_SR4: + return SAI_PORT_INTERFACE_TYPE_SR4; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_LR: + return SAI_PORT_INTERFACE_TYPE_LR; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_LR4: + return SAI_PORT_INTERFACE_TYPE_LR4; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_KR: + return SAI_PORT_INTERFACE_TYPE_KR; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_KR4: + return SAI_PORT_INTERFACE_TYPE_KR4; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_CAUI: + return SAI_PORT_INTERFACE_TYPE_CAUI; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_GMII: + return SAI_PORT_INTERFACE_TYPE_GMII; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_SFI: + return SAI_PORT_INTERFACE_TYPE_SFI; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_XLAUI: + return SAI_PORT_INTERFACE_TYPE_XLAUI; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_KR2: + return SAI_PORT_INTERFACE_TYPE_KR2; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_CAUI4: + return SAI_PORT_INTERFACE_TYPE_CAUI4; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_XAUI: + return SAI_PORT_INTERFACE_TYPE_XAUI; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_XFI: + return SAI_PORT_INTERFACE_TYPE_XFI; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_XGMII: + return SAI_PORT_INTERFACE_TYPE_XGMII; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_CR8: + return SAI_PORT_INTERFACE_TYPE_CR8; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_KR8: + return SAI_PORT_INTERFACE_TYPE_KR8; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_SR8: + return SAI_PORT_INTERFACE_TYPE_SR8; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_LR8: + return SAI_PORT_INTERFACE_TYPE_LR8; + + case lemming::dataplane::sai::PORT_INTERFACE_TYPE_MAX: + return SAI_PORT_INTERFACE_TYPE_MAX; + + default: + return SAI_PORT_INTERFACE_TYPE_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_interface_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_interface_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_interface_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_interface_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortInternalLoopbackMode +convert_sai_port_internal_loopback_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_INTERNAL_LOOPBACK_MODE_NONE: + return lemming::dataplane::sai::PORT_INTERNAL_LOOPBACK_MODE_NONE; + + case SAI_PORT_INTERNAL_LOOPBACK_MODE_PHY: + return lemming::dataplane::sai::PORT_INTERNAL_LOOPBACK_MODE_PHY; + + case SAI_PORT_INTERNAL_LOOPBACK_MODE_MAC: + return lemming::dataplane::sai::PORT_INTERNAL_LOOPBACK_MODE_MAC; + + default: + return lemming::dataplane::sai::PORT_INTERNAL_LOOPBACK_MODE_UNSPECIFIED; + } +} +sai_port_internal_loopback_mode_t +convert_sai_port_internal_loopback_mode_t_to_sai( + lemming::dataplane::sai::PortInternalLoopbackMode val) { + switch (val) { + case lemming::dataplane::sai::PORT_INTERNAL_LOOPBACK_MODE_NONE: + return SAI_PORT_INTERNAL_LOOPBACK_MODE_NONE; + + case lemming::dataplane::sai::PORT_INTERNAL_LOOPBACK_MODE_PHY: + return SAI_PORT_INTERNAL_LOOPBACK_MODE_PHY; + + case lemming::dataplane::sai::PORT_INTERNAL_LOOPBACK_MODE_MAC: + return SAI_PORT_INTERNAL_LOOPBACK_MODE_MAC; + + default: + return SAI_PORT_INTERNAL_LOOPBACK_MODE_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_internal_loopback_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_port_internal_loopback_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_internal_loopback_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_internal_loopback_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortLinkTrainingFailureStatus +convert_sai_port_link_training_failure_status_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_LINK_TRAINING_FAILURE_STATUS_NO_ERROR: + return lemming::dataplane::sai:: + PORT_LINK_TRAINING_FAILURE_STATUS_NO_ERROR; + + case SAI_PORT_LINK_TRAINING_FAILURE_STATUS_FRAME_LOCK_ERROR: + return lemming::dataplane::sai:: + PORT_LINK_TRAINING_FAILURE_STATUS_FRAME_LOCK_ERROR; + + case SAI_PORT_LINK_TRAINING_FAILURE_STATUS_SNR_LOWER_THRESHOLD: + return lemming::dataplane::sai:: + PORT_LINK_TRAINING_FAILURE_STATUS_SNR_LOWER_THRESHOLD; + + case SAI_PORT_LINK_TRAINING_FAILURE_STATUS_TIME_OUT: + return lemming::dataplane::sai:: + PORT_LINK_TRAINING_FAILURE_STATUS_TIME_OUT; + + default: + return lemming::dataplane::sai:: + PORT_LINK_TRAINING_FAILURE_STATUS_UNSPECIFIED; + } +} +sai_port_link_training_failure_status_t +convert_sai_port_link_training_failure_status_t_to_sai( + lemming::dataplane::sai::PortLinkTrainingFailureStatus val) { + switch (val) { + case lemming::dataplane::sai::PORT_LINK_TRAINING_FAILURE_STATUS_NO_ERROR: + return SAI_PORT_LINK_TRAINING_FAILURE_STATUS_NO_ERROR; + + case lemming::dataplane::sai:: + PORT_LINK_TRAINING_FAILURE_STATUS_FRAME_LOCK_ERROR: + return SAI_PORT_LINK_TRAINING_FAILURE_STATUS_FRAME_LOCK_ERROR; + + case lemming::dataplane::sai:: + PORT_LINK_TRAINING_FAILURE_STATUS_SNR_LOWER_THRESHOLD: + return SAI_PORT_LINK_TRAINING_FAILURE_STATUS_SNR_LOWER_THRESHOLD; + + case lemming::dataplane::sai::PORT_LINK_TRAINING_FAILURE_STATUS_TIME_OUT: + return SAI_PORT_LINK_TRAINING_FAILURE_STATUS_TIME_OUT; + + default: + return SAI_PORT_LINK_TRAINING_FAILURE_STATUS_NO_ERROR; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_link_training_failure_status_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_port_link_training_failure_status_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_link_training_failure_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_link_training_failure_status_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortLinkTrainingRxStatus +convert_sai_port_link_training_rx_status_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_LINK_TRAINING_RX_STATUS_NOT_TRAINED: + return lemming::dataplane::sai::PORT_LINK_TRAINING_RX_STATUS_NOT_TRAINED; + + case SAI_PORT_LINK_TRAINING_RX_STATUS_TRAINED: + return lemming::dataplane::sai::PORT_LINK_TRAINING_RX_STATUS_TRAINED; + + default: + return lemming::dataplane::sai::PORT_LINK_TRAINING_RX_STATUS_UNSPECIFIED; + } +} +sai_port_link_training_rx_status_t +convert_sai_port_link_training_rx_status_t_to_sai( + lemming::dataplane::sai::PortLinkTrainingRxStatus val) { + switch (val) { + case lemming::dataplane::sai::PORT_LINK_TRAINING_RX_STATUS_NOT_TRAINED: + return SAI_PORT_LINK_TRAINING_RX_STATUS_NOT_TRAINED; + + case lemming::dataplane::sai::PORT_LINK_TRAINING_RX_STATUS_TRAINED: + return SAI_PORT_LINK_TRAINING_RX_STATUS_TRAINED; + + default: + return SAI_PORT_LINK_TRAINING_RX_STATUS_NOT_TRAINED; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_link_training_rx_status_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_port_link_training_rx_status_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_link_training_rx_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_link_training_rx_status_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortLoopbackMode +convert_sai_port_loopback_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_LOOPBACK_MODE_NONE: + return lemming::dataplane::sai::PORT_LOOPBACK_MODE_NONE; + + case SAI_PORT_LOOPBACK_MODE_PHY: + return lemming::dataplane::sai::PORT_LOOPBACK_MODE_PHY; + + case SAI_PORT_LOOPBACK_MODE_MAC: + return lemming::dataplane::sai::PORT_LOOPBACK_MODE_MAC; + + case SAI_PORT_LOOPBACK_MODE_PHY_REMOTE: + return lemming::dataplane::sai::PORT_LOOPBACK_MODE_PHY_REMOTE; + + default: + return lemming::dataplane::sai::PORT_LOOPBACK_MODE_UNSPECIFIED; + } +} +sai_port_loopback_mode_t convert_sai_port_loopback_mode_t_to_sai( + lemming::dataplane::sai::PortLoopbackMode val) { + switch (val) { + case lemming::dataplane::sai::PORT_LOOPBACK_MODE_NONE: + return SAI_PORT_LOOPBACK_MODE_NONE; + + case lemming::dataplane::sai::PORT_LOOPBACK_MODE_PHY: + return SAI_PORT_LOOPBACK_MODE_PHY; + + case lemming::dataplane::sai::PORT_LOOPBACK_MODE_MAC: + return SAI_PORT_LOOPBACK_MODE_MAC; + + case lemming::dataplane::sai::PORT_LOOPBACK_MODE_PHY_REMOTE: + return SAI_PORT_LOOPBACK_MODE_PHY_REMOTE; + + default: + return SAI_PORT_LOOPBACK_MODE_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_loopback_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_loopback_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_loopback_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_loopback_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortMdixModeConfig +convert_sai_port_mdix_mode_config_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_MDIX_MODE_CONFIG_AUTO: + return lemming::dataplane::sai::PORT_MDIX_MODE_CONFIG_AUTO; + + case SAI_PORT_MDIX_MODE_CONFIG_STRAIGHT: + return lemming::dataplane::sai::PORT_MDIX_MODE_CONFIG_STRAIGHT; + + case SAI_PORT_MDIX_MODE_CONFIG_CROSSOVER: + return lemming::dataplane::sai::PORT_MDIX_MODE_CONFIG_CROSSOVER; + + default: + return lemming::dataplane::sai::PORT_MDIX_MODE_CONFIG_UNSPECIFIED; + } +} +sai_port_mdix_mode_config_t convert_sai_port_mdix_mode_config_t_to_sai( + lemming::dataplane::sai::PortMdixModeConfig val) { + switch (val) { + case lemming::dataplane::sai::PORT_MDIX_MODE_CONFIG_AUTO: + return SAI_PORT_MDIX_MODE_CONFIG_AUTO; + + case lemming::dataplane::sai::PORT_MDIX_MODE_CONFIG_STRAIGHT: + return SAI_PORT_MDIX_MODE_CONFIG_STRAIGHT; + + case lemming::dataplane::sai::PORT_MDIX_MODE_CONFIG_CROSSOVER: + return SAI_PORT_MDIX_MODE_CONFIG_CROSSOVER; + + default: + return SAI_PORT_MDIX_MODE_CONFIG_AUTO; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_mdix_mode_config_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_mdix_mode_config_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_mdix_mode_config_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_mdix_mode_config_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortMdixModeStatus +convert_sai_port_mdix_mode_status_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_MDIX_MODE_STATUS_STRAIGHT: + return lemming::dataplane::sai::PORT_MDIX_MODE_STATUS_STRAIGHT; + + case SAI_PORT_MDIX_MODE_STATUS_CROSSOVER: + return lemming::dataplane::sai::PORT_MDIX_MODE_STATUS_CROSSOVER; + + default: + return lemming::dataplane::sai::PORT_MDIX_MODE_STATUS_UNSPECIFIED; + } +} +sai_port_mdix_mode_status_t convert_sai_port_mdix_mode_status_t_to_sai( + lemming::dataplane::sai::PortMdixModeStatus val) { + switch (val) { + case lemming::dataplane::sai::PORT_MDIX_MODE_STATUS_STRAIGHT: + return SAI_PORT_MDIX_MODE_STATUS_STRAIGHT; + + case lemming::dataplane::sai::PORT_MDIX_MODE_STATUS_CROSSOVER: + return SAI_PORT_MDIX_MODE_STATUS_CROSSOVER; + + default: + return SAI_PORT_MDIX_MODE_STATUS_STRAIGHT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_mdix_mode_status_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_mdix_mode_status_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_mdix_mode_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_mdix_mode_status_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortMediaType convert_sai_port_media_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_MEDIA_TYPE_NOT_PRESENT: + return lemming::dataplane::sai::PORT_MEDIA_TYPE_NOT_PRESENT; + + case SAI_PORT_MEDIA_TYPE_UNKNOWN: + return lemming::dataplane::sai::PORT_MEDIA_TYPE_UNKNOWN; + + case SAI_PORT_MEDIA_TYPE_FIBER: + return lemming::dataplane::sai::PORT_MEDIA_TYPE_FIBER; + + case SAI_PORT_MEDIA_TYPE_COPPER: + return lemming::dataplane::sai::PORT_MEDIA_TYPE_COPPER; + + case SAI_PORT_MEDIA_TYPE_BACKPLANE: + return lemming::dataplane::sai::PORT_MEDIA_TYPE_BACKPLANE; + + default: + return lemming::dataplane::sai::PORT_MEDIA_TYPE_UNSPECIFIED; + } +} +sai_port_media_type_t convert_sai_port_media_type_t_to_sai( + lemming::dataplane::sai::PortMediaType val) { + switch (val) { + case lemming::dataplane::sai::PORT_MEDIA_TYPE_NOT_PRESENT: + return SAI_PORT_MEDIA_TYPE_NOT_PRESENT; + + case lemming::dataplane::sai::PORT_MEDIA_TYPE_UNKNOWN: + return SAI_PORT_MEDIA_TYPE_UNKNOWN; + + case lemming::dataplane::sai::PORT_MEDIA_TYPE_FIBER: + return SAI_PORT_MEDIA_TYPE_FIBER; + + case lemming::dataplane::sai::PORT_MEDIA_TYPE_COPPER: + return SAI_PORT_MEDIA_TYPE_COPPER; + + case lemming::dataplane::sai::PORT_MEDIA_TYPE_BACKPLANE: + return SAI_PORT_MEDIA_TYPE_BACKPLANE; + + default: + return SAI_PORT_MEDIA_TYPE_NOT_PRESENT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_media_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_media_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_media_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_media_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortModuleType convert_sai_port_module_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_MODULE_TYPE_1000BASE_X: + return lemming::dataplane::sai::PORT_MODULE_TYPE_1000BASE_X; + + case SAI_PORT_MODULE_TYPE_100FX: + return lemming::dataplane::sai::PORT_MODULE_TYPE_100FX; + + case SAI_PORT_MODULE_TYPE_SGMII_SLAVE: + return lemming::dataplane::sai::PORT_MODULE_TYPE_SGMII_SLAVE; + + default: + return lemming::dataplane::sai::PORT_MODULE_TYPE_UNSPECIFIED; + } +} +sai_port_module_type_t convert_sai_port_module_type_t_to_sai( + lemming::dataplane::sai::PortModuleType val) { + switch (val) { + case lemming::dataplane::sai::PORT_MODULE_TYPE_1000BASE_X: + return SAI_PORT_MODULE_TYPE_1000BASE_X; + + case lemming::dataplane::sai::PORT_MODULE_TYPE_100FX: + return SAI_PORT_MODULE_TYPE_100FX; + + case lemming::dataplane::sai::PORT_MODULE_TYPE_SGMII_SLAVE: + return SAI_PORT_MODULE_TYPE_SGMII_SLAVE; + + default: + return SAI_PORT_MODULE_TYPE_1000BASE_X; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_module_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_module_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_module_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_module_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortOperStatus convert_sai_port_oper_status_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_OPER_STATUS_UNKNOWN: + return lemming::dataplane::sai::PORT_OPER_STATUS_UNKNOWN; + + case SAI_PORT_OPER_STATUS_UP: + return lemming::dataplane::sai::PORT_OPER_STATUS_UP; + + case SAI_PORT_OPER_STATUS_DOWN: + return lemming::dataplane::sai::PORT_OPER_STATUS_DOWN; + + case SAI_PORT_OPER_STATUS_TESTING: + return lemming::dataplane::sai::PORT_OPER_STATUS_TESTING; + + case SAI_PORT_OPER_STATUS_NOT_PRESENT: + return lemming::dataplane::sai::PORT_OPER_STATUS_NOT_PRESENT; + + default: + return lemming::dataplane::sai::PORT_OPER_STATUS_UNSPECIFIED; + } +} +sai_port_oper_status_t convert_sai_port_oper_status_t_to_sai( + lemming::dataplane::sai::PortOperStatus val) { + switch (val) { + case lemming::dataplane::sai::PORT_OPER_STATUS_UNKNOWN: + return SAI_PORT_OPER_STATUS_UNKNOWN; + + case lemming::dataplane::sai::PORT_OPER_STATUS_UP: + return SAI_PORT_OPER_STATUS_UP; + + case lemming::dataplane::sai::PORT_OPER_STATUS_DOWN: + return SAI_PORT_OPER_STATUS_DOWN; + + case lemming::dataplane::sai::PORT_OPER_STATUS_TESTING: + return SAI_PORT_OPER_STATUS_TESTING; + + case lemming::dataplane::sai::PORT_OPER_STATUS_NOT_PRESENT: + return SAI_PORT_OPER_STATUS_NOT_PRESENT; + + default: + return SAI_PORT_OPER_STATUS_UNKNOWN; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_oper_status_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_oper_status_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_oper_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_oper_status_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortPoolAttr convert_sai_port_pool_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_POOL_ATTR_PORT_ID: + return lemming::dataplane::sai::PORT_POOL_ATTR_PORT_ID; + + case SAI_PORT_POOL_ATTR_BUFFER_POOL_ID: + return lemming::dataplane::sai::PORT_POOL_ATTR_BUFFER_POOL_ID; + + case SAI_PORT_POOL_ATTR_QOS_WRED_PROFILE_ID: + return lemming::dataplane::sai::PORT_POOL_ATTR_QOS_WRED_PROFILE_ID; + + default: + return lemming::dataplane::sai::PORT_POOL_ATTR_UNSPECIFIED; + } +} +sai_port_pool_attr_t convert_sai_port_pool_attr_t_to_sai( + lemming::dataplane::sai::PortPoolAttr val) { + switch (val) { + case lemming::dataplane::sai::PORT_POOL_ATTR_PORT_ID: + return SAI_PORT_POOL_ATTR_PORT_ID; + + case lemming::dataplane::sai::PORT_POOL_ATTR_BUFFER_POOL_ID: + return SAI_PORT_POOL_ATTR_BUFFER_POOL_ID; + + case lemming::dataplane::sai::PORT_POOL_ATTR_QOS_WRED_PROFILE_ID: + return SAI_PORT_POOL_ATTR_QOS_WRED_PROFILE_ID; + + default: + return SAI_PORT_POOL_ATTR_PORT_ID; + } +} + +google::protobuf::RepeatedField convert_list_sai_port_pool_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_pool_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_pool_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_pool_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortPoolStat convert_sai_port_pool_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_POOL_STAT_IF_OCTETS: + return lemming::dataplane::sai::PORT_POOL_STAT_IF_OCTETS; + + case SAI_PORT_POOL_STAT_GREEN_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::PORT_POOL_STAT_GREEN_WRED_DROPPED_PACKETS; + + case SAI_PORT_POOL_STAT_GREEN_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::PORT_POOL_STAT_GREEN_WRED_DROPPED_BYTES; + + case SAI_PORT_POOL_STAT_YELLOW_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai:: + PORT_POOL_STAT_YELLOW_WRED_DROPPED_PACKETS; + + case SAI_PORT_POOL_STAT_YELLOW_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::PORT_POOL_STAT_YELLOW_WRED_DROPPED_BYTES; + + case SAI_PORT_POOL_STAT_RED_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::PORT_POOL_STAT_RED_WRED_DROPPED_PACKETS; + + case SAI_PORT_POOL_STAT_RED_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::PORT_POOL_STAT_RED_WRED_DROPPED_BYTES; + + case SAI_PORT_POOL_STAT_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::PORT_POOL_STAT_WRED_DROPPED_PACKETS; + + case SAI_PORT_POOL_STAT_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::PORT_POOL_STAT_WRED_DROPPED_BYTES; + + case SAI_PORT_POOL_STAT_GREEN_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai:: + PORT_POOL_STAT_GREEN_WRED_ECN_MARKED_PACKETS; + + case SAI_PORT_POOL_STAT_GREEN_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai:: + PORT_POOL_STAT_GREEN_WRED_ECN_MARKED_BYTES; + + case SAI_PORT_POOL_STAT_YELLOW_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai:: + PORT_POOL_STAT_YELLOW_WRED_ECN_MARKED_PACKETS; + + case SAI_PORT_POOL_STAT_YELLOW_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai:: + PORT_POOL_STAT_YELLOW_WRED_ECN_MARKED_BYTES; + + case SAI_PORT_POOL_STAT_RED_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai:: + PORT_POOL_STAT_RED_WRED_ECN_MARKED_PACKETS; + + case SAI_PORT_POOL_STAT_RED_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai::PORT_POOL_STAT_RED_WRED_ECN_MARKED_BYTES; + + case SAI_PORT_POOL_STAT_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai::PORT_POOL_STAT_WRED_ECN_MARKED_PACKETS; + + case SAI_PORT_POOL_STAT_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai::PORT_POOL_STAT_WRED_ECN_MARKED_BYTES; + + case SAI_PORT_POOL_STAT_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai::PORT_POOL_STAT_CURR_OCCUPANCY_BYTES; + + case SAI_PORT_POOL_STAT_WATERMARK_BYTES: + return lemming::dataplane::sai::PORT_POOL_STAT_WATERMARK_BYTES; + + case SAI_PORT_POOL_STAT_SHARED_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai:: + PORT_POOL_STAT_SHARED_CURR_OCCUPANCY_BYTES; + + case SAI_PORT_POOL_STAT_SHARED_WATERMARK_BYTES: + return lemming::dataplane::sai::PORT_POOL_STAT_SHARED_WATERMARK_BYTES; + + case SAI_PORT_POOL_STAT_DROPPED_PKTS: + return lemming::dataplane::sai::PORT_POOL_STAT_DROPPED_PKTS; + + default: + return lemming::dataplane::sai::PORT_POOL_STAT_UNSPECIFIED; + } +} +sai_port_pool_stat_t convert_sai_port_pool_stat_t_to_sai( + lemming::dataplane::sai::PortPoolStat val) { + switch (val) { + case lemming::dataplane::sai::PORT_POOL_STAT_IF_OCTETS: + return SAI_PORT_POOL_STAT_IF_OCTETS; + + case lemming::dataplane::sai::PORT_POOL_STAT_GREEN_WRED_DROPPED_PACKETS: + return SAI_PORT_POOL_STAT_GREEN_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::PORT_POOL_STAT_GREEN_WRED_DROPPED_BYTES: + return SAI_PORT_POOL_STAT_GREEN_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_YELLOW_WRED_DROPPED_PACKETS: + return SAI_PORT_POOL_STAT_YELLOW_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::PORT_POOL_STAT_YELLOW_WRED_DROPPED_BYTES: + return SAI_PORT_POOL_STAT_YELLOW_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_RED_WRED_DROPPED_PACKETS: + return SAI_PORT_POOL_STAT_RED_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::PORT_POOL_STAT_RED_WRED_DROPPED_BYTES: + return SAI_PORT_POOL_STAT_RED_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_WRED_DROPPED_PACKETS: + return SAI_PORT_POOL_STAT_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::PORT_POOL_STAT_WRED_DROPPED_BYTES: + return SAI_PORT_POOL_STAT_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_GREEN_WRED_ECN_MARKED_PACKETS: + return SAI_PORT_POOL_STAT_GREEN_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::PORT_POOL_STAT_GREEN_WRED_ECN_MARKED_BYTES: + return SAI_PORT_POOL_STAT_GREEN_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_YELLOW_WRED_ECN_MARKED_PACKETS: + return SAI_PORT_POOL_STAT_YELLOW_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::PORT_POOL_STAT_YELLOW_WRED_ECN_MARKED_BYTES: + return SAI_PORT_POOL_STAT_YELLOW_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_RED_WRED_ECN_MARKED_PACKETS: + return SAI_PORT_POOL_STAT_RED_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::PORT_POOL_STAT_RED_WRED_ECN_MARKED_BYTES: + return SAI_PORT_POOL_STAT_RED_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_WRED_ECN_MARKED_PACKETS: + return SAI_PORT_POOL_STAT_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::PORT_POOL_STAT_WRED_ECN_MARKED_BYTES: + return SAI_PORT_POOL_STAT_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_CURR_OCCUPANCY_BYTES: + return SAI_PORT_POOL_STAT_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_WATERMARK_BYTES: + return SAI_PORT_POOL_STAT_WATERMARK_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_SHARED_CURR_OCCUPANCY_BYTES: + return SAI_PORT_POOL_STAT_SHARED_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_SHARED_WATERMARK_BYTES: + return SAI_PORT_POOL_STAT_SHARED_WATERMARK_BYTES; + + case lemming::dataplane::sai::PORT_POOL_STAT_DROPPED_PKTS: + return SAI_PORT_POOL_STAT_DROPPED_PKTS; + + default: + return SAI_PORT_POOL_STAT_IF_OCTETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_port_pool_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_pool_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_pool_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_pool_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortPrbsConfig convert_sai_port_prbs_config_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_PRBS_CONFIG_DISABLE: + return lemming::dataplane::sai::PORT_PRBS_CONFIG_DISABLE; + + case SAI_PORT_PRBS_CONFIG_ENABLE_TX_RX: + return lemming::dataplane::sai::PORT_PRBS_CONFIG_ENABLE_TX_RX; + + case SAI_PORT_PRBS_CONFIG_ENABLE_RX: + return lemming::dataplane::sai::PORT_PRBS_CONFIG_ENABLE_RX; + + case SAI_PORT_PRBS_CONFIG_ENABLE_TX: + return lemming::dataplane::sai::PORT_PRBS_CONFIG_ENABLE_TX; + + default: + return lemming::dataplane::sai::PORT_PRBS_CONFIG_UNSPECIFIED; + } +} +sai_port_prbs_config_t convert_sai_port_prbs_config_t_to_sai( + lemming::dataplane::sai::PortPrbsConfig val) { + switch (val) { + case lemming::dataplane::sai::PORT_PRBS_CONFIG_DISABLE: + return SAI_PORT_PRBS_CONFIG_DISABLE; + + case lemming::dataplane::sai::PORT_PRBS_CONFIG_ENABLE_TX_RX: + return SAI_PORT_PRBS_CONFIG_ENABLE_TX_RX; + + case lemming::dataplane::sai::PORT_PRBS_CONFIG_ENABLE_RX: + return SAI_PORT_PRBS_CONFIG_ENABLE_RX; + + case lemming::dataplane::sai::PORT_PRBS_CONFIG_ENABLE_TX: + return SAI_PORT_PRBS_CONFIG_ENABLE_TX; + + default: + return SAI_PORT_PRBS_CONFIG_DISABLE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_prbs_config_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_prbs_config_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_prbs_config_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_prbs_config_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortPrbsRxStatus +convert_sai_port_prbs_rx_status_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_PRBS_RX_STATUS_OK: + return lemming::dataplane::sai::PORT_PRBS_RX_STATUS_OK; + + case SAI_PORT_PRBS_RX_STATUS_LOCK_WITH_ERRORS: + return lemming::dataplane::sai::PORT_PRBS_RX_STATUS_LOCK_WITH_ERRORS; + + case SAI_PORT_PRBS_RX_STATUS_NOT_LOCKED: + return lemming::dataplane::sai::PORT_PRBS_RX_STATUS_NOT_LOCKED; + + case SAI_PORT_PRBS_RX_STATUS_LOST_LOCK: + return lemming::dataplane::sai::PORT_PRBS_RX_STATUS_LOST_LOCK; + + default: + return lemming::dataplane::sai::PORT_PRBS_RX_STATUS_UNSPECIFIED; + } +} +sai_port_prbs_rx_status_t convert_sai_port_prbs_rx_status_t_to_sai( + lemming::dataplane::sai::PortPrbsRxStatus val) { + switch (val) { + case lemming::dataplane::sai::PORT_PRBS_RX_STATUS_OK: + return SAI_PORT_PRBS_RX_STATUS_OK; + + case lemming::dataplane::sai::PORT_PRBS_RX_STATUS_LOCK_WITH_ERRORS: + return SAI_PORT_PRBS_RX_STATUS_LOCK_WITH_ERRORS; + + case lemming::dataplane::sai::PORT_PRBS_RX_STATUS_NOT_LOCKED: + return SAI_PORT_PRBS_RX_STATUS_NOT_LOCKED; + + case lemming::dataplane::sai::PORT_PRBS_RX_STATUS_LOST_LOCK: + return SAI_PORT_PRBS_RX_STATUS_LOST_LOCK; + + default: + return SAI_PORT_PRBS_RX_STATUS_OK; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_prbs_rx_status_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_prbs_rx_status_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_prbs_rx_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_prbs_rx_status_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortPriorityFlowControlMode +convert_sai_port_priority_flow_control_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_PORT_PRIORITY_FLOW_CONTROL_MODE_COMBINED: + return lemming::dataplane::sai::PORT_PRIORITY_FLOW_CONTROL_MODE_COMBINED; + + case SAI_PORT_PRIORITY_FLOW_CONTROL_MODE_SEPARATE: + return lemming::dataplane::sai::PORT_PRIORITY_FLOW_CONTROL_MODE_SEPARATE; + + default: + return lemming::dataplane::sai:: + PORT_PRIORITY_FLOW_CONTROL_MODE_UNSPECIFIED; + } +} +sai_port_priority_flow_control_mode_t +convert_sai_port_priority_flow_control_mode_t_to_sai( + lemming::dataplane::sai::PortPriorityFlowControlMode val) { + switch (val) { + case lemming::dataplane::sai::PORT_PRIORITY_FLOW_CONTROL_MODE_COMBINED: + return SAI_PORT_PRIORITY_FLOW_CONTROL_MODE_COMBINED; + + case lemming::dataplane::sai::PORT_PRIORITY_FLOW_CONTROL_MODE_SEPARATE: + return SAI_PORT_PRIORITY_FLOW_CONTROL_MODE_SEPARATE; + + default: + return SAI_PORT_PRIORITY_FLOW_CONTROL_MODE_COMBINED; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_priority_flow_control_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_port_priority_flow_control_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_priority_flow_control_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_priority_flow_control_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortPtpMode convert_sai_port_ptp_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_PTP_MODE_NONE: + return lemming::dataplane::sai::PORT_PTP_MODE_NONE; + + case SAI_PORT_PTP_MODE_SINGLE_STEP_TIMESTAMP: + return lemming::dataplane::sai::PORT_PTP_MODE_SINGLE_STEP_TIMESTAMP; + + case SAI_PORT_PTP_MODE_TWO_STEP_TIMESTAMP: + return lemming::dataplane::sai::PORT_PTP_MODE_TWO_STEP_TIMESTAMP; + + default: + return lemming::dataplane::sai::PORT_PTP_MODE_UNSPECIFIED; + } +} +sai_port_ptp_mode_t convert_sai_port_ptp_mode_t_to_sai( + lemming::dataplane::sai::PortPtpMode val) { + switch (val) { + case lemming::dataplane::sai::PORT_PTP_MODE_NONE: + return SAI_PORT_PTP_MODE_NONE; + + case lemming::dataplane::sai::PORT_PTP_MODE_SINGLE_STEP_TIMESTAMP: + return SAI_PORT_PTP_MODE_SINGLE_STEP_TIMESTAMP; + + case lemming::dataplane::sai::PORT_PTP_MODE_TWO_STEP_TIMESTAMP: + return SAI_PORT_PTP_MODE_TWO_STEP_TIMESTAMP; + + default: + return SAI_PORT_PTP_MODE_NONE; + } +} + +google::protobuf::RepeatedField convert_list_sai_port_ptp_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_ptp_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_ptp_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_ptp_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortSerdesAttr convert_sai_port_serdes_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_SERDES_ATTR_PORT_ID: + return lemming::dataplane::sai::PORT_SERDES_ATTR_PORT_ID; + + case SAI_PORT_SERDES_ATTR_PREEMPHASIS: + return lemming::dataplane::sai::PORT_SERDES_ATTR_PREEMPHASIS; + + case SAI_PORT_SERDES_ATTR_IDRIVER: + return lemming::dataplane::sai::PORT_SERDES_ATTR_IDRIVER; + + case SAI_PORT_SERDES_ATTR_IPREDRIVER: + return lemming::dataplane::sai::PORT_SERDES_ATTR_IPREDRIVER; + + case SAI_PORT_SERDES_ATTR_TX_FIR_PRE1: + return lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_PRE1; + + case SAI_PORT_SERDES_ATTR_TX_FIR_PRE2: + return lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_PRE2; + + case SAI_PORT_SERDES_ATTR_TX_FIR_PRE3: + return lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_PRE3; + + case SAI_PORT_SERDES_ATTR_TX_FIR_MAIN: + return lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_MAIN; + + case SAI_PORT_SERDES_ATTR_TX_FIR_POST1: + return lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_POST1; + + case SAI_PORT_SERDES_ATTR_TX_FIR_POST2: + return lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_POST2; + + case SAI_PORT_SERDES_ATTR_TX_FIR_POST3: + return lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_POST3; + + case SAI_PORT_SERDES_ATTR_TX_FIR_ATTN: + return lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_ATTN; + + default: + return lemming::dataplane::sai::PORT_SERDES_ATTR_UNSPECIFIED; + } +} +sai_port_serdes_attr_t convert_sai_port_serdes_attr_t_to_sai( + lemming::dataplane::sai::PortSerdesAttr val) { + switch (val) { + case lemming::dataplane::sai::PORT_SERDES_ATTR_PORT_ID: + return SAI_PORT_SERDES_ATTR_PORT_ID; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_PREEMPHASIS: + return SAI_PORT_SERDES_ATTR_PREEMPHASIS; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_IDRIVER: + return SAI_PORT_SERDES_ATTR_IDRIVER; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_IPREDRIVER: + return SAI_PORT_SERDES_ATTR_IPREDRIVER; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_PRE1: + return SAI_PORT_SERDES_ATTR_TX_FIR_PRE1; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_PRE2: + return SAI_PORT_SERDES_ATTR_TX_FIR_PRE2; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_PRE3: + return SAI_PORT_SERDES_ATTR_TX_FIR_PRE3; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_MAIN: + return SAI_PORT_SERDES_ATTR_TX_FIR_MAIN; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_POST1: + return SAI_PORT_SERDES_ATTR_TX_FIR_POST1; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_POST2: + return SAI_PORT_SERDES_ATTR_TX_FIR_POST2; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_POST3: + return SAI_PORT_SERDES_ATTR_TX_FIR_POST3; + + case lemming::dataplane::sai::PORT_SERDES_ATTR_TX_FIR_ATTN: + return SAI_PORT_SERDES_ATTR_TX_FIR_ATTN; + + default: + return SAI_PORT_SERDES_ATTR_PORT_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_port_serdes_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_serdes_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_serdes_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_serdes_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortStat convert_sai_port_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_STAT_IF_IN_OCTETS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_OCTETS; + + case SAI_PORT_STAT_IF_IN_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_UCAST_PKTS; + + case SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_NON_UCAST_PKTS; + + case SAI_PORT_STAT_IF_IN_DISCARDS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_DISCARDS; + + case SAI_PORT_STAT_IF_IN_ERRORS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_ERRORS; + + case SAI_PORT_STAT_IF_IN_UNKNOWN_PROTOS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_UNKNOWN_PROTOS; + + case SAI_PORT_STAT_IF_IN_BROADCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_BROADCAST_PKTS; + + case SAI_PORT_STAT_IF_IN_MULTICAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_MULTICAST_PKTS; + + case SAI_PORT_STAT_IF_IN_VLAN_DISCARDS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_VLAN_DISCARDS; + + case SAI_PORT_STAT_IF_OUT_OCTETS: + return lemming::dataplane::sai::PORT_STAT_IF_OUT_OCTETS; + + case SAI_PORT_STAT_IF_OUT_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IF_OUT_UCAST_PKTS; + + case SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IF_OUT_NON_UCAST_PKTS; + + case SAI_PORT_STAT_IF_OUT_DISCARDS: + return lemming::dataplane::sai::PORT_STAT_IF_OUT_DISCARDS; + + case SAI_PORT_STAT_IF_OUT_ERRORS: + return lemming::dataplane::sai::PORT_STAT_IF_OUT_ERRORS; + + case SAI_PORT_STAT_IF_OUT_QLEN: + return lemming::dataplane::sai::PORT_STAT_IF_OUT_QLEN; + + case SAI_PORT_STAT_IF_OUT_BROADCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IF_OUT_BROADCAST_PKTS; + + case SAI_PORT_STAT_IF_OUT_MULTICAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IF_OUT_MULTICAST_PKTS; + + case SAI_PORT_STAT_ETHER_STATS_DROP_EVENTS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_DROP_EVENTS; + + case SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_MULTICAST_PKTS; + + case SAI_PORT_STAT_ETHER_STATS_BROADCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_BROADCAST_PKTS; + + case SAI_PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS; + + case SAI_PORT_STAT_ETHER_STATS_FRAGMENTS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_FRAGMENTS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_64_OCTETS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_PKTS_64_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_65_TO_127_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_65_TO_127_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_128_TO_255_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_128_TO_255_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_256_TO_511_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_256_TO_511_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_512_TO_1023_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_512_TO_1023_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_1024_TO_1518_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_1024_TO_1518_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_1519_TO_2047_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_1519_TO_2047_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_2048_TO_4095_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_2048_TO_4095_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_4096_TO_9216_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_4096_TO_9216_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS_9217_TO_16383_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_9217_TO_16383_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_OVERSIZE_PKTS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_OVERSIZE_PKTS; + + case SAI_PORT_STAT_ETHER_RX_OVERSIZE_PKTS: + return lemming::dataplane::sai::PORT_STAT_ETHER_RX_OVERSIZE_PKTS; + + case SAI_PORT_STAT_ETHER_TX_OVERSIZE_PKTS: + return lemming::dataplane::sai::PORT_STAT_ETHER_TX_OVERSIZE_PKTS; + + case SAI_PORT_STAT_ETHER_STATS_JABBERS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_JABBERS; + + case SAI_PORT_STAT_ETHER_STATS_OCTETS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_OCTETS; + + case SAI_PORT_STAT_ETHER_STATS_PKTS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_PKTS; + + case SAI_PORT_STAT_ETHER_STATS_COLLISIONS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_COLLISIONS; + + case SAI_PORT_STAT_ETHER_STATS_CRC_ALIGN_ERRORS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_CRC_ALIGN_ERRORS; + + case SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_TX_NO_ERRORS; + + case SAI_PORT_STAT_ETHER_STATS_RX_NO_ERRORS: + return lemming::dataplane::sai::PORT_STAT_ETHER_STATS_RX_NO_ERRORS; + + case SAI_PORT_STAT_IP_IN_RECEIVES: + return lemming::dataplane::sai::PORT_STAT_IP_IN_RECEIVES; + + case SAI_PORT_STAT_IP_IN_OCTETS: + return lemming::dataplane::sai::PORT_STAT_IP_IN_OCTETS; + + case SAI_PORT_STAT_IP_IN_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IP_IN_UCAST_PKTS; + + case SAI_PORT_STAT_IP_IN_NON_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IP_IN_NON_UCAST_PKTS; + + case SAI_PORT_STAT_IP_IN_DISCARDS: + return lemming::dataplane::sai::PORT_STAT_IP_IN_DISCARDS; + + case SAI_PORT_STAT_IP_OUT_OCTETS: + return lemming::dataplane::sai::PORT_STAT_IP_OUT_OCTETS; + + case SAI_PORT_STAT_IP_OUT_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IP_OUT_UCAST_PKTS; + + case SAI_PORT_STAT_IP_OUT_NON_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IP_OUT_NON_UCAST_PKTS; + + case SAI_PORT_STAT_IP_OUT_DISCARDS: + return lemming::dataplane::sai::PORT_STAT_IP_OUT_DISCARDS; + + case SAI_PORT_STAT_IPV6_IN_RECEIVES: + return lemming::dataplane::sai::PORT_STAT_IPV6_IN_RECEIVES; + + case SAI_PORT_STAT_IPV6_IN_OCTETS: + return lemming::dataplane::sai::PORT_STAT_IPV6_IN_OCTETS; + + case SAI_PORT_STAT_IPV6_IN_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IPV6_IN_UCAST_PKTS; + + case SAI_PORT_STAT_IPV6_IN_NON_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IPV6_IN_NON_UCAST_PKTS; + + case SAI_PORT_STAT_IPV6_IN_MCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IPV6_IN_MCAST_PKTS; + + case SAI_PORT_STAT_IPV6_IN_DISCARDS: + return lemming::dataplane::sai::PORT_STAT_IPV6_IN_DISCARDS; + + case SAI_PORT_STAT_IPV6_OUT_OCTETS: + return lemming::dataplane::sai::PORT_STAT_IPV6_OUT_OCTETS; + + case SAI_PORT_STAT_IPV6_OUT_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IPV6_OUT_UCAST_PKTS; + + case SAI_PORT_STAT_IPV6_OUT_NON_UCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IPV6_OUT_NON_UCAST_PKTS; + + case SAI_PORT_STAT_IPV6_OUT_MCAST_PKTS: + return lemming::dataplane::sai::PORT_STAT_IPV6_OUT_MCAST_PKTS; + + case SAI_PORT_STAT_IPV6_OUT_DISCARDS: + return lemming::dataplane::sai::PORT_STAT_IPV6_OUT_DISCARDS; + + case SAI_PORT_STAT_GREEN_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::PORT_STAT_GREEN_WRED_DROPPED_PACKETS; + + case SAI_PORT_STAT_GREEN_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::PORT_STAT_GREEN_WRED_DROPPED_BYTES; + + case SAI_PORT_STAT_YELLOW_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::PORT_STAT_YELLOW_WRED_DROPPED_PACKETS; + + case SAI_PORT_STAT_YELLOW_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::PORT_STAT_YELLOW_WRED_DROPPED_BYTES; + + case SAI_PORT_STAT_RED_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::PORT_STAT_RED_WRED_DROPPED_PACKETS; + + case SAI_PORT_STAT_RED_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::PORT_STAT_RED_WRED_DROPPED_BYTES; + + case SAI_PORT_STAT_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::PORT_STAT_WRED_DROPPED_PACKETS; + + case SAI_PORT_STAT_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::PORT_STAT_WRED_DROPPED_BYTES; + + case SAI_PORT_STAT_ECN_MARKED_PACKETS: + return lemming::dataplane::sai::PORT_STAT_ECN_MARKED_PACKETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_64_OCTETS: + return lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_64_OCTETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_65_TO_127_OCTETS: + return lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_65_TO_127_OCTETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS: + return lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_256_TO_511_OCTETS: + return lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_256_TO_511_OCTETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_512_TO_1023_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_IN_PKTS_512_TO_1023_OCTETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_1024_TO_1518_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_IN_PKTS_1024_TO_1518_OCTETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_1519_TO_2047_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_IN_PKTS_1519_TO_2047_OCTETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_2048_TO_4095_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_IN_PKTS_2048_TO_4095_OCTETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_4096_TO_9216_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_IN_PKTS_4096_TO_9216_OCTETS; + + case SAI_PORT_STAT_ETHER_IN_PKTS_9217_TO_16383_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_IN_PKTS_9217_TO_16383_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_64_OCTETS: + return lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_64_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_65_TO_127_OCTETS: + return lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_65_TO_127_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_128_TO_255_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_OUT_PKTS_128_TO_255_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_256_TO_511_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_OUT_PKTS_256_TO_511_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_512_TO_1023_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_OUT_PKTS_512_TO_1023_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_1024_TO_1518_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_OUT_PKTS_1024_TO_1518_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_1519_TO_2047_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_OUT_PKTS_1519_TO_2047_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_2048_TO_4095_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_OUT_PKTS_2048_TO_4095_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_4096_TO_9216_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_OUT_PKTS_4096_TO_9216_OCTETS; + + case SAI_PORT_STAT_ETHER_OUT_PKTS_9217_TO_16383_OCTETS: + return lemming::dataplane::sai:: + PORT_STAT_ETHER_OUT_PKTS_9217_TO_16383_OCTETS; + + case SAI_PORT_STAT_IN_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai::PORT_STAT_IN_CURR_OCCUPANCY_BYTES; + + case SAI_PORT_STAT_IN_WATERMARK_BYTES: + return lemming::dataplane::sai::PORT_STAT_IN_WATERMARK_BYTES; + + case SAI_PORT_STAT_IN_SHARED_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai::PORT_STAT_IN_SHARED_CURR_OCCUPANCY_BYTES; + + case SAI_PORT_STAT_IN_SHARED_WATERMARK_BYTES: + return lemming::dataplane::sai::PORT_STAT_IN_SHARED_WATERMARK_BYTES; + + case SAI_PORT_STAT_OUT_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai::PORT_STAT_OUT_CURR_OCCUPANCY_BYTES; + + case SAI_PORT_STAT_OUT_WATERMARK_BYTES: + return lemming::dataplane::sai::PORT_STAT_OUT_WATERMARK_BYTES; + + case SAI_PORT_STAT_OUT_SHARED_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai::PORT_STAT_OUT_SHARED_CURR_OCCUPANCY_BYTES; + + case SAI_PORT_STAT_OUT_SHARED_WATERMARK_BYTES: + return lemming::dataplane::sai::PORT_STAT_OUT_SHARED_WATERMARK_BYTES; + + case SAI_PORT_STAT_IN_DROPPED_PKTS: + return lemming::dataplane::sai::PORT_STAT_IN_DROPPED_PKTS; + + case SAI_PORT_STAT_OUT_DROPPED_PKTS: + return lemming::dataplane::sai::PORT_STAT_OUT_DROPPED_PKTS; + + case SAI_PORT_STAT_PAUSE_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PAUSE_RX_PKTS; + + case SAI_PORT_STAT_PAUSE_TX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PAUSE_TX_PKTS; + + case SAI_PORT_STAT_PFC_0_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_0_RX_PKTS; + + case SAI_PORT_STAT_PFC_0_TX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_0_TX_PKTS; + + case SAI_PORT_STAT_PFC_1_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_1_RX_PKTS; + + case SAI_PORT_STAT_PFC_1_TX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_1_TX_PKTS; + + case SAI_PORT_STAT_PFC_2_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_2_RX_PKTS; + + case SAI_PORT_STAT_PFC_2_TX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_2_TX_PKTS; + + case SAI_PORT_STAT_PFC_3_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_3_RX_PKTS; + + case SAI_PORT_STAT_PFC_3_TX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_3_TX_PKTS; + + case SAI_PORT_STAT_PFC_4_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_4_RX_PKTS; + + case SAI_PORT_STAT_PFC_4_TX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_4_TX_PKTS; + + case SAI_PORT_STAT_PFC_5_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_5_RX_PKTS; + + case SAI_PORT_STAT_PFC_5_TX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_5_TX_PKTS; + + case SAI_PORT_STAT_PFC_6_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_6_RX_PKTS; + + case SAI_PORT_STAT_PFC_6_TX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_6_TX_PKTS; + + case SAI_PORT_STAT_PFC_7_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_7_RX_PKTS; + + case SAI_PORT_STAT_PFC_7_TX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_7_TX_PKTS; + + case SAI_PORT_STAT_PFC_0_RX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_0_RX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_0_TX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_0_TX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_1_RX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_1_RX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_1_TX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_1_TX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_2_RX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_2_RX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_2_TX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_2_TX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_3_RX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_3_RX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_3_TX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_3_TX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_4_RX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_4_RX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_4_TX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_4_TX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_5_RX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_5_RX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_5_TX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_5_TX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_6_RX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_6_RX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_6_TX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_6_TX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_7_RX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_7_RX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_7_TX_PAUSE_DURATION: + return lemming::dataplane::sai::PORT_STAT_PFC_7_TX_PAUSE_DURATION; + + case SAI_PORT_STAT_PFC_0_RX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_0_RX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_0_TX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_0_TX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_1_RX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_1_RX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_1_TX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_1_TX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_2_RX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_2_RX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_2_TX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_2_TX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_3_RX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_3_RX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_3_TX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_3_TX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_4_RX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_4_RX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_4_TX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_4_TX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_5_RX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_5_RX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_5_TX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_5_TX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_6_RX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_6_RX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_6_TX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_6_TX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_7_RX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_7_RX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_7_TX_PAUSE_DURATION_US: + return lemming::dataplane::sai::PORT_STAT_PFC_7_TX_PAUSE_DURATION_US; + + case SAI_PORT_STAT_PFC_0_ON2OFF_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_0_ON2OFF_RX_PKTS; + + case SAI_PORT_STAT_PFC_1_ON2OFF_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_1_ON2OFF_RX_PKTS; + + case SAI_PORT_STAT_PFC_2_ON2OFF_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_2_ON2OFF_RX_PKTS; + + case SAI_PORT_STAT_PFC_3_ON2OFF_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_3_ON2OFF_RX_PKTS; + + case SAI_PORT_STAT_PFC_4_ON2OFF_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_4_ON2OFF_RX_PKTS; + + case SAI_PORT_STAT_PFC_5_ON2OFF_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_5_ON2OFF_RX_PKTS; + + case SAI_PORT_STAT_PFC_6_ON2OFF_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_6_ON2OFF_RX_PKTS; + + case SAI_PORT_STAT_PFC_7_ON2OFF_RX_PKTS: + return lemming::dataplane::sai::PORT_STAT_PFC_7_ON2OFF_RX_PKTS; + + case SAI_PORT_STAT_DOT3_STATS_ALIGNMENT_ERRORS: + return lemming::dataplane::sai::PORT_STAT_DOT3_STATS_ALIGNMENT_ERRORS; + + case SAI_PORT_STAT_DOT3_STATS_FCS_ERRORS: + return lemming::dataplane::sai::PORT_STAT_DOT3_STATS_FCS_ERRORS; + + case SAI_PORT_STAT_DOT3_STATS_SINGLE_COLLISION_FRAMES: + return lemming::dataplane::sai:: + PORT_STAT_DOT3_STATS_SINGLE_COLLISION_FRAMES; + + case SAI_PORT_STAT_DOT3_STATS_MULTIPLE_COLLISION_FRAMES: + return lemming::dataplane::sai:: + PORT_STAT_DOT3_STATS_MULTIPLE_COLLISION_FRAMES; + + case SAI_PORT_STAT_DOT3_STATS_SQE_TEST_ERRORS: + return lemming::dataplane::sai::PORT_STAT_DOT3_STATS_SQE_TEST_ERRORS; + + case SAI_PORT_STAT_DOT3_STATS_DEFERRED_TRANSMISSIONS: + return lemming::dataplane::sai:: + PORT_STAT_DOT3_STATS_DEFERRED_TRANSMISSIONS; + + case SAI_PORT_STAT_DOT3_STATS_LATE_COLLISIONS: + return lemming::dataplane::sai::PORT_STAT_DOT3_STATS_LATE_COLLISIONS; + + case SAI_PORT_STAT_DOT3_STATS_EXCESSIVE_COLLISIONS: + return lemming::dataplane::sai::PORT_STAT_DOT3_STATS_EXCESSIVE_COLLISIONS; + + case SAI_PORT_STAT_DOT3_STATS_INTERNAL_MAC_TRANSMIT_ERRORS: + return lemming::dataplane::sai:: + PORT_STAT_DOT3_STATS_INTERNAL_MAC_TRANSMIT_ERRORS; + + case SAI_PORT_STAT_DOT3_STATS_CARRIER_SENSE_ERRORS: + return lemming::dataplane::sai::PORT_STAT_DOT3_STATS_CARRIER_SENSE_ERRORS; + + case SAI_PORT_STAT_DOT3_STATS_FRAME_TOO_LONGS: + return lemming::dataplane::sai::PORT_STAT_DOT3_STATS_FRAME_TOO_LONGS; + + case SAI_PORT_STAT_DOT3_STATS_INTERNAL_MAC_RECEIVE_ERRORS: + return lemming::dataplane::sai:: + PORT_STAT_DOT3_STATS_INTERNAL_MAC_RECEIVE_ERRORS; + + case SAI_PORT_STAT_DOT3_STATS_SYMBOL_ERRORS: + return lemming::dataplane::sai::PORT_STAT_DOT3_STATS_SYMBOL_ERRORS; + + case SAI_PORT_STAT_DOT3_CONTROL_IN_UNKNOWN_OPCODES: + return lemming::dataplane::sai::PORT_STAT_DOT3_CONTROL_IN_UNKNOWN_OPCODES; + + case SAI_PORT_STAT_EEE_TX_EVENT_COUNT: + return lemming::dataplane::sai::PORT_STAT_EEE_TX_EVENT_COUNT; + + case SAI_PORT_STAT_EEE_RX_EVENT_COUNT: + return lemming::dataplane::sai::PORT_STAT_EEE_RX_EVENT_COUNT; + + case SAI_PORT_STAT_EEE_TX_DURATION: + return lemming::dataplane::sai::PORT_STAT_EEE_TX_DURATION; + + case SAI_PORT_STAT_EEE_RX_DURATION: + return lemming::dataplane::sai::PORT_STAT_EEE_RX_DURATION; + + case SAI_PORT_STAT_PRBS_ERROR_COUNT: + return lemming::dataplane::sai::PORT_STAT_PRBS_ERROR_COUNT; + + case SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES; + + case SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES: + return lemming::dataplane::sai:: + PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES; + + case SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS; + + case SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FABRIC_DATA_UNITS; + + case SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS: + return lemming::dataplane::sai::PORT_STAT_IF_OUT_FABRIC_DATA_UNITS; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S0: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S0; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S1: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S1; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S2: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S2; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S3: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S3; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S4: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S4; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S5: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S5; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S6: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S6; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S7: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S7; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S8: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S8; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S9: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S9; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S10: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S10; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S11: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S11; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S12: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S12; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S13: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S13; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S14: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S14; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S15: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S15; + + case SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S16: + return lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S16; + + case SAI_PORT_STAT_IN_DROP_REASON_RANGE_BASE: + return lemming::dataplane::sai::PORT_STAT_IN_DROP_REASON_RANGE_BASE; + + case SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS; + + case SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS; + + case SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS; + + case SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS; + + case SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS; + + case SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS; + + case SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS; + + case SAI_PORT_STAT_IN_DROP_REASON_RANGE_END: + return lemming::dataplane::sai::PORT_STAT_IN_DROP_REASON_RANGE_END; + + case SAI_PORT_STAT_OUT_DROP_REASON_RANGE_BASE: + return lemming::dataplane::sai::PORT_STAT_OUT_DROP_REASON_RANGE_BASE; + + case SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS; + + case SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS; + + case SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS; + + case SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS; + + case SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS; + + case SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS; + + case SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS: + return lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS; + + case SAI_PORT_STAT_OUT_DROP_REASON_RANGE_END: + return lemming::dataplane::sai::PORT_STAT_OUT_DROP_REASON_RANGE_END; + + default: + return lemming::dataplane::sai::PORT_STAT_UNSPECIFIED; + } +} +sai_port_stat_t convert_sai_port_stat_t_to_sai( + lemming::dataplane::sai::PortStat val) { + switch (val) { + case lemming::dataplane::sai::PORT_STAT_IF_IN_OCTETS: + return SAI_PORT_STAT_IF_IN_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_UCAST_PKTS: + return SAI_PORT_STAT_IF_IN_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_NON_UCAST_PKTS: + return SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_DISCARDS: + return SAI_PORT_STAT_IF_IN_DISCARDS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_ERRORS: + return SAI_PORT_STAT_IF_IN_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_UNKNOWN_PROTOS: + return SAI_PORT_STAT_IF_IN_UNKNOWN_PROTOS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_BROADCAST_PKTS: + return SAI_PORT_STAT_IF_IN_BROADCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_MULTICAST_PKTS: + return SAI_PORT_STAT_IF_IN_MULTICAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_VLAN_DISCARDS: + return SAI_PORT_STAT_IF_IN_VLAN_DISCARDS; + + case lemming::dataplane::sai::PORT_STAT_IF_OUT_OCTETS: + return SAI_PORT_STAT_IF_OUT_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_IF_OUT_UCAST_PKTS: + return SAI_PORT_STAT_IF_OUT_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IF_OUT_NON_UCAST_PKTS: + return SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IF_OUT_DISCARDS: + return SAI_PORT_STAT_IF_OUT_DISCARDS; + + case lemming::dataplane::sai::PORT_STAT_IF_OUT_ERRORS: + return SAI_PORT_STAT_IF_OUT_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_IF_OUT_QLEN: + return SAI_PORT_STAT_IF_OUT_QLEN; + + case lemming::dataplane::sai::PORT_STAT_IF_OUT_BROADCAST_PKTS: + return SAI_PORT_STAT_IF_OUT_BROADCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IF_OUT_MULTICAST_PKTS: + return SAI_PORT_STAT_IF_OUT_MULTICAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_DROP_EVENTS: + return SAI_PORT_STAT_ETHER_STATS_DROP_EVENTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_MULTICAST_PKTS: + return SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_BROADCAST_PKTS: + return SAI_PORT_STAT_ETHER_STATS_BROADCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS: + return SAI_PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_FRAGMENTS: + return SAI_PORT_STAT_ETHER_STATS_FRAGMENTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_PKTS_64_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_64_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_PKTS_65_TO_127_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_65_TO_127_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_PKTS_128_TO_255_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_128_TO_255_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_PKTS_256_TO_511_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_256_TO_511_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_PKTS_512_TO_1023_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_512_TO_1023_OCTETS; + + case lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_1024_TO_1518_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_1024_TO_1518_OCTETS; + + case lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_1519_TO_2047_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_1519_TO_2047_OCTETS; + + case lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_2048_TO_4095_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_2048_TO_4095_OCTETS; + + case lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_4096_TO_9216_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_4096_TO_9216_OCTETS; + + case lemming::dataplane::sai:: + PORT_STAT_ETHER_STATS_PKTS_9217_TO_16383_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_PKTS_9217_TO_16383_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_OVERSIZE_PKTS: + return SAI_PORT_STAT_ETHER_STATS_OVERSIZE_PKTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_RX_OVERSIZE_PKTS: + return SAI_PORT_STAT_ETHER_RX_OVERSIZE_PKTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_TX_OVERSIZE_PKTS: + return SAI_PORT_STAT_ETHER_TX_OVERSIZE_PKTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_JABBERS: + return SAI_PORT_STAT_ETHER_STATS_JABBERS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_OCTETS: + return SAI_PORT_STAT_ETHER_STATS_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_PKTS: + return SAI_PORT_STAT_ETHER_STATS_PKTS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_COLLISIONS: + return SAI_PORT_STAT_ETHER_STATS_COLLISIONS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_CRC_ALIGN_ERRORS: + return SAI_PORT_STAT_ETHER_STATS_CRC_ALIGN_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_TX_NO_ERRORS: + return SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_STATS_RX_NO_ERRORS: + return SAI_PORT_STAT_ETHER_STATS_RX_NO_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_IP_IN_RECEIVES: + return SAI_PORT_STAT_IP_IN_RECEIVES; + + case lemming::dataplane::sai::PORT_STAT_IP_IN_OCTETS: + return SAI_PORT_STAT_IP_IN_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_IP_IN_UCAST_PKTS: + return SAI_PORT_STAT_IP_IN_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IP_IN_NON_UCAST_PKTS: + return SAI_PORT_STAT_IP_IN_NON_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IP_IN_DISCARDS: + return SAI_PORT_STAT_IP_IN_DISCARDS; + + case lemming::dataplane::sai::PORT_STAT_IP_OUT_OCTETS: + return SAI_PORT_STAT_IP_OUT_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_IP_OUT_UCAST_PKTS: + return SAI_PORT_STAT_IP_OUT_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IP_OUT_NON_UCAST_PKTS: + return SAI_PORT_STAT_IP_OUT_NON_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IP_OUT_DISCARDS: + return SAI_PORT_STAT_IP_OUT_DISCARDS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_IN_RECEIVES: + return SAI_PORT_STAT_IPV6_IN_RECEIVES; + + case lemming::dataplane::sai::PORT_STAT_IPV6_IN_OCTETS: + return SAI_PORT_STAT_IPV6_IN_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_IN_UCAST_PKTS: + return SAI_PORT_STAT_IPV6_IN_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_IN_NON_UCAST_PKTS: + return SAI_PORT_STAT_IPV6_IN_NON_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_IN_MCAST_PKTS: + return SAI_PORT_STAT_IPV6_IN_MCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_IN_DISCARDS: + return SAI_PORT_STAT_IPV6_IN_DISCARDS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_OUT_OCTETS: + return SAI_PORT_STAT_IPV6_OUT_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_OUT_UCAST_PKTS: + return SAI_PORT_STAT_IPV6_OUT_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_OUT_NON_UCAST_PKTS: + return SAI_PORT_STAT_IPV6_OUT_NON_UCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_OUT_MCAST_PKTS: + return SAI_PORT_STAT_IPV6_OUT_MCAST_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IPV6_OUT_DISCARDS: + return SAI_PORT_STAT_IPV6_OUT_DISCARDS; + + case lemming::dataplane::sai::PORT_STAT_GREEN_WRED_DROPPED_PACKETS: + return SAI_PORT_STAT_GREEN_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::PORT_STAT_GREEN_WRED_DROPPED_BYTES: + return SAI_PORT_STAT_GREEN_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::PORT_STAT_YELLOW_WRED_DROPPED_PACKETS: + return SAI_PORT_STAT_YELLOW_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::PORT_STAT_YELLOW_WRED_DROPPED_BYTES: + return SAI_PORT_STAT_YELLOW_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::PORT_STAT_RED_WRED_DROPPED_PACKETS: + return SAI_PORT_STAT_RED_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::PORT_STAT_RED_WRED_DROPPED_BYTES: + return SAI_PORT_STAT_RED_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::PORT_STAT_WRED_DROPPED_PACKETS: + return SAI_PORT_STAT_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::PORT_STAT_WRED_DROPPED_BYTES: + return SAI_PORT_STAT_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::PORT_STAT_ECN_MARKED_PACKETS: + return SAI_PORT_STAT_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_64_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_64_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_65_TO_127_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_65_TO_127_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_256_TO_511_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_256_TO_511_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_512_TO_1023_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_512_TO_1023_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_1024_TO_1518_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_1024_TO_1518_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_1519_TO_2047_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_1519_TO_2047_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_2048_TO_4095_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_2048_TO_4095_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_4096_TO_9216_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_4096_TO_9216_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_IN_PKTS_9217_TO_16383_OCTETS: + return SAI_PORT_STAT_ETHER_IN_PKTS_9217_TO_16383_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_64_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_64_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_65_TO_127_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_65_TO_127_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_128_TO_255_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_128_TO_255_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_256_TO_511_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_256_TO_511_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_512_TO_1023_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_512_TO_1023_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_1024_TO_1518_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_1024_TO_1518_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_1519_TO_2047_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_1519_TO_2047_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_2048_TO_4095_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_2048_TO_4095_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_4096_TO_9216_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_4096_TO_9216_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_ETHER_OUT_PKTS_9217_TO_16383_OCTETS: + return SAI_PORT_STAT_ETHER_OUT_PKTS_9217_TO_16383_OCTETS; + + case lemming::dataplane::sai::PORT_STAT_IN_CURR_OCCUPANCY_BYTES: + return SAI_PORT_STAT_IN_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::PORT_STAT_IN_WATERMARK_BYTES: + return SAI_PORT_STAT_IN_WATERMARK_BYTES; + + case lemming::dataplane::sai::PORT_STAT_IN_SHARED_CURR_OCCUPANCY_BYTES: + return SAI_PORT_STAT_IN_SHARED_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::PORT_STAT_IN_SHARED_WATERMARK_BYTES: + return SAI_PORT_STAT_IN_SHARED_WATERMARK_BYTES; + + case lemming::dataplane::sai::PORT_STAT_OUT_CURR_OCCUPANCY_BYTES: + return SAI_PORT_STAT_OUT_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::PORT_STAT_OUT_WATERMARK_BYTES: + return SAI_PORT_STAT_OUT_WATERMARK_BYTES; + + case lemming::dataplane::sai::PORT_STAT_OUT_SHARED_CURR_OCCUPANCY_BYTES: + return SAI_PORT_STAT_OUT_SHARED_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::PORT_STAT_OUT_SHARED_WATERMARK_BYTES: + return SAI_PORT_STAT_OUT_SHARED_WATERMARK_BYTES; + + case lemming::dataplane::sai::PORT_STAT_IN_DROPPED_PKTS: + return SAI_PORT_STAT_IN_DROPPED_PKTS; + + case lemming::dataplane::sai::PORT_STAT_OUT_DROPPED_PKTS: + return SAI_PORT_STAT_OUT_DROPPED_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PAUSE_RX_PKTS: + return SAI_PORT_STAT_PAUSE_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PAUSE_TX_PKTS: + return SAI_PORT_STAT_PAUSE_TX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_0_RX_PKTS: + return SAI_PORT_STAT_PFC_0_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_0_TX_PKTS: + return SAI_PORT_STAT_PFC_0_TX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_1_RX_PKTS: + return SAI_PORT_STAT_PFC_1_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_1_TX_PKTS: + return SAI_PORT_STAT_PFC_1_TX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_2_RX_PKTS: + return SAI_PORT_STAT_PFC_2_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_2_TX_PKTS: + return SAI_PORT_STAT_PFC_2_TX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_3_RX_PKTS: + return SAI_PORT_STAT_PFC_3_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_3_TX_PKTS: + return SAI_PORT_STAT_PFC_3_TX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_4_RX_PKTS: + return SAI_PORT_STAT_PFC_4_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_4_TX_PKTS: + return SAI_PORT_STAT_PFC_4_TX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_5_RX_PKTS: + return SAI_PORT_STAT_PFC_5_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_5_TX_PKTS: + return SAI_PORT_STAT_PFC_5_TX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_6_RX_PKTS: + return SAI_PORT_STAT_PFC_6_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_6_TX_PKTS: + return SAI_PORT_STAT_PFC_6_TX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_7_RX_PKTS: + return SAI_PORT_STAT_PFC_7_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_7_TX_PKTS: + return SAI_PORT_STAT_PFC_7_TX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_0_RX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_0_RX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_0_TX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_0_TX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_1_RX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_1_RX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_1_TX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_1_TX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_2_RX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_2_RX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_2_TX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_2_TX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_3_RX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_3_RX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_3_TX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_3_TX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_4_RX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_4_RX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_4_TX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_4_TX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_5_RX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_5_RX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_5_TX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_5_TX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_6_RX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_6_RX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_6_TX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_6_TX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_7_RX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_7_RX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_7_TX_PAUSE_DURATION: + return SAI_PORT_STAT_PFC_7_TX_PAUSE_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PFC_0_RX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_0_RX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_0_TX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_0_TX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_1_RX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_1_RX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_1_TX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_1_TX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_2_RX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_2_RX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_2_TX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_2_TX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_3_RX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_3_RX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_3_TX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_3_TX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_4_RX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_4_RX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_4_TX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_4_TX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_5_RX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_5_RX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_5_TX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_5_TX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_6_RX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_6_RX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_6_TX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_6_TX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_7_RX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_7_RX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_7_TX_PAUSE_DURATION_US: + return SAI_PORT_STAT_PFC_7_TX_PAUSE_DURATION_US; + + case lemming::dataplane::sai::PORT_STAT_PFC_0_ON2OFF_RX_PKTS: + return SAI_PORT_STAT_PFC_0_ON2OFF_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_1_ON2OFF_RX_PKTS: + return SAI_PORT_STAT_PFC_1_ON2OFF_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_2_ON2OFF_RX_PKTS: + return SAI_PORT_STAT_PFC_2_ON2OFF_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_3_ON2OFF_RX_PKTS: + return SAI_PORT_STAT_PFC_3_ON2OFF_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_4_ON2OFF_RX_PKTS: + return SAI_PORT_STAT_PFC_4_ON2OFF_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_5_ON2OFF_RX_PKTS: + return SAI_PORT_STAT_PFC_5_ON2OFF_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_6_ON2OFF_RX_PKTS: + return SAI_PORT_STAT_PFC_6_ON2OFF_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_PFC_7_ON2OFF_RX_PKTS: + return SAI_PORT_STAT_PFC_7_ON2OFF_RX_PKTS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_ALIGNMENT_ERRORS: + return SAI_PORT_STAT_DOT3_STATS_ALIGNMENT_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_FCS_ERRORS: + return SAI_PORT_STAT_DOT3_STATS_FCS_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_SINGLE_COLLISION_FRAMES: + return SAI_PORT_STAT_DOT3_STATS_SINGLE_COLLISION_FRAMES; + + case lemming::dataplane::sai:: + PORT_STAT_DOT3_STATS_MULTIPLE_COLLISION_FRAMES: + return SAI_PORT_STAT_DOT3_STATS_MULTIPLE_COLLISION_FRAMES; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_SQE_TEST_ERRORS: + return SAI_PORT_STAT_DOT3_STATS_SQE_TEST_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_DEFERRED_TRANSMISSIONS: + return SAI_PORT_STAT_DOT3_STATS_DEFERRED_TRANSMISSIONS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_LATE_COLLISIONS: + return SAI_PORT_STAT_DOT3_STATS_LATE_COLLISIONS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_EXCESSIVE_COLLISIONS: + return SAI_PORT_STAT_DOT3_STATS_EXCESSIVE_COLLISIONS; + + case lemming::dataplane::sai:: + PORT_STAT_DOT3_STATS_INTERNAL_MAC_TRANSMIT_ERRORS: + return SAI_PORT_STAT_DOT3_STATS_INTERNAL_MAC_TRANSMIT_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_CARRIER_SENSE_ERRORS: + return SAI_PORT_STAT_DOT3_STATS_CARRIER_SENSE_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_FRAME_TOO_LONGS: + return SAI_PORT_STAT_DOT3_STATS_FRAME_TOO_LONGS; + + case lemming::dataplane::sai:: + PORT_STAT_DOT3_STATS_INTERNAL_MAC_RECEIVE_ERRORS: + return SAI_PORT_STAT_DOT3_STATS_INTERNAL_MAC_RECEIVE_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_STATS_SYMBOL_ERRORS: + return SAI_PORT_STAT_DOT3_STATS_SYMBOL_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_DOT3_CONTROL_IN_UNKNOWN_OPCODES: + return SAI_PORT_STAT_DOT3_CONTROL_IN_UNKNOWN_OPCODES; + + case lemming::dataplane::sai::PORT_STAT_EEE_TX_EVENT_COUNT: + return SAI_PORT_STAT_EEE_TX_EVENT_COUNT; + + case lemming::dataplane::sai::PORT_STAT_EEE_RX_EVENT_COUNT: + return SAI_PORT_STAT_EEE_RX_EVENT_COUNT; + + case lemming::dataplane::sai::PORT_STAT_EEE_TX_DURATION: + return SAI_PORT_STAT_EEE_TX_DURATION; + + case lemming::dataplane::sai::PORT_STAT_EEE_RX_DURATION: + return SAI_PORT_STAT_EEE_RX_DURATION; + + case lemming::dataplane::sai::PORT_STAT_PRBS_ERROR_COUNT: + return SAI_PORT_STAT_PRBS_ERROR_COUNT; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES: + return SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES: + return SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS: + return SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FABRIC_DATA_UNITS: + return SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS; + + case lemming::dataplane::sai::PORT_STAT_IF_OUT_FABRIC_DATA_UNITS: + return SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S0: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S0; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S1: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S1; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S2: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S2; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S3: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S3; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S4: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S4; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S5: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S5; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S6: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S6; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S7: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S7; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S8: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S8; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S9: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S9; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S10: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S10; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S11: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S11; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S12: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S12; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S13: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S13; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S14: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S14; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S15: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S15; + + case lemming::dataplane::sai::PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S16: + return SAI_PORT_STAT_IF_IN_FEC_CODEWORD_ERRORS_S16; + + case lemming::dataplane::sai::PORT_STAT_IN_DROP_REASON_RANGE_BASE: + return SAI_PORT_STAT_IN_DROP_REASON_RANGE_BASE; + + case lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS: + return SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS: + return SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS: + return SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS: + return SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS: + return SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS: + return SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_IN_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS: + return SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS; + + case lemming::dataplane::sai::PORT_STAT_IN_DROP_REASON_RANGE_END: + return SAI_PORT_STAT_IN_DROP_REASON_RANGE_END; + + case lemming::dataplane::sai::PORT_STAT_OUT_DROP_REASON_RANGE_BASE: + return SAI_PORT_STAT_OUT_DROP_REASON_RANGE_BASE; + + case lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS: + return SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS: + return SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS: + return SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS: + return SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS: + return SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS: + return SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS; + + case lemming::dataplane::sai:: + PORT_STAT_OUT_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS: + return SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS; + + case lemming::dataplane::sai::PORT_STAT_OUT_DROP_REASON_RANGE_END: + return SAI_PORT_STAT_OUT_DROP_REASON_RANGE_END; + + default: + return SAI_PORT_STAT_IF_IN_OCTETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_port_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::PortType convert_sai_port_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_PORT_TYPE_LOGICAL: + return lemming::dataplane::sai::PORT_TYPE_LOGICAL; + + case SAI_PORT_TYPE_CPU: + return lemming::dataplane::sai::PORT_TYPE_CPU; + + case SAI_PORT_TYPE_FABRIC: + return lemming::dataplane::sai::PORT_TYPE_FABRIC; + + case SAI_PORT_TYPE_RECYCLE: + return lemming::dataplane::sai::PORT_TYPE_RECYCLE; + + default: + return lemming::dataplane::sai::PORT_TYPE_UNSPECIFIED; + } +} +sai_port_type_t convert_sai_port_type_t_to_sai( + lemming::dataplane::sai::PortType val) { + switch (val) { + case lemming::dataplane::sai::PORT_TYPE_LOGICAL: + return SAI_PORT_TYPE_LOGICAL; + + case lemming::dataplane::sai::PORT_TYPE_CPU: + return SAI_PORT_TYPE_CPU; + + case lemming::dataplane::sai::PORT_TYPE_FABRIC: + return SAI_PORT_TYPE_FABRIC; + + case lemming::dataplane::sai::PORT_TYPE_RECYCLE: + return SAI_PORT_TYPE_RECYCLE; + + default: + return SAI_PORT_TYPE_LOGICAL; + } +} + +google::protobuf::RepeatedField convert_list_sai_port_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_port_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_port_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_port_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::QosMapAttr convert_sai_qos_map_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_QOS_MAP_ATTR_TYPE: + return lemming::dataplane::sai::QOS_MAP_ATTR_TYPE; + + case SAI_QOS_MAP_ATTR_MAP_TO_VALUE_LIST: + return lemming::dataplane::sai::QOS_MAP_ATTR_MAP_TO_VALUE_LIST; + + default: + return lemming::dataplane::sai::QOS_MAP_ATTR_UNSPECIFIED; + } +} +sai_qos_map_attr_t convert_sai_qos_map_attr_t_to_sai( + lemming::dataplane::sai::QosMapAttr val) { + switch (val) { + case lemming::dataplane::sai::QOS_MAP_ATTR_TYPE: + return SAI_QOS_MAP_ATTR_TYPE; + + case lemming::dataplane::sai::QOS_MAP_ATTR_MAP_TO_VALUE_LIST: + return SAI_QOS_MAP_ATTR_MAP_TO_VALUE_LIST; + + default: + return SAI_QOS_MAP_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_qos_map_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_qos_map_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_qos_map_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_qos_map_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::QosMapType convert_sai_qos_map_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_QOS_MAP_TYPE_DOT1P_TO_TC: + return lemming::dataplane::sai::QOS_MAP_TYPE_DOT1P_TO_TC; + + case SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR: + return lemming::dataplane::sai::QOS_MAP_TYPE_DOT1P_TO_COLOR; + + case SAI_QOS_MAP_TYPE_DSCP_TO_TC: + return lemming::dataplane::sai::QOS_MAP_TYPE_DSCP_TO_TC; + + case SAI_QOS_MAP_TYPE_DSCP_TO_COLOR: + return lemming::dataplane::sai::QOS_MAP_TYPE_DSCP_TO_COLOR; + + case SAI_QOS_MAP_TYPE_TC_TO_QUEUE: + return lemming::dataplane::sai::QOS_MAP_TYPE_TC_TO_QUEUE; + + case SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DSCP: + return lemming::dataplane::sai::QOS_MAP_TYPE_TC_AND_COLOR_TO_DSCP; + + case SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P: + return lemming::dataplane::sai::QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P; + + case SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP: + return lemming::dataplane::sai::QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP; + + case SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP: + return lemming::dataplane::sai:: + QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP; + + case SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_QUEUE: + return lemming::dataplane::sai::QOS_MAP_TYPE_PFC_PRIORITY_TO_QUEUE; + + case SAI_QOS_MAP_TYPE_MPLS_EXP_TO_TC: + return lemming::dataplane::sai::QOS_MAP_TYPE_MPLS_EXP_TO_TC; + + case SAI_QOS_MAP_TYPE_MPLS_EXP_TO_COLOR: + return lemming::dataplane::sai::QOS_MAP_TYPE_MPLS_EXP_TO_COLOR; + + case SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_MPLS_EXP: + return lemming::dataplane::sai::QOS_MAP_TYPE_TC_AND_COLOR_TO_MPLS_EXP; + + case SAI_QOS_MAP_TYPE_DSCP_TO_FORWARDING_CLASS: + return lemming::dataplane::sai::QOS_MAP_TYPE_DSCP_TO_FORWARDING_CLASS; + + case SAI_QOS_MAP_TYPE_MPLS_EXP_TO_FORWARDING_CLASS: + return lemming::dataplane::sai::QOS_MAP_TYPE_MPLS_EXP_TO_FORWARDING_CLASS; + + case SAI_QOS_MAP_TYPE_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::QOS_MAP_TYPE_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::QOS_MAP_TYPE_UNSPECIFIED; + } +} +sai_qos_map_type_t convert_sai_qos_map_type_t_to_sai( + lemming::dataplane::sai::QosMapType val) { + switch (val) { + case lemming::dataplane::sai::QOS_MAP_TYPE_DOT1P_TO_TC: + return SAI_QOS_MAP_TYPE_DOT1P_TO_TC; + + case lemming::dataplane::sai::QOS_MAP_TYPE_DOT1P_TO_COLOR: + return SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR; + + case lemming::dataplane::sai::QOS_MAP_TYPE_DSCP_TO_TC: + return SAI_QOS_MAP_TYPE_DSCP_TO_TC; + + case lemming::dataplane::sai::QOS_MAP_TYPE_DSCP_TO_COLOR: + return SAI_QOS_MAP_TYPE_DSCP_TO_COLOR; + + case lemming::dataplane::sai::QOS_MAP_TYPE_TC_TO_QUEUE: + return SAI_QOS_MAP_TYPE_TC_TO_QUEUE; + + case lemming::dataplane::sai::QOS_MAP_TYPE_TC_AND_COLOR_TO_DSCP: + return SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DSCP; + + case lemming::dataplane::sai::QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P: + return SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P; + + case lemming::dataplane::sai::QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP: + return SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP; + + case lemming::dataplane::sai::QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP: + return SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP; + + case lemming::dataplane::sai::QOS_MAP_TYPE_PFC_PRIORITY_TO_QUEUE: + return SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_QUEUE; + + case lemming::dataplane::sai::QOS_MAP_TYPE_MPLS_EXP_TO_TC: + return SAI_QOS_MAP_TYPE_MPLS_EXP_TO_TC; + + case lemming::dataplane::sai::QOS_MAP_TYPE_MPLS_EXP_TO_COLOR: + return SAI_QOS_MAP_TYPE_MPLS_EXP_TO_COLOR; + + case lemming::dataplane::sai::QOS_MAP_TYPE_TC_AND_COLOR_TO_MPLS_EXP: + return SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_MPLS_EXP; + + case lemming::dataplane::sai::QOS_MAP_TYPE_DSCP_TO_FORWARDING_CLASS: + return SAI_QOS_MAP_TYPE_DSCP_TO_FORWARDING_CLASS; + + case lemming::dataplane::sai::QOS_MAP_TYPE_MPLS_EXP_TO_FORWARDING_CLASS: + return SAI_QOS_MAP_TYPE_MPLS_EXP_TO_FORWARDING_CLASS; + + case lemming::dataplane::sai::QOS_MAP_TYPE_CUSTOM_RANGE_BASE: + return SAI_QOS_MAP_TYPE_CUSTOM_RANGE_BASE; + + default: + return SAI_QOS_MAP_TYPE_DOT1P_TO_TC; + } +} + +google::protobuf::RepeatedField convert_list_sai_qos_map_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_qos_map_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_qos_map_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_qos_map_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::QueueAttr convert_sai_queue_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_QUEUE_ATTR_TYPE: + return lemming::dataplane::sai::QUEUE_ATTR_TYPE; + + case SAI_QUEUE_ATTR_PORT: + return lemming::dataplane::sai::QUEUE_ATTR_PORT; + + case SAI_QUEUE_ATTR_INDEX: + return lemming::dataplane::sai::QUEUE_ATTR_INDEX; + + case SAI_QUEUE_ATTR_PARENT_SCHEDULER_NODE: + return lemming::dataplane::sai::QUEUE_ATTR_PARENT_SCHEDULER_NODE; + + case SAI_QUEUE_ATTR_WRED_PROFILE_ID: + return lemming::dataplane::sai::QUEUE_ATTR_WRED_PROFILE_ID; + + case SAI_QUEUE_ATTR_BUFFER_PROFILE_ID: + return lemming::dataplane::sai::QUEUE_ATTR_BUFFER_PROFILE_ID; + + case SAI_QUEUE_ATTR_SCHEDULER_PROFILE_ID: + return lemming::dataplane::sai::QUEUE_ATTR_SCHEDULER_PROFILE_ID; + + case SAI_QUEUE_ATTR_PAUSE_STATUS: + return lemming::dataplane::sai::QUEUE_ATTR_PAUSE_STATUS; + + case SAI_QUEUE_ATTR_ENABLE_PFC_DLDR: + return lemming::dataplane::sai::QUEUE_ATTR_ENABLE_PFC_DLDR; + + case SAI_QUEUE_ATTR_PFC_DLR_INIT: + return lemming::dataplane::sai::QUEUE_ATTR_PFC_DLR_INIT; + + case SAI_QUEUE_ATTR_TAM_OBJECT: + return lemming::dataplane::sai::QUEUE_ATTR_TAM_OBJECT; + + case SAI_QUEUE_ATTR_PFC_DLR_PACKET_ACTION: + return lemming::dataplane::sai::QUEUE_ATTR_PFC_DLR_PACKET_ACTION; + + case SAI_QUEUE_ATTR_PFC_CONTINUOUS_DEADLOCK_STATE: + return lemming::dataplane::sai::QUEUE_ATTR_PFC_CONTINUOUS_DEADLOCK_STATE; + + default: + return lemming::dataplane::sai::QUEUE_ATTR_UNSPECIFIED; + } +} +sai_queue_attr_t convert_sai_queue_attr_t_to_sai( + lemming::dataplane::sai::QueueAttr val) { + switch (val) { + case lemming::dataplane::sai::QUEUE_ATTR_TYPE: + return SAI_QUEUE_ATTR_TYPE; + + case lemming::dataplane::sai::QUEUE_ATTR_PORT: + return SAI_QUEUE_ATTR_PORT; + + case lemming::dataplane::sai::QUEUE_ATTR_INDEX: + return SAI_QUEUE_ATTR_INDEX; + + case lemming::dataplane::sai::QUEUE_ATTR_PARENT_SCHEDULER_NODE: + return SAI_QUEUE_ATTR_PARENT_SCHEDULER_NODE; + + case lemming::dataplane::sai::QUEUE_ATTR_WRED_PROFILE_ID: + return SAI_QUEUE_ATTR_WRED_PROFILE_ID; + + case lemming::dataplane::sai::QUEUE_ATTR_BUFFER_PROFILE_ID: + return SAI_QUEUE_ATTR_BUFFER_PROFILE_ID; + + case lemming::dataplane::sai::QUEUE_ATTR_SCHEDULER_PROFILE_ID: + return SAI_QUEUE_ATTR_SCHEDULER_PROFILE_ID; + + case lemming::dataplane::sai::QUEUE_ATTR_PAUSE_STATUS: + return SAI_QUEUE_ATTR_PAUSE_STATUS; + + case lemming::dataplane::sai::QUEUE_ATTR_ENABLE_PFC_DLDR: + return SAI_QUEUE_ATTR_ENABLE_PFC_DLDR; + + case lemming::dataplane::sai::QUEUE_ATTR_PFC_DLR_INIT: + return SAI_QUEUE_ATTR_PFC_DLR_INIT; + + case lemming::dataplane::sai::QUEUE_ATTR_TAM_OBJECT: + return SAI_QUEUE_ATTR_TAM_OBJECT; + + case lemming::dataplane::sai::QUEUE_ATTR_PFC_DLR_PACKET_ACTION: + return SAI_QUEUE_ATTR_PFC_DLR_PACKET_ACTION; + + case lemming::dataplane::sai::QUEUE_ATTR_PFC_CONTINUOUS_DEADLOCK_STATE: + return SAI_QUEUE_ATTR_PFC_CONTINUOUS_DEADLOCK_STATE; + + default: + return SAI_QUEUE_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_queue_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_queue_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_queue_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_queue_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::QueuePfcContinuousDeadlockState +convert_sai_queue_pfc_continuous_deadlock_state_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_NOT_PAUSED: + return lemming::dataplane::sai:: + QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_NOT_PAUSED; + + case SAI_QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_PAUSED: + return lemming::dataplane::sai:: + QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_PAUSED; + + case SAI_QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_PAUSED_NOT_CONTINUOUS: + return lemming::dataplane::sai:: + QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_PAUSED_NOT_CONTINUOUS; + + default: + return lemming::dataplane::sai:: + QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_UNSPECIFIED; + } +} +sai_queue_pfc_continuous_deadlock_state_t +convert_sai_queue_pfc_continuous_deadlock_state_t_to_sai( + lemming::dataplane::sai::QueuePfcContinuousDeadlockState val) { + switch (val) { + case lemming::dataplane::sai:: + QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_NOT_PAUSED: + return SAI_QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_NOT_PAUSED; + + case lemming::dataplane::sai::QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_PAUSED: + return SAI_QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_PAUSED; + + case lemming::dataplane::sai:: + QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_PAUSED_NOT_CONTINUOUS: + return SAI_QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_PAUSED_NOT_CONTINUOUS; + + default: + return SAI_QUEUE_PFC_CONTINUOUS_DEADLOCK_STATE_NOT_PAUSED; + } +} + +google::protobuf::RepeatedField +convert_list_sai_queue_pfc_continuous_deadlock_state_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_queue_pfc_continuous_deadlock_state_t_to_proto( + list.list[i])); + } + return proto_list; +} +void convert_list_sai_queue_pfc_continuous_deadlock_state_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_queue_pfc_continuous_deadlock_state_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::QueuePfcDeadlockEventType +convert_sai_queue_pfc_deadlock_event_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_QUEUE_PFC_DEADLOCK_EVENT_TYPE_DETECTED: + return lemming::dataplane::sai::QUEUE_PFC_DEADLOCK_EVENT_TYPE_DETECTED; + + case SAI_QUEUE_PFC_DEADLOCK_EVENT_TYPE_RECOVERED: + return lemming::dataplane::sai::QUEUE_PFC_DEADLOCK_EVENT_TYPE_RECOVERED; + + default: + return lemming::dataplane::sai::QUEUE_PFC_DEADLOCK_EVENT_TYPE_UNSPECIFIED; + } +} +sai_queue_pfc_deadlock_event_type_t +convert_sai_queue_pfc_deadlock_event_type_t_to_sai( + lemming::dataplane::sai::QueuePfcDeadlockEventType val) { + switch (val) { + case lemming::dataplane::sai::QUEUE_PFC_DEADLOCK_EVENT_TYPE_DETECTED: + return SAI_QUEUE_PFC_DEADLOCK_EVENT_TYPE_DETECTED; + + case lemming::dataplane::sai::QUEUE_PFC_DEADLOCK_EVENT_TYPE_RECOVERED: + return SAI_QUEUE_PFC_DEADLOCK_EVENT_TYPE_RECOVERED; + + default: + return SAI_QUEUE_PFC_DEADLOCK_EVENT_TYPE_DETECTED; + } +} + +google::protobuf::RepeatedField +convert_list_sai_queue_pfc_deadlock_event_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_queue_pfc_deadlock_event_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_queue_pfc_deadlock_event_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_queue_pfc_deadlock_event_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::QueueStat convert_sai_queue_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_QUEUE_STAT_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_PACKETS; + + case SAI_QUEUE_STAT_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_BYTES; + + case SAI_QUEUE_STAT_DROPPED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_DROPPED_PACKETS; + + case SAI_QUEUE_STAT_DROPPED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_DROPPED_BYTES; + + case SAI_QUEUE_STAT_GREEN_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_GREEN_PACKETS; + + case SAI_QUEUE_STAT_GREEN_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_GREEN_BYTES; + + case SAI_QUEUE_STAT_GREEN_DROPPED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_GREEN_DROPPED_PACKETS; + + case SAI_QUEUE_STAT_GREEN_DROPPED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_GREEN_DROPPED_BYTES; + + case SAI_QUEUE_STAT_YELLOW_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_YELLOW_PACKETS; + + case SAI_QUEUE_STAT_YELLOW_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_YELLOW_BYTES; + + case SAI_QUEUE_STAT_YELLOW_DROPPED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_YELLOW_DROPPED_PACKETS; + + case SAI_QUEUE_STAT_YELLOW_DROPPED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_YELLOW_DROPPED_BYTES; + + case SAI_QUEUE_STAT_RED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_RED_PACKETS; + + case SAI_QUEUE_STAT_RED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_RED_BYTES; + + case SAI_QUEUE_STAT_RED_DROPPED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_RED_DROPPED_PACKETS; + + case SAI_QUEUE_STAT_RED_DROPPED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_RED_DROPPED_BYTES; + + case SAI_QUEUE_STAT_GREEN_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_GREEN_WRED_DROPPED_PACKETS; + + case SAI_QUEUE_STAT_GREEN_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_GREEN_WRED_DROPPED_BYTES; + + case SAI_QUEUE_STAT_YELLOW_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_YELLOW_WRED_DROPPED_PACKETS; + + case SAI_QUEUE_STAT_YELLOW_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_YELLOW_WRED_DROPPED_BYTES; + + case SAI_QUEUE_STAT_RED_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_RED_WRED_DROPPED_PACKETS; + + case SAI_QUEUE_STAT_RED_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_RED_WRED_DROPPED_BYTES; + + case SAI_QUEUE_STAT_WRED_DROPPED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_WRED_DROPPED_PACKETS; + + case SAI_QUEUE_STAT_WRED_DROPPED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_WRED_DROPPED_BYTES; + + case SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_CURR_OCCUPANCY_BYTES; + + case SAI_QUEUE_STAT_WATERMARK_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_WATERMARK_BYTES; + + case SAI_QUEUE_STAT_SHARED_CURR_OCCUPANCY_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_SHARED_CURR_OCCUPANCY_BYTES; + + case SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_SHARED_WATERMARK_BYTES; + + case SAI_QUEUE_STAT_GREEN_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_GREEN_WRED_ECN_MARKED_PACKETS; + + case SAI_QUEUE_STAT_GREEN_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_GREEN_WRED_ECN_MARKED_BYTES; + + case SAI_QUEUE_STAT_YELLOW_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_YELLOW_WRED_ECN_MARKED_PACKETS; + + case SAI_QUEUE_STAT_YELLOW_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_YELLOW_WRED_ECN_MARKED_BYTES; + + case SAI_QUEUE_STAT_RED_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_RED_WRED_ECN_MARKED_PACKETS; + + case SAI_QUEUE_STAT_RED_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_RED_WRED_ECN_MARKED_BYTES; + + case SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS: + return lemming::dataplane::sai::QUEUE_STAT_WRED_ECN_MARKED_PACKETS; + + case SAI_QUEUE_STAT_WRED_ECN_MARKED_BYTES: + return lemming::dataplane::sai::QUEUE_STAT_WRED_ECN_MARKED_BYTES; + + case SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL: + return lemming::dataplane::sai::QUEUE_STAT_CURR_OCCUPANCY_LEVEL; + + case SAI_QUEUE_STAT_WATERMARK_LEVEL: + return lemming::dataplane::sai::QUEUE_STAT_WATERMARK_LEVEL; + + case SAI_QUEUE_STAT_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::QUEUE_STAT_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::QUEUE_STAT_UNSPECIFIED; + } +} +sai_queue_stat_t convert_sai_queue_stat_t_to_sai( + lemming::dataplane::sai::QueueStat val) { + switch (val) { + case lemming::dataplane::sai::QUEUE_STAT_PACKETS: + return SAI_QUEUE_STAT_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_BYTES: + return SAI_QUEUE_STAT_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_DROPPED_PACKETS: + return SAI_QUEUE_STAT_DROPPED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_DROPPED_BYTES: + return SAI_QUEUE_STAT_DROPPED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_GREEN_PACKETS: + return SAI_QUEUE_STAT_GREEN_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_GREEN_BYTES: + return SAI_QUEUE_STAT_GREEN_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_GREEN_DROPPED_PACKETS: + return SAI_QUEUE_STAT_GREEN_DROPPED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_GREEN_DROPPED_BYTES: + return SAI_QUEUE_STAT_GREEN_DROPPED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_YELLOW_PACKETS: + return SAI_QUEUE_STAT_YELLOW_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_YELLOW_BYTES: + return SAI_QUEUE_STAT_YELLOW_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_YELLOW_DROPPED_PACKETS: + return SAI_QUEUE_STAT_YELLOW_DROPPED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_YELLOW_DROPPED_BYTES: + return SAI_QUEUE_STAT_YELLOW_DROPPED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_RED_PACKETS: + return SAI_QUEUE_STAT_RED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_RED_BYTES: + return SAI_QUEUE_STAT_RED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_RED_DROPPED_PACKETS: + return SAI_QUEUE_STAT_RED_DROPPED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_RED_DROPPED_BYTES: + return SAI_QUEUE_STAT_RED_DROPPED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_GREEN_WRED_DROPPED_PACKETS: + return SAI_QUEUE_STAT_GREEN_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_GREEN_WRED_DROPPED_BYTES: + return SAI_QUEUE_STAT_GREEN_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_YELLOW_WRED_DROPPED_PACKETS: + return SAI_QUEUE_STAT_YELLOW_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_YELLOW_WRED_DROPPED_BYTES: + return SAI_QUEUE_STAT_YELLOW_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_RED_WRED_DROPPED_PACKETS: + return SAI_QUEUE_STAT_RED_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_RED_WRED_DROPPED_BYTES: + return SAI_QUEUE_STAT_RED_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_WRED_DROPPED_PACKETS: + return SAI_QUEUE_STAT_WRED_DROPPED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_WRED_DROPPED_BYTES: + return SAI_QUEUE_STAT_WRED_DROPPED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_CURR_OCCUPANCY_BYTES: + return SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_WATERMARK_BYTES: + return SAI_QUEUE_STAT_WATERMARK_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_SHARED_CURR_OCCUPANCY_BYTES: + return SAI_QUEUE_STAT_SHARED_CURR_OCCUPANCY_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_SHARED_WATERMARK_BYTES: + return SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_GREEN_WRED_ECN_MARKED_PACKETS: + return SAI_QUEUE_STAT_GREEN_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_GREEN_WRED_ECN_MARKED_BYTES: + return SAI_QUEUE_STAT_GREEN_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_YELLOW_WRED_ECN_MARKED_PACKETS: + return SAI_QUEUE_STAT_YELLOW_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_YELLOW_WRED_ECN_MARKED_BYTES: + return SAI_QUEUE_STAT_YELLOW_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_RED_WRED_ECN_MARKED_PACKETS: + return SAI_QUEUE_STAT_RED_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_RED_WRED_ECN_MARKED_BYTES: + return SAI_QUEUE_STAT_RED_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_WRED_ECN_MARKED_PACKETS: + return SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS; + + case lemming::dataplane::sai::QUEUE_STAT_WRED_ECN_MARKED_BYTES: + return SAI_QUEUE_STAT_WRED_ECN_MARKED_BYTES; + + case lemming::dataplane::sai::QUEUE_STAT_CURR_OCCUPANCY_LEVEL: + return SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL; + + case lemming::dataplane::sai::QUEUE_STAT_WATERMARK_LEVEL: + return SAI_QUEUE_STAT_WATERMARK_LEVEL; + + case lemming::dataplane::sai::QUEUE_STAT_CUSTOM_RANGE_BASE: + return SAI_QUEUE_STAT_CUSTOM_RANGE_BASE; + + default: + return SAI_QUEUE_STAT_PACKETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_queue_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_queue_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_queue_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_queue_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::QueueType convert_sai_queue_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_QUEUE_TYPE_ALL: + return lemming::dataplane::sai::QUEUE_TYPE_ALL; + + case SAI_QUEUE_TYPE_UNICAST: + return lemming::dataplane::sai::QUEUE_TYPE_UNICAST; + + case SAI_QUEUE_TYPE_MULTICAST: + return lemming::dataplane::sai::QUEUE_TYPE_MULTICAST; + + case SAI_QUEUE_TYPE_UNICAST_VOQ: + return lemming::dataplane::sai::QUEUE_TYPE_UNICAST_VOQ; + + case SAI_QUEUE_TYPE_MULTICAST_VOQ: + return lemming::dataplane::sai::QUEUE_TYPE_MULTICAST_VOQ; + + case SAI_QUEUE_TYPE_FABRIC_TX: + return lemming::dataplane::sai::QUEUE_TYPE_FABRIC_TX; + + case SAI_QUEUE_TYPE_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::QUEUE_TYPE_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::QUEUE_TYPE_UNSPECIFIED; + } +} +sai_queue_type_t convert_sai_queue_type_t_to_sai( + lemming::dataplane::sai::QueueType val) { + switch (val) { + case lemming::dataplane::sai::QUEUE_TYPE_ALL: + return SAI_QUEUE_TYPE_ALL; + + case lemming::dataplane::sai::QUEUE_TYPE_UNICAST: + return SAI_QUEUE_TYPE_UNICAST; + + case lemming::dataplane::sai::QUEUE_TYPE_MULTICAST: + return SAI_QUEUE_TYPE_MULTICAST; + + case lemming::dataplane::sai::QUEUE_TYPE_UNICAST_VOQ: + return SAI_QUEUE_TYPE_UNICAST_VOQ; + + case lemming::dataplane::sai::QUEUE_TYPE_MULTICAST_VOQ: + return SAI_QUEUE_TYPE_MULTICAST_VOQ; + + case lemming::dataplane::sai::QUEUE_TYPE_FABRIC_TX: + return SAI_QUEUE_TYPE_FABRIC_TX; + + case lemming::dataplane::sai::QUEUE_TYPE_CUSTOM_RANGE_BASE: + return SAI_QUEUE_TYPE_CUSTOM_RANGE_BASE; + + default: + return SAI_QUEUE_TYPE_ALL; + } +} + +google::protobuf::RepeatedField convert_list_sai_queue_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_queue_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_queue_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_queue_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::RouteEntryAttr convert_sai_route_entry_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_ROUTE_ENTRY_ATTR_PACKET_ACTION: + return lemming::dataplane::sai::ROUTE_ENTRY_ATTR_PACKET_ACTION; + + case SAI_ROUTE_ENTRY_ATTR_USER_TRAP_ID: + return lemming::dataplane::sai::ROUTE_ENTRY_ATTR_USER_TRAP_ID; + + case SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID: + return lemming::dataplane::sai::ROUTE_ENTRY_ATTR_NEXT_HOP_ID; + + case SAI_ROUTE_ENTRY_ATTR_META_DATA: + return lemming::dataplane::sai::ROUTE_ENTRY_ATTR_META_DATA; + + case SAI_ROUTE_ENTRY_ATTR_IP_ADDR_FAMILY: + return lemming::dataplane::sai::ROUTE_ENTRY_ATTR_IP_ADDR_FAMILY; + + case SAI_ROUTE_ENTRY_ATTR_COUNTER_ID: + return lemming::dataplane::sai::ROUTE_ENTRY_ATTR_COUNTER_ID; + + default: + return lemming::dataplane::sai::ROUTE_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_route_entry_attr_t convert_sai_route_entry_attr_t_to_sai( + lemming::dataplane::sai::RouteEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::ROUTE_ENTRY_ATTR_PACKET_ACTION: + return SAI_ROUTE_ENTRY_ATTR_PACKET_ACTION; + + case lemming::dataplane::sai::ROUTE_ENTRY_ATTR_USER_TRAP_ID: + return SAI_ROUTE_ENTRY_ATTR_USER_TRAP_ID; + + case lemming::dataplane::sai::ROUTE_ENTRY_ATTR_NEXT_HOP_ID: + return SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID; + + case lemming::dataplane::sai::ROUTE_ENTRY_ATTR_META_DATA: + return SAI_ROUTE_ENTRY_ATTR_META_DATA; + + case lemming::dataplane::sai::ROUTE_ENTRY_ATTR_IP_ADDR_FAMILY: + return SAI_ROUTE_ENTRY_ATTR_IP_ADDR_FAMILY; + + case lemming::dataplane::sai::ROUTE_ENTRY_ATTR_COUNTER_ID: + return SAI_ROUTE_ENTRY_ATTR_COUNTER_ID; + + default: + return SAI_ROUTE_ENTRY_ATTR_PACKET_ACTION; + } +} + +google::protobuf::RepeatedField +convert_list_sai_route_entry_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_route_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_route_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_route_entry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::RouterInterfaceAttr +convert_sai_router_interface_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ROUTER_INTERFACE_ATTR_VIRTUAL_ROUTER_ID: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_VIRTUAL_ROUTER_ID; + + case SAI_ROUTER_INTERFACE_ATTR_TYPE: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_TYPE; + + case SAI_ROUTER_INTERFACE_ATTR_PORT_ID: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_PORT_ID; + + case SAI_ROUTER_INTERFACE_ATTR_VLAN_ID: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_VLAN_ID; + + case SAI_ROUTER_INTERFACE_ATTR_OUTER_VLAN_ID: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_OUTER_VLAN_ID; + + case SAI_ROUTER_INTERFACE_ATTR_INNER_VLAN_ID: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_INNER_VLAN_ID; + + case SAI_ROUTER_INTERFACE_ATTR_BRIDGE_ID: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_BRIDGE_ID; + + case SAI_ROUTER_INTERFACE_ATTR_SRC_MAC_ADDRESS: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_SRC_MAC_ADDRESS; + + case SAI_ROUTER_INTERFACE_ATTR_ADMIN_V4_STATE: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_ADMIN_V4_STATE; + + case SAI_ROUTER_INTERFACE_ATTR_ADMIN_V6_STATE: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_ADMIN_V6_STATE; + + case SAI_ROUTER_INTERFACE_ATTR_MTU: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_MTU; + + case SAI_ROUTER_INTERFACE_ATTR_INGRESS_ACL: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_INGRESS_ACL; + + case SAI_ROUTER_INTERFACE_ATTR_EGRESS_ACL: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_EGRESS_ACL; + + case SAI_ROUTER_INTERFACE_ATTR_NEIGHBOR_MISS_PACKET_ACTION: + return lemming::dataplane::sai:: + ROUTER_INTERFACE_ATTR_NEIGHBOR_MISS_PACKET_ACTION; + + case SAI_ROUTER_INTERFACE_ATTR_V4_MCAST_ENABLE: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_V4_MCAST_ENABLE; + + case SAI_ROUTER_INTERFACE_ATTR_V6_MCAST_ENABLE: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_V6_MCAST_ENABLE; + + case SAI_ROUTER_INTERFACE_ATTR_LOOPBACK_PACKET_ACTION: + return lemming::dataplane::sai:: + ROUTER_INTERFACE_ATTR_LOOPBACK_PACKET_ACTION; + + case SAI_ROUTER_INTERFACE_ATTR_IS_VIRTUAL: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_IS_VIRTUAL; + + case SAI_ROUTER_INTERFACE_ATTR_NAT_ZONE_ID: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_NAT_ZONE_ID; + + case SAI_ROUTER_INTERFACE_ATTR_DISABLE_DECREMENT_TTL: + return lemming::dataplane::sai:: + ROUTER_INTERFACE_ATTR_DISABLE_DECREMENT_TTL; + + case SAI_ROUTER_INTERFACE_ATTR_ADMIN_MPLS_STATE: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_ADMIN_MPLS_STATE; + + default: + return lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_UNSPECIFIED; + } +} +sai_router_interface_attr_t convert_sai_router_interface_attr_t_to_sai( + lemming::dataplane::sai::RouterInterfaceAttr val) { + switch (val) { + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_VIRTUAL_ROUTER_ID: + return SAI_ROUTER_INTERFACE_ATTR_VIRTUAL_ROUTER_ID; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_TYPE: + return SAI_ROUTER_INTERFACE_ATTR_TYPE; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_PORT_ID: + return SAI_ROUTER_INTERFACE_ATTR_PORT_ID; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_VLAN_ID: + return SAI_ROUTER_INTERFACE_ATTR_VLAN_ID; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_OUTER_VLAN_ID: + return SAI_ROUTER_INTERFACE_ATTR_OUTER_VLAN_ID; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_INNER_VLAN_ID: + return SAI_ROUTER_INTERFACE_ATTR_INNER_VLAN_ID; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_BRIDGE_ID: + return SAI_ROUTER_INTERFACE_ATTR_BRIDGE_ID; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_SRC_MAC_ADDRESS: + return SAI_ROUTER_INTERFACE_ATTR_SRC_MAC_ADDRESS; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_ADMIN_V4_STATE: + return SAI_ROUTER_INTERFACE_ATTR_ADMIN_V4_STATE; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_ADMIN_V6_STATE: + return SAI_ROUTER_INTERFACE_ATTR_ADMIN_V6_STATE; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_MTU: + return SAI_ROUTER_INTERFACE_ATTR_MTU; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_INGRESS_ACL: + return SAI_ROUTER_INTERFACE_ATTR_INGRESS_ACL; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_EGRESS_ACL: + return SAI_ROUTER_INTERFACE_ATTR_EGRESS_ACL; + + case lemming::dataplane::sai:: + ROUTER_INTERFACE_ATTR_NEIGHBOR_MISS_PACKET_ACTION: + return SAI_ROUTER_INTERFACE_ATTR_NEIGHBOR_MISS_PACKET_ACTION; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_V4_MCAST_ENABLE: + return SAI_ROUTER_INTERFACE_ATTR_V4_MCAST_ENABLE; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_V6_MCAST_ENABLE: + return SAI_ROUTER_INTERFACE_ATTR_V6_MCAST_ENABLE; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_LOOPBACK_PACKET_ACTION: + return SAI_ROUTER_INTERFACE_ATTR_LOOPBACK_PACKET_ACTION; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_IS_VIRTUAL: + return SAI_ROUTER_INTERFACE_ATTR_IS_VIRTUAL; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_NAT_ZONE_ID: + return SAI_ROUTER_INTERFACE_ATTR_NAT_ZONE_ID; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_DISABLE_DECREMENT_TTL: + return SAI_ROUTER_INTERFACE_ATTR_DISABLE_DECREMENT_TTL; + + case lemming::dataplane::sai::ROUTER_INTERFACE_ATTR_ADMIN_MPLS_STATE: + return SAI_ROUTER_INTERFACE_ATTR_ADMIN_MPLS_STATE; + + default: + return SAI_ROUTER_INTERFACE_ATTR_VIRTUAL_ROUTER_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_router_interface_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_router_interface_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_router_interface_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_router_interface_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::RouterInterfaceStat +convert_sai_router_interface_stat_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ROUTER_INTERFACE_STAT_IN_OCTETS: + return lemming::dataplane::sai::ROUTER_INTERFACE_STAT_IN_OCTETS; + + case SAI_ROUTER_INTERFACE_STAT_IN_PACKETS: + return lemming::dataplane::sai::ROUTER_INTERFACE_STAT_IN_PACKETS; + + case SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS: + return lemming::dataplane::sai::ROUTER_INTERFACE_STAT_OUT_OCTETS; + + case SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS: + return lemming::dataplane::sai::ROUTER_INTERFACE_STAT_OUT_PACKETS; + + case SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS: + return lemming::dataplane::sai::ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS; + + case SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS: + return lemming::dataplane::sai::ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS; + + case SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS: + return lemming::dataplane::sai::ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS; + + case SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS: + return lemming::dataplane::sai::ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS; + + default: + return lemming::dataplane::sai::ROUTER_INTERFACE_STAT_UNSPECIFIED; + } +} +sai_router_interface_stat_t convert_sai_router_interface_stat_t_to_sai( + lemming::dataplane::sai::RouterInterfaceStat val) { + switch (val) { + case lemming::dataplane::sai::ROUTER_INTERFACE_STAT_IN_OCTETS: + return SAI_ROUTER_INTERFACE_STAT_IN_OCTETS; + + case lemming::dataplane::sai::ROUTER_INTERFACE_STAT_IN_PACKETS: + return SAI_ROUTER_INTERFACE_STAT_IN_PACKETS; + + case lemming::dataplane::sai::ROUTER_INTERFACE_STAT_OUT_OCTETS: + return SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS; + + case lemming::dataplane::sai::ROUTER_INTERFACE_STAT_OUT_PACKETS: + return SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS; + + case lemming::dataplane::sai::ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS: + return SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS; + + case lemming::dataplane::sai::ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS: + return SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS; + + case lemming::dataplane::sai::ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS: + return SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS; + + case lemming::dataplane::sai::ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS: + return SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS; + + default: + return SAI_ROUTER_INTERFACE_STAT_IN_OCTETS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_router_interface_stat_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_router_interface_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_router_interface_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_router_interface_stat_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::RouterInterfaceType +convert_sai_router_interface_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_ROUTER_INTERFACE_TYPE_PORT: + return lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_PORT; + + case SAI_ROUTER_INTERFACE_TYPE_VLAN: + return lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_VLAN; + + case SAI_ROUTER_INTERFACE_TYPE_LOOPBACK: + return lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_LOOPBACK; + + case SAI_ROUTER_INTERFACE_TYPE_MPLS_ROUTER: + return lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_MPLS_ROUTER; + + case SAI_ROUTER_INTERFACE_TYPE_SUB_PORT: + return lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_SUB_PORT; + + case SAI_ROUTER_INTERFACE_TYPE_BRIDGE: + return lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_BRIDGE; + + case SAI_ROUTER_INTERFACE_TYPE_QINQ_PORT: + return lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_QINQ_PORT; + + default: + return lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_UNSPECIFIED; + } +} +sai_router_interface_type_t convert_sai_router_interface_type_t_to_sai( + lemming::dataplane::sai::RouterInterfaceType val) { + switch (val) { + case lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_PORT: + return SAI_ROUTER_INTERFACE_TYPE_PORT; + + case lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_VLAN: + return SAI_ROUTER_INTERFACE_TYPE_VLAN; + + case lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_LOOPBACK: + return SAI_ROUTER_INTERFACE_TYPE_LOOPBACK; + + case lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_MPLS_ROUTER: + return SAI_ROUTER_INTERFACE_TYPE_MPLS_ROUTER; + + case lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_SUB_PORT: + return SAI_ROUTER_INTERFACE_TYPE_SUB_PORT; + + case lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_BRIDGE: + return SAI_ROUTER_INTERFACE_TYPE_BRIDGE; + + case lemming::dataplane::sai::ROUTER_INTERFACE_TYPE_QINQ_PORT: + return SAI_ROUTER_INTERFACE_TYPE_QINQ_PORT; + + default: + return SAI_ROUTER_INTERFACE_TYPE_PORT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_router_interface_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_router_interface_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_router_interface_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_router_interface_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::RpfGroupAttr convert_sai_rpf_group_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_RPF_GROUP_ATTR_RPF_INTERFACE_COUNT: + return lemming::dataplane::sai::RPF_GROUP_ATTR_RPF_INTERFACE_COUNT; + + case SAI_RPF_GROUP_ATTR_RPF_MEMBER_LIST: + return lemming::dataplane::sai::RPF_GROUP_ATTR_RPF_MEMBER_LIST; + + default: + return lemming::dataplane::sai::RPF_GROUP_ATTR_UNSPECIFIED; + } +} +sai_rpf_group_attr_t convert_sai_rpf_group_attr_t_to_sai( + lemming::dataplane::sai::RpfGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::RPF_GROUP_ATTR_RPF_INTERFACE_COUNT: + return SAI_RPF_GROUP_ATTR_RPF_INTERFACE_COUNT; + + case lemming::dataplane::sai::RPF_GROUP_ATTR_RPF_MEMBER_LIST: + return SAI_RPF_GROUP_ATTR_RPF_MEMBER_LIST; + + default: + return SAI_RPF_GROUP_ATTR_RPF_INTERFACE_COUNT; + } +} + +google::protobuf::RepeatedField convert_list_sai_rpf_group_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_rpf_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_rpf_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_rpf_group_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::RpfGroupMemberAttr +convert_sai_rpf_group_member_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_RPF_GROUP_MEMBER_ATTR_RPF_GROUP_ID: + return lemming::dataplane::sai::RPF_GROUP_MEMBER_ATTR_RPF_GROUP_ID; + + case SAI_RPF_GROUP_MEMBER_ATTR_RPF_INTERFACE_ID: + return lemming::dataplane::sai::RPF_GROUP_MEMBER_ATTR_RPF_INTERFACE_ID; + + default: + return lemming::dataplane::sai::RPF_GROUP_MEMBER_ATTR_UNSPECIFIED; + } +} +sai_rpf_group_member_attr_t convert_sai_rpf_group_member_attr_t_to_sai( + lemming::dataplane::sai::RpfGroupMemberAttr val) { + switch (val) { + case lemming::dataplane::sai::RPF_GROUP_MEMBER_ATTR_RPF_GROUP_ID: + return SAI_RPF_GROUP_MEMBER_ATTR_RPF_GROUP_ID; + + case lemming::dataplane::sai::RPF_GROUP_MEMBER_ATTR_RPF_INTERFACE_ID: + return SAI_RPF_GROUP_MEMBER_ATTR_RPF_INTERFACE_ID; + + default: + return SAI_RPF_GROUP_MEMBER_ATTR_RPF_GROUP_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_rpf_group_member_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_rpf_group_member_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_rpf_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_rpf_group_member_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SamplepacketAttr +convert_sai_samplepacket_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SAMPLEPACKET_ATTR_SAMPLE_RATE: + return lemming::dataplane::sai::SAMPLEPACKET_ATTR_SAMPLE_RATE; + + case SAI_SAMPLEPACKET_ATTR_TYPE: + return lemming::dataplane::sai::SAMPLEPACKET_ATTR_TYPE; + + case SAI_SAMPLEPACKET_ATTR_MODE: + return lemming::dataplane::sai::SAMPLEPACKET_ATTR_MODE; + + default: + return lemming::dataplane::sai::SAMPLEPACKET_ATTR_UNSPECIFIED; + } +} +sai_samplepacket_attr_t convert_sai_samplepacket_attr_t_to_sai( + lemming::dataplane::sai::SamplepacketAttr val) { + switch (val) { + case lemming::dataplane::sai::SAMPLEPACKET_ATTR_SAMPLE_RATE: + return SAI_SAMPLEPACKET_ATTR_SAMPLE_RATE; + + case lemming::dataplane::sai::SAMPLEPACKET_ATTR_TYPE: + return SAI_SAMPLEPACKET_ATTR_TYPE; + + case lemming::dataplane::sai::SAMPLEPACKET_ATTR_MODE: + return SAI_SAMPLEPACKET_ATTR_MODE; + + default: + return SAI_SAMPLEPACKET_ATTR_SAMPLE_RATE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_samplepacket_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_samplepacket_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_samplepacket_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_samplepacket_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SamplepacketMode +convert_sai_samplepacket_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SAMPLEPACKET_MODE_EXCLUSIVE: + return lemming::dataplane::sai::SAMPLEPACKET_MODE_EXCLUSIVE; + + case SAI_SAMPLEPACKET_MODE_SHARED: + return lemming::dataplane::sai::SAMPLEPACKET_MODE_SHARED; + + default: + return lemming::dataplane::sai::SAMPLEPACKET_MODE_UNSPECIFIED; + } +} +sai_samplepacket_mode_t convert_sai_samplepacket_mode_t_to_sai( + lemming::dataplane::sai::SamplepacketMode val) { + switch (val) { + case lemming::dataplane::sai::SAMPLEPACKET_MODE_EXCLUSIVE: + return SAI_SAMPLEPACKET_MODE_EXCLUSIVE; + + case lemming::dataplane::sai::SAMPLEPACKET_MODE_SHARED: + return SAI_SAMPLEPACKET_MODE_SHARED; + + default: + return SAI_SAMPLEPACKET_MODE_EXCLUSIVE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_samplepacket_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_samplepacket_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_samplepacket_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_samplepacket_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SamplepacketType +convert_sai_samplepacket_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SAMPLEPACKET_TYPE_SLOW_PATH: + return lemming::dataplane::sai::SAMPLEPACKET_TYPE_SLOW_PATH; + + case SAI_SAMPLEPACKET_TYPE_MIRROR_SESSION: + return lemming::dataplane::sai::SAMPLEPACKET_TYPE_MIRROR_SESSION; + + default: + return lemming::dataplane::sai::SAMPLEPACKET_TYPE_UNSPECIFIED; + } +} +sai_samplepacket_type_t convert_sai_samplepacket_type_t_to_sai( + lemming::dataplane::sai::SamplepacketType val) { + switch (val) { + case lemming::dataplane::sai::SAMPLEPACKET_TYPE_SLOW_PATH: + return SAI_SAMPLEPACKET_TYPE_SLOW_PATH; + + case lemming::dataplane::sai::SAMPLEPACKET_TYPE_MIRROR_SESSION: + return SAI_SAMPLEPACKET_TYPE_MIRROR_SESSION; + + default: + return SAI_SAMPLEPACKET_TYPE_SLOW_PATH; + } +} + +google::protobuf::RepeatedField +convert_list_sai_samplepacket_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_samplepacket_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_samplepacket_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_samplepacket_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SchedulerAttr convert_sai_scheduler_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_SCHEDULER_ATTR_SCHEDULING_TYPE: + return lemming::dataplane::sai::SCHEDULER_ATTR_SCHEDULING_TYPE; + + case SAI_SCHEDULER_ATTR_SCHEDULING_WEIGHT: + return lemming::dataplane::sai::SCHEDULER_ATTR_SCHEDULING_WEIGHT; + + case SAI_SCHEDULER_ATTR_METER_TYPE: + return lemming::dataplane::sai::SCHEDULER_ATTR_METER_TYPE; + + case SAI_SCHEDULER_ATTR_MIN_BANDWIDTH_RATE: + return lemming::dataplane::sai::SCHEDULER_ATTR_MIN_BANDWIDTH_RATE; + + case SAI_SCHEDULER_ATTR_MIN_BANDWIDTH_BURST_RATE: + return lemming::dataplane::sai::SCHEDULER_ATTR_MIN_BANDWIDTH_BURST_RATE; + + case SAI_SCHEDULER_ATTR_MAX_BANDWIDTH_RATE: + return lemming::dataplane::sai::SCHEDULER_ATTR_MAX_BANDWIDTH_RATE; + + case SAI_SCHEDULER_ATTR_MAX_BANDWIDTH_BURST_RATE: + return lemming::dataplane::sai::SCHEDULER_ATTR_MAX_BANDWIDTH_BURST_RATE; + + default: + return lemming::dataplane::sai::SCHEDULER_ATTR_UNSPECIFIED; + } +} +sai_scheduler_attr_t convert_sai_scheduler_attr_t_to_sai( + lemming::dataplane::sai::SchedulerAttr val) { + switch (val) { + case lemming::dataplane::sai::SCHEDULER_ATTR_SCHEDULING_TYPE: + return SAI_SCHEDULER_ATTR_SCHEDULING_TYPE; + + case lemming::dataplane::sai::SCHEDULER_ATTR_SCHEDULING_WEIGHT: + return SAI_SCHEDULER_ATTR_SCHEDULING_WEIGHT; + + case lemming::dataplane::sai::SCHEDULER_ATTR_METER_TYPE: + return SAI_SCHEDULER_ATTR_METER_TYPE; + + case lemming::dataplane::sai::SCHEDULER_ATTR_MIN_BANDWIDTH_RATE: + return SAI_SCHEDULER_ATTR_MIN_BANDWIDTH_RATE; + + case lemming::dataplane::sai::SCHEDULER_ATTR_MIN_BANDWIDTH_BURST_RATE: + return SAI_SCHEDULER_ATTR_MIN_BANDWIDTH_BURST_RATE; + + case lemming::dataplane::sai::SCHEDULER_ATTR_MAX_BANDWIDTH_RATE: + return SAI_SCHEDULER_ATTR_MAX_BANDWIDTH_RATE; + + case lemming::dataplane::sai::SCHEDULER_ATTR_MAX_BANDWIDTH_BURST_RATE: + return SAI_SCHEDULER_ATTR_MAX_BANDWIDTH_BURST_RATE; + + default: + return SAI_SCHEDULER_ATTR_SCHEDULING_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_scheduler_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_scheduler_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_scheduler_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_scheduler_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SchedulerGroupAttr +convert_sai_scheduler_group_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SCHEDULER_GROUP_ATTR_CHILD_COUNT: + return lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_CHILD_COUNT; + + case SAI_SCHEDULER_GROUP_ATTR_CHILD_LIST: + return lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_CHILD_LIST; + + case SAI_SCHEDULER_GROUP_ATTR_PORT_ID: + return lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_PORT_ID; + + case SAI_SCHEDULER_GROUP_ATTR_LEVEL: + return lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_LEVEL; + + case SAI_SCHEDULER_GROUP_ATTR_MAX_CHILDS: + return lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_MAX_CHILDS; + + case SAI_SCHEDULER_GROUP_ATTR_SCHEDULER_PROFILE_ID: + return lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_SCHEDULER_PROFILE_ID; + + case SAI_SCHEDULER_GROUP_ATTR_PARENT_NODE: + return lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_PARENT_NODE; + + default: + return lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_UNSPECIFIED; + } +} +sai_scheduler_group_attr_t convert_sai_scheduler_group_attr_t_to_sai( + lemming::dataplane::sai::SchedulerGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_CHILD_COUNT: + return SAI_SCHEDULER_GROUP_ATTR_CHILD_COUNT; + + case lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_CHILD_LIST: + return SAI_SCHEDULER_GROUP_ATTR_CHILD_LIST; + + case lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_PORT_ID: + return SAI_SCHEDULER_GROUP_ATTR_PORT_ID; + + case lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_LEVEL: + return SAI_SCHEDULER_GROUP_ATTR_LEVEL; + + case lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_MAX_CHILDS: + return SAI_SCHEDULER_GROUP_ATTR_MAX_CHILDS; + + case lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_SCHEDULER_PROFILE_ID: + return SAI_SCHEDULER_GROUP_ATTR_SCHEDULER_PROFILE_ID; + + case lemming::dataplane::sai::SCHEDULER_GROUP_ATTR_PARENT_NODE: + return SAI_SCHEDULER_GROUP_ATTR_PARENT_NODE; + + default: + return SAI_SCHEDULER_GROUP_ATTR_CHILD_COUNT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_scheduler_group_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_scheduler_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_scheduler_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_scheduler_group_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SchedulingType convert_sai_scheduling_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_SCHEDULING_TYPE_STRICT: + return lemming::dataplane::sai::SCHEDULING_TYPE_STRICT; + + case SAI_SCHEDULING_TYPE_WRR: + return lemming::dataplane::sai::SCHEDULING_TYPE_WRR; + + case SAI_SCHEDULING_TYPE_DWRR: + return lemming::dataplane::sai::SCHEDULING_TYPE_DWRR; + + default: + return lemming::dataplane::sai::SCHEDULING_TYPE_UNSPECIFIED; + } +} +sai_scheduling_type_t convert_sai_scheduling_type_t_to_sai( + lemming::dataplane::sai::SchedulingType val) { + switch (val) { + case lemming::dataplane::sai::SCHEDULING_TYPE_STRICT: + return SAI_SCHEDULING_TYPE_STRICT; + + case lemming::dataplane::sai::SCHEDULING_TYPE_WRR: + return SAI_SCHEDULING_TYPE_WRR; + + case lemming::dataplane::sai::SCHEDULING_TYPE_DWRR: + return SAI_SCHEDULING_TYPE_DWRR; + + default: + return SAI_SCHEDULING_TYPE_STRICT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_scheduling_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_scheduling_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_scheduling_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_scheduling_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::Srv6SidlistAttr +convert_sai_srv6_sidlist_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SRV6_SIDLIST_ATTR_TYPE: + return lemming::dataplane::sai::SRV6_SIDLIST_ATTR_TYPE; + + case SAI_SRV6_SIDLIST_ATTR_TLV_LIST: + return lemming::dataplane::sai::SRV6_SIDLIST_ATTR_TLV_LIST; + + case SAI_SRV6_SIDLIST_ATTR_SEGMENT_LIST: + return lemming::dataplane::sai::SRV6_SIDLIST_ATTR_SEGMENT_LIST; + + default: + return lemming::dataplane::sai::SRV6_SIDLIST_ATTR_UNSPECIFIED; + } +} +sai_srv6_sidlist_attr_t convert_sai_srv6_sidlist_attr_t_to_sai( + lemming::dataplane::sai::Srv6SidlistAttr val) { + switch (val) { + case lemming::dataplane::sai::SRV6_SIDLIST_ATTR_TYPE: + return SAI_SRV6_SIDLIST_ATTR_TYPE; + + case lemming::dataplane::sai::SRV6_SIDLIST_ATTR_TLV_LIST: + return SAI_SRV6_SIDLIST_ATTR_TLV_LIST; + + case lemming::dataplane::sai::SRV6_SIDLIST_ATTR_SEGMENT_LIST: + return SAI_SRV6_SIDLIST_ATTR_SEGMENT_LIST; + + default: + return SAI_SRV6_SIDLIST_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_srv6_sidlist_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_srv6_sidlist_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_srv6_sidlist_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_srv6_sidlist_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::Srv6SidlistType +convert_sai_srv6_sidlist_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SRV6_SIDLIST_TYPE_INSERT: + return lemming::dataplane::sai::SRV6_SIDLIST_TYPE_INSERT; + + case SAI_SRV6_SIDLIST_TYPE_INSERT_RED: + return lemming::dataplane::sai::SRV6_SIDLIST_TYPE_INSERT_RED; + + case SAI_SRV6_SIDLIST_TYPE_ENCAPS: + return lemming::dataplane::sai::SRV6_SIDLIST_TYPE_ENCAPS; + + case SAI_SRV6_SIDLIST_TYPE_ENCAPS_RED: + return lemming::dataplane::sai::SRV6_SIDLIST_TYPE_ENCAPS_RED; + + case SAI_SRV6_SIDLIST_TYPE_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::SRV6_SIDLIST_TYPE_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::SRV6_SIDLIST_TYPE_UNSPECIFIED; + } +} +sai_srv6_sidlist_type_t convert_sai_srv6_sidlist_type_t_to_sai( + lemming::dataplane::sai::Srv6SidlistType val) { + switch (val) { + case lemming::dataplane::sai::SRV6_SIDLIST_TYPE_INSERT: + return SAI_SRV6_SIDLIST_TYPE_INSERT; + + case lemming::dataplane::sai::SRV6_SIDLIST_TYPE_INSERT_RED: + return SAI_SRV6_SIDLIST_TYPE_INSERT_RED; + + case lemming::dataplane::sai::SRV6_SIDLIST_TYPE_ENCAPS: + return SAI_SRV6_SIDLIST_TYPE_ENCAPS; + + case lemming::dataplane::sai::SRV6_SIDLIST_TYPE_ENCAPS_RED: + return SAI_SRV6_SIDLIST_TYPE_ENCAPS_RED; + + case lemming::dataplane::sai::SRV6_SIDLIST_TYPE_CUSTOM_RANGE_BASE: + return SAI_SRV6_SIDLIST_TYPE_CUSTOM_RANGE_BASE; + + default: + return SAI_SRV6_SIDLIST_TYPE_INSERT; + } +} + +google::protobuf::RepeatedField +convert_list_sai_srv6_sidlist_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_srv6_sidlist_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_srv6_sidlist_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_srv6_sidlist_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::StatsMode convert_sai_stats_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_STATS_MODE_READ: + return lemming::dataplane::sai::STATS_MODE_READ; + + case SAI_STATS_MODE_READ_AND_CLEAR: + return lemming::dataplane::sai::STATS_MODE_READ_AND_CLEAR; + + case SAI_STATS_MODE_BULK_READ: + return lemming::dataplane::sai::STATS_MODE_BULK_READ; + + case SAI_STATS_MODE_BULK_CLEAR: + return lemming::dataplane::sai::STATS_MODE_BULK_CLEAR; + + case SAI_STATS_MODE_BULK_READ_AND_CLEAR: + return lemming::dataplane::sai::STATS_MODE_BULK_READ_AND_CLEAR; + + default: + return lemming::dataplane::sai::STATS_MODE_UNSPECIFIED; + } +} +sai_stats_mode_t convert_sai_stats_mode_t_to_sai( + lemming::dataplane::sai::StatsMode val) { + switch (val) { + case lemming::dataplane::sai::STATS_MODE_READ: + return SAI_STATS_MODE_READ; + + case lemming::dataplane::sai::STATS_MODE_READ_AND_CLEAR: + return SAI_STATS_MODE_READ_AND_CLEAR; + + case lemming::dataplane::sai::STATS_MODE_BULK_READ: + return SAI_STATS_MODE_BULK_READ; + + case lemming::dataplane::sai::STATS_MODE_BULK_CLEAR: + return SAI_STATS_MODE_BULK_CLEAR; + + case lemming::dataplane::sai::STATS_MODE_BULK_READ_AND_CLEAR: + return SAI_STATS_MODE_BULK_READ_AND_CLEAR; + + default: + return SAI_STATS_MODE_READ; + } +} + +google::protobuf::RepeatedField convert_list_sai_stats_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_stats_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_stats_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_stats_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::StpAttr convert_sai_stp_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_STP_ATTR_VLAN_LIST: + return lemming::dataplane::sai::STP_ATTR_VLAN_LIST; + + case SAI_STP_ATTR_BRIDGE_ID: + return lemming::dataplane::sai::STP_ATTR_BRIDGE_ID; + + case SAI_STP_ATTR_PORT_LIST: + return lemming::dataplane::sai::STP_ATTR_PORT_LIST; + + default: + return lemming::dataplane::sai::STP_ATTR_UNSPECIFIED; + } +} +sai_stp_attr_t convert_sai_stp_attr_t_to_sai( + lemming::dataplane::sai::StpAttr val) { + switch (val) { + case lemming::dataplane::sai::STP_ATTR_VLAN_LIST: + return SAI_STP_ATTR_VLAN_LIST; + + case lemming::dataplane::sai::STP_ATTR_BRIDGE_ID: + return SAI_STP_ATTR_BRIDGE_ID; + + case lemming::dataplane::sai::STP_ATTR_PORT_LIST: + return SAI_STP_ATTR_PORT_LIST; + + default: + return SAI_STP_ATTR_VLAN_LIST; + } +} + +google::protobuf::RepeatedField convert_list_sai_stp_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_stp_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_stp_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_stp_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::StpPortAttr convert_sai_stp_port_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_STP_PORT_ATTR_STP: + return lemming::dataplane::sai::STP_PORT_ATTR_STP; + + case SAI_STP_PORT_ATTR_BRIDGE_PORT: + return lemming::dataplane::sai::STP_PORT_ATTR_BRIDGE_PORT; + + case SAI_STP_PORT_ATTR_STATE: + return lemming::dataplane::sai::STP_PORT_ATTR_STATE; + + default: + return lemming::dataplane::sai::STP_PORT_ATTR_UNSPECIFIED; + } +} +sai_stp_port_attr_t convert_sai_stp_port_attr_t_to_sai( + lemming::dataplane::sai::StpPortAttr val) { + switch (val) { + case lemming::dataplane::sai::STP_PORT_ATTR_STP: + return SAI_STP_PORT_ATTR_STP; + + case lemming::dataplane::sai::STP_PORT_ATTR_BRIDGE_PORT: + return SAI_STP_PORT_ATTR_BRIDGE_PORT; + + case lemming::dataplane::sai::STP_PORT_ATTR_STATE: + return SAI_STP_PORT_ATTR_STATE; + + default: + return SAI_STP_PORT_ATTR_STP; + } +} + +google::protobuf::RepeatedField convert_list_sai_stp_port_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_stp_port_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_stp_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_stp_port_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::StpPortState convert_sai_stp_port_state_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_STP_PORT_STATE_LEARNING: + return lemming::dataplane::sai::STP_PORT_STATE_LEARNING; + + case SAI_STP_PORT_STATE_FORWARDING: + return lemming::dataplane::sai::STP_PORT_STATE_FORWARDING; + + case SAI_STP_PORT_STATE_BLOCKING: + return lemming::dataplane::sai::STP_PORT_STATE_BLOCKING; + + default: + return lemming::dataplane::sai::STP_PORT_STATE_UNSPECIFIED; + } +} +sai_stp_port_state_t convert_sai_stp_port_state_t_to_sai( + lemming::dataplane::sai::StpPortState val) { + switch (val) { + case lemming::dataplane::sai::STP_PORT_STATE_LEARNING: + return SAI_STP_PORT_STATE_LEARNING; + + case lemming::dataplane::sai::STP_PORT_STATE_FORWARDING: + return SAI_STP_PORT_STATE_FORWARDING; + + case lemming::dataplane::sai::STP_PORT_STATE_BLOCKING: + return SAI_STP_PORT_STATE_BLOCKING; + + default: + return SAI_STP_PORT_STATE_LEARNING; + } +} + +google::protobuf::RepeatedField convert_list_sai_stp_port_state_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_stp_port_state_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_stp_port_state_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_stp_port_state_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchAttrExtensions +convert_sai_switch_attr_extensions_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_ATTR_EXTENSIONS_RANGE_START: + return lemming::dataplane::sai::SWITCH_ATTR_EXTENSIONS_RANGE_START; + + case SAI_SWITCH_ATTR_EXTENSIONS_RANGE_END: + return lemming::dataplane::sai::SWITCH_ATTR_EXTENSIONS_RANGE_END; + + default: + return lemming::dataplane::sai::SWITCH_ATTR_EXTENSIONS_UNSPECIFIED; + } +} +sai_switch_attr_extensions_t convert_sai_switch_attr_extensions_t_to_sai( + lemming::dataplane::sai::SwitchAttrExtensions val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_ATTR_EXTENSIONS_RANGE_START: + return SAI_SWITCH_ATTR_EXTENSIONS_RANGE_START; + + case lemming::dataplane::sai::SWITCH_ATTR_EXTENSIONS_RANGE_END: + return SAI_SWITCH_ATTR_EXTENSIONS_RANGE_END; + + default: + return SAI_SWITCH_ATTR_EXTENSIONS_RANGE_START; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_attr_extensions_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_switch_attr_extensions_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_attr_extensions_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_attr_extensions_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchAttr convert_sai_switch_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS; + + case SAI_SWITCH_ATTR_MAX_NUMBER_OF_SUPPORTED_PORTS: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_NUMBER_OF_SUPPORTED_PORTS; + + case SAI_SWITCH_ATTR_PORT_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_PORT_LIST; + + case SAI_SWITCH_ATTR_PORT_MAX_MTU: + return lemming::dataplane::sai::SWITCH_ATTR_PORT_MAX_MTU; + + case SAI_SWITCH_ATTR_CPU_PORT: + return lemming::dataplane::sai::SWITCH_ATTR_CPU_PORT; + + case SAI_SWITCH_ATTR_MAX_VIRTUAL_ROUTERS: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_VIRTUAL_ROUTERS; + + case SAI_SWITCH_ATTR_FDB_TABLE_SIZE: + return lemming::dataplane::sai::SWITCH_ATTR_FDB_TABLE_SIZE; + + case SAI_SWITCH_ATTR_L3_NEIGHBOR_TABLE_SIZE: + return lemming::dataplane::sai::SWITCH_ATTR_L3_NEIGHBOR_TABLE_SIZE; + + case SAI_SWITCH_ATTR_L3_ROUTE_TABLE_SIZE: + return lemming::dataplane::sai::SWITCH_ATTR_L3_ROUTE_TABLE_SIZE; + + case SAI_SWITCH_ATTR_LAG_MEMBERS: + return lemming::dataplane::sai::SWITCH_ATTR_LAG_MEMBERS; + + case SAI_SWITCH_ATTR_NUMBER_OF_LAGS: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_LAGS; + + case SAI_SWITCH_ATTR_ECMP_MEMBERS: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_MEMBERS; + + case SAI_SWITCH_ATTR_NUMBER_OF_ECMP_GROUPS: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_ECMP_GROUPS; + + case SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES; + + case SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES; + + case SAI_SWITCH_ATTR_NUMBER_OF_QUEUES: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_QUEUES; + + case SAI_SWITCH_ATTR_NUMBER_OF_CPU_QUEUES: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_CPU_QUEUES; + + case SAI_SWITCH_ATTR_ON_LINK_ROUTE_SUPPORTED: + return lemming::dataplane::sai::SWITCH_ATTR_ON_LINK_ROUTE_SUPPORTED; + + case SAI_SWITCH_ATTR_OPER_STATUS: + return lemming::dataplane::sai::SWITCH_ATTR_OPER_STATUS; + + case SAI_SWITCH_ATTR_MAX_NUMBER_OF_TEMP_SENSORS: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_NUMBER_OF_TEMP_SENSORS; + + case SAI_SWITCH_ATTR_TEMP_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_TEMP_LIST; + + case SAI_SWITCH_ATTR_MAX_TEMP: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_TEMP; + + case SAI_SWITCH_ATTR_AVERAGE_TEMP: + return lemming::dataplane::sai::SWITCH_ATTR_AVERAGE_TEMP; + + case SAI_SWITCH_ATTR_ACL_TABLE_MINIMUM_PRIORITY: + return lemming::dataplane::sai::SWITCH_ATTR_ACL_TABLE_MINIMUM_PRIORITY; + + case SAI_SWITCH_ATTR_ACL_TABLE_MAXIMUM_PRIORITY: + return lemming::dataplane::sai::SWITCH_ATTR_ACL_TABLE_MAXIMUM_PRIORITY; + + case SAI_SWITCH_ATTR_ACL_ENTRY_MINIMUM_PRIORITY: + return lemming::dataplane::sai::SWITCH_ATTR_ACL_ENTRY_MINIMUM_PRIORITY; + + case SAI_SWITCH_ATTR_ACL_ENTRY_MAXIMUM_PRIORITY: + return lemming::dataplane::sai::SWITCH_ATTR_ACL_ENTRY_MAXIMUM_PRIORITY; + + case SAI_SWITCH_ATTR_ACL_TABLE_GROUP_MINIMUM_PRIORITY: + return lemming::dataplane::sai:: + SWITCH_ATTR_ACL_TABLE_GROUP_MINIMUM_PRIORITY; + + case SAI_SWITCH_ATTR_ACL_TABLE_GROUP_MAXIMUM_PRIORITY: + return lemming::dataplane::sai:: + SWITCH_ATTR_ACL_TABLE_GROUP_MAXIMUM_PRIORITY; + + case SAI_SWITCH_ATTR_FDB_DST_USER_META_DATA_RANGE: + return lemming::dataplane::sai::SWITCH_ATTR_FDB_DST_USER_META_DATA_RANGE; + + case SAI_SWITCH_ATTR_ROUTE_DST_USER_META_DATA_RANGE: + return lemming::dataplane::sai:: + SWITCH_ATTR_ROUTE_DST_USER_META_DATA_RANGE; + + case SAI_SWITCH_ATTR_NEIGHBOR_DST_USER_META_DATA_RANGE: + return lemming::dataplane::sai:: + SWITCH_ATTR_NEIGHBOR_DST_USER_META_DATA_RANGE; + + case SAI_SWITCH_ATTR_PORT_USER_META_DATA_RANGE: + return lemming::dataplane::sai::SWITCH_ATTR_PORT_USER_META_DATA_RANGE; + + case SAI_SWITCH_ATTR_VLAN_USER_META_DATA_RANGE: + return lemming::dataplane::sai::SWITCH_ATTR_VLAN_USER_META_DATA_RANGE; + + case SAI_SWITCH_ATTR_ACL_USER_META_DATA_RANGE: + return lemming::dataplane::sai::SWITCH_ATTR_ACL_USER_META_DATA_RANGE; + + case SAI_SWITCH_ATTR_ACL_USER_TRAP_ID_RANGE: + return lemming::dataplane::sai::SWITCH_ATTR_ACL_USER_TRAP_ID_RANGE; + + case SAI_SWITCH_ATTR_DEFAULT_VLAN_ID: + return lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_VLAN_ID; + + case SAI_SWITCH_ATTR_DEFAULT_STP_INST_ID: + return lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_STP_INST_ID; + + case SAI_SWITCH_ATTR_MAX_STP_INSTANCE: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_STP_INSTANCE; + + case SAI_SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID: + return lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID; + + case SAI_SWITCH_ATTR_DEFAULT_OVERRIDE_VIRTUAL_ROUTER_ID: + return lemming::dataplane::sai:: + SWITCH_ATTR_DEFAULT_OVERRIDE_VIRTUAL_ROUTER_ID; + + case SAI_SWITCH_ATTR_DEFAULT_1Q_BRIDGE_ID: + return lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_1Q_BRIDGE_ID; + + case SAI_SWITCH_ATTR_INGRESS_ACL: + return lemming::dataplane::sai::SWITCH_ATTR_INGRESS_ACL; + + case SAI_SWITCH_ATTR_EGRESS_ACL: + return lemming::dataplane::sai::SWITCH_ATTR_EGRESS_ACL; + + case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_TRAFFIC_CLASSES: + return lemming::dataplane::sai:: + SWITCH_ATTR_QOS_MAX_NUMBER_OF_TRAFFIC_CLASSES; + + case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_SCHEDULER_GROUP_HIERARCHY_LEVELS: + return lemming::dataplane::sai:: + SWITCH_ATTR_QOS_MAX_NUMBER_OF_SCHEDULER_GROUP_HIERARCHY_LEVELS; + + case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_SCHEDULER_GROUPS_PER_HIERARCHY_LEVEL: + return lemming::dataplane::sai:: + SWITCH_ATTR_QOS_MAX_NUMBER_OF_SCHEDULER_GROUPS_PER_HIERARCHY_LEVEL; + + case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_CHILDS_PER_SCHEDULER_GROUP: + return lemming::dataplane::sai:: + SWITCH_ATTR_QOS_MAX_NUMBER_OF_CHILDS_PER_SCHEDULER_GROUP; + + case SAI_SWITCH_ATTR_TOTAL_BUFFER_SIZE: + return lemming::dataplane::sai::SWITCH_ATTR_TOTAL_BUFFER_SIZE; + + case SAI_SWITCH_ATTR_INGRESS_BUFFER_POOL_NUM: + return lemming::dataplane::sai::SWITCH_ATTR_INGRESS_BUFFER_POOL_NUM; + + case SAI_SWITCH_ATTR_EGRESS_BUFFER_POOL_NUM: + return lemming::dataplane::sai::SWITCH_ATTR_EGRESS_BUFFER_POOL_NUM; + + case SAI_SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY: + return lemming::dataplane::sai:: + SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY: + return lemming::dataplane::sai:: + SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_FDB_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_L2MC_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_L2MC_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_IPMC_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPMC_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_SNAT_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_DNAT_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_ACL_TABLE; + + case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP; + + case SAI_SWITCH_ATTR_AVAILABLE_MY_SID_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_MY_SID_ENTRY; + + case SAI_SWITCH_ATTR_DEFAULT_TRAP_GROUP: + return lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_TRAP_GROUP; + + case SAI_SWITCH_ATTR_ECMP_HASH: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_HASH; + + case SAI_SWITCH_ATTR_LAG_HASH: + return lemming::dataplane::sai::SWITCH_ATTR_LAG_HASH; + + case SAI_SWITCH_ATTR_RESTART_WARM: + return lemming::dataplane::sai::SWITCH_ATTR_RESTART_WARM; + + case SAI_SWITCH_ATTR_WARM_RECOVER: + return lemming::dataplane::sai::SWITCH_ATTR_WARM_RECOVER; + + case SAI_SWITCH_ATTR_RESTART_TYPE: + return lemming::dataplane::sai::SWITCH_ATTR_RESTART_TYPE; + + case SAI_SWITCH_ATTR_MIN_PLANNED_RESTART_INTERVAL: + return lemming::dataplane::sai::SWITCH_ATTR_MIN_PLANNED_RESTART_INTERVAL; + + case SAI_SWITCH_ATTR_NV_STORAGE_SIZE: + return lemming::dataplane::sai::SWITCH_ATTR_NV_STORAGE_SIZE; + + case SAI_SWITCH_ATTR_MAX_ACL_ACTION_COUNT: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_ACL_ACTION_COUNT; + + case SAI_SWITCH_ATTR_MAX_ACL_RANGE_COUNT: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_ACL_RANGE_COUNT; + + case SAI_SWITCH_ATTR_ACL_CAPABILITY: + return lemming::dataplane::sai::SWITCH_ATTR_ACL_CAPABILITY; + + case SAI_SWITCH_ATTR_MCAST_SNOOPING_CAPABILITY: + return lemming::dataplane::sai::SWITCH_ATTR_MCAST_SNOOPING_CAPABILITY; + + case SAI_SWITCH_ATTR_SWITCHING_MODE: + return lemming::dataplane::sai::SWITCH_ATTR_SWITCHING_MODE; + + case SAI_SWITCH_ATTR_BCAST_CPU_FLOOD_ENABLE: + return lemming::dataplane::sai::SWITCH_ATTR_BCAST_CPU_FLOOD_ENABLE; + + case SAI_SWITCH_ATTR_MCAST_CPU_FLOOD_ENABLE: + return lemming::dataplane::sai::SWITCH_ATTR_MCAST_CPU_FLOOD_ENABLE; + + case SAI_SWITCH_ATTR_SRC_MAC_ADDRESS: + return lemming::dataplane::sai::SWITCH_ATTR_SRC_MAC_ADDRESS; + + case SAI_SWITCH_ATTR_MAX_LEARNED_ADDRESSES: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_LEARNED_ADDRESSES; + + case SAI_SWITCH_ATTR_FDB_AGING_TIME: + return lemming::dataplane::sai::SWITCH_ATTR_FDB_AGING_TIME; + + case SAI_SWITCH_ATTR_FDB_UNICAST_MISS_PACKET_ACTION: + return lemming::dataplane::sai:: + SWITCH_ATTR_FDB_UNICAST_MISS_PACKET_ACTION; + + case SAI_SWITCH_ATTR_FDB_BROADCAST_MISS_PACKET_ACTION: + return lemming::dataplane::sai:: + SWITCH_ATTR_FDB_BROADCAST_MISS_PACKET_ACTION; + + case SAI_SWITCH_ATTR_FDB_MULTICAST_MISS_PACKET_ACTION: + return lemming::dataplane::sai:: + SWITCH_ATTR_FDB_MULTICAST_MISS_PACKET_ACTION; + + case SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_ALGORITHM: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_DEFAULT_HASH_ALGORITHM; + + case SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_SEED: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_DEFAULT_HASH_SEED; + + case SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET; + + case SAI_SWITCH_ATTR_ECMP_DEFAULT_SYMMETRIC_HASH: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_DEFAULT_SYMMETRIC_HASH; + + case SAI_SWITCH_ATTR_ECMP_HASH_IPV4: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_HASH_IPV4; + + case SAI_SWITCH_ATTR_ECMP_HASH_IPV4_IN_IPV4: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_HASH_IPV4_IN_IPV4; + + case SAI_SWITCH_ATTR_ECMP_HASH_IPV6: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_HASH_IPV6; + + case SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_ALGORITHM: + return lemming::dataplane::sai::SWITCH_ATTR_LAG_DEFAULT_HASH_ALGORITHM; + + case SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_SEED: + return lemming::dataplane::sai::SWITCH_ATTR_LAG_DEFAULT_HASH_SEED; + + case SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET: + return lemming::dataplane::sai::SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET; + + case SAI_SWITCH_ATTR_LAG_DEFAULT_SYMMETRIC_HASH: + return lemming::dataplane::sai::SWITCH_ATTR_LAG_DEFAULT_SYMMETRIC_HASH; + + case SAI_SWITCH_ATTR_LAG_HASH_IPV4: + return lemming::dataplane::sai::SWITCH_ATTR_LAG_HASH_IPV4; + + case SAI_SWITCH_ATTR_LAG_HASH_IPV4_IN_IPV4: + return lemming::dataplane::sai::SWITCH_ATTR_LAG_HASH_IPV4_IN_IPV4; + + case SAI_SWITCH_ATTR_LAG_HASH_IPV6: + return lemming::dataplane::sai::SWITCH_ATTR_LAG_HASH_IPV6; + + case SAI_SWITCH_ATTR_COUNTER_REFRESH_INTERVAL: + return lemming::dataplane::sai::SWITCH_ATTR_COUNTER_REFRESH_INTERVAL; + + case SAI_SWITCH_ATTR_QOS_DEFAULT_TC: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_DEFAULT_TC; + + case SAI_SWITCH_ATTR_QOS_DOT1P_TO_TC_MAP: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_DOT1P_TO_TC_MAP; + + case SAI_SWITCH_ATTR_QOS_DOT1P_TO_COLOR_MAP: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_DOT1P_TO_COLOR_MAP; + + case SAI_SWITCH_ATTR_QOS_DSCP_TO_TC_MAP: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_DSCP_TO_TC_MAP; + + case SAI_SWITCH_ATTR_QOS_DSCP_TO_COLOR_MAP: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_DSCP_TO_COLOR_MAP; + + case SAI_SWITCH_ATTR_QOS_TC_TO_QUEUE_MAP: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_TC_TO_QUEUE_MAP; + + case SAI_SWITCH_ATTR_QOS_TC_AND_COLOR_TO_DOT1P_MAP: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_TC_AND_COLOR_TO_DOT1P_MAP; + + case SAI_SWITCH_ATTR_QOS_TC_AND_COLOR_TO_DSCP_MAP: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_TC_AND_COLOR_TO_DSCP_MAP; + + case SAI_SWITCH_ATTR_SWITCH_SHELL_ENABLE: + return lemming::dataplane::sai::SWITCH_ATTR_SWITCH_SHELL_ENABLE; + + case SAI_SWITCH_ATTR_SWITCH_PROFILE_ID: + return lemming::dataplane::sai::SWITCH_ATTR_SWITCH_PROFILE_ID; + + case SAI_SWITCH_ATTR_SWITCH_HARDWARE_INFO: + return lemming::dataplane::sai::SWITCH_ATTR_SWITCH_HARDWARE_INFO; + + case SAI_SWITCH_ATTR_FIRMWARE_PATH_NAME: + return lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_PATH_NAME; + + case SAI_SWITCH_ATTR_INIT_SWITCH: + return lemming::dataplane::sai::SWITCH_ATTR_INIT_SWITCH; + + case SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY: + return lemming::dataplane::sai::SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY; + + case SAI_SWITCH_ATTR_SWITCH_SHUTDOWN_REQUEST_NOTIFY: + return lemming::dataplane::sai:: + SWITCH_ATTR_SWITCH_SHUTDOWN_REQUEST_NOTIFY; + + case SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY: + return lemming::dataplane::sai::SWITCH_ATTR_FDB_EVENT_NOTIFY; + + case SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY: + return lemming::dataplane::sai::SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY; + + case SAI_SWITCH_ATTR_PACKET_EVENT_NOTIFY: + return lemming::dataplane::sai::SWITCH_ATTR_PACKET_EVENT_NOTIFY; + + case SAI_SWITCH_ATTR_FAST_API_ENABLE: + return lemming::dataplane::sai::SWITCH_ATTR_FAST_API_ENABLE; + + case SAI_SWITCH_ATTR_MIRROR_TC: + return lemming::dataplane::sai::SWITCH_ATTR_MIRROR_TC; + + case SAI_SWITCH_ATTR_ACL_STAGE_INGRESS: + return lemming::dataplane::sai::SWITCH_ATTR_ACL_STAGE_INGRESS; + + case SAI_SWITCH_ATTR_ACL_STAGE_EGRESS: + return lemming::dataplane::sai::SWITCH_ATTR_ACL_STAGE_EGRESS; + + case SAI_SWITCH_ATTR_SRV6_MAX_SID_DEPTH: + return lemming::dataplane::sai::SWITCH_ATTR_SRV6_MAX_SID_DEPTH; + + case SAI_SWITCH_ATTR_SRV6_TLV_TYPE: + return lemming::dataplane::sai::SWITCH_ATTR_SRV6_TLV_TYPE; + + case SAI_SWITCH_ATTR_QOS_NUM_LOSSLESS_QUEUES: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_NUM_LOSSLESS_QUEUES; + + case SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY: + return lemming::dataplane::sai::SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY; + + case SAI_SWITCH_ATTR_PFC_DLR_PACKET_ACTION: + return lemming::dataplane::sai::SWITCH_ATTR_PFC_DLR_PACKET_ACTION; + + case SAI_SWITCH_ATTR_PFC_TC_DLD_INTERVAL_RANGE: + return lemming::dataplane::sai::SWITCH_ATTR_PFC_TC_DLD_INTERVAL_RANGE; + + case SAI_SWITCH_ATTR_PFC_TC_DLD_INTERVAL: + return lemming::dataplane::sai::SWITCH_ATTR_PFC_TC_DLD_INTERVAL; + + case SAI_SWITCH_ATTR_PFC_TC_DLR_INTERVAL_RANGE: + return lemming::dataplane::sai::SWITCH_ATTR_PFC_TC_DLR_INTERVAL_RANGE; + + case SAI_SWITCH_ATTR_PFC_TC_DLR_INTERVAL: + return lemming::dataplane::sai::SWITCH_ATTR_PFC_TC_DLR_INTERVAL; + + case SAI_SWITCH_ATTR_SUPPORTED_PROTECTED_OBJECT_TYPE: + return lemming::dataplane::sai:: + SWITCH_ATTR_SUPPORTED_PROTECTED_OBJECT_TYPE; + + case SAI_SWITCH_ATTR_TPID_OUTER_VLAN: + return lemming::dataplane::sai::SWITCH_ATTR_TPID_OUTER_VLAN; + + case SAI_SWITCH_ATTR_TPID_INNER_VLAN: + return lemming::dataplane::sai::SWITCH_ATTR_TPID_INNER_VLAN; + + case SAI_SWITCH_ATTR_CRC_CHECK_ENABLE: + return lemming::dataplane::sai::SWITCH_ATTR_CRC_CHECK_ENABLE; + + case SAI_SWITCH_ATTR_CRC_RECALCULATION_ENABLE: + return lemming::dataplane::sai::SWITCH_ATTR_CRC_RECALCULATION_ENABLE; + + case SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY: + return lemming::dataplane::sai:: + SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY; + + case SAI_SWITCH_ATTR_NUMBER_OF_BFD_SESSION: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_BFD_SESSION; + + case SAI_SWITCH_ATTR_MAX_BFD_SESSION: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_BFD_SESSION; + + case SAI_SWITCH_ATTR_SUPPORTED_IPV4_BFD_SESSION_OFFLOAD_TYPE: + return lemming::dataplane::sai:: + SWITCH_ATTR_SUPPORTED_IPV4_BFD_SESSION_OFFLOAD_TYPE; + + case SAI_SWITCH_ATTR_SUPPORTED_IPV6_BFD_SESSION_OFFLOAD_TYPE: + return lemming::dataplane::sai:: + SWITCH_ATTR_SUPPORTED_IPV6_BFD_SESSION_OFFLOAD_TYPE; + + case SAI_SWITCH_ATTR_MIN_BFD_RX: + return lemming::dataplane::sai::SWITCH_ATTR_MIN_BFD_RX; + + case SAI_SWITCH_ATTR_MIN_BFD_TX: + return lemming::dataplane::sai::SWITCH_ATTR_MIN_BFD_TX; + + case SAI_SWITCH_ATTR_ECN_ECT_THRESHOLD_ENABLE: + return lemming::dataplane::sai::SWITCH_ATTR_ECN_ECT_THRESHOLD_ENABLE; + + case SAI_SWITCH_ATTR_VXLAN_DEFAULT_ROUTER_MAC: + return lemming::dataplane::sai::SWITCH_ATTR_VXLAN_DEFAULT_ROUTER_MAC; + + case SAI_SWITCH_ATTR_VXLAN_DEFAULT_PORT: + return lemming::dataplane::sai::SWITCH_ATTR_VXLAN_DEFAULT_PORT; + + case SAI_SWITCH_ATTR_MAX_MIRROR_SESSION: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_MIRROR_SESSION; + + case SAI_SWITCH_ATTR_MAX_SAMPLED_MIRROR_SESSION: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_SAMPLED_MIRROR_SESSION; + + case SAI_SWITCH_ATTR_SUPPORTED_EXTENDED_STATS_MODE: + return lemming::dataplane::sai::SWITCH_ATTR_SUPPORTED_EXTENDED_STATS_MODE; + + case SAI_SWITCH_ATTR_UNINIT_DATA_PLANE_ON_REMOVAL: + return lemming::dataplane::sai::SWITCH_ATTR_UNINIT_DATA_PLANE_ON_REMOVAL; + + case SAI_SWITCH_ATTR_TAM_OBJECT_ID: + return lemming::dataplane::sai::SWITCH_ATTR_TAM_OBJECT_ID; + + case SAI_SWITCH_ATTR_TAM_EVENT_NOTIFY: + return lemming::dataplane::sai::SWITCH_ATTR_TAM_EVENT_NOTIFY; + + case SAI_SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST; + + case SAI_SWITCH_ATTR_PRE_SHUTDOWN: + return lemming::dataplane::sai::SWITCH_ATTR_PRE_SHUTDOWN; + + case SAI_SWITCH_ATTR_NAT_ZONE_COUNTER_OBJECT_ID: + return lemming::dataplane::sai::SWITCH_ATTR_NAT_ZONE_COUNTER_OBJECT_ID; + + case SAI_SWITCH_ATTR_NAT_ENABLE: + return lemming::dataplane::sai::SWITCH_ATTR_NAT_ENABLE; + + case SAI_SWITCH_ATTR_HARDWARE_ACCESS_BUS: + return lemming::dataplane::sai::SWITCH_ATTR_HARDWARE_ACCESS_BUS; + + case SAI_SWITCH_ATTR_PLATFROM_CONTEXT: + return lemming::dataplane::sai::SWITCH_ATTR_PLATFROM_CONTEXT; + + case SAI_SWITCH_ATTR_REGISTER_READ: + return lemming::dataplane::sai::SWITCH_ATTR_REGISTER_READ; + + case SAI_SWITCH_ATTR_REGISTER_WRITE: + return lemming::dataplane::sai::SWITCH_ATTR_REGISTER_WRITE; + + case SAI_SWITCH_ATTR_FIRMWARE_DOWNLOAD_BROADCAST: + return lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_DOWNLOAD_BROADCAST; + + case SAI_SWITCH_ATTR_FIRMWARE_LOAD_METHOD: + return lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_LOAD_METHOD; + + case SAI_SWITCH_ATTR_FIRMWARE_LOAD_TYPE: + return lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_LOAD_TYPE; + + case SAI_SWITCH_ATTR_FIRMWARE_DOWNLOAD_EXECUTE: + return lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_DOWNLOAD_EXECUTE; + + case SAI_SWITCH_ATTR_FIRMWARE_BROADCAST_STOP: + return lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_BROADCAST_STOP; + + case SAI_SWITCH_ATTR_FIRMWARE_VERIFY_AND_INIT_SWITCH: + return lemming::dataplane::sai:: + SWITCH_ATTR_FIRMWARE_VERIFY_AND_INIT_SWITCH; + + case SAI_SWITCH_ATTR_FIRMWARE_STATUS: + return lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_STATUS; + + case SAI_SWITCH_ATTR_FIRMWARE_MAJOR_VERSION: + return lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_MAJOR_VERSION; + + case SAI_SWITCH_ATTR_FIRMWARE_MINOR_VERSION: + return lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_MINOR_VERSION; + + case SAI_SWITCH_ATTR_PORT_CONNECTOR_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_PORT_CONNECTOR_LIST; + + case SAI_SWITCH_ATTR_PROPOGATE_PORT_STATE_FROM_LINE_TO_SYSTEM_PORT_SUPPORT: + return lemming::dataplane::sai:: + SWITCH_ATTR_PROPOGATE_PORT_STATE_FROM_LINE_TO_SYSTEM_PORT_SUPPORT; + + case SAI_SWITCH_ATTR_TYPE: + return lemming::dataplane::sai::SWITCH_ATTR_TYPE; + + case SAI_SWITCH_ATTR_MACSEC_OBJECT_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_MACSEC_OBJECT_LIST; + + case SAI_SWITCH_ATTR_QOS_MPLS_EXP_TO_TC_MAP: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_MPLS_EXP_TO_TC_MAP; + + case SAI_SWITCH_ATTR_QOS_MPLS_EXP_TO_COLOR_MAP: + return lemming::dataplane::sai::SWITCH_ATTR_QOS_MPLS_EXP_TO_COLOR_MAP; + + case SAI_SWITCH_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP: + return lemming::dataplane::sai:: + SWITCH_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP; + + case SAI_SWITCH_ATTR_SWITCH_ID: + return lemming::dataplane::sai::SWITCH_ATTR_SWITCH_ID; + + case SAI_SWITCH_ATTR_MAX_SYSTEM_CORES: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_SYSTEM_CORES; + + case SAI_SWITCH_ATTR_SYSTEM_PORT_CONFIG_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_SYSTEM_PORT_CONFIG_LIST; + + case SAI_SWITCH_ATTR_NUMBER_OF_SYSTEM_PORTS: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_SYSTEM_PORTS; + + case SAI_SWITCH_ATTR_SYSTEM_PORT_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_SYSTEM_PORT_LIST; + + case SAI_SWITCH_ATTR_NUMBER_OF_FABRIC_PORTS: + return lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_FABRIC_PORTS; + + case SAI_SWITCH_ATTR_FABRIC_PORT_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_FABRIC_PORT_LIST; + + case SAI_SWITCH_ATTR_PACKET_DMA_MEMORY_POOL_SIZE: + return lemming::dataplane::sai::SWITCH_ATTR_PACKET_DMA_MEMORY_POOL_SIZE; + + case SAI_SWITCH_ATTR_FAILOVER_CONFIG_MODE: + return lemming::dataplane::sai::SWITCH_ATTR_FAILOVER_CONFIG_MODE; + + case SAI_SWITCH_ATTR_SUPPORTED_FAILOVER_MODE: + return lemming::dataplane::sai::SWITCH_ATTR_SUPPORTED_FAILOVER_MODE; + + case SAI_SWITCH_ATTR_TUNNEL_OBJECTS_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_TUNNEL_OBJECTS_LIST; + + case SAI_SWITCH_ATTR_PACKET_AVAILABLE_DMA_MEMORY_POOL_SIZE: + return lemming::dataplane::sai:: + SWITCH_ATTR_PACKET_AVAILABLE_DMA_MEMORY_POOL_SIZE; + + case SAI_SWITCH_ATTR_PRE_INGRESS_ACL: + return lemming::dataplane::sai::SWITCH_ATTR_PRE_INGRESS_ACL; + + case SAI_SWITCH_ATTR_AVAILABLE_SNAPT_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_SNAPT_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_DNAPT_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_DNAPT_ENTRY; + + case SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAPT_ENTRY: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_DOUBLE_NAPT_ENTRY; + + case SAI_SWITCH_ATTR_SLAVE_MDIO_ADDR_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_SLAVE_MDIO_ADDR_LIST; + + case SAI_SWITCH_ATTR_MY_MAC_TABLE_MINIMUM_PRIORITY: + return lemming::dataplane::sai::SWITCH_ATTR_MY_MAC_TABLE_MINIMUM_PRIORITY; + + case SAI_SWITCH_ATTR_MY_MAC_TABLE_MAXIMUM_PRIORITY: + return lemming::dataplane::sai::SWITCH_ATTR_MY_MAC_TABLE_MAXIMUM_PRIORITY; + + case SAI_SWITCH_ATTR_MY_MAC_LIST: + return lemming::dataplane::sai::SWITCH_ATTR_MY_MAC_LIST; + + case SAI_SWITCH_ATTR_INSTALLED_MY_MAC_ENTRIES: + return lemming::dataplane::sai::SWITCH_ATTR_INSTALLED_MY_MAC_ENTRIES; + + case SAI_SWITCH_ATTR_AVAILABLE_MY_MAC_ENTRIES: + return lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_MY_MAC_ENTRIES; + + case SAI_SWITCH_ATTR_MAX_NUMBER_OF_FORWARDING_CLASSES: + return lemming::dataplane::sai:: + SWITCH_ATTR_MAX_NUMBER_OF_FORWARDING_CLASSES; + + case SAI_SWITCH_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP: + return lemming::dataplane::sai:: + SWITCH_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP; + + case SAI_SWITCH_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP: + return lemming::dataplane::sai:: + SWITCH_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP; + + case SAI_SWITCH_ATTR_IPSEC_OBJECT_ID: + return lemming::dataplane::sai::SWITCH_ATTR_IPSEC_OBJECT_ID; + + case SAI_SWITCH_ATTR_IPSEC_SA_TAG_TPID: + return lemming::dataplane::sai::SWITCH_ATTR_IPSEC_SA_TAG_TPID; + + case SAI_SWITCH_ATTR_IPSEC_SA_STATUS_CHANGE_NOTIFY: + return lemming::dataplane::sai::SWITCH_ATTR_IPSEC_SA_STATUS_CHANGE_NOTIFY; + + case SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY: + return lemming::dataplane::sai::SWITCH_ATTR_NAT_EVENT_NOTIFY; + + case SAI_SWITCH_ATTR_MAX_ECMP_MEMBER_COUNT: + return lemming::dataplane::sai::SWITCH_ATTR_MAX_ECMP_MEMBER_COUNT; + + case SAI_SWITCH_ATTR_ECMP_MEMBER_COUNT: + return lemming::dataplane::sai::SWITCH_ATTR_ECMP_MEMBER_COUNT; + + default: + return lemming::dataplane::sai::SWITCH_ATTR_UNSPECIFIED; + } +} +sai_switch_attr_t convert_sai_switch_attr_t_to_sai( + lemming::dataplane::sai::SwitchAttr val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS: + return SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_NUMBER_OF_SUPPORTED_PORTS: + return SAI_SWITCH_ATTR_MAX_NUMBER_OF_SUPPORTED_PORTS; + + case lemming::dataplane::sai::SWITCH_ATTR_PORT_LIST: + return SAI_SWITCH_ATTR_PORT_LIST; + + case lemming::dataplane::sai::SWITCH_ATTR_PORT_MAX_MTU: + return SAI_SWITCH_ATTR_PORT_MAX_MTU; + + case lemming::dataplane::sai::SWITCH_ATTR_CPU_PORT: + return SAI_SWITCH_ATTR_CPU_PORT; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_VIRTUAL_ROUTERS: + return SAI_SWITCH_ATTR_MAX_VIRTUAL_ROUTERS; + + case lemming::dataplane::sai::SWITCH_ATTR_FDB_TABLE_SIZE: + return SAI_SWITCH_ATTR_FDB_TABLE_SIZE; + + case lemming::dataplane::sai::SWITCH_ATTR_L3_NEIGHBOR_TABLE_SIZE: + return SAI_SWITCH_ATTR_L3_NEIGHBOR_TABLE_SIZE; + + case lemming::dataplane::sai::SWITCH_ATTR_L3_ROUTE_TABLE_SIZE: + return SAI_SWITCH_ATTR_L3_ROUTE_TABLE_SIZE; + + case lemming::dataplane::sai::SWITCH_ATTR_LAG_MEMBERS: + return SAI_SWITCH_ATTR_LAG_MEMBERS; + + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_LAGS: + return SAI_SWITCH_ATTR_NUMBER_OF_LAGS; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_MEMBERS: + return SAI_SWITCH_ATTR_ECMP_MEMBERS; + + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_ECMP_GROUPS: + return SAI_SWITCH_ATTR_NUMBER_OF_ECMP_GROUPS; + + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES: + return SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES; + + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES: + return SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES; + + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_QUEUES: + return SAI_SWITCH_ATTR_NUMBER_OF_QUEUES; + + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_CPU_QUEUES: + return SAI_SWITCH_ATTR_NUMBER_OF_CPU_QUEUES; + + case lemming::dataplane::sai::SWITCH_ATTR_ON_LINK_ROUTE_SUPPORTED: + return SAI_SWITCH_ATTR_ON_LINK_ROUTE_SUPPORTED; + + case lemming::dataplane::sai::SWITCH_ATTR_OPER_STATUS: + return SAI_SWITCH_ATTR_OPER_STATUS; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_NUMBER_OF_TEMP_SENSORS: + return SAI_SWITCH_ATTR_MAX_NUMBER_OF_TEMP_SENSORS; + + case lemming::dataplane::sai::SWITCH_ATTR_TEMP_LIST: + return SAI_SWITCH_ATTR_TEMP_LIST; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_TEMP: + return SAI_SWITCH_ATTR_MAX_TEMP; + + case lemming::dataplane::sai::SWITCH_ATTR_AVERAGE_TEMP: + return SAI_SWITCH_ATTR_AVERAGE_TEMP; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_TABLE_MINIMUM_PRIORITY: + return SAI_SWITCH_ATTR_ACL_TABLE_MINIMUM_PRIORITY; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_TABLE_MAXIMUM_PRIORITY: + return SAI_SWITCH_ATTR_ACL_TABLE_MAXIMUM_PRIORITY; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_ENTRY_MINIMUM_PRIORITY: + return SAI_SWITCH_ATTR_ACL_ENTRY_MINIMUM_PRIORITY; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_ENTRY_MAXIMUM_PRIORITY: + return SAI_SWITCH_ATTR_ACL_ENTRY_MAXIMUM_PRIORITY; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_TABLE_GROUP_MINIMUM_PRIORITY: + return SAI_SWITCH_ATTR_ACL_TABLE_GROUP_MINIMUM_PRIORITY; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_TABLE_GROUP_MAXIMUM_PRIORITY: + return SAI_SWITCH_ATTR_ACL_TABLE_GROUP_MAXIMUM_PRIORITY; + + case lemming::dataplane::sai::SWITCH_ATTR_FDB_DST_USER_META_DATA_RANGE: + return SAI_SWITCH_ATTR_FDB_DST_USER_META_DATA_RANGE; + + case lemming::dataplane::sai::SWITCH_ATTR_ROUTE_DST_USER_META_DATA_RANGE: + return SAI_SWITCH_ATTR_ROUTE_DST_USER_META_DATA_RANGE; + + case lemming::dataplane::sai::SWITCH_ATTR_NEIGHBOR_DST_USER_META_DATA_RANGE: + return SAI_SWITCH_ATTR_NEIGHBOR_DST_USER_META_DATA_RANGE; + + case lemming::dataplane::sai::SWITCH_ATTR_PORT_USER_META_DATA_RANGE: + return SAI_SWITCH_ATTR_PORT_USER_META_DATA_RANGE; + + case lemming::dataplane::sai::SWITCH_ATTR_VLAN_USER_META_DATA_RANGE: + return SAI_SWITCH_ATTR_VLAN_USER_META_DATA_RANGE; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_USER_META_DATA_RANGE: + return SAI_SWITCH_ATTR_ACL_USER_META_DATA_RANGE; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_USER_TRAP_ID_RANGE: + return SAI_SWITCH_ATTR_ACL_USER_TRAP_ID_RANGE; + + case lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_VLAN_ID: + return SAI_SWITCH_ATTR_DEFAULT_VLAN_ID; + + case lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_STP_INST_ID: + return SAI_SWITCH_ATTR_DEFAULT_STP_INST_ID; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_STP_INSTANCE: + return SAI_SWITCH_ATTR_MAX_STP_INSTANCE; + + case lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID: + return SAI_SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID; + + case lemming::dataplane::sai:: + SWITCH_ATTR_DEFAULT_OVERRIDE_VIRTUAL_ROUTER_ID: + return SAI_SWITCH_ATTR_DEFAULT_OVERRIDE_VIRTUAL_ROUTER_ID; + + case lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_1Q_BRIDGE_ID: + return SAI_SWITCH_ATTR_DEFAULT_1Q_BRIDGE_ID; + + case lemming::dataplane::sai::SWITCH_ATTR_INGRESS_ACL: + return SAI_SWITCH_ATTR_INGRESS_ACL; + + case lemming::dataplane::sai::SWITCH_ATTR_EGRESS_ACL: + return SAI_SWITCH_ATTR_EGRESS_ACL; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_MAX_NUMBER_OF_TRAFFIC_CLASSES: + return SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_TRAFFIC_CLASSES; + + case lemming::dataplane::sai:: + SWITCH_ATTR_QOS_MAX_NUMBER_OF_SCHEDULER_GROUP_HIERARCHY_LEVELS: + return SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_SCHEDULER_GROUP_HIERARCHY_LEVELS; + + case lemming::dataplane::sai:: + SWITCH_ATTR_QOS_MAX_NUMBER_OF_SCHEDULER_GROUPS_PER_HIERARCHY_LEVEL: + return SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_SCHEDULER_GROUPS_PER_HIERARCHY_LEVEL; + + case lemming::dataplane::sai:: + SWITCH_ATTR_QOS_MAX_NUMBER_OF_CHILDS_PER_SCHEDULER_GROUP: + return SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_CHILDS_PER_SCHEDULER_GROUP; + + case lemming::dataplane::sai::SWITCH_ATTR_TOTAL_BUFFER_SIZE: + return SAI_SWITCH_ATTR_TOTAL_BUFFER_SIZE; + + case lemming::dataplane::sai::SWITCH_ATTR_INGRESS_BUFFER_POOL_NUM: + return SAI_SWITCH_ATTR_INGRESS_BUFFER_POOL_NUM; + + case lemming::dataplane::sai::SWITCH_ATTR_EGRESS_BUFFER_POOL_NUM: + return SAI_SWITCH_ATTR_EGRESS_BUFFER_POOL_NUM; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY; + + case lemming::dataplane::sai:: + SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_FDB_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_L2MC_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_L2MC_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_IPMC_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_IPMC_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_SNAT_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_DNAT_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_ACL_TABLE: + return SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP: + return SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_MY_SID_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_MY_SID_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_DEFAULT_TRAP_GROUP: + return SAI_SWITCH_ATTR_DEFAULT_TRAP_GROUP; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_HASH: + return SAI_SWITCH_ATTR_ECMP_HASH; + + case lemming::dataplane::sai::SWITCH_ATTR_LAG_HASH: + return SAI_SWITCH_ATTR_LAG_HASH; + + case lemming::dataplane::sai::SWITCH_ATTR_RESTART_WARM: + return SAI_SWITCH_ATTR_RESTART_WARM; + + case lemming::dataplane::sai::SWITCH_ATTR_WARM_RECOVER: + return SAI_SWITCH_ATTR_WARM_RECOVER; + + case lemming::dataplane::sai::SWITCH_ATTR_RESTART_TYPE: + return SAI_SWITCH_ATTR_RESTART_TYPE; + + case lemming::dataplane::sai::SWITCH_ATTR_MIN_PLANNED_RESTART_INTERVAL: + return SAI_SWITCH_ATTR_MIN_PLANNED_RESTART_INTERVAL; + + case lemming::dataplane::sai::SWITCH_ATTR_NV_STORAGE_SIZE: + return SAI_SWITCH_ATTR_NV_STORAGE_SIZE; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_ACL_ACTION_COUNT: + return SAI_SWITCH_ATTR_MAX_ACL_ACTION_COUNT; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_ACL_RANGE_COUNT: + return SAI_SWITCH_ATTR_MAX_ACL_RANGE_COUNT; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_CAPABILITY: + return SAI_SWITCH_ATTR_ACL_CAPABILITY; + + case lemming::dataplane::sai::SWITCH_ATTR_MCAST_SNOOPING_CAPABILITY: + return SAI_SWITCH_ATTR_MCAST_SNOOPING_CAPABILITY; + + case lemming::dataplane::sai::SWITCH_ATTR_SWITCHING_MODE: + return SAI_SWITCH_ATTR_SWITCHING_MODE; + + case lemming::dataplane::sai::SWITCH_ATTR_BCAST_CPU_FLOOD_ENABLE: + return SAI_SWITCH_ATTR_BCAST_CPU_FLOOD_ENABLE; + + case lemming::dataplane::sai::SWITCH_ATTR_MCAST_CPU_FLOOD_ENABLE: + return SAI_SWITCH_ATTR_MCAST_CPU_FLOOD_ENABLE; + + case lemming::dataplane::sai::SWITCH_ATTR_SRC_MAC_ADDRESS: + return SAI_SWITCH_ATTR_SRC_MAC_ADDRESS; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_LEARNED_ADDRESSES: + return SAI_SWITCH_ATTR_MAX_LEARNED_ADDRESSES; + + case lemming::dataplane::sai::SWITCH_ATTR_FDB_AGING_TIME: + return SAI_SWITCH_ATTR_FDB_AGING_TIME; + + case lemming::dataplane::sai::SWITCH_ATTR_FDB_UNICAST_MISS_PACKET_ACTION: + return SAI_SWITCH_ATTR_FDB_UNICAST_MISS_PACKET_ACTION; + + case lemming::dataplane::sai::SWITCH_ATTR_FDB_BROADCAST_MISS_PACKET_ACTION: + return SAI_SWITCH_ATTR_FDB_BROADCAST_MISS_PACKET_ACTION; + + case lemming::dataplane::sai::SWITCH_ATTR_FDB_MULTICAST_MISS_PACKET_ACTION: + return SAI_SWITCH_ATTR_FDB_MULTICAST_MISS_PACKET_ACTION; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_DEFAULT_HASH_ALGORITHM: + return SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_ALGORITHM; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_DEFAULT_HASH_SEED: + return SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_SEED; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET: + return SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_DEFAULT_SYMMETRIC_HASH: + return SAI_SWITCH_ATTR_ECMP_DEFAULT_SYMMETRIC_HASH; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_HASH_IPV4: + return SAI_SWITCH_ATTR_ECMP_HASH_IPV4; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_HASH_IPV4_IN_IPV4: + return SAI_SWITCH_ATTR_ECMP_HASH_IPV4_IN_IPV4; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_HASH_IPV6: + return SAI_SWITCH_ATTR_ECMP_HASH_IPV6; + + case lemming::dataplane::sai::SWITCH_ATTR_LAG_DEFAULT_HASH_ALGORITHM: + return SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_ALGORITHM; + + case lemming::dataplane::sai::SWITCH_ATTR_LAG_DEFAULT_HASH_SEED: + return SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_SEED; + + case lemming::dataplane::sai::SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET: + return SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET; + + case lemming::dataplane::sai::SWITCH_ATTR_LAG_DEFAULT_SYMMETRIC_HASH: + return SAI_SWITCH_ATTR_LAG_DEFAULT_SYMMETRIC_HASH; + + case lemming::dataplane::sai::SWITCH_ATTR_LAG_HASH_IPV4: + return SAI_SWITCH_ATTR_LAG_HASH_IPV4; + + case lemming::dataplane::sai::SWITCH_ATTR_LAG_HASH_IPV4_IN_IPV4: + return SAI_SWITCH_ATTR_LAG_HASH_IPV4_IN_IPV4; + + case lemming::dataplane::sai::SWITCH_ATTR_LAG_HASH_IPV6: + return SAI_SWITCH_ATTR_LAG_HASH_IPV6; + + case lemming::dataplane::sai::SWITCH_ATTR_COUNTER_REFRESH_INTERVAL: + return SAI_SWITCH_ATTR_COUNTER_REFRESH_INTERVAL; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_DEFAULT_TC: + return SAI_SWITCH_ATTR_QOS_DEFAULT_TC; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_DOT1P_TO_TC_MAP: + return SAI_SWITCH_ATTR_QOS_DOT1P_TO_TC_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_DOT1P_TO_COLOR_MAP: + return SAI_SWITCH_ATTR_QOS_DOT1P_TO_COLOR_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_DSCP_TO_TC_MAP: + return SAI_SWITCH_ATTR_QOS_DSCP_TO_TC_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_DSCP_TO_COLOR_MAP: + return SAI_SWITCH_ATTR_QOS_DSCP_TO_COLOR_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_TC_TO_QUEUE_MAP: + return SAI_SWITCH_ATTR_QOS_TC_TO_QUEUE_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_TC_AND_COLOR_TO_DOT1P_MAP: + return SAI_SWITCH_ATTR_QOS_TC_AND_COLOR_TO_DOT1P_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_TC_AND_COLOR_TO_DSCP_MAP: + return SAI_SWITCH_ATTR_QOS_TC_AND_COLOR_TO_DSCP_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_SWITCH_SHELL_ENABLE: + return SAI_SWITCH_ATTR_SWITCH_SHELL_ENABLE; + + case lemming::dataplane::sai::SWITCH_ATTR_SWITCH_PROFILE_ID: + return SAI_SWITCH_ATTR_SWITCH_PROFILE_ID; + + case lemming::dataplane::sai::SWITCH_ATTR_SWITCH_HARDWARE_INFO: + return SAI_SWITCH_ATTR_SWITCH_HARDWARE_INFO; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_PATH_NAME: + return SAI_SWITCH_ATTR_FIRMWARE_PATH_NAME; + + case lemming::dataplane::sai::SWITCH_ATTR_INIT_SWITCH: + return SAI_SWITCH_ATTR_INIT_SWITCH; + + case lemming::dataplane::sai::SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY: + return SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_SWITCH_SHUTDOWN_REQUEST_NOTIFY: + return SAI_SWITCH_ATTR_SWITCH_SHUTDOWN_REQUEST_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_FDB_EVENT_NOTIFY: + return SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY: + return SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_PACKET_EVENT_NOTIFY: + return SAI_SWITCH_ATTR_PACKET_EVENT_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_FAST_API_ENABLE: + return SAI_SWITCH_ATTR_FAST_API_ENABLE; + + case lemming::dataplane::sai::SWITCH_ATTR_MIRROR_TC: + return SAI_SWITCH_ATTR_MIRROR_TC; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_STAGE_INGRESS: + return SAI_SWITCH_ATTR_ACL_STAGE_INGRESS; + + case lemming::dataplane::sai::SWITCH_ATTR_ACL_STAGE_EGRESS: + return SAI_SWITCH_ATTR_ACL_STAGE_EGRESS; + + case lemming::dataplane::sai::SWITCH_ATTR_SRV6_MAX_SID_DEPTH: + return SAI_SWITCH_ATTR_SRV6_MAX_SID_DEPTH; + + case lemming::dataplane::sai::SWITCH_ATTR_SRV6_TLV_TYPE: + return SAI_SWITCH_ATTR_SRV6_TLV_TYPE; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_NUM_LOSSLESS_QUEUES: + return SAI_SWITCH_ATTR_QOS_NUM_LOSSLESS_QUEUES; + + case lemming::dataplane::sai::SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY: + return SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_PFC_DLR_PACKET_ACTION: + return SAI_SWITCH_ATTR_PFC_DLR_PACKET_ACTION; + + case lemming::dataplane::sai::SWITCH_ATTR_PFC_TC_DLD_INTERVAL_RANGE: + return SAI_SWITCH_ATTR_PFC_TC_DLD_INTERVAL_RANGE; + + case lemming::dataplane::sai::SWITCH_ATTR_PFC_TC_DLD_INTERVAL: + return SAI_SWITCH_ATTR_PFC_TC_DLD_INTERVAL; + + case lemming::dataplane::sai::SWITCH_ATTR_PFC_TC_DLR_INTERVAL_RANGE: + return SAI_SWITCH_ATTR_PFC_TC_DLR_INTERVAL_RANGE; + + case lemming::dataplane::sai::SWITCH_ATTR_PFC_TC_DLR_INTERVAL: + return SAI_SWITCH_ATTR_PFC_TC_DLR_INTERVAL; + + case lemming::dataplane::sai::SWITCH_ATTR_SUPPORTED_PROTECTED_OBJECT_TYPE: + return SAI_SWITCH_ATTR_SUPPORTED_PROTECTED_OBJECT_TYPE; + + case lemming::dataplane::sai::SWITCH_ATTR_TPID_OUTER_VLAN: + return SAI_SWITCH_ATTR_TPID_OUTER_VLAN; + + case lemming::dataplane::sai::SWITCH_ATTR_TPID_INNER_VLAN: + return SAI_SWITCH_ATTR_TPID_INNER_VLAN; + + case lemming::dataplane::sai::SWITCH_ATTR_CRC_CHECK_ENABLE: + return SAI_SWITCH_ATTR_CRC_CHECK_ENABLE; + + case lemming::dataplane::sai::SWITCH_ATTR_CRC_RECALCULATION_ENABLE: + return SAI_SWITCH_ATTR_CRC_RECALCULATION_ENABLE; + + case lemming::dataplane::sai::SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY: + return SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_BFD_SESSION: + return SAI_SWITCH_ATTR_NUMBER_OF_BFD_SESSION; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_BFD_SESSION: + return SAI_SWITCH_ATTR_MAX_BFD_SESSION; + + case lemming::dataplane::sai:: + SWITCH_ATTR_SUPPORTED_IPV4_BFD_SESSION_OFFLOAD_TYPE: + return SAI_SWITCH_ATTR_SUPPORTED_IPV4_BFD_SESSION_OFFLOAD_TYPE; + + case lemming::dataplane::sai:: + SWITCH_ATTR_SUPPORTED_IPV6_BFD_SESSION_OFFLOAD_TYPE: + return SAI_SWITCH_ATTR_SUPPORTED_IPV6_BFD_SESSION_OFFLOAD_TYPE; + + case lemming::dataplane::sai::SWITCH_ATTR_MIN_BFD_RX: + return SAI_SWITCH_ATTR_MIN_BFD_RX; + + case lemming::dataplane::sai::SWITCH_ATTR_MIN_BFD_TX: + return SAI_SWITCH_ATTR_MIN_BFD_TX; + + case lemming::dataplane::sai::SWITCH_ATTR_ECN_ECT_THRESHOLD_ENABLE: + return SAI_SWITCH_ATTR_ECN_ECT_THRESHOLD_ENABLE; + + case lemming::dataplane::sai::SWITCH_ATTR_VXLAN_DEFAULT_ROUTER_MAC: + return SAI_SWITCH_ATTR_VXLAN_DEFAULT_ROUTER_MAC; + + case lemming::dataplane::sai::SWITCH_ATTR_VXLAN_DEFAULT_PORT: + return SAI_SWITCH_ATTR_VXLAN_DEFAULT_PORT; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_MIRROR_SESSION: + return SAI_SWITCH_ATTR_MAX_MIRROR_SESSION; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_SAMPLED_MIRROR_SESSION: + return SAI_SWITCH_ATTR_MAX_SAMPLED_MIRROR_SESSION; + + case lemming::dataplane::sai::SWITCH_ATTR_SUPPORTED_EXTENDED_STATS_MODE: + return SAI_SWITCH_ATTR_SUPPORTED_EXTENDED_STATS_MODE; + + case lemming::dataplane::sai::SWITCH_ATTR_UNINIT_DATA_PLANE_ON_REMOVAL: + return SAI_SWITCH_ATTR_UNINIT_DATA_PLANE_ON_REMOVAL; + + case lemming::dataplane::sai::SWITCH_ATTR_TAM_OBJECT_ID: + return SAI_SWITCH_ATTR_TAM_OBJECT_ID; + + case lemming::dataplane::sai::SWITCH_ATTR_TAM_EVENT_NOTIFY: + return SAI_SWITCH_ATTR_TAM_EVENT_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST: + return SAI_SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST; + + case lemming::dataplane::sai::SWITCH_ATTR_PRE_SHUTDOWN: + return SAI_SWITCH_ATTR_PRE_SHUTDOWN; + + case lemming::dataplane::sai::SWITCH_ATTR_NAT_ZONE_COUNTER_OBJECT_ID: + return SAI_SWITCH_ATTR_NAT_ZONE_COUNTER_OBJECT_ID; + + case lemming::dataplane::sai::SWITCH_ATTR_NAT_ENABLE: + return SAI_SWITCH_ATTR_NAT_ENABLE; + + case lemming::dataplane::sai::SWITCH_ATTR_HARDWARE_ACCESS_BUS: + return SAI_SWITCH_ATTR_HARDWARE_ACCESS_BUS; + + case lemming::dataplane::sai::SWITCH_ATTR_PLATFROM_CONTEXT: + return SAI_SWITCH_ATTR_PLATFROM_CONTEXT; + + case lemming::dataplane::sai::SWITCH_ATTR_REGISTER_READ: + return SAI_SWITCH_ATTR_REGISTER_READ; + + case lemming::dataplane::sai::SWITCH_ATTR_REGISTER_WRITE: + return SAI_SWITCH_ATTR_REGISTER_WRITE; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_DOWNLOAD_BROADCAST: + return SAI_SWITCH_ATTR_FIRMWARE_DOWNLOAD_BROADCAST; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_LOAD_METHOD: + return SAI_SWITCH_ATTR_FIRMWARE_LOAD_METHOD; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_LOAD_TYPE: + return SAI_SWITCH_ATTR_FIRMWARE_LOAD_TYPE; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_DOWNLOAD_EXECUTE: + return SAI_SWITCH_ATTR_FIRMWARE_DOWNLOAD_EXECUTE; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_BROADCAST_STOP: + return SAI_SWITCH_ATTR_FIRMWARE_BROADCAST_STOP; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_VERIFY_AND_INIT_SWITCH: + return SAI_SWITCH_ATTR_FIRMWARE_VERIFY_AND_INIT_SWITCH; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_STATUS: + return SAI_SWITCH_ATTR_FIRMWARE_STATUS; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_MAJOR_VERSION: + return SAI_SWITCH_ATTR_FIRMWARE_MAJOR_VERSION; + + case lemming::dataplane::sai::SWITCH_ATTR_FIRMWARE_MINOR_VERSION: + return SAI_SWITCH_ATTR_FIRMWARE_MINOR_VERSION; + + case lemming::dataplane::sai::SWITCH_ATTR_PORT_CONNECTOR_LIST: + return SAI_SWITCH_ATTR_PORT_CONNECTOR_LIST; + + case lemming::dataplane::sai:: + SWITCH_ATTR_PROPOGATE_PORT_STATE_FROM_LINE_TO_SYSTEM_PORT_SUPPORT: + return SAI_SWITCH_ATTR_PROPOGATE_PORT_STATE_FROM_LINE_TO_SYSTEM_PORT_SUPPORT; + + case lemming::dataplane::sai::SWITCH_ATTR_TYPE: + return SAI_SWITCH_ATTR_TYPE; + + case lemming::dataplane::sai::SWITCH_ATTR_MACSEC_OBJECT_LIST: + return SAI_SWITCH_ATTR_MACSEC_OBJECT_LIST; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_MPLS_EXP_TO_TC_MAP: + return SAI_SWITCH_ATTR_QOS_MPLS_EXP_TO_TC_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_MPLS_EXP_TO_COLOR_MAP: + return SAI_SWITCH_ATTR_QOS_MPLS_EXP_TO_COLOR_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP: + return SAI_SWITCH_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_SWITCH_ID: + return SAI_SWITCH_ATTR_SWITCH_ID; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_SYSTEM_CORES: + return SAI_SWITCH_ATTR_MAX_SYSTEM_CORES; + + case lemming::dataplane::sai::SWITCH_ATTR_SYSTEM_PORT_CONFIG_LIST: + return SAI_SWITCH_ATTR_SYSTEM_PORT_CONFIG_LIST; + + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_SYSTEM_PORTS: + return SAI_SWITCH_ATTR_NUMBER_OF_SYSTEM_PORTS; + + case lemming::dataplane::sai::SWITCH_ATTR_SYSTEM_PORT_LIST: + return SAI_SWITCH_ATTR_SYSTEM_PORT_LIST; + + case lemming::dataplane::sai::SWITCH_ATTR_NUMBER_OF_FABRIC_PORTS: + return SAI_SWITCH_ATTR_NUMBER_OF_FABRIC_PORTS; + + case lemming::dataplane::sai::SWITCH_ATTR_FABRIC_PORT_LIST: + return SAI_SWITCH_ATTR_FABRIC_PORT_LIST; + + case lemming::dataplane::sai::SWITCH_ATTR_PACKET_DMA_MEMORY_POOL_SIZE: + return SAI_SWITCH_ATTR_PACKET_DMA_MEMORY_POOL_SIZE; + + case lemming::dataplane::sai::SWITCH_ATTR_FAILOVER_CONFIG_MODE: + return SAI_SWITCH_ATTR_FAILOVER_CONFIG_MODE; + + case lemming::dataplane::sai::SWITCH_ATTR_SUPPORTED_FAILOVER_MODE: + return SAI_SWITCH_ATTR_SUPPORTED_FAILOVER_MODE; + + case lemming::dataplane::sai::SWITCH_ATTR_TUNNEL_OBJECTS_LIST: + return SAI_SWITCH_ATTR_TUNNEL_OBJECTS_LIST; + + case lemming::dataplane::sai:: + SWITCH_ATTR_PACKET_AVAILABLE_DMA_MEMORY_POOL_SIZE: + return SAI_SWITCH_ATTR_PACKET_AVAILABLE_DMA_MEMORY_POOL_SIZE; + + case lemming::dataplane::sai::SWITCH_ATTR_PRE_INGRESS_ACL: + return SAI_SWITCH_ATTR_PRE_INGRESS_ACL; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_SNAPT_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_SNAPT_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_DNAPT_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_DNAPT_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_DOUBLE_NAPT_ENTRY: + return SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAPT_ENTRY; + + case lemming::dataplane::sai::SWITCH_ATTR_SLAVE_MDIO_ADDR_LIST: + return SAI_SWITCH_ATTR_SLAVE_MDIO_ADDR_LIST; + + case lemming::dataplane::sai::SWITCH_ATTR_MY_MAC_TABLE_MINIMUM_PRIORITY: + return SAI_SWITCH_ATTR_MY_MAC_TABLE_MINIMUM_PRIORITY; + + case lemming::dataplane::sai::SWITCH_ATTR_MY_MAC_TABLE_MAXIMUM_PRIORITY: + return SAI_SWITCH_ATTR_MY_MAC_TABLE_MAXIMUM_PRIORITY; + + case lemming::dataplane::sai::SWITCH_ATTR_MY_MAC_LIST: + return SAI_SWITCH_ATTR_MY_MAC_LIST; + + case lemming::dataplane::sai::SWITCH_ATTR_INSTALLED_MY_MAC_ENTRIES: + return SAI_SWITCH_ATTR_INSTALLED_MY_MAC_ENTRIES; + + case lemming::dataplane::sai::SWITCH_ATTR_AVAILABLE_MY_MAC_ENTRIES: + return SAI_SWITCH_ATTR_AVAILABLE_MY_MAC_ENTRIES; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_NUMBER_OF_FORWARDING_CLASSES: + return SAI_SWITCH_ATTR_MAX_NUMBER_OF_FORWARDING_CLASSES; + + case lemming::dataplane::sai::SWITCH_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP: + return SAI_SWITCH_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP; + + case lemming::dataplane::sai:: + SWITCH_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP: + return SAI_SWITCH_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP; + + case lemming::dataplane::sai::SWITCH_ATTR_IPSEC_OBJECT_ID: + return SAI_SWITCH_ATTR_IPSEC_OBJECT_ID; + + case lemming::dataplane::sai::SWITCH_ATTR_IPSEC_SA_TAG_TPID: + return SAI_SWITCH_ATTR_IPSEC_SA_TAG_TPID; + + case lemming::dataplane::sai::SWITCH_ATTR_IPSEC_SA_STATUS_CHANGE_NOTIFY: + return SAI_SWITCH_ATTR_IPSEC_SA_STATUS_CHANGE_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_NAT_EVENT_NOTIFY: + return SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY; + + case lemming::dataplane::sai::SWITCH_ATTR_MAX_ECMP_MEMBER_COUNT: + return SAI_SWITCH_ATTR_MAX_ECMP_MEMBER_COUNT; + + case lemming::dataplane::sai::SWITCH_ATTR_ECMP_MEMBER_COUNT: + return SAI_SWITCH_ATTR_ECMP_MEMBER_COUNT; + + default: + return SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS; + } +} + +google::protobuf::RepeatedField convert_list_sai_switch_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_switch_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchFailoverConfigMode +convert_sai_switch_failover_config_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_FAILOVER_CONFIG_MODE_NO_HITLESS: + return lemming::dataplane::sai::SWITCH_FAILOVER_CONFIG_MODE_NO_HITLESS; + + case SAI_SWITCH_FAILOVER_CONFIG_MODE_HITLESS: + return lemming::dataplane::sai::SWITCH_FAILOVER_CONFIG_MODE_HITLESS; + + default: + return lemming::dataplane::sai::SWITCH_FAILOVER_CONFIG_MODE_UNSPECIFIED; + } +} +sai_switch_failover_config_mode_t +convert_sai_switch_failover_config_mode_t_to_sai( + lemming::dataplane::sai::SwitchFailoverConfigMode val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_FAILOVER_CONFIG_MODE_NO_HITLESS: + return SAI_SWITCH_FAILOVER_CONFIG_MODE_NO_HITLESS; + + case lemming::dataplane::sai::SWITCH_FAILOVER_CONFIG_MODE_HITLESS: + return SAI_SWITCH_FAILOVER_CONFIG_MODE_HITLESS; + + default: + return SAI_SWITCH_FAILOVER_CONFIG_MODE_NO_HITLESS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_failover_config_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_switch_failover_config_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_failover_config_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_failover_config_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchFirmwareLoadMethod +convert_sai_switch_firmware_load_method_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_FIRMWARE_LOAD_METHOD_NONE: + return lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_METHOD_NONE; + + case SAI_SWITCH_FIRMWARE_LOAD_METHOD_INTERNAL: + return lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_METHOD_INTERNAL; + + case SAI_SWITCH_FIRMWARE_LOAD_METHOD_EEPROM: + return lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_METHOD_EEPROM; + + default: + return lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_METHOD_UNSPECIFIED; + } +} +sai_switch_firmware_load_method_t +convert_sai_switch_firmware_load_method_t_to_sai( + lemming::dataplane::sai::SwitchFirmwareLoadMethod val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_METHOD_NONE: + return SAI_SWITCH_FIRMWARE_LOAD_METHOD_NONE; + + case lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_METHOD_INTERNAL: + return SAI_SWITCH_FIRMWARE_LOAD_METHOD_INTERNAL; + + case lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_METHOD_EEPROM: + return SAI_SWITCH_FIRMWARE_LOAD_METHOD_EEPROM; + + default: + return SAI_SWITCH_FIRMWARE_LOAD_METHOD_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_firmware_load_method_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_switch_firmware_load_method_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_firmware_load_method_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_firmware_load_method_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchFirmwareLoadType +convert_sai_switch_firmware_load_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_FIRMWARE_LOAD_TYPE_SKIP: + return lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_TYPE_SKIP; + + case SAI_SWITCH_FIRMWARE_LOAD_TYPE_FORCE: + return lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_TYPE_FORCE; + + case SAI_SWITCH_FIRMWARE_LOAD_TYPE_AUTO: + return lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_TYPE_AUTO; + + default: + return lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_TYPE_UNSPECIFIED; + } +} +sai_switch_firmware_load_type_t convert_sai_switch_firmware_load_type_t_to_sai( + lemming::dataplane::sai::SwitchFirmwareLoadType val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_TYPE_SKIP: + return SAI_SWITCH_FIRMWARE_LOAD_TYPE_SKIP; + + case lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_TYPE_FORCE: + return SAI_SWITCH_FIRMWARE_LOAD_TYPE_FORCE; + + case lemming::dataplane::sai::SWITCH_FIRMWARE_LOAD_TYPE_AUTO: + return SAI_SWITCH_FIRMWARE_LOAD_TYPE_AUTO; + + default: + return SAI_SWITCH_FIRMWARE_LOAD_TYPE_SKIP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_firmware_load_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_switch_firmware_load_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_firmware_load_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_firmware_load_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchHardwareAccessBus +convert_sai_switch_hardware_access_bus_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_HARDWARE_ACCESS_BUS_MDIO: + return lemming::dataplane::sai::SWITCH_HARDWARE_ACCESS_BUS_MDIO; + + case SAI_SWITCH_HARDWARE_ACCESS_BUS_I2C: + return lemming::dataplane::sai::SWITCH_HARDWARE_ACCESS_BUS_I2C; + + case SAI_SWITCH_HARDWARE_ACCESS_BUS_CPLD: + return lemming::dataplane::sai::SWITCH_HARDWARE_ACCESS_BUS_CPLD; + + default: + return lemming::dataplane::sai::SWITCH_HARDWARE_ACCESS_BUS_UNSPECIFIED; + } +} +sai_switch_hardware_access_bus_t +convert_sai_switch_hardware_access_bus_t_to_sai( + lemming::dataplane::sai::SwitchHardwareAccessBus val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_HARDWARE_ACCESS_BUS_MDIO: + return SAI_SWITCH_HARDWARE_ACCESS_BUS_MDIO; + + case lemming::dataplane::sai::SWITCH_HARDWARE_ACCESS_BUS_I2C: + return SAI_SWITCH_HARDWARE_ACCESS_BUS_I2C; + + case lemming::dataplane::sai::SWITCH_HARDWARE_ACCESS_BUS_CPLD: + return SAI_SWITCH_HARDWARE_ACCESS_BUS_CPLD; + + default: + return SAI_SWITCH_HARDWARE_ACCESS_BUS_MDIO; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_hardware_access_bus_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_switch_hardware_access_bus_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_hardware_access_bus_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_hardware_access_bus_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchMcastSnoopingCapability +convert_sai_switch_mcast_snooping_capability_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_MCAST_SNOOPING_CAPABILITY_NONE: + return lemming::dataplane::sai::SWITCH_MCAST_SNOOPING_CAPABILITY_NONE; + + case SAI_SWITCH_MCAST_SNOOPING_CAPABILITY_XG: + return lemming::dataplane::sai::SWITCH_MCAST_SNOOPING_CAPABILITY_XG; + + case SAI_SWITCH_MCAST_SNOOPING_CAPABILITY_SG: + return lemming::dataplane::sai::SWITCH_MCAST_SNOOPING_CAPABILITY_SG; + + case SAI_SWITCH_MCAST_SNOOPING_CAPABILITY_XG_AND_SG: + return lemming::dataplane::sai:: + SWITCH_MCAST_SNOOPING_CAPABILITY_XG_AND_SG; + + default: + return lemming::dataplane::sai:: + SWITCH_MCAST_SNOOPING_CAPABILITY_UNSPECIFIED; + } +} +sai_switch_mcast_snooping_capability_t +convert_sai_switch_mcast_snooping_capability_t_to_sai( + lemming::dataplane::sai::SwitchMcastSnoopingCapability val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_MCAST_SNOOPING_CAPABILITY_NONE: + return SAI_SWITCH_MCAST_SNOOPING_CAPABILITY_NONE; + + case lemming::dataplane::sai::SWITCH_MCAST_SNOOPING_CAPABILITY_XG: + return SAI_SWITCH_MCAST_SNOOPING_CAPABILITY_XG; + + case lemming::dataplane::sai::SWITCH_MCAST_SNOOPING_CAPABILITY_SG: + return SAI_SWITCH_MCAST_SNOOPING_CAPABILITY_SG; + + case lemming::dataplane::sai::SWITCH_MCAST_SNOOPING_CAPABILITY_XG_AND_SG: + return SAI_SWITCH_MCAST_SNOOPING_CAPABILITY_XG_AND_SG; + + default: + return SAI_SWITCH_MCAST_SNOOPING_CAPABILITY_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_mcast_snooping_capability_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_switch_mcast_snooping_capability_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_mcast_snooping_capability_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_mcast_snooping_capability_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchOperStatus +convert_sai_switch_oper_status_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_OPER_STATUS_UNKNOWN: + return lemming::dataplane::sai::SWITCH_OPER_STATUS_UNKNOWN; + + case SAI_SWITCH_OPER_STATUS_UP: + return lemming::dataplane::sai::SWITCH_OPER_STATUS_UP; + + case SAI_SWITCH_OPER_STATUS_DOWN: + return lemming::dataplane::sai::SWITCH_OPER_STATUS_DOWN; + + case SAI_SWITCH_OPER_STATUS_FAILED: + return lemming::dataplane::sai::SWITCH_OPER_STATUS_FAILED; + + default: + return lemming::dataplane::sai::SWITCH_OPER_STATUS_UNSPECIFIED; + } +} +sai_switch_oper_status_t convert_sai_switch_oper_status_t_to_sai( + lemming::dataplane::sai::SwitchOperStatus val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_OPER_STATUS_UNKNOWN: + return SAI_SWITCH_OPER_STATUS_UNKNOWN; + + case lemming::dataplane::sai::SWITCH_OPER_STATUS_UP: + return SAI_SWITCH_OPER_STATUS_UP; + + case lemming::dataplane::sai::SWITCH_OPER_STATUS_DOWN: + return SAI_SWITCH_OPER_STATUS_DOWN; + + case lemming::dataplane::sai::SWITCH_OPER_STATUS_FAILED: + return SAI_SWITCH_OPER_STATUS_FAILED; + + default: + return SAI_SWITCH_OPER_STATUS_UNKNOWN; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_oper_status_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_switch_oper_status_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_oper_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_oper_status_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchRestartType +convert_sai_switch_restart_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_RESTART_TYPE_NONE: + return lemming::dataplane::sai::SWITCH_RESTART_TYPE_NONE; + + case SAI_SWITCH_RESTART_TYPE_PLANNED: + return lemming::dataplane::sai::SWITCH_RESTART_TYPE_PLANNED; + + case SAI_SWITCH_RESTART_TYPE_ANY: + return lemming::dataplane::sai::SWITCH_RESTART_TYPE_ANY; + + default: + return lemming::dataplane::sai::SWITCH_RESTART_TYPE_UNSPECIFIED; + } +} +sai_switch_restart_type_t convert_sai_switch_restart_type_t_to_sai( + lemming::dataplane::sai::SwitchRestartType val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_RESTART_TYPE_NONE: + return SAI_SWITCH_RESTART_TYPE_NONE; + + case lemming::dataplane::sai::SWITCH_RESTART_TYPE_PLANNED: + return SAI_SWITCH_RESTART_TYPE_PLANNED; + + case lemming::dataplane::sai::SWITCH_RESTART_TYPE_ANY: + return SAI_SWITCH_RESTART_TYPE_ANY; + + default: + return SAI_SWITCH_RESTART_TYPE_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_restart_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_switch_restart_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_restart_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_restart_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchStat convert_sai_switch_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_STAT_IN_DROP_REASON_RANGE_BASE: + return lemming::dataplane::sai::SWITCH_STAT_IN_DROP_REASON_RANGE_BASE; + + case SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS; + + case SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS; + + case SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS; + + case SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS; + + case SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS; + + case SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS; + + case SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS; + + case SAI_SWITCH_STAT_IN_DROP_REASON_RANGE_END: + return lemming::dataplane::sai::SWITCH_STAT_IN_DROP_REASON_RANGE_END; + + case SAI_SWITCH_STAT_OUT_DROP_REASON_RANGE_BASE: + return lemming::dataplane::sai::SWITCH_STAT_OUT_DROP_REASON_RANGE_BASE; + + case SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS; + + case SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS; + + case SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS; + + case SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS; + + case SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS; + + case SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS; + + case SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS: + return lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS; + + case SAI_SWITCH_STAT_OUT_DROP_REASON_RANGE_END: + return lemming::dataplane::sai::SWITCH_STAT_OUT_DROP_REASON_RANGE_END; + + case SAI_SWITCH_STAT_FABRIC_DROP_REASON_RANGE_BASE: + return lemming::dataplane::sai::SWITCH_STAT_FABRIC_DROP_REASON_RANGE_BASE; + + case SAI_SWITCH_STAT_REACHABILITY_DROP: + return lemming::dataplane::sai::SWITCH_STAT_REACHABILITY_DROP; + + case SAI_SWITCH_STAT_HIGHEST_QUEUE_CONGESTION_LEVEL: + return lemming::dataplane::sai:: + SWITCH_STAT_HIGHEST_QUEUE_CONGESTION_LEVEL; + + case SAI_SWITCH_STAT_GLOBAL_DROP: + return lemming::dataplane::sai::SWITCH_STAT_GLOBAL_DROP; + + case SAI_SWITCH_STAT_FABRIC_DROP_REASON_RANGE_END: + return lemming::dataplane::sai::SWITCH_STAT_FABRIC_DROP_REASON_RANGE_END; + + default: + return lemming::dataplane::sai::SWITCH_STAT_UNSPECIFIED; + } +} +sai_switch_stat_t convert_sai_switch_stat_t_to_sai( + lemming::dataplane::sai::SwitchStat val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_STAT_IN_DROP_REASON_RANGE_BASE: + return SAI_SWITCH_STAT_IN_DROP_REASON_RANGE_BASE; + + case lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS: + return SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS: + return SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS: + return SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS: + return SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS: + return SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS: + return SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS: + return SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS; + + case lemming::dataplane::sai::SWITCH_STAT_IN_DROP_REASON_RANGE_END: + return SAI_SWITCH_STAT_IN_DROP_REASON_RANGE_END; + + case lemming::dataplane::sai::SWITCH_STAT_OUT_DROP_REASON_RANGE_BASE: + return SAI_SWITCH_STAT_OUT_DROP_REASON_RANGE_BASE; + + case lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS: + return SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS: + return SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_2_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS: + return SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_3_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS: + return SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_4_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS: + return SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_5_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS: + return SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_6_DROPPED_PKTS; + + case lemming::dataplane::sai:: + SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS: + return SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_7_DROPPED_PKTS; + + case lemming::dataplane::sai::SWITCH_STAT_OUT_DROP_REASON_RANGE_END: + return SAI_SWITCH_STAT_OUT_DROP_REASON_RANGE_END; + + case lemming::dataplane::sai::SWITCH_STAT_FABRIC_DROP_REASON_RANGE_BASE: + return SAI_SWITCH_STAT_FABRIC_DROP_REASON_RANGE_BASE; + + case lemming::dataplane::sai::SWITCH_STAT_REACHABILITY_DROP: + return SAI_SWITCH_STAT_REACHABILITY_DROP; + + case lemming::dataplane::sai::SWITCH_STAT_HIGHEST_QUEUE_CONGESTION_LEVEL: + return SAI_SWITCH_STAT_HIGHEST_QUEUE_CONGESTION_LEVEL; + + case lemming::dataplane::sai::SWITCH_STAT_GLOBAL_DROP: + return SAI_SWITCH_STAT_GLOBAL_DROP; + + case lemming::dataplane::sai::SWITCH_STAT_FABRIC_DROP_REASON_RANGE_END: + return SAI_SWITCH_STAT_FABRIC_DROP_REASON_RANGE_END; + + default: + return SAI_SWITCH_STAT_IN_DROP_REASON_RANGE_BASE; + } +} + +google::protobuf::RepeatedField convert_list_sai_switch_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_switch_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchSwitchingMode +convert_sai_switch_switching_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_SWITCHING_MODE_CUT_THROUGH: + return lemming::dataplane::sai::SWITCH_SWITCHING_MODE_CUT_THROUGH; + + case SAI_SWITCH_SWITCHING_MODE_STORE_AND_FORWARD: + return lemming::dataplane::sai::SWITCH_SWITCHING_MODE_STORE_AND_FORWARD; + + default: + return lemming::dataplane::sai::SWITCH_SWITCHING_MODE_UNSPECIFIED; + } +} +sai_switch_switching_mode_t convert_sai_switch_switching_mode_t_to_sai( + lemming::dataplane::sai::SwitchSwitchingMode val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_SWITCHING_MODE_CUT_THROUGH: + return SAI_SWITCH_SWITCHING_MODE_CUT_THROUGH; + + case lemming::dataplane::sai::SWITCH_SWITCHING_MODE_STORE_AND_FORWARD: + return SAI_SWITCH_SWITCHING_MODE_STORE_AND_FORWARD; + + default: + return SAI_SWITCH_SWITCHING_MODE_CUT_THROUGH; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_switching_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_switch_switching_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_switching_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_switching_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchTunnelAttr +convert_sai_switch_tunnel_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_TUNNEL_ATTR_TUNNEL_TYPE: + return lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_TUNNEL_TYPE; + + case SAI_SWITCH_TUNNEL_ATTR_LOOPBACK_PACKET_ACTION: + return lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_LOOPBACK_PACKET_ACTION; + + case SAI_SWITCH_TUNNEL_ATTR_TUNNEL_ENCAP_ECN_MODE: + return lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_TUNNEL_ENCAP_ECN_MODE; + + case SAI_SWITCH_TUNNEL_ATTR_ENCAP_MAPPERS: + return lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_ENCAP_MAPPERS; + + case SAI_SWITCH_TUNNEL_ATTR_TUNNEL_DECAP_ECN_MODE: + return lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_TUNNEL_DECAP_ECN_MODE; + + case SAI_SWITCH_TUNNEL_ATTR_DECAP_MAPPERS: + return lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_DECAP_MAPPERS; + + case SAI_SWITCH_TUNNEL_ATTR_TUNNEL_VXLAN_UDP_SPORT_MODE: + return lemming::dataplane::sai:: + SWITCH_TUNNEL_ATTR_TUNNEL_VXLAN_UDP_SPORT_MODE; + + case SAI_SWITCH_TUNNEL_ATTR_VXLAN_UDP_SPORT: + return lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_VXLAN_UDP_SPORT; + + case SAI_SWITCH_TUNNEL_ATTR_VXLAN_UDP_SPORT_MASK: + return lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_VXLAN_UDP_SPORT_MASK; + + case SAI_SWITCH_TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP: + return lemming::dataplane::sai:: + SWITCH_TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP; + + case SAI_SWITCH_TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP: + return lemming::dataplane::sai:: + SWITCH_TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP; + + case SAI_SWITCH_TUNNEL_ATTR_DECAP_QOS_DSCP_TO_TC_MAP: + return lemming::dataplane::sai:: + SWITCH_TUNNEL_ATTR_DECAP_QOS_DSCP_TO_TC_MAP; + + case SAI_SWITCH_TUNNEL_ATTR_DECAP_QOS_TC_TO_PRIORITY_GROUP_MAP: + return lemming::dataplane::sai:: + SWITCH_TUNNEL_ATTR_DECAP_QOS_TC_TO_PRIORITY_GROUP_MAP; + + default: + return lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_UNSPECIFIED; + } +} +sai_switch_tunnel_attr_t convert_sai_switch_tunnel_attr_t_to_sai( + lemming::dataplane::sai::SwitchTunnelAttr val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_TUNNEL_TYPE: + return SAI_SWITCH_TUNNEL_ATTR_TUNNEL_TYPE; + + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_LOOPBACK_PACKET_ACTION: + return SAI_SWITCH_TUNNEL_ATTR_LOOPBACK_PACKET_ACTION; + + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_TUNNEL_ENCAP_ECN_MODE: + return SAI_SWITCH_TUNNEL_ATTR_TUNNEL_ENCAP_ECN_MODE; + + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_ENCAP_MAPPERS: + return SAI_SWITCH_TUNNEL_ATTR_ENCAP_MAPPERS; + + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_TUNNEL_DECAP_ECN_MODE: + return SAI_SWITCH_TUNNEL_ATTR_TUNNEL_DECAP_ECN_MODE; + + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_DECAP_MAPPERS: + return SAI_SWITCH_TUNNEL_ATTR_DECAP_MAPPERS; + + case lemming::dataplane::sai:: + SWITCH_TUNNEL_ATTR_TUNNEL_VXLAN_UDP_SPORT_MODE: + return SAI_SWITCH_TUNNEL_ATTR_TUNNEL_VXLAN_UDP_SPORT_MODE; + + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_VXLAN_UDP_SPORT: + return SAI_SWITCH_TUNNEL_ATTR_VXLAN_UDP_SPORT; + + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_VXLAN_UDP_SPORT_MASK: + return SAI_SWITCH_TUNNEL_ATTR_VXLAN_UDP_SPORT_MASK; + + case lemming::dataplane::sai:: + SWITCH_TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP: + return SAI_SWITCH_TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP; + + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP: + return SAI_SWITCH_TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP; + + case lemming::dataplane::sai::SWITCH_TUNNEL_ATTR_DECAP_QOS_DSCP_TO_TC_MAP: + return SAI_SWITCH_TUNNEL_ATTR_DECAP_QOS_DSCP_TO_TC_MAP; + + case lemming::dataplane::sai:: + SWITCH_TUNNEL_ATTR_DECAP_QOS_TC_TO_PRIORITY_GROUP_MAP: + return SAI_SWITCH_TUNNEL_ATTR_DECAP_QOS_TC_TO_PRIORITY_GROUP_MAP; + + default: + return SAI_SWITCH_TUNNEL_ATTR_TUNNEL_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_switch_tunnel_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_switch_tunnel_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_tunnel_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_tunnel_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SwitchType convert_sai_switch_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_SWITCH_TYPE_NPU: + return lemming::dataplane::sai::SWITCH_TYPE_NPU; + + case SAI_SWITCH_TYPE_PHY: + return lemming::dataplane::sai::SWITCH_TYPE_PHY; + + case SAI_SWITCH_TYPE_VOQ: + return lemming::dataplane::sai::SWITCH_TYPE_VOQ; + + case SAI_SWITCH_TYPE_FABRIC: + return lemming::dataplane::sai::SWITCH_TYPE_FABRIC; + + default: + return lemming::dataplane::sai::SWITCH_TYPE_UNSPECIFIED; + } +} +sai_switch_type_t convert_sai_switch_type_t_to_sai( + lemming::dataplane::sai::SwitchType val) { + switch (val) { + case lemming::dataplane::sai::SWITCH_TYPE_NPU: + return SAI_SWITCH_TYPE_NPU; + + case lemming::dataplane::sai::SWITCH_TYPE_PHY: + return SAI_SWITCH_TYPE_PHY; + + case lemming::dataplane::sai::SWITCH_TYPE_VOQ: + return SAI_SWITCH_TYPE_VOQ; + + case lemming::dataplane::sai::SWITCH_TYPE_FABRIC: + return SAI_SWITCH_TYPE_FABRIC; + + default: + return SAI_SWITCH_TYPE_NPU; + } +} + +google::protobuf::RepeatedField convert_list_sai_switch_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_switch_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_switch_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_switch_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SystemPortAttr convert_sai_system_port_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_SYSTEM_PORT_ATTR_TYPE: + return lemming::dataplane::sai::SYSTEM_PORT_ATTR_TYPE; + + case SAI_SYSTEM_PORT_ATTR_QOS_NUMBER_OF_VOQS: + return lemming::dataplane::sai::SYSTEM_PORT_ATTR_QOS_NUMBER_OF_VOQS; + + case SAI_SYSTEM_PORT_ATTR_QOS_VOQ_LIST: + return lemming::dataplane::sai::SYSTEM_PORT_ATTR_QOS_VOQ_LIST; + + case SAI_SYSTEM_PORT_ATTR_PORT: + return lemming::dataplane::sai::SYSTEM_PORT_ATTR_PORT; + + case SAI_SYSTEM_PORT_ATTR_ADMIN_STATE: + return lemming::dataplane::sai::SYSTEM_PORT_ATTR_ADMIN_STATE; + + case SAI_SYSTEM_PORT_ATTR_CONFIG_INFO: + return lemming::dataplane::sai::SYSTEM_PORT_ATTR_CONFIG_INFO; + + case SAI_SYSTEM_PORT_ATTR_QOS_TC_TO_QUEUE_MAP: + return lemming::dataplane::sai::SYSTEM_PORT_ATTR_QOS_TC_TO_QUEUE_MAP; + + default: + return lemming::dataplane::sai::SYSTEM_PORT_ATTR_UNSPECIFIED; + } +} +sai_system_port_attr_t convert_sai_system_port_attr_t_to_sai( + lemming::dataplane::sai::SystemPortAttr val) { + switch (val) { + case lemming::dataplane::sai::SYSTEM_PORT_ATTR_TYPE: + return SAI_SYSTEM_PORT_ATTR_TYPE; + + case lemming::dataplane::sai::SYSTEM_PORT_ATTR_QOS_NUMBER_OF_VOQS: + return SAI_SYSTEM_PORT_ATTR_QOS_NUMBER_OF_VOQS; + + case lemming::dataplane::sai::SYSTEM_PORT_ATTR_QOS_VOQ_LIST: + return SAI_SYSTEM_PORT_ATTR_QOS_VOQ_LIST; + + case lemming::dataplane::sai::SYSTEM_PORT_ATTR_PORT: + return SAI_SYSTEM_PORT_ATTR_PORT; + + case lemming::dataplane::sai::SYSTEM_PORT_ATTR_ADMIN_STATE: + return SAI_SYSTEM_PORT_ATTR_ADMIN_STATE; + + case lemming::dataplane::sai::SYSTEM_PORT_ATTR_CONFIG_INFO: + return SAI_SYSTEM_PORT_ATTR_CONFIG_INFO; + + case lemming::dataplane::sai::SYSTEM_PORT_ATTR_QOS_TC_TO_QUEUE_MAP: + return SAI_SYSTEM_PORT_ATTR_QOS_TC_TO_QUEUE_MAP; + + default: + return SAI_SYSTEM_PORT_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_system_port_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_system_port_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_system_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_system_port_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::SystemPortType convert_sai_system_port_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_SYSTEM_PORT_TYPE_LOCAL: + return lemming::dataplane::sai::SYSTEM_PORT_TYPE_LOCAL; + + case SAI_SYSTEM_PORT_TYPE_REMOTE: + return lemming::dataplane::sai::SYSTEM_PORT_TYPE_REMOTE; + + default: + return lemming::dataplane::sai::SYSTEM_PORT_TYPE_UNSPECIFIED; + } +} +sai_system_port_type_t convert_sai_system_port_type_t_to_sai( + lemming::dataplane::sai::SystemPortType val) { + switch (val) { + case lemming::dataplane::sai::SYSTEM_PORT_TYPE_LOCAL: + return SAI_SYSTEM_PORT_TYPE_LOCAL; + + case lemming::dataplane::sai::SYSTEM_PORT_TYPE_REMOTE: + return SAI_SYSTEM_PORT_TYPE_REMOTE; + + default: + return SAI_SYSTEM_PORT_TYPE_LOCAL; + } +} + +google::protobuf::RepeatedField +convert_list_sai_system_port_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_system_port_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_system_port_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_system_port_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TableBitmapClassificationEntryAction +convert_sai_table_bitmap_classification_entry_action_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_SET_METADATA: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_SET_METADATA; + + case SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_NOACTION: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_NOACTION; + + default: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_UNSPECIFIED; + } +} +sai_table_bitmap_classification_entry_action_t +convert_sai_table_bitmap_classification_entry_action_t_to_sai( + lemming::dataplane::sai::TableBitmapClassificationEntryAction val) { + switch (val) { + case lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_SET_METADATA: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_SET_METADATA; + + case lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_NOACTION: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_NOACTION; + + default: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ACTION_SET_METADATA; + } +} + +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_classification_entry_action_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_table_bitmap_classification_entry_action_t_to_proto( + list.list[i])); + } + return proto_list; +} +void convert_list_sai_table_bitmap_classification_entry_action_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_table_bitmap_classification_entry_action_t_to_sai( + static_cast< + lemming::dataplane::sai::TableBitmapClassificationEntryAction>( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TableBitmapClassificationEntryAttr +convert_sai_table_bitmap_classification_entry_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_ACTION: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_ACTION; + + case SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_ROUTER_INTERFACE_KEY: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_ROUTER_INTERFACE_KEY; + + case SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_IS_DEFAULT: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_IS_DEFAULT; + + case SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_IN_RIF_METADATA: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_IN_RIF_METADATA; + + default: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_table_bitmap_classification_entry_attr_t +convert_sai_table_bitmap_classification_entry_attr_t_to_sai( + lemming::dataplane::sai::TableBitmapClassificationEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_ACTION: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_ACTION; + + case lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_ROUTER_INTERFACE_KEY: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_ROUTER_INTERFACE_KEY; + + case lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_IS_DEFAULT: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_IS_DEFAULT; + + case lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_IN_RIF_METADATA: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_IN_RIF_METADATA; + + default: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_ATTR_ACTION; + } +} + +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_classification_entry_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_table_bitmap_classification_entry_attr_t_to_proto( + list.list[i])); + } + return proto_list; +} +void convert_list_sai_table_bitmap_classification_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_table_bitmap_classification_entry_attr_t_to_sai( + static_cast< + lemming::dataplane::sai::TableBitmapClassificationEntryAttr>( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TableBitmapClassificationEntryStat +convert_sai_table_bitmap_classification_entry_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_HIT_PACKETS: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_HIT_PACKETS; + + case SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_HIT_OCTETS: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_HIT_OCTETS; + + default: + return lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_UNSPECIFIED; + } +} +sai_table_bitmap_classification_entry_stat_t +convert_sai_table_bitmap_classification_entry_stat_t_to_sai( + lemming::dataplane::sai::TableBitmapClassificationEntryStat val) { + switch (val) { + case lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_HIT_PACKETS: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_HIT_PACKETS; + + case lemming::dataplane::sai:: + TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_HIT_OCTETS: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_HIT_OCTETS; + + default: + return SAI_TABLE_BITMAP_CLASSIFICATION_ENTRY_STAT_HIT_PACKETS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_classification_entry_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_table_bitmap_classification_entry_stat_t_to_proto( + list.list[i])); + } + return proto_list; +} +void convert_list_sai_table_bitmap_classification_entry_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_table_bitmap_classification_entry_stat_t_to_sai( + static_cast< + lemming::dataplane::sai::TableBitmapClassificationEntryStat>( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TableBitmapRouterEntryAction +convert_sai_table_bitmap_router_entry_action_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_NEXTHOP: + return lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_NEXTHOP; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_LOCAL: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_LOCAL; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_CPU: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_CPU; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_DROP: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ACTION_DROP; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_NOACTION: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ACTION_NOACTION; + + default: + return lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ACTION_UNSPECIFIED; + } +} +sai_table_bitmap_router_entry_action_t +convert_sai_table_bitmap_router_entry_action_t_to_sai( + lemming::dataplane::sai::TableBitmapRouterEntryAction val) { + switch (val) { + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_NEXTHOP: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_NEXTHOP; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_LOCAL: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_LOCAL; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_CPU: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_CPU; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ACTION_DROP: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_DROP; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ACTION_NOACTION: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_NOACTION; + + default: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_NEXTHOP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_router_entry_action_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_table_bitmap_router_entry_action_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_table_bitmap_router_entry_action_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_table_bitmap_router_entry_action_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TableBitmapRouterEntryAttr +convert_sai_table_bitmap_router_entry_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_ACTION: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_ACTION; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_PRIORITY: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_PRIORITY; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_IN_RIF_METADATA_KEY: + return lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ATTR_IN_RIF_METADATA_KEY; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_IN_RIF_METADATA_MASK: + return lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ATTR_IN_RIF_METADATA_MASK; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_DST_IP_KEY: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_DST_IP_KEY; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_TUNNEL_INDEX: + return lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ATTR_TUNNEL_INDEX; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_NEXT_HOP: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_NEXT_HOP; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_ROUTER_INTERFACE: + return lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ATTR_ROUTER_INTERFACE; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_TRAP_ID: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_TRAP_ID; + + default: + return lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_table_bitmap_router_entry_attr_t +convert_sai_table_bitmap_router_entry_attr_t_to_sai( + lemming::dataplane::sai::TableBitmapRouterEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_ACTION: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_ACTION; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_PRIORITY: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_PRIORITY; + + case lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ATTR_IN_RIF_METADATA_KEY: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_IN_RIF_METADATA_KEY; + + case lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ATTR_IN_RIF_METADATA_MASK: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_IN_RIF_METADATA_MASK; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_DST_IP_KEY: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_DST_IP_KEY; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_TUNNEL_INDEX: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_TUNNEL_INDEX; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_NEXT_HOP: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_NEXT_HOP; + + case lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_ATTR_ROUTER_INTERFACE: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_ROUTER_INTERFACE; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_ATTR_TRAP_ID: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_TRAP_ID; + + default: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_ACTION; + } +} + +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_router_entry_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_table_bitmap_router_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_table_bitmap_router_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_table_bitmap_router_entry_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TableBitmapRouterEntryStat +convert_sai_table_bitmap_router_entry_stat_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TABLE_BITMAP_ROUTER_ENTRY_STAT_HIT_PACKETS: + return lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_STAT_HIT_PACKETS; + + case SAI_TABLE_BITMAP_ROUTER_ENTRY_STAT_HIT_OCTETS: + return lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_STAT_HIT_OCTETS; + + default: + return lemming::dataplane::sai:: + TABLE_BITMAP_ROUTER_ENTRY_STAT_UNSPECIFIED; + } +} +sai_table_bitmap_router_entry_stat_t +convert_sai_table_bitmap_router_entry_stat_t_to_sai( + lemming::dataplane::sai::TableBitmapRouterEntryStat val) { + switch (val) { + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_STAT_HIT_PACKETS: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_STAT_HIT_PACKETS; + + case lemming::dataplane::sai::TABLE_BITMAP_ROUTER_ENTRY_STAT_HIT_OCTETS: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_STAT_HIT_OCTETS; + + default: + return SAI_TABLE_BITMAP_ROUTER_ENTRY_STAT_HIT_PACKETS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_router_entry_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_table_bitmap_router_entry_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_table_bitmap_router_entry_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_table_bitmap_router_entry_stat_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TableMetaTunnelEntryAction +convert_sai_table_meta_tunnel_entry_action_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TABLE_META_TUNNEL_ENTRY_ACTION_TUNNEL_ENCAP: + return lemming::dataplane::sai:: + TABLE_META_TUNNEL_ENTRY_ACTION_TUNNEL_ENCAP; + + case SAI_TABLE_META_TUNNEL_ENTRY_ACTION_NOACTION: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ACTION_NOACTION; + + default: + return lemming::dataplane::sai:: + TABLE_META_TUNNEL_ENTRY_ACTION_UNSPECIFIED; + } +} +sai_table_meta_tunnel_entry_action_t +convert_sai_table_meta_tunnel_entry_action_t_to_sai( + lemming::dataplane::sai::TableMetaTunnelEntryAction val) { + switch (val) { + case lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ACTION_TUNNEL_ENCAP: + return SAI_TABLE_META_TUNNEL_ENTRY_ACTION_TUNNEL_ENCAP; + + case lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ACTION_NOACTION: + return SAI_TABLE_META_TUNNEL_ENTRY_ACTION_NOACTION; + + default: + return SAI_TABLE_META_TUNNEL_ENTRY_ACTION_TUNNEL_ENCAP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_table_meta_tunnel_entry_action_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_table_meta_tunnel_entry_action_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_table_meta_tunnel_entry_action_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_table_meta_tunnel_entry_action_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TableMetaTunnelEntryAttr +convert_sai_table_meta_tunnel_entry_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TABLE_META_TUNNEL_ENTRY_ATTR_ACTION: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_ACTION; + + case SAI_TABLE_META_TUNNEL_ENTRY_ATTR_METADATA_KEY: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_METADATA_KEY; + + case SAI_TABLE_META_TUNNEL_ENTRY_ATTR_IS_DEFAULT: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_IS_DEFAULT; + + case SAI_TABLE_META_TUNNEL_ENTRY_ATTR_TUNNEL_ID: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_TUNNEL_ID; + + case SAI_TABLE_META_TUNNEL_ENTRY_ATTR_UNDERLAY_DIP: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_UNDERLAY_DIP; + + default: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_table_meta_tunnel_entry_attr_t +convert_sai_table_meta_tunnel_entry_attr_t_to_sai( + lemming::dataplane::sai::TableMetaTunnelEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_ACTION: + return SAI_TABLE_META_TUNNEL_ENTRY_ATTR_ACTION; + + case lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_METADATA_KEY: + return SAI_TABLE_META_TUNNEL_ENTRY_ATTR_METADATA_KEY; + + case lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_IS_DEFAULT: + return SAI_TABLE_META_TUNNEL_ENTRY_ATTR_IS_DEFAULT; + + case lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_TUNNEL_ID: + return SAI_TABLE_META_TUNNEL_ENTRY_ATTR_TUNNEL_ID; + + case lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_ATTR_UNDERLAY_DIP: + return SAI_TABLE_META_TUNNEL_ENTRY_ATTR_UNDERLAY_DIP; + + default: + return SAI_TABLE_META_TUNNEL_ENTRY_ATTR_ACTION; + } +} + +google::protobuf::RepeatedField +convert_list_sai_table_meta_tunnel_entry_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_table_meta_tunnel_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_table_meta_tunnel_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_table_meta_tunnel_entry_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TableMetaTunnelEntryStat +convert_sai_table_meta_tunnel_entry_stat_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TABLE_META_TUNNEL_ENTRY_STAT_HIT_PACKETS: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_STAT_HIT_PACKETS; + + case SAI_TABLE_META_TUNNEL_ENTRY_STAT_HIT_OCTETS: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_STAT_HIT_OCTETS; + + default: + return lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_STAT_UNSPECIFIED; + } +} +sai_table_meta_tunnel_entry_stat_t +convert_sai_table_meta_tunnel_entry_stat_t_to_sai( + lemming::dataplane::sai::TableMetaTunnelEntryStat val) { + switch (val) { + case lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_STAT_HIT_PACKETS: + return SAI_TABLE_META_TUNNEL_ENTRY_STAT_HIT_PACKETS; + + case lemming::dataplane::sai::TABLE_META_TUNNEL_ENTRY_STAT_HIT_OCTETS: + return SAI_TABLE_META_TUNNEL_ENTRY_STAT_HIT_OCTETS; + + default: + return SAI_TABLE_META_TUNNEL_ENTRY_STAT_HIT_PACKETS; + } +} + +google::protobuf::RepeatedField +convert_list_sai_table_meta_tunnel_entry_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_table_meta_tunnel_entry_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_table_meta_tunnel_entry_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_table_meta_tunnel_entry_stat_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamAttr convert_sai_tam_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TAM_ATTR_TELEMETRY_OBJECTS_LIST: + return lemming::dataplane::sai::TAM_ATTR_TELEMETRY_OBJECTS_LIST; + + case SAI_TAM_ATTR_EVENT_OBJECTS_LIST: + return lemming::dataplane::sai::TAM_ATTR_EVENT_OBJECTS_LIST; + + case SAI_TAM_ATTR_INT_OBJECTS_LIST: + return lemming::dataplane::sai::TAM_ATTR_INT_OBJECTS_LIST; + + case SAI_TAM_ATTR_TAM_BIND_POINT_TYPE_LIST: + return lemming::dataplane::sai::TAM_ATTR_TAM_BIND_POINT_TYPE_LIST; + + default: + return lemming::dataplane::sai::TAM_ATTR_UNSPECIFIED; + } +} +sai_tam_attr_t convert_sai_tam_attr_t_to_sai( + lemming::dataplane::sai::TamAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_ATTR_TELEMETRY_OBJECTS_LIST: + return SAI_TAM_ATTR_TELEMETRY_OBJECTS_LIST; + + case lemming::dataplane::sai::TAM_ATTR_EVENT_OBJECTS_LIST: + return SAI_TAM_ATTR_EVENT_OBJECTS_LIST; + + case lemming::dataplane::sai::TAM_ATTR_INT_OBJECTS_LIST: + return SAI_TAM_ATTR_INT_OBJECTS_LIST; + + case lemming::dataplane::sai::TAM_ATTR_TAM_BIND_POINT_TYPE_LIST: + return SAI_TAM_ATTR_TAM_BIND_POINT_TYPE_LIST; + + default: + return SAI_TAM_ATTR_TELEMETRY_OBJECTS_LIST; + } +} + +google::protobuf::RepeatedField convert_list_sai_tam_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamBindPointType +convert_sai_tam_bind_point_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_BIND_POINT_TYPE_QUEUE: + return lemming::dataplane::sai::TAM_BIND_POINT_TYPE_QUEUE; + + case SAI_TAM_BIND_POINT_TYPE_PORT: + return lemming::dataplane::sai::TAM_BIND_POINT_TYPE_PORT; + + case SAI_TAM_BIND_POINT_TYPE_LAG: + return lemming::dataplane::sai::TAM_BIND_POINT_TYPE_LAG; + + case SAI_TAM_BIND_POINT_TYPE_VLAN: + return lemming::dataplane::sai::TAM_BIND_POINT_TYPE_VLAN; + + case SAI_TAM_BIND_POINT_TYPE_SWITCH: + return lemming::dataplane::sai::TAM_BIND_POINT_TYPE_SWITCH; + + case SAI_TAM_BIND_POINT_TYPE_IPG: + return lemming::dataplane::sai::TAM_BIND_POINT_TYPE_IPG; + + case SAI_TAM_BIND_POINT_TYPE_BSP: + return lemming::dataplane::sai::TAM_BIND_POINT_TYPE_BSP; + + default: + return lemming::dataplane::sai::TAM_BIND_POINT_TYPE_UNSPECIFIED; + } +} +sai_tam_bind_point_type_t convert_sai_tam_bind_point_type_t_to_sai( + lemming::dataplane::sai::TamBindPointType val) { + switch (val) { + case lemming::dataplane::sai::TAM_BIND_POINT_TYPE_QUEUE: + return SAI_TAM_BIND_POINT_TYPE_QUEUE; + + case lemming::dataplane::sai::TAM_BIND_POINT_TYPE_PORT: + return SAI_TAM_BIND_POINT_TYPE_PORT; + + case lemming::dataplane::sai::TAM_BIND_POINT_TYPE_LAG: + return SAI_TAM_BIND_POINT_TYPE_LAG; + + case lemming::dataplane::sai::TAM_BIND_POINT_TYPE_VLAN: + return SAI_TAM_BIND_POINT_TYPE_VLAN; + + case lemming::dataplane::sai::TAM_BIND_POINT_TYPE_SWITCH: + return SAI_TAM_BIND_POINT_TYPE_SWITCH; + + case lemming::dataplane::sai::TAM_BIND_POINT_TYPE_IPG: + return SAI_TAM_BIND_POINT_TYPE_IPG; + + case lemming::dataplane::sai::TAM_BIND_POINT_TYPE_BSP: + return SAI_TAM_BIND_POINT_TYPE_BSP; + + default: + return SAI_TAM_BIND_POINT_TYPE_QUEUE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_bind_point_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_bind_point_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_bind_point_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_bind_point_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamCollectorAttr +convert_sai_tam_collector_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_COLLECTOR_ATTR_SRC_IP: + return lemming::dataplane::sai::TAM_COLLECTOR_ATTR_SRC_IP; + + case SAI_TAM_COLLECTOR_ATTR_DST_IP: + return lemming::dataplane::sai::TAM_COLLECTOR_ATTR_DST_IP; + + case SAI_TAM_COLLECTOR_ATTR_LOCALHOST: + return lemming::dataplane::sai::TAM_COLLECTOR_ATTR_LOCALHOST; + + case SAI_TAM_COLLECTOR_ATTR_VIRTUAL_ROUTER_ID: + return lemming::dataplane::sai::TAM_COLLECTOR_ATTR_VIRTUAL_ROUTER_ID; + + case SAI_TAM_COLLECTOR_ATTR_TRUNCATE_SIZE: + return lemming::dataplane::sai::TAM_COLLECTOR_ATTR_TRUNCATE_SIZE; + + case SAI_TAM_COLLECTOR_ATTR_TRANSPORT: + return lemming::dataplane::sai::TAM_COLLECTOR_ATTR_TRANSPORT; + + case SAI_TAM_COLLECTOR_ATTR_DSCP_VALUE: + return lemming::dataplane::sai::TAM_COLLECTOR_ATTR_DSCP_VALUE; + + default: + return lemming::dataplane::sai::TAM_COLLECTOR_ATTR_UNSPECIFIED; + } +} +sai_tam_collector_attr_t convert_sai_tam_collector_attr_t_to_sai( + lemming::dataplane::sai::TamCollectorAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_COLLECTOR_ATTR_SRC_IP: + return SAI_TAM_COLLECTOR_ATTR_SRC_IP; + + case lemming::dataplane::sai::TAM_COLLECTOR_ATTR_DST_IP: + return SAI_TAM_COLLECTOR_ATTR_DST_IP; + + case lemming::dataplane::sai::TAM_COLLECTOR_ATTR_LOCALHOST: + return SAI_TAM_COLLECTOR_ATTR_LOCALHOST; + + case lemming::dataplane::sai::TAM_COLLECTOR_ATTR_VIRTUAL_ROUTER_ID: + return SAI_TAM_COLLECTOR_ATTR_VIRTUAL_ROUTER_ID; + + case lemming::dataplane::sai::TAM_COLLECTOR_ATTR_TRUNCATE_SIZE: + return SAI_TAM_COLLECTOR_ATTR_TRUNCATE_SIZE; + + case lemming::dataplane::sai::TAM_COLLECTOR_ATTR_TRANSPORT: + return SAI_TAM_COLLECTOR_ATTR_TRANSPORT; + + case lemming::dataplane::sai::TAM_COLLECTOR_ATTR_DSCP_VALUE: + return SAI_TAM_COLLECTOR_ATTR_DSCP_VALUE; + + default: + return SAI_TAM_COLLECTOR_ATTR_SRC_IP; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_collector_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_collector_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_collector_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_collector_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamEventActionAttr +convert_sai_tam_event_action_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_EVENT_ACTION_ATTR_REPORT_TYPE: + return lemming::dataplane::sai::TAM_EVENT_ACTION_ATTR_REPORT_TYPE; + + case SAI_TAM_EVENT_ACTION_ATTR_QOS_ACTION_TYPE: + return lemming::dataplane::sai::TAM_EVENT_ACTION_ATTR_QOS_ACTION_TYPE; + + default: + return lemming::dataplane::sai::TAM_EVENT_ACTION_ATTR_UNSPECIFIED; + } +} +sai_tam_event_action_attr_t convert_sai_tam_event_action_attr_t_to_sai( + lemming::dataplane::sai::TamEventActionAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_EVENT_ACTION_ATTR_REPORT_TYPE: + return SAI_TAM_EVENT_ACTION_ATTR_REPORT_TYPE; + + case lemming::dataplane::sai::TAM_EVENT_ACTION_ATTR_QOS_ACTION_TYPE: + return SAI_TAM_EVENT_ACTION_ATTR_QOS_ACTION_TYPE; + + default: + return SAI_TAM_EVENT_ACTION_ATTR_REPORT_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_event_action_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_event_action_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_event_action_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_event_action_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamEventAttr convert_sai_tam_event_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TAM_EVENT_ATTR_TYPE: + return lemming::dataplane::sai::TAM_EVENT_ATTR_TYPE; + + case SAI_TAM_EVENT_ATTR_ACTION_LIST: + return lemming::dataplane::sai::TAM_EVENT_ATTR_ACTION_LIST; + + case SAI_TAM_EVENT_ATTR_COLLECTOR_LIST: + return lemming::dataplane::sai::TAM_EVENT_ATTR_COLLECTOR_LIST; + + case SAI_TAM_EVENT_ATTR_THRESHOLD: + return lemming::dataplane::sai::TAM_EVENT_ATTR_THRESHOLD; + + case SAI_TAM_EVENT_ATTR_DSCP_VALUE: + return lemming::dataplane::sai::TAM_EVENT_ATTR_DSCP_VALUE; + + default: + return lemming::dataplane::sai::TAM_EVENT_ATTR_UNSPECIFIED; + } +} +sai_tam_event_attr_t convert_sai_tam_event_attr_t_to_sai( + lemming::dataplane::sai::TamEventAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_EVENT_ATTR_TYPE: + return SAI_TAM_EVENT_ATTR_TYPE; + + case lemming::dataplane::sai::TAM_EVENT_ATTR_ACTION_LIST: + return SAI_TAM_EVENT_ATTR_ACTION_LIST; + + case lemming::dataplane::sai::TAM_EVENT_ATTR_COLLECTOR_LIST: + return SAI_TAM_EVENT_ATTR_COLLECTOR_LIST; + + case lemming::dataplane::sai::TAM_EVENT_ATTR_THRESHOLD: + return SAI_TAM_EVENT_ATTR_THRESHOLD; + + case lemming::dataplane::sai::TAM_EVENT_ATTR_DSCP_VALUE: + return SAI_TAM_EVENT_ATTR_DSCP_VALUE; + + default: + return SAI_TAM_EVENT_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_tam_event_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_event_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_event_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_event_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamEventThresholdAttr +convert_sai_tam_event_threshold_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_EVENT_THRESHOLD_ATTR_HIGH_WATERMARK: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_HIGH_WATERMARK; + + case SAI_TAM_EVENT_THRESHOLD_ATTR_LOW_WATERMARK: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_LOW_WATERMARK; + + case SAI_TAM_EVENT_THRESHOLD_ATTR_LATENCY: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_LATENCY; + + case SAI_TAM_EVENT_THRESHOLD_ATTR_RATE: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_RATE; + + case SAI_TAM_EVENT_THRESHOLD_ATTR_ABS_VALUE: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_ABS_VALUE; + + case SAI_TAM_EVENT_THRESHOLD_ATTR_UNIT: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_UNIT; + + default: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_UNSPECIFIED; + } +} +sai_tam_event_threshold_attr_t convert_sai_tam_event_threshold_attr_t_to_sai( + lemming::dataplane::sai::TamEventThresholdAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_HIGH_WATERMARK: + return SAI_TAM_EVENT_THRESHOLD_ATTR_HIGH_WATERMARK; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_LOW_WATERMARK: + return SAI_TAM_EVENT_THRESHOLD_ATTR_LOW_WATERMARK; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_LATENCY: + return SAI_TAM_EVENT_THRESHOLD_ATTR_LATENCY; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_RATE: + return SAI_TAM_EVENT_THRESHOLD_ATTR_RATE; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_ABS_VALUE: + return SAI_TAM_EVENT_THRESHOLD_ATTR_ABS_VALUE; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_ATTR_UNIT: + return SAI_TAM_EVENT_THRESHOLD_ATTR_UNIT; + + default: + return SAI_TAM_EVENT_THRESHOLD_ATTR_HIGH_WATERMARK; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_event_threshold_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_tam_event_threshold_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_event_threshold_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_event_threshold_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamEventThresholdUnit +convert_sai_tam_event_threshold_unit_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_EVENT_THRESHOLD_UNIT_NANOSEC: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_NANOSEC; + + case SAI_TAM_EVENT_THRESHOLD_UNIT_USEC: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_USEC; + + case SAI_TAM_EVENT_THRESHOLD_UNIT_MSEC: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_MSEC; + + case SAI_TAM_EVENT_THRESHOLD_UNIT_PERCENT: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_PERCENT; + + case SAI_TAM_EVENT_THRESHOLD_UNIT_BYTES: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_BYTES; + + case SAI_TAM_EVENT_THRESHOLD_UNIT_PACKETS: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_PACKETS; + + case SAI_TAM_EVENT_THRESHOLD_UNIT_CELLS: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_CELLS; + + default: + return lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_UNSPECIFIED; + } +} +sai_tam_event_threshold_unit_t convert_sai_tam_event_threshold_unit_t_to_sai( + lemming::dataplane::sai::TamEventThresholdUnit val) { + switch (val) { + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_NANOSEC: + return SAI_TAM_EVENT_THRESHOLD_UNIT_NANOSEC; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_USEC: + return SAI_TAM_EVENT_THRESHOLD_UNIT_USEC; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_MSEC: + return SAI_TAM_EVENT_THRESHOLD_UNIT_MSEC; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_PERCENT: + return SAI_TAM_EVENT_THRESHOLD_UNIT_PERCENT; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_BYTES: + return SAI_TAM_EVENT_THRESHOLD_UNIT_BYTES; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_PACKETS: + return SAI_TAM_EVENT_THRESHOLD_UNIT_PACKETS; + + case lemming::dataplane::sai::TAM_EVENT_THRESHOLD_UNIT_CELLS: + return SAI_TAM_EVENT_THRESHOLD_UNIT_CELLS; + + default: + return SAI_TAM_EVENT_THRESHOLD_UNIT_NANOSEC; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_event_threshold_unit_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_tam_event_threshold_unit_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_event_threshold_unit_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_event_threshold_unit_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamEventType convert_sai_tam_event_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TAM_EVENT_TYPE_FLOW_STATE: + return lemming::dataplane::sai::TAM_EVENT_TYPE_FLOW_STATE; + + case SAI_TAM_EVENT_TYPE_FLOW_WATCHLIST: + return lemming::dataplane::sai::TAM_EVENT_TYPE_FLOW_WATCHLIST; + + case SAI_TAM_EVENT_TYPE_FLOW_TCPFLAG: + return lemming::dataplane::sai::TAM_EVENT_TYPE_FLOW_TCPFLAG; + + case SAI_TAM_EVENT_TYPE_QUEUE_THRESHOLD: + return lemming::dataplane::sai::TAM_EVENT_TYPE_QUEUE_THRESHOLD; + + case SAI_TAM_EVENT_TYPE_QUEUE_TAIL_DROP: + return lemming::dataplane::sai::TAM_EVENT_TYPE_QUEUE_TAIL_DROP; + + case SAI_TAM_EVENT_TYPE_PACKET_DROP: + return lemming::dataplane::sai::TAM_EVENT_TYPE_PACKET_DROP; + + case SAI_TAM_EVENT_TYPE_RESOURCE_UTILIZATION: + return lemming::dataplane::sai::TAM_EVENT_TYPE_RESOURCE_UTILIZATION; + + case SAI_TAM_EVENT_TYPE_IPG_SHARED: + return lemming::dataplane::sai::TAM_EVENT_TYPE_IPG_SHARED; + + case SAI_TAM_EVENT_TYPE_IPG_XOFF_ROOM: + return lemming::dataplane::sai::TAM_EVENT_TYPE_IPG_XOFF_ROOM; + + case SAI_TAM_EVENT_TYPE_BSP: + return lemming::dataplane::sai::TAM_EVENT_TYPE_BSP; + + default: + return lemming::dataplane::sai::TAM_EVENT_TYPE_UNSPECIFIED; + } +} +sai_tam_event_type_t convert_sai_tam_event_type_t_to_sai( + lemming::dataplane::sai::TamEventType val) { + switch (val) { + case lemming::dataplane::sai::TAM_EVENT_TYPE_FLOW_STATE: + return SAI_TAM_EVENT_TYPE_FLOW_STATE; + + case lemming::dataplane::sai::TAM_EVENT_TYPE_FLOW_WATCHLIST: + return SAI_TAM_EVENT_TYPE_FLOW_WATCHLIST; + + case lemming::dataplane::sai::TAM_EVENT_TYPE_FLOW_TCPFLAG: + return SAI_TAM_EVENT_TYPE_FLOW_TCPFLAG; + + case lemming::dataplane::sai::TAM_EVENT_TYPE_QUEUE_THRESHOLD: + return SAI_TAM_EVENT_TYPE_QUEUE_THRESHOLD; + + case lemming::dataplane::sai::TAM_EVENT_TYPE_QUEUE_TAIL_DROP: + return SAI_TAM_EVENT_TYPE_QUEUE_TAIL_DROP; + + case lemming::dataplane::sai::TAM_EVENT_TYPE_PACKET_DROP: + return SAI_TAM_EVENT_TYPE_PACKET_DROP; + + case lemming::dataplane::sai::TAM_EVENT_TYPE_RESOURCE_UTILIZATION: + return SAI_TAM_EVENT_TYPE_RESOURCE_UTILIZATION; + + case lemming::dataplane::sai::TAM_EVENT_TYPE_IPG_SHARED: + return SAI_TAM_EVENT_TYPE_IPG_SHARED; + + case lemming::dataplane::sai::TAM_EVENT_TYPE_IPG_XOFF_ROOM: + return SAI_TAM_EVENT_TYPE_IPG_XOFF_ROOM; + + case lemming::dataplane::sai::TAM_EVENT_TYPE_BSP: + return SAI_TAM_EVENT_TYPE_BSP; + + default: + return SAI_TAM_EVENT_TYPE_FLOW_STATE; + } +} + +google::protobuf::RepeatedField convert_list_sai_tam_event_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_event_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_event_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_event_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamIntAttr convert_sai_tam_int_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TAM_INT_ATTR_TYPE: + return lemming::dataplane::sai::TAM_INT_ATTR_TYPE; + + case SAI_TAM_INT_ATTR_DEVICE_ID: + return lemming::dataplane::sai::TAM_INT_ATTR_DEVICE_ID; + + case SAI_TAM_INT_ATTR_IOAM_TRACE_TYPE: + return lemming::dataplane::sai::TAM_INT_ATTR_IOAM_TRACE_TYPE; + + case SAI_TAM_INT_ATTR_INT_PRESENCE_TYPE: + return lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_TYPE; + + case SAI_TAM_INT_ATTR_INT_PRESENCE_PB1: + return lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_PB1; + + case SAI_TAM_INT_ATTR_INT_PRESENCE_PB2: + return lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_PB2; + + case SAI_TAM_INT_ATTR_INT_PRESENCE_DSCP_VALUE: + return lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_DSCP_VALUE; + + case SAI_TAM_INT_ATTR_INLINE: + return lemming::dataplane::sai::TAM_INT_ATTR_INLINE; + + case SAI_TAM_INT_ATTR_INT_PRESENCE_L3_PROTOCOL: + return lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_L3_PROTOCOL; + + case SAI_TAM_INT_ATTR_TRACE_VECTOR: + return lemming::dataplane::sai::TAM_INT_ATTR_TRACE_VECTOR; + + case SAI_TAM_INT_ATTR_ACTION_VECTOR: + return lemming::dataplane::sai::TAM_INT_ATTR_ACTION_VECTOR; + + case SAI_TAM_INT_ATTR_P4_INT_INSTRUCTION_BITMAP: + return lemming::dataplane::sai::TAM_INT_ATTR_P4_INT_INSTRUCTION_BITMAP; + + case SAI_TAM_INT_ATTR_METADATA_FRAGMENT_ENABLE: + return lemming::dataplane::sai::TAM_INT_ATTR_METADATA_FRAGMENT_ENABLE; + + case SAI_TAM_INT_ATTR_METADATA_CHECKSUM_ENABLE: + return lemming::dataplane::sai::TAM_INT_ATTR_METADATA_CHECKSUM_ENABLE; + + case SAI_TAM_INT_ATTR_REPORT_ALL_PACKETS: + return lemming::dataplane::sai::TAM_INT_ATTR_REPORT_ALL_PACKETS; + + case SAI_TAM_INT_ATTR_FLOW_LIVENESS_PERIOD: + return lemming::dataplane::sai::TAM_INT_ATTR_FLOW_LIVENESS_PERIOD; + + case SAI_TAM_INT_ATTR_LATENCY_SENSITIVITY: + return lemming::dataplane::sai::TAM_INT_ATTR_LATENCY_SENSITIVITY; + + case SAI_TAM_INT_ATTR_ACL_GROUP: + return lemming::dataplane::sai::TAM_INT_ATTR_ACL_GROUP; + + case SAI_TAM_INT_ATTR_MAX_HOP_COUNT: + return lemming::dataplane::sai::TAM_INT_ATTR_MAX_HOP_COUNT; + + case SAI_TAM_INT_ATTR_MAX_LENGTH: + return lemming::dataplane::sai::TAM_INT_ATTR_MAX_LENGTH; + + case SAI_TAM_INT_ATTR_NAME_SPACE_ID: + return lemming::dataplane::sai::TAM_INT_ATTR_NAME_SPACE_ID; + + case SAI_TAM_INT_ATTR_NAME_SPACE_ID_GLOBAL: + return lemming::dataplane::sai::TAM_INT_ATTR_NAME_SPACE_ID_GLOBAL; + + case SAI_TAM_INT_ATTR_INGRESS_SAMPLEPACKET_ENABLE: + return lemming::dataplane::sai::TAM_INT_ATTR_INGRESS_SAMPLEPACKET_ENABLE; + + case SAI_TAM_INT_ATTR_COLLECTOR_LIST: + return lemming::dataplane::sai::TAM_INT_ATTR_COLLECTOR_LIST; + + case SAI_TAM_INT_ATTR_MATH_FUNC: + return lemming::dataplane::sai::TAM_INT_ATTR_MATH_FUNC; + + case SAI_TAM_INT_ATTR_REPORT_ID: + return lemming::dataplane::sai::TAM_INT_ATTR_REPORT_ID; + + default: + return lemming::dataplane::sai::TAM_INT_ATTR_UNSPECIFIED; + } +} +sai_tam_int_attr_t convert_sai_tam_int_attr_t_to_sai( + lemming::dataplane::sai::TamIntAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_INT_ATTR_TYPE: + return SAI_TAM_INT_ATTR_TYPE; + + case lemming::dataplane::sai::TAM_INT_ATTR_DEVICE_ID: + return SAI_TAM_INT_ATTR_DEVICE_ID; + + case lemming::dataplane::sai::TAM_INT_ATTR_IOAM_TRACE_TYPE: + return SAI_TAM_INT_ATTR_IOAM_TRACE_TYPE; + + case lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_TYPE: + return SAI_TAM_INT_ATTR_INT_PRESENCE_TYPE; + + case lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_PB1: + return SAI_TAM_INT_ATTR_INT_PRESENCE_PB1; + + case lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_PB2: + return SAI_TAM_INT_ATTR_INT_PRESENCE_PB2; + + case lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_DSCP_VALUE: + return SAI_TAM_INT_ATTR_INT_PRESENCE_DSCP_VALUE; + + case lemming::dataplane::sai::TAM_INT_ATTR_INLINE: + return SAI_TAM_INT_ATTR_INLINE; + + case lemming::dataplane::sai::TAM_INT_ATTR_INT_PRESENCE_L3_PROTOCOL: + return SAI_TAM_INT_ATTR_INT_PRESENCE_L3_PROTOCOL; + + case lemming::dataplane::sai::TAM_INT_ATTR_TRACE_VECTOR: + return SAI_TAM_INT_ATTR_TRACE_VECTOR; + + case lemming::dataplane::sai::TAM_INT_ATTR_ACTION_VECTOR: + return SAI_TAM_INT_ATTR_ACTION_VECTOR; + + case lemming::dataplane::sai::TAM_INT_ATTR_P4_INT_INSTRUCTION_BITMAP: + return SAI_TAM_INT_ATTR_P4_INT_INSTRUCTION_BITMAP; + + case lemming::dataplane::sai::TAM_INT_ATTR_METADATA_FRAGMENT_ENABLE: + return SAI_TAM_INT_ATTR_METADATA_FRAGMENT_ENABLE; + + case lemming::dataplane::sai::TAM_INT_ATTR_METADATA_CHECKSUM_ENABLE: + return SAI_TAM_INT_ATTR_METADATA_CHECKSUM_ENABLE; + + case lemming::dataplane::sai::TAM_INT_ATTR_REPORT_ALL_PACKETS: + return SAI_TAM_INT_ATTR_REPORT_ALL_PACKETS; + + case lemming::dataplane::sai::TAM_INT_ATTR_FLOW_LIVENESS_PERIOD: + return SAI_TAM_INT_ATTR_FLOW_LIVENESS_PERIOD; + + case lemming::dataplane::sai::TAM_INT_ATTR_LATENCY_SENSITIVITY: + return SAI_TAM_INT_ATTR_LATENCY_SENSITIVITY; + + case lemming::dataplane::sai::TAM_INT_ATTR_ACL_GROUP: + return SAI_TAM_INT_ATTR_ACL_GROUP; + + case lemming::dataplane::sai::TAM_INT_ATTR_MAX_HOP_COUNT: + return SAI_TAM_INT_ATTR_MAX_HOP_COUNT; + + case lemming::dataplane::sai::TAM_INT_ATTR_MAX_LENGTH: + return SAI_TAM_INT_ATTR_MAX_LENGTH; + + case lemming::dataplane::sai::TAM_INT_ATTR_NAME_SPACE_ID: + return SAI_TAM_INT_ATTR_NAME_SPACE_ID; + + case lemming::dataplane::sai::TAM_INT_ATTR_NAME_SPACE_ID_GLOBAL: + return SAI_TAM_INT_ATTR_NAME_SPACE_ID_GLOBAL; + + case lemming::dataplane::sai::TAM_INT_ATTR_INGRESS_SAMPLEPACKET_ENABLE: + return SAI_TAM_INT_ATTR_INGRESS_SAMPLEPACKET_ENABLE; + + case lemming::dataplane::sai::TAM_INT_ATTR_COLLECTOR_LIST: + return SAI_TAM_INT_ATTR_COLLECTOR_LIST; + + case lemming::dataplane::sai::TAM_INT_ATTR_MATH_FUNC: + return SAI_TAM_INT_ATTR_MATH_FUNC; + + case lemming::dataplane::sai::TAM_INT_ATTR_REPORT_ID: + return SAI_TAM_INT_ATTR_REPORT_ID; + + default: + return SAI_TAM_INT_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_tam_int_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_int_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_int_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_int_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamIntPresenceType +convert_sai_tam_int_presence_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_INT_PRESENCE_TYPE_UNDEFINED: + return lemming::dataplane::sai::TAM_INT_PRESENCE_TYPE_UNDEFINED; + + case SAI_TAM_INT_PRESENCE_TYPE_PB: + return lemming::dataplane::sai::TAM_INT_PRESENCE_TYPE_PB; + + case SAI_TAM_INT_PRESENCE_TYPE_L3_PROTOCOL: + return lemming::dataplane::sai::TAM_INT_PRESENCE_TYPE_L3_PROTOCOL; + + case SAI_TAM_INT_PRESENCE_TYPE_DSCP: + return lemming::dataplane::sai::TAM_INT_PRESENCE_TYPE_DSCP; + + default: + return lemming::dataplane::sai::TAM_INT_PRESENCE_TYPE_UNSPECIFIED; + } +} +sai_tam_int_presence_type_t convert_sai_tam_int_presence_type_t_to_sai( + lemming::dataplane::sai::TamIntPresenceType val) { + switch (val) { + case lemming::dataplane::sai::TAM_INT_PRESENCE_TYPE_UNDEFINED: + return SAI_TAM_INT_PRESENCE_TYPE_UNDEFINED; + + case lemming::dataplane::sai::TAM_INT_PRESENCE_TYPE_PB: + return SAI_TAM_INT_PRESENCE_TYPE_PB; + + case lemming::dataplane::sai::TAM_INT_PRESENCE_TYPE_L3_PROTOCOL: + return SAI_TAM_INT_PRESENCE_TYPE_L3_PROTOCOL; + + case lemming::dataplane::sai::TAM_INT_PRESENCE_TYPE_DSCP: + return SAI_TAM_INT_PRESENCE_TYPE_DSCP; + + default: + return SAI_TAM_INT_PRESENCE_TYPE_UNDEFINED; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_int_presence_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_int_presence_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_int_presence_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_int_presence_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamIntType convert_sai_tam_int_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TAM_INT_TYPE_IOAM: + return lemming::dataplane::sai::TAM_INT_TYPE_IOAM; + + case SAI_TAM_INT_TYPE_IFA1: + return lemming::dataplane::sai::TAM_INT_TYPE_IFA1; + + case SAI_TAM_INT_TYPE_IFA2: + return lemming::dataplane::sai::TAM_INT_TYPE_IFA2; + + case SAI_TAM_INT_TYPE_P4_INT_1: + return lemming::dataplane::sai::TAM_INT_TYPE_P4_INT_1; + + case SAI_TAM_INT_TYPE_P4_INT_2: + return lemming::dataplane::sai::TAM_INT_TYPE_P4_INT_2; + + case SAI_TAM_INT_TYPE_DIRECT_EXPORT: + return lemming::dataplane::sai::TAM_INT_TYPE_DIRECT_EXPORT; + + case SAI_TAM_INT_TYPE_IFA1_TAILSTAMP: + return lemming::dataplane::sai::TAM_INT_TYPE_IFA1_TAILSTAMP; + + default: + return lemming::dataplane::sai::TAM_INT_TYPE_UNSPECIFIED; + } +} +sai_tam_int_type_t convert_sai_tam_int_type_t_to_sai( + lemming::dataplane::sai::TamIntType val) { + switch (val) { + case lemming::dataplane::sai::TAM_INT_TYPE_IOAM: + return SAI_TAM_INT_TYPE_IOAM; + + case lemming::dataplane::sai::TAM_INT_TYPE_IFA1: + return SAI_TAM_INT_TYPE_IFA1; + + case lemming::dataplane::sai::TAM_INT_TYPE_IFA2: + return SAI_TAM_INT_TYPE_IFA2; + + case lemming::dataplane::sai::TAM_INT_TYPE_P4_INT_1: + return SAI_TAM_INT_TYPE_P4_INT_1; + + case lemming::dataplane::sai::TAM_INT_TYPE_P4_INT_2: + return SAI_TAM_INT_TYPE_P4_INT_2; + + case lemming::dataplane::sai::TAM_INT_TYPE_DIRECT_EXPORT: + return SAI_TAM_INT_TYPE_DIRECT_EXPORT; + + case lemming::dataplane::sai::TAM_INT_TYPE_IFA1_TAILSTAMP: + return SAI_TAM_INT_TYPE_IFA1_TAILSTAMP; + + default: + return SAI_TAM_INT_TYPE_IOAM; + } +} + +google::protobuf::RepeatedField convert_list_sai_tam_int_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_int_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_int_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_int_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamMathFuncAttr +convert_sai_tam_math_func_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_MATH_FUNC_ATTR_TAM_TEL_MATH_FUNC_TYPE: + return lemming::dataplane::sai::TAM_MATH_FUNC_ATTR_TAM_TEL_MATH_FUNC_TYPE; + + default: + return lemming::dataplane::sai::TAM_MATH_FUNC_ATTR_UNSPECIFIED; + } +} +sai_tam_math_func_attr_t convert_sai_tam_math_func_attr_t_to_sai( + lemming::dataplane::sai::TamMathFuncAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_MATH_FUNC_ATTR_TAM_TEL_MATH_FUNC_TYPE: + return SAI_TAM_MATH_FUNC_ATTR_TAM_TEL_MATH_FUNC_TYPE; + + default: + return SAI_TAM_MATH_FUNC_ATTR_TAM_TEL_MATH_FUNC_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_math_func_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_math_func_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_math_func_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_math_func_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamReportAttr convert_sai_tam_report_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TAM_REPORT_ATTR_TYPE: + return lemming::dataplane::sai::TAM_REPORT_ATTR_TYPE; + + case SAI_TAM_REPORT_ATTR_HISTOGRAM_NUMBER_OF_BINS: + return lemming::dataplane::sai::TAM_REPORT_ATTR_HISTOGRAM_NUMBER_OF_BINS; + + case SAI_TAM_REPORT_ATTR_HISTOGRAM_BIN_BOUNDARY: + return lemming::dataplane::sai::TAM_REPORT_ATTR_HISTOGRAM_BIN_BOUNDARY; + + case SAI_TAM_REPORT_ATTR_QUOTA: + return lemming::dataplane::sai::TAM_REPORT_ATTR_QUOTA; + + case SAI_TAM_REPORT_ATTR_REPORT_MODE: + return lemming::dataplane::sai::TAM_REPORT_ATTR_REPORT_MODE; + + case SAI_TAM_REPORT_ATTR_REPORT_INTERVAL: + return lemming::dataplane::sai::TAM_REPORT_ATTR_REPORT_INTERVAL; + + case SAI_TAM_REPORT_ATTR_ENTERPRISE_NUMBER: + return lemming::dataplane::sai::TAM_REPORT_ATTR_ENTERPRISE_NUMBER; + + case SAI_TAM_REPORT_ATTR_TEMPLATE_REPORT_INTERVAL: + return lemming::dataplane::sai::TAM_REPORT_ATTR_TEMPLATE_REPORT_INTERVAL; + + default: + return lemming::dataplane::sai::TAM_REPORT_ATTR_UNSPECIFIED; + } +} +sai_tam_report_attr_t convert_sai_tam_report_attr_t_to_sai( + lemming::dataplane::sai::TamReportAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_REPORT_ATTR_TYPE: + return SAI_TAM_REPORT_ATTR_TYPE; + + case lemming::dataplane::sai::TAM_REPORT_ATTR_HISTOGRAM_NUMBER_OF_BINS: + return SAI_TAM_REPORT_ATTR_HISTOGRAM_NUMBER_OF_BINS; + + case lemming::dataplane::sai::TAM_REPORT_ATTR_HISTOGRAM_BIN_BOUNDARY: + return SAI_TAM_REPORT_ATTR_HISTOGRAM_BIN_BOUNDARY; + + case lemming::dataplane::sai::TAM_REPORT_ATTR_QUOTA: + return SAI_TAM_REPORT_ATTR_QUOTA; + + case lemming::dataplane::sai::TAM_REPORT_ATTR_REPORT_MODE: + return SAI_TAM_REPORT_ATTR_REPORT_MODE; + + case lemming::dataplane::sai::TAM_REPORT_ATTR_REPORT_INTERVAL: + return SAI_TAM_REPORT_ATTR_REPORT_INTERVAL; + + case lemming::dataplane::sai::TAM_REPORT_ATTR_ENTERPRISE_NUMBER: + return SAI_TAM_REPORT_ATTR_ENTERPRISE_NUMBER; + + case lemming::dataplane::sai::TAM_REPORT_ATTR_TEMPLATE_REPORT_INTERVAL: + return SAI_TAM_REPORT_ATTR_TEMPLATE_REPORT_INTERVAL; + + default: + return SAI_TAM_REPORT_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_report_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_report_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_report_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_report_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamReportMode convert_sai_tam_report_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TAM_REPORT_MODE_ALL: + return lemming::dataplane::sai::TAM_REPORT_MODE_ALL; + + case SAI_TAM_REPORT_MODE_BULK: + return lemming::dataplane::sai::TAM_REPORT_MODE_BULK; + + default: + return lemming::dataplane::sai::TAM_REPORT_MODE_UNSPECIFIED; + } +} +sai_tam_report_mode_t convert_sai_tam_report_mode_t_to_sai( + lemming::dataplane::sai::TamReportMode val) { + switch (val) { + case lemming::dataplane::sai::TAM_REPORT_MODE_ALL: + return SAI_TAM_REPORT_MODE_ALL; + + case lemming::dataplane::sai::TAM_REPORT_MODE_BULK: + return SAI_TAM_REPORT_MODE_BULK; + + default: + return SAI_TAM_REPORT_MODE_ALL; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_report_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_report_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_report_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_report_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamReportType convert_sai_tam_report_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TAM_REPORT_TYPE_SFLOW: + return lemming::dataplane::sai::TAM_REPORT_TYPE_SFLOW; + + case SAI_TAM_REPORT_TYPE_IPFIX: + return lemming::dataplane::sai::TAM_REPORT_TYPE_IPFIX; + + case SAI_TAM_REPORT_TYPE_PROTO: + return lemming::dataplane::sai::TAM_REPORT_TYPE_PROTO; + + case SAI_TAM_REPORT_TYPE_THRIFT: + return lemming::dataplane::sai::TAM_REPORT_TYPE_THRIFT; + + case SAI_TAM_REPORT_TYPE_JSON: + return lemming::dataplane::sai::TAM_REPORT_TYPE_JSON; + + case SAI_TAM_REPORT_TYPE_P4_EXTN: + return lemming::dataplane::sai::TAM_REPORT_TYPE_P4_EXTN; + + case SAI_TAM_REPORT_TYPE_HISTOGRAM: + return lemming::dataplane::sai::TAM_REPORT_TYPE_HISTOGRAM; + + case SAI_TAM_REPORT_TYPE_VENDOR_EXTN: + return lemming::dataplane::sai::TAM_REPORT_TYPE_VENDOR_EXTN; + + default: + return lemming::dataplane::sai::TAM_REPORT_TYPE_UNSPECIFIED; + } +} +sai_tam_report_type_t convert_sai_tam_report_type_t_to_sai( + lemming::dataplane::sai::TamReportType val) { + switch (val) { + case lemming::dataplane::sai::TAM_REPORT_TYPE_SFLOW: + return SAI_TAM_REPORT_TYPE_SFLOW; + + case lemming::dataplane::sai::TAM_REPORT_TYPE_IPFIX: + return SAI_TAM_REPORT_TYPE_IPFIX; + + case lemming::dataplane::sai::TAM_REPORT_TYPE_PROTO: + return SAI_TAM_REPORT_TYPE_PROTO; + + case lemming::dataplane::sai::TAM_REPORT_TYPE_THRIFT: + return SAI_TAM_REPORT_TYPE_THRIFT; + + case lemming::dataplane::sai::TAM_REPORT_TYPE_JSON: + return SAI_TAM_REPORT_TYPE_JSON; + + case lemming::dataplane::sai::TAM_REPORT_TYPE_P4_EXTN: + return SAI_TAM_REPORT_TYPE_P4_EXTN; + + case lemming::dataplane::sai::TAM_REPORT_TYPE_HISTOGRAM: + return SAI_TAM_REPORT_TYPE_HISTOGRAM; + + case lemming::dataplane::sai::TAM_REPORT_TYPE_VENDOR_EXTN: + return SAI_TAM_REPORT_TYPE_VENDOR_EXTN; + + default: + return SAI_TAM_REPORT_TYPE_SFLOW; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_report_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_report_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_report_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_report_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamReportingUnit +convert_sai_tam_reporting_unit_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_REPORTING_UNIT_SEC: + return lemming::dataplane::sai::TAM_REPORTING_UNIT_SEC; + + case SAI_TAM_REPORTING_UNIT_MINUTE: + return lemming::dataplane::sai::TAM_REPORTING_UNIT_MINUTE; + + case SAI_TAM_REPORTING_UNIT_HOUR: + return lemming::dataplane::sai::TAM_REPORTING_UNIT_HOUR; + + case SAI_TAM_REPORTING_UNIT_DAY: + return lemming::dataplane::sai::TAM_REPORTING_UNIT_DAY; + + default: + return lemming::dataplane::sai::TAM_REPORTING_UNIT_UNSPECIFIED; + } +} +sai_tam_reporting_unit_t convert_sai_tam_reporting_unit_t_to_sai( + lemming::dataplane::sai::TamReportingUnit val) { + switch (val) { + case lemming::dataplane::sai::TAM_REPORTING_UNIT_SEC: + return SAI_TAM_REPORTING_UNIT_SEC; + + case lemming::dataplane::sai::TAM_REPORTING_UNIT_MINUTE: + return SAI_TAM_REPORTING_UNIT_MINUTE; + + case lemming::dataplane::sai::TAM_REPORTING_UNIT_HOUR: + return SAI_TAM_REPORTING_UNIT_HOUR; + + case lemming::dataplane::sai::TAM_REPORTING_UNIT_DAY: + return SAI_TAM_REPORTING_UNIT_DAY; + + default: + return SAI_TAM_REPORTING_UNIT_SEC; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_reporting_unit_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_reporting_unit_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_reporting_unit_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_reporting_unit_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamTelMathFuncType +convert_sai_tam_tel_math_func_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_TEL_MATH_FUNC_TYPE_NONE: + return lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_NONE; + + case SAI_TAM_TEL_MATH_FUNC_TYPE_GEO_MEAN: + return lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_GEO_MEAN; + + case SAI_TAM_TEL_MATH_FUNC_TYPE_ALGEBRAIC_MEAN: + return lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_ALGEBRAIC_MEAN; + + case SAI_TAM_TEL_MATH_FUNC_TYPE_AVERAGE: + return lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_AVERAGE; + + case SAI_TAM_TEL_MATH_FUNC_TYPE_MODE: + return lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_MODE; + + case SAI_TAM_TEL_MATH_FUNC_TYPE_RATE: + return lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_RATE; + + default: + return lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_UNSPECIFIED; + } +} +sai_tam_tel_math_func_type_t convert_sai_tam_tel_math_func_type_t_to_sai( + lemming::dataplane::sai::TamTelMathFuncType val) { + switch (val) { + case lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_NONE: + return SAI_TAM_TEL_MATH_FUNC_TYPE_NONE; + + case lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_GEO_MEAN: + return SAI_TAM_TEL_MATH_FUNC_TYPE_GEO_MEAN; + + case lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_ALGEBRAIC_MEAN: + return SAI_TAM_TEL_MATH_FUNC_TYPE_ALGEBRAIC_MEAN; + + case lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_AVERAGE: + return SAI_TAM_TEL_MATH_FUNC_TYPE_AVERAGE; + + case lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_MODE: + return SAI_TAM_TEL_MATH_FUNC_TYPE_MODE; + + case lemming::dataplane::sai::TAM_TEL_MATH_FUNC_TYPE_RATE: + return SAI_TAM_TEL_MATH_FUNC_TYPE_RATE; + + default: + return SAI_TAM_TEL_MATH_FUNC_TYPE_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_tel_math_func_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_tel_math_func_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_tel_math_func_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_tel_math_func_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamTelTypeAttr +convert_sai_tam_tel_type_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_TEL_TYPE_ATTR_TAM_TELEMETRY_TYPE: + return lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_TAM_TELEMETRY_TYPE; + + case SAI_TAM_TEL_TYPE_ATTR_INT_SWITCH_IDENTIFIER: + return lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_INT_SWITCH_IDENTIFIER; + + case SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS: + return lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS; + + case SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_INGRESS: + return lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_INGRESS; + + case SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_EGRESS: + return lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_EGRESS; + + case SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_VIRTUAL_QUEUE_STATS: + return lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_VIRTUAL_QUEUE_STATS; + + case SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_OUTPUT_QUEUE_STATS: + return lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_OUTPUT_QUEUE_STATS; + + case SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_MMU_STATS: + return lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_MMU_STATS; + + case SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_FABRIC_STATS: + return lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_FABRIC_STATS; + + case SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_FILTER_STATS: + return lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_FILTER_STATS; + + case SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_RESOURCE_UTILIZATION_STATS: + return lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_RESOURCE_UTILIZATION_STATS; + + case SAI_TAM_TEL_TYPE_ATTR_FABRIC_Q: + return lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_FABRIC_Q; + + case SAI_TAM_TEL_TYPE_ATTR_NE_ENABLE: + return lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_NE_ENABLE; + + case SAI_TAM_TEL_TYPE_ATTR_DSCP_VALUE: + return lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_DSCP_VALUE; + + case SAI_TAM_TEL_TYPE_ATTR_MATH_FUNC: + return lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_MATH_FUNC; + + case SAI_TAM_TEL_TYPE_ATTR_REPORT_ID: + return lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_REPORT_ID; + + default: + return lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_UNSPECIFIED; + } +} +sai_tam_tel_type_attr_t convert_sai_tam_tel_type_attr_t_to_sai( + lemming::dataplane::sai::TamTelTypeAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_TAM_TELEMETRY_TYPE: + return SAI_TAM_TEL_TYPE_ATTR_TAM_TELEMETRY_TYPE; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_INT_SWITCH_IDENTIFIER: + return SAI_TAM_TEL_TYPE_ATTR_INT_SWITCH_IDENTIFIER; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS: + return SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS; + + case lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_INGRESS: + return SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_INGRESS; + + case lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_EGRESS: + return SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_EGRESS; + + case lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_VIRTUAL_QUEUE_STATS: + return SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_VIRTUAL_QUEUE_STATS; + + case lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_OUTPUT_QUEUE_STATS: + return SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_OUTPUT_QUEUE_STATS; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_MMU_STATS: + return SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_MMU_STATS; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_FABRIC_STATS: + return SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_FABRIC_STATS; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_FILTER_STATS: + return SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_FILTER_STATS; + + case lemming::dataplane::sai:: + TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_RESOURCE_UTILIZATION_STATS: + return SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_RESOURCE_UTILIZATION_STATS; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_FABRIC_Q: + return SAI_TAM_TEL_TYPE_ATTR_FABRIC_Q; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_NE_ENABLE: + return SAI_TAM_TEL_TYPE_ATTR_NE_ENABLE; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_DSCP_VALUE: + return SAI_TAM_TEL_TYPE_ATTR_DSCP_VALUE; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_MATH_FUNC: + return SAI_TAM_TEL_TYPE_ATTR_MATH_FUNC; + + case lemming::dataplane::sai::TAM_TEL_TYPE_ATTR_REPORT_ID: + return SAI_TAM_TEL_TYPE_ATTR_REPORT_ID; + + default: + return SAI_TAM_TEL_TYPE_ATTR_TAM_TELEMETRY_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_tel_type_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_tel_type_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_tel_type_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_tel_type_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamTelemetryAttr +convert_sai_tam_telemetry_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_TELEMETRY_ATTR_TAM_TYPE_LIST: + return lemming::dataplane::sai::TAM_TELEMETRY_ATTR_TAM_TYPE_LIST; + + case SAI_TAM_TELEMETRY_ATTR_COLLECTOR_LIST: + return lemming::dataplane::sai::TAM_TELEMETRY_ATTR_COLLECTOR_LIST; + + case SAI_TAM_TELEMETRY_ATTR_TAM_REPORTING_UNIT: + return lemming::dataplane::sai::TAM_TELEMETRY_ATTR_TAM_REPORTING_UNIT; + + case SAI_TAM_TELEMETRY_ATTR_REPORTING_INTERVAL: + return lemming::dataplane::sai::TAM_TELEMETRY_ATTR_REPORTING_INTERVAL; + + default: + return lemming::dataplane::sai::TAM_TELEMETRY_ATTR_UNSPECIFIED; + } +} +sai_tam_telemetry_attr_t convert_sai_tam_telemetry_attr_t_to_sai( + lemming::dataplane::sai::TamTelemetryAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_TELEMETRY_ATTR_TAM_TYPE_LIST: + return SAI_TAM_TELEMETRY_ATTR_TAM_TYPE_LIST; + + case lemming::dataplane::sai::TAM_TELEMETRY_ATTR_COLLECTOR_LIST: + return SAI_TAM_TELEMETRY_ATTR_COLLECTOR_LIST; + + case lemming::dataplane::sai::TAM_TELEMETRY_ATTR_TAM_REPORTING_UNIT: + return SAI_TAM_TELEMETRY_ATTR_TAM_REPORTING_UNIT; + + case lemming::dataplane::sai::TAM_TELEMETRY_ATTR_REPORTING_INTERVAL: + return SAI_TAM_TELEMETRY_ATTR_REPORTING_INTERVAL; + + default: + return SAI_TAM_TELEMETRY_ATTR_TAM_TYPE_LIST; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_telemetry_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_telemetry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_telemetry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_telemetry_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamTelemetryType +convert_sai_tam_telemetry_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_TELEMETRY_TYPE_NE: + return lemming::dataplane::sai::TAM_TELEMETRY_TYPE_NE; + + case SAI_TAM_TELEMETRY_TYPE_SWITCH: + return lemming::dataplane::sai::TAM_TELEMETRY_TYPE_SWITCH; + + case SAI_TAM_TELEMETRY_TYPE_FABRIC: + return lemming::dataplane::sai::TAM_TELEMETRY_TYPE_FABRIC; + + case SAI_TAM_TELEMETRY_TYPE_FLOW: + return lemming::dataplane::sai::TAM_TELEMETRY_TYPE_FLOW; + + case SAI_TAM_TELEMETRY_TYPE_INT: + return lemming::dataplane::sai::TAM_TELEMETRY_TYPE_INT; + + default: + return lemming::dataplane::sai::TAM_TELEMETRY_TYPE_UNSPECIFIED; + } +} +sai_tam_telemetry_type_t convert_sai_tam_telemetry_type_t_to_sai( + lemming::dataplane::sai::TamTelemetryType val) { + switch (val) { + case lemming::dataplane::sai::TAM_TELEMETRY_TYPE_NE: + return SAI_TAM_TELEMETRY_TYPE_NE; + + case lemming::dataplane::sai::TAM_TELEMETRY_TYPE_SWITCH: + return SAI_TAM_TELEMETRY_TYPE_SWITCH; + + case lemming::dataplane::sai::TAM_TELEMETRY_TYPE_FABRIC: + return SAI_TAM_TELEMETRY_TYPE_FABRIC; + + case lemming::dataplane::sai::TAM_TELEMETRY_TYPE_FLOW: + return SAI_TAM_TELEMETRY_TYPE_FLOW; + + case lemming::dataplane::sai::TAM_TELEMETRY_TYPE_INT: + return SAI_TAM_TELEMETRY_TYPE_INT; + + default: + return SAI_TAM_TELEMETRY_TYPE_NE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_telemetry_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_telemetry_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_telemetry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_telemetry_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamTransportAttr +convert_sai_tam_transport_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_TRANSPORT_ATTR_TRANSPORT_TYPE: + return lemming::dataplane::sai::TAM_TRANSPORT_ATTR_TRANSPORT_TYPE; + + case SAI_TAM_TRANSPORT_ATTR_SRC_PORT: + return lemming::dataplane::sai::TAM_TRANSPORT_ATTR_SRC_PORT; + + case SAI_TAM_TRANSPORT_ATTR_DST_PORT: + return lemming::dataplane::sai::TAM_TRANSPORT_ATTR_DST_PORT; + + case SAI_TAM_TRANSPORT_ATTR_TRANSPORT_AUTH_TYPE: + return lemming::dataplane::sai::TAM_TRANSPORT_ATTR_TRANSPORT_AUTH_TYPE; + + case SAI_TAM_TRANSPORT_ATTR_MTU: + return lemming::dataplane::sai::TAM_TRANSPORT_ATTR_MTU; + + default: + return lemming::dataplane::sai::TAM_TRANSPORT_ATTR_UNSPECIFIED; + } +} +sai_tam_transport_attr_t convert_sai_tam_transport_attr_t_to_sai( + lemming::dataplane::sai::TamTransportAttr val) { + switch (val) { + case lemming::dataplane::sai::TAM_TRANSPORT_ATTR_TRANSPORT_TYPE: + return SAI_TAM_TRANSPORT_ATTR_TRANSPORT_TYPE; + + case lemming::dataplane::sai::TAM_TRANSPORT_ATTR_SRC_PORT: + return SAI_TAM_TRANSPORT_ATTR_SRC_PORT; + + case lemming::dataplane::sai::TAM_TRANSPORT_ATTR_DST_PORT: + return SAI_TAM_TRANSPORT_ATTR_DST_PORT; + + case lemming::dataplane::sai::TAM_TRANSPORT_ATTR_TRANSPORT_AUTH_TYPE: + return SAI_TAM_TRANSPORT_ATTR_TRANSPORT_AUTH_TYPE; + + case lemming::dataplane::sai::TAM_TRANSPORT_ATTR_MTU: + return SAI_TAM_TRANSPORT_ATTR_MTU; + + default: + return SAI_TAM_TRANSPORT_ATTR_TRANSPORT_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_transport_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_transport_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_transport_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_transport_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamTransportAuthType +convert_sai_tam_transport_auth_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_TRANSPORT_AUTH_TYPE_NONE: + return lemming::dataplane::sai::TAM_TRANSPORT_AUTH_TYPE_NONE; + + case SAI_TAM_TRANSPORT_AUTH_TYPE_SSL: + return lemming::dataplane::sai::TAM_TRANSPORT_AUTH_TYPE_SSL; + + case SAI_TAM_TRANSPORT_AUTH_TYPE_TLS: + return lemming::dataplane::sai::TAM_TRANSPORT_AUTH_TYPE_TLS; + + default: + return lemming::dataplane::sai::TAM_TRANSPORT_AUTH_TYPE_UNSPECIFIED; + } +} +sai_tam_transport_auth_type_t convert_sai_tam_transport_auth_type_t_to_sai( + lemming::dataplane::sai::TamTransportAuthType val) { + switch (val) { + case lemming::dataplane::sai::TAM_TRANSPORT_AUTH_TYPE_NONE: + return SAI_TAM_TRANSPORT_AUTH_TYPE_NONE; + + case lemming::dataplane::sai::TAM_TRANSPORT_AUTH_TYPE_SSL: + return SAI_TAM_TRANSPORT_AUTH_TYPE_SSL; + + case lemming::dataplane::sai::TAM_TRANSPORT_AUTH_TYPE_TLS: + return SAI_TAM_TRANSPORT_AUTH_TYPE_TLS; + + default: + return SAI_TAM_TRANSPORT_AUTH_TYPE_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_transport_auth_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_tam_transport_auth_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_transport_auth_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_transport_auth_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TamTransportType +convert_sai_tam_transport_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TAM_TRANSPORT_TYPE_NONE: + return lemming::dataplane::sai::TAM_TRANSPORT_TYPE_NONE; + + case SAI_TAM_TRANSPORT_TYPE_TCP: + return lemming::dataplane::sai::TAM_TRANSPORT_TYPE_TCP; + + case SAI_TAM_TRANSPORT_TYPE_UDP: + return lemming::dataplane::sai::TAM_TRANSPORT_TYPE_UDP; + + case SAI_TAM_TRANSPORT_TYPE_GRPC: + return lemming::dataplane::sai::TAM_TRANSPORT_TYPE_GRPC; + + case SAI_TAM_TRANSPORT_TYPE_MIRROR: + return lemming::dataplane::sai::TAM_TRANSPORT_TYPE_MIRROR; + + default: + return lemming::dataplane::sai::TAM_TRANSPORT_TYPE_UNSPECIFIED; + } +} +sai_tam_transport_type_t convert_sai_tam_transport_type_t_to_sai( + lemming::dataplane::sai::TamTransportType val) { + switch (val) { + case lemming::dataplane::sai::TAM_TRANSPORT_TYPE_NONE: + return SAI_TAM_TRANSPORT_TYPE_NONE; + + case lemming::dataplane::sai::TAM_TRANSPORT_TYPE_TCP: + return SAI_TAM_TRANSPORT_TYPE_TCP; + + case lemming::dataplane::sai::TAM_TRANSPORT_TYPE_UDP: + return SAI_TAM_TRANSPORT_TYPE_UDP; + + case lemming::dataplane::sai::TAM_TRANSPORT_TYPE_GRPC: + return SAI_TAM_TRANSPORT_TYPE_GRPC; + + case lemming::dataplane::sai::TAM_TRANSPORT_TYPE_MIRROR: + return SAI_TAM_TRANSPORT_TYPE_MIRROR; + + default: + return SAI_TAM_TRANSPORT_TYPE_NONE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tam_transport_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tam_transport_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tam_transport_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tam_transport_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TlvType convert_sai_tlv_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TLV_TYPE_INGRESS: + return lemming::dataplane::sai::TLV_TYPE_INGRESS; + + case SAI_TLV_TYPE_EGRESS: + return lemming::dataplane::sai::TLV_TYPE_EGRESS; + + case SAI_TLV_TYPE_OPAQUE: + return lemming::dataplane::sai::TLV_TYPE_OPAQUE; + + case SAI_TLV_TYPE_HMAC: + return lemming::dataplane::sai::TLV_TYPE_HMAC; + + default: + return lemming::dataplane::sai::TLV_TYPE_UNSPECIFIED; + } +} +sai_tlv_type_t convert_sai_tlv_type_t_to_sai( + lemming::dataplane::sai::TlvType val) { + switch (val) { + case lemming::dataplane::sai::TLV_TYPE_INGRESS: + return SAI_TLV_TYPE_INGRESS; + + case lemming::dataplane::sai::TLV_TYPE_EGRESS: + return SAI_TLV_TYPE_EGRESS; + + case lemming::dataplane::sai::TLV_TYPE_OPAQUE: + return SAI_TLV_TYPE_OPAQUE; + + case lemming::dataplane::sai::TLV_TYPE_HMAC: + return SAI_TLV_TYPE_HMAC; + + default: + return SAI_TLV_TYPE_INGRESS; + } +} + +google::protobuf::RepeatedField convert_list_sai_tlv_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tlv_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tlv_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tlv_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelAttr convert_sai_tunnel_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_ATTR_TYPE: + return lemming::dataplane::sai::TUNNEL_ATTR_TYPE; + + case SAI_TUNNEL_ATTR_UNDERLAY_INTERFACE: + return lemming::dataplane::sai::TUNNEL_ATTR_UNDERLAY_INTERFACE; + + case SAI_TUNNEL_ATTR_OVERLAY_INTERFACE: + return lemming::dataplane::sai::TUNNEL_ATTR_OVERLAY_INTERFACE; + + case SAI_TUNNEL_ATTR_PEER_MODE: + return lemming::dataplane::sai::TUNNEL_ATTR_PEER_MODE; + + case SAI_TUNNEL_ATTR_ENCAP_SRC_IP: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_SRC_IP; + + case SAI_TUNNEL_ATTR_ENCAP_DST_IP: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_DST_IP; + + case SAI_TUNNEL_ATTR_ENCAP_TTL_MODE: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_TTL_MODE; + + case SAI_TUNNEL_ATTR_ENCAP_TTL_VAL: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_TTL_VAL; + + case SAI_TUNNEL_ATTR_ENCAP_DSCP_MODE: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_DSCP_MODE; + + case SAI_TUNNEL_ATTR_ENCAP_DSCP_VAL: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_DSCP_VAL; + + case SAI_TUNNEL_ATTR_ENCAP_GRE_KEY_VALID: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_GRE_KEY_VALID; + + case SAI_TUNNEL_ATTR_ENCAP_GRE_KEY: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_GRE_KEY; + + case SAI_TUNNEL_ATTR_ENCAP_ECN_MODE: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_ECN_MODE; + + case SAI_TUNNEL_ATTR_ENCAP_MAPPERS: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_MAPPERS; + + case SAI_TUNNEL_ATTR_DECAP_ECN_MODE: + return lemming::dataplane::sai::TUNNEL_ATTR_DECAP_ECN_MODE; + + case SAI_TUNNEL_ATTR_DECAP_MAPPERS: + return lemming::dataplane::sai::TUNNEL_ATTR_DECAP_MAPPERS; + + case SAI_TUNNEL_ATTR_DECAP_TTL_MODE: + return lemming::dataplane::sai::TUNNEL_ATTR_DECAP_TTL_MODE; + + case SAI_TUNNEL_ATTR_DECAP_DSCP_MODE: + return lemming::dataplane::sai::TUNNEL_ATTR_DECAP_DSCP_MODE; + + case SAI_TUNNEL_ATTR_TERM_TABLE_ENTRY_LIST: + return lemming::dataplane::sai::TUNNEL_ATTR_TERM_TABLE_ENTRY_LIST; + + case SAI_TUNNEL_ATTR_LOOPBACK_PACKET_ACTION: + return lemming::dataplane::sai::TUNNEL_ATTR_LOOPBACK_PACKET_ACTION; + + case SAI_TUNNEL_ATTR_VXLAN_UDP_SPORT_MODE: + return lemming::dataplane::sai::TUNNEL_ATTR_VXLAN_UDP_SPORT_MODE; + + case SAI_TUNNEL_ATTR_VXLAN_UDP_SPORT: + return lemming::dataplane::sai::TUNNEL_ATTR_VXLAN_UDP_SPORT; + + case SAI_TUNNEL_ATTR_VXLAN_UDP_SPORT_MASK: + return lemming::dataplane::sai::TUNNEL_ATTR_VXLAN_UDP_SPORT_MASK; + + case SAI_TUNNEL_ATTR_SA_INDEX: + return lemming::dataplane::sai::TUNNEL_ATTR_SA_INDEX; + + case SAI_TUNNEL_ATTR_IPSEC_SA_PORT_LIST: + return lemming::dataplane::sai::TUNNEL_ATTR_IPSEC_SA_PORT_LIST; + + case SAI_TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP: + return lemming::dataplane::sai:: + TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP; + + case SAI_TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP: + return lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP; + + case SAI_TUNNEL_ATTR_DECAP_QOS_DSCP_TO_TC_MAP: + return lemming::dataplane::sai::TUNNEL_ATTR_DECAP_QOS_DSCP_TO_TC_MAP; + + case SAI_TUNNEL_ATTR_DECAP_QOS_TC_TO_PRIORITY_GROUP_MAP: + return lemming::dataplane::sai:: + TUNNEL_ATTR_DECAP_QOS_TC_TO_PRIORITY_GROUP_MAP; + + case SAI_TUNNEL_ATTR_VXLAN_UDP_SPORT_SECURITY: + return lemming::dataplane::sai::TUNNEL_ATTR_VXLAN_UDP_SPORT_SECURITY; + + default: + return lemming::dataplane::sai::TUNNEL_ATTR_UNSPECIFIED; + } +} +sai_tunnel_attr_t convert_sai_tunnel_attr_t_to_sai( + lemming::dataplane::sai::TunnelAttr val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_ATTR_TYPE: + return SAI_TUNNEL_ATTR_TYPE; + + case lemming::dataplane::sai::TUNNEL_ATTR_UNDERLAY_INTERFACE: + return SAI_TUNNEL_ATTR_UNDERLAY_INTERFACE; + + case lemming::dataplane::sai::TUNNEL_ATTR_OVERLAY_INTERFACE: + return SAI_TUNNEL_ATTR_OVERLAY_INTERFACE; + + case lemming::dataplane::sai::TUNNEL_ATTR_PEER_MODE: + return SAI_TUNNEL_ATTR_PEER_MODE; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_SRC_IP: + return SAI_TUNNEL_ATTR_ENCAP_SRC_IP; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_DST_IP: + return SAI_TUNNEL_ATTR_ENCAP_DST_IP; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_TTL_MODE: + return SAI_TUNNEL_ATTR_ENCAP_TTL_MODE; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_TTL_VAL: + return SAI_TUNNEL_ATTR_ENCAP_TTL_VAL; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_DSCP_MODE: + return SAI_TUNNEL_ATTR_ENCAP_DSCP_MODE; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_DSCP_VAL: + return SAI_TUNNEL_ATTR_ENCAP_DSCP_VAL; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_GRE_KEY_VALID: + return SAI_TUNNEL_ATTR_ENCAP_GRE_KEY_VALID; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_GRE_KEY: + return SAI_TUNNEL_ATTR_ENCAP_GRE_KEY; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_ECN_MODE: + return SAI_TUNNEL_ATTR_ENCAP_ECN_MODE; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_MAPPERS: + return SAI_TUNNEL_ATTR_ENCAP_MAPPERS; + + case lemming::dataplane::sai::TUNNEL_ATTR_DECAP_ECN_MODE: + return SAI_TUNNEL_ATTR_DECAP_ECN_MODE; + + case lemming::dataplane::sai::TUNNEL_ATTR_DECAP_MAPPERS: + return SAI_TUNNEL_ATTR_DECAP_MAPPERS; + + case lemming::dataplane::sai::TUNNEL_ATTR_DECAP_TTL_MODE: + return SAI_TUNNEL_ATTR_DECAP_TTL_MODE; + + case lemming::dataplane::sai::TUNNEL_ATTR_DECAP_DSCP_MODE: + return SAI_TUNNEL_ATTR_DECAP_DSCP_MODE; + + case lemming::dataplane::sai::TUNNEL_ATTR_TERM_TABLE_ENTRY_LIST: + return SAI_TUNNEL_ATTR_TERM_TABLE_ENTRY_LIST; + + case lemming::dataplane::sai::TUNNEL_ATTR_LOOPBACK_PACKET_ACTION: + return SAI_TUNNEL_ATTR_LOOPBACK_PACKET_ACTION; + + case lemming::dataplane::sai::TUNNEL_ATTR_VXLAN_UDP_SPORT_MODE: + return SAI_TUNNEL_ATTR_VXLAN_UDP_SPORT_MODE; + + case lemming::dataplane::sai::TUNNEL_ATTR_VXLAN_UDP_SPORT: + return SAI_TUNNEL_ATTR_VXLAN_UDP_SPORT; + + case lemming::dataplane::sai::TUNNEL_ATTR_VXLAN_UDP_SPORT_MASK: + return SAI_TUNNEL_ATTR_VXLAN_UDP_SPORT_MASK; + + case lemming::dataplane::sai::TUNNEL_ATTR_SA_INDEX: + return SAI_TUNNEL_ATTR_SA_INDEX; + + case lemming::dataplane::sai::TUNNEL_ATTR_IPSEC_SA_PORT_LIST: + return SAI_TUNNEL_ATTR_IPSEC_SA_PORT_LIST; + + case lemming::dataplane::sai:: + TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP: + return SAI_TUNNEL_ATTR_ENCAP_QOS_TC_AND_COLOR_TO_DSCP_MAP; + + case lemming::dataplane::sai::TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP: + return SAI_TUNNEL_ATTR_ENCAP_QOS_TC_TO_QUEUE_MAP; + + case lemming::dataplane::sai::TUNNEL_ATTR_DECAP_QOS_DSCP_TO_TC_MAP: + return SAI_TUNNEL_ATTR_DECAP_QOS_DSCP_TO_TC_MAP; + + case lemming::dataplane::sai:: + TUNNEL_ATTR_DECAP_QOS_TC_TO_PRIORITY_GROUP_MAP: + return SAI_TUNNEL_ATTR_DECAP_QOS_TC_TO_PRIORITY_GROUP_MAP; + + case lemming::dataplane::sai::TUNNEL_ATTR_VXLAN_UDP_SPORT_SECURITY: + return SAI_TUNNEL_ATTR_VXLAN_UDP_SPORT_SECURITY; + + default: + return SAI_TUNNEL_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_tunnel_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelDecapEcnMode +convert_sai_tunnel_decap_ecn_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_DECAP_ECN_MODE_STANDARD: + return lemming::dataplane::sai::TUNNEL_DECAP_ECN_MODE_STANDARD; + + case SAI_TUNNEL_DECAP_ECN_MODE_COPY_FROM_OUTER: + return lemming::dataplane::sai::TUNNEL_DECAP_ECN_MODE_COPY_FROM_OUTER; + + case SAI_TUNNEL_DECAP_ECN_MODE_USER_DEFINED: + return lemming::dataplane::sai::TUNNEL_DECAP_ECN_MODE_USER_DEFINED; + + default: + return lemming::dataplane::sai::TUNNEL_DECAP_ECN_MODE_UNSPECIFIED; + } +} +sai_tunnel_decap_ecn_mode_t convert_sai_tunnel_decap_ecn_mode_t_to_sai( + lemming::dataplane::sai::TunnelDecapEcnMode val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_DECAP_ECN_MODE_STANDARD: + return SAI_TUNNEL_DECAP_ECN_MODE_STANDARD; + + case lemming::dataplane::sai::TUNNEL_DECAP_ECN_MODE_COPY_FROM_OUTER: + return SAI_TUNNEL_DECAP_ECN_MODE_COPY_FROM_OUTER; + + case lemming::dataplane::sai::TUNNEL_DECAP_ECN_MODE_USER_DEFINED: + return SAI_TUNNEL_DECAP_ECN_MODE_USER_DEFINED; + + default: + return SAI_TUNNEL_DECAP_ECN_MODE_STANDARD; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_decap_ecn_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_decap_ecn_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_decap_ecn_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_decap_ecn_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelDscpMode convert_sai_tunnel_dscp_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_DSCP_MODE_UNIFORM_MODEL: + return lemming::dataplane::sai::TUNNEL_DSCP_MODE_UNIFORM_MODEL; + + case SAI_TUNNEL_DSCP_MODE_PIPE_MODEL: + return lemming::dataplane::sai::TUNNEL_DSCP_MODE_PIPE_MODEL; + + default: + return lemming::dataplane::sai::TUNNEL_DSCP_MODE_UNSPECIFIED; + } +} +sai_tunnel_dscp_mode_t convert_sai_tunnel_dscp_mode_t_to_sai( + lemming::dataplane::sai::TunnelDscpMode val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_DSCP_MODE_UNIFORM_MODEL: + return SAI_TUNNEL_DSCP_MODE_UNIFORM_MODEL; + + case lemming::dataplane::sai::TUNNEL_DSCP_MODE_PIPE_MODEL: + return SAI_TUNNEL_DSCP_MODE_PIPE_MODEL; + + default: + return SAI_TUNNEL_DSCP_MODE_UNIFORM_MODEL; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_dscp_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_dscp_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_dscp_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_dscp_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelEncapEcnMode +convert_sai_tunnel_encap_ecn_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_ENCAP_ECN_MODE_STANDARD: + return lemming::dataplane::sai::TUNNEL_ENCAP_ECN_MODE_STANDARD; + + case SAI_TUNNEL_ENCAP_ECN_MODE_USER_DEFINED: + return lemming::dataplane::sai::TUNNEL_ENCAP_ECN_MODE_USER_DEFINED; + + default: + return lemming::dataplane::sai::TUNNEL_ENCAP_ECN_MODE_UNSPECIFIED; + } +} +sai_tunnel_encap_ecn_mode_t convert_sai_tunnel_encap_ecn_mode_t_to_sai( + lemming::dataplane::sai::TunnelEncapEcnMode val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_ENCAP_ECN_MODE_STANDARD: + return SAI_TUNNEL_ENCAP_ECN_MODE_STANDARD; + + case lemming::dataplane::sai::TUNNEL_ENCAP_ECN_MODE_USER_DEFINED: + return SAI_TUNNEL_ENCAP_ECN_MODE_USER_DEFINED; + + default: + return SAI_TUNNEL_ENCAP_ECN_MODE_STANDARD; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_encap_ecn_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_encap_ecn_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_encap_ecn_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_encap_ecn_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelMapAttr convert_sai_tunnel_map_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_MAP_ATTR_TYPE: + return lemming::dataplane::sai::TUNNEL_MAP_ATTR_TYPE; + + case SAI_TUNNEL_MAP_ATTR_ENTRY_LIST: + return lemming::dataplane::sai::TUNNEL_MAP_ATTR_ENTRY_LIST; + + default: + return lemming::dataplane::sai::TUNNEL_MAP_ATTR_UNSPECIFIED; + } +} +sai_tunnel_map_attr_t convert_sai_tunnel_map_attr_t_to_sai( + lemming::dataplane::sai::TunnelMapAttr val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_MAP_ATTR_TYPE: + return SAI_TUNNEL_MAP_ATTR_TYPE; + + case lemming::dataplane::sai::TUNNEL_MAP_ATTR_ENTRY_LIST: + return SAI_TUNNEL_MAP_ATTR_ENTRY_LIST; + + default: + return SAI_TUNNEL_MAP_ATTR_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_map_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_map_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_map_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_map_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelMapEntryAttr +convert_sai_tunnel_map_entry_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_MAP_ENTRY_ATTR_TUNNEL_MAP_TYPE: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_TUNNEL_MAP_TYPE; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_TUNNEL_MAP: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_TUNNEL_MAP; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_OECN_KEY: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_OECN_KEY; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_OECN_VALUE: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_OECN_VALUE; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_UECN_KEY: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_UECN_KEY; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_UECN_VALUE: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_UECN_VALUE; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_VLAN_ID_KEY: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VLAN_ID_KEY; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_VLAN_ID_VALUE: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VLAN_ID_VALUE; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_VNI_ID_KEY: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VNI_ID_KEY; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_VNI_ID_VALUE: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VNI_ID_VALUE; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_BRIDGE_ID_KEY: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_BRIDGE_ID_KEY; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_BRIDGE_ID_VALUE: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_BRIDGE_ID_VALUE; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_VIRTUAL_ROUTER_ID_KEY: + return lemming::dataplane::sai:: + TUNNEL_MAP_ENTRY_ATTR_VIRTUAL_ROUTER_ID_KEY; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_VIRTUAL_ROUTER_ID_VALUE: + return lemming::dataplane::sai:: + TUNNEL_MAP_ENTRY_ATTR_VIRTUAL_ROUTER_ID_VALUE; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_VSID_ID_KEY: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VSID_ID_KEY; + + case SAI_TUNNEL_MAP_ENTRY_ATTR_VSID_ID_VALUE: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VSID_ID_VALUE; + + default: + return lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_tunnel_map_entry_attr_t convert_sai_tunnel_map_entry_attr_t_to_sai( + lemming::dataplane::sai::TunnelMapEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_TUNNEL_MAP_TYPE: + return SAI_TUNNEL_MAP_ENTRY_ATTR_TUNNEL_MAP_TYPE; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_TUNNEL_MAP: + return SAI_TUNNEL_MAP_ENTRY_ATTR_TUNNEL_MAP; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_OECN_KEY: + return SAI_TUNNEL_MAP_ENTRY_ATTR_OECN_KEY; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_OECN_VALUE: + return SAI_TUNNEL_MAP_ENTRY_ATTR_OECN_VALUE; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_UECN_KEY: + return SAI_TUNNEL_MAP_ENTRY_ATTR_UECN_KEY; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_UECN_VALUE: + return SAI_TUNNEL_MAP_ENTRY_ATTR_UECN_VALUE; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VLAN_ID_KEY: + return SAI_TUNNEL_MAP_ENTRY_ATTR_VLAN_ID_KEY; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VLAN_ID_VALUE: + return SAI_TUNNEL_MAP_ENTRY_ATTR_VLAN_ID_VALUE; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VNI_ID_KEY: + return SAI_TUNNEL_MAP_ENTRY_ATTR_VNI_ID_KEY; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VNI_ID_VALUE: + return SAI_TUNNEL_MAP_ENTRY_ATTR_VNI_ID_VALUE; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_BRIDGE_ID_KEY: + return SAI_TUNNEL_MAP_ENTRY_ATTR_BRIDGE_ID_KEY; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_BRIDGE_ID_VALUE: + return SAI_TUNNEL_MAP_ENTRY_ATTR_BRIDGE_ID_VALUE; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VIRTUAL_ROUTER_ID_KEY: + return SAI_TUNNEL_MAP_ENTRY_ATTR_VIRTUAL_ROUTER_ID_KEY; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VIRTUAL_ROUTER_ID_VALUE: + return SAI_TUNNEL_MAP_ENTRY_ATTR_VIRTUAL_ROUTER_ID_VALUE; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VSID_ID_KEY: + return SAI_TUNNEL_MAP_ENTRY_ATTR_VSID_ID_KEY; + + case lemming::dataplane::sai::TUNNEL_MAP_ENTRY_ATTR_VSID_ID_VALUE: + return SAI_TUNNEL_MAP_ENTRY_ATTR_VSID_ID_VALUE; + + default: + return SAI_TUNNEL_MAP_ENTRY_ATTR_TUNNEL_MAP_TYPE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_map_entry_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_map_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_map_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_map_entry_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelMapType convert_sai_tunnel_map_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_MAP_TYPE_OECN_TO_UECN: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_OECN_TO_UECN; + + case SAI_TUNNEL_MAP_TYPE_UECN_OECN_TO_OECN: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_UECN_OECN_TO_OECN; + + case SAI_TUNNEL_MAP_TYPE_VNI_TO_VLAN_ID: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_VNI_TO_VLAN_ID; + + case SAI_TUNNEL_MAP_TYPE_VLAN_ID_TO_VNI: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_VLAN_ID_TO_VNI; + + case SAI_TUNNEL_MAP_TYPE_VNI_TO_BRIDGE_IF: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_VNI_TO_BRIDGE_IF; + + case SAI_TUNNEL_MAP_TYPE_BRIDGE_IF_TO_VNI: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_BRIDGE_IF_TO_VNI; + + case SAI_TUNNEL_MAP_TYPE_VNI_TO_VIRTUAL_ROUTER_ID: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_VNI_TO_VIRTUAL_ROUTER_ID; + + case SAI_TUNNEL_MAP_TYPE_VIRTUAL_ROUTER_ID_TO_VNI: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_VIRTUAL_ROUTER_ID_TO_VNI; + + case SAI_TUNNEL_MAP_TYPE_VSID_TO_VLAN_ID: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_VSID_TO_VLAN_ID; + + case SAI_TUNNEL_MAP_TYPE_VLAN_ID_TO_VSID: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_VLAN_ID_TO_VSID; + + case SAI_TUNNEL_MAP_TYPE_VSID_TO_BRIDGE_IF: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_VSID_TO_BRIDGE_IF; + + case SAI_TUNNEL_MAP_TYPE_BRIDGE_IF_TO_VSID: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_BRIDGE_IF_TO_VSID; + + case SAI_TUNNEL_MAP_TYPE_CUSTOM_RANGE_BASE: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_CUSTOM_RANGE_BASE; + + default: + return lemming::dataplane::sai::TUNNEL_MAP_TYPE_UNSPECIFIED; + } +} +sai_tunnel_map_type_t convert_sai_tunnel_map_type_t_to_sai( + lemming::dataplane::sai::TunnelMapType val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_OECN_TO_UECN: + return SAI_TUNNEL_MAP_TYPE_OECN_TO_UECN; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_UECN_OECN_TO_OECN: + return SAI_TUNNEL_MAP_TYPE_UECN_OECN_TO_OECN; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_VNI_TO_VLAN_ID: + return SAI_TUNNEL_MAP_TYPE_VNI_TO_VLAN_ID; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_VLAN_ID_TO_VNI: + return SAI_TUNNEL_MAP_TYPE_VLAN_ID_TO_VNI; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_VNI_TO_BRIDGE_IF: + return SAI_TUNNEL_MAP_TYPE_VNI_TO_BRIDGE_IF; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_BRIDGE_IF_TO_VNI: + return SAI_TUNNEL_MAP_TYPE_BRIDGE_IF_TO_VNI; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_VNI_TO_VIRTUAL_ROUTER_ID: + return SAI_TUNNEL_MAP_TYPE_VNI_TO_VIRTUAL_ROUTER_ID; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_VIRTUAL_ROUTER_ID_TO_VNI: + return SAI_TUNNEL_MAP_TYPE_VIRTUAL_ROUTER_ID_TO_VNI; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_VSID_TO_VLAN_ID: + return SAI_TUNNEL_MAP_TYPE_VSID_TO_VLAN_ID; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_VLAN_ID_TO_VSID: + return SAI_TUNNEL_MAP_TYPE_VLAN_ID_TO_VSID; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_VSID_TO_BRIDGE_IF: + return SAI_TUNNEL_MAP_TYPE_VSID_TO_BRIDGE_IF; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_BRIDGE_IF_TO_VSID: + return SAI_TUNNEL_MAP_TYPE_BRIDGE_IF_TO_VSID; + + case lemming::dataplane::sai::TUNNEL_MAP_TYPE_CUSTOM_RANGE_BASE: + return SAI_TUNNEL_MAP_TYPE_CUSTOM_RANGE_BASE; + + default: + return SAI_TUNNEL_MAP_TYPE_OECN_TO_UECN; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_map_type_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_map_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_map_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_map_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelPeerMode convert_sai_tunnel_peer_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_PEER_MODE_P2P: + return lemming::dataplane::sai::TUNNEL_PEER_MODE_P2P; + + case SAI_TUNNEL_PEER_MODE_P2MP: + return lemming::dataplane::sai::TUNNEL_PEER_MODE_P2MP; + + default: + return lemming::dataplane::sai::TUNNEL_PEER_MODE_UNSPECIFIED; + } +} +sai_tunnel_peer_mode_t convert_sai_tunnel_peer_mode_t_to_sai( + lemming::dataplane::sai::TunnelPeerMode val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_PEER_MODE_P2P: + return SAI_TUNNEL_PEER_MODE_P2P; + + case lemming::dataplane::sai::TUNNEL_PEER_MODE_P2MP: + return SAI_TUNNEL_PEER_MODE_P2MP; + + default: + return SAI_TUNNEL_PEER_MODE_P2P; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_peer_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_peer_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_peer_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_peer_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelStat convert_sai_tunnel_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_STAT_IN_OCTETS: + return lemming::dataplane::sai::TUNNEL_STAT_IN_OCTETS; + + case SAI_TUNNEL_STAT_IN_PACKETS: + return lemming::dataplane::sai::TUNNEL_STAT_IN_PACKETS; + + case SAI_TUNNEL_STAT_OUT_OCTETS: + return lemming::dataplane::sai::TUNNEL_STAT_OUT_OCTETS; + + case SAI_TUNNEL_STAT_OUT_PACKETS: + return lemming::dataplane::sai::TUNNEL_STAT_OUT_PACKETS; + + default: + return lemming::dataplane::sai::TUNNEL_STAT_UNSPECIFIED; + } +} +sai_tunnel_stat_t convert_sai_tunnel_stat_t_to_sai( + lemming::dataplane::sai::TunnelStat val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_STAT_IN_OCTETS: + return SAI_TUNNEL_STAT_IN_OCTETS; + + case lemming::dataplane::sai::TUNNEL_STAT_IN_PACKETS: + return SAI_TUNNEL_STAT_IN_PACKETS; + + case lemming::dataplane::sai::TUNNEL_STAT_OUT_OCTETS: + return SAI_TUNNEL_STAT_OUT_OCTETS; + + case lemming::dataplane::sai::TUNNEL_STAT_OUT_PACKETS: + return SAI_TUNNEL_STAT_OUT_PACKETS; + + default: + return SAI_TUNNEL_STAT_IN_OCTETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_tunnel_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelTermTableEntryAttr +convert_sai_tunnel_term_table_entry_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_VR_ID: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_VR_ID; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_TYPE: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_TYPE; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP_MASK: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP_MASK; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_SRC_IP: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_SRC_IP; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_SRC_IP_MASK: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_SRC_IP_MASK; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_TUNNEL_TYPE: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_TUNNEL_TYPE; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_ACTION_TUNNEL_ID: + return lemming::dataplane::sai:: + TUNNEL_TERM_TABLE_ENTRY_ATTR_ACTION_TUNNEL_ID; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_IP_ADDR_FAMILY: + return lemming::dataplane::sai:: + TUNNEL_TERM_TABLE_ENTRY_ATTR_IP_ADDR_FAMILY; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_IPSEC_VERIFIED: + return lemming::dataplane::sai:: + TUNNEL_TERM_TABLE_ENTRY_ATTR_IPSEC_VERIFIED; + + default: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_UNSPECIFIED; + } +} +sai_tunnel_term_table_entry_attr_t +convert_sai_tunnel_term_table_entry_attr_t_to_sai( + lemming::dataplane::sai::TunnelTermTableEntryAttr val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_VR_ID: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_VR_ID; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_TYPE: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_TYPE; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP_MASK: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP_MASK; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_SRC_IP: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_SRC_IP; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_SRC_IP_MASK: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_SRC_IP_MASK; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_TUNNEL_TYPE: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_TUNNEL_TYPE; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_ACTION_TUNNEL_ID: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_ACTION_TUNNEL_ID; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_IP_ADDR_FAMILY: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_IP_ADDR_FAMILY; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_ATTR_IPSEC_VERIFIED: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_IPSEC_VERIFIED; + + default: + return SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_VR_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_term_table_entry_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_tunnel_term_table_entry_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_term_table_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_term_table_entry_attr_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelTermTableEntryType +convert_sai_tunnel_term_table_entry_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_P2P: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_TYPE_P2P; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_P2MP: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_TYPE_P2MP; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_MP2P: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_TYPE_MP2P; + + case SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_MP2MP: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_TYPE_MP2MP; + + default: + return lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_TYPE_UNSPECIFIED; + } +} +sai_tunnel_term_table_entry_type_t +convert_sai_tunnel_term_table_entry_type_t_to_sai( + lemming::dataplane::sai::TunnelTermTableEntryType val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_TYPE_P2P: + return SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_P2P; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_TYPE_P2MP: + return SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_P2MP; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_TYPE_MP2P: + return SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_MP2P; + + case lemming::dataplane::sai::TUNNEL_TERM_TABLE_ENTRY_TYPE_MP2MP: + return SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_MP2MP; + + default: + return SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_P2P; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_term_table_entry_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_tunnel_term_table_entry_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_term_table_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_term_table_entry_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelTtlMode convert_sai_tunnel_ttl_mode_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_TTL_MODE_UNIFORM_MODEL: + return lemming::dataplane::sai::TUNNEL_TTL_MODE_UNIFORM_MODEL; + + case SAI_TUNNEL_TTL_MODE_PIPE_MODEL: + return lemming::dataplane::sai::TUNNEL_TTL_MODE_PIPE_MODEL; + + default: + return lemming::dataplane::sai::TUNNEL_TTL_MODE_UNSPECIFIED; + } +} +sai_tunnel_ttl_mode_t convert_sai_tunnel_ttl_mode_t_to_sai( + lemming::dataplane::sai::TunnelTtlMode val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_TTL_MODE_UNIFORM_MODEL: + return SAI_TUNNEL_TTL_MODE_UNIFORM_MODEL; + + case lemming::dataplane::sai::TUNNEL_TTL_MODE_PIPE_MODEL: + return SAI_TUNNEL_TTL_MODE_PIPE_MODEL; + + default: + return SAI_TUNNEL_TTL_MODE_UNIFORM_MODEL; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_ttl_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_ttl_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_ttl_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_ttl_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelType convert_sai_tunnel_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_TYPE_IPINIP: + return lemming::dataplane::sai::TUNNEL_TYPE_IPINIP; + + case SAI_TUNNEL_TYPE_IPINIP_GRE: + return lemming::dataplane::sai::TUNNEL_TYPE_IPINIP_GRE; + + case SAI_TUNNEL_TYPE_VXLAN: + return lemming::dataplane::sai::TUNNEL_TYPE_VXLAN; + + case SAI_TUNNEL_TYPE_MPLS: + return lemming::dataplane::sai::TUNNEL_TYPE_MPLS; + + case SAI_TUNNEL_TYPE_SRV6: + return lemming::dataplane::sai::TUNNEL_TYPE_SRV6; + + case SAI_TUNNEL_TYPE_NVGRE: + return lemming::dataplane::sai::TUNNEL_TYPE_NVGRE; + + case SAI_TUNNEL_TYPE_IPINIP_ESP: + return lemming::dataplane::sai::TUNNEL_TYPE_IPINIP_ESP; + + case SAI_TUNNEL_TYPE_IPINIP_UDP_ESP: + return lemming::dataplane::sai::TUNNEL_TYPE_IPINIP_UDP_ESP; + + case SAI_TUNNEL_TYPE_VXLAN_UDP_ESP: + return lemming::dataplane::sai::TUNNEL_TYPE_VXLAN_UDP_ESP; + + default: + return lemming::dataplane::sai::TUNNEL_TYPE_UNSPECIFIED; + } +} +sai_tunnel_type_t convert_sai_tunnel_type_t_to_sai( + lemming::dataplane::sai::TunnelType val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_TYPE_IPINIP: + return SAI_TUNNEL_TYPE_IPINIP; + + case lemming::dataplane::sai::TUNNEL_TYPE_IPINIP_GRE: + return SAI_TUNNEL_TYPE_IPINIP_GRE; + + case lemming::dataplane::sai::TUNNEL_TYPE_VXLAN: + return SAI_TUNNEL_TYPE_VXLAN; + + case lemming::dataplane::sai::TUNNEL_TYPE_MPLS: + return SAI_TUNNEL_TYPE_MPLS; + + case lemming::dataplane::sai::TUNNEL_TYPE_SRV6: + return SAI_TUNNEL_TYPE_SRV6; + + case lemming::dataplane::sai::TUNNEL_TYPE_NVGRE: + return SAI_TUNNEL_TYPE_NVGRE; + + case lemming::dataplane::sai::TUNNEL_TYPE_IPINIP_ESP: + return SAI_TUNNEL_TYPE_IPINIP_ESP; + + case lemming::dataplane::sai::TUNNEL_TYPE_IPINIP_UDP_ESP: + return SAI_TUNNEL_TYPE_IPINIP_UDP_ESP; + + case lemming::dataplane::sai::TUNNEL_TYPE_VXLAN_UDP_ESP: + return SAI_TUNNEL_TYPE_VXLAN_UDP_ESP; + + default: + return SAI_TUNNEL_TYPE_IPINIP; + } +} + +google::protobuf::RepeatedField convert_list_sai_tunnel_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_tunnel_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::TunnelVxlanUdpSportMode +convert_sai_tunnel_vxlan_udp_sport_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_TUNNEL_VXLAN_UDP_SPORT_MODE_USER_DEFINED: + return lemming::dataplane::sai::TUNNEL_VXLAN_UDP_SPORT_MODE_USER_DEFINED; + + case SAI_TUNNEL_VXLAN_UDP_SPORT_MODE_EPHEMERAL: + return lemming::dataplane::sai::TUNNEL_VXLAN_UDP_SPORT_MODE_EPHEMERAL; + + default: + return lemming::dataplane::sai::TUNNEL_VXLAN_UDP_SPORT_MODE_UNSPECIFIED; + } +} +sai_tunnel_vxlan_udp_sport_mode_t +convert_sai_tunnel_vxlan_udp_sport_mode_t_to_sai( + lemming::dataplane::sai::TunnelVxlanUdpSportMode val) { + switch (val) { + case lemming::dataplane::sai::TUNNEL_VXLAN_UDP_SPORT_MODE_USER_DEFINED: + return SAI_TUNNEL_VXLAN_UDP_SPORT_MODE_USER_DEFINED; + + case lemming::dataplane::sai::TUNNEL_VXLAN_UDP_SPORT_MODE_EPHEMERAL: + return SAI_TUNNEL_VXLAN_UDP_SPORT_MODE_EPHEMERAL; + + default: + return SAI_TUNNEL_VXLAN_UDP_SPORT_MODE_USER_DEFINED; + } +} + +google::protobuf::RepeatedField +convert_list_sai_tunnel_vxlan_udp_sport_mode_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_tunnel_vxlan_udp_sport_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_tunnel_vxlan_udp_sport_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_tunnel_vxlan_udp_sport_mode_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::UdfAttr convert_sai_udf_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_UDF_ATTR_MATCH_ID: + return lemming::dataplane::sai::UDF_ATTR_MATCH_ID; + + case SAI_UDF_ATTR_GROUP_ID: + return lemming::dataplane::sai::UDF_ATTR_GROUP_ID; + + case SAI_UDF_ATTR_BASE: + return lemming::dataplane::sai::UDF_ATTR_BASE; + + case SAI_UDF_ATTR_OFFSET: + return lemming::dataplane::sai::UDF_ATTR_OFFSET; + + case SAI_UDF_ATTR_HASH_MASK: + return lemming::dataplane::sai::UDF_ATTR_HASH_MASK; + + default: + return lemming::dataplane::sai::UDF_ATTR_UNSPECIFIED; + } +} +sai_udf_attr_t convert_sai_udf_attr_t_to_sai( + lemming::dataplane::sai::UdfAttr val) { + switch (val) { + case lemming::dataplane::sai::UDF_ATTR_MATCH_ID: + return SAI_UDF_ATTR_MATCH_ID; + + case lemming::dataplane::sai::UDF_ATTR_GROUP_ID: + return SAI_UDF_ATTR_GROUP_ID; + + case lemming::dataplane::sai::UDF_ATTR_BASE: + return SAI_UDF_ATTR_BASE; + + case lemming::dataplane::sai::UDF_ATTR_OFFSET: + return SAI_UDF_ATTR_OFFSET; + + case lemming::dataplane::sai::UDF_ATTR_HASH_MASK: + return SAI_UDF_ATTR_HASH_MASK; + + default: + return SAI_UDF_ATTR_MATCH_ID; + } +} + +google::protobuf::RepeatedField convert_list_sai_udf_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_udf_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_udf_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_udf_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::UdfBase convert_sai_udf_base_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_UDF_BASE_L2: + return lemming::dataplane::sai::UDF_BASE_L2; + + case SAI_UDF_BASE_L3: + return lemming::dataplane::sai::UDF_BASE_L3; + + case SAI_UDF_BASE_L4: + return lemming::dataplane::sai::UDF_BASE_L4; + + default: + return lemming::dataplane::sai::UDF_BASE_UNSPECIFIED; + } +} +sai_udf_base_t convert_sai_udf_base_t_to_sai( + lemming::dataplane::sai::UdfBase val) { + switch (val) { + case lemming::dataplane::sai::UDF_BASE_L2: + return SAI_UDF_BASE_L2; + + case lemming::dataplane::sai::UDF_BASE_L3: + return SAI_UDF_BASE_L3; + + case lemming::dataplane::sai::UDF_BASE_L4: + return SAI_UDF_BASE_L4; + + default: + return SAI_UDF_BASE_L2; + } +} + +google::protobuf::RepeatedField convert_list_sai_udf_base_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_udf_base_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_udf_base_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_udf_base_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::UdfGroupAttr convert_sai_udf_group_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_UDF_GROUP_ATTR_UDF_LIST: + return lemming::dataplane::sai::UDF_GROUP_ATTR_UDF_LIST; + + case SAI_UDF_GROUP_ATTR_TYPE: + return lemming::dataplane::sai::UDF_GROUP_ATTR_TYPE; + + case SAI_UDF_GROUP_ATTR_LENGTH: + return lemming::dataplane::sai::UDF_GROUP_ATTR_LENGTH; + + default: + return lemming::dataplane::sai::UDF_GROUP_ATTR_UNSPECIFIED; + } +} +sai_udf_group_attr_t convert_sai_udf_group_attr_t_to_sai( + lemming::dataplane::sai::UdfGroupAttr val) { + switch (val) { + case lemming::dataplane::sai::UDF_GROUP_ATTR_UDF_LIST: + return SAI_UDF_GROUP_ATTR_UDF_LIST; + + case lemming::dataplane::sai::UDF_GROUP_ATTR_TYPE: + return SAI_UDF_GROUP_ATTR_TYPE; + + case lemming::dataplane::sai::UDF_GROUP_ATTR_LENGTH: + return SAI_UDF_GROUP_ATTR_LENGTH; + + default: + return SAI_UDF_GROUP_ATTR_UDF_LIST; + } +} + +google::protobuf::RepeatedField convert_list_sai_udf_group_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_udf_group_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_udf_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_udf_group_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::UdfGroupType convert_sai_udf_group_type_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_UDF_GROUP_TYPE_START: + return lemming::dataplane::sai::UDF_GROUP_TYPE_START; + + case SAI_UDF_GROUP_TYPE_HASH: + return lemming::dataplane::sai::UDF_GROUP_TYPE_HASH; + + case SAI_UDF_GROUP_TYPE_END: + return lemming::dataplane::sai::UDF_GROUP_TYPE_END; + + default: + return lemming::dataplane::sai::UDF_GROUP_TYPE_UNSPECIFIED; + } +} +sai_udf_group_type_t convert_sai_udf_group_type_t_to_sai( + lemming::dataplane::sai::UdfGroupType val) { + switch (val) { + case lemming::dataplane::sai::UDF_GROUP_TYPE_START: + return SAI_UDF_GROUP_TYPE_START; + + case lemming::dataplane::sai::UDF_GROUP_TYPE_HASH: + return SAI_UDF_GROUP_TYPE_HASH; + + case lemming::dataplane::sai::UDF_GROUP_TYPE_END: + return SAI_UDF_GROUP_TYPE_END; + + default: + return SAI_UDF_GROUP_TYPE_START; + } +} + +google::protobuf::RepeatedField convert_list_sai_udf_group_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_udf_group_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_udf_group_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_udf_group_type_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::UdfMatchAttr convert_sai_udf_match_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_UDF_MATCH_ATTR_L2_TYPE: + return lemming::dataplane::sai::UDF_MATCH_ATTR_L2_TYPE; + + case SAI_UDF_MATCH_ATTR_L3_TYPE: + return lemming::dataplane::sai::UDF_MATCH_ATTR_L3_TYPE; + + case SAI_UDF_MATCH_ATTR_GRE_TYPE: + return lemming::dataplane::sai::UDF_MATCH_ATTR_GRE_TYPE; + + case SAI_UDF_MATCH_ATTR_PRIORITY: + return lemming::dataplane::sai::UDF_MATCH_ATTR_PRIORITY; + + default: + return lemming::dataplane::sai::UDF_MATCH_ATTR_UNSPECIFIED; + } +} +sai_udf_match_attr_t convert_sai_udf_match_attr_t_to_sai( + lemming::dataplane::sai::UdfMatchAttr val) { + switch (val) { + case lemming::dataplane::sai::UDF_MATCH_ATTR_L2_TYPE: + return SAI_UDF_MATCH_ATTR_L2_TYPE; + + case lemming::dataplane::sai::UDF_MATCH_ATTR_L3_TYPE: + return SAI_UDF_MATCH_ATTR_L3_TYPE; + + case lemming::dataplane::sai::UDF_MATCH_ATTR_GRE_TYPE: + return SAI_UDF_MATCH_ATTR_GRE_TYPE; + + case lemming::dataplane::sai::UDF_MATCH_ATTR_PRIORITY: + return SAI_UDF_MATCH_ATTR_PRIORITY; + + default: + return SAI_UDF_MATCH_ATTR_L2_TYPE; + } +} + +google::protobuf::RepeatedField convert_list_sai_udf_match_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_udf_match_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_udf_match_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_udf_match_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::VirtualRouterAttr +convert_sai_virtual_router_attr_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_VIRTUAL_ROUTER_ATTR_ADMIN_V4_STATE: + return lemming::dataplane::sai::VIRTUAL_ROUTER_ATTR_ADMIN_V4_STATE; + + case SAI_VIRTUAL_ROUTER_ATTR_ADMIN_V6_STATE: + return lemming::dataplane::sai::VIRTUAL_ROUTER_ATTR_ADMIN_V6_STATE; + + case SAI_VIRTUAL_ROUTER_ATTR_SRC_MAC_ADDRESS: + return lemming::dataplane::sai::VIRTUAL_ROUTER_ATTR_SRC_MAC_ADDRESS; + + case SAI_VIRTUAL_ROUTER_ATTR_VIOLATION_TTL1_PACKET_ACTION: + return lemming::dataplane::sai:: + VIRTUAL_ROUTER_ATTR_VIOLATION_TTL1_PACKET_ACTION; + + case SAI_VIRTUAL_ROUTER_ATTR_VIOLATION_IP_OPTIONS_PACKET_ACTION: + return lemming::dataplane::sai:: + VIRTUAL_ROUTER_ATTR_VIOLATION_IP_OPTIONS_PACKET_ACTION; + + case SAI_VIRTUAL_ROUTER_ATTR_UNKNOWN_L3_MULTICAST_PACKET_ACTION: + return lemming::dataplane::sai:: + VIRTUAL_ROUTER_ATTR_UNKNOWN_L3_MULTICAST_PACKET_ACTION; + + case SAI_VIRTUAL_ROUTER_ATTR_LABEL: + return lemming::dataplane::sai::VIRTUAL_ROUTER_ATTR_LABEL; + + default: + return lemming::dataplane::sai::VIRTUAL_ROUTER_ATTR_UNSPECIFIED; + } +} +sai_virtual_router_attr_t convert_sai_virtual_router_attr_t_to_sai( + lemming::dataplane::sai::VirtualRouterAttr val) { + switch (val) { + case lemming::dataplane::sai::VIRTUAL_ROUTER_ATTR_ADMIN_V4_STATE: + return SAI_VIRTUAL_ROUTER_ATTR_ADMIN_V4_STATE; + + case lemming::dataplane::sai::VIRTUAL_ROUTER_ATTR_ADMIN_V6_STATE: + return SAI_VIRTUAL_ROUTER_ATTR_ADMIN_V6_STATE; + + case lemming::dataplane::sai::VIRTUAL_ROUTER_ATTR_SRC_MAC_ADDRESS: + return SAI_VIRTUAL_ROUTER_ATTR_SRC_MAC_ADDRESS; + + case lemming::dataplane::sai:: + VIRTUAL_ROUTER_ATTR_VIOLATION_TTL1_PACKET_ACTION: + return SAI_VIRTUAL_ROUTER_ATTR_VIOLATION_TTL1_PACKET_ACTION; + + case lemming::dataplane::sai:: + VIRTUAL_ROUTER_ATTR_VIOLATION_IP_OPTIONS_PACKET_ACTION: + return SAI_VIRTUAL_ROUTER_ATTR_VIOLATION_IP_OPTIONS_PACKET_ACTION; + + case lemming::dataplane::sai:: + VIRTUAL_ROUTER_ATTR_UNKNOWN_L3_MULTICAST_PACKET_ACTION: + return SAI_VIRTUAL_ROUTER_ATTR_UNKNOWN_L3_MULTICAST_PACKET_ACTION; + + case lemming::dataplane::sai::VIRTUAL_ROUTER_ATTR_LABEL: + return SAI_VIRTUAL_ROUTER_ATTR_LABEL; + + default: + return SAI_VIRTUAL_ROUTER_ATTR_ADMIN_V4_STATE; + } +} + +google::protobuf::RepeatedField +convert_list_sai_virtual_router_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_virtual_router_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_virtual_router_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_virtual_router_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::VlanAttr convert_sai_vlan_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_VLAN_ATTR_VLAN_ID: + return lemming::dataplane::sai::VLAN_ATTR_VLAN_ID; + + case SAI_VLAN_ATTR_MEMBER_LIST: + return lemming::dataplane::sai::VLAN_ATTR_MEMBER_LIST; + + case SAI_VLAN_ATTR_MAX_LEARNED_ADDRESSES: + return lemming::dataplane::sai::VLAN_ATTR_MAX_LEARNED_ADDRESSES; + + case SAI_VLAN_ATTR_STP_INSTANCE: + return lemming::dataplane::sai::VLAN_ATTR_STP_INSTANCE; + + case SAI_VLAN_ATTR_LEARN_DISABLE: + return lemming::dataplane::sai::VLAN_ATTR_LEARN_DISABLE; + + case SAI_VLAN_ATTR_IPV4_MCAST_LOOKUP_KEY_TYPE: + return lemming::dataplane::sai::VLAN_ATTR_IPV4_MCAST_LOOKUP_KEY_TYPE; + + case SAI_VLAN_ATTR_IPV6_MCAST_LOOKUP_KEY_TYPE: + return lemming::dataplane::sai::VLAN_ATTR_IPV6_MCAST_LOOKUP_KEY_TYPE; + + case SAI_VLAN_ATTR_UNKNOWN_NON_IP_MCAST_OUTPUT_GROUP_ID: + return lemming::dataplane::sai:: + VLAN_ATTR_UNKNOWN_NON_IP_MCAST_OUTPUT_GROUP_ID; + + case SAI_VLAN_ATTR_UNKNOWN_IPV4_MCAST_OUTPUT_GROUP_ID: + return lemming::dataplane::sai:: + VLAN_ATTR_UNKNOWN_IPV4_MCAST_OUTPUT_GROUP_ID; + + case SAI_VLAN_ATTR_UNKNOWN_IPV6_MCAST_OUTPUT_GROUP_ID: + return lemming::dataplane::sai:: + VLAN_ATTR_UNKNOWN_IPV6_MCAST_OUTPUT_GROUP_ID; + + case SAI_VLAN_ATTR_UNKNOWN_LINKLOCAL_MCAST_OUTPUT_GROUP_ID: + return lemming::dataplane::sai:: + VLAN_ATTR_UNKNOWN_LINKLOCAL_MCAST_OUTPUT_GROUP_ID; + + case SAI_VLAN_ATTR_INGRESS_ACL: + return lemming::dataplane::sai::VLAN_ATTR_INGRESS_ACL; + + case SAI_VLAN_ATTR_EGRESS_ACL: + return lemming::dataplane::sai::VLAN_ATTR_EGRESS_ACL; + + case SAI_VLAN_ATTR_META_DATA: + return lemming::dataplane::sai::VLAN_ATTR_META_DATA; + + case SAI_VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE: + return lemming::dataplane::sai:: + VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE; + + case SAI_VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_GROUP: + return lemming::dataplane::sai::VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_GROUP; + + case SAI_VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE: + return lemming::dataplane::sai:: + VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE; + + case SAI_VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_GROUP: + return lemming::dataplane::sai::VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_GROUP; + + case SAI_VLAN_ATTR_BROADCAST_FLOOD_CONTROL_TYPE: + return lemming::dataplane::sai::VLAN_ATTR_BROADCAST_FLOOD_CONTROL_TYPE; + + case SAI_VLAN_ATTR_BROADCAST_FLOOD_GROUP: + return lemming::dataplane::sai::VLAN_ATTR_BROADCAST_FLOOD_GROUP; + + case SAI_VLAN_ATTR_CUSTOM_IGMP_SNOOPING_ENABLE: + return lemming::dataplane::sai::VLAN_ATTR_CUSTOM_IGMP_SNOOPING_ENABLE; + + case SAI_VLAN_ATTR_TAM_OBJECT: + return lemming::dataplane::sai::VLAN_ATTR_TAM_OBJECT; + + default: + return lemming::dataplane::sai::VLAN_ATTR_UNSPECIFIED; + } +} +sai_vlan_attr_t convert_sai_vlan_attr_t_to_sai( + lemming::dataplane::sai::VlanAttr val) { + switch (val) { + case lemming::dataplane::sai::VLAN_ATTR_VLAN_ID: + return SAI_VLAN_ATTR_VLAN_ID; + + case lemming::dataplane::sai::VLAN_ATTR_MEMBER_LIST: + return SAI_VLAN_ATTR_MEMBER_LIST; + + case lemming::dataplane::sai::VLAN_ATTR_MAX_LEARNED_ADDRESSES: + return SAI_VLAN_ATTR_MAX_LEARNED_ADDRESSES; + + case lemming::dataplane::sai::VLAN_ATTR_STP_INSTANCE: + return SAI_VLAN_ATTR_STP_INSTANCE; + + case lemming::dataplane::sai::VLAN_ATTR_LEARN_DISABLE: + return SAI_VLAN_ATTR_LEARN_DISABLE; + + case lemming::dataplane::sai::VLAN_ATTR_IPV4_MCAST_LOOKUP_KEY_TYPE: + return SAI_VLAN_ATTR_IPV4_MCAST_LOOKUP_KEY_TYPE; + + case lemming::dataplane::sai::VLAN_ATTR_IPV6_MCAST_LOOKUP_KEY_TYPE: + return SAI_VLAN_ATTR_IPV6_MCAST_LOOKUP_KEY_TYPE; + + case lemming::dataplane::sai:: + VLAN_ATTR_UNKNOWN_NON_IP_MCAST_OUTPUT_GROUP_ID: + return SAI_VLAN_ATTR_UNKNOWN_NON_IP_MCAST_OUTPUT_GROUP_ID; + + case lemming::dataplane::sai::VLAN_ATTR_UNKNOWN_IPV4_MCAST_OUTPUT_GROUP_ID: + return SAI_VLAN_ATTR_UNKNOWN_IPV4_MCAST_OUTPUT_GROUP_ID; + + case lemming::dataplane::sai::VLAN_ATTR_UNKNOWN_IPV6_MCAST_OUTPUT_GROUP_ID: + return SAI_VLAN_ATTR_UNKNOWN_IPV6_MCAST_OUTPUT_GROUP_ID; + + case lemming::dataplane::sai:: + VLAN_ATTR_UNKNOWN_LINKLOCAL_MCAST_OUTPUT_GROUP_ID: + return SAI_VLAN_ATTR_UNKNOWN_LINKLOCAL_MCAST_OUTPUT_GROUP_ID; + + case lemming::dataplane::sai::VLAN_ATTR_INGRESS_ACL: + return SAI_VLAN_ATTR_INGRESS_ACL; + + case lemming::dataplane::sai::VLAN_ATTR_EGRESS_ACL: + return SAI_VLAN_ATTR_EGRESS_ACL; + + case lemming::dataplane::sai::VLAN_ATTR_META_DATA: + return SAI_VLAN_ATTR_META_DATA; + + case lemming::dataplane::sai::VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE: + return SAI_VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE; + + case lemming::dataplane::sai::VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_GROUP: + return SAI_VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_GROUP; + + case lemming::dataplane::sai:: + VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE: + return SAI_VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE; + + case lemming::dataplane::sai::VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_GROUP: + return SAI_VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_GROUP; + + case lemming::dataplane::sai::VLAN_ATTR_BROADCAST_FLOOD_CONTROL_TYPE: + return SAI_VLAN_ATTR_BROADCAST_FLOOD_CONTROL_TYPE; + + case lemming::dataplane::sai::VLAN_ATTR_BROADCAST_FLOOD_GROUP: + return SAI_VLAN_ATTR_BROADCAST_FLOOD_GROUP; + + case lemming::dataplane::sai::VLAN_ATTR_CUSTOM_IGMP_SNOOPING_ENABLE: + return SAI_VLAN_ATTR_CUSTOM_IGMP_SNOOPING_ENABLE; + + case lemming::dataplane::sai::VLAN_ATTR_TAM_OBJECT: + return SAI_VLAN_ATTR_TAM_OBJECT; + + default: + return SAI_VLAN_ATTR_VLAN_ID; + } +} + +google::protobuf::RepeatedField convert_list_sai_vlan_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_vlan_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_vlan_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_vlan_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::VlanFloodControlType +convert_sai_vlan_flood_control_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_VLAN_FLOOD_CONTROL_TYPE_ALL: + return lemming::dataplane::sai::VLAN_FLOOD_CONTROL_TYPE_ALL; + + case SAI_VLAN_FLOOD_CONTROL_TYPE_NONE: + return lemming::dataplane::sai::VLAN_FLOOD_CONTROL_TYPE_NONE; + + case SAI_VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP: + return lemming::dataplane::sai::VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP; + + case SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED: + return lemming::dataplane::sai::VLAN_FLOOD_CONTROL_TYPE_COMBINED; + + default: + return lemming::dataplane::sai::VLAN_FLOOD_CONTROL_TYPE_UNSPECIFIED; + } +} +sai_vlan_flood_control_type_t convert_sai_vlan_flood_control_type_t_to_sai( + lemming::dataplane::sai::VlanFloodControlType val) { + switch (val) { + case lemming::dataplane::sai::VLAN_FLOOD_CONTROL_TYPE_ALL: + return SAI_VLAN_FLOOD_CONTROL_TYPE_ALL; + + case lemming::dataplane::sai::VLAN_FLOOD_CONTROL_TYPE_NONE: + return SAI_VLAN_FLOOD_CONTROL_TYPE_NONE; + + case lemming::dataplane::sai::VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP: + return SAI_VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP; + + case lemming::dataplane::sai::VLAN_FLOOD_CONTROL_TYPE_COMBINED: + return SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED; + + default: + return SAI_VLAN_FLOOD_CONTROL_TYPE_ALL; + } +} + +google::protobuf::RepeatedField +convert_list_sai_vlan_flood_control_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_vlan_flood_control_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_vlan_flood_control_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_vlan_flood_control_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::VlanMcastLookupKeyType +convert_sai_vlan_mcast_lookup_key_type_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_VLAN_MCAST_LOOKUP_KEY_TYPE_MAC_DA: + return lemming::dataplane::sai::VLAN_MCAST_LOOKUP_KEY_TYPE_MAC_DA; + + case SAI_VLAN_MCAST_LOOKUP_KEY_TYPE_XG: + return lemming::dataplane::sai::VLAN_MCAST_LOOKUP_KEY_TYPE_XG; + + case SAI_VLAN_MCAST_LOOKUP_KEY_TYPE_SG: + return lemming::dataplane::sai::VLAN_MCAST_LOOKUP_KEY_TYPE_SG; + + case SAI_VLAN_MCAST_LOOKUP_KEY_TYPE_XG_AND_SG: + return lemming::dataplane::sai::VLAN_MCAST_LOOKUP_KEY_TYPE_XG_AND_SG; + + default: + return lemming::dataplane::sai::VLAN_MCAST_LOOKUP_KEY_TYPE_UNSPECIFIED; + } +} +sai_vlan_mcast_lookup_key_type_t +convert_sai_vlan_mcast_lookup_key_type_t_to_sai( + lemming::dataplane::sai::VlanMcastLookupKeyType val) { + switch (val) { + case lemming::dataplane::sai::VLAN_MCAST_LOOKUP_KEY_TYPE_MAC_DA: + return SAI_VLAN_MCAST_LOOKUP_KEY_TYPE_MAC_DA; + + case lemming::dataplane::sai::VLAN_MCAST_LOOKUP_KEY_TYPE_XG: + return SAI_VLAN_MCAST_LOOKUP_KEY_TYPE_XG; + + case lemming::dataplane::sai::VLAN_MCAST_LOOKUP_KEY_TYPE_SG: + return SAI_VLAN_MCAST_LOOKUP_KEY_TYPE_SG; + + case lemming::dataplane::sai::VLAN_MCAST_LOOKUP_KEY_TYPE_XG_AND_SG: + return SAI_VLAN_MCAST_LOOKUP_KEY_TYPE_XG_AND_SG; + + default: + return SAI_VLAN_MCAST_LOOKUP_KEY_TYPE_MAC_DA; + } +} + +google::protobuf::RepeatedField +convert_list_sai_vlan_mcast_lookup_key_type_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add( + convert_sai_vlan_mcast_lookup_key_type_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_vlan_mcast_lookup_key_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_vlan_mcast_lookup_key_type_t_to_sai( + static_cast( + proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::VlanMemberAttr convert_sai_vlan_member_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_VLAN_MEMBER_ATTR_VLAN_ID: + return lemming::dataplane::sai::VLAN_MEMBER_ATTR_VLAN_ID; + + case SAI_VLAN_MEMBER_ATTR_BRIDGE_PORT_ID: + return lemming::dataplane::sai::VLAN_MEMBER_ATTR_BRIDGE_PORT_ID; + + case SAI_VLAN_MEMBER_ATTR_VLAN_TAGGING_MODE: + return lemming::dataplane::sai::VLAN_MEMBER_ATTR_VLAN_TAGGING_MODE; + + default: + return lemming::dataplane::sai::VLAN_MEMBER_ATTR_UNSPECIFIED; + } +} +sai_vlan_member_attr_t convert_sai_vlan_member_attr_t_to_sai( + lemming::dataplane::sai::VlanMemberAttr val) { + switch (val) { + case lemming::dataplane::sai::VLAN_MEMBER_ATTR_VLAN_ID: + return SAI_VLAN_MEMBER_ATTR_VLAN_ID; + + case lemming::dataplane::sai::VLAN_MEMBER_ATTR_BRIDGE_PORT_ID: + return SAI_VLAN_MEMBER_ATTR_BRIDGE_PORT_ID; + + case lemming::dataplane::sai::VLAN_MEMBER_ATTR_VLAN_TAGGING_MODE: + return SAI_VLAN_MEMBER_ATTR_VLAN_TAGGING_MODE; + + default: + return SAI_VLAN_MEMBER_ATTR_VLAN_ID; + } +} + +google::protobuf::RepeatedField +convert_list_sai_vlan_member_attr_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_vlan_member_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_vlan_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_vlan_member_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::VlanStat convert_sai_vlan_stat_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_VLAN_STAT_IN_OCTETS: + return lemming::dataplane::sai::VLAN_STAT_IN_OCTETS; + + case SAI_VLAN_STAT_IN_PACKETS: + return lemming::dataplane::sai::VLAN_STAT_IN_PACKETS; + + case SAI_VLAN_STAT_IN_UCAST_PKTS: + return lemming::dataplane::sai::VLAN_STAT_IN_UCAST_PKTS; + + case SAI_VLAN_STAT_IN_NON_UCAST_PKTS: + return lemming::dataplane::sai::VLAN_STAT_IN_NON_UCAST_PKTS; + + case SAI_VLAN_STAT_IN_DISCARDS: + return lemming::dataplane::sai::VLAN_STAT_IN_DISCARDS; + + case SAI_VLAN_STAT_IN_ERRORS: + return lemming::dataplane::sai::VLAN_STAT_IN_ERRORS; + + case SAI_VLAN_STAT_IN_UNKNOWN_PROTOS: + return lemming::dataplane::sai::VLAN_STAT_IN_UNKNOWN_PROTOS; + + case SAI_VLAN_STAT_OUT_OCTETS: + return lemming::dataplane::sai::VLAN_STAT_OUT_OCTETS; + + case SAI_VLAN_STAT_OUT_PACKETS: + return lemming::dataplane::sai::VLAN_STAT_OUT_PACKETS; + + case SAI_VLAN_STAT_OUT_UCAST_PKTS: + return lemming::dataplane::sai::VLAN_STAT_OUT_UCAST_PKTS; + + case SAI_VLAN_STAT_OUT_NON_UCAST_PKTS: + return lemming::dataplane::sai::VLAN_STAT_OUT_NON_UCAST_PKTS; + + case SAI_VLAN_STAT_OUT_DISCARDS: + return lemming::dataplane::sai::VLAN_STAT_OUT_DISCARDS; + + case SAI_VLAN_STAT_OUT_ERRORS: + return lemming::dataplane::sai::VLAN_STAT_OUT_ERRORS; + + case SAI_VLAN_STAT_OUT_QLEN: + return lemming::dataplane::sai::VLAN_STAT_OUT_QLEN; + + default: + return lemming::dataplane::sai::VLAN_STAT_UNSPECIFIED; + } +} +sai_vlan_stat_t convert_sai_vlan_stat_t_to_sai( + lemming::dataplane::sai::VlanStat val) { + switch (val) { + case lemming::dataplane::sai::VLAN_STAT_IN_OCTETS: + return SAI_VLAN_STAT_IN_OCTETS; + + case lemming::dataplane::sai::VLAN_STAT_IN_PACKETS: + return SAI_VLAN_STAT_IN_PACKETS; + + case lemming::dataplane::sai::VLAN_STAT_IN_UCAST_PKTS: + return SAI_VLAN_STAT_IN_UCAST_PKTS; + + case lemming::dataplane::sai::VLAN_STAT_IN_NON_UCAST_PKTS: + return SAI_VLAN_STAT_IN_NON_UCAST_PKTS; + + case lemming::dataplane::sai::VLAN_STAT_IN_DISCARDS: + return SAI_VLAN_STAT_IN_DISCARDS; + + case lemming::dataplane::sai::VLAN_STAT_IN_ERRORS: + return SAI_VLAN_STAT_IN_ERRORS; + + case lemming::dataplane::sai::VLAN_STAT_IN_UNKNOWN_PROTOS: + return SAI_VLAN_STAT_IN_UNKNOWN_PROTOS; + + case lemming::dataplane::sai::VLAN_STAT_OUT_OCTETS: + return SAI_VLAN_STAT_OUT_OCTETS; + + case lemming::dataplane::sai::VLAN_STAT_OUT_PACKETS: + return SAI_VLAN_STAT_OUT_PACKETS; + + case lemming::dataplane::sai::VLAN_STAT_OUT_UCAST_PKTS: + return SAI_VLAN_STAT_OUT_UCAST_PKTS; + + case lemming::dataplane::sai::VLAN_STAT_OUT_NON_UCAST_PKTS: + return SAI_VLAN_STAT_OUT_NON_UCAST_PKTS; + + case lemming::dataplane::sai::VLAN_STAT_OUT_DISCARDS: + return SAI_VLAN_STAT_OUT_DISCARDS; + + case lemming::dataplane::sai::VLAN_STAT_OUT_ERRORS: + return SAI_VLAN_STAT_OUT_ERRORS; + + case lemming::dataplane::sai::VLAN_STAT_OUT_QLEN: + return SAI_VLAN_STAT_OUT_QLEN; + + default: + return SAI_VLAN_STAT_IN_OCTETS; + } +} + +google::protobuf::RepeatedField convert_list_sai_vlan_stat_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_vlan_stat_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_vlan_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_vlan_stat_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::VlanTaggingMode +convert_sai_vlan_tagging_mode_t_to_proto(const sai_int32_t val) { + switch (val) { + case SAI_VLAN_TAGGING_MODE_UNTAGGED: + return lemming::dataplane::sai::VLAN_TAGGING_MODE_UNTAGGED; + + case SAI_VLAN_TAGGING_MODE_TAGGED: + return lemming::dataplane::sai::VLAN_TAGGING_MODE_TAGGED; + + case SAI_VLAN_TAGGING_MODE_PRIORITY_TAGGED: + return lemming::dataplane::sai::VLAN_TAGGING_MODE_PRIORITY_TAGGED; + + default: + return lemming::dataplane::sai::VLAN_TAGGING_MODE_UNSPECIFIED; + } +} +sai_vlan_tagging_mode_t convert_sai_vlan_tagging_mode_t_to_sai( + lemming::dataplane::sai::VlanTaggingMode val) { + switch (val) { + case lemming::dataplane::sai::VLAN_TAGGING_MODE_UNTAGGED: + return SAI_VLAN_TAGGING_MODE_UNTAGGED; + + case lemming::dataplane::sai::VLAN_TAGGING_MODE_TAGGED: + return SAI_VLAN_TAGGING_MODE_TAGGED; + + case lemming::dataplane::sai::VLAN_TAGGING_MODE_PRIORITY_TAGGED: + return SAI_VLAN_TAGGING_MODE_PRIORITY_TAGGED; + + default: + return SAI_VLAN_TAGGING_MODE_UNTAGGED; + } +} + +google::protobuf::RepeatedField +convert_list_sai_vlan_tagging_mode_t_to_proto(const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_vlan_tagging_mode_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_vlan_tagging_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_vlan_tagging_mode_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} + +lemming::dataplane::sai::WredAttr convert_sai_wred_attr_t_to_proto( + const sai_int32_t val) { + switch (val) { + case SAI_WRED_ATTR_GREEN_ENABLE: + return lemming::dataplane::sai::WRED_ATTR_GREEN_ENABLE; + + case SAI_WRED_ATTR_GREEN_MIN_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_GREEN_MIN_THRESHOLD; + + case SAI_WRED_ATTR_GREEN_MAX_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_GREEN_MAX_THRESHOLD; + + case SAI_WRED_ATTR_GREEN_DROP_PROBABILITY: + return lemming::dataplane::sai::WRED_ATTR_GREEN_DROP_PROBABILITY; + + case SAI_WRED_ATTR_YELLOW_ENABLE: + return lemming::dataplane::sai::WRED_ATTR_YELLOW_ENABLE; + + case SAI_WRED_ATTR_YELLOW_MIN_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_YELLOW_MIN_THRESHOLD; + + case SAI_WRED_ATTR_YELLOW_MAX_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_YELLOW_MAX_THRESHOLD; + + case SAI_WRED_ATTR_YELLOW_DROP_PROBABILITY: + return lemming::dataplane::sai::WRED_ATTR_YELLOW_DROP_PROBABILITY; + + case SAI_WRED_ATTR_RED_ENABLE: + return lemming::dataplane::sai::WRED_ATTR_RED_ENABLE; + + case SAI_WRED_ATTR_RED_MIN_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_RED_MIN_THRESHOLD; + + case SAI_WRED_ATTR_RED_MAX_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_RED_MAX_THRESHOLD; + + case SAI_WRED_ATTR_RED_DROP_PROBABILITY: + return lemming::dataplane::sai::WRED_ATTR_RED_DROP_PROBABILITY; + + case SAI_WRED_ATTR_WEIGHT: + return lemming::dataplane::sai::WRED_ATTR_WEIGHT; + + case SAI_WRED_ATTR_ECN_MARK_MODE: + return lemming::dataplane::sai::WRED_ATTR_ECN_MARK_MODE; + + case SAI_WRED_ATTR_ECN_GREEN_MIN_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_ECN_GREEN_MIN_THRESHOLD; + + case SAI_WRED_ATTR_ECN_GREEN_MAX_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_ECN_GREEN_MAX_THRESHOLD; + + case SAI_WRED_ATTR_ECN_GREEN_MARK_PROBABILITY: + return lemming::dataplane::sai::WRED_ATTR_ECN_GREEN_MARK_PROBABILITY; + + case SAI_WRED_ATTR_ECN_YELLOW_MIN_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_ECN_YELLOW_MIN_THRESHOLD; + + case SAI_WRED_ATTR_ECN_YELLOW_MAX_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_ECN_YELLOW_MAX_THRESHOLD; + + case SAI_WRED_ATTR_ECN_YELLOW_MARK_PROBABILITY: + return lemming::dataplane::sai::WRED_ATTR_ECN_YELLOW_MARK_PROBABILITY; + + case SAI_WRED_ATTR_ECN_RED_MIN_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_ECN_RED_MIN_THRESHOLD; + + case SAI_WRED_ATTR_ECN_RED_MAX_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_ECN_RED_MAX_THRESHOLD; + + case SAI_WRED_ATTR_ECN_RED_MARK_PROBABILITY: + return lemming::dataplane::sai::WRED_ATTR_ECN_RED_MARK_PROBABILITY; + + case SAI_WRED_ATTR_ECN_COLOR_UNAWARE_MIN_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_ECN_COLOR_UNAWARE_MIN_THRESHOLD; + + case SAI_WRED_ATTR_ECN_COLOR_UNAWARE_MAX_THRESHOLD: + return lemming::dataplane::sai::WRED_ATTR_ECN_COLOR_UNAWARE_MAX_THRESHOLD; + + case SAI_WRED_ATTR_ECN_COLOR_UNAWARE_MARK_PROBABILITY: + return lemming::dataplane::sai:: + WRED_ATTR_ECN_COLOR_UNAWARE_MARK_PROBABILITY; + + default: + return lemming::dataplane::sai::WRED_ATTR_UNSPECIFIED; + } +} +sai_wred_attr_t convert_sai_wred_attr_t_to_sai( + lemming::dataplane::sai::WredAttr val) { + switch (val) { + case lemming::dataplane::sai::WRED_ATTR_GREEN_ENABLE: + return SAI_WRED_ATTR_GREEN_ENABLE; + + case lemming::dataplane::sai::WRED_ATTR_GREEN_MIN_THRESHOLD: + return SAI_WRED_ATTR_GREEN_MIN_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_GREEN_MAX_THRESHOLD: + return SAI_WRED_ATTR_GREEN_MAX_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_GREEN_DROP_PROBABILITY: + return SAI_WRED_ATTR_GREEN_DROP_PROBABILITY; + + case lemming::dataplane::sai::WRED_ATTR_YELLOW_ENABLE: + return SAI_WRED_ATTR_YELLOW_ENABLE; + + case lemming::dataplane::sai::WRED_ATTR_YELLOW_MIN_THRESHOLD: + return SAI_WRED_ATTR_YELLOW_MIN_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_YELLOW_MAX_THRESHOLD: + return SAI_WRED_ATTR_YELLOW_MAX_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_YELLOW_DROP_PROBABILITY: + return SAI_WRED_ATTR_YELLOW_DROP_PROBABILITY; + + case lemming::dataplane::sai::WRED_ATTR_RED_ENABLE: + return SAI_WRED_ATTR_RED_ENABLE; + + case lemming::dataplane::sai::WRED_ATTR_RED_MIN_THRESHOLD: + return SAI_WRED_ATTR_RED_MIN_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_RED_MAX_THRESHOLD: + return SAI_WRED_ATTR_RED_MAX_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_RED_DROP_PROBABILITY: + return SAI_WRED_ATTR_RED_DROP_PROBABILITY; + + case lemming::dataplane::sai::WRED_ATTR_WEIGHT: + return SAI_WRED_ATTR_WEIGHT; + + case lemming::dataplane::sai::WRED_ATTR_ECN_MARK_MODE: + return SAI_WRED_ATTR_ECN_MARK_MODE; + + case lemming::dataplane::sai::WRED_ATTR_ECN_GREEN_MIN_THRESHOLD: + return SAI_WRED_ATTR_ECN_GREEN_MIN_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_ECN_GREEN_MAX_THRESHOLD: + return SAI_WRED_ATTR_ECN_GREEN_MAX_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_ECN_GREEN_MARK_PROBABILITY: + return SAI_WRED_ATTR_ECN_GREEN_MARK_PROBABILITY; + + case lemming::dataplane::sai::WRED_ATTR_ECN_YELLOW_MIN_THRESHOLD: + return SAI_WRED_ATTR_ECN_YELLOW_MIN_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_ECN_YELLOW_MAX_THRESHOLD: + return SAI_WRED_ATTR_ECN_YELLOW_MAX_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_ECN_YELLOW_MARK_PROBABILITY: + return SAI_WRED_ATTR_ECN_YELLOW_MARK_PROBABILITY; + + case lemming::dataplane::sai::WRED_ATTR_ECN_RED_MIN_THRESHOLD: + return SAI_WRED_ATTR_ECN_RED_MIN_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_ECN_RED_MAX_THRESHOLD: + return SAI_WRED_ATTR_ECN_RED_MAX_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_ECN_RED_MARK_PROBABILITY: + return SAI_WRED_ATTR_ECN_RED_MARK_PROBABILITY; + + case lemming::dataplane::sai::WRED_ATTR_ECN_COLOR_UNAWARE_MIN_THRESHOLD: + return SAI_WRED_ATTR_ECN_COLOR_UNAWARE_MIN_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_ECN_COLOR_UNAWARE_MAX_THRESHOLD: + return SAI_WRED_ATTR_ECN_COLOR_UNAWARE_MAX_THRESHOLD; + + case lemming::dataplane::sai::WRED_ATTR_ECN_COLOR_UNAWARE_MARK_PROBABILITY: + return SAI_WRED_ATTR_ECN_COLOR_UNAWARE_MARK_PROBABILITY; + + default: + return SAI_WRED_ATTR_GREEN_ENABLE; + } +} + +google::protobuf::RepeatedField convert_list_sai_wred_attr_t_to_proto( + const sai_s32_list_t &list) { + google::protobuf::RepeatedField proto_list; + for (int i = 0; i < list.count; i++) { + proto_list.Add(convert_sai_wred_attr_t_to_proto(list.list[i])); + } + return proto_list; +} +void convert_list_sai_wred_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count) { + for (int i = 0; i < proto_list.size(); i++) { + list[i] = convert_sai_wred_attr_t_to_sai( + static_cast(proto_list[i])); + } + *count = proto_list.size(); +} diff --git a/dataplane/standalone/saiserver/enum.h b/dataplane/standalone/saiserver/enum.h new file mode 100644 index 00000000..6bb5b448 --- /dev/null +++ b/dataplane/standalone/saiserver/enum.h @@ -0,0 +1,3002 @@ + +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_ENUM_H_ +#define DATAPLANE_STANDALONE_SAI_ENUM_H_ + +#include "dataplane/proto/sai/acl.pb.h" +#include "dataplane/proto/sai/bfd.pb.h" +#include "dataplane/proto/sai/bmtor.pb.h" +#include "dataplane/proto/sai/bridge.pb.h" +#include "dataplane/proto/sai/buffer.pb.h" +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/counter.pb.h" +#include "dataplane/proto/sai/debug_counter.pb.h" +#include "dataplane/proto/sai/dtel.pb.h" +#include "dataplane/proto/sai/fdb.pb.h" +#include "dataplane/proto/sai/generic_programmable.pb.h" +#include "dataplane/proto/sai/hash.pb.h" +#include "dataplane/proto/sai/hostif.pb.h" +#include "dataplane/proto/sai/ipmc.pb.h" +#include "dataplane/proto/sai/ipmc_group.pb.h" +#include "dataplane/proto/sai/ipsec.pb.h" +#include "dataplane/proto/sai/isolation_group.pb.h" +#include "dataplane/proto/sai/l2mc.pb.h" +#include "dataplane/proto/sai/l2mc_group.pb.h" +#include "dataplane/proto/sai/lag.pb.h" +#include "dataplane/proto/sai/macsec.pb.h" +#include "dataplane/proto/sai/mcast_fdb.pb.h" +#include "dataplane/proto/sai/mirror.pb.h" +#include "dataplane/proto/sai/mpls.pb.h" +#include "dataplane/proto/sai/my_mac.pb.h" +#include "dataplane/proto/sai/nat.pb.h" +#include "dataplane/proto/sai/neighbor.pb.h" +#include "dataplane/proto/sai/next_hop.pb.h" +#include "dataplane/proto/sai/next_hop_group.pb.h" +#include "dataplane/proto/sai/policer.pb.h" +#include "dataplane/proto/sai/port.pb.h" +#include "dataplane/proto/sai/qos_map.pb.h" +#include "dataplane/proto/sai/queue.pb.h" +#include "dataplane/proto/sai/route.pb.h" +#include "dataplane/proto/sai/router_interface.pb.h" +#include "dataplane/proto/sai/rpf_group.pb.h" +#include "dataplane/proto/sai/samplepacket.pb.h" +#include "dataplane/proto/sai/scheduler.pb.h" +#include "dataplane/proto/sai/scheduler_group.pb.h" +#include "dataplane/proto/sai/srv6.pb.h" +#include "dataplane/proto/sai/stp.pb.h" +#include "dataplane/proto/sai/switch.pb.h" +#include "dataplane/proto/sai/system_port.pb.h" +#include "dataplane/proto/sai/tam.pb.h" +#include "dataplane/proto/sai/tunnel.pb.h" +#include "dataplane/proto/sai/udf.pb.h" +#include "dataplane/proto/sai/virtual_router.pb.h" +#include "dataplane/proto/sai/vlan.pb.h" +#include "dataplane/proto/sai/wred.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +lemming::dataplane::sai::AclActionType convert_sai_acl_action_type_t_to_proto( + const sai_int32_t val); +sai_acl_action_type_t convert_sai_acl_action_type_t_to_sai( + lemming::dataplane::sai::AclActionType val); +google::protobuf::RepeatedField +convert_list_sai_acl_action_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_acl_action_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclBindPointType +convert_sai_acl_bind_point_type_t_to_proto(const sai_int32_t val); +sai_acl_bind_point_type_t convert_sai_acl_bind_point_type_t_to_sai( + lemming::dataplane::sai::AclBindPointType val); +google::protobuf::RepeatedField +convert_list_sai_acl_bind_point_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_acl_bind_point_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclCounterAttr convert_sai_acl_counter_attr_t_to_proto( + const sai_int32_t val); +sai_acl_counter_attr_t convert_sai_acl_counter_attr_t_to_sai( + lemming::dataplane::sai::AclCounterAttr val); +google::protobuf::RepeatedField +convert_list_sai_acl_counter_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_acl_counter_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclDtelFlowOp convert_sai_acl_dtel_flow_op_t_to_proto( + const sai_int32_t val); +sai_acl_dtel_flow_op_t convert_sai_acl_dtel_flow_op_t_to_sai( + lemming::dataplane::sai::AclDtelFlowOp val); +google::protobuf::RepeatedField +convert_list_sai_acl_dtel_flow_op_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_acl_dtel_flow_op_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclEntryAttr convert_sai_acl_entry_attr_t_to_proto( + const sai_int32_t val); +sai_acl_entry_attr_t convert_sai_acl_entry_attr_t_to_sai( + lemming::dataplane::sai::AclEntryAttr val); +google::protobuf::RepeatedField convert_list_sai_acl_entry_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_acl_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclIpFrag convert_sai_acl_ip_frag_t_to_proto( + const sai_int32_t val); +sai_acl_ip_frag_t convert_sai_acl_ip_frag_t_to_sai( + lemming::dataplane::sai::AclIpFrag val); +google::protobuf::RepeatedField convert_list_sai_acl_ip_frag_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_acl_ip_frag_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclIpType convert_sai_acl_ip_type_t_to_proto( + const sai_int32_t val); +sai_acl_ip_type_t convert_sai_acl_ip_type_t_to_sai( + lemming::dataplane::sai::AclIpType val); +google::protobuf::RepeatedField convert_list_sai_acl_ip_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_acl_ip_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclRangeAttr convert_sai_acl_range_attr_t_to_proto( + const sai_int32_t val); +sai_acl_range_attr_t convert_sai_acl_range_attr_t_to_sai( + lemming::dataplane::sai::AclRangeAttr val); +google::protobuf::RepeatedField convert_list_sai_acl_range_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_acl_range_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclRangeType convert_sai_acl_range_type_t_to_proto( + const sai_int32_t val); +sai_acl_range_type_t convert_sai_acl_range_type_t_to_sai( + lemming::dataplane::sai::AclRangeType val); +google::protobuf::RepeatedField convert_list_sai_acl_range_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_acl_range_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclStage convert_sai_acl_stage_t_to_proto( + const sai_int32_t val); +sai_acl_stage_t convert_sai_acl_stage_t_to_sai( + lemming::dataplane::sai::AclStage val); +google::protobuf::RepeatedField convert_list_sai_acl_stage_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_acl_stage_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclTableAttr convert_sai_acl_table_attr_t_to_proto( + const sai_int32_t val); +sai_acl_table_attr_t convert_sai_acl_table_attr_t_to_sai( + lemming::dataplane::sai::AclTableAttr val); +google::protobuf::RepeatedField convert_list_sai_acl_table_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_acl_table_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclTableGroupAttr +convert_sai_acl_table_group_attr_t_to_proto(const sai_int32_t val); +sai_acl_table_group_attr_t convert_sai_acl_table_group_attr_t_to_sai( + lemming::dataplane::sai::AclTableGroupAttr val); +google::protobuf::RepeatedField +convert_list_sai_acl_table_group_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_acl_table_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclTableGroupMemberAttr +convert_sai_acl_table_group_member_attr_t_to_proto(const sai_int32_t val); +sai_acl_table_group_member_attr_t +convert_sai_acl_table_group_member_attr_t_to_sai( + lemming::dataplane::sai::AclTableGroupMemberAttr val); +google::protobuf::RepeatedField +convert_list_sai_acl_table_group_member_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_acl_table_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::AclTableGroupType +convert_sai_acl_table_group_type_t_to_proto(const sai_int32_t val); +sai_acl_table_group_type_t convert_sai_acl_table_group_type_t_to_sai( + lemming::dataplane::sai::AclTableGroupType val); +google::protobuf::RepeatedField +convert_list_sai_acl_table_group_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_acl_table_group_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::ApiExtensions convert_sai_api_extensions_t_to_proto( + const sai_int32_t val); +sai_api_extensions_t convert_sai_api_extensions_t_to_sai( + lemming::dataplane::sai::ApiExtensions val); +google::protobuf::RepeatedField convert_list_sai_api_extensions_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_api_extensions_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::Api convert_sai_api_t_to_proto(const sai_int32_t val); +sai_api_t convert_sai_api_t_to_sai(lemming::dataplane::sai::Api val); +google::protobuf::RepeatedField convert_list_sai_api_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_api_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BfdEncapsulationType +convert_sai_bfd_encapsulation_type_t_to_proto(const sai_int32_t val); +sai_bfd_encapsulation_type_t convert_sai_bfd_encapsulation_type_t_to_sai( + lemming::dataplane::sai::BfdEncapsulationType val); +google::protobuf::RepeatedField +convert_list_sai_bfd_encapsulation_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_bfd_encapsulation_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BfdSessionAttr convert_sai_bfd_session_attr_t_to_proto( + const sai_int32_t val); +sai_bfd_session_attr_t convert_sai_bfd_session_attr_t_to_sai( + lemming::dataplane::sai::BfdSessionAttr val); +google::protobuf::RepeatedField +convert_list_sai_bfd_session_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_bfd_session_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BfdSessionOffloadType +convert_sai_bfd_session_offload_type_t_to_proto(const sai_int32_t val); +sai_bfd_session_offload_type_t convert_sai_bfd_session_offload_type_t_to_sai( + lemming::dataplane::sai::BfdSessionOffloadType val); +google::protobuf::RepeatedField +convert_list_sai_bfd_session_offload_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_bfd_session_offload_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BfdSessionStat convert_sai_bfd_session_stat_t_to_proto( + const sai_int32_t val); +sai_bfd_session_stat_t convert_sai_bfd_session_stat_t_to_sai( + lemming::dataplane::sai::BfdSessionStat val); +google::protobuf::RepeatedField +convert_list_sai_bfd_session_stat_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_bfd_session_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BfdSessionState +convert_sai_bfd_session_state_t_to_proto(const sai_int32_t val); +sai_bfd_session_state_t convert_sai_bfd_session_state_t_to_sai( + lemming::dataplane::sai::BfdSessionState val); +google::protobuf::RepeatedField +convert_list_sai_bfd_session_state_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_bfd_session_state_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BfdSessionType convert_sai_bfd_session_type_t_to_proto( + const sai_int32_t val); +sai_bfd_session_type_t convert_sai_bfd_session_type_t_to_sai( + lemming::dataplane::sai::BfdSessionType val); +google::protobuf::RepeatedField +convert_list_sai_bfd_session_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_bfd_session_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BridgeAttr convert_sai_bridge_attr_t_to_proto( + const sai_int32_t val); +sai_bridge_attr_t convert_sai_bridge_attr_t_to_sai( + lemming::dataplane::sai::BridgeAttr val); +google::protobuf::RepeatedField convert_list_sai_bridge_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_bridge_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BridgeFloodControlType +convert_sai_bridge_flood_control_type_t_to_proto(const sai_int32_t val); +sai_bridge_flood_control_type_t convert_sai_bridge_flood_control_type_t_to_sai( + lemming::dataplane::sai::BridgeFloodControlType val); +google::protobuf::RepeatedField +convert_list_sai_bridge_flood_control_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_bridge_flood_control_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BridgePortAttr convert_sai_bridge_port_attr_t_to_proto( + const sai_int32_t val); +sai_bridge_port_attr_t convert_sai_bridge_port_attr_t_to_sai( + lemming::dataplane::sai::BridgePortAttr val); +google::protobuf::RepeatedField +convert_list_sai_bridge_port_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_bridge_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BridgePortFdbLearningMode +convert_sai_bridge_port_fdb_learning_mode_t_to_proto(const sai_int32_t val); +sai_bridge_port_fdb_learning_mode_t +convert_sai_bridge_port_fdb_learning_mode_t_to_sai( + lemming::dataplane::sai::BridgePortFdbLearningMode val); +google::protobuf::RepeatedField +convert_list_sai_bridge_port_fdb_learning_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_bridge_port_fdb_learning_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BridgePortStat convert_sai_bridge_port_stat_t_to_proto( + const sai_int32_t val); +sai_bridge_port_stat_t convert_sai_bridge_port_stat_t_to_sai( + lemming::dataplane::sai::BridgePortStat val); +google::protobuf::RepeatedField +convert_list_sai_bridge_port_stat_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_bridge_port_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BridgePortTaggingMode +convert_sai_bridge_port_tagging_mode_t_to_proto(const sai_int32_t val); +sai_bridge_port_tagging_mode_t convert_sai_bridge_port_tagging_mode_t_to_sai( + lemming::dataplane::sai::BridgePortTaggingMode val); +google::protobuf::RepeatedField +convert_list_sai_bridge_port_tagging_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_bridge_port_tagging_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BridgePortType convert_sai_bridge_port_type_t_to_proto( + const sai_int32_t val); +sai_bridge_port_type_t convert_sai_bridge_port_type_t_to_sai( + lemming::dataplane::sai::BridgePortType val); +google::protobuf::RepeatedField +convert_list_sai_bridge_port_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_bridge_port_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BridgeStat convert_sai_bridge_stat_t_to_proto( + const sai_int32_t val); +sai_bridge_stat_t convert_sai_bridge_stat_t_to_sai( + lemming::dataplane::sai::BridgeStat val); +google::protobuf::RepeatedField convert_list_sai_bridge_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_bridge_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BridgeType convert_sai_bridge_type_t_to_proto( + const sai_int32_t val); +sai_bridge_type_t convert_sai_bridge_type_t_to_sai( + lemming::dataplane::sai::BridgeType val); +google::protobuf::RepeatedField convert_list_sai_bridge_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_bridge_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BufferPoolAttr convert_sai_buffer_pool_attr_t_to_proto( + const sai_int32_t val); +sai_buffer_pool_attr_t convert_sai_buffer_pool_attr_t_to_sai( + lemming::dataplane::sai::BufferPoolAttr val); +google::protobuf::RepeatedField +convert_list_sai_buffer_pool_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_buffer_pool_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BufferPoolStat convert_sai_buffer_pool_stat_t_to_proto( + const sai_int32_t val); +sai_buffer_pool_stat_t convert_sai_buffer_pool_stat_t_to_sai( + lemming::dataplane::sai::BufferPoolStat val); +google::protobuf::RepeatedField +convert_list_sai_buffer_pool_stat_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_buffer_pool_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BufferPoolThresholdMode +convert_sai_buffer_pool_threshold_mode_t_to_proto(const sai_int32_t val); +sai_buffer_pool_threshold_mode_t +convert_sai_buffer_pool_threshold_mode_t_to_sai( + lemming::dataplane::sai::BufferPoolThresholdMode val); +google::protobuf::RepeatedField +convert_list_sai_buffer_pool_threshold_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_buffer_pool_threshold_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BufferPoolType convert_sai_buffer_pool_type_t_to_proto( + const sai_int32_t val); +sai_buffer_pool_type_t convert_sai_buffer_pool_type_t_to_sai( + lemming::dataplane::sai::BufferPoolType val); +google::protobuf::RepeatedField +convert_list_sai_buffer_pool_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_buffer_pool_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BufferProfileAttr +convert_sai_buffer_profile_attr_t_to_proto(const sai_int32_t val); +sai_buffer_profile_attr_t convert_sai_buffer_profile_attr_t_to_sai( + lemming::dataplane::sai::BufferProfileAttr val); +google::protobuf::RepeatedField +convert_list_sai_buffer_profile_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_buffer_profile_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BufferProfileThresholdMode +convert_sai_buffer_profile_threshold_mode_t_to_proto(const sai_int32_t val); +sai_buffer_profile_threshold_mode_t +convert_sai_buffer_profile_threshold_mode_t_to_sai( + lemming::dataplane::sai::BufferProfileThresholdMode val); +google::protobuf::RepeatedField +convert_list_sai_buffer_profile_threshold_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_buffer_profile_threshold_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::BulkOpErrorMode +convert_sai_bulk_op_error_mode_t_to_proto(const sai_int32_t val); +sai_bulk_op_error_mode_t convert_sai_bulk_op_error_mode_t_to_sai( + lemming::dataplane::sai::BulkOpErrorMode val); +google::protobuf::RepeatedField +convert_list_sai_bulk_op_error_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_bulk_op_error_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::CommonApi convert_sai_common_api_t_to_proto( + const sai_int32_t val); +sai_common_api_t convert_sai_common_api_t_to_sai( + lemming::dataplane::sai::CommonApi val); +google::protobuf::RepeatedField convert_list_sai_common_api_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_common_api_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::CounterAttr convert_sai_counter_attr_t_to_proto( + const sai_int32_t val); +sai_counter_attr_t convert_sai_counter_attr_t_to_sai( + lemming::dataplane::sai::CounterAttr val); +google::protobuf::RepeatedField convert_list_sai_counter_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_counter_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::CounterStat convert_sai_counter_stat_t_to_proto( + const sai_int32_t val); +sai_counter_stat_t convert_sai_counter_stat_t_to_sai( + lemming::dataplane::sai::CounterStat val); +google::protobuf::RepeatedField convert_list_sai_counter_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_counter_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::CounterType convert_sai_counter_type_t_to_proto( + const sai_int32_t val); +sai_counter_type_t convert_sai_counter_type_t_to_sai( + lemming::dataplane::sai::CounterType val); +google::protobuf::RepeatedField convert_list_sai_counter_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_counter_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::DebugCounterAttr +convert_sai_debug_counter_attr_t_to_proto(const sai_int32_t val); +sai_debug_counter_attr_t convert_sai_debug_counter_attr_t_to_sai( + lemming::dataplane::sai::DebugCounterAttr val); +google::protobuf::RepeatedField +convert_list_sai_debug_counter_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_debug_counter_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::DebugCounterBindMethod +convert_sai_debug_counter_bind_method_t_to_proto(const sai_int32_t val); +sai_debug_counter_bind_method_t convert_sai_debug_counter_bind_method_t_to_sai( + lemming::dataplane::sai::DebugCounterBindMethod val); +google::protobuf::RepeatedField +convert_list_sai_debug_counter_bind_method_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_debug_counter_bind_method_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::DebugCounterType +convert_sai_debug_counter_type_t_to_proto(const sai_int32_t val); +sai_debug_counter_type_t convert_sai_debug_counter_type_t_to_sai( + lemming::dataplane::sai::DebugCounterType val); +google::protobuf::RepeatedField +convert_list_sai_debug_counter_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_debug_counter_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::DtelAttr convert_sai_dtel_attr_t_to_proto( + const sai_int32_t val); +sai_dtel_attr_t convert_sai_dtel_attr_t_to_sai( + lemming::dataplane::sai::DtelAttr val); +google::protobuf::RepeatedField convert_list_sai_dtel_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_dtel_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::DtelEventAttr convert_sai_dtel_event_attr_t_to_proto( + const sai_int32_t val); +sai_dtel_event_attr_t convert_sai_dtel_event_attr_t_to_sai( + lemming::dataplane::sai::DtelEventAttr val); +google::protobuf::RepeatedField +convert_list_sai_dtel_event_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_dtel_event_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::DtelEventType convert_sai_dtel_event_type_t_to_proto( + const sai_int32_t val); +sai_dtel_event_type_t convert_sai_dtel_event_type_t_to_sai( + lemming::dataplane::sai::DtelEventType val); +google::protobuf::RepeatedField +convert_list_sai_dtel_event_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_dtel_event_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::DtelIntSessionAttr +convert_sai_dtel_int_session_attr_t_to_proto(const sai_int32_t val); +sai_dtel_int_session_attr_t convert_sai_dtel_int_session_attr_t_to_sai( + lemming::dataplane::sai::DtelIntSessionAttr val); +google::protobuf::RepeatedField +convert_list_sai_dtel_int_session_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_dtel_int_session_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::DtelQueueReportAttr +convert_sai_dtel_queue_report_attr_t_to_proto(const sai_int32_t val); +sai_dtel_queue_report_attr_t convert_sai_dtel_queue_report_attr_t_to_sai( + lemming::dataplane::sai::DtelQueueReportAttr val); +google::protobuf::RepeatedField +convert_list_sai_dtel_queue_report_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_dtel_queue_report_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::DtelReportSessionAttr +convert_sai_dtel_report_session_attr_t_to_proto(const sai_int32_t val); +sai_dtel_report_session_attr_t convert_sai_dtel_report_session_attr_t_to_sai( + lemming::dataplane::sai::DtelReportSessionAttr val); +google::protobuf::RepeatedField +convert_list_sai_dtel_report_session_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_dtel_report_session_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::EcnMarkMode convert_sai_ecn_mark_mode_t_to_proto( + const sai_int32_t val); +sai_ecn_mark_mode_t convert_sai_ecn_mark_mode_t_to_sai( + lemming::dataplane::sai::EcnMarkMode val); +google::protobuf::RepeatedField convert_list_sai_ecn_mark_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_ecn_mark_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::ErspanEncapsulationType +convert_sai_erspan_encapsulation_type_t_to_proto(const sai_int32_t val); +sai_erspan_encapsulation_type_t convert_sai_erspan_encapsulation_type_t_to_sai( + lemming::dataplane::sai::ErspanEncapsulationType val); +google::protobuf::RepeatedField +convert_list_sai_erspan_encapsulation_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_erspan_encapsulation_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::FdbEntryAttr convert_sai_fdb_entry_attr_t_to_proto( + const sai_int32_t val); +sai_fdb_entry_attr_t convert_sai_fdb_entry_attr_t_to_sai( + lemming::dataplane::sai::FdbEntryAttr val); +google::protobuf::RepeatedField convert_list_sai_fdb_entry_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_fdb_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::FdbEntryType convert_sai_fdb_entry_type_t_to_proto( + const sai_int32_t val); +sai_fdb_entry_type_t convert_sai_fdb_entry_type_t_to_sai( + lemming::dataplane::sai::FdbEntryType val); +google::protobuf::RepeatedField convert_list_sai_fdb_entry_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_fdb_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::FdbEvent convert_sai_fdb_event_t_to_proto( + const sai_int32_t val); +sai_fdb_event_t convert_sai_fdb_event_t_to_sai( + lemming::dataplane::sai::FdbEvent val); +google::protobuf::RepeatedField convert_list_sai_fdb_event_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_fdb_event_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::FdbFlushEntryType +convert_sai_fdb_flush_entry_type_t_to_proto(const sai_int32_t val); +sai_fdb_flush_entry_type_t convert_sai_fdb_flush_entry_type_t_to_sai( + lemming::dataplane::sai::FdbFlushEntryType val); +google::protobuf::RepeatedField +convert_list_sai_fdb_flush_entry_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_fdb_flush_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::FineGrainedHashFieldAttr +convert_sai_fine_grained_hash_field_attr_t_to_proto(const sai_int32_t val); +sai_fine_grained_hash_field_attr_t +convert_sai_fine_grained_hash_field_attr_t_to_sai( + lemming::dataplane::sai::FineGrainedHashFieldAttr val); +google::protobuf::RepeatedField +convert_list_sai_fine_grained_hash_field_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_fine_grained_hash_field_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::GenericProgrammableAttr +convert_sai_generic_programmable_attr_t_to_proto(const sai_int32_t val); +sai_generic_programmable_attr_t convert_sai_generic_programmable_attr_t_to_sai( + lemming::dataplane::sai::GenericProgrammableAttr val); +google::protobuf::RepeatedField +convert_list_sai_generic_programmable_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_generic_programmable_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HashAlgorithm convert_sai_hash_algorithm_t_to_proto( + const sai_int32_t val); +sai_hash_algorithm_t convert_sai_hash_algorithm_t_to_sai( + lemming::dataplane::sai::HashAlgorithm val); +google::protobuf::RepeatedField convert_list_sai_hash_algorithm_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_hash_algorithm_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HashAttr convert_sai_hash_attr_t_to_proto( + const sai_int32_t val); +sai_hash_attr_t convert_sai_hash_attr_t_to_sai( + lemming::dataplane::sai::HashAttr val); +google::protobuf::RepeatedField convert_list_sai_hash_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_hash_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifAttr convert_sai_hostif_attr_t_to_proto( + const sai_int32_t val); +sai_hostif_attr_t convert_sai_hostif_attr_t_to_sai( + lemming::dataplane::sai::HostifAttr val); +google::protobuf::RepeatedField convert_list_sai_hostif_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_hostif_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifTableEntryAttr +convert_sai_hostif_table_entry_attr_t_to_proto(const sai_int32_t val); +sai_hostif_table_entry_attr_t convert_sai_hostif_table_entry_attr_t_to_sai( + lemming::dataplane::sai::HostifTableEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_hostif_table_entry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_hostif_table_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifTableEntryChannelType +convert_sai_hostif_table_entry_channel_type_t_to_proto(const sai_int32_t val); +sai_hostif_table_entry_channel_type_t +convert_sai_hostif_table_entry_channel_type_t_to_sai( + lemming::dataplane::sai::HostifTableEntryChannelType val); +google::protobuf::RepeatedField +convert_list_sai_hostif_table_entry_channel_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_hostif_table_entry_channel_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifTableEntryType +convert_sai_hostif_table_entry_type_t_to_proto(const sai_int32_t val); +sai_hostif_table_entry_type_t convert_sai_hostif_table_entry_type_t_to_sai( + lemming::dataplane::sai::HostifTableEntryType val); +google::protobuf::RepeatedField +convert_list_sai_hostif_table_entry_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_hostif_table_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifTrapAttr convert_sai_hostif_trap_attr_t_to_proto( + const sai_int32_t val); +sai_hostif_trap_attr_t convert_sai_hostif_trap_attr_t_to_sai( + lemming::dataplane::sai::HostifTrapAttr val); +google::protobuf::RepeatedField +convert_list_sai_hostif_trap_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_hostif_trap_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifTrapGroupAttr +convert_sai_hostif_trap_group_attr_t_to_proto(const sai_int32_t val); +sai_hostif_trap_group_attr_t convert_sai_hostif_trap_group_attr_t_to_sai( + lemming::dataplane::sai::HostifTrapGroupAttr val); +google::protobuf::RepeatedField +convert_list_sai_hostif_trap_group_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_hostif_trap_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifTrapType convert_sai_hostif_trap_type_t_to_proto( + const sai_int32_t val); +sai_hostif_trap_type_t convert_sai_hostif_trap_type_t_to_sai( + lemming::dataplane::sai::HostifTrapType val); +google::protobuf::RepeatedField +convert_list_sai_hostif_trap_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_hostif_trap_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifTxType convert_sai_hostif_tx_type_t_to_proto( + const sai_int32_t val); +sai_hostif_tx_type_t convert_sai_hostif_tx_type_t_to_sai( + lemming::dataplane::sai::HostifTxType val); +google::protobuf::RepeatedField convert_list_sai_hostif_tx_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_hostif_tx_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifType convert_sai_hostif_type_t_to_proto( + const sai_int32_t val); +sai_hostif_type_t convert_sai_hostif_type_t_to_sai( + lemming::dataplane::sai::HostifType val); +google::protobuf::RepeatedField convert_list_sai_hostif_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_hostif_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifUserDefinedTrapAttr +convert_sai_hostif_user_defined_trap_attr_t_to_proto(const sai_int32_t val); +sai_hostif_user_defined_trap_attr_t +convert_sai_hostif_user_defined_trap_attr_t_to_sai( + lemming::dataplane::sai::HostifUserDefinedTrapAttr val); +google::protobuf::RepeatedField +convert_list_sai_hostif_user_defined_trap_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_hostif_user_defined_trap_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifUserDefinedTrapType +convert_sai_hostif_user_defined_trap_type_t_to_proto(const sai_int32_t val); +sai_hostif_user_defined_trap_type_t +convert_sai_hostif_user_defined_trap_type_t_to_sai( + lemming::dataplane::sai::HostifUserDefinedTrapType val); +google::protobuf::RepeatedField +convert_list_sai_hostif_user_defined_trap_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_hostif_user_defined_trap_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::HostifVlanTag convert_sai_hostif_vlan_tag_t_to_proto( + const sai_int32_t val); +sai_hostif_vlan_tag_t convert_sai_hostif_vlan_tag_t_to_sai( + lemming::dataplane::sai::HostifVlanTag val); +google::protobuf::RepeatedField +convert_list_sai_hostif_vlan_tag_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_hostif_vlan_tag_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::InDropReason convert_sai_in_drop_reason_t_to_proto( + const sai_int32_t val); +sai_in_drop_reason_t convert_sai_in_drop_reason_t_to_sai( + lemming::dataplane::sai::InDropReason val); +google::protobuf::RepeatedField convert_list_sai_in_drop_reason_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_in_drop_reason_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IngressPriorityGroupAttr +convert_sai_ingress_priority_group_attr_t_to_proto(const sai_int32_t val); +sai_ingress_priority_group_attr_t +convert_sai_ingress_priority_group_attr_t_to_sai( + lemming::dataplane::sai::IngressPriorityGroupAttr val); +google::protobuf::RepeatedField +convert_list_sai_ingress_priority_group_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_ingress_priority_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IngressPriorityGroupStat +convert_sai_ingress_priority_group_stat_t_to_proto(const sai_int32_t val); +sai_ingress_priority_group_stat_t +convert_sai_ingress_priority_group_stat_t_to_sai( + lemming::dataplane::sai::IngressPriorityGroupStat val); +google::protobuf::RepeatedField +convert_list_sai_ingress_priority_group_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_ingress_priority_group_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::InsegEntryAttr convert_sai_inseg_entry_attr_t_to_proto( + const sai_int32_t val); +sai_inseg_entry_attr_t convert_sai_inseg_entry_attr_t_to_sai( + lemming::dataplane::sai::InsegEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_inseg_entry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_inseg_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::InsegEntryPopQosMode +convert_sai_inseg_entry_pop_qos_mode_t_to_proto(const sai_int32_t val); +sai_inseg_entry_pop_qos_mode_t convert_sai_inseg_entry_pop_qos_mode_t_to_sai( + lemming::dataplane::sai::InsegEntryPopQosMode val); +google::protobuf::RepeatedField +convert_list_sai_inseg_entry_pop_qos_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_inseg_entry_pop_qos_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::InsegEntryPopTtlMode +convert_sai_inseg_entry_pop_ttl_mode_t_to_proto(const sai_int32_t val); +sai_inseg_entry_pop_ttl_mode_t convert_sai_inseg_entry_pop_ttl_mode_t_to_sai( + lemming::dataplane::sai::InsegEntryPopTtlMode val); +google::protobuf::RepeatedField +convert_list_sai_inseg_entry_pop_ttl_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_inseg_entry_pop_ttl_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::InsegEntryPscType +convert_sai_inseg_entry_psc_type_t_to_proto(const sai_int32_t val); +sai_inseg_entry_psc_type_t convert_sai_inseg_entry_psc_type_t_to_sai( + lemming::dataplane::sai::InsegEntryPscType val); +google::protobuf::RepeatedField +convert_list_sai_inseg_entry_psc_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_inseg_entry_psc_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpAddrFamily convert_sai_ip_addr_family_t_to_proto( + const sai_int32_t val); +sai_ip_addr_family_t convert_sai_ip_addr_family_t_to_sai( + lemming::dataplane::sai::IpAddrFamily val); +google::protobuf::RepeatedField convert_list_sai_ip_addr_family_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_ip_addr_family_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpmcEntryAttr convert_sai_ipmc_entry_attr_t_to_proto( + const sai_int32_t val); +sai_ipmc_entry_attr_t convert_sai_ipmc_entry_attr_t_to_sai( + lemming::dataplane::sai::IpmcEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_ipmc_entry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_ipmc_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpmcEntryType convert_sai_ipmc_entry_type_t_to_proto( + const sai_int32_t val); +sai_ipmc_entry_type_t convert_sai_ipmc_entry_type_t_to_sai( + lemming::dataplane::sai::IpmcEntryType val); +google::protobuf::RepeatedField +convert_list_sai_ipmc_entry_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_ipmc_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpmcGroupAttr convert_sai_ipmc_group_attr_t_to_proto( + const sai_int32_t val); +sai_ipmc_group_attr_t convert_sai_ipmc_group_attr_t_to_sai( + lemming::dataplane::sai::IpmcGroupAttr val); +google::protobuf::RepeatedField +convert_list_sai_ipmc_group_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_ipmc_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpmcGroupMemberAttr +convert_sai_ipmc_group_member_attr_t_to_proto(const sai_int32_t val); +sai_ipmc_group_member_attr_t convert_sai_ipmc_group_member_attr_t_to_sai( + lemming::dataplane::sai::IpmcGroupMemberAttr val); +google::protobuf::RepeatedField +convert_list_sai_ipmc_group_member_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_ipmc_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpsecAttr convert_sai_ipsec_attr_t_to_proto( + const sai_int32_t val); +sai_ipsec_attr_t convert_sai_ipsec_attr_t_to_sai( + lemming::dataplane::sai::IpsecAttr val); +google::protobuf::RepeatedField convert_list_sai_ipsec_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_ipsec_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpsecCipher convert_sai_ipsec_cipher_t_to_proto( + const sai_int32_t val); +sai_ipsec_cipher_t convert_sai_ipsec_cipher_t_to_sai( + lemming::dataplane::sai::IpsecCipher val); +google::protobuf::RepeatedField convert_list_sai_ipsec_cipher_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_ipsec_cipher_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpsecDirection convert_sai_ipsec_direction_t_to_proto( + const sai_int32_t val); +sai_ipsec_direction_t convert_sai_ipsec_direction_t_to_sai( + lemming::dataplane::sai::IpsecDirection val); +google::protobuf::RepeatedField +convert_list_sai_ipsec_direction_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_ipsec_direction_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpsecPortAttr convert_sai_ipsec_port_attr_t_to_proto( + const sai_int32_t val); +sai_ipsec_port_attr_t convert_sai_ipsec_port_attr_t_to_sai( + lemming::dataplane::sai::IpsecPortAttr val); +google::protobuf::RepeatedField +convert_list_sai_ipsec_port_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_ipsec_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpsecPortStat convert_sai_ipsec_port_stat_t_to_proto( + const sai_int32_t val); +sai_ipsec_port_stat_t convert_sai_ipsec_port_stat_t_to_sai( + lemming::dataplane::sai::IpsecPortStat val); +google::protobuf::RepeatedField +convert_list_sai_ipsec_port_stat_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_ipsec_port_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpsecSaAttr convert_sai_ipsec_sa_attr_t_to_proto( + const sai_int32_t val); +sai_ipsec_sa_attr_t convert_sai_ipsec_sa_attr_t_to_sai( + lemming::dataplane::sai::IpsecSaAttr val); +google::protobuf::RepeatedField convert_list_sai_ipsec_sa_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_ipsec_sa_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpsecSaOctetCountStatus +convert_sai_ipsec_sa_octet_count_status_t_to_proto(const sai_int32_t val); +sai_ipsec_sa_octet_count_status_t +convert_sai_ipsec_sa_octet_count_status_t_to_sai( + lemming::dataplane::sai::IpsecSaOctetCountStatus val); +google::protobuf::RepeatedField +convert_list_sai_ipsec_sa_octet_count_status_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_ipsec_sa_octet_count_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IpsecSaStat convert_sai_ipsec_sa_stat_t_to_proto( + const sai_int32_t val); +sai_ipsec_sa_stat_t convert_sai_ipsec_sa_stat_t_to_sai( + lemming::dataplane::sai::IpsecSaStat val); +google::protobuf::RepeatedField convert_list_sai_ipsec_sa_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_ipsec_sa_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IsolationGroupAttr +convert_sai_isolation_group_attr_t_to_proto(const sai_int32_t val); +sai_isolation_group_attr_t convert_sai_isolation_group_attr_t_to_sai( + lemming::dataplane::sai::IsolationGroupAttr val); +google::protobuf::RepeatedField +convert_list_sai_isolation_group_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_isolation_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IsolationGroupMemberAttr +convert_sai_isolation_group_member_attr_t_to_proto(const sai_int32_t val); +sai_isolation_group_member_attr_t +convert_sai_isolation_group_member_attr_t_to_sai( + lemming::dataplane::sai::IsolationGroupMemberAttr val); +google::protobuf::RepeatedField +convert_list_sai_isolation_group_member_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_isolation_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::IsolationGroupType +convert_sai_isolation_group_type_t_to_proto(const sai_int32_t val); +sai_isolation_group_type_t convert_sai_isolation_group_type_t_to_sai( + lemming::dataplane::sai::IsolationGroupType val); +google::protobuf::RepeatedField +convert_list_sai_isolation_group_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_isolation_group_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::L2mcEntryAttr convert_sai_l2mc_entry_attr_t_to_proto( + const sai_int32_t val); +sai_l2mc_entry_attr_t convert_sai_l2mc_entry_attr_t_to_sai( + lemming::dataplane::sai::L2mcEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_l2mc_entry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_l2mc_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::L2mcEntryType convert_sai_l2mc_entry_type_t_to_proto( + const sai_int32_t val); +sai_l2mc_entry_type_t convert_sai_l2mc_entry_type_t_to_sai( + lemming::dataplane::sai::L2mcEntryType val); +google::protobuf::RepeatedField +convert_list_sai_l2mc_entry_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_l2mc_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::L2mcGroupAttr convert_sai_l2mc_group_attr_t_to_proto( + const sai_int32_t val); +sai_l2mc_group_attr_t convert_sai_l2mc_group_attr_t_to_sai( + lemming::dataplane::sai::L2mcGroupAttr val); +google::protobuf::RepeatedField +convert_list_sai_l2mc_group_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_l2mc_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::L2mcGroupMemberAttr +convert_sai_l2mc_group_member_attr_t_to_proto(const sai_int32_t val); +sai_l2mc_group_member_attr_t convert_sai_l2mc_group_member_attr_t_to_sai( + lemming::dataplane::sai::L2mcGroupMemberAttr val); +google::protobuf::RepeatedField +convert_list_sai_l2mc_group_member_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_l2mc_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::LagAttr convert_sai_lag_attr_t_to_proto( + const sai_int32_t val); +sai_lag_attr_t convert_sai_lag_attr_t_to_sai( + lemming::dataplane::sai::LagAttr val); +google::protobuf::RepeatedField convert_list_sai_lag_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_lag_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::LagMemberAttr convert_sai_lag_member_attr_t_to_proto( + const sai_int32_t val); +sai_lag_member_attr_t convert_sai_lag_member_attr_t_to_sai( + lemming::dataplane::sai::LagMemberAttr val); +google::protobuf::RepeatedField +convert_list_sai_lag_member_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_lag_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::LogLevel convert_sai_log_level_t_to_proto( + const sai_int32_t val); +sai_log_level_t convert_sai_log_level_t_to_sai( + lemming::dataplane::sai::LogLevel val); +google::protobuf::RepeatedField convert_list_sai_log_level_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_log_level_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecAttr convert_sai_macsec_attr_t_to_proto( + const sai_int32_t val); +sai_macsec_attr_t convert_sai_macsec_attr_t_to_sai( + lemming::dataplane::sai::MacsecAttr val); +google::protobuf::RepeatedField convert_list_sai_macsec_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_macsec_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecCipherSuite +convert_sai_macsec_cipher_suite_t_to_proto(const sai_int32_t val); +sai_macsec_cipher_suite_t convert_sai_macsec_cipher_suite_t_to_sai( + lemming::dataplane::sai::MacsecCipherSuite val); +google::protobuf::RepeatedField +convert_list_sai_macsec_cipher_suite_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_macsec_cipher_suite_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecDirection +convert_sai_macsec_direction_t_to_proto(const sai_int32_t val); +sai_macsec_direction_t convert_sai_macsec_direction_t_to_sai( + lemming::dataplane::sai::MacsecDirection val); +google::protobuf::RepeatedField +convert_list_sai_macsec_direction_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_macsec_direction_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecFlowAttr convert_sai_macsec_flow_attr_t_to_proto( + const sai_int32_t val); +sai_macsec_flow_attr_t convert_sai_macsec_flow_attr_t_to_sai( + lemming::dataplane::sai::MacsecFlowAttr val); +google::protobuf::RepeatedField +convert_list_sai_macsec_flow_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_macsec_flow_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecFlowStat convert_sai_macsec_flow_stat_t_to_proto( + const sai_int32_t val); +sai_macsec_flow_stat_t convert_sai_macsec_flow_stat_t_to_sai( + lemming::dataplane::sai::MacsecFlowStat val); +google::protobuf::RepeatedField +convert_list_sai_macsec_flow_stat_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_macsec_flow_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecMaxSecureAssociationsPerSc +convert_sai_macsec_max_secure_associations_per_sc_t_to_proto( + const sai_int32_t val); +sai_macsec_max_secure_associations_per_sc_t +convert_sai_macsec_max_secure_associations_per_sc_t_to_sai( + lemming::dataplane::sai::MacsecMaxSecureAssociationsPerSc val); +google::protobuf::RepeatedField +convert_list_sai_macsec_max_secure_associations_per_sc_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_macsec_max_secure_associations_per_sc_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecPortAttr convert_sai_macsec_port_attr_t_to_proto( + const sai_int32_t val); +sai_macsec_port_attr_t convert_sai_macsec_port_attr_t_to_sai( + lemming::dataplane::sai::MacsecPortAttr val); +google::protobuf::RepeatedField +convert_list_sai_macsec_port_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_macsec_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecPortStat convert_sai_macsec_port_stat_t_to_proto( + const sai_int32_t val); +sai_macsec_port_stat_t convert_sai_macsec_port_stat_t_to_sai( + lemming::dataplane::sai::MacsecPortStat val); +google::protobuf::RepeatedField +convert_list_sai_macsec_port_stat_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_macsec_port_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecSaAttr convert_sai_macsec_sa_attr_t_to_proto( + const sai_int32_t val); +sai_macsec_sa_attr_t convert_sai_macsec_sa_attr_t_to_sai( + lemming::dataplane::sai::MacsecSaAttr val); +google::protobuf::RepeatedField convert_list_sai_macsec_sa_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_macsec_sa_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecSaStat convert_sai_macsec_sa_stat_t_to_proto( + const sai_int32_t val); +sai_macsec_sa_stat_t convert_sai_macsec_sa_stat_t_to_sai( + lemming::dataplane::sai::MacsecSaStat val); +google::protobuf::RepeatedField convert_list_sai_macsec_sa_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_macsec_sa_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecScAttr convert_sai_macsec_sc_attr_t_to_proto( + const sai_int32_t val); +sai_macsec_sc_attr_t convert_sai_macsec_sc_attr_t_to_sai( + lemming::dataplane::sai::MacsecScAttr val); +google::protobuf::RepeatedField convert_list_sai_macsec_sc_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_macsec_sc_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MacsecScStat convert_sai_macsec_sc_stat_t_to_proto( + const sai_int32_t val); +sai_macsec_sc_stat_t convert_sai_macsec_sc_stat_t_to_sai( + lemming::dataplane::sai::MacsecScStat val); +google::protobuf::RepeatedField convert_list_sai_macsec_sc_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_macsec_sc_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::McastFdbEntryAttr +convert_sai_mcast_fdb_entry_attr_t_to_proto(const sai_int32_t val); +sai_mcast_fdb_entry_attr_t convert_sai_mcast_fdb_entry_attr_t_to_sai( + lemming::dataplane::sai::McastFdbEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_mcast_fdb_entry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_mcast_fdb_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MeterType convert_sai_meter_type_t_to_proto( + const sai_int32_t val); +sai_meter_type_t convert_sai_meter_type_t_to_sai( + lemming::dataplane::sai::MeterType val); +google::protobuf::RepeatedField convert_list_sai_meter_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_meter_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MirrorSessionAttr +convert_sai_mirror_session_attr_t_to_proto(const sai_int32_t val); +sai_mirror_session_attr_t convert_sai_mirror_session_attr_t_to_sai( + lemming::dataplane::sai::MirrorSessionAttr val); +google::protobuf::RepeatedField +convert_list_sai_mirror_session_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_mirror_session_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MirrorSessionCongestionMode +convert_sai_mirror_session_congestion_mode_t_to_proto(const sai_int32_t val); +sai_mirror_session_congestion_mode_t +convert_sai_mirror_session_congestion_mode_t_to_sai( + lemming::dataplane::sai::MirrorSessionCongestionMode val); +google::protobuf::RepeatedField +convert_list_sai_mirror_session_congestion_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_mirror_session_congestion_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MirrorSessionType +convert_sai_mirror_session_type_t_to_proto(const sai_int32_t val); +sai_mirror_session_type_t convert_sai_mirror_session_type_t_to_sai( + lemming::dataplane::sai::MirrorSessionType val); +google::protobuf::RepeatedField +convert_list_sai_mirror_session_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_mirror_session_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MyMacAttr convert_sai_my_mac_attr_t_to_proto( + const sai_int32_t val); +sai_my_mac_attr_t convert_sai_my_mac_attr_t_to_sai( + lemming::dataplane::sai::MyMacAttr val); +google::protobuf::RepeatedField convert_list_sai_my_mac_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_my_mac_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MySidEntryAttr +convert_sai_my_sid_entry_attr_t_to_proto(const sai_int32_t val); +sai_my_sid_entry_attr_t convert_sai_my_sid_entry_attr_t_to_sai( + lemming::dataplane::sai::MySidEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_my_sid_entry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_my_sid_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MySidEntryEndpointBehaviorFlavor +convert_sai_my_sid_entry_endpoint_behavior_flavor_t_to_proto( + const sai_int32_t val); +sai_my_sid_entry_endpoint_behavior_flavor_t +convert_sai_my_sid_entry_endpoint_behavior_flavor_t_to_sai( + lemming::dataplane::sai::MySidEntryEndpointBehaviorFlavor val); +google::protobuf::RepeatedField +convert_list_sai_my_sid_entry_endpoint_behavior_flavor_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_my_sid_entry_endpoint_behavior_flavor_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::MySidEntryEndpointBehavior +convert_sai_my_sid_entry_endpoint_behavior_t_to_proto(const sai_int32_t val); +sai_my_sid_entry_endpoint_behavior_t +convert_sai_my_sid_entry_endpoint_behavior_t_to_sai( + lemming::dataplane::sai::MySidEntryEndpointBehavior val); +google::protobuf::RepeatedField +convert_list_sai_my_sid_entry_endpoint_behavior_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_my_sid_entry_endpoint_behavior_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NatEntryAttr convert_sai_nat_entry_attr_t_to_proto( + const sai_int32_t val); +sai_nat_entry_attr_t convert_sai_nat_entry_attr_t_to_sai( + lemming::dataplane::sai::NatEntryAttr val); +google::protobuf::RepeatedField convert_list_sai_nat_entry_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_nat_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NatEvent convert_sai_nat_event_t_to_proto( + const sai_int32_t val); +sai_nat_event_t convert_sai_nat_event_t_to_sai( + lemming::dataplane::sai::NatEvent val); +google::protobuf::RepeatedField convert_list_sai_nat_event_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_nat_event_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NatType convert_sai_nat_type_t_to_proto( + const sai_int32_t val); +sai_nat_type_t convert_sai_nat_type_t_to_sai( + lemming::dataplane::sai::NatType val); +google::protobuf::RepeatedField convert_list_sai_nat_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_nat_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NatZoneCounterAttr +convert_sai_nat_zone_counter_attr_t_to_proto(const sai_int32_t val); +sai_nat_zone_counter_attr_t convert_sai_nat_zone_counter_attr_t_to_sai( + lemming::dataplane::sai::NatZoneCounterAttr val); +google::protobuf::RepeatedField +convert_list_sai_nat_zone_counter_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_nat_zone_counter_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NativeHashField +convert_sai_native_hash_field_t_to_proto(const sai_int32_t val); +sai_native_hash_field_t convert_sai_native_hash_field_t_to_sai( + lemming::dataplane::sai::NativeHashField val); +google::protobuf::RepeatedField +convert_list_sai_native_hash_field_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_native_hash_field_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NeighborEntryAttr +convert_sai_neighbor_entry_attr_t_to_proto(const sai_int32_t val); +sai_neighbor_entry_attr_t convert_sai_neighbor_entry_attr_t_to_sai( + lemming::dataplane::sai::NeighborEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_neighbor_entry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_neighbor_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NextHopAttr convert_sai_next_hop_attr_t_to_proto( + const sai_int32_t val); +sai_next_hop_attr_t convert_sai_next_hop_attr_t_to_sai( + lemming::dataplane::sai::NextHopAttr val); +google::protobuf::RepeatedField convert_list_sai_next_hop_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_next_hop_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NextHopGroupAttr +convert_sai_next_hop_group_attr_t_to_proto(const sai_int32_t val); +sai_next_hop_group_attr_t convert_sai_next_hop_group_attr_t_to_sai( + lemming::dataplane::sai::NextHopGroupAttr val); +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_next_hop_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NextHopGroupMapAttr +convert_sai_next_hop_group_map_attr_t_to_proto(const sai_int32_t val); +sai_next_hop_group_map_attr_t convert_sai_next_hop_group_map_attr_t_to_sai( + lemming::dataplane::sai::NextHopGroupMapAttr val); +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_map_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_next_hop_group_map_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NextHopGroupMapType +convert_sai_next_hop_group_map_type_t_to_proto(const sai_int32_t val); +sai_next_hop_group_map_type_t convert_sai_next_hop_group_map_type_t_to_sai( + lemming::dataplane::sai::NextHopGroupMapType val); +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_map_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_next_hop_group_map_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NextHopGroupMemberAttr +convert_sai_next_hop_group_member_attr_t_to_proto(const sai_int32_t val); +sai_next_hop_group_member_attr_t +convert_sai_next_hop_group_member_attr_t_to_sai( + lemming::dataplane::sai::NextHopGroupMemberAttr val); +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_member_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_next_hop_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NextHopGroupMemberConfiguredRole +convert_sai_next_hop_group_member_configured_role_t_to_proto( + const sai_int32_t val); +sai_next_hop_group_member_configured_role_t +convert_sai_next_hop_group_member_configured_role_t_to_sai( + lemming::dataplane::sai::NextHopGroupMemberConfiguredRole val); +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_member_configured_role_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_next_hop_group_member_configured_role_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NextHopGroupMemberObservedRole +convert_sai_next_hop_group_member_observed_role_t_to_proto( + const sai_int32_t val); +sai_next_hop_group_member_observed_role_t +convert_sai_next_hop_group_member_observed_role_t_to_sai( + lemming::dataplane::sai::NextHopGroupMemberObservedRole val); +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_member_observed_role_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_next_hop_group_member_observed_role_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NextHopGroupType +convert_sai_next_hop_group_type_t_to_proto(const sai_int32_t val); +sai_next_hop_group_type_t convert_sai_next_hop_group_type_t_to_sai( + lemming::dataplane::sai::NextHopGroupType val); +google::protobuf::RepeatedField +convert_list_sai_next_hop_group_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_next_hop_group_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::NextHopType convert_sai_next_hop_type_t_to_proto( + const sai_int32_t val); +sai_next_hop_type_t convert_sai_next_hop_type_t_to_sai( + lemming::dataplane::sai::NextHopType val); +google::protobuf::RepeatedField convert_list_sai_next_hop_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_next_hop_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::ObjectStage convert_sai_object_stage_t_to_proto( + const sai_int32_t val); +sai_object_stage_t convert_sai_object_stage_t_to_sai( + lemming::dataplane::sai::ObjectStage val); +google::protobuf::RepeatedField convert_list_sai_object_stage_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_object_stage_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::ObjectTypeExtensions +convert_sai_object_type_extensions_t_to_proto(const sai_int32_t val); +sai_object_type_extensions_t convert_sai_object_type_extensions_t_to_sai( + lemming::dataplane::sai::ObjectTypeExtensions val); +google::protobuf::RepeatedField +convert_list_sai_object_type_extensions_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_object_type_extensions_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::ObjectType convert_sai_object_type_t_to_proto( + const sai_int32_t val); +sai_object_type_t convert_sai_object_type_t_to_sai( + lemming::dataplane::sai::ObjectType val); +google::protobuf::RepeatedField convert_list_sai_object_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_object_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::OutDropReason convert_sai_out_drop_reason_t_to_proto( + const sai_int32_t val); +sai_out_drop_reason_t convert_sai_out_drop_reason_t_to_sai( + lemming::dataplane::sai::OutDropReason val); +google::protobuf::RepeatedField +convert_list_sai_out_drop_reason_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_out_drop_reason_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::OutsegExpMode convert_sai_outseg_exp_mode_t_to_proto( + const sai_int32_t val); +sai_outseg_exp_mode_t convert_sai_outseg_exp_mode_t_to_sai( + lemming::dataplane::sai::OutsegExpMode val); +google::protobuf::RepeatedField +convert_list_sai_outseg_exp_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_outseg_exp_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::OutsegTtlMode convert_sai_outseg_ttl_mode_t_to_proto( + const sai_int32_t val); +sai_outseg_ttl_mode_t convert_sai_outseg_ttl_mode_t_to_sai( + lemming::dataplane::sai::OutsegTtlMode val); +google::protobuf::RepeatedField +convert_list_sai_outseg_ttl_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_outseg_ttl_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::OutsegType convert_sai_outseg_type_t_to_proto( + const sai_int32_t val); +sai_outseg_type_t convert_sai_outseg_type_t_to_sai( + lemming::dataplane::sai::OutsegType val); +google::protobuf::RepeatedField convert_list_sai_outseg_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_outseg_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PacketAction convert_sai_packet_action_t_to_proto( + const sai_int32_t val); +sai_packet_action_t convert_sai_packet_action_t_to_sai( + lemming::dataplane::sai::PacketAction val); +google::protobuf::RepeatedField convert_list_sai_packet_action_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_packet_action_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PacketColor convert_sai_packet_color_t_to_proto( + const sai_int32_t val); +sai_packet_color_t convert_sai_packet_color_t_to_sai( + lemming::dataplane::sai::PacketColor val); +google::protobuf::RepeatedField convert_list_sai_packet_color_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_packet_color_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PacketVlan convert_sai_packet_vlan_t_to_proto( + const sai_int32_t val); +sai_packet_vlan_t convert_sai_packet_vlan_t_to_sai( + lemming::dataplane::sai::PacketVlan val); +google::protobuf::RepeatedField convert_list_sai_packet_vlan_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_packet_vlan_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PolicerAttr convert_sai_policer_attr_t_to_proto( + const sai_int32_t val); +sai_policer_attr_t convert_sai_policer_attr_t_to_sai( + lemming::dataplane::sai::PolicerAttr val); +google::protobuf::RepeatedField convert_list_sai_policer_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_policer_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PolicerColorSource +convert_sai_policer_color_source_t_to_proto(const sai_int32_t val); +sai_policer_color_source_t convert_sai_policer_color_source_t_to_sai( + lemming::dataplane::sai::PolicerColorSource val); +google::protobuf::RepeatedField +convert_list_sai_policer_color_source_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_policer_color_source_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PolicerMode convert_sai_policer_mode_t_to_proto( + const sai_int32_t val); +sai_policer_mode_t convert_sai_policer_mode_t_to_sai( + lemming::dataplane::sai::PolicerMode val); +google::protobuf::RepeatedField convert_list_sai_policer_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_policer_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PolicerStat convert_sai_policer_stat_t_to_proto( + const sai_int32_t val); +sai_policer_stat_t convert_sai_policer_stat_t_to_sai( + lemming::dataplane::sai::PolicerStat val); +google::protobuf::RepeatedField convert_list_sai_policer_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_policer_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortAttr convert_sai_port_attr_t_to_proto( + const sai_int32_t val); +sai_port_attr_t convert_sai_port_attr_t_to_sai( + lemming::dataplane::sai::PortAttr val); +google::protobuf::RepeatedField convert_list_sai_port_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortAutoNegConfigMode +convert_sai_port_auto_neg_config_mode_t_to_proto(const sai_int32_t val); +sai_port_auto_neg_config_mode_t convert_sai_port_auto_neg_config_mode_t_to_sai( + lemming::dataplane::sai::PortAutoNegConfigMode val); +google::protobuf::RepeatedField +convert_list_sai_port_auto_neg_config_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_auto_neg_config_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortBreakoutModeType +convert_sai_port_breakout_mode_type_t_to_proto(const sai_int32_t val); +sai_port_breakout_mode_type_t convert_sai_port_breakout_mode_type_t_to_sai( + lemming::dataplane::sai::PortBreakoutModeType val); +google::protobuf::RepeatedField +convert_list_sai_port_breakout_mode_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_breakout_mode_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortConnectorAttr +convert_sai_port_connector_attr_t_to_proto(const sai_int32_t val); +sai_port_connector_attr_t convert_sai_port_connector_attr_t_to_sai( + lemming::dataplane::sai::PortConnectorAttr val); +google::protobuf::RepeatedField +convert_list_sai_port_connector_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_connector_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortConnectorFailoverMode +convert_sai_port_connector_failover_mode_t_to_proto(const sai_int32_t val); +sai_port_connector_failover_mode_t +convert_sai_port_connector_failover_mode_t_to_sai( + lemming::dataplane::sai::PortConnectorFailoverMode val); +google::protobuf::RepeatedField +convert_list_sai_port_connector_failover_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_connector_failover_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortDualMedia convert_sai_port_dual_media_t_to_proto( + const sai_int32_t val); +sai_port_dual_media_t convert_sai_port_dual_media_t_to_sai( + lemming::dataplane::sai::PortDualMedia val); +google::protobuf::RepeatedField +convert_list_sai_port_dual_media_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_dual_media_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortErrStatus convert_sai_port_err_status_t_to_proto( + const sai_int32_t val); +sai_port_err_status_t convert_sai_port_err_status_t_to_sai( + lemming::dataplane::sai::PortErrStatus val); +google::protobuf::RepeatedField +convert_list_sai_port_err_status_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_err_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortFecModeExtended +convert_sai_port_fec_mode_extended_t_to_proto(const sai_int32_t val); +sai_port_fec_mode_extended_t convert_sai_port_fec_mode_extended_t_to_sai( + lemming::dataplane::sai::PortFecModeExtended val); +google::protobuf::RepeatedField +convert_list_sai_port_fec_mode_extended_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_fec_mode_extended_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortFecMode convert_sai_port_fec_mode_t_to_proto( + const sai_int32_t val); +sai_port_fec_mode_t convert_sai_port_fec_mode_t_to_sai( + lemming::dataplane::sai::PortFecMode val); +google::protobuf::RepeatedField convert_list_sai_port_fec_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_fec_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortFlowControlMode +convert_sai_port_flow_control_mode_t_to_proto(const sai_int32_t val); +sai_port_flow_control_mode_t convert_sai_port_flow_control_mode_t_to_sai( + lemming::dataplane::sai::PortFlowControlMode val); +google::protobuf::RepeatedField +convert_list_sai_port_flow_control_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_flow_control_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortInterfaceType +convert_sai_port_interface_type_t_to_proto(const sai_int32_t val); +sai_port_interface_type_t convert_sai_port_interface_type_t_to_sai( + lemming::dataplane::sai::PortInterfaceType val); +google::protobuf::RepeatedField +convert_list_sai_port_interface_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_interface_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortInternalLoopbackMode +convert_sai_port_internal_loopback_mode_t_to_proto(const sai_int32_t val); +sai_port_internal_loopback_mode_t +convert_sai_port_internal_loopback_mode_t_to_sai( + lemming::dataplane::sai::PortInternalLoopbackMode val); +google::protobuf::RepeatedField +convert_list_sai_port_internal_loopback_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_internal_loopback_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortLinkTrainingFailureStatus +convert_sai_port_link_training_failure_status_t_to_proto(const sai_int32_t val); +sai_port_link_training_failure_status_t +convert_sai_port_link_training_failure_status_t_to_sai( + lemming::dataplane::sai::PortLinkTrainingFailureStatus val); +google::protobuf::RepeatedField +convert_list_sai_port_link_training_failure_status_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_link_training_failure_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortLinkTrainingRxStatus +convert_sai_port_link_training_rx_status_t_to_proto(const sai_int32_t val); +sai_port_link_training_rx_status_t +convert_sai_port_link_training_rx_status_t_to_sai( + lemming::dataplane::sai::PortLinkTrainingRxStatus val); +google::protobuf::RepeatedField +convert_list_sai_port_link_training_rx_status_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_link_training_rx_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortLoopbackMode +convert_sai_port_loopback_mode_t_to_proto(const sai_int32_t val); +sai_port_loopback_mode_t convert_sai_port_loopback_mode_t_to_sai( + lemming::dataplane::sai::PortLoopbackMode val); +google::protobuf::RepeatedField +convert_list_sai_port_loopback_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_loopback_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortMdixModeConfig +convert_sai_port_mdix_mode_config_t_to_proto(const sai_int32_t val); +sai_port_mdix_mode_config_t convert_sai_port_mdix_mode_config_t_to_sai( + lemming::dataplane::sai::PortMdixModeConfig val); +google::protobuf::RepeatedField +convert_list_sai_port_mdix_mode_config_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_mdix_mode_config_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortMdixModeStatus +convert_sai_port_mdix_mode_status_t_to_proto(const sai_int32_t val); +sai_port_mdix_mode_status_t convert_sai_port_mdix_mode_status_t_to_sai( + lemming::dataplane::sai::PortMdixModeStatus val); +google::protobuf::RepeatedField +convert_list_sai_port_mdix_mode_status_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_mdix_mode_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortMediaType convert_sai_port_media_type_t_to_proto( + const sai_int32_t val); +sai_port_media_type_t convert_sai_port_media_type_t_to_sai( + lemming::dataplane::sai::PortMediaType val); +google::protobuf::RepeatedField +convert_list_sai_port_media_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_media_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortModuleType convert_sai_port_module_type_t_to_proto( + const sai_int32_t val); +sai_port_module_type_t convert_sai_port_module_type_t_to_sai( + lemming::dataplane::sai::PortModuleType val); +google::protobuf::RepeatedField +convert_list_sai_port_module_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_module_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortOperStatus convert_sai_port_oper_status_t_to_proto( + const sai_int32_t val); +sai_port_oper_status_t convert_sai_port_oper_status_t_to_sai( + lemming::dataplane::sai::PortOperStatus val); +google::protobuf::RepeatedField +convert_list_sai_port_oper_status_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_oper_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortPoolAttr convert_sai_port_pool_attr_t_to_proto( + const sai_int32_t val); +sai_port_pool_attr_t convert_sai_port_pool_attr_t_to_sai( + lemming::dataplane::sai::PortPoolAttr val); +google::protobuf::RepeatedField convert_list_sai_port_pool_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_pool_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortPoolStat convert_sai_port_pool_stat_t_to_proto( + const sai_int32_t val); +sai_port_pool_stat_t convert_sai_port_pool_stat_t_to_sai( + lemming::dataplane::sai::PortPoolStat val); +google::protobuf::RepeatedField convert_list_sai_port_pool_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_pool_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortPrbsConfig convert_sai_port_prbs_config_t_to_proto( + const sai_int32_t val); +sai_port_prbs_config_t convert_sai_port_prbs_config_t_to_sai( + lemming::dataplane::sai::PortPrbsConfig val); +google::protobuf::RepeatedField +convert_list_sai_port_prbs_config_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_prbs_config_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortPrbsRxStatus +convert_sai_port_prbs_rx_status_t_to_proto(const sai_int32_t val); +sai_port_prbs_rx_status_t convert_sai_port_prbs_rx_status_t_to_sai( + lemming::dataplane::sai::PortPrbsRxStatus val); +google::protobuf::RepeatedField +convert_list_sai_port_prbs_rx_status_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_prbs_rx_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortPriorityFlowControlMode +convert_sai_port_priority_flow_control_mode_t_to_proto(const sai_int32_t val); +sai_port_priority_flow_control_mode_t +convert_sai_port_priority_flow_control_mode_t_to_sai( + lemming::dataplane::sai::PortPriorityFlowControlMode val); +google::protobuf::RepeatedField +convert_list_sai_port_priority_flow_control_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_priority_flow_control_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortPtpMode convert_sai_port_ptp_mode_t_to_proto( + const sai_int32_t val); +sai_port_ptp_mode_t convert_sai_port_ptp_mode_t_to_sai( + lemming::dataplane::sai::PortPtpMode val); +google::protobuf::RepeatedField convert_list_sai_port_ptp_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_ptp_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortSerdesAttr convert_sai_port_serdes_attr_t_to_proto( + const sai_int32_t val); +sai_port_serdes_attr_t convert_sai_port_serdes_attr_t_to_sai( + lemming::dataplane::sai::PortSerdesAttr val); +google::protobuf::RepeatedField +convert_list_sai_port_serdes_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_port_serdes_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortStat convert_sai_port_stat_t_to_proto( + const sai_int32_t val); +sai_port_stat_t convert_sai_port_stat_t_to_sai( + lemming::dataplane::sai::PortStat val); +google::protobuf::RepeatedField convert_list_sai_port_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::PortType convert_sai_port_type_t_to_proto( + const sai_int32_t val); +sai_port_type_t convert_sai_port_type_t_to_sai( + lemming::dataplane::sai::PortType val); +google::protobuf::RepeatedField convert_list_sai_port_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_port_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::QosMapAttr convert_sai_qos_map_attr_t_to_proto( + const sai_int32_t val); +sai_qos_map_attr_t convert_sai_qos_map_attr_t_to_sai( + lemming::dataplane::sai::QosMapAttr val); +google::protobuf::RepeatedField convert_list_sai_qos_map_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_qos_map_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::QosMapType convert_sai_qos_map_type_t_to_proto( + const sai_int32_t val); +sai_qos_map_type_t convert_sai_qos_map_type_t_to_sai( + lemming::dataplane::sai::QosMapType val); +google::protobuf::RepeatedField convert_list_sai_qos_map_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_qos_map_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::QueueAttr convert_sai_queue_attr_t_to_proto( + const sai_int32_t val); +sai_queue_attr_t convert_sai_queue_attr_t_to_sai( + lemming::dataplane::sai::QueueAttr val); +google::protobuf::RepeatedField convert_list_sai_queue_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_queue_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::QueuePfcContinuousDeadlockState +convert_sai_queue_pfc_continuous_deadlock_state_t_to_proto( + const sai_int32_t val); +sai_queue_pfc_continuous_deadlock_state_t +convert_sai_queue_pfc_continuous_deadlock_state_t_to_sai( + lemming::dataplane::sai::QueuePfcContinuousDeadlockState val); +google::protobuf::RepeatedField +convert_list_sai_queue_pfc_continuous_deadlock_state_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_queue_pfc_continuous_deadlock_state_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::QueuePfcDeadlockEventType +convert_sai_queue_pfc_deadlock_event_type_t_to_proto(const sai_int32_t val); +sai_queue_pfc_deadlock_event_type_t +convert_sai_queue_pfc_deadlock_event_type_t_to_sai( + lemming::dataplane::sai::QueuePfcDeadlockEventType val); +google::protobuf::RepeatedField +convert_list_sai_queue_pfc_deadlock_event_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_queue_pfc_deadlock_event_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::QueueStat convert_sai_queue_stat_t_to_proto( + const sai_int32_t val); +sai_queue_stat_t convert_sai_queue_stat_t_to_sai( + lemming::dataplane::sai::QueueStat val); +google::protobuf::RepeatedField convert_list_sai_queue_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_queue_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::QueueType convert_sai_queue_type_t_to_proto( + const sai_int32_t val); +sai_queue_type_t convert_sai_queue_type_t_to_sai( + lemming::dataplane::sai::QueueType val); +google::protobuf::RepeatedField convert_list_sai_queue_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_queue_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::RouteEntryAttr convert_sai_route_entry_attr_t_to_proto( + const sai_int32_t val); +sai_route_entry_attr_t convert_sai_route_entry_attr_t_to_sai( + lemming::dataplane::sai::RouteEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_route_entry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_route_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::RouterInterfaceAttr +convert_sai_router_interface_attr_t_to_proto(const sai_int32_t val); +sai_router_interface_attr_t convert_sai_router_interface_attr_t_to_sai( + lemming::dataplane::sai::RouterInterfaceAttr val); +google::protobuf::RepeatedField +convert_list_sai_router_interface_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_router_interface_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::RouterInterfaceStat +convert_sai_router_interface_stat_t_to_proto(const sai_int32_t val); +sai_router_interface_stat_t convert_sai_router_interface_stat_t_to_sai( + lemming::dataplane::sai::RouterInterfaceStat val); +google::protobuf::RepeatedField +convert_list_sai_router_interface_stat_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_router_interface_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::RouterInterfaceType +convert_sai_router_interface_type_t_to_proto(const sai_int32_t val); +sai_router_interface_type_t convert_sai_router_interface_type_t_to_sai( + lemming::dataplane::sai::RouterInterfaceType val); +google::protobuf::RepeatedField +convert_list_sai_router_interface_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_router_interface_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::RpfGroupAttr convert_sai_rpf_group_attr_t_to_proto( + const sai_int32_t val); +sai_rpf_group_attr_t convert_sai_rpf_group_attr_t_to_sai( + lemming::dataplane::sai::RpfGroupAttr val); +google::protobuf::RepeatedField convert_list_sai_rpf_group_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_rpf_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::RpfGroupMemberAttr +convert_sai_rpf_group_member_attr_t_to_proto(const sai_int32_t val); +sai_rpf_group_member_attr_t convert_sai_rpf_group_member_attr_t_to_sai( + lemming::dataplane::sai::RpfGroupMemberAttr val); +google::protobuf::RepeatedField +convert_list_sai_rpf_group_member_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_rpf_group_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SamplepacketAttr +convert_sai_samplepacket_attr_t_to_proto(const sai_int32_t val); +sai_samplepacket_attr_t convert_sai_samplepacket_attr_t_to_sai( + lemming::dataplane::sai::SamplepacketAttr val); +google::protobuf::RepeatedField +convert_list_sai_samplepacket_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_samplepacket_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SamplepacketMode +convert_sai_samplepacket_mode_t_to_proto(const sai_int32_t val); +sai_samplepacket_mode_t convert_sai_samplepacket_mode_t_to_sai( + lemming::dataplane::sai::SamplepacketMode val); +google::protobuf::RepeatedField +convert_list_sai_samplepacket_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_samplepacket_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SamplepacketType +convert_sai_samplepacket_type_t_to_proto(const sai_int32_t val); +sai_samplepacket_type_t convert_sai_samplepacket_type_t_to_sai( + lemming::dataplane::sai::SamplepacketType val); +google::protobuf::RepeatedField +convert_list_sai_samplepacket_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_samplepacket_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SchedulerAttr convert_sai_scheduler_attr_t_to_proto( + const sai_int32_t val); +sai_scheduler_attr_t convert_sai_scheduler_attr_t_to_sai( + lemming::dataplane::sai::SchedulerAttr val); +google::protobuf::RepeatedField convert_list_sai_scheduler_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_scheduler_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SchedulerGroupAttr +convert_sai_scheduler_group_attr_t_to_proto(const sai_int32_t val); +sai_scheduler_group_attr_t convert_sai_scheduler_group_attr_t_to_sai( + lemming::dataplane::sai::SchedulerGroupAttr val); +google::protobuf::RepeatedField +convert_list_sai_scheduler_group_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_scheduler_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SchedulingType convert_sai_scheduling_type_t_to_proto( + const sai_int32_t val); +sai_scheduling_type_t convert_sai_scheduling_type_t_to_sai( + lemming::dataplane::sai::SchedulingType val); +google::protobuf::RepeatedField +convert_list_sai_scheduling_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_scheduling_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::Srv6SidlistAttr +convert_sai_srv6_sidlist_attr_t_to_proto(const sai_int32_t val); +sai_srv6_sidlist_attr_t convert_sai_srv6_sidlist_attr_t_to_sai( + lemming::dataplane::sai::Srv6SidlistAttr val); +google::protobuf::RepeatedField +convert_list_sai_srv6_sidlist_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_srv6_sidlist_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::Srv6SidlistType +convert_sai_srv6_sidlist_type_t_to_proto(const sai_int32_t val); +sai_srv6_sidlist_type_t convert_sai_srv6_sidlist_type_t_to_sai( + lemming::dataplane::sai::Srv6SidlistType val); +google::protobuf::RepeatedField +convert_list_sai_srv6_sidlist_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_srv6_sidlist_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::StatsMode convert_sai_stats_mode_t_to_proto( + const sai_int32_t val); +sai_stats_mode_t convert_sai_stats_mode_t_to_sai( + lemming::dataplane::sai::StatsMode val); +google::protobuf::RepeatedField convert_list_sai_stats_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_stats_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::StpAttr convert_sai_stp_attr_t_to_proto( + const sai_int32_t val); +sai_stp_attr_t convert_sai_stp_attr_t_to_sai( + lemming::dataplane::sai::StpAttr val); +google::protobuf::RepeatedField convert_list_sai_stp_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_stp_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::StpPortAttr convert_sai_stp_port_attr_t_to_proto( + const sai_int32_t val); +sai_stp_port_attr_t convert_sai_stp_port_attr_t_to_sai( + lemming::dataplane::sai::StpPortAttr val); +google::protobuf::RepeatedField convert_list_sai_stp_port_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_stp_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::StpPortState convert_sai_stp_port_state_t_to_proto( + const sai_int32_t val); +sai_stp_port_state_t convert_sai_stp_port_state_t_to_sai( + lemming::dataplane::sai::StpPortState val); +google::protobuf::RepeatedField convert_list_sai_stp_port_state_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_stp_port_state_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchAttrExtensions +convert_sai_switch_attr_extensions_t_to_proto(const sai_int32_t val); +sai_switch_attr_extensions_t convert_sai_switch_attr_extensions_t_to_sai( + lemming::dataplane::sai::SwitchAttrExtensions val); +google::protobuf::RepeatedField +convert_list_sai_switch_attr_extensions_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_switch_attr_extensions_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchAttr convert_sai_switch_attr_t_to_proto( + const sai_int32_t val); +sai_switch_attr_t convert_sai_switch_attr_t_to_sai( + lemming::dataplane::sai::SwitchAttr val); +google::protobuf::RepeatedField convert_list_sai_switch_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_switch_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchFailoverConfigMode +convert_sai_switch_failover_config_mode_t_to_proto(const sai_int32_t val); +sai_switch_failover_config_mode_t +convert_sai_switch_failover_config_mode_t_to_sai( + lemming::dataplane::sai::SwitchFailoverConfigMode val); +google::protobuf::RepeatedField +convert_list_sai_switch_failover_config_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_switch_failover_config_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchFirmwareLoadMethod +convert_sai_switch_firmware_load_method_t_to_proto(const sai_int32_t val); +sai_switch_firmware_load_method_t +convert_sai_switch_firmware_load_method_t_to_sai( + lemming::dataplane::sai::SwitchFirmwareLoadMethod val); +google::protobuf::RepeatedField +convert_list_sai_switch_firmware_load_method_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_switch_firmware_load_method_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchFirmwareLoadType +convert_sai_switch_firmware_load_type_t_to_proto(const sai_int32_t val); +sai_switch_firmware_load_type_t convert_sai_switch_firmware_load_type_t_to_sai( + lemming::dataplane::sai::SwitchFirmwareLoadType val); +google::protobuf::RepeatedField +convert_list_sai_switch_firmware_load_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_switch_firmware_load_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchHardwareAccessBus +convert_sai_switch_hardware_access_bus_t_to_proto(const sai_int32_t val); +sai_switch_hardware_access_bus_t +convert_sai_switch_hardware_access_bus_t_to_sai( + lemming::dataplane::sai::SwitchHardwareAccessBus val); +google::protobuf::RepeatedField +convert_list_sai_switch_hardware_access_bus_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_switch_hardware_access_bus_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchMcastSnoopingCapability +convert_sai_switch_mcast_snooping_capability_t_to_proto(const sai_int32_t val); +sai_switch_mcast_snooping_capability_t +convert_sai_switch_mcast_snooping_capability_t_to_sai( + lemming::dataplane::sai::SwitchMcastSnoopingCapability val); +google::protobuf::RepeatedField +convert_list_sai_switch_mcast_snooping_capability_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_switch_mcast_snooping_capability_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchOperStatus +convert_sai_switch_oper_status_t_to_proto(const sai_int32_t val); +sai_switch_oper_status_t convert_sai_switch_oper_status_t_to_sai( + lemming::dataplane::sai::SwitchOperStatus val); +google::protobuf::RepeatedField +convert_list_sai_switch_oper_status_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_switch_oper_status_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchRestartType +convert_sai_switch_restart_type_t_to_proto(const sai_int32_t val); +sai_switch_restart_type_t convert_sai_switch_restart_type_t_to_sai( + lemming::dataplane::sai::SwitchRestartType val); +google::protobuf::RepeatedField +convert_list_sai_switch_restart_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_switch_restart_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchStat convert_sai_switch_stat_t_to_proto( + const sai_int32_t val); +sai_switch_stat_t convert_sai_switch_stat_t_to_sai( + lemming::dataplane::sai::SwitchStat val); +google::protobuf::RepeatedField convert_list_sai_switch_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_switch_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchSwitchingMode +convert_sai_switch_switching_mode_t_to_proto(const sai_int32_t val); +sai_switch_switching_mode_t convert_sai_switch_switching_mode_t_to_sai( + lemming::dataplane::sai::SwitchSwitchingMode val); +google::protobuf::RepeatedField +convert_list_sai_switch_switching_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_switch_switching_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchTunnelAttr +convert_sai_switch_tunnel_attr_t_to_proto(const sai_int32_t val); +sai_switch_tunnel_attr_t convert_sai_switch_tunnel_attr_t_to_sai( + lemming::dataplane::sai::SwitchTunnelAttr val); +google::protobuf::RepeatedField +convert_list_sai_switch_tunnel_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_switch_tunnel_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SwitchType convert_sai_switch_type_t_to_proto( + const sai_int32_t val); +sai_switch_type_t convert_sai_switch_type_t_to_sai( + lemming::dataplane::sai::SwitchType val); +google::protobuf::RepeatedField convert_list_sai_switch_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_switch_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SystemPortAttr convert_sai_system_port_attr_t_to_proto( + const sai_int32_t val); +sai_system_port_attr_t convert_sai_system_port_attr_t_to_sai( + lemming::dataplane::sai::SystemPortAttr val); +google::protobuf::RepeatedField +convert_list_sai_system_port_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_system_port_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::SystemPortType convert_sai_system_port_type_t_to_proto( + const sai_int32_t val); +sai_system_port_type_t convert_sai_system_port_type_t_to_sai( + lemming::dataplane::sai::SystemPortType val); +google::protobuf::RepeatedField +convert_list_sai_system_port_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_system_port_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TableBitmapClassificationEntryAction +convert_sai_table_bitmap_classification_entry_action_t_to_proto( + const sai_int32_t val); +sai_table_bitmap_classification_entry_action_t +convert_sai_table_bitmap_classification_entry_action_t_to_sai( + lemming::dataplane::sai::TableBitmapClassificationEntryAction val); +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_classification_entry_action_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_table_bitmap_classification_entry_action_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TableBitmapClassificationEntryAttr +convert_sai_table_bitmap_classification_entry_attr_t_to_proto( + const sai_int32_t val); +sai_table_bitmap_classification_entry_attr_t +convert_sai_table_bitmap_classification_entry_attr_t_to_sai( + lemming::dataplane::sai::TableBitmapClassificationEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_classification_entry_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_table_bitmap_classification_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TableBitmapClassificationEntryStat +convert_sai_table_bitmap_classification_entry_stat_t_to_proto( + const sai_int32_t val); +sai_table_bitmap_classification_entry_stat_t +convert_sai_table_bitmap_classification_entry_stat_t_to_sai( + lemming::dataplane::sai::TableBitmapClassificationEntryStat val); +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_classification_entry_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_table_bitmap_classification_entry_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TableBitmapRouterEntryAction +convert_sai_table_bitmap_router_entry_action_t_to_proto(const sai_int32_t val); +sai_table_bitmap_router_entry_action_t +convert_sai_table_bitmap_router_entry_action_t_to_sai( + lemming::dataplane::sai::TableBitmapRouterEntryAction val); +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_router_entry_action_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_table_bitmap_router_entry_action_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TableBitmapRouterEntryAttr +convert_sai_table_bitmap_router_entry_attr_t_to_proto(const sai_int32_t val); +sai_table_bitmap_router_entry_attr_t +convert_sai_table_bitmap_router_entry_attr_t_to_sai( + lemming::dataplane::sai::TableBitmapRouterEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_router_entry_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_table_bitmap_router_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TableBitmapRouterEntryStat +convert_sai_table_bitmap_router_entry_stat_t_to_proto(const sai_int32_t val); +sai_table_bitmap_router_entry_stat_t +convert_sai_table_bitmap_router_entry_stat_t_to_sai( + lemming::dataplane::sai::TableBitmapRouterEntryStat val); +google::protobuf::RepeatedField +convert_list_sai_table_bitmap_router_entry_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_table_bitmap_router_entry_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TableMetaTunnelEntryAction +convert_sai_table_meta_tunnel_entry_action_t_to_proto(const sai_int32_t val); +sai_table_meta_tunnel_entry_action_t +convert_sai_table_meta_tunnel_entry_action_t_to_sai( + lemming::dataplane::sai::TableMetaTunnelEntryAction val); +google::protobuf::RepeatedField +convert_list_sai_table_meta_tunnel_entry_action_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_table_meta_tunnel_entry_action_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TableMetaTunnelEntryAttr +convert_sai_table_meta_tunnel_entry_attr_t_to_proto(const sai_int32_t val); +sai_table_meta_tunnel_entry_attr_t +convert_sai_table_meta_tunnel_entry_attr_t_to_sai( + lemming::dataplane::sai::TableMetaTunnelEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_table_meta_tunnel_entry_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_table_meta_tunnel_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TableMetaTunnelEntryStat +convert_sai_table_meta_tunnel_entry_stat_t_to_proto(const sai_int32_t val); +sai_table_meta_tunnel_entry_stat_t +convert_sai_table_meta_tunnel_entry_stat_t_to_sai( + lemming::dataplane::sai::TableMetaTunnelEntryStat val); +google::protobuf::RepeatedField +convert_list_sai_table_meta_tunnel_entry_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_table_meta_tunnel_entry_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamAttr convert_sai_tam_attr_t_to_proto( + const sai_int32_t val); +sai_tam_attr_t convert_sai_tam_attr_t_to_sai( + lemming::dataplane::sai::TamAttr val); +google::protobuf::RepeatedField convert_list_sai_tam_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tam_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamBindPointType +convert_sai_tam_bind_point_type_t_to_proto(const sai_int32_t val); +sai_tam_bind_point_type_t convert_sai_tam_bind_point_type_t_to_sai( + lemming::dataplane::sai::TamBindPointType val); +google::protobuf::RepeatedField +convert_list_sai_tam_bind_point_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_bind_point_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamCollectorAttr +convert_sai_tam_collector_attr_t_to_proto(const sai_int32_t val); +sai_tam_collector_attr_t convert_sai_tam_collector_attr_t_to_sai( + lemming::dataplane::sai::TamCollectorAttr val); +google::protobuf::RepeatedField +convert_list_sai_tam_collector_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_collector_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamEventActionAttr +convert_sai_tam_event_action_attr_t_to_proto(const sai_int32_t val); +sai_tam_event_action_attr_t convert_sai_tam_event_action_attr_t_to_sai( + lemming::dataplane::sai::TamEventActionAttr val); +google::protobuf::RepeatedField +convert_list_sai_tam_event_action_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_event_action_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamEventAttr convert_sai_tam_event_attr_t_to_proto( + const sai_int32_t val); +sai_tam_event_attr_t convert_sai_tam_event_attr_t_to_sai( + lemming::dataplane::sai::TamEventAttr val); +google::protobuf::RepeatedField convert_list_sai_tam_event_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tam_event_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamEventThresholdAttr +convert_sai_tam_event_threshold_attr_t_to_proto(const sai_int32_t val); +sai_tam_event_threshold_attr_t convert_sai_tam_event_threshold_attr_t_to_sai( + lemming::dataplane::sai::TamEventThresholdAttr val); +google::protobuf::RepeatedField +convert_list_sai_tam_event_threshold_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tam_event_threshold_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamEventThresholdUnit +convert_sai_tam_event_threshold_unit_t_to_proto(const sai_int32_t val); +sai_tam_event_threshold_unit_t convert_sai_tam_event_threshold_unit_t_to_sai( + lemming::dataplane::sai::TamEventThresholdUnit val); +google::protobuf::RepeatedField +convert_list_sai_tam_event_threshold_unit_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tam_event_threshold_unit_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamEventType convert_sai_tam_event_type_t_to_proto( + const sai_int32_t val); +sai_tam_event_type_t convert_sai_tam_event_type_t_to_sai( + lemming::dataplane::sai::TamEventType val); +google::protobuf::RepeatedField convert_list_sai_tam_event_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tam_event_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamIntAttr convert_sai_tam_int_attr_t_to_proto( + const sai_int32_t val); +sai_tam_int_attr_t convert_sai_tam_int_attr_t_to_sai( + lemming::dataplane::sai::TamIntAttr val); +google::protobuf::RepeatedField convert_list_sai_tam_int_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tam_int_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamIntPresenceType +convert_sai_tam_int_presence_type_t_to_proto(const sai_int32_t val); +sai_tam_int_presence_type_t convert_sai_tam_int_presence_type_t_to_sai( + lemming::dataplane::sai::TamIntPresenceType val); +google::protobuf::RepeatedField +convert_list_sai_tam_int_presence_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_int_presence_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamIntType convert_sai_tam_int_type_t_to_proto( + const sai_int32_t val); +sai_tam_int_type_t convert_sai_tam_int_type_t_to_sai( + lemming::dataplane::sai::TamIntType val); +google::protobuf::RepeatedField convert_list_sai_tam_int_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tam_int_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamMathFuncAttr +convert_sai_tam_math_func_attr_t_to_proto(const sai_int32_t val); +sai_tam_math_func_attr_t convert_sai_tam_math_func_attr_t_to_sai( + lemming::dataplane::sai::TamMathFuncAttr val); +google::protobuf::RepeatedField +convert_list_sai_tam_math_func_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_math_func_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamReportAttr convert_sai_tam_report_attr_t_to_proto( + const sai_int32_t val); +sai_tam_report_attr_t convert_sai_tam_report_attr_t_to_sai( + lemming::dataplane::sai::TamReportAttr val); +google::protobuf::RepeatedField +convert_list_sai_tam_report_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_report_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamReportMode convert_sai_tam_report_mode_t_to_proto( + const sai_int32_t val); +sai_tam_report_mode_t convert_sai_tam_report_mode_t_to_sai( + lemming::dataplane::sai::TamReportMode val); +google::protobuf::RepeatedField +convert_list_sai_tam_report_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_report_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamReportType convert_sai_tam_report_type_t_to_proto( + const sai_int32_t val); +sai_tam_report_type_t convert_sai_tam_report_type_t_to_sai( + lemming::dataplane::sai::TamReportType val); +google::protobuf::RepeatedField +convert_list_sai_tam_report_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_report_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamReportingUnit +convert_sai_tam_reporting_unit_t_to_proto(const sai_int32_t val); +sai_tam_reporting_unit_t convert_sai_tam_reporting_unit_t_to_sai( + lemming::dataplane::sai::TamReportingUnit val); +google::protobuf::RepeatedField +convert_list_sai_tam_reporting_unit_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_reporting_unit_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamTelMathFuncType +convert_sai_tam_tel_math_func_type_t_to_proto(const sai_int32_t val); +sai_tam_tel_math_func_type_t convert_sai_tam_tel_math_func_type_t_to_sai( + lemming::dataplane::sai::TamTelMathFuncType val); +google::protobuf::RepeatedField +convert_list_sai_tam_tel_math_func_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_tel_math_func_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamTelTypeAttr +convert_sai_tam_tel_type_attr_t_to_proto(const sai_int32_t val); +sai_tam_tel_type_attr_t convert_sai_tam_tel_type_attr_t_to_sai( + lemming::dataplane::sai::TamTelTypeAttr val); +google::protobuf::RepeatedField +convert_list_sai_tam_tel_type_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_tel_type_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamTelemetryAttr +convert_sai_tam_telemetry_attr_t_to_proto(const sai_int32_t val); +sai_tam_telemetry_attr_t convert_sai_tam_telemetry_attr_t_to_sai( + lemming::dataplane::sai::TamTelemetryAttr val); +google::protobuf::RepeatedField +convert_list_sai_tam_telemetry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_telemetry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamTelemetryType +convert_sai_tam_telemetry_type_t_to_proto(const sai_int32_t val); +sai_tam_telemetry_type_t convert_sai_tam_telemetry_type_t_to_sai( + lemming::dataplane::sai::TamTelemetryType val); +google::protobuf::RepeatedField +convert_list_sai_tam_telemetry_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_telemetry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamTransportAttr +convert_sai_tam_transport_attr_t_to_proto(const sai_int32_t val); +sai_tam_transport_attr_t convert_sai_tam_transport_attr_t_to_sai( + lemming::dataplane::sai::TamTransportAttr val); +google::protobuf::RepeatedField +convert_list_sai_tam_transport_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_transport_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamTransportAuthType +convert_sai_tam_transport_auth_type_t_to_proto(const sai_int32_t val); +sai_tam_transport_auth_type_t convert_sai_tam_transport_auth_type_t_to_sai( + lemming::dataplane::sai::TamTransportAuthType val); +google::protobuf::RepeatedField +convert_list_sai_tam_transport_auth_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_transport_auth_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TamTransportType +convert_sai_tam_transport_type_t_to_proto(const sai_int32_t val); +sai_tam_transport_type_t convert_sai_tam_transport_type_t_to_sai( + lemming::dataplane::sai::TamTransportType val); +google::protobuf::RepeatedField +convert_list_sai_tam_transport_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tam_transport_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TlvType convert_sai_tlv_type_t_to_proto( + const sai_int32_t val); +sai_tlv_type_t convert_sai_tlv_type_t_to_sai( + lemming::dataplane::sai::TlvType val); +google::protobuf::RepeatedField convert_list_sai_tlv_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tlv_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelAttr convert_sai_tunnel_attr_t_to_proto( + const sai_int32_t val); +sai_tunnel_attr_t convert_sai_tunnel_attr_t_to_sai( + lemming::dataplane::sai::TunnelAttr val); +google::protobuf::RepeatedField convert_list_sai_tunnel_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tunnel_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelDecapEcnMode +convert_sai_tunnel_decap_ecn_mode_t_to_proto(const sai_int32_t val); +sai_tunnel_decap_ecn_mode_t convert_sai_tunnel_decap_ecn_mode_t_to_sai( + lemming::dataplane::sai::TunnelDecapEcnMode val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_decap_ecn_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tunnel_decap_ecn_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelDscpMode convert_sai_tunnel_dscp_mode_t_to_proto( + const sai_int32_t val); +sai_tunnel_dscp_mode_t convert_sai_tunnel_dscp_mode_t_to_sai( + lemming::dataplane::sai::TunnelDscpMode val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_dscp_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tunnel_dscp_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelEncapEcnMode +convert_sai_tunnel_encap_ecn_mode_t_to_proto(const sai_int32_t val); +sai_tunnel_encap_ecn_mode_t convert_sai_tunnel_encap_ecn_mode_t_to_sai( + lemming::dataplane::sai::TunnelEncapEcnMode val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_encap_ecn_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tunnel_encap_ecn_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelMapAttr convert_sai_tunnel_map_attr_t_to_proto( + const sai_int32_t val); +sai_tunnel_map_attr_t convert_sai_tunnel_map_attr_t_to_sai( + lemming::dataplane::sai::TunnelMapAttr val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_map_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tunnel_map_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelMapEntryAttr +convert_sai_tunnel_map_entry_attr_t_to_proto(const sai_int32_t val); +sai_tunnel_map_entry_attr_t convert_sai_tunnel_map_entry_attr_t_to_sai( + lemming::dataplane::sai::TunnelMapEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_map_entry_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tunnel_map_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelMapType convert_sai_tunnel_map_type_t_to_proto( + const sai_int32_t val); +sai_tunnel_map_type_t convert_sai_tunnel_map_type_t_to_sai( + lemming::dataplane::sai::TunnelMapType val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_map_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tunnel_map_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelPeerMode convert_sai_tunnel_peer_mode_t_to_proto( + const sai_int32_t val); +sai_tunnel_peer_mode_t convert_sai_tunnel_peer_mode_t_to_sai( + lemming::dataplane::sai::TunnelPeerMode val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_peer_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tunnel_peer_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelStat convert_sai_tunnel_stat_t_to_proto( + const sai_int32_t val); +sai_tunnel_stat_t convert_sai_tunnel_stat_t_to_sai( + lemming::dataplane::sai::TunnelStat val); +google::protobuf::RepeatedField convert_list_sai_tunnel_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tunnel_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelTermTableEntryAttr +convert_sai_tunnel_term_table_entry_attr_t_to_proto(const sai_int32_t val); +sai_tunnel_term_table_entry_attr_t +convert_sai_tunnel_term_table_entry_attr_t_to_sai( + lemming::dataplane::sai::TunnelTermTableEntryAttr val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_term_table_entry_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tunnel_term_table_entry_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelTermTableEntryType +convert_sai_tunnel_term_table_entry_type_t_to_proto(const sai_int32_t val); +sai_tunnel_term_table_entry_type_t +convert_sai_tunnel_term_table_entry_type_t_to_sai( + lemming::dataplane::sai::TunnelTermTableEntryType val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_term_table_entry_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tunnel_term_table_entry_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelTtlMode convert_sai_tunnel_ttl_mode_t_to_proto( + const sai_int32_t val); +sai_tunnel_ttl_mode_t convert_sai_tunnel_ttl_mode_t_to_sai( + lemming::dataplane::sai::TunnelTtlMode val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_ttl_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_tunnel_ttl_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelType convert_sai_tunnel_type_t_to_proto( + const sai_int32_t val); +sai_tunnel_type_t convert_sai_tunnel_type_t_to_sai( + lemming::dataplane::sai::TunnelType val); +google::protobuf::RepeatedField convert_list_sai_tunnel_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tunnel_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::TunnelVxlanUdpSportMode +convert_sai_tunnel_vxlan_udp_sport_mode_t_to_proto(const sai_int32_t val); +sai_tunnel_vxlan_udp_sport_mode_t +convert_sai_tunnel_vxlan_udp_sport_mode_t_to_sai( + lemming::dataplane::sai::TunnelVxlanUdpSportMode val); +google::protobuf::RepeatedField +convert_list_sai_tunnel_vxlan_udp_sport_mode_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_tunnel_vxlan_udp_sport_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::UdfAttr convert_sai_udf_attr_t_to_proto( + const sai_int32_t val); +sai_udf_attr_t convert_sai_udf_attr_t_to_sai( + lemming::dataplane::sai::UdfAttr val); +google::protobuf::RepeatedField convert_list_sai_udf_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_udf_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::UdfBase convert_sai_udf_base_t_to_proto( + const sai_int32_t val); +sai_udf_base_t convert_sai_udf_base_t_to_sai( + lemming::dataplane::sai::UdfBase val); +google::protobuf::RepeatedField convert_list_sai_udf_base_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_udf_base_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::UdfGroupAttr convert_sai_udf_group_attr_t_to_proto( + const sai_int32_t val); +sai_udf_group_attr_t convert_sai_udf_group_attr_t_to_sai( + lemming::dataplane::sai::UdfGroupAttr val); +google::protobuf::RepeatedField convert_list_sai_udf_group_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_udf_group_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::UdfGroupType convert_sai_udf_group_type_t_to_proto( + const sai_int32_t val); +sai_udf_group_type_t convert_sai_udf_group_type_t_to_sai( + lemming::dataplane::sai::UdfGroupType val); +google::protobuf::RepeatedField convert_list_sai_udf_group_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_udf_group_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::UdfMatchAttr convert_sai_udf_match_attr_t_to_proto( + const sai_int32_t val); +sai_udf_match_attr_t convert_sai_udf_match_attr_t_to_sai( + lemming::dataplane::sai::UdfMatchAttr val); +google::protobuf::RepeatedField convert_list_sai_udf_match_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_udf_match_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::VirtualRouterAttr +convert_sai_virtual_router_attr_t_to_proto(const sai_int32_t val); +sai_virtual_router_attr_t convert_sai_virtual_router_attr_t_to_sai( + lemming::dataplane::sai::VirtualRouterAttr val); +google::protobuf::RepeatedField +convert_list_sai_virtual_router_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_virtual_router_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::VlanAttr convert_sai_vlan_attr_t_to_proto( + const sai_int32_t val); +sai_vlan_attr_t convert_sai_vlan_attr_t_to_sai( + lemming::dataplane::sai::VlanAttr val); +google::protobuf::RepeatedField convert_list_sai_vlan_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_vlan_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::VlanFloodControlType +convert_sai_vlan_flood_control_type_t_to_proto(const sai_int32_t val); +sai_vlan_flood_control_type_t convert_sai_vlan_flood_control_type_t_to_sai( + lemming::dataplane::sai::VlanFloodControlType val); +google::protobuf::RepeatedField +convert_list_sai_vlan_flood_control_type_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_vlan_flood_control_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::VlanMcastLookupKeyType +convert_sai_vlan_mcast_lookup_key_type_t_to_proto(const sai_int32_t val); +sai_vlan_mcast_lookup_key_type_t +convert_sai_vlan_mcast_lookup_key_type_t_to_sai( + lemming::dataplane::sai::VlanMcastLookupKeyType val); +google::protobuf::RepeatedField +convert_list_sai_vlan_mcast_lookup_key_type_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_vlan_mcast_lookup_key_type_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::VlanMemberAttr convert_sai_vlan_member_attr_t_to_proto( + const sai_int32_t val); +sai_vlan_member_attr_t convert_sai_vlan_member_attr_t_to_sai( + lemming::dataplane::sai::VlanMemberAttr val); +google::protobuf::RepeatedField +convert_list_sai_vlan_member_attr_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_vlan_member_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::VlanStat convert_sai_vlan_stat_t_to_proto( + const sai_int32_t val); +sai_vlan_stat_t convert_sai_vlan_stat_t_to_sai( + lemming::dataplane::sai::VlanStat val); +google::protobuf::RepeatedField convert_list_sai_vlan_stat_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_vlan_stat_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::VlanTaggingMode +convert_sai_vlan_tagging_mode_t_to_proto(const sai_int32_t val); +sai_vlan_tagging_mode_t convert_sai_vlan_tagging_mode_t_to_sai( + lemming::dataplane::sai::VlanTaggingMode val); +google::protobuf::RepeatedField +convert_list_sai_vlan_tagging_mode_t_to_proto(const sai_s32_list_t &list); +void convert_list_sai_vlan_tagging_mode_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +lemming::dataplane::sai::WredAttr convert_sai_wred_attr_t_to_proto( + const sai_int32_t val); +sai_wred_attr_t convert_sai_wred_attr_t_to_sai( + lemming::dataplane::sai::WredAttr val); +google::protobuf::RepeatedField convert_list_sai_wred_attr_t_to_proto( + const sai_s32_list_t &list); +void convert_list_sai_wred_attr_t_to_sai( + int32_t *list, const google::protobuf::RepeatedField &proto_list, + uint32_t *count); + +#endif // DATAPLANE_STANDALONE_SAI_ENUM_H_ diff --git a/dataplane/standalone/saiserver/fdb.cc b/dataplane/standalone/saiserver/fdb.cc new file mode 100644 index 00000000..a25ef46c --- /dev/null +++ b/dataplane/standalone/saiserver/fdb.cc @@ -0,0 +1,64 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/fdb.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/fdb.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Fdb::CreateFdbEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateFdbEntryRequest* req, + lemming::dataplane::sai::CreateFdbEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Fdb::RemoveFdbEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveFdbEntryRequest* req, + lemming::dataplane::sai::RemoveFdbEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Fdb::SetFdbEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetFdbEntryAttributeRequest* req, + lemming::dataplane::sai::SetFdbEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Fdb::GetFdbEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetFdbEntryAttributeRequest* req, + lemming::dataplane::sai::GetFdbEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Fdb::CreateFdbEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateFdbEntriesRequest* req, + lemming::dataplane::sai::CreateFdbEntriesResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Fdb::RemoveFdbEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveFdbEntriesRequest* req, + lemming::dataplane::sai::RemoveFdbEntriesResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/fdb.h b/dataplane/standalone/saiserver/fdb.h new file mode 100644 index 00000000..c1f694a4 --- /dev/null +++ b/dataplane/standalone/saiserver/fdb.h @@ -0,0 +1,65 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_FDB_H_ +#define DATAPLANE_STANDALONE_SAI_FDB_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/fdb.grpc.pb.h" +#include "dataplane/proto/sai/fdb.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Fdb final : public lemming::dataplane::sai::Fdb::Service { + public: + grpc::Status CreateFdbEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateFdbEntryRequest* req, + lemming::dataplane::sai::CreateFdbEntryResponse* resp); + + grpc::Status RemoveFdbEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveFdbEntryRequest* req, + lemming::dataplane::sai::RemoveFdbEntryResponse* resp); + + grpc::Status SetFdbEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetFdbEntryAttributeRequest* req, + lemming::dataplane::sai::SetFdbEntryAttributeResponse* resp); + + grpc::Status GetFdbEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetFdbEntryAttributeRequest* req, + lemming::dataplane::sai::GetFdbEntryAttributeResponse* resp); + + grpc::Status CreateFdbEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateFdbEntriesRequest* req, + lemming::dataplane::sai::CreateFdbEntriesResponse* resp); + + grpc::Status RemoveFdbEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveFdbEntriesRequest* req, + lemming::dataplane::sai::RemoveFdbEntriesResponse* resp); + + sai_fdb_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_FDB_H_ diff --git a/dataplane/standalone/saiserver/generic_programmable.cc b/dataplane/standalone/saiserver/generic_programmable.cc new file mode 100644 index 00000000..bb1ae3ce --- /dev/null +++ b/dataplane/standalone/saiserver/generic_programmable.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/generic_programmable.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/generic_programmable.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status GenericProgrammable::CreateGenericProgrammable( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateGenericProgrammableRequest* req, + lemming::dataplane::sai::CreateGenericProgrammableResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status GenericProgrammable::RemoveGenericProgrammable( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveGenericProgrammableRequest* req, + lemming::dataplane::sai::RemoveGenericProgrammableResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status GenericProgrammable::SetGenericProgrammableAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetGenericProgrammableAttributeRequest* req, + lemming::dataplane::sai::SetGenericProgrammableAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status GenericProgrammable::GetGenericProgrammableAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetGenericProgrammableAttributeRequest* req, + lemming::dataplane::sai::GetGenericProgrammableAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/generic_programmable.h b/dataplane/standalone/saiserver/generic_programmable.h new file mode 100644 index 00000000..ed633a32 --- /dev/null +++ b/dataplane/standalone/saiserver/generic_programmable.h @@ -0,0 +1,58 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_GENERIC_PROGRAMMABLE_H_ +#define DATAPLANE_STANDALONE_SAI_GENERIC_PROGRAMMABLE_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/generic_programmable.grpc.pb.h" +#include "dataplane/proto/sai/generic_programmable.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class GenericProgrammable final + : public lemming::dataplane::sai::GenericProgrammable::Service { + public: + grpc::Status CreateGenericProgrammable( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateGenericProgrammableRequest* req, + lemming::dataplane::sai::CreateGenericProgrammableResponse* resp); + + grpc::Status RemoveGenericProgrammable( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveGenericProgrammableRequest* req, + lemming::dataplane::sai::RemoveGenericProgrammableResponse* resp); + + grpc::Status SetGenericProgrammableAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetGenericProgrammableAttributeRequest* + req, + lemming::dataplane::sai::SetGenericProgrammableAttributeResponse* resp); + + grpc::Status GetGenericProgrammableAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetGenericProgrammableAttributeRequest* + req, + lemming::dataplane::sai::GetGenericProgrammableAttributeResponse* resp); + + sai_generic_programmable_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_GENERIC_PROGRAMMABLE_H_ diff --git a/dataplane/standalone/saiserver/hash.cc b/dataplane/standalone/saiserver/hash.cc new file mode 100644 index 00000000..40e6d764 --- /dev/null +++ b/dataplane/standalone/saiserver/hash.cc @@ -0,0 +1,71 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/hash.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/hash.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Hash::CreateHash( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHashRequest* req, + lemming::dataplane::sai::CreateHashResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hash::RemoveHash( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHashRequest* req, + lemming::dataplane::sai::RemoveHashResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hash::SetHashAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHashAttributeRequest* req, + lemming::dataplane::sai::SetHashAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hash::GetHashAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHashAttributeRequest* req, + lemming::dataplane::sai::GetHashAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hash::CreateFineGrainedHashField( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateFineGrainedHashFieldRequest* req, + lemming::dataplane::sai::CreateFineGrainedHashFieldResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hash::RemoveFineGrainedHashField( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveFineGrainedHashFieldRequest* req, + lemming::dataplane::sai::RemoveFineGrainedHashFieldResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hash::GetFineGrainedHashFieldAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetFineGrainedHashFieldAttributeRequest* req, + lemming::dataplane::sai::GetFineGrainedHashFieldAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/hash.h b/dataplane/standalone/saiserver/hash.h new file mode 100644 index 00000000..2c419d57 --- /dev/null +++ b/dataplane/standalone/saiserver/hash.h @@ -0,0 +1,69 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_HASH_H_ +#define DATAPLANE_STANDALONE_SAI_HASH_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/hash.grpc.pb.h" +#include "dataplane/proto/sai/hash.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Hash final : public lemming::dataplane::sai::Hash::Service { + public: + grpc::Status CreateHash(grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHashRequest* req, + lemming::dataplane::sai::CreateHashResponse* resp); + + grpc::Status RemoveHash(grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHashRequest* req, + lemming::dataplane::sai::RemoveHashResponse* resp); + + grpc::Status SetHashAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHashAttributeRequest* req, + lemming::dataplane::sai::SetHashAttributeResponse* resp); + + grpc::Status GetHashAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHashAttributeRequest* req, + lemming::dataplane::sai::GetHashAttributeResponse* resp); + + grpc::Status CreateFineGrainedHashField( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateFineGrainedHashFieldRequest* req, + lemming::dataplane::sai::CreateFineGrainedHashFieldResponse* resp); + + grpc::Status RemoveFineGrainedHashField( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveFineGrainedHashFieldRequest* req, + lemming::dataplane::sai::RemoveFineGrainedHashFieldResponse* resp); + + grpc::Status GetFineGrainedHashFieldAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetFineGrainedHashFieldAttributeRequest* + req, + lemming::dataplane::sai::GetFineGrainedHashFieldAttributeResponse* resp); + + sai_hash_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_HASH_H_ diff --git a/dataplane/standalone/saiserver/hostif.cc b/dataplane/standalone/saiserver/hostif.cc new file mode 100644 index 00000000..aa4c46db --- /dev/null +++ b/dataplane/standalone/saiserver/hostif.cc @@ -0,0 +1,157 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/hostif.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/hostif.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Hostif::CreateHostif( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifRequest* req, + lemming::dataplane::sai::CreateHostifResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::RemoveHostif( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifRequest* req, + lemming::dataplane::sai::RemoveHostifResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::SetHostifAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHostifAttributeRequest* req, + lemming::dataplane::sai::SetHostifAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::GetHostifAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifAttributeRequest* req, + lemming::dataplane::sai::GetHostifAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::CreateHostifTableEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifTableEntryRequest* req, + lemming::dataplane::sai::CreateHostifTableEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::RemoveHostifTableEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifTableEntryRequest* req, + lemming::dataplane::sai::RemoveHostifTableEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::GetHostifTableEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifTableEntryAttributeRequest* req, + lemming::dataplane::sai::GetHostifTableEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::CreateHostifTrapGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifTrapGroupRequest* req, + lemming::dataplane::sai::CreateHostifTrapGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::RemoveHostifTrapGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifTrapGroupRequest* req, + lemming::dataplane::sai::RemoveHostifTrapGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::SetHostifTrapGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHostifTrapGroupAttributeRequest* req, + lemming::dataplane::sai::SetHostifTrapGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::GetHostifTrapGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifTrapGroupAttributeRequest* req, + lemming::dataplane::sai::GetHostifTrapGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::CreateHostifTrap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifTrapRequest* req, + lemming::dataplane::sai::CreateHostifTrapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::RemoveHostifTrap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifTrapRequest* req, + lemming::dataplane::sai::RemoveHostifTrapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::SetHostifTrapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHostifTrapAttributeRequest* req, + lemming::dataplane::sai::SetHostifTrapAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::GetHostifTrapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifTrapAttributeRequest* req, + lemming::dataplane::sai::GetHostifTrapAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::CreateHostifUserDefinedTrap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifUserDefinedTrapRequest* req, + lemming::dataplane::sai::CreateHostifUserDefinedTrapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::RemoveHostifUserDefinedTrap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifUserDefinedTrapRequest* req, + lemming::dataplane::sai::RemoveHostifUserDefinedTrapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::SetHostifUserDefinedTrapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHostifUserDefinedTrapAttributeRequest* + req, + lemming::dataplane::sai::SetHostifUserDefinedTrapAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Hostif::GetHostifUserDefinedTrapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifUserDefinedTrapAttributeRequest* + req, + lemming::dataplane::sai::GetHostifUserDefinedTrapAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/hostif.h b/dataplane/standalone/saiserver/hostif.h new file mode 100644 index 00000000..6ed24e2c --- /dev/null +++ b/dataplane/standalone/saiserver/hostif.h @@ -0,0 +1,132 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_HOSTIF_H_ +#define DATAPLANE_STANDALONE_SAI_HOSTIF_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/hostif.grpc.pb.h" +#include "dataplane/proto/sai/hostif.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Hostif final : public lemming::dataplane::sai::Hostif::Service { + public: + grpc::Status CreateHostif( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifRequest* req, + lemming::dataplane::sai::CreateHostifResponse* resp); + + grpc::Status RemoveHostif( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifRequest* req, + lemming::dataplane::sai::RemoveHostifResponse* resp); + + grpc::Status SetHostifAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHostifAttributeRequest* req, + lemming::dataplane::sai::SetHostifAttributeResponse* resp); + + grpc::Status GetHostifAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifAttributeRequest* req, + lemming::dataplane::sai::GetHostifAttributeResponse* resp); + + grpc::Status CreateHostifTableEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifTableEntryRequest* req, + lemming::dataplane::sai::CreateHostifTableEntryResponse* resp); + + grpc::Status RemoveHostifTableEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifTableEntryRequest* req, + lemming::dataplane::sai::RemoveHostifTableEntryResponse* resp); + + grpc::Status GetHostifTableEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifTableEntryAttributeRequest* req, + lemming::dataplane::sai::GetHostifTableEntryAttributeResponse* resp); + + grpc::Status CreateHostifTrapGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifTrapGroupRequest* req, + lemming::dataplane::sai::CreateHostifTrapGroupResponse* resp); + + grpc::Status RemoveHostifTrapGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifTrapGroupRequest* req, + lemming::dataplane::sai::RemoveHostifTrapGroupResponse* resp); + + grpc::Status SetHostifTrapGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHostifTrapGroupAttributeRequest* req, + lemming::dataplane::sai::SetHostifTrapGroupAttributeResponse* resp); + + grpc::Status GetHostifTrapGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifTrapGroupAttributeRequest* req, + lemming::dataplane::sai::GetHostifTrapGroupAttributeResponse* resp); + + grpc::Status CreateHostifTrap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifTrapRequest* req, + lemming::dataplane::sai::CreateHostifTrapResponse* resp); + + grpc::Status RemoveHostifTrap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifTrapRequest* req, + lemming::dataplane::sai::RemoveHostifTrapResponse* resp); + + grpc::Status SetHostifTrapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHostifTrapAttributeRequest* req, + lemming::dataplane::sai::SetHostifTrapAttributeResponse* resp); + + grpc::Status GetHostifTrapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifTrapAttributeRequest* req, + lemming::dataplane::sai::GetHostifTrapAttributeResponse* resp); + + grpc::Status CreateHostifUserDefinedTrap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateHostifUserDefinedTrapRequest* req, + lemming::dataplane::sai::CreateHostifUserDefinedTrapResponse* resp); + + grpc::Status RemoveHostifUserDefinedTrap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveHostifUserDefinedTrapRequest* req, + lemming::dataplane::sai::RemoveHostifUserDefinedTrapResponse* resp); + + grpc::Status SetHostifUserDefinedTrapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetHostifUserDefinedTrapAttributeRequest* + req, + lemming::dataplane::sai::SetHostifUserDefinedTrapAttributeResponse* resp); + + grpc::Status GetHostifUserDefinedTrapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetHostifUserDefinedTrapAttributeRequest* + req, + lemming::dataplane::sai::GetHostifUserDefinedTrapAttributeResponse* resp); + + sai_hostif_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_HOSTIF_H_ diff --git a/dataplane/standalone/saiserver/ipmc.cc b/dataplane/standalone/saiserver/ipmc.cc new file mode 100644 index 00000000..efe1205b --- /dev/null +++ b/dataplane/standalone/saiserver/ipmc.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/ipmc.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/ipmc.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Ipmc::CreateIpmcEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpmcEntryRequest* req, + lemming::dataplane::sai::CreateIpmcEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipmc::RemoveIpmcEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpmcEntryRequest* req, + lemming::dataplane::sai::RemoveIpmcEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipmc::SetIpmcEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIpmcEntryAttributeRequest* req, + lemming::dataplane::sai::SetIpmcEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipmc::GetIpmcEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpmcEntryAttributeRequest* req, + lemming::dataplane::sai::GetIpmcEntryAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/ipmc.h b/dataplane/standalone/saiserver/ipmc.h new file mode 100644 index 00000000..80493fba --- /dev/null +++ b/dataplane/standalone/saiserver/ipmc.h @@ -0,0 +1,55 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_IPMC_H_ +#define DATAPLANE_STANDALONE_SAI_IPMC_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/ipmc.grpc.pb.h" +#include "dataplane/proto/sai/ipmc.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Ipmc final : public lemming::dataplane::sai::Ipmc::Service { + public: + grpc::Status CreateIpmcEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpmcEntryRequest* req, + lemming::dataplane::sai::CreateIpmcEntryResponse* resp); + + grpc::Status RemoveIpmcEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpmcEntryRequest* req, + lemming::dataplane::sai::RemoveIpmcEntryResponse* resp); + + grpc::Status SetIpmcEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIpmcEntryAttributeRequest* req, + lemming::dataplane::sai::SetIpmcEntryAttributeResponse* resp); + + grpc::Status GetIpmcEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpmcEntryAttributeRequest* req, + lemming::dataplane::sai::GetIpmcEntryAttributeResponse* resp); + + sai_ipmc_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_IPMC_H_ diff --git a/dataplane/standalone/saiserver/ipmc_group.cc b/dataplane/standalone/saiserver/ipmc_group.cc new file mode 100644 index 00000000..6814b8c2 --- /dev/null +++ b/dataplane/standalone/saiserver/ipmc_group.cc @@ -0,0 +1,64 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/ipmc_group.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/ipmc_group.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status IpmcGroup::CreateIpmcGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpmcGroupRequest* req, + lemming::dataplane::sai::CreateIpmcGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IpmcGroup::RemoveIpmcGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpmcGroupRequest* req, + lemming::dataplane::sai::RemoveIpmcGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IpmcGroup::GetIpmcGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpmcGroupAttributeRequest* req, + lemming::dataplane::sai::GetIpmcGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IpmcGroup::CreateIpmcGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpmcGroupMemberRequest* req, + lemming::dataplane::sai::CreateIpmcGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IpmcGroup::RemoveIpmcGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpmcGroupMemberRequest* req, + lemming::dataplane::sai::RemoveIpmcGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IpmcGroup::GetIpmcGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpmcGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetIpmcGroupMemberAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/ipmc_group.h b/dataplane/standalone/saiserver/ipmc_group.h new file mode 100644 index 00000000..5536b113 --- /dev/null +++ b/dataplane/standalone/saiserver/ipmc_group.h @@ -0,0 +1,65 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_IPMC_GROUP_H_ +#define DATAPLANE_STANDALONE_SAI_IPMC_GROUP_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/ipmc_group.grpc.pb.h" +#include "dataplane/proto/sai/ipmc_group.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class IpmcGroup final : public lemming::dataplane::sai::IpmcGroup::Service { + public: + grpc::Status CreateIpmcGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpmcGroupRequest* req, + lemming::dataplane::sai::CreateIpmcGroupResponse* resp); + + grpc::Status RemoveIpmcGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpmcGroupRequest* req, + lemming::dataplane::sai::RemoveIpmcGroupResponse* resp); + + grpc::Status GetIpmcGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpmcGroupAttributeRequest* req, + lemming::dataplane::sai::GetIpmcGroupAttributeResponse* resp); + + grpc::Status CreateIpmcGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpmcGroupMemberRequest* req, + lemming::dataplane::sai::CreateIpmcGroupMemberResponse* resp); + + grpc::Status RemoveIpmcGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpmcGroupMemberRequest* req, + lemming::dataplane::sai::RemoveIpmcGroupMemberResponse* resp); + + grpc::Status GetIpmcGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpmcGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetIpmcGroupMemberAttributeResponse* resp); + + sai_ipmc_group_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_IPMC_GROUP_H_ diff --git a/dataplane/standalone/saiserver/ipsec.cc b/dataplane/standalone/saiserver/ipsec.cc new file mode 100644 index 00000000..ddd1730d --- /dev/null +++ b/dataplane/standalone/saiserver/ipsec.cc @@ -0,0 +1,120 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/ipsec.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/ipsec.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Ipsec::CreateIpsec( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpsecRequest* req, + lemming::dataplane::sai::CreateIpsecResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::RemoveIpsec( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpsecRequest* req, + lemming::dataplane::sai::RemoveIpsecResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::SetIpsecAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIpsecAttributeRequest* req, + lemming::dataplane::sai::SetIpsecAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::GetIpsecAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecAttributeRequest* req, + lemming::dataplane::sai::GetIpsecAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::CreateIpsecPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpsecPortRequest* req, + lemming::dataplane::sai::CreateIpsecPortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::RemoveIpsecPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpsecPortRequest* req, + lemming::dataplane::sai::RemoveIpsecPortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::SetIpsecPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIpsecPortAttributeRequest* req, + lemming::dataplane::sai::SetIpsecPortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::GetIpsecPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecPortAttributeRequest* req, + lemming::dataplane::sai::GetIpsecPortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::GetIpsecPortStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecPortStatsRequest* req, + lemming::dataplane::sai::GetIpsecPortStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::CreateIpsecSa( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpsecSaRequest* req, + lemming::dataplane::sai::CreateIpsecSaResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::RemoveIpsecSa( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpsecSaRequest* req, + lemming::dataplane::sai::RemoveIpsecSaResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::SetIpsecSaAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIpsecSaAttributeRequest* req, + lemming::dataplane::sai::SetIpsecSaAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::GetIpsecSaAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecSaAttributeRequest* req, + lemming::dataplane::sai::GetIpsecSaAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Ipsec::GetIpsecSaStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecSaStatsRequest* req, + lemming::dataplane::sai::GetIpsecSaStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/ipsec.h b/dataplane/standalone/saiserver/ipsec.h new file mode 100644 index 00000000..f29f5d1a --- /dev/null +++ b/dataplane/standalone/saiserver/ipsec.h @@ -0,0 +1,105 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_IPSEC_H_ +#define DATAPLANE_STANDALONE_SAI_IPSEC_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/ipsec.grpc.pb.h" +#include "dataplane/proto/sai/ipsec.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Ipsec final : public lemming::dataplane::sai::Ipsec::Service { + public: + grpc::Status CreateIpsec( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpsecRequest* req, + lemming::dataplane::sai::CreateIpsecResponse* resp); + + grpc::Status RemoveIpsec( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpsecRequest* req, + lemming::dataplane::sai::RemoveIpsecResponse* resp); + + grpc::Status SetIpsecAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIpsecAttributeRequest* req, + lemming::dataplane::sai::SetIpsecAttributeResponse* resp); + + grpc::Status GetIpsecAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecAttributeRequest* req, + lemming::dataplane::sai::GetIpsecAttributeResponse* resp); + + grpc::Status CreateIpsecPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpsecPortRequest* req, + lemming::dataplane::sai::CreateIpsecPortResponse* resp); + + grpc::Status RemoveIpsecPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpsecPortRequest* req, + lemming::dataplane::sai::RemoveIpsecPortResponse* resp); + + grpc::Status SetIpsecPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIpsecPortAttributeRequest* req, + lemming::dataplane::sai::SetIpsecPortAttributeResponse* resp); + + grpc::Status GetIpsecPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecPortAttributeRequest* req, + lemming::dataplane::sai::GetIpsecPortAttributeResponse* resp); + + grpc::Status GetIpsecPortStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecPortStatsRequest* req, + lemming::dataplane::sai::GetIpsecPortStatsResponse* resp); + + grpc::Status CreateIpsecSa( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIpsecSaRequest* req, + lemming::dataplane::sai::CreateIpsecSaResponse* resp); + + grpc::Status RemoveIpsecSa( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIpsecSaRequest* req, + lemming::dataplane::sai::RemoveIpsecSaResponse* resp); + + grpc::Status SetIpsecSaAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetIpsecSaAttributeRequest* req, + lemming::dataplane::sai::SetIpsecSaAttributeResponse* resp); + + grpc::Status GetIpsecSaAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecSaAttributeRequest* req, + lemming::dataplane::sai::GetIpsecSaAttributeResponse* resp); + + grpc::Status GetIpsecSaStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIpsecSaStatsRequest* req, + lemming::dataplane::sai::GetIpsecSaStatsResponse* resp); + + sai_ipsec_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_IPSEC_H_ diff --git a/dataplane/standalone/saiserver/isolation_group.cc b/dataplane/standalone/saiserver/isolation_group.cc new file mode 100644 index 00000000..33abd8e0 --- /dev/null +++ b/dataplane/standalone/saiserver/isolation_group.cc @@ -0,0 +1,64 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/isolation_group.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/isolation_group.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status IsolationGroup::CreateIsolationGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIsolationGroupRequest* req, + lemming::dataplane::sai::CreateIsolationGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IsolationGroup::RemoveIsolationGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIsolationGroupRequest* req, + lemming::dataplane::sai::RemoveIsolationGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IsolationGroup::GetIsolationGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIsolationGroupAttributeRequest* req, + lemming::dataplane::sai::GetIsolationGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IsolationGroup::CreateIsolationGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIsolationGroupMemberRequest* req, + lemming::dataplane::sai::CreateIsolationGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IsolationGroup::RemoveIsolationGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIsolationGroupMemberRequest* req, + lemming::dataplane::sai::RemoveIsolationGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status IsolationGroup::GetIsolationGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIsolationGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetIsolationGroupMemberAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/isolation_group.h b/dataplane/standalone/saiserver/isolation_group.h new file mode 100644 index 00000000..6760812e --- /dev/null +++ b/dataplane/standalone/saiserver/isolation_group.h @@ -0,0 +1,67 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_ISOLATION_GROUP_H_ +#define DATAPLANE_STANDALONE_SAI_ISOLATION_GROUP_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/isolation_group.grpc.pb.h" +#include "dataplane/proto/sai/isolation_group.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class IsolationGroup final + : public lemming::dataplane::sai::IsolationGroup::Service { + public: + grpc::Status CreateIsolationGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIsolationGroupRequest* req, + lemming::dataplane::sai::CreateIsolationGroupResponse* resp); + + grpc::Status RemoveIsolationGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIsolationGroupRequest* req, + lemming::dataplane::sai::RemoveIsolationGroupResponse* resp); + + grpc::Status GetIsolationGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIsolationGroupAttributeRequest* req, + lemming::dataplane::sai::GetIsolationGroupAttributeResponse* resp); + + grpc::Status CreateIsolationGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateIsolationGroupMemberRequest* req, + lemming::dataplane::sai::CreateIsolationGroupMemberResponse* resp); + + grpc::Status RemoveIsolationGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveIsolationGroupMemberRequest* req, + lemming::dataplane::sai::RemoveIsolationGroupMemberResponse* resp); + + grpc::Status GetIsolationGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetIsolationGroupMemberAttributeRequest* + req, + lemming::dataplane::sai::GetIsolationGroupMemberAttributeResponse* resp); + + sai_isolation_group_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_ISOLATION_GROUP_H_ diff --git a/dataplane/standalone/saiserver/l2mc.cc b/dataplane/standalone/saiserver/l2mc.cc new file mode 100644 index 00000000..e53bc032 --- /dev/null +++ b/dataplane/standalone/saiserver/l2mc.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/l2mc.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/l2mc.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status L2mc::CreateL2mcEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateL2mcEntryRequest* req, + lemming::dataplane::sai::CreateL2mcEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status L2mc::RemoveL2mcEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveL2mcEntryRequest* req, + lemming::dataplane::sai::RemoveL2mcEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status L2mc::SetL2mcEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetL2mcEntryAttributeRequest* req, + lemming::dataplane::sai::SetL2mcEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status L2mc::GetL2mcEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetL2mcEntryAttributeRequest* req, + lemming::dataplane::sai::GetL2mcEntryAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/l2mc.h b/dataplane/standalone/saiserver/l2mc.h new file mode 100644 index 00000000..7f664b0e --- /dev/null +++ b/dataplane/standalone/saiserver/l2mc.h @@ -0,0 +1,55 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_L2MC_H_ +#define DATAPLANE_STANDALONE_SAI_L2MC_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/l2mc.grpc.pb.h" +#include "dataplane/proto/sai/l2mc.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class L2mc final : public lemming::dataplane::sai::L2mc::Service { + public: + grpc::Status CreateL2mcEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateL2mcEntryRequest* req, + lemming::dataplane::sai::CreateL2mcEntryResponse* resp); + + grpc::Status RemoveL2mcEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveL2mcEntryRequest* req, + lemming::dataplane::sai::RemoveL2mcEntryResponse* resp); + + grpc::Status SetL2mcEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetL2mcEntryAttributeRequest* req, + lemming::dataplane::sai::SetL2mcEntryAttributeResponse* resp); + + grpc::Status GetL2mcEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetL2mcEntryAttributeRequest* req, + lemming::dataplane::sai::GetL2mcEntryAttributeResponse* resp); + + sai_l2mc_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_L2MC_H_ diff --git a/dataplane/standalone/saiserver/l2mc_group.cc b/dataplane/standalone/saiserver/l2mc_group.cc new file mode 100644 index 00000000..1a4d29c6 --- /dev/null +++ b/dataplane/standalone/saiserver/l2mc_group.cc @@ -0,0 +1,64 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/l2mc_group.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/l2mc_group.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status L2mcGroup::CreateL2mcGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateL2mcGroupRequest* req, + lemming::dataplane::sai::CreateL2mcGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status L2mcGroup::RemoveL2mcGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveL2mcGroupRequest* req, + lemming::dataplane::sai::RemoveL2mcGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status L2mcGroup::GetL2mcGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetL2mcGroupAttributeRequest* req, + lemming::dataplane::sai::GetL2mcGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status L2mcGroup::CreateL2mcGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateL2mcGroupMemberRequest* req, + lemming::dataplane::sai::CreateL2mcGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status L2mcGroup::RemoveL2mcGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveL2mcGroupMemberRequest* req, + lemming::dataplane::sai::RemoveL2mcGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status L2mcGroup::GetL2mcGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetL2mcGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetL2mcGroupMemberAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/l2mc_group.h b/dataplane/standalone/saiserver/l2mc_group.h new file mode 100644 index 00000000..0207af71 --- /dev/null +++ b/dataplane/standalone/saiserver/l2mc_group.h @@ -0,0 +1,65 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_L2MC_GROUP_H_ +#define DATAPLANE_STANDALONE_SAI_L2MC_GROUP_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/l2mc_group.grpc.pb.h" +#include "dataplane/proto/sai/l2mc_group.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class L2mcGroup final : public lemming::dataplane::sai::L2mcGroup::Service { + public: + grpc::Status CreateL2mcGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateL2mcGroupRequest* req, + lemming::dataplane::sai::CreateL2mcGroupResponse* resp); + + grpc::Status RemoveL2mcGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveL2mcGroupRequest* req, + lemming::dataplane::sai::RemoveL2mcGroupResponse* resp); + + grpc::Status GetL2mcGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetL2mcGroupAttributeRequest* req, + lemming::dataplane::sai::GetL2mcGroupAttributeResponse* resp); + + grpc::Status CreateL2mcGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateL2mcGroupMemberRequest* req, + lemming::dataplane::sai::CreateL2mcGroupMemberResponse* resp); + + grpc::Status RemoveL2mcGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveL2mcGroupMemberRequest* req, + lemming::dataplane::sai::RemoveL2mcGroupMemberResponse* resp); + + grpc::Status GetL2mcGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetL2mcGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetL2mcGroupMemberAttributeResponse* resp); + + sai_l2mc_group_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_L2MC_GROUP_H_ diff --git a/dataplane/standalone/saiserver/lag.cc b/dataplane/standalone/saiserver/lag.cc new file mode 100644 index 00000000..86f2ca0d --- /dev/null +++ b/dataplane/standalone/saiserver/lag.cc @@ -0,0 +1,92 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/lag.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/lag.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Lag::CreateLag( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateLagRequest* req, + lemming::dataplane::sai::CreateLagResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Lag::RemoveLag( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveLagRequest* req, + lemming::dataplane::sai::RemoveLagResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Lag::SetLagAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetLagAttributeRequest* req, + lemming::dataplane::sai::SetLagAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Lag::GetLagAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetLagAttributeRequest* req, + lemming::dataplane::sai::GetLagAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Lag::CreateLagMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateLagMemberRequest* req, + lemming::dataplane::sai::CreateLagMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Lag::RemoveLagMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveLagMemberRequest* req, + lemming::dataplane::sai::RemoveLagMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Lag::SetLagMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetLagMemberAttributeRequest* req, + lemming::dataplane::sai::SetLagMemberAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Lag::GetLagMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetLagMemberAttributeRequest* req, + lemming::dataplane::sai::GetLagMemberAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Lag::CreateLagMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateLagMembersRequest* req, + lemming::dataplane::sai::CreateLagMembersResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Lag::RemoveLagMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveLagMembersRequest* req, + lemming::dataplane::sai::RemoveLagMembersResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/lag.h b/dataplane/standalone/saiserver/lag.h new file mode 100644 index 00000000..3afc8c7e --- /dev/null +++ b/dataplane/standalone/saiserver/lag.h @@ -0,0 +1,83 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_LAG_H_ +#define DATAPLANE_STANDALONE_SAI_LAG_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/lag.grpc.pb.h" +#include "dataplane/proto/sai/lag.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Lag final : public lemming::dataplane::sai::Lag::Service { + public: + grpc::Status CreateLag(grpc::ServerContext* context, + const lemming::dataplane::sai::CreateLagRequest* req, + lemming::dataplane::sai::CreateLagResponse* resp); + + grpc::Status RemoveLag(grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveLagRequest* req, + lemming::dataplane::sai::RemoveLagResponse* resp); + + grpc::Status SetLagAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetLagAttributeRequest* req, + lemming::dataplane::sai::SetLagAttributeResponse* resp); + + grpc::Status GetLagAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetLagAttributeRequest* req, + lemming::dataplane::sai::GetLagAttributeResponse* resp); + + grpc::Status CreateLagMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateLagMemberRequest* req, + lemming::dataplane::sai::CreateLagMemberResponse* resp); + + grpc::Status RemoveLagMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveLagMemberRequest* req, + lemming::dataplane::sai::RemoveLagMemberResponse* resp); + + grpc::Status SetLagMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetLagMemberAttributeRequest* req, + lemming::dataplane::sai::SetLagMemberAttributeResponse* resp); + + grpc::Status GetLagMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetLagMemberAttributeRequest* req, + lemming::dataplane::sai::GetLagMemberAttributeResponse* resp); + + grpc::Status CreateLagMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateLagMembersRequest* req, + lemming::dataplane::sai::CreateLagMembersResponse* resp); + + grpc::Status RemoveLagMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveLagMembersRequest* req, + lemming::dataplane::sai::RemoveLagMembersResponse* resp); + + sai_lag_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_LAG_H_ diff --git a/dataplane/standalone/saiserver/macsec.cc b/dataplane/standalone/saiserver/macsec.cc new file mode 100644 index 00000000..c0c91acc --- /dev/null +++ b/dataplane/standalone/saiserver/macsec.cc @@ -0,0 +1,183 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/macsec.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/macsec.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Macsec::CreateMacsec( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecRequest* req, + lemming::dataplane::sai::CreateMacsecResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::RemoveMacsec( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecRequest* req, + lemming::dataplane::sai::RemoveMacsecResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::SetMacsecAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMacsecAttributeRequest* req, + lemming::dataplane::sai::SetMacsecAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::GetMacsecAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecAttributeRequest* req, + lemming::dataplane::sai::GetMacsecAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::CreateMacsecPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecPortRequest* req, + lemming::dataplane::sai::CreateMacsecPortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::RemoveMacsecPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecPortRequest* req, + lemming::dataplane::sai::RemoveMacsecPortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::SetMacsecPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMacsecPortAttributeRequest* req, + lemming::dataplane::sai::SetMacsecPortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::GetMacsecPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecPortAttributeRequest* req, + lemming::dataplane::sai::GetMacsecPortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::GetMacsecPortStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecPortStatsRequest* req, + lemming::dataplane::sai::GetMacsecPortStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::CreateMacsecFlow( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecFlowRequest* req, + lemming::dataplane::sai::CreateMacsecFlowResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::RemoveMacsecFlow( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecFlowRequest* req, + lemming::dataplane::sai::RemoveMacsecFlowResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::GetMacsecFlowAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecFlowAttributeRequest* req, + lemming::dataplane::sai::GetMacsecFlowAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::GetMacsecFlowStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecFlowStatsRequest* req, + lemming::dataplane::sai::GetMacsecFlowStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::CreateMacsecSc( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecScRequest* req, + lemming::dataplane::sai::CreateMacsecScResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::RemoveMacsecSc( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecScRequest* req, + lemming::dataplane::sai::RemoveMacsecScResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::SetMacsecScAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMacsecScAttributeRequest* req, + lemming::dataplane::sai::SetMacsecScAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::GetMacsecScAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecScAttributeRequest* req, + lemming::dataplane::sai::GetMacsecScAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::GetMacsecScStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecScStatsRequest* req, + lemming::dataplane::sai::GetMacsecScStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::CreateMacsecSa( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecSaRequest* req, + lemming::dataplane::sai::CreateMacsecSaResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::RemoveMacsecSa( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecSaRequest* req, + lemming::dataplane::sai::RemoveMacsecSaResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::SetMacsecSaAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMacsecSaAttributeRequest* req, + lemming::dataplane::sai::SetMacsecSaAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::GetMacsecSaAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecSaAttributeRequest* req, + lemming::dataplane::sai::GetMacsecSaAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Macsec::GetMacsecSaStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecSaStatsRequest* req, + lemming::dataplane::sai::GetMacsecSaStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/macsec.h b/dataplane/standalone/saiserver/macsec.h new file mode 100644 index 00000000..38b90167 --- /dev/null +++ b/dataplane/standalone/saiserver/macsec.h @@ -0,0 +1,150 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_MACSEC_H_ +#define DATAPLANE_STANDALONE_SAI_MACSEC_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/macsec.grpc.pb.h" +#include "dataplane/proto/sai/macsec.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Macsec final : public lemming::dataplane::sai::Macsec::Service { + public: + grpc::Status CreateMacsec( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecRequest* req, + lemming::dataplane::sai::CreateMacsecResponse* resp); + + grpc::Status RemoveMacsec( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecRequest* req, + lemming::dataplane::sai::RemoveMacsecResponse* resp); + + grpc::Status SetMacsecAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMacsecAttributeRequest* req, + lemming::dataplane::sai::SetMacsecAttributeResponse* resp); + + grpc::Status GetMacsecAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecAttributeRequest* req, + lemming::dataplane::sai::GetMacsecAttributeResponse* resp); + + grpc::Status CreateMacsecPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecPortRequest* req, + lemming::dataplane::sai::CreateMacsecPortResponse* resp); + + grpc::Status RemoveMacsecPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecPortRequest* req, + lemming::dataplane::sai::RemoveMacsecPortResponse* resp); + + grpc::Status SetMacsecPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMacsecPortAttributeRequest* req, + lemming::dataplane::sai::SetMacsecPortAttributeResponse* resp); + + grpc::Status GetMacsecPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecPortAttributeRequest* req, + lemming::dataplane::sai::GetMacsecPortAttributeResponse* resp); + + grpc::Status GetMacsecPortStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecPortStatsRequest* req, + lemming::dataplane::sai::GetMacsecPortStatsResponse* resp); + + grpc::Status CreateMacsecFlow( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecFlowRequest* req, + lemming::dataplane::sai::CreateMacsecFlowResponse* resp); + + grpc::Status RemoveMacsecFlow( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecFlowRequest* req, + lemming::dataplane::sai::RemoveMacsecFlowResponse* resp); + + grpc::Status GetMacsecFlowAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecFlowAttributeRequest* req, + lemming::dataplane::sai::GetMacsecFlowAttributeResponse* resp); + + grpc::Status GetMacsecFlowStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecFlowStatsRequest* req, + lemming::dataplane::sai::GetMacsecFlowStatsResponse* resp); + + grpc::Status CreateMacsecSc( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecScRequest* req, + lemming::dataplane::sai::CreateMacsecScResponse* resp); + + grpc::Status RemoveMacsecSc( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecScRequest* req, + lemming::dataplane::sai::RemoveMacsecScResponse* resp); + + grpc::Status SetMacsecScAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMacsecScAttributeRequest* req, + lemming::dataplane::sai::SetMacsecScAttributeResponse* resp); + + grpc::Status GetMacsecScAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecScAttributeRequest* req, + lemming::dataplane::sai::GetMacsecScAttributeResponse* resp); + + grpc::Status GetMacsecScStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecScStatsRequest* req, + lemming::dataplane::sai::GetMacsecScStatsResponse* resp); + + grpc::Status CreateMacsecSa( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMacsecSaRequest* req, + lemming::dataplane::sai::CreateMacsecSaResponse* resp); + + grpc::Status RemoveMacsecSa( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMacsecSaRequest* req, + lemming::dataplane::sai::RemoveMacsecSaResponse* resp); + + grpc::Status SetMacsecSaAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMacsecSaAttributeRequest* req, + lemming::dataplane::sai::SetMacsecSaAttributeResponse* resp); + + grpc::Status GetMacsecSaAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecSaAttributeRequest* req, + lemming::dataplane::sai::GetMacsecSaAttributeResponse* resp); + + grpc::Status GetMacsecSaStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMacsecSaStatsRequest* req, + lemming::dataplane::sai::GetMacsecSaStatsResponse* resp); + + sai_macsec_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_MACSEC_H_ diff --git a/dataplane/standalone/saiserver/mcast_fdb.cc b/dataplane/standalone/saiserver/mcast_fdb.cc new file mode 100644 index 00000000..be05757c --- /dev/null +++ b/dataplane/standalone/saiserver/mcast_fdb.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/mcast_fdb.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/mcast_fdb.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status McastFdb::CreateMcastFdbEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMcastFdbEntryRequest* req, + lemming::dataplane::sai::CreateMcastFdbEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status McastFdb::RemoveMcastFdbEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMcastFdbEntryRequest* req, + lemming::dataplane::sai::RemoveMcastFdbEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status McastFdb::SetMcastFdbEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMcastFdbEntryAttributeRequest* req, + lemming::dataplane::sai::SetMcastFdbEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status McastFdb::GetMcastFdbEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMcastFdbEntryAttributeRequest* req, + lemming::dataplane::sai::GetMcastFdbEntryAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/mcast_fdb.h b/dataplane/standalone/saiserver/mcast_fdb.h new file mode 100644 index 00000000..6cfb0dba --- /dev/null +++ b/dataplane/standalone/saiserver/mcast_fdb.h @@ -0,0 +1,55 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_MCAST_FDB_H_ +#define DATAPLANE_STANDALONE_SAI_MCAST_FDB_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/mcast_fdb.grpc.pb.h" +#include "dataplane/proto/sai/mcast_fdb.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class McastFdb final : public lemming::dataplane::sai::McastFdb::Service { + public: + grpc::Status CreateMcastFdbEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMcastFdbEntryRequest* req, + lemming::dataplane::sai::CreateMcastFdbEntryResponse* resp); + + grpc::Status RemoveMcastFdbEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMcastFdbEntryRequest* req, + lemming::dataplane::sai::RemoveMcastFdbEntryResponse* resp); + + grpc::Status SetMcastFdbEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMcastFdbEntryAttributeRequest* req, + lemming::dataplane::sai::SetMcastFdbEntryAttributeResponse* resp); + + grpc::Status GetMcastFdbEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMcastFdbEntryAttributeRequest* req, + lemming::dataplane::sai::GetMcastFdbEntryAttributeResponse* resp); + + sai_mcast_fdb_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_MCAST_FDB_H_ diff --git a/dataplane/standalone/saiserver/mirror.cc b/dataplane/standalone/saiserver/mirror.cc new file mode 100644 index 00000000..bd217ffe --- /dev/null +++ b/dataplane/standalone/saiserver/mirror.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/mirror.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/mirror.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Mirror::CreateMirrorSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMirrorSessionRequest* req, + lemming::dataplane::sai::CreateMirrorSessionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Mirror::RemoveMirrorSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMirrorSessionRequest* req, + lemming::dataplane::sai::RemoveMirrorSessionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Mirror::SetMirrorSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMirrorSessionAttributeRequest* req, + lemming::dataplane::sai::SetMirrorSessionAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Mirror::GetMirrorSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMirrorSessionAttributeRequest* req, + lemming::dataplane::sai::GetMirrorSessionAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/mirror.h b/dataplane/standalone/saiserver/mirror.h new file mode 100644 index 00000000..eac12bd1 --- /dev/null +++ b/dataplane/standalone/saiserver/mirror.h @@ -0,0 +1,55 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_MIRROR_H_ +#define DATAPLANE_STANDALONE_SAI_MIRROR_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/mirror.grpc.pb.h" +#include "dataplane/proto/sai/mirror.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Mirror final : public lemming::dataplane::sai::Mirror::Service { + public: + grpc::Status CreateMirrorSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMirrorSessionRequest* req, + lemming::dataplane::sai::CreateMirrorSessionResponse* resp); + + grpc::Status RemoveMirrorSession( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMirrorSessionRequest* req, + lemming::dataplane::sai::RemoveMirrorSessionResponse* resp); + + grpc::Status SetMirrorSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMirrorSessionAttributeRequest* req, + lemming::dataplane::sai::SetMirrorSessionAttributeResponse* resp); + + grpc::Status GetMirrorSessionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMirrorSessionAttributeRequest* req, + lemming::dataplane::sai::GetMirrorSessionAttributeResponse* resp); + + sai_mirror_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_MIRROR_H_ diff --git a/dataplane/standalone/saiserver/mpls.cc b/dataplane/standalone/saiserver/mpls.cc new file mode 100644 index 00000000..10a3b24c --- /dev/null +++ b/dataplane/standalone/saiserver/mpls.cc @@ -0,0 +1,64 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/mpls.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/mpls.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Mpls::CreateInsegEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateInsegEntryRequest* req, + lemming::dataplane::sai::CreateInsegEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Mpls::RemoveInsegEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveInsegEntryRequest* req, + lemming::dataplane::sai::RemoveInsegEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Mpls::SetInsegEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetInsegEntryAttributeRequest* req, + lemming::dataplane::sai::SetInsegEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Mpls::GetInsegEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetInsegEntryAttributeRequest* req, + lemming::dataplane::sai::GetInsegEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Mpls::CreateInsegEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateInsegEntriesRequest* req, + lemming::dataplane::sai::CreateInsegEntriesResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Mpls::RemoveInsegEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveInsegEntriesRequest* req, + lemming::dataplane::sai::RemoveInsegEntriesResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/mpls.h b/dataplane/standalone/saiserver/mpls.h new file mode 100644 index 00000000..12008433 --- /dev/null +++ b/dataplane/standalone/saiserver/mpls.h @@ -0,0 +1,65 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_MPLS_H_ +#define DATAPLANE_STANDALONE_SAI_MPLS_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/mpls.grpc.pb.h" +#include "dataplane/proto/sai/mpls.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Mpls final : public lemming::dataplane::sai::Mpls::Service { + public: + grpc::Status CreateInsegEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateInsegEntryRequest* req, + lemming::dataplane::sai::CreateInsegEntryResponse* resp); + + grpc::Status RemoveInsegEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveInsegEntryRequest* req, + lemming::dataplane::sai::RemoveInsegEntryResponse* resp); + + grpc::Status SetInsegEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetInsegEntryAttributeRequest* req, + lemming::dataplane::sai::SetInsegEntryAttributeResponse* resp); + + grpc::Status GetInsegEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetInsegEntryAttributeRequest* req, + lemming::dataplane::sai::GetInsegEntryAttributeResponse* resp); + + grpc::Status CreateInsegEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateInsegEntriesRequest* req, + lemming::dataplane::sai::CreateInsegEntriesResponse* resp); + + grpc::Status RemoveInsegEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveInsegEntriesRequest* req, + lemming::dataplane::sai::RemoveInsegEntriesResponse* resp); + + sai_mpls_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_MPLS_H_ diff --git a/dataplane/standalone/saiserver/my_mac.cc b/dataplane/standalone/saiserver/my_mac.cc new file mode 100644 index 00000000..1bb3fa99 --- /dev/null +++ b/dataplane/standalone/saiserver/my_mac.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/my_mac.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/my_mac.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status MyMac::CreateMyMac( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMyMacRequest* req, + lemming::dataplane::sai::CreateMyMacResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status MyMac::RemoveMyMac( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMyMacRequest* req, + lemming::dataplane::sai::RemoveMyMacResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status MyMac::SetMyMacAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMyMacAttributeRequest* req, + lemming::dataplane::sai::SetMyMacAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status MyMac::GetMyMacAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMyMacAttributeRequest* req, + lemming::dataplane::sai::GetMyMacAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/my_mac.h b/dataplane/standalone/saiserver/my_mac.h new file mode 100644 index 00000000..2fe94cd8 --- /dev/null +++ b/dataplane/standalone/saiserver/my_mac.h @@ -0,0 +1,55 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_MY_MAC_H_ +#define DATAPLANE_STANDALONE_SAI_MY_MAC_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/my_mac.grpc.pb.h" +#include "dataplane/proto/sai/my_mac.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class MyMac final : public lemming::dataplane::sai::MyMac::Service { + public: + grpc::Status CreateMyMac( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMyMacRequest* req, + lemming::dataplane::sai::CreateMyMacResponse* resp); + + grpc::Status RemoveMyMac( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMyMacRequest* req, + lemming::dataplane::sai::RemoveMyMacResponse* resp); + + grpc::Status SetMyMacAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMyMacAttributeRequest* req, + lemming::dataplane::sai::SetMyMacAttributeResponse* resp); + + grpc::Status GetMyMacAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMyMacAttributeRequest* req, + lemming::dataplane::sai::GetMyMacAttributeResponse* resp); + + sai_my_mac_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_MY_MAC_H_ diff --git a/dataplane/standalone/saiserver/nat.cc b/dataplane/standalone/saiserver/nat.cc new file mode 100644 index 00000000..e794ff09 --- /dev/null +++ b/dataplane/standalone/saiserver/nat.cc @@ -0,0 +1,92 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/nat.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/nat.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Nat::CreateNatEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNatEntryRequest* req, + lemming::dataplane::sai::CreateNatEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Nat::RemoveNatEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNatEntryRequest* req, + lemming::dataplane::sai::RemoveNatEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Nat::SetNatEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNatEntryAttributeRequest* req, + lemming::dataplane::sai::SetNatEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Nat::GetNatEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNatEntryAttributeRequest* req, + lemming::dataplane::sai::GetNatEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Nat::CreateNatEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNatEntriesRequest* req, + lemming::dataplane::sai::CreateNatEntriesResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Nat::RemoveNatEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNatEntriesRequest* req, + lemming::dataplane::sai::RemoveNatEntriesResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Nat::CreateNatZoneCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNatZoneCounterRequest* req, + lemming::dataplane::sai::CreateNatZoneCounterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Nat::RemoveNatZoneCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNatZoneCounterRequest* req, + lemming::dataplane::sai::RemoveNatZoneCounterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Nat::SetNatZoneCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNatZoneCounterAttributeRequest* req, + lemming::dataplane::sai::SetNatZoneCounterAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Nat::GetNatZoneCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNatZoneCounterAttributeRequest* req, + lemming::dataplane::sai::GetNatZoneCounterAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/nat.h b/dataplane/standalone/saiserver/nat.h new file mode 100644 index 00000000..795c0542 --- /dev/null +++ b/dataplane/standalone/saiserver/nat.h @@ -0,0 +1,85 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_NAT_H_ +#define DATAPLANE_STANDALONE_SAI_NAT_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/nat.grpc.pb.h" +#include "dataplane/proto/sai/nat.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Nat final : public lemming::dataplane::sai::Nat::Service { + public: + grpc::Status CreateNatEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNatEntryRequest* req, + lemming::dataplane::sai::CreateNatEntryResponse* resp); + + grpc::Status RemoveNatEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNatEntryRequest* req, + lemming::dataplane::sai::RemoveNatEntryResponse* resp); + + grpc::Status SetNatEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNatEntryAttributeRequest* req, + lemming::dataplane::sai::SetNatEntryAttributeResponse* resp); + + grpc::Status GetNatEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNatEntryAttributeRequest* req, + lemming::dataplane::sai::GetNatEntryAttributeResponse* resp); + + grpc::Status CreateNatEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNatEntriesRequest* req, + lemming::dataplane::sai::CreateNatEntriesResponse* resp); + + grpc::Status RemoveNatEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNatEntriesRequest* req, + lemming::dataplane::sai::RemoveNatEntriesResponse* resp); + + grpc::Status CreateNatZoneCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNatZoneCounterRequest* req, + lemming::dataplane::sai::CreateNatZoneCounterResponse* resp); + + grpc::Status RemoveNatZoneCounter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNatZoneCounterRequest* req, + lemming::dataplane::sai::RemoveNatZoneCounterResponse* resp); + + grpc::Status SetNatZoneCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNatZoneCounterAttributeRequest* req, + lemming::dataplane::sai::SetNatZoneCounterAttributeResponse* resp); + + grpc::Status GetNatZoneCounterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNatZoneCounterAttributeRequest* req, + lemming::dataplane::sai::GetNatZoneCounterAttributeResponse* resp); + + sai_nat_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_NAT_H_ diff --git a/dataplane/standalone/saiserver/neighbor.cc b/dataplane/standalone/saiserver/neighbor.cc new file mode 100644 index 00000000..2695a2be --- /dev/null +++ b/dataplane/standalone/saiserver/neighbor.cc @@ -0,0 +1,64 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/neighbor.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/neighbor.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Neighbor::CreateNeighborEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNeighborEntryRequest* req, + lemming::dataplane::sai::CreateNeighborEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Neighbor::RemoveNeighborEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNeighborEntryRequest* req, + lemming::dataplane::sai::RemoveNeighborEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Neighbor::SetNeighborEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNeighborEntryAttributeRequest* req, + lemming::dataplane::sai::SetNeighborEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Neighbor::GetNeighborEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNeighborEntryAttributeRequest* req, + lemming::dataplane::sai::GetNeighborEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Neighbor::CreateNeighborEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNeighborEntriesRequest* req, + lemming::dataplane::sai::CreateNeighborEntriesResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Neighbor::RemoveNeighborEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNeighborEntriesRequest* req, + lemming::dataplane::sai::RemoveNeighborEntriesResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/neighbor.h b/dataplane/standalone/saiserver/neighbor.h new file mode 100644 index 00000000..ea8b3bf9 --- /dev/null +++ b/dataplane/standalone/saiserver/neighbor.h @@ -0,0 +1,65 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_NEIGHBOR_H_ +#define DATAPLANE_STANDALONE_SAI_NEIGHBOR_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/neighbor.grpc.pb.h" +#include "dataplane/proto/sai/neighbor.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Neighbor final : public lemming::dataplane::sai::Neighbor::Service { + public: + grpc::Status CreateNeighborEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNeighborEntryRequest* req, + lemming::dataplane::sai::CreateNeighborEntryResponse* resp); + + grpc::Status RemoveNeighborEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNeighborEntryRequest* req, + lemming::dataplane::sai::RemoveNeighborEntryResponse* resp); + + grpc::Status SetNeighborEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNeighborEntryAttributeRequest* req, + lemming::dataplane::sai::SetNeighborEntryAttributeResponse* resp); + + grpc::Status GetNeighborEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNeighborEntryAttributeRequest* req, + lemming::dataplane::sai::GetNeighborEntryAttributeResponse* resp); + + grpc::Status CreateNeighborEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNeighborEntriesRequest* req, + lemming::dataplane::sai::CreateNeighborEntriesResponse* resp); + + grpc::Status RemoveNeighborEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNeighborEntriesRequest* req, + lemming::dataplane::sai::RemoveNeighborEntriesResponse* resp); + + sai_neighbor_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_NEIGHBOR_H_ diff --git a/dataplane/standalone/saiserver/next_hop.cc b/dataplane/standalone/saiserver/next_hop.cc new file mode 100644 index 00000000..a3185c8b --- /dev/null +++ b/dataplane/standalone/saiserver/next_hop.cc @@ -0,0 +1,64 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/next_hop.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/next_hop.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status NextHop::CreateNextHop( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopRequest* req, + lemming::dataplane::sai::CreateNextHopResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHop::RemoveNextHop( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopRequest* req, + lemming::dataplane::sai::RemoveNextHopResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHop::SetNextHopAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNextHopAttributeRequest* req, + lemming::dataplane::sai::SetNextHopAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHop::GetNextHopAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNextHopAttributeRequest* req, + lemming::dataplane::sai::GetNextHopAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHop::CreateNextHops( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopsRequest* req, + lemming::dataplane::sai::CreateNextHopsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHop::RemoveNextHops( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopsRequest* req, + lemming::dataplane::sai::RemoveNextHopsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/next_hop.h b/dataplane/standalone/saiserver/next_hop.h new file mode 100644 index 00000000..bfcfcdd2 --- /dev/null +++ b/dataplane/standalone/saiserver/next_hop.h @@ -0,0 +1,65 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_NEXT_HOP_H_ +#define DATAPLANE_STANDALONE_SAI_NEXT_HOP_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/next_hop.grpc.pb.h" +#include "dataplane/proto/sai/next_hop.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class NextHop final : public lemming::dataplane::sai::NextHop::Service { + public: + grpc::Status CreateNextHop( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopRequest* req, + lemming::dataplane::sai::CreateNextHopResponse* resp); + + grpc::Status RemoveNextHop( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopRequest* req, + lemming::dataplane::sai::RemoveNextHopResponse* resp); + + grpc::Status SetNextHopAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNextHopAttributeRequest* req, + lemming::dataplane::sai::SetNextHopAttributeResponse* resp); + + grpc::Status GetNextHopAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNextHopAttributeRequest* req, + lemming::dataplane::sai::GetNextHopAttributeResponse* resp); + + grpc::Status CreateNextHops( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopsRequest* req, + lemming::dataplane::sai::CreateNextHopsResponse* resp); + + grpc::Status RemoveNextHops( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopsRequest* req, + lemming::dataplane::sai::RemoveNextHopsResponse* resp); + + sai_next_hop_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_NEXT_HOP_H_ diff --git a/dataplane/standalone/saiserver/next_hop_group.cc b/dataplane/standalone/saiserver/next_hop_group.cc new file mode 100644 index 00000000..25c0f22b --- /dev/null +++ b/dataplane/standalone/saiserver/next_hop_group.cc @@ -0,0 +1,134 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/next_hop_group.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/next_hop_group.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status NextHopGroup::CreateNextHopGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupRequest* req, + lemming::dataplane::sai::CreateNextHopGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::RemoveNextHopGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::SetNextHopGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNextHopGroupAttributeRequest* req, + lemming::dataplane::sai::SetNextHopGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::GetNextHopGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNextHopGroupAttributeRequest* req, + lemming::dataplane::sai::GetNextHopGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::CreateNextHopGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupMemberRequest* req, + lemming::dataplane::sai::CreateNextHopGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::RemoveNextHopGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupMemberRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::SetNextHopGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNextHopGroupMemberAttributeRequest* req, + lemming::dataplane::sai::SetNextHopGroupMemberAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::GetNextHopGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNextHopGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetNextHopGroupMemberAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::CreateNextHopGroupMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupMembersRequest* req, + lemming::dataplane::sai::CreateNextHopGroupMembersResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::RemoveNextHopGroupMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupMembersRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupMembersResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::CreateNextHopGroupMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupMapRequest* req, + lemming::dataplane::sai::CreateNextHopGroupMapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::RemoveNextHopGroupMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupMapRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupMapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::SetNextHopGroupMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNextHopGroupMapAttributeRequest* req, + lemming::dataplane::sai::SetNextHopGroupMapAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::GetNextHopGroupMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNextHopGroupMapAttributeRequest* req, + lemming::dataplane::sai::GetNextHopGroupMapAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::CreateNextHopGroups( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupsRequest* req, + lemming::dataplane::sai::CreateNextHopGroupsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status NextHopGroup::RemoveNextHopGroups( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupsRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/next_hop_group.h b/dataplane/standalone/saiserver/next_hop_group.h new file mode 100644 index 00000000..b708efcd --- /dev/null +++ b/dataplane/standalone/saiserver/next_hop_group.h @@ -0,0 +1,116 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_NEXT_HOP_GROUP_H_ +#define DATAPLANE_STANDALONE_SAI_NEXT_HOP_GROUP_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/next_hop_group.grpc.pb.h" +#include "dataplane/proto/sai/next_hop_group.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class NextHopGroup final + : public lemming::dataplane::sai::NextHopGroup::Service { + public: + grpc::Status CreateNextHopGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupRequest* req, + lemming::dataplane::sai::CreateNextHopGroupResponse* resp); + + grpc::Status RemoveNextHopGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupResponse* resp); + + grpc::Status SetNextHopGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNextHopGroupAttributeRequest* req, + lemming::dataplane::sai::SetNextHopGroupAttributeResponse* resp); + + grpc::Status GetNextHopGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNextHopGroupAttributeRequest* req, + lemming::dataplane::sai::GetNextHopGroupAttributeResponse* resp); + + grpc::Status CreateNextHopGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupMemberRequest* req, + lemming::dataplane::sai::CreateNextHopGroupMemberResponse* resp); + + grpc::Status RemoveNextHopGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupMemberRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupMemberResponse* resp); + + grpc::Status SetNextHopGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNextHopGroupMemberAttributeRequest* req, + lemming::dataplane::sai::SetNextHopGroupMemberAttributeResponse* resp); + + grpc::Status GetNextHopGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNextHopGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetNextHopGroupMemberAttributeResponse* resp); + + grpc::Status CreateNextHopGroupMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupMembersRequest* req, + lemming::dataplane::sai::CreateNextHopGroupMembersResponse* resp); + + grpc::Status RemoveNextHopGroupMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupMembersRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupMembersResponse* resp); + + grpc::Status CreateNextHopGroupMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupMapRequest* req, + lemming::dataplane::sai::CreateNextHopGroupMapResponse* resp); + + grpc::Status RemoveNextHopGroupMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupMapRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupMapResponse* resp); + + grpc::Status SetNextHopGroupMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetNextHopGroupMapAttributeRequest* req, + lemming::dataplane::sai::SetNextHopGroupMapAttributeResponse* resp); + + grpc::Status GetNextHopGroupMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetNextHopGroupMapAttributeRequest* req, + lemming::dataplane::sai::GetNextHopGroupMapAttributeResponse* resp); + + grpc::Status CreateNextHopGroups( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateNextHopGroupsRequest* req, + lemming::dataplane::sai::CreateNextHopGroupsResponse* resp); + + grpc::Status RemoveNextHopGroups( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveNextHopGroupsRequest* req, + lemming::dataplane::sai::RemoveNextHopGroupsResponse* resp); + + sai_next_hop_group_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_NEXT_HOP_GROUP_H_ diff --git a/dataplane/standalone/saiserver/policer.cc b/dataplane/standalone/saiserver/policer.cc new file mode 100644 index 00000000..4f5c906a --- /dev/null +++ b/dataplane/standalone/saiserver/policer.cc @@ -0,0 +1,57 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/policer.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/policer.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Policer::CreatePolicer( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePolicerRequest* req, + lemming::dataplane::sai::CreatePolicerResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Policer::RemovePolicer( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePolicerRequest* req, + lemming::dataplane::sai::RemovePolicerResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Policer::SetPolicerAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetPolicerAttributeRequest* req, + lemming::dataplane::sai::SetPolicerAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Policer::GetPolicerAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPolicerAttributeRequest* req, + lemming::dataplane::sai::GetPolicerAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Policer::GetPolicerStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPolicerStatsRequest* req, + lemming::dataplane::sai::GetPolicerStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/policer.h b/dataplane/standalone/saiserver/policer.h new file mode 100644 index 00000000..b7891755 --- /dev/null +++ b/dataplane/standalone/saiserver/policer.h @@ -0,0 +1,60 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_POLICER_H_ +#define DATAPLANE_STANDALONE_SAI_POLICER_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/policer.grpc.pb.h" +#include "dataplane/proto/sai/policer.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Policer final : public lemming::dataplane::sai::Policer::Service { + public: + grpc::Status CreatePolicer( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePolicerRequest* req, + lemming::dataplane::sai::CreatePolicerResponse* resp); + + grpc::Status RemovePolicer( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePolicerRequest* req, + lemming::dataplane::sai::RemovePolicerResponse* resp); + + grpc::Status SetPolicerAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetPolicerAttributeRequest* req, + lemming::dataplane::sai::SetPolicerAttributeResponse* resp); + + grpc::Status GetPolicerAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPolicerAttributeRequest* req, + lemming::dataplane::sai::GetPolicerAttributeResponse* resp); + + grpc::Status GetPolicerStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPolicerStatsRequest* req, + lemming::dataplane::sai::GetPolicerStatsResponse* resp); + + sai_policer_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_POLICER_H_ diff --git a/dataplane/standalone/saiserver/port.cc b/dataplane/standalone/saiserver/port.cc new file mode 100644 index 00000000..70a22872 --- /dev/null +++ b/dataplane/standalone/saiserver/port.cc @@ -0,0 +1,155 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/port.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/port.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Port::CreatePort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortRequest* req, + lemming::dataplane::sai::CreatePortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::RemovePort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortRequest* req, + lemming::dataplane::sai::RemovePortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::SetPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetPortAttributeRequest* req, + lemming::dataplane::sai::SetPortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::GetPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortAttributeRequest* req, + lemming::dataplane::sai::GetPortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::GetPortStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortStatsRequest* req, + lemming::dataplane::sai::GetPortStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::CreatePortPool( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortPoolRequest* req, + lemming::dataplane::sai::CreatePortPoolResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::RemovePortPool( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortPoolRequest* req, + lemming::dataplane::sai::RemovePortPoolResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::SetPortPoolAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetPortPoolAttributeRequest* req, + lemming::dataplane::sai::SetPortPoolAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::GetPortPoolAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortPoolAttributeRequest* req, + lemming::dataplane::sai::GetPortPoolAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::GetPortPoolStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortPoolStatsRequest* req, + lemming::dataplane::sai::GetPortPoolStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::CreatePortConnector( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortConnectorRequest* req, + lemming::dataplane::sai::CreatePortConnectorResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::RemovePortConnector( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortConnectorRequest* req, + lemming::dataplane::sai::RemovePortConnectorResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::SetPortConnectorAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetPortConnectorAttributeRequest* req, + lemming::dataplane::sai::SetPortConnectorAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::GetPortConnectorAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortConnectorAttributeRequest* req, + lemming::dataplane::sai::GetPortConnectorAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::CreatePortSerdes( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortSerdesRequest* req, + lemming::dataplane::sai::CreatePortSerdesResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::RemovePortSerdes( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortSerdesRequest* req, + lemming::dataplane::sai::RemovePortSerdesResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::GetPortSerdesAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortSerdesAttributeRequest* req, + lemming::dataplane::sai::GetPortSerdesAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::CreatePorts( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortsRequest* req, + lemming::dataplane::sai::CreatePortsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Port::RemovePorts( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortsRequest* req, + lemming::dataplane::sai::RemovePortsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/port.h b/dataplane/standalone/saiserver/port.h new file mode 100644 index 00000000..0e7db8a3 --- /dev/null +++ b/dataplane/standalone/saiserver/port.h @@ -0,0 +1,128 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_PORT_H_ +#define DATAPLANE_STANDALONE_SAI_PORT_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/port.grpc.pb.h" +#include "dataplane/proto/sai/port.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Port final : public lemming::dataplane::sai::Port::Service { + public: + grpc::Status CreatePort(grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortRequest* req, + lemming::dataplane::sai::CreatePortResponse* resp); + + grpc::Status RemovePort(grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortRequest* req, + lemming::dataplane::sai::RemovePortResponse* resp); + + grpc::Status SetPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetPortAttributeRequest* req, + lemming::dataplane::sai::SetPortAttributeResponse* resp); + + grpc::Status GetPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortAttributeRequest* req, + lemming::dataplane::sai::GetPortAttributeResponse* resp); + + grpc::Status GetPortStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortStatsRequest* req, + lemming::dataplane::sai::GetPortStatsResponse* resp); + + grpc::Status CreatePortPool( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortPoolRequest* req, + lemming::dataplane::sai::CreatePortPoolResponse* resp); + + grpc::Status RemovePortPool( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortPoolRequest* req, + lemming::dataplane::sai::RemovePortPoolResponse* resp); + + grpc::Status SetPortPoolAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetPortPoolAttributeRequest* req, + lemming::dataplane::sai::SetPortPoolAttributeResponse* resp); + + grpc::Status GetPortPoolAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortPoolAttributeRequest* req, + lemming::dataplane::sai::GetPortPoolAttributeResponse* resp); + + grpc::Status GetPortPoolStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortPoolStatsRequest* req, + lemming::dataplane::sai::GetPortPoolStatsResponse* resp); + + grpc::Status CreatePortConnector( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortConnectorRequest* req, + lemming::dataplane::sai::CreatePortConnectorResponse* resp); + + grpc::Status RemovePortConnector( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortConnectorRequest* req, + lemming::dataplane::sai::RemovePortConnectorResponse* resp); + + grpc::Status SetPortConnectorAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetPortConnectorAttributeRequest* req, + lemming::dataplane::sai::SetPortConnectorAttributeResponse* resp); + + grpc::Status GetPortConnectorAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortConnectorAttributeRequest* req, + lemming::dataplane::sai::GetPortConnectorAttributeResponse* resp); + + grpc::Status CreatePortSerdes( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortSerdesRequest* req, + lemming::dataplane::sai::CreatePortSerdesResponse* resp); + + grpc::Status RemovePortSerdes( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortSerdesRequest* req, + lemming::dataplane::sai::RemovePortSerdesResponse* resp); + + grpc::Status GetPortSerdesAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetPortSerdesAttributeRequest* req, + lemming::dataplane::sai::GetPortSerdesAttributeResponse* resp); + + grpc::Status CreatePorts( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreatePortsRequest* req, + lemming::dataplane::sai::CreatePortsResponse* resp); + + grpc::Status RemovePorts( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemovePortsRequest* req, + lemming::dataplane::sai::RemovePortsResponse* resp); + + sai_port_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_PORT_H_ diff --git a/dataplane/standalone/saiserver/qos_map.cc b/dataplane/standalone/saiserver/qos_map.cc new file mode 100644 index 00000000..12575f1a --- /dev/null +++ b/dataplane/standalone/saiserver/qos_map.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/qos_map.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/qos_map.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status QosMap::CreateQosMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateQosMapRequest* req, + lemming::dataplane::sai::CreateQosMapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status QosMap::RemoveQosMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveQosMapRequest* req, + lemming::dataplane::sai::RemoveQosMapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status QosMap::SetQosMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetQosMapAttributeRequest* req, + lemming::dataplane::sai::SetQosMapAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status QosMap::GetQosMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetQosMapAttributeRequest* req, + lemming::dataplane::sai::GetQosMapAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/qos_map.h b/dataplane/standalone/saiserver/qos_map.h new file mode 100644 index 00000000..c7e79b7a --- /dev/null +++ b/dataplane/standalone/saiserver/qos_map.h @@ -0,0 +1,55 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_QOS_MAP_H_ +#define DATAPLANE_STANDALONE_SAI_QOS_MAP_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/qos_map.grpc.pb.h" +#include "dataplane/proto/sai/qos_map.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class QosMap final : public lemming::dataplane::sai::QosMap::Service { + public: + grpc::Status CreateQosMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateQosMapRequest* req, + lemming::dataplane::sai::CreateQosMapResponse* resp); + + grpc::Status RemoveQosMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveQosMapRequest* req, + lemming::dataplane::sai::RemoveQosMapResponse* resp); + + grpc::Status SetQosMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetQosMapAttributeRequest* req, + lemming::dataplane::sai::SetQosMapAttributeResponse* resp); + + grpc::Status GetQosMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetQosMapAttributeRequest* req, + lemming::dataplane::sai::GetQosMapAttributeResponse* resp); + + sai_qos_map_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_QOS_MAP_H_ diff --git a/dataplane/standalone/saiserver/queue.cc b/dataplane/standalone/saiserver/queue.cc new file mode 100644 index 00000000..0e02231b --- /dev/null +++ b/dataplane/standalone/saiserver/queue.cc @@ -0,0 +1,57 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/queue.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/queue.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Queue::CreateQueue( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateQueueRequest* req, + lemming::dataplane::sai::CreateQueueResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Queue::RemoveQueue( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveQueueRequest* req, + lemming::dataplane::sai::RemoveQueueResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Queue::SetQueueAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetQueueAttributeRequest* req, + lemming::dataplane::sai::SetQueueAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Queue::GetQueueAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetQueueAttributeRequest* req, + lemming::dataplane::sai::GetQueueAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Queue::GetQueueStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetQueueStatsRequest* req, + lemming::dataplane::sai::GetQueueStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/queue.h b/dataplane/standalone/saiserver/queue.h new file mode 100644 index 00000000..a8081d4e --- /dev/null +++ b/dataplane/standalone/saiserver/queue.h @@ -0,0 +1,60 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_QUEUE_H_ +#define DATAPLANE_STANDALONE_SAI_QUEUE_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/queue.grpc.pb.h" +#include "dataplane/proto/sai/queue.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Queue final : public lemming::dataplane::sai::Queue::Service { + public: + grpc::Status CreateQueue( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateQueueRequest* req, + lemming::dataplane::sai::CreateQueueResponse* resp); + + grpc::Status RemoveQueue( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveQueueRequest* req, + lemming::dataplane::sai::RemoveQueueResponse* resp); + + grpc::Status SetQueueAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetQueueAttributeRequest* req, + lemming::dataplane::sai::SetQueueAttributeResponse* resp); + + grpc::Status GetQueueAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetQueueAttributeRequest* req, + lemming::dataplane::sai::GetQueueAttributeResponse* resp); + + grpc::Status GetQueueStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetQueueStatsRequest* req, + lemming::dataplane::sai::GetQueueStatsResponse* resp); + + sai_queue_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_QUEUE_H_ diff --git a/dataplane/standalone/saiserver/route.cc b/dataplane/standalone/saiserver/route.cc new file mode 100644 index 00000000..9077bed6 --- /dev/null +++ b/dataplane/standalone/saiserver/route.cc @@ -0,0 +1,64 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/route.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/route.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Route::CreateRouteEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRouteEntryRequest* req, + lemming::dataplane::sai::CreateRouteEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Route::RemoveRouteEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRouteEntryRequest* req, + lemming::dataplane::sai::RemoveRouteEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Route::SetRouteEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetRouteEntryAttributeRequest* req, + lemming::dataplane::sai::SetRouteEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Route::GetRouteEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRouteEntryAttributeRequest* req, + lemming::dataplane::sai::GetRouteEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Route::CreateRouteEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRouteEntriesRequest* req, + lemming::dataplane::sai::CreateRouteEntriesResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Route::RemoveRouteEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRouteEntriesRequest* req, + lemming::dataplane::sai::RemoveRouteEntriesResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/route.h b/dataplane/standalone/saiserver/route.h new file mode 100644 index 00000000..655cba02 --- /dev/null +++ b/dataplane/standalone/saiserver/route.h @@ -0,0 +1,65 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_ROUTE_H_ +#define DATAPLANE_STANDALONE_SAI_ROUTE_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/route.grpc.pb.h" +#include "dataplane/proto/sai/route.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Route final : public lemming::dataplane::sai::Route::Service { + public: + grpc::Status CreateRouteEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRouteEntryRequest* req, + lemming::dataplane::sai::CreateRouteEntryResponse* resp); + + grpc::Status RemoveRouteEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRouteEntryRequest* req, + lemming::dataplane::sai::RemoveRouteEntryResponse* resp); + + grpc::Status SetRouteEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetRouteEntryAttributeRequest* req, + lemming::dataplane::sai::SetRouteEntryAttributeResponse* resp); + + grpc::Status GetRouteEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRouteEntryAttributeRequest* req, + lemming::dataplane::sai::GetRouteEntryAttributeResponse* resp); + + grpc::Status CreateRouteEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRouteEntriesRequest* req, + lemming::dataplane::sai::CreateRouteEntriesResponse* resp); + + grpc::Status RemoveRouteEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRouteEntriesRequest* req, + lemming::dataplane::sai::RemoveRouteEntriesResponse* resp); + + sai_route_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_ROUTE_H_ diff --git a/dataplane/standalone/saiserver/router_interface.cc b/dataplane/standalone/saiserver/router_interface.cc new file mode 100644 index 00000000..08644df0 --- /dev/null +++ b/dataplane/standalone/saiserver/router_interface.cc @@ -0,0 +1,57 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/router_interface.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/router_interface.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status RouterInterface::CreateRouterInterface( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRouterInterfaceRequest* req, + lemming::dataplane::sai::CreateRouterInterfaceResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status RouterInterface::RemoveRouterInterface( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRouterInterfaceRequest* req, + lemming::dataplane::sai::RemoveRouterInterfaceResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status RouterInterface::SetRouterInterfaceAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetRouterInterfaceAttributeRequest* req, + lemming::dataplane::sai::SetRouterInterfaceAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status RouterInterface::GetRouterInterfaceAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRouterInterfaceAttributeRequest* req, + lemming::dataplane::sai::GetRouterInterfaceAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status RouterInterface::GetRouterInterfaceStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRouterInterfaceStatsRequest* req, + lemming::dataplane::sai::GetRouterInterfaceStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/router_interface.h b/dataplane/standalone/saiserver/router_interface.h new file mode 100644 index 00000000..7f6b0dd8 --- /dev/null +++ b/dataplane/standalone/saiserver/router_interface.h @@ -0,0 +1,61 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_ROUTER_INTERFACE_H_ +#define DATAPLANE_STANDALONE_SAI_ROUTER_INTERFACE_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/router_interface.grpc.pb.h" +#include "dataplane/proto/sai/router_interface.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class RouterInterface final + : public lemming::dataplane::sai::RouterInterface::Service { + public: + grpc::Status CreateRouterInterface( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRouterInterfaceRequest* req, + lemming::dataplane::sai::CreateRouterInterfaceResponse* resp); + + grpc::Status RemoveRouterInterface( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRouterInterfaceRequest* req, + lemming::dataplane::sai::RemoveRouterInterfaceResponse* resp); + + grpc::Status SetRouterInterfaceAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetRouterInterfaceAttributeRequest* req, + lemming::dataplane::sai::SetRouterInterfaceAttributeResponse* resp); + + grpc::Status GetRouterInterfaceAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRouterInterfaceAttributeRequest* req, + lemming::dataplane::sai::GetRouterInterfaceAttributeResponse* resp); + + grpc::Status GetRouterInterfaceStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRouterInterfaceStatsRequest* req, + lemming::dataplane::sai::GetRouterInterfaceStatsResponse* resp); + + sai_router_interface_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_ROUTER_INTERFACE_H_ diff --git a/dataplane/standalone/saiserver/rpf_group.cc b/dataplane/standalone/saiserver/rpf_group.cc new file mode 100644 index 00000000..03aba56e --- /dev/null +++ b/dataplane/standalone/saiserver/rpf_group.cc @@ -0,0 +1,64 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/rpf_group.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/rpf_group.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status RpfGroup::CreateRpfGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRpfGroupRequest* req, + lemming::dataplane::sai::CreateRpfGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status RpfGroup::RemoveRpfGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRpfGroupRequest* req, + lemming::dataplane::sai::RemoveRpfGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status RpfGroup::GetRpfGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRpfGroupAttributeRequest* req, + lemming::dataplane::sai::GetRpfGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status RpfGroup::CreateRpfGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRpfGroupMemberRequest* req, + lemming::dataplane::sai::CreateRpfGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status RpfGroup::RemoveRpfGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRpfGroupMemberRequest* req, + lemming::dataplane::sai::RemoveRpfGroupMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status RpfGroup::GetRpfGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRpfGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetRpfGroupMemberAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/rpf_group.h b/dataplane/standalone/saiserver/rpf_group.h new file mode 100644 index 00000000..6369797d --- /dev/null +++ b/dataplane/standalone/saiserver/rpf_group.h @@ -0,0 +1,65 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_RPF_GROUP_H_ +#define DATAPLANE_STANDALONE_SAI_RPF_GROUP_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/rpf_group.grpc.pb.h" +#include "dataplane/proto/sai/rpf_group.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class RpfGroup final : public lemming::dataplane::sai::RpfGroup::Service { + public: + grpc::Status CreateRpfGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRpfGroupRequest* req, + lemming::dataplane::sai::CreateRpfGroupResponse* resp); + + grpc::Status RemoveRpfGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRpfGroupRequest* req, + lemming::dataplane::sai::RemoveRpfGroupResponse* resp); + + grpc::Status GetRpfGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRpfGroupAttributeRequest* req, + lemming::dataplane::sai::GetRpfGroupAttributeResponse* resp); + + grpc::Status CreateRpfGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateRpfGroupMemberRequest* req, + lemming::dataplane::sai::CreateRpfGroupMemberResponse* resp); + + grpc::Status RemoveRpfGroupMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveRpfGroupMemberRequest* req, + lemming::dataplane::sai::RemoveRpfGroupMemberResponse* resp); + + grpc::Status GetRpfGroupMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetRpfGroupMemberAttributeRequest* req, + lemming::dataplane::sai::GetRpfGroupMemberAttributeResponse* resp); + + sai_rpf_group_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_RPF_GROUP_H_ diff --git a/dataplane/standalone/saiserver/samplepacket.cc b/dataplane/standalone/saiserver/samplepacket.cc new file mode 100644 index 00000000..223c4d12 --- /dev/null +++ b/dataplane/standalone/saiserver/samplepacket.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/samplepacket.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/samplepacket.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Samplepacket::CreateSamplepacket( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSamplepacketRequest* req, + lemming::dataplane::sai::CreateSamplepacketResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Samplepacket::RemoveSamplepacket( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSamplepacketRequest* req, + lemming::dataplane::sai::RemoveSamplepacketResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Samplepacket::SetSamplepacketAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSamplepacketAttributeRequest* req, + lemming::dataplane::sai::SetSamplepacketAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Samplepacket::GetSamplepacketAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSamplepacketAttributeRequest* req, + lemming::dataplane::sai::GetSamplepacketAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/samplepacket.h b/dataplane/standalone/saiserver/samplepacket.h new file mode 100644 index 00000000..49c4db89 --- /dev/null +++ b/dataplane/standalone/saiserver/samplepacket.h @@ -0,0 +1,56 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_SAMPLEPACKET_H_ +#define DATAPLANE_STANDALONE_SAI_SAMPLEPACKET_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/samplepacket.grpc.pb.h" +#include "dataplane/proto/sai/samplepacket.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Samplepacket final + : public lemming::dataplane::sai::Samplepacket::Service { + public: + grpc::Status CreateSamplepacket( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSamplepacketRequest* req, + lemming::dataplane::sai::CreateSamplepacketResponse* resp); + + grpc::Status RemoveSamplepacket( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSamplepacketRequest* req, + lemming::dataplane::sai::RemoveSamplepacketResponse* resp); + + grpc::Status SetSamplepacketAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSamplepacketAttributeRequest* req, + lemming::dataplane::sai::SetSamplepacketAttributeResponse* resp); + + grpc::Status GetSamplepacketAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSamplepacketAttributeRequest* req, + lemming::dataplane::sai::GetSamplepacketAttributeResponse* resp); + + sai_samplepacket_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_SAMPLEPACKET_H_ diff --git a/dataplane/standalone/saiserver/scheduler.cc b/dataplane/standalone/saiserver/scheduler.cc new file mode 100644 index 00000000..d54926b0 --- /dev/null +++ b/dataplane/standalone/saiserver/scheduler.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/scheduler.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/scheduler.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Scheduler::CreateScheduler( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSchedulerRequest* req, + lemming::dataplane::sai::CreateSchedulerResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Scheduler::RemoveScheduler( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSchedulerRequest* req, + lemming::dataplane::sai::RemoveSchedulerResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Scheduler::SetSchedulerAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSchedulerAttributeRequest* req, + lemming::dataplane::sai::SetSchedulerAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Scheduler::GetSchedulerAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSchedulerAttributeRequest* req, + lemming::dataplane::sai::GetSchedulerAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/scheduler.h b/dataplane/standalone/saiserver/scheduler.h new file mode 100644 index 00000000..05a8e095 --- /dev/null +++ b/dataplane/standalone/saiserver/scheduler.h @@ -0,0 +1,55 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_SCHEDULER_H_ +#define DATAPLANE_STANDALONE_SAI_SCHEDULER_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/scheduler.grpc.pb.h" +#include "dataplane/proto/sai/scheduler.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Scheduler final : public lemming::dataplane::sai::Scheduler::Service { + public: + grpc::Status CreateScheduler( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSchedulerRequest* req, + lemming::dataplane::sai::CreateSchedulerResponse* resp); + + grpc::Status RemoveScheduler( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSchedulerRequest* req, + lemming::dataplane::sai::RemoveSchedulerResponse* resp); + + grpc::Status SetSchedulerAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSchedulerAttributeRequest* req, + lemming::dataplane::sai::SetSchedulerAttributeResponse* resp); + + grpc::Status GetSchedulerAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSchedulerAttributeRequest* req, + lemming::dataplane::sai::GetSchedulerAttributeResponse* resp); + + sai_scheduler_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_SCHEDULER_H_ diff --git a/dataplane/standalone/saiserver/scheduler_group.cc b/dataplane/standalone/saiserver/scheduler_group.cc new file mode 100644 index 00000000..493fab37 --- /dev/null +++ b/dataplane/standalone/saiserver/scheduler_group.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/scheduler_group.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/scheduler_group.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status SchedulerGroup::CreateSchedulerGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSchedulerGroupRequest* req, + lemming::dataplane::sai::CreateSchedulerGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status SchedulerGroup::RemoveSchedulerGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSchedulerGroupRequest* req, + lemming::dataplane::sai::RemoveSchedulerGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status SchedulerGroup::SetSchedulerGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSchedulerGroupAttributeRequest* req, + lemming::dataplane::sai::SetSchedulerGroupAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status SchedulerGroup::GetSchedulerGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSchedulerGroupAttributeRequest* req, + lemming::dataplane::sai::GetSchedulerGroupAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/scheduler_group.h b/dataplane/standalone/saiserver/scheduler_group.h new file mode 100644 index 00000000..77948a70 --- /dev/null +++ b/dataplane/standalone/saiserver/scheduler_group.h @@ -0,0 +1,56 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_SCHEDULER_GROUP_H_ +#define DATAPLANE_STANDALONE_SAI_SCHEDULER_GROUP_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/scheduler_group.grpc.pb.h" +#include "dataplane/proto/sai/scheduler_group.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class SchedulerGroup final + : public lemming::dataplane::sai::SchedulerGroup::Service { + public: + grpc::Status CreateSchedulerGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSchedulerGroupRequest* req, + lemming::dataplane::sai::CreateSchedulerGroupResponse* resp); + + grpc::Status RemoveSchedulerGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSchedulerGroupRequest* req, + lemming::dataplane::sai::RemoveSchedulerGroupResponse* resp); + + grpc::Status SetSchedulerGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSchedulerGroupAttributeRequest* req, + lemming::dataplane::sai::SetSchedulerGroupAttributeResponse* resp); + + grpc::Status GetSchedulerGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSchedulerGroupAttributeRequest* req, + lemming::dataplane::sai::GetSchedulerGroupAttributeResponse* resp); + + sai_scheduler_group_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_SCHEDULER_GROUP_H_ diff --git a/dataplane/standalone/saiserver/srv6.cc b/dataplane/standalone/saiserver/srv6.cc new file mode 100644 index 00000000..333862cc --- /dev/null +++ b/dataplane/standalone/saiserver/srv6.cc @@ -0,0 +1,106 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/srv6.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/srv6.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Srv6::CreateSrv6Sidlist( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSrv6SidlistRequest* req, + lemming::dataplane::sai::CreateSrv6SidlistResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::RemoveSrv6Sidlist( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSrv6SidlistRequest* req, + lemming::dataplane::sai::RemoveSrv6SidlistResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::SetSrv6SidlistAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSrv6SidlistAttributeRequest* req, + lemming::dataplane::sai::SetSrv6SidlistAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::GetSrv6SidlistAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSrv6SidlistAttributeRequest* req, + lemming::dataplane::sai::GetSrv6SidlistAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::CreateSrv6Sidlists( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSrv6SidlistsRequest* req, + lemming::dataplane::sai::CreateSrv6SidlistsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::RemoveSrv6Sidlists( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSrv6SidlistsRequest* req, + lemming::dataplane::sai::RemoveSrv6SidlistsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::CreateMySidEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMySidEntryRequest* req, + lemming::dataplane::sai::CreateMySidEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::RemoveMySidEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMySidEntryRequest* req, + lemming::dataplane::sai::RemoveMySidEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::SetMySidEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMySidEntryAttributeRequest* req, + lemming::dataplane::sai::SetMySidEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::GetMySidEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMySidEntryAttributeRequest* req, + lemming::dataplane::sai::GetMySidEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::CreateMySidEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMySidEntriesRequest* req, + lemming::dataplane::sai::CreateMySidEntriesResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Srv6::RemoveMySidEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMySidEntriesRequest* req, + lemming::dataplane::sai::RemoveMySidEntriesResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/srv6.h b/dataplane/standalone/saiserver/srv6.h new file mode 100644 index 00000000..cb8e41f0 --- /dev/null +++ b/dataplane/standalone/saiserver/srv6.h @@ -0,0 +1,95 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_SRV6_H_ +#define DATAPLANE_STANDALONE_SAI_SRV6_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/srv6.grpc.pb.h" +#include "dataplane/proto/sai/srv6.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Srv6 final : public lemming::dataplane::sai::Srv6::Service { + public: + grpc::Status CreateSrv6Sidlist( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSrv6SidlistRequest* req, + lemming::dataplane::sai::CreateSrv6SidlistResponse* resp); + + grpc::Status RemoveSrv6Sidlist( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSrv6SidlistRequest* req, + lemming::dataplane::sai::RemoveSrv6SidlistResponse* resp); + + grpc::Status SetSrv6SidlistAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSrv6SidlistAttributeRequest* req, + lemming::dataplane::sai::SetSrv6SidlistAttributeResponse* resp); + + grpc::Status GetSrv6SidlistAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSrv6SidlistAttributeRequest* req, + lemming::dataplane::sai::GetSrv6SidlistAttributeResponse* resp); + + grpc::Status CreateSrv6Sidlists( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSrv6SidlistsRequest* req, + lemming::dataplane::sai::CreateSrv6SidlistsResponse* resp); + + grpc::Status RemoveSrv6Sidlists( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSrv6SidlistsRequest* req, + lemming::dataplane::sai::RemoveSrv6SidlistsResponse* resp); + + grpc::Status CreateMySidEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMySidEntryRequest* req, + lemming::dataplane::sai::CreateMySidEntryResponse* resp); + + grpc::Status RemoveMySidEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMySidEntryRequest* req, + lemming::dataplane::sai::RemoveMySidEntryResponse* resp); + + grpc::Status SetMySidEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetMySidEntryAttributeRequest* req, + lemming::dataplane::sai::SetMySidEntryAttributeResponse* resp); + + grpc::Status GetMySidEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetMySidEntryAttributeRequest* req, + lemming::dataplane::sai::GetMySidEntryAttributeResponse* resp); + + grpc::Status CreateMySidEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateMySidEntriesRequest* req, + lemming::dataplane::sai::CreateMySidEntriesResponse* resp); + + grpc::Status RemoveMySidEntries( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveMySidEntriesRequest* req, + lemming::dataplane::sai::RemoveMySidEntriesResponse* resp); + + sai_srv6_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_SRV6_H_ diff --git a/dataplane/standalone/saiserver/stp.cc b/dataplane/standalone/saiserver/stp.cc new file mode 100644 index 00000000..39f730bc --- /dev/null +++ b/dataplane/standalone/saiserver/stp.cc @@ -0,0 +1,85 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/stp.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/stp.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Stp::CreateStp( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateStpRequest* req, + lemming::dataplane::sai::CreateStpResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Stp::RemoveStp( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveStpRequest* req, + lemming::dataplane::sai::RemoveStpResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Stp::GetStpAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetStpAttributeRequest* req, + lemming::dataplane::sai::GetStpAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Stp::CreateStpPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateStpPortRequest* req, + lemming::dataplane::sai::CreateStpPortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Stp::RemoveStpPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveStpPortRequest* req, + lemming::dataplane::sai::RemoveStpPortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Stp::SetStpPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetStpPortAttributeRequest* req, + lemming::dataplane::sai::SetStpPortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Stp::GetStpPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetStpPortAttributeRequest* req, + lemming::dataplane::sai::GetStpPortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Stp::CreateStpPorts( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateStpPortsRequest* req, + lemming::dataplane::sai::CreateStpPortsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Stp::RemoveStpPorts( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveStpPortsRequest* req, + lemming::dataplane::sai::RemoveStpPortsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/stp.h b/dataplane/standalone/saiserver/stp.h new file mode 100644 index 00000000..b40c98cf --- /dev/null +++ b/dataplane/standalone/saiserver/stp.h @@ -0,0 +1,78 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_STP_H_ +#define DATAPLANE_STANDALONE_SAI_STP_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/stp.grpc.pb.h" +#include "dataplane/proto/sai/stp.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Stp final : public lemming::dataplane::sai::Stp::Service { + public: + grpc::Status CreateStp(grpc::ServerContext* context, + const lemming::dataplane::sai::CreateStpRequest* req, + lemming::dataplane::sai::CreateStpResponse* resp); + + grpc::Status RemoveStp(grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveStpRequest* req, + lemming::dataplane::sai::RemoveStpResponse* resp); + + grpc::Status GetStpAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetStpAttributeRequest* req, + lemming::dataplane::sai::GetStpAttributeResponse* resp); + + grpc::Status CreateStpPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateStpPortRequest* req, + lemming::dataplane::sai::CreateStpPortResponse* resp); + + grpc::Status RemoveStpPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveStpPortRequest* req, + lemming::dataplane::sai::RemoveStpPortResponse* resp); + + grpc::Status SetStpPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetStpPortAttributeRequest* req, + lemming::dataplane::sai::SetStpPortAttributeResponse* resp); + + grpc::Status GetStpPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetStpPortAttributeRequest* req, + lemming::dataplane::sai::GetStpPortAttributeResponse* resp); + + grpc::Status CreateStpPorts( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateStpPortsRequest* req, + lemming::dataplane::sai::CreateStpPortsResponse* resp); + + grpc::Status RemoveStpPorts( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveStpPortsRequest* req, + lemming::dataplane::sai::RemoveStpPortsResponse* resp); + + sai_stp_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_STP_H_ diff --git a/dataplane/standalone/saiserver/switch.cc b/dataplane/standalone/saiserver/switch.cc new file mode 100644 index 00000000..8d8a2832 --- /dev/null +++ b/dataplane/standalone/saiserver/switch.cc @@ -0,0 +1,85 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/switch.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/switch.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Switch::CreateSwitch( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSwitchRequest* req, + lemming::dataplane::sai::CreateSwitchResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Switch::RemoveSwitch( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSwitchRequest* req, + lemming::dataplane::sai::RemoveSwitchResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Switch::SetSwitchAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSwitchAttributeRequest* req, + lemming::dataplane::sai::SetSwitchAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Switch::GetSwitchAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSwitchAttributeRequest* req, + lemming::dataplane::sai::GetSwitchAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Switch::GetSwitchStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSwitchStatsRequest* req, + lemming::dataplane::sai::GetSwitchStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Switch::CreateSwitchTunnel( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSwitchTunnelRequest* req, + lemming::dataplane::sai::CreateSwitchTunnelResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Switch::RemoveSwitchTunnel( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSwitchTunnelRequest* req, + lemming::dataplane::sai::RemoveSwitchTunnelResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Switch::SetSwitchTunnelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSwitchTunnelAttributeRequest* req, + lemming::dataplane::sai::SetSwitchTunnelAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Switch::GetSwitchTunnelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSwitchTunnelAttributeRequest* req, + lemming::dataplane::sai::GetSwitchTunnelAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/switch.h b/dataplane/standalone/saiserver/switch.h new file mode 100644 index 00000000..da9850e6 --- /dev/null +++ b/dataplane/standalone/saiserver/switch.h @@ -0,0 +1,80 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_SWITCH_H_ +#define DATAPLANE_STANDALONE_SAI_SWITCH_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/switch.grpc.pb.h" +#include "dataplane/proto/sai/switch.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Switch final : public lemming::dataplane::sai::Switch::Service { + public: + grpc::Status CreateSwitch( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSwitchRequest* req, + lemming::dataplane::sai::CreateSwitchResponse* resp); + + grpc::Status RemoveSwitch( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSwitchRequest* req, + lemming::dataplane::sai::RemoveSwitchResponse* resp); + + grpc::Status SetSwitchAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSwitchAttributeRequest* req, + lemming::dataplane::sai::SetSwitchAttributeResponse* resp); + + grpc::Status GetSwitchAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSwitchAttributeRequest* req, + lemming::dataplane::sai::GetSwitchAttributeResponse* resp); + + grpc::Status GetSwitchStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSwitchStatsRequest* req, + lemming::dataplane::sai::GetSwitchStatsResponse* resp); + + grpc::Status CreateSwitchTunnel( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSwitchTunnelRequest* req, + lemming::dataplane::sai::CreateSwitchTunnelResponse* resp); + + grpc::Status RemoveSwitchTunnel( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSwitchTunnelRequest* req, + lemming::dataplane::sai::RemoveSwitchTunnelResponse* resp); + + grpc::Status SetSwitchTunnelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSwitchTunnelAttributeRequest* req, + lemming::dataplane::sai::SetSwitchTunnelAttributeResponse* resp); + + grpc::Status GetSwitchTunnelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSwitchTunnelAttributeRequest* req, + lemming::dataplane::sai::GetSwitchTunnelAttributeResponse* resp); + + sai_switch_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_SWITCH_H_ diff --git a/dataplane/standalone/saiserver/system_port.cc b/dataplane/standalone/saiserver/system_port.cc new file mode 100644 index 00000000..ee36c499 --- /dev/null +++ b/dataplane/standalone/saiserver/system_port.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/system_port.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/system_port.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status SystemPort::CreateSystemPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSystemPortRequest* req, + lemming::dataplane::sai::CreateSystemPortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status SystemPort::RemoveSystemPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSystemPortRequest* req, + lemming::dataplane::sai::RemoveSystemPortResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status SystemPort::SetSystemPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSystemPortAttributeRequest* req, + lemming::dataplane::sai::SetSystemPortAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status SystemPort::GetSystemPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSystemPortAttributeRequest* req, + lemming::dataplane::sai::GetSystemPortAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/system_port.h b/dataplane/standalone/saiserver/system_port.h new file mode 100644 index 00000000..9889238f --- /dev/null +++ b/dataplane/standalone/saiserver/system_port.h @@ -0,0 +1,55 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_SYSTEM_PORT_H_ +#define DATAPLANE_STANDALONE_SAI_SYSTEM_PORT_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/system_port.grpc.pb.h" +#include "dataplane/proto/sai/system_port.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class SystemPort final : public lemming::dataplane::sai::SystemPort::Service { + public: + grpc::Status CreateSystemPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateSystemPortRequest* req, + lemming::dataplane::sai::CreateSystemPortResponse* resp); + + grpc::Status RemoveSystemPort( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveSystemPortRequest* req, + lemming::dataplane::sai::RemoveSystemPortResponse* resp); + + grpc::Status SetSystemPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetSystemPortAttributeRequest* req, + lemming::dataplane::sai::SetSystemPortAttributeResponse* resp); + + grpc::Status GetSystemPortAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetSystemPortAttributeRequest* req, + lemming::dataplane::sai::GetSystemPortAttributeResponse* resp); + + sai_system_port_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_SYSTEM_PORT_H_ diff --git a/dataplane/standalone/saiserver/tam.cc b/dataplane/standalone/saiserver/tam.cc new file mode 100644 index 00000000..8d550d89 --- /dev/null +++ b/dataplane/standalone/saiserver/tam.cc @@ -0,0 +1,330 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/tam.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/tam.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Tam::CreateTam( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamRequest* req, + lemming::dataplane::sai::CreateTamResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTam( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamRequest* req, + lemming::dataplane::sai::RemoveTamResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamAttributeRequest* req, + lemming::dataplane::sai::SetTamAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamAttributeRequest* req, + lemming::dataplane::sai::GetTamAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamMathFunc( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamMathFuncRequest* req, + lemming::dataplane::sai::CreateTamMathFuncResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamMathFunc( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamMathFuncRequest* req, + lemming::dataplane::sai::RemoveTamMathFuncResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamMathFuncAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamMathFuncAttributeRequest* req, + lemming::dataplane::sai::SetTamMathFuncAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamMathFuncAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamMathFuncAttributeRequest* req, + lemming::dataplane::sai::GetTamMathFuncAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamReport( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamReportRequest* req, + lemming::dataplane::sai::CreateTamReportResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamReport( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamReportRequest* req, + lemming::dataplane::sai::RemoveTamReportResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamReportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamReportAttributeRequest* req, + lemming::dataplane::sai::SetTamReportAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamReportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamReportAttributeRequest* req, + lemming::dataplane::sai::GetTamReportAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamEventThreshold( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamEventThresholdRequest* req, + lemming::dataplane::sai::CreateTamEventThresholdResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamEventThreshold( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamEventThresholdRequest* req, + lemming::dataplane::sai::RemoveTamEventThresholdResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamEventThresholdAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamEventThresholdAttributeRequest* req, + lemming::dataplane::sai::SetTamEventThresholdAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamEventThresholdAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamEventThresholdAttributeRequest* req, + lemming::dataplane::sai::GetTamEventThresholdAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamInt( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamIntRequest* req, + lemming::dataplane::sai::CreateTamIntResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamInt( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamIntRequest* req, + lemming::dataplane::sai::RemoveTamIntResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamIntAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamIntAttributeRequest* req, + lemming::dataplane::sai::SetTamIntAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamIntAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamIntAttributeRequest* req, + lemming::dataplane::sai::GetTamIntAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamTelType( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamTelTypeRequest* req, + lemming::dataplane::sai::CreateTamTelTypeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamTelType( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamTelTypeRequest* req, + lemming::dataplane::sai::RemoveTamTelTypeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamTelTypeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamTelTypeAttributeRequest* req, + lemming::dataplane::sai::SetTamTelTypeAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamTelTypeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamTelTypeAttributeRequest* req, + lemming::dataplane::sai::GetTamTelTypeAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamTransport( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamTransportRequest* req, + lemming::dataplane::sai::CreateTamTransportResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamTransport( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamTransportRequest* req, + lemming::dataplane::sai::RemoveTamTransportResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamTransportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamTransportAttributeRequest* req, + lemming::dataplane::sai::SetTamTransportAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamTransportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamTransportAttributeRequest* req, + lemming::dataplane::sai::GetTamTransportAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamTelemetry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamTelemetryRequest* req, + lemming::dataplane::sai::CreateTamTelemetryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamTelemetry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamTelemetryRequest* req, + lemming::dataplane::sai::RemoveTamTelemetryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamTelemetryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamTelemetryAttributeRequest* req, + lemming::dataplane::sai::SetTamTelemetryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamTelemetryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamTelemetryAttributeRequest* req, + lemming::dataplane::sai::GetTamTelemetryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamCollector( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamCollectorRequest* req, + lemming::dataplane::sai::CreateTamCollectorResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamCollector( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamCollectorRequest* req, + lemming::dataplane::sai::RemoveTamCollectorResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamCollectorAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamCollectorAttributeRequest* req, + lemming::dataplane::sai::SetTamCollectorAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamCollectorAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamCollectorAttributeRequest* req, + lemming::dataplane::sai::GetTamCollectorAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamEventAction( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamEventActionRequest* req, + lemming::dataplane::sai::CreateTamEventActionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamEventAction( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamEventActionRequest* req, + lemming::dataplane::sai::RemoveTamEventActionResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamEventActionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamEventActionAttributeRequest* req, + lemming::dataplane::sai::SetTamEventActionAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamEventActionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamEventActionAttributeRequest* req, + lemming::dataplane::sai::GetTamEventActionAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::CreateTamEvent( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamEventRequest* req, + lemming::dataplane::sai::CreateTamEventResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::RemoveTamEvent( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamEventRequest* req, + lemming::dataplane::sai::RemoveTamEventResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::SetTamEventAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamEventAttributeRequest* req, + lemming::dataplane::sai::SetTamEventAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tam::GetTamEventAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamEventAttributeRequest* req, + lemming::dataplane::sai::GetTamEventAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/tam.h b/dataplane/standalone/saiserver/tam.h new file mode 100644 index 00000000..1e0159b5 --- /dev/null +++ b/dataplane/standalone/saiserver/tam.h @@ -0,0 +1,253 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_TAM_H_ +#define DATAPLANE_STANDALONE_SAI_TAM_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/tam.grpc.pb.h" +#include "dataplane/proto/sai/tam.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Tam final : public lemming::dataplane::sai::Tam::Service { + public: + grpc::Status CreateTam(grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamRequest* req, + lemming::dataplane::sai::CreateTamResponse* resp); + + grpc::Status RemoveTam(grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamRequest* req, + lemming::dataplane::sai::RemoveTamResponse* resp); + + grpc::Status SetTamAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamAttributeRequest* req, + lemming::dataplane::sai::SetTamAttributeResponse* resp); + + grpc::Status GetTamAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamAttributeRequest* req, + lemming::dataplane::sai::GetTamAttributeResponse* resp); + + grpc::Status CreateTamMathFunc( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamMathFuncRequest* req, + lemming::dataplane::sai::CreateTamMathFuncResponse* resp); + + grpc::Status RemoveTamMathFunc( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamMathFuncRequest* req, + lemming::dataplane::sai::RemoveTamMathFuncResponse* resp); + + grpc::Status SetTamMathFuncAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamMathFuncAttributeRequest* req, + lemming::dataplane::sai::SetTamMathFuncAttributeResponse* resp); + + grpc::Status GetTamMathFuncAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamMathFuncAttributeRequest* req, + lemming::dataplane::sai::GetTamMathFuncAttributeResponse* resp); + + grpc::Status CreateTamReport( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamReportRequest* req, + lemming::dataplane::sai::CreateTamReportResponse* resp); + + grpc::Status RemoveTamReport( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamReportRequest* req, + lemming::dataplane::sai::RemoveTamReportResponse* resp); + + grpc::Status SetTamReportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamReportAttributeRequest* req, + lemming::dataplane::sai::SetTamReportAttributeResponse* resp); + + grpc::Status GetTamReportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamReportAttributeRequest* req, + lemming::dataplane::sai::GetTamReportAttributeResponse* resp); + + grpc::Status CreateTamEventThreshold( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamEventThresholdRequest* req, + lemming::dataplane::sai::CreateTamEventThresholdResponse* resp); + + grpc::Status RemoveTamEventThreshold( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamEventThresholdRequest* req, + lemming::dataplane::sai::RemoveTamEventThresholdResponse* resp); + + grpc::Status SetTamEventThresholdAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamEventThresholdAttributeRequest* req, + lemming::dataplane::sai::SetTamEventThresholdAttributeResponse* resp); + + grpc::Status GetTamEventThresholdAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamEventThresholdAttributeRequest* req, + lemming::dataplane::sai::GetTamEventThresholdAttributeResponse* resp); + + grpc::Status CreateTamInt( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamIntRequest* req, + lemming::dataplane::sai::CreateTamIntResponse* resp); + + grpc::Status RemoveTamInt( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamIntRequest* req, + lemming::dataplane::sai::RemoveTamIntResponse* resp); + + grpc::Status SetTamIntAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamIntAttributeRequest* req, + lemming::dataplane::sai::SetTamIntAttributeResponse* resp); + + grpc::Status GetTamIntAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamIntAttributeRequest* req, + lemming::dataplane::sai::GetTamIntAttributeResponse* resp); + + grpc::Status CreateTamTelType( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamTelTypeRequest* req, + lemming::dataplane::sai::CreateTamTelTypeResponse* resp); + + grpc::Status RemoveTamTelType( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamTelTypeRequest* req, + lemming::dataplane::sai::RemoveTamTelTypeResponse* resp); + + grpc::Status SetTamTelTypeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamTelTypeAttributeRequest* req, + lemming::dataplane::sai::SetTamTelTypeAttributeResponse* resp); + + grpc::Status GetTamTelTypeAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamTelTypeAttributeRequest* req, + lemming::dataplane::sai::GetTamTelTypeAttributeResponse* resp); + + grpc::Status CreateTamTransport( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamTransportRequest* req, + lemming::dataplane::sai::CreateTamTransportResponse* resp); + + grpc::Status RemoveTamTransport( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamTransportRequest* req, + lemming::dataplane::sai::RemoveTamTransportResponse* resp); + + grpc::Status SetTamTransportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamTransportAttributeRequest* req, + lemming::dataplane::sai::SetTamTransportAttributeResponse* resp); + + grpc::Status GetTamTransportAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamTransportAttributeRequest* req, + lemming::dataplane::sai::GetTamTransportAttributeResponse* resp); + + grpc::Status CreateTamTelemetry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamTelemetryRequest* req, + lemming::dataplane::sai::CreateTamTelemetryResponse* resp); + + grpc::Status RemoveTamTelemetry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamTelemetryRequest* req, + lemming::dataplane::sai::RemoveTamTelemetryResponse* resp); + + grpc::Status SetTamTelemetryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamTelemetryAttributeRequest* req, + lemming::dataplane::sai::SetTamTelemetryAttributeResponse* resp); + + grpc::Status GetTamTelemetryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamTelemetryAttributeRequest* req, + lemming::dataplane::sai::GetTamTelemetryAttributeResponse* resp); + + grpc::Status CreateTamCollector( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamCollectorRequest* req, + lemming::dataplane::sai::CreateTamCollectorResponse* resp); + + grpc::Status RemoveTamCollector( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamCollectorRequest* req, + lemming::dataplane::sai::RemoveTamCollectorResponse* resp); + + grpc::Status SetTamCollectorAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamCollectorAttributeRequest* req, + lemming::dataplane::sai::SetTamCollectorAttributeResponse* resp); + + grpc::Status GetTamCollectorAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamCollectorAttributeRequest* req, + lemming::dataplane::sai::GetTamCollectorAttributeResponse* resp); + + grpc::Status CreateTamEventAction( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamEventActionRequest* req, + lemming::dataplane::sai::CreateTamEventActionResponse* resp); + + grpc::Status RemoveTamEventAction( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamEventActionRequest* req, + lemming::dataplane::sai::RemoveTamEventActionResponse* resp); + + grpc::Status SetTamEventActionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamEventActionAttributeRequest* req, + lemming::dataplane::sai::SetTamEventActionAttributeResponse* resp); + + grpc::Status GetTamEventActionAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamEventActionAttributeRequest* req, + lemming::dataplane::sai::GetTamEventActionAttributeResponse* resp); + + grpc::Status CreateTamEvent( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTamEventRequest* req, + lemming::dataplane::sai::CreateTamEventResponse* resp); + + grpc::Status RemoveTamEvent( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTamEventRequest* req, + lemming::dataplane::sai::RemoveTamEventResponse* resp); + + grpc::Status SetTamEventAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTamEventAttributeRequest* req, + lemming::dataplane::sai::SetTamEventAttributeResponse* resp); + + grpc::Status GetTamEventAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTamEventAttributeRequest* req, + lemming::dataplane::sai::GetTamEventAttributeResponse* resp); + + sai_tam_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_TAM_H_ diff --git a/dataplane/standalone/saiserver/tunnel.cc b/dataplane/standalone/saiserver/tunnel.cc new file mode 100644 index 00000000..85e77aa0 --- /dev/null +++ b/dataplane/standalone/saiserver/tunnel.cc @@ -0,0 +1,141 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/tunnel.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/tunnel.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Tunnel::CreateTunnelMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelMapRequest* req, + lemming::dataplane::sai::CreateTunnelMapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::RemoveTunnelMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelMapRequest* req, + lemming::dataplane::sai::RemoveTunnelMapResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::GetTunnelMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelMapAttributeRequest* req, + lemming::dataplane::sai::GetTunnelMapAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::CreateTunnel( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelRequest* req, + lemming::dataplane::sai::CreateTunnelResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::RemoveTunnel( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelRequest* req, + lemming::dataplane::sai::RemoveTunnelResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::SetTunnelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTunnelAttributeRequest* req, + lemming::dataplane::sai::SetTunnelAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::GetTunnelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelAttributeRequest* req, + lemming::dataplane::sai::GetTunnelAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::GetTunnelStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelStatsRequest* req, + lemming::dataplane::sai::GetTunnelStatsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::CreateTunnelTermTableEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelTermTableEntryRequest* req, + lemming::dataplane::sai::CreateTunnelTermTableEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::RemoveTunnelTermTableEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelTermTableEntryRequest* req, + lemming::dataplane::sai::RemoveTunnelTermTableEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::SetTunnelTermTableEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTunnelTermTableEntryAttributeRequest* req, + lemming::dataplane::sai::SetTunnelTermTableEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::GetTunnelTermTableEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelTermTableEntryAttributeRequest* req, + lemming::dataplane::sai::GetTunnelTermTableEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::CreateTunnelMapEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelMapEntryRequest* req, + lemming::dataplane::sai::CreateTunnelMapEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::RemoveTunnelMapEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelMapEntryRequest* req, + lemming::dataplane::sai::RemoveTunnelMapEntryResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::GetTunnelMapEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelMapEntryAttributeRequest* req, + lemming::dataplane::sai::GetTunnelMapEntryAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::CreateTunnels( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelsRequest* req, + lemming::dataplane::sai::CreateTunnelsResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Tunnel::RemoveTunnels( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelsRequest* req, + lemming::dataplane::sai::RemoveTunnelsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/tunnel.h b/dataplane/standalone/saiserver/tunnel.h new file mode 100644 index 00000000..221d5ca1 --- /dev/null +++ b/dataplane/standalone/saiserver/tunnel.h @@ -0,0 +1,122 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_TUNNEL_H_ +#define DATAPLANE_STANDALONE_SAI_TUNNEL_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/tunnel.grpc.pb.h" +#include "dataplane/proto/sai/tunnel.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Tunnel final : public lemming::dataplane::sai::Tunnel::Service { + public: + grpc::Status CreateTunnelMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelMapRequest* req, + lemming::dataplane::sai::CreateTunnelMapResponse* resp); + + grpc::Status RemoveTunnelMap( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelMapRequest* req, + lemming::dataplane::sai::RemoveTunnelMapResponse* resp); + + grpc::Status GetTunnelMapAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelMapAttributeRequest* req, + lemming::dataplane::sai::GetTunnelMapAttributeResponse* resp); + + grpc::Status CreateTunnel( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelRequest* req, + lemming::dataplane::sai::CreateTunnelResponse* resp); + + grpc::Status RemoveTunnel( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelRequest* req, + lemming::dataplane::sai::RemoveTunnelResponse* resp); + + grpc::Status SetTunnelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTunnelAttributeRequest* req, + lemming::dataplane::sai::SetTunnelAttributeResponse* resp); + + grpc::Status GetTunnelAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelAttributeRequest* req, + lemming::dataplane::sai::GetTunnelAttributeResponse* resp); + + grpc::Status GetTunnelStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelStatsRequest* req, + lemming::dataplane::sai::GetTunnelStatsResponse* resp); + + grpc::Status CreateTunnelTermTableEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelTermTableEntryRequest* req, + lemming::dataplane::sai::CreateTunnelTermTableEntryResponse* resp); + + grpc::Status RemoveTunnelTermTableEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelTermTableEntryRequest* req, + lemming::dataplane::sai::RemoveTunnelTermTableEntryResponse* resp); + + grpc::Status SetTunnelTermTableEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetTunnelTermTableEntryAttributeRequest* + req, + lemming::dataplane::sai::SetTunnelTermTableEntryAttributeResponse* resp); + + grpc::Status GetTunnelTermTableEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelTermTableEntryAttributeRequest* + req, + lemming::dataplane::sai::GetTunnelTermTableEntryAttributeResponse* resp); + + grpc::Status CreateTunnelMapEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelMapEntryRequest* req, + lemming::dataplane::sai::CreateTunnelMapEntryResponse* resp); + + grpc::Status RemoveTunnelMapEntry( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelMapEntryRequest* req, + lemming::dataplane::sai::RemoveTunnelMapEntryResponse* resp); + + grpc::Status GetTunnelMapEntryAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetTunnelMapEntryAttributeRequest* req, + lemming::dataplane::sai::GetTunnelMapEntryAttributeResponse* resp); + + grpc::Status CreateTunnels( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateTunnelsRequest* req, + lemming::dataplane::sai::CreateTunnelsResponse* resp); + + grpc::Status RemoveTunnels( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveTunnelsRequest* req, + lemming::dataplane::sai::RemoveTunnelsResponse* resp); + + sai_tunnel_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_TUNNEL_H_ diff --git a/dataplane/standalone/saiserver/udf.cc b/dataplane/standalone/saiserver/udf.cc new file mode 100644 index 00000000..3bb0fae2 --- /dev/null +++ b/dataplane/standalone/saiserver/udf.cc @@ -0,0 +1,92 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/udf.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/udf.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Udf::CreateUdf( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateUdfRequest* req, + lemming::dataplane::sai::CreateUdfResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Udf::RemoveUdf( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveUdfRequest* req, + lemming::dataplane::sai::RemoveUdfResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Udf::SetUdfAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetUdfAttributeRequest* req, + lemming::dataplane::sai::SetUdfAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Udf::GetUdfAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetUdfAttributeRequest* req, + lemming::dataplane::sai::GetUdfAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Udf::CreateUdfMatch( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateUdfMatchRequest* req, + lemming::dataplane::sai::CreateUdfMatchResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Udf::RemoveUdfMatch( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveUdfMatchRequest* req, + lemming::dataplane::sai::RemoveUdfMatchResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Udf::GetUdfMatchAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetUdfMatchAttributeRequest* req, + lemming::dataplane::sai::GetUdfMatchAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Udf::CreateUdfGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateUdfGroupRequest* req, + lemming::dataplane::sai::CreateUdfGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Udf::RemoveUdfGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveUdfGroupRequest* req, + lemming::dataplane::sai::RemoveUdfGroupResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Udf::GetUdfGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetUdfGroupAttributeRequest* req, + lemming::dataplane::sai::GetUdfGroupAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/udf.h b/dataplane/standalone/saiserver/udf.h new file mode 100644 index 00000000..774c5012 --- /dev/null +++ b/dataplane/standalone/saiserver/udf.h @@ -0,0 +1,83 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_UDF_H_ +#define DATAPLANE_STANDALONE_SAI_UDF_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/udf.grpc.pb.h" +#include "dataplane/proto/sai/udf.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Udf final : public lemming::dataplane::sai::Udf::Service { + public: + grpc::Status CreateUdf(grpc::ServerContext* context, + const lemming::dataplane::sai::CreateUdfRequest* req, + lemming::dataplane::sai::CreateUdfResponse* resp); + + grpc::Status RemoveUdf(grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveUdfRequest* req, + lemming::dataplane::sai::RemoveUdfResponse* resp); + + grpc::Status SetUdfAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetUdfAttributeRequest* req, + lemming::dataplane::sai::SetUdfAttributeResponse* resp); + + grpc::Status GetUdfAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetUdfAttributeRequest* req, + lemming::dataplane::sai::GetUdfAttributeResponse* resp); + + grpc::Status CreateUdfMatch( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateUdfMatchRequest* req, + lemming::dataplane::sai::CreateUdfMatchResponse* resp); + + grpc::Status RemoveUdfMatch( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveUdfMatchRequest* req, + lemming::dataplane::sai::RemoveUdfMatchResponse* resp); + + grpc::Status GetUdfMatchAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetUdfMatchAttributeRequest* req, + lemming::dataplane::sai::GetUdfMatchAttributeResponse* resp); + + grpc::Status CreateUdfGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateUdfGroupRequest* req, + lemming::dataplane::sai::CreateUdfGroupResponse* resp); + + grpc::Status RemoveUdfGroup( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveUdfGroupRequest* req, + lemming::dataplane::sai::RemoveUdfGroupResponse* resp); + + grpc::Status GetUdfGroupAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetUdfGroupAttributeRequest* req, + lemming::dataplane::sai::GetUdfGroupAttributeResponse* resp); + + sai_udf_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_UDF_H_ diff --git a/dataplane/standalone/saiserver/virtual_router.cc b/dataplane/standalone/saiserver/virtual_router.cc new file mode 100644 index 00000000..e4be1026 --- /dev/null +++ b/dataplane/standalone/saiserver/virtual_router.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/virtual_router.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/virtual_router.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status VirtualRouter::CreateVirtualRouter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateVirtualRouterRequest* req, + lemming::dataplane::sai::CreateVirtualRouterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status VirtualRouter::RemoveVirtualRouter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveVirtualRouterRequest* req, + lemming::dataplane::sai::RemoveVirtualRouterResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status VirtualRouter::SetVirtualRouterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetVirtualRouterAttributeRequest* req, + lemming::dataplane::sai::SetVirtualRouterAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status VirtualRouter::GetVirtualRouterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetVirtualRouterAttributeRequest* req, + lemming::dataplane::sai::GetVirtualRouterAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/virtual_router.h b/dataplane/standalone/saiserver/virtual_router.h new file mode 100644 index 00000000..a57f1f93 --- /dev/null +++ b/dataplane/standalone/saiserver/virtual_router.h @@ -0,0 +1,56 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_VIRTUAL_ROUTER_H_ +#define DATAPLANE_STANDALONE_SAI_VIRTUAL_ROUTER_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/virtual_router.grpc.pb.h" +#include "dataplane/proto/sai/virtual_router.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class VirtualRouter final + : public lemming::dataplane::sai::VirtualRouter::Service { + public: + grpc::Status CreateVirtualRouter( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateVirtualRouterRequest* req, + lemming::dataplane::sai::CreateVirtualRouterResponse* resp); + + grpc::Status RemoveVirtualRouter( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveVirtualRouterRequest* req, + lemming::dataplane::sai::RemoveVirtualRouterResponse* resp); + + grpc::Status SetVirtualRouterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetVirtualRouterAttributeRequest* req, + lemming::dataplane::sai::SetVirtualRouterAttributeResponse* resp); + + grpc::Status GetVirtualRouterAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetVirtualRouterAttributeRequest* req, + lemming::dataplane::sai::GetVirtualRouterAttributeResponse* resp); + + sai_virtual_router_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_VIRTUAL_ROUTER_H_ diff --git a/dataplane/standalone/saiserver/vlan.cc b/dataplane/standalone/saiserver/vlan.cc new file mode 100644 index 00000000..c03a4971 --- /dev/null +++ b/dataplane/standalone/saiserver/vlan.cc @@ -0,0 +1,99 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/vlan.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/vlan.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Vlan::CreateVlan( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateVlanRequest* req, + lemming::dataplane::sai::CreateVlanResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::RemoveVlan( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveVlanRequest* req, + lemming::dataplane::sai::RemoveVlanResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::SetVlanAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetVlanAttributeRequest* req, + lemming::dataplane::sai::SetVlanAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::GetVlanAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetVlanAttributeRequest* req, + lemming::dataplane::sai::GetVlanAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::CreateVlanMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateVlanMemberRequest* req, + lemming::dataplane::sai::CreateVlanMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::RemoveVlanMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveVlanMemberRequest* req, + lemming::dataplane::sai::RemoveVlanMemberResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::SetVlanMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetVlanMemberAttributeRequest* req, + lemming::dataplane::sai::SetVlanMemberAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::GetVlanMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetVlanMemberAttributeRequest* req, + lemming::dataplane::sai::GetVlanMemberAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::CreateVlanMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateVlanMembersRequest* req, + lemming::dataplane::sai::CreateVlanMembersResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::RemoveVlanMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveVlanMembersRequest* req, + lemming::dataplane::sai::RemoveVlanMembersResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Vlan::GetVlanStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetVlanStatsRequest* req, + lemming::dataplane::sai::GetVlanStatsResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/vlan.h b/dataplane/standalone/saiserver/vlan.h new file mode 100644 index 00000000..9cf721e6 --- /dev/null +++ b/dataplane/standalone/saiserver/vlan.h @@ -0,0 +1,88 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_VLAN_H_ +#define DATAPLANE_STANDALONE_SAI_VLAN_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/vlan.grpc.pb.h" +#include "dataplane/proto/sai/vlan.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Vlan final : public lemming::dataplane::sai::Vlan::Service { + public: + grpc::Status CreateVlan(grpc::ServerContext* context, + const lemming::dataplane::sai::CreateVlanRequest* req, + lemming::dataplane::sai::CreateVlanResponse* resp); + + grpc::Status RemoveVlan(grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveVlanRequest* req, + lemming::dataplane::sai::RemoveVlanResponse* resp); + + grpc::Status SetVlanAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetVlanAttributeRequest* req, + lemming::dataplane::sai::SetVlanAttributeResponse* resp); + + grpc::Status GetVlanAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetVlanAttributeRequest* req, + lemming::dataplane::sai::GetVlanAttributeResponse* resp); + + grpc::Status CreateVlanMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateVlanMemberRequest* req, + lemming::dataplane::sai::CreateVlanMemberResponse* resp); + + grpc::Status RemoveVlanMember( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveVlanMemberRequest* req, + lemming::dataplane::sai::RemoveVlanMemberResponse* resp); + + grpc::Status SetVlanMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetVlanMemberAttributeRequest* req, + lemming::dataplane::sai::SetVlanMemberAttributeResponse* resp); + + grpc::Status GetVlanMemberAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetVlanMemberAttributeRequest* req, + lemming::dataplane::sai::GetVlanMemberAttributeResponse* resp); + + grpc::Status CreateVlanMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateVlanMembersRequest* req, + lemming::dataplane::sai::CreateVlanMembersResponse* resp); + + grpc::Status RemoveVlanMembers( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveVlanMembersRequest* req, + lemming::dataplane::sai::RemoveVlanMembersResponse* resp); + + grpc::Status GetVlanStats( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetVlanStatsRequest* req, + lemming::dataplane::sai::GetVlanStatsResponse* resp); + + sai_vlan_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_VLAN_H_ diff --git a/dataplane/standalone/saiserver/wred.cc b/dataplane/standalone/saiserver/wred.cc new file mode 100644 index 00000000..4dc39989 --- /dev/null +++ b/dataplane/standalone/saiserver/wred.cc @@ -0,0 +1,50 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include "dataplane/standalone/saiserver/wred.h" + +#include + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/wred.pb.h" +#include "dataplane/standalone/saiserver/common.h" +#include "dataplane/standalone/saiserver/enum.h" + +grpc::Status Wred::CreateWred( + grpc::ServerContext* context, + const lemming::dataplane::sai::CreateWredRequest* req, + lemming::dataplane::sai::CreateWredResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Wred::RemoveWred( + grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveWredRequest* req, + lemming::dataplane::sai::RemoveWredResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Wred::SetWredAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetWredAttributeRequest* req, + lemming::dataplane::sai::SetWredAttributeResponse* resp) { + return grpc::Status::OK; +} + +grpc::Status Wred::GetWredAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetWredAttributeRequest* req, + lemming::dataplane::sai::GetWredAttributeResponse* resp) { + return grpc::Status::OK; +} diff --git a/dataplane/standalone/saiserver/wred.h b/dataplane/standalone/saiserver/wred.h new file mode 100644 index 00000000..4584c077 --- /dev/null +++ b/dataplane/standalone/saiserver/wred.h @@ -0,0 +1,53 @@ +// Copyright 2024 Google LLC +// +// 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. + +#ifndef DATAPLANE_STANDALONE_SAI_WRED_H_ +#define DATAPLANE_STANDALONE_SAI_WRED_H_ + +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/proto/sai/wred.grpc.pb.h" +#include "dataplane/proto/sai/wred.pb.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +class Wred final : public lemming::dataplane::sai::Wred::Service { + public: + grpc::Status CreateWred(grpc::ServerContext* context, + const lemming::dataplane::sai::CreateWredRequest* req, + lemming::dataplane::sai::CreateWredResponse* resp); + + grpc::Status RemoveWred(grpc::ServerContext* context, + const lemming::dataplane::sai::RemoveWredRequest* req, + lemming::dataplane::sai::RemoveWredResponse* resp); + + grpc::Status SetWredAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::SetWredAttributeRequest* req, + lemming::dataplane::sai::SetWredAttributeResponse* resp); + + grpc::Status GetWredAttribute( + grpc::ServerContext* context, + const lemming::dataplane::sai::GetWredAttributeRequest* req, + lemming::dataplane::sai::GetWredAttributeResponse* resp); + + sai_wred_api_t* api; +}; + +#endif // DATAPLANE_STANDALONE_SAI_WRED_H_ diff --git a/dataplane/standalone/server.cc b/dataplane/standalone/server.cc new file mode 100644 index 00000000..af27b255 --- /dev/null +++ b/dataplane/standalone/server.cc @@ -0,0 +1,326 @@ +// Copyright 2024 Google LLC +// +// 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. + +#include +#include +#include +#include + +#include "dataplane/proto/sai/common.grpc.pb.h" +#include "dataplane/proto/sai/common.pb.h" +#include "dataplane/standalone/saiserver/acl.h" +#include "dataplane/standalone/saiserver/bfd.h" +#include "dataplane/standalone/saiserver/bmtor.h" +#include "dataplane/standalone/saiserver/bridge.h" +#include "dataplane/standalone/saiserver/buffer.h" +#include "dataplane/standalone/saiserver/counter.h" +#include "dataplane/standalone/saiserver/debug_counter.h" +#include "dataplane/standalone/saiserver/dtel.h" +#include "dataplane/standalone/saiserver/fdb.h" +#include "dataplane/standalone/saiserver/generic_programmable.h" +#include "dataplane/standalone/saiserver/hash.h" +#include "dataplane/standalone/saiserver/hostif.h" +#include "dataplane/standalone/saiserver/ipmc.h" +#include "dataplane/standalone/saiserver/ipmc_group.h" +#include "dataplane/standalone/saiserver/ipsec.h" +#include "dataplane/standalone/saiserver/isolation_group.h" +#include "dataplane/standalone/saiserver/l2mc.h" +#include "dataplane/standalone/saiserver/l2mc_group.h" +#include "dataplane/standalone/saiserver/lag.h" +#include "dataplane/standalone/saiserver/macsec.h" +#include "dataplane/standalone/saiserver/mcast_fdb.h" +#include "dataplane/standalone/saiserver/mirror.h" +#include "dataplane/standalone/saiserver/mpls.h" +#include "dataplane/standalone/saiserver/my_mac.h" +#include "dataplane/standalone/saiserver/nat.h" +#include "dataplane/standalone/saiserver/neighbor.h" +#include "dataplane/standalone/saiserver/next_hop.h" +#include "dataplane/standalone/saiserver/next_hop_group.h" +#include "dataplane/standalone/saiserver/policer.h" +#include "dataplane/standalone/saiserver/port.h" +#include "dataplane/standalone/saiserver/qos_map.h" +#include "dataplane/standalone/saiserver/queue.h" +#include "dataplane/standalone/saiserver/route.h" +#include "dataplane/standalone/saiserver/router_interface.h" +#include "dataplane/standalone/saiserver/rpf_group.h" +#include "dataplane/standalone/saiserver/samplepacket.h" +#include "dataplane/standalone/saiserver/scheduler.h" +#include "dataplane/standalone/saiserver/scheduler_group.h" +#include "dataplane/standalone/saiserver/srv6.h" +#include "dataplane/standalone/saiserver/stp.h" +#include "dataplane/standalone/saiserver/switch.h" +#include "dataplane/standalone/saiserver/system_port.h" +#include "dataplane/standalone/saiserver/tam.h" +#include "dataplane/standalone/saiserver/tunnel.h" +#include "dataplane/standalone/saiserver/udf.h" +#include "dataplane/standalone/saiserver/virtual_router.h" +#include "dataplane/standalone/saiserver/vlan.h" +#include "dataplane/standalone/saiserver/wred.h" + +extern "C" { +#include "inc/sai.h" +} + +extern "C" { +#include "experimental/saiextensions.h" +} + +std::shared_ptr acl; +std::shared_ptr bfd; +std::shared_ptr buffer; +std::shared_ptr bmtor; +std::shared_ptr bridge; +std::shared_ptr counter; +std::shared_ptr debug_counter; +std::shared_ptr generic_programmable; +std::shared_ptr dtel; +std::shared_ptr fdb; +std::shared_ptr hash; +std::shared_ptr hostif; +std::shared_ptr ipmc_group; +std::shared_ptr ipmc; +std::shared_ptr ipsec; +std::shared_ptr isolation_group; +std::shared_ptr l2mc_group; +std::shared_ptr l2mc; +std::shared_ptr lag; +std::shared_ptr macsec; +std::shared_ptr mirror; +std::shared_ptr mcast_fdb; +std::shared_ptr mpls; +std::shared_ptr my_mac; +std::shared_ptr nat; +std::shared_ptr neighbor; +std::shared_ptr next_hop_group; +std::shared_ptr next_hop; +std::shared_ptr policer; +std::shared_ptr port; +std::shared_ptr qos_map; +std::shared_ptr queue; +std::shared_ptr route; +std::shared_ptr router_interface; +std::shared_ptr rpf_group; +std::shared_ptr samplepacket; +std::shared_ptr scheduler_group; +std::shared_ptr scheduler; +std::shared_ptr srv6; +std::shared_ptr stp; +std::shared_ptr switch_; +std::shared_ptr system_port; +std::shared_ptr tam; +std::shared_ptr tunnel; +std::shared_ptr udf; +std::shared_ptr virtual_router; +std::shared_ptr vlan; +std::shared_ptr wred; + +const char *table_get_value(_In_ sai_switch_profile_id_t profile_id, + _In_ const char *variable) { + return NULL; +} +int table_get_next_value(_In_ sai_switch_profile_id_t profile_id, + _Out_ const char **variable, + _Out_ const char **value) { + return -1; +} +const sai_service_method_table_t table = {table_get_value, + table_get_next_value}; + +class Entry final : public lemming::dataplane::sai::Entrypoint::Service { + grpc::Status ObjectTypeQuery( + ::grpc::ServerContext *context, + const ::lemming::dataplane::sai::ObjectTypeQueryRequest *request, + ::lemming::dataplane::sai::ObjectTypeQueryResponse *response) { + return grpc::Status::OK; + } + grpc::Status Initialize( + ::grpc::ServerContext *context, + const ::lemming::dataplane::sai::InitializeRequest *request, + ::lemming::dataplane::sai::InitializeResponse *response) { + sai_status_t st = sai_api_initialize(0, &table); + if (st != SAI_STATUS_SUCCESS) { + return grpc::Status(grpc::StatusCode::INTERNAL, + "failed to initialize api"); + } + + sai_api_query(SAI_API_ACL, (void **)acl->api); + sai_api_query(SAI_API_BFD, (void **)bfd->api); + sai_api_query(SAI_API_BUFFER, (void **)buffer->api); + sai_api_query((sai_api_t)SAI_API_BMTOR, (void **)bmtor->api); + sai_api_query(SAI_API_BRIDGE, (void **)bridge->api); + sai_api_query(SAI_API_COUNTER, (void **)counter->api); + sai_api_query(SAI_API_DEBUG_COUNTER, (void **)debug_counter->api); + sai_api_query(SAI_API_GENERIC_PROGRAMMABLE, + (void **)generic_programmable->api); + sai_api_query(SAI_API_DTEL, (void **)dtel->api); + sai_api_query(SAI_API_FDB, (void **)fdb->api); + sai_api_query(SAI_API_HASH, (void **)hash->api); + sai_api_query(SAI_API_HOSTIF, (void **)hostif->api); + sai_api_query(SAI_API_IPMC_GROUP, (void **)ipmc_group->api); + sai_api_query(SAI_API_IPMC, (void **)ipmc->api); + sai_api_query(SAI_API_IPSEC, (void **)ipsec->api); + sai_api_query(SAI_API_ISOLATION_GROUP, (void **)isolation_group->api); + sai_api_query(SAI_API_L2MC_GROUP, (void **)l2mc_group->api); + sai_api_query(SAI_API_L2MC, (void **)l2mc->api); + sai_api_query(SAI_API_LAG, (void **)lag->api); + sai_api_query(SAI_API_MACSEC, (void **)macsec->api); + sai_api_query(SAI_API_MIRROR, (void **)mirror->api); + sai_api_query(SAI_API_MCAST_FDB, (void **)mcast_fdb->api); + sai_api_query(SAI_API_MPLS, (void **)mpls->api); + sai_api_query(SAI_API_MY_MAC, (void **)my_mac->api); + sai_api_query(SAI_API_NAT, (void **)nat->api); + sai_api_query(SAI_API_NEIGHBOR, (void **)neighbor->api); + sai_api_query(SAI_API_NEXT_HOP_GROUP, (void **)next_hop_group->api); + sai_api_query(SAI_API_NEXT_HOP, (void **)next_hop->api); + sai_api_query(SAI_API_POLICER, (void **)policer->api); + sai_api_query(SAI_API_PORT, (void **)port->api); + sai_api_query(SAI_API_QOS_MAP, (void **)qos_map->api); + sai_api_query(SAI_API_QUEUE, (void **)queue->api); + sai_api_query(SAI_API_ROUTE, (void **)route->api); + sai_api_query(SAI_API_ROUTER_INTERFACE, (void **)router_interface->api); + sai_api_query(SAI_API_RPF_GROUP, (void **)rpf_group->api); + sai_api_query(SAI_API_SAMPLEPACKET, (void **)samplepacket->api); + sai_api_query(SAI_API_SCHEDULER_GROUP, (void **)scheduler_group->api); + sai_api_query(SAI_API_SCHEDULER, (void **)scheduler->api); + sai_api_query(SAI_API_SRV6, (void **)srv6->api); + sai_api_query(SAI_API_STP, (void **)stp->api); + sai_api_query(SAI_API_SWITCH, (void **)switch_->api); + sai_api_query(SAI_API_SYSTEM_PORT, (void **)system_port->api); + sai_api_query(SAI_API_TAM, (void **)tam->api); + sai_api_query(SAI_API_TUNNEL, (void **)tunnel->api); + sai_api_query(SAI_API_UDF, (void **)udf->api); + sai_api_query(SAI_API_VIRTUAL_ROUTER, (void **)virtual_router->api); + sai_api_query(SAI_API_VLAN, (void **)vlan->api); + sai_api_query(SAI_API_WRED, (void **)wred->api); + + return grpc::Status::OK; + } + grpc::Status Uninitialize( + ::grpc::ServerContext *context, + const ::lemming::dataplane::sai::UninitializeRequest *request, + ::lemming::dataplane::sai::UninitializeResponse *response) { + return grpc::Status::OK; + } +}; + +int main() { + std::string server_address("0.0.0.0:50000"); + + acl = std::make_shared(); + bfd = std::make_shared(); + buffer = std::make_shared(); + bmtor = std::make_shared(); + bridge = std::make_shared(); + counter = std::make_shared(); + debug_counter = std::make_shared(); + generic_programmable = std::make_shared(); + dtel = std::make_shared(); + fdb = std::make_shared(); + hash = std::make_shared(); + hostif = std::make_shared(); + ipmc_group = std::make_shared(); + ipmc = std::make_shared(); + ipsec = std::make_shared(); + isolation_group = std::make_shared(); + l2mc_group = std::make_shared(); + l2mc = std::make_shared(); + lag = std::make_shared(); + macsec = std::make_shared(); + mirror = std::make_shared(); + mcast_fdb = std::make_shared(); + mpls = std::make_shared(); + my_mac = std::make_shared(); + nat = std::make_shared(); + neighbor = std::make_shared(); + next_hop_group = std::make_shared(); + next_hop = std::make_shared(); + policer = std::make_shared(); + port = std::make_shared(); + qos_map = std::make_shared(); + queue = std::make_shared(); + route = std::make_shared(); + router_interface = std::make_shared(); + rpf_group = std::make_shared(); + samplepacket = std::make_shared(); + scheduler_group = std::make_shared(); + scheduler = std::make_shared(); + srv6 = std::make_shared(); + stp = std::make_shared(); + switch_ = std::make_shared(); + system_port = std::make_shared(); + tam = std::make_shared(); + tunnel = std::make_shared(); + udf = std::make_shared(); + virtual_router = std::make_shared(); + vlan = std::make_shared(); + wred = std::make_shared(); + + grpc::ServerBuilder builder; + + builder.RegisterService(acl.get()); + builder.RegisterService(bfd.get()); + builder.RegisterService(buffer.get()); + builder.RegisterService(bmtor.get()); + builder.RegisterService(bridge.get()); + builder.RegisterService(counter.get()); + builder.RegisterService(debug_counter.get()); + builder.RegisterService(generic_programmable.get()); + builder.RegisterService(dtel.get()); + builder.RegisterService(fdb.get()); + builder.RegisterService(hash.get()); + builder.RegisterService(hostif.get()); + builder.RegisterService(ipmc_group.get()); + builder.RegisterService(ipmc.get()); + builder.RegisterService(ipsec.get()); + builder.RegisterService(isolation_group.get()); + builder.RegisterService(l2mc_group.get()); + builder.RegisterService(l2mc.get()); + builder.RegisterService(lag.get()); + builder.RegisterService(macsec.get()); + builder.RegisterService(mirror.get()); + builder.RegisterService(mcast_fdb.get()); + builder.RegisterService(mpls.get()); + builder.RegisterService(my_mac.get()); + builder.RegisterService(nat.get()); + builder.RegisterService(neighbor.get()); + builder.RegisterService(next_hop_group.get()); + builder.RegisterService(next_hop.get()); + builder.RegisterService(policer.get()); + builder.RegisterService(port.get()); + builder.RegisterService(qos_map.get()); + builder.RegisterService(queue.get()); + builder.RegisterService(route.get()); + builder.RegisterService(router_interface.get()); + builder.RegisterService(rpf_group.get()); + builder.RegisterService(samplepacket.get()); + builder.RegisterService(scheduler_group.get()); + builder.RegisterService(scheduler.get()); + builder.RegisterService(srv6.get()); + builder.RegisterService(stp.get()); + builder.RegisterService(switch_.get()); + builder.RegisterService(system_port.get()); + builder.RegisterService(tam.get()); + builder.RegisterService(tunnel.get()); + builder.RegisterService(udf.get()); + builder.RegisterService(virtual_router.get()); + builder.RegisterService(vlan.get()); + builder.RegisterService(wred.get()); + + builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); + + std::shared_ptr server(builder.BuildAndStart()); + + server->Wait(); + return 0; +} \ No newline at end of file From dc5140f91ac8b10a2c8b02b7d5f937b21227e57f Mon Sep 17 00:00:00 2001 From: Daniel Grau Date: Fri, 15 Nov 2024 18:54:14 +0000 Subject: [PATCH 2/2] fix --- dataplane/standalone/BUILD | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dataplane/standalone/BUILD b/dataplane/standalone/BUILD index 87473099..272b5534 100644 --- a/dataplane/standalone/BUILD +++ b/dataplane/standalone/BUILD @@ -76,15 +76,15 @@ cc_binary( cc_binary( name = "server", srcs = ["server.cc"], - tags = ["manual"], - deps = [ - "//dataplane/standalone/saiserver", - "@com_github_grpc_grpc//:grpc++", - ], linkopts = [ "-lprotobuf", "-lgrpc++", "-lglog", - "-lsai" + "-lsai", + ], + tags = ["manual"], + deps = [ + "//dataplane/standalone/saiserver", + "@com_github_grpc_grpc//:grpc++", ], )