diff --git a/dataplane/forwarding/fwdport/ports/kernel.go b/dataplane/forwarding/fwdport/ports/kernel.go index 22edd608..a5568cc3 100644 --- a/dataplane/forwarding/fwdport/ports/kernel.go +++ b/dataplane/forwarding/fwdport/ports/kernel.go @@ -111,7 +111,7 @@ func (p *kernelPort) process() { return default: d, _, err := p.handle.ReadPacketData() - if err == afpacket.ErrTimeout { // Don't log this error as it is very spammy. + if err == afpacket.ErrTimeout || err == afpacket.ErrPoll { // Don't log this error as it is very spammy. continue } if err != nil { diff --git a/dataplane/internal/engine/engine.go b/dataplane/internal/engine/engine.go index 2224afd8..44d08c3d 100644 --- a/dataplane/internal/engine/engine.go +++ b/dataplane/internal/engine/engine.go @@ -284,12 +284,12 @@ func (e *Engine) ID() string { func (e *Engine) CreatePort(ctx context.Context, req *dpb.CreatePortRequest) (*dpb.CreatePortResponse, error) { var err error - switch req.Type { - case fwdpb.PortType_PORT_TYPE_KERNEL: - err = e.CreateExternalPort(ctx, req.GetId(), req.GetKernelDev()) - case fwdpb.PortType_PORT_TYPE_TAP: - err = e.CreateInternalPort(ctx, req.GetId(), req.GetKernelDev(), req.GetExternalPort()) - case fwdpb.PortType_PORT_TYPE_CPU_PORT: + switch req.Location { + case dpb.PortLocation_PORT_LOCATION_EXTERNAL: + err = e.CreateExternalPort(ctx, req.GetType(), req.GetId(), req.GetKernelDev()) + case dpb.PortLocation_PORT_LOCATION_INTERNAL: + err = e.CreateInternalPort(ctx, req.GetType(), req.GetId(), req.GetKernelDev(), req.GetExternalPort()) + case dpb.PortLocation_PORT_LOCATION_CPU: e.cpuPortID = req.GetId() req := &fwdpb.PortCreateRequest{ ContextId: &fwdpb.ContextId{Id: e.id}, @@ -303,7 +303,7 @@ func (e *Engine) CreatePort(ctx context.Context, req *dpb.CreatePortRequest) (*d } _, err = e.PortCreate(ctx, req) default: - return nil, fmt.Errorf("invalid port type") + return nil, fmt.Errorf("invalid port location: %v", req.Location) } return &dpb.CreatePortResponse{}, err } @@ -923,9 +923,9 @@ func (e *Engine) UpdatePortSrcMAC(ctx context.Context, portID string, mac []byte } // CreateExternalPort creates an external port (connected to other devices). -func (e *Engine) CreateExternalPort(ctx context.Context, id, devName string) error { +func (e *Engine) CreateExternalPort(ctx context.Context, t fwdpb.PortType, id, devName string) error { log.Infof("added external id %s, dev %s", id, devName) - nid, err := createKernelPort(ctx, e.id, e.Server, id, devName) + nid, err := createPortAndEntries(ctx, e.id, e.Server, t, id, devName) if err != nil { return err } @@ -1003,9 +1003,9 @@ func (e *Engine) CreateExternalPort(ctx context.Context, id, devName string) err } // CreateInternalPort creates an local (ie TAP) port for the given linux device name. -func (e *Engine) CreateInternalPort(ctx context.Context, id, devName, externalID string) error { +func (e *Engine) CreateInternalPort(ctx context.Context, t fwdpb.PortType, id, devName, externalID string) error { log.Infof("added internal id %s, dev %s, external %s", id, devName, externalID) - nid, err := createTapPort(ctx, e.id, e.Server, id, devName) + nid, err := createPortAndEntries(ctx, e.id, e.Server, t, id, devName) if err != nil { return err } @@ -1165,7 +1165,7 @@ func (e *Engine) AddInterface(ctx context.Context, req *dpb.AddInterfaceRequest) } case dpb.InterfaceType_INTERFACE_TYPE_LOOPBACK: // TODO: this may need to handled differently if multiple loopbacks are created. portID := fmt.Sprintf("%s-port", req.GetId()) - if err := e.CreateExternalPort(ctx, portID, "lo"); err != nil { + if err := e.CreateExternalPort(ctx, fwdpb.PortType_PORT_TYPE_KERNEL, portID, "lo"); err != nil { return nil, err } e.ifaceToPort[req.GetId()] = portID diff --git a/dataplane/internal/engine/helpers.go b/dataplane/internal/engine/helpers.go index c9323f80..4f03005e 100644 --- a/dataplane/internal/engine/helpers.go +++ b/dataplane/internal/engine/helpers.go @@ -281,12 +281,12 @@ func createLayer3PuntTable(ctx context.Context, ctxID string, c fwdpb.Forwarding return nil } -// createKernelPort creates a port using the "Kernel" dataplane type (socket API). -func createKernelPort(ctx context.Context, ctxID string, c fwdpb.ForwardingServer, id, devName string) (uint64, error) { +// createPortAndEntries creates a port and sets up the punt rules +func createPortAndEntries(ctx context.Context, ctxID string, c fwdpb.ForwardingServer, t fwdpb.PortType, id, devName string) (uint64, error) { port := &fwdpb.PortCreateRequest{ ContextId: &fwdpb.ContextId{Id: ctxID}, Port: &fwdpb.PortDesc{ - PortType: fwdpb.PortType_PORT_TYPE_KERNEL, + PortType: t, PortId: &fwdpb.PortId{ ObjectId: &fwdpb.ObjectId{Id: id}, }, @@ -297,37 +297,12 @@ func createKernelPort(ctx context.Context, ctxID string, c fwdpb.ForwardingServe }, }, } - portID, err := c.PortCreate(ctx, port) - if err != nil { - return 0, err - } - if err := addLayer2PuntRule(ctx, ctxID, c, portID.GetObjectIndex().GetIndex(), etherBroadcast, etherBroadcastMask); err != nil { - return 0, err - } - if err := addLayer2PuntRule(ctx, ctxID, c, portID.GetObjectIndex().GetIndex(), etherMulticast, etherMulticastMask); err != nil { - return 0, err - } - if err := addLayer2PuntRule(ctx, ctxID, c, portID.GetObjectIndex().GetIndex(), etherIPV6Multi, etherIPV6MultiMask); err != nil { - return 0, err - } - return portID.GetObjectIndex().GetIndex(), nil -} - -// createKernelPort creates a port using the "TAP" dataplane type (tap file API) and returns the fd to read/write from. -func createTapPort(ctx context.Context, ctxID string, c fwdpb.ForwardingServer, id, devName string) (uint64, error) { - port := &fwdpb.PortCreateRequest{ - ContextId: &fwdpb.ContextId{Id: ctxID}, - Port: &fwdpb.PortDesc{ - PortType: fwdpb.PortType_PORT_TYPE_TAP, - PortId: &fwdpb.PortId{ - ObjectId: &fwdpb.ObjectId{Id: id}, - }, - Port: &fwdpb.PortDesc_Tap{ - Tap: &fwdpb.TAPPortDesc{ - DeviceName: devName, - }, + if t == fwdpb.PortType_PORT_TYPE_TAP { + port.Port.Port = &fwdpb.PortDesc_Tap{ + Tap: &fwdpb.TAPPortDesc{ + DeviceName: devName, }, - }, + } } portID, err := c.PortCreate(ctx, port) if err != nil { @@ -342,6 +317,5 @@ func createTapPort(ctx context.Context, ctxID string, c fwdpb.ForwardingServer, if err := addLayer2PuntRule(ctx, ctxID, c, portID.GetObjectIndex().GetIndex(), etherIPV6Multi, etherIPV6MultiMask); err != nil { return 0, err } - return portID.GetObjectIndex().GetIndex(), nil } diff --git a/dataplane/standalone/entrypoint.cc b/dataplane/standalone/entrypoint.cc index b6d775f9..39bb9d10 100644 --- a/dataplane/standalone/entrypoint.cc +++ b/dataplane/standalone/entrypoint.cc @@ -178,10 +178,9 @@ std::unique_ptr wred; std::unique_ptr entry; -// TODO(dgrau): implement this without using gRPC. sai_status_t sai_api_initialize( _In_ uint64_t flags, _In_ const sai_service_method_table_t *services) { - FLAGS_log_dir = "/var/log/syncd"; + FLAGS_log_dir = "/var/log"; google::InitGoogleLogging("lucius"); google::InstallFailureSignalHandler(); diff --git a/dataplane/standalone/saiserver/ports.go b/dataplane/standalone/saiserver/ports.go index 14b8dc72..9c9fea34 100644 --- a/dataplane/standalone/saiserver/ports.go +++ b/dataplane/standalone/saiserver/ports.go @@ -113,13 +113,13 @@ func (port *port) CreatePort(ctx context.Context, _ *saipb.CreatePortRequest) (* QosDscpToForwardingClassMap: proto.Uint64(0), QosMplsExpToForwardingClassMap: proto.Uint64(0), IpsecPort: proto.Uint64(0), - SupportedSpeed: []uint32{1024}, - OperSpeed: proto.Uint32(1024), + SupportedSpeed: []uint32{1000, 10000, 40000}, + OperSpeed: proto.Uint32(40000), SupportedFecMode: []saipb.PortFecMode{saipb.PortFecMode_PORT_FEC_MODE_NONE}, NumberOfIngressPriorityGroups: proto.Uint32(0), QosMaximumHeadroomSize: proto.Uint32(0), AdminState: proto.Bool(true), - AutoNegMode: proto.Bool(false), + AutoNegMode: proto.Bool(true), Mtu: proto.Uint32(1514), } @@ -139,6 +139,7 @@ func (port *port) CreatePort(ctx context.Context, _ *saipb.CreatePortRequest) (* Src: &dpb.CreatePortRequest_KernelDev{ KernelDev: dev, }, + Location: dpb.PortLocation_PORT_LOCATION_EXTERNAL, }) if err != nil { return nil, err @@ -155,8 +156,9 @@ func (port *port) createCPUPort(ctx context.Context) (uint64, error) { id := port.mgr.NextID() _, err := port.dataplane.CreatePort(ctx, &dpb.CreatePortRequest{ - Id: fmt.Sprint(id), - Type: fwdpb.PortType_PORT_TYPE_CPU_PORT, + Id: fmt.Sprint(id), + Type: fwdpb.PortType_PORT_TYPE_CPU_PORT, + Location: dpb.PortLocation_PORT_LOCATION_CPU, }) if err != nil { return 0, err @@ -255,6 +257,11 @@ func (port *port) SetPortAttribute(ctx context.Context, req *saipb.SetPortAttrib return &saipb.SetPortAttributeResponse{}, nil } +func (port *port) Reset() { + port.portToEth = make(map[uint64]string) + port.nextEth = 1 +} + func newHostif(mgr *attrmgr.AttrMgr, dataplane portDataplaneAPI, s *grpc.Server) *hostif { p := &hostif{ mgr: mgr, @@ -280,10 +287,11 @@ func (hostif *hostif) CreateHostif(ctx context.Context, req *saipb.CreateHostifR case saipb.HostifType_HOSTIF_TYPE_NETDEV: portReq := &dpb.CreatePortRequest{ Id: fmt.Sprint(id), - Type: fwdpb.PortType_PORT_TYPE_TAP, + Type: fwdpb.PortType_PORT_TYPE_KERNEL, Src: &dpb.CreatePortRequest_KernelDev{ KernelDev: string(req.GetName()), }, + Location: dpb.PortLocation_PORT_LOCATION_INTERNAL, } attrReq := &saipb.GetPortAttributeRequest{Oid: req.GetObjId(), AttrType: []saipb.PortAttr{saipb.PortAttr_PORT_ATTR_OPER_STATUS}} p := &saipb.GetPortAttributeResponse{} @@ -298,6 +306,10 @@ func (hostif *hostif) CreateHostif(ctx context.Context, req *saipb.CreateHostifR return nil, err } } + attr := &saipb.HostifAttribute{ + OperStatus: proto.Bool(true), + } + hostif.mgr.StoreAttributes(id, attr) default: return nil, status.Errorf(codes.InvalidArgument, "unknown type %v", req.GetType()) } diff --git a/dataplane/standalone/saiserver/ports_test.go b/dataplane/standalone/saiserver/ports_test.go index 1fe3b379..e6c6ea17 100644 --- a/dataplane/standalone/saiserver/ports_test.go +++ b/dataplane/standalone/saiserver/ports_test.go @@ -94,13 +94,13 @@ func TestCreatePort(t *testing.T) { QosDscpToForwardingClassMap: proto.Uint64(0), QosMplsExpToForwardingClassMap: proto.Uint64(0), IpsecPort: proto.Uint64(0), - SupportedSpeed: []uint32{1024}, - OperSpeed: proto.Uint32(1024), + SupportedSpeed: []uint32{1000, 10000, 40000}, + OperSpeed: proto.Uint32(40000), SupportedFecMode: []saipb.PortFecMode{saipb.PortFecMode_PORT_FEC_MODE_NONE}, NumberOfIngressPriorityGroups: proto.Uint32(0), QosMaximumHeadroomSize: proto.Uint32(0), AdminState: proto.Bool(true), - AutoNegMode: proto.Bool(false), + AutoNegMode: proto.Bool(true), Mtu: proto.Uint32(1514), }, }, { @@ -156,13 +156,13 @@ func TestCreatePort(t *testing.T) { QosDscpToForwardingClassMap: proto.Uint64(0), QosMplsExpToForwardingClassMap: proto.Uint64(0), IpsecPort: proto.Uint64(0), - SupportedSpeed: []uint32{1024}, - OperSpeed: proto.Uint32(1024), + SupportedSpeed: []uint32{1000, 10000, 40000}, + OperSpeed: proto.Uint32(40000), SupportedFecMode: []saipb.PortFecMode{saipb.PortFecMode_PORT_FEC_MODE_NONE}, NumberOfIngressPriorityGroups: proto.Uint32(0), QosMaximumHeadroomSize: proto.Uint32(0), AdminState: proto.Bool(true), - AutoNegMode: proto.Bool(false), + AutoNegMode: proto.Bool(true), Mtu: proto.Uint32(1514), }, }} @@ -276,8 +276,9 @@ func TestCreateHostif(t *testing.T) { Oid: 1, }, wantAttr: &saipb.HostifAttribute{ - Type: saipb.HostifType_HOSTIF_TYPE_NETDEV.Enum(), - ObjId: proto.Uint64(2), + Type: saipb.HostifType_HOSTIF_TYPE_NETDEV.Enum(), + ObjId: proto.Uint64(2), + OperStatus: proto.Bool(true), }, }} for _, tt := range tests { diff --git a/dataplane/standalone/saiserver/saiserver.go b/dataplane/standalone/saiserver/saiserver.go index fd1d670a..fdc2f932 100644 --- a/dataplane/standalone/saiserver/saiserver.go +++ b/dataplane/standalone/saiserver/saiserver.go @@ -178,6 +178,7 @@ type Server struct { saipb.UnimplementedEntrypointServer mgr *attrmgr.AttrMgr engine *engine.Engine + initialized bool acl *acl bfd *bfd buffer *buffer @@ -225,10 +226,14 @@ func (s *Server) ObjectTypeQuery(_ context.Context, req *saipb.ObjectTypeQueryRe } func (s *Server) Initialize(ctx context.Context, _ *saipb.InitializeRequest) (*saipb.InitializeResponse, error) { - s.mgr.Reset() - if err := s.engine.Reset(ctx); err != nil { - return nil, err + if s.initialized { + s.mgr.Reset() + s.saiSwitch.Reset() + if err := s.engine.Reset(ctx); err != nil { + return nil, err + } } + s.initialized = true return &saipb.InitializeResponse{}, nil } diff --git a/dataplane/standalone/saiserver/switch.go b/dataplane/standalone/saiserver/switch.go index 69608be3..a3aff22b 100644 --- a/dataplane/standalone/saiserver/switch.go +++ b/dataplane/standalone/saiserver/switch.go @@ -269,8 +269,12 @@ func (sw *saiSwitch) PortStateChangeNotification(_ *saipb.PortStateChangeNotific }}, }) if err != nil { - return err + log.Warningf("failed to send port event %v", err) } } } } + +func (sw saiSwitch) Reset() { + sw.port.Reset() +} diff --git a/proto/dataplane/dataplane.pb.go b/proto/dataplane/dataplane.pb.go index 6a2f0a9f..9f3f03ce 100644 --- a/proto/dataplane/dataplane.pb.go +++ b/proto/dataplane/dataplane.pb.go @@ -25,6 +25,58 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type PortLocation int32 + +const ( + PortLocation_PORT_LOCATION_UNSPECIFIED PortLocation = 0 + PortLocation_PORT_LOCATION_INTERNAL PortLocation = 1 + PortLocation_PORT_LOCATION_EXTERNAL PortLocation = 2 + PortLocation_PORT_LOCATION_CPU PortLocation = 3 +) + +// Enum value maps for PortLocation. +var ( + PortLocation_name = map[int32]string{ + 0: "PORT_LOCATION_UNSPECIFIED", + 1: "PORT_LOCATION_INTERNAL", + 2: "PORT_LOCATION_EXTERNAL", + 3: "PORT_LOCATION_CPU", + } + PortLocation_value = map[string]int32{ + "PORT_LOCATION_UNSPECIFIED": 0, + "PORT_LOCATION_INTERNAL": 1, + "PORT_LOCATION_EXTERNAL": 2, + "PORT_LOCATION_CPU": 3, + } +) + +func (x PortLocation) Enum() *PortLocation { + p := new(PortLocation) + *p = x + return p +} + +func (x PortLocation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PortLocation) Descriptor() protoreflect.EnumDescriptor { + return file_proto_dataplane_dataplane_proto_enumTypes[0].Descriptor() +} + +func (PortLocation) Type() protoreflect.EnumType { + return &file_proto_dataplane_dataplane_proto_enumTypes[0] +} + +func (x PortLocation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PortLocation.Descriptor instead. +func (PortLocation) EnumDescriptor() ([]byte, []int) { + return file_proto_dataplane_dataplane_proto_rawDescGZIP(), []int{0} +} + type PacketAction int32 const ( @@ -58,11 +110,11 @@ func (x PacketAction) String() string { } func (PacketAction) Descriptor() protoreflect.EnumDescriptor { - return file_proto_dataplane_dataplane_proto_enumTypes[0].Descriptor() + return file_proto_dataplane_dataplane_proto_enumTypes[1].Descriptor() } func (PacketAction) Type() protoreflect.EnumType { - return &file_proto_dataplane_dataplane_proto_enumTypes[0] + return &file_proto_dataplane_dataplane_proto_enumTypes[1] } func (x PacketAction) Number() protoreflect.EnumNumber { @@ -71,7 +123,7 @@ func (x PacketAction) Number() protoreflect.EnumNumber { // Deprecated: Use PacketAction.Descriptor instead. func (PacketAction) EnumDescriptor() ([]byte, []int) { - return file_proto_dataplane_dataplane_proto_rawDescGZIP(), []int{0} + return file_proto_dataplane_dataplane_proto_rawDescGZIP(), []int{1} } type GroupUpdateMode int32 @@ -110,11 +162,11 @@ func (x GroupUpdateMode) String() string { } func (GroupUpdateMode) Descriptor() protoreflect.EnumDescriptor { - return file_proto_dataplane_dataplane_proto_enumTypes[1].Descriptor() + return file_proto_dataplane_dataplane_proto_enumTypes[2].Descriptor() } func (GroupUpdateMode) Type() protoreflect.EnumType { - return &file_proto_dataplane_dataplane_proto_enumTypes[1] + return &file_proto_dataplane_dataplane_proto_enumTypes[2] } func (x GroupUpdateMode) Number() protoreflect.EnumNumber { @@ -123,7 +175,7 @@ func (x GroupUpdateMode) Number() protoreflect.EnumNumber { // Deprecated: Use GroupUpdateMode.Descriptor instead. func (GroupUpdateMode) EnumDescriptor() ([]byte, []int) { - return file_proto_dataplane_dataplane_proto_rawDescGZIP(), []int{1} + return file_proto_dataplane_dataplane_proto_rawDescGZIP(), []int{2} } type InterfaceType int32 @@ -162,11 +214,11 @@ func (x InterfaceType) String() string { } func (InterfaceType) Descriptor() protoreflect.EnumDescriptor { - return file_proto_dataplane_dataplane_proto_enumTypes[2].Descriptor() + return file_proto_dataplane_dataplane_proto_enumTypes[3].Descriptor() } func (InterfaceType) Type() protoreflect.EnumType { - return &file_proto_dataplane_dataplane_proto_enumTypes[2] + return &file_proto_dataplane_dataplane_proto_enumTypes[3] } func (x InterfaceType) Number() protoreflect.EnumNumber { @@ -175,7 +227,7 @@ func (x InterfaceType) Number() protoreflect.EnumNumber { // Deprecated: Use InterfaceType.Descriptor instead. func (InterfaceType) EnumDescriptor() ([]byte, []int) { - return file_proto_dataplane_dataplane_proto_rawDescGZIP(), []int{2} + return file_proto_dataplane_dataplane_proto_rawDescGZIP(), []int{3} } type NextHop struct { @@ -659,6 +711,7 @@ type CreatePortRequest struct { // *CreatePortRequest_KernelDev Src isCreatePortRequest_Src `protobuf_oneof:"src"` ExternalPort string `protobuf:"bytes,4,opt,name=external_port,json=externalPort,proto3" json:"external_port,omitempty"` + Location PortLocation `protobuf:"varint,5,opt,name=location,proto3,enum=lemming.dataplane.PortLocation" json:"location,omitempty"` } func (x *CreatePortRequest) Reset() { @@ -728,6 +781,13 @@ func (x *CreatePortRequest) GetExternalPort() string { return "" } +func (x *CreatePortRequest) GetLocation() PortLocation { + if x != nil { + return x.Location + } + return PortLocation_PORT_LOCATION_UNSPECIFIED +} + type isCreatePortRequest_Src interface { isCreatePortRequest_Src() } @@ -1712,7 +1772,7 @@ var file_proto_dataplane_dataplane_proto_rawDesc = []byte{ 0x78, 0x74, 0x48, 0x6f, 0x70, 0x73, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x49, 0x64, 0x42, 0x05, 0x0a, 0x03, 0x68, - 0x6f, 0x70, 0x22, 0x9a, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x72, + 0x6f, 0x70, 0x22, 0xd7, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, @@ -1721,157 +1781,169 @@ var file_proto_dataplane_dataplane_proto_rawDesc = []byte{ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x44, 0x65, 0x76, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x05, 0x0a, 0x03, 0x73, 0x72, 0x63, 0x22, - 0x14, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x0a, 0x06, 0x49, 0x70, 0x4d, 0x61, 0x73, 0x6b, 0x12, - 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x61, - 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x22, 0x43, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x49, 0x50, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x05, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x65, - 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x14, 0x0a, 0x12, - 0x41, 0x64, 0x64, 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x4e, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x50, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x70, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x65, 0x6d, - 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x50, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x0a, 0x11, 0x41, - 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x35, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x52, 0x07, - 0x6e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x22, 0x14, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x4e, 0x65, - 0x78, 0x74, 0x48, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, - 0x0a, 0x16, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x48, - 0x6f, 0x70, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x36, - 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6c, - 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, - 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, - 0x74, 0x48, 0x6f, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x70, 0x6f, 0x72, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x70, 0x6f, 0x72, - 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x06, 0x69, 0x70, 0x5f, 0x73, - 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x69, 0x70, 0x53, 0x74, - 0x72, 0x12, 0x1b, 0x0a, 0x08, 0x69, 0x70, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x07, 0x69, 0x70, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x61, 0x63, - 0x42, 0x05, 0x0a, 0x03, 0x64, 0x65, 0x76, 0x42, 0x04, 0x0a, 0x02, 0x69, 0x70, 0x22, 0x15, 0x0a, - 0x13, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, - 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, - 0x0a, 0x07, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x06, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x06, 0x69, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, - 0x52, 0x05, 0x69, 0x70, 0x53, 0x74, 0x72, 0x12, 0x1b, 0x0a, 0x08, 0x69, 0x70, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x07, 0x69, 0x70, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x64, 0x65, 0x76, 0x42, 0x04, 0x0a, 0x02, 0x69, - 0x70, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x65, 0x69, 0x67, 0x68, - 0x62, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x13, - 0x41, 0x64, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x76, 0x72, 0x66, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x72, 0x66, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x34, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, 0x65, 0x6d, - 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x6d, 0x74, 0x75, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, - 0x16, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x60, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x52, 0x4f, 0x50, 0x10, 0x01, 0x12, 0x19, - 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x10, 0x02, 0x2a, 0x9a, 0x01, 0x0a, 0x0f, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, - 0x1d, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x4f, - 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x27, 0x0a, 0x23, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4f, 0x4e, 0x5f, 0x43, - 0x4f, 0x4e, 0x46, 0x4c, 0x49, 0x43, 0x54, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x47, 0x52, 0x4f, - 0x55, 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x41, - 0x50, 0x50, 0x45, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x47, 0x52, 0x4f, 0x55, 0x50, - 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x50, - 0x4c, 0x41, 0x43, 0x45, 0x10, 0x03, 0x2a, 0x83, 0x01, 0x0a, 0x0d, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x54, 0x45, - 0x52, 0x46, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, 0x54, 0x45, - 0x52, 0x46, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x10, - 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x02, 0x12, 0x1c, - 0x0a, 0x18, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x41, 0x47, 0x47, 0x52, 0x45, 0x47, 0x41, 0x54, 0x45, 0x10, 0x03, 0x32, 0xa0, 0x06, 0x0a, - 0x09, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, - 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, - 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x49, 0x50, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x50, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6c, 0x65, - 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x41, 0x64, 0x64, 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x50, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, - 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x41, 0x64, - 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x12, 0x24, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, - 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, - 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, - 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x4e, 0x65, - 0x78, 0x74, 0x48, 0x6f, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x29, 0x2e, 0x6c, 0x65, 0x6d, - 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, + 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6c, 0x65, 0x6d, + 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x50, + 0x6f, 0x72, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x05, 0x0a, 0x03, 0x73, 0x72, 0x63, 0x22, 0x14, 0x0a, 0x12, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x30, 0x0a, 0x06, 0x49, 0x70, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x12, 0x0a, 0x04, + 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, + 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x6d, 0x61, 0x73, 0x6b, 0x22, 0x43, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x49, 0x50, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, + 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x41, 0x64, 0x64, + 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x4e, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, + 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, + 0x17, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x4e, + 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, + 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x52, 0x07, 0x6e, 0x65, 0x78, + 0x74, 0x48, 0x6f, 0x70, 0x22, 0x14, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, + 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, - 0x74, 0x48, 0x6f, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, - 0x6f, 0x72, 0x12, 0x25, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, - 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, - 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x49, + 0x44, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, + 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, + 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa9, + 0x01, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, + 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x06, 0x69, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x69, 0x70, 0x53, 0x74, 0x72, 0x12, 0x1b, + 0x0a, 0x08, 0x69, 0x70, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x48, 0x01, 0x52, 0x07, 0x69, 0x70, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x61, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x42, 0x05, 0x0a, + 0x03, 0x64, 0x65, 0x76, 0x42, 0x04, 0x0a, 0x02, 0x69, 0x70, 0x22, 0x15, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x65, 0x69, - 0x67, 0x68, 0x62, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, - 0x41, 0x64, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x6c, - 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, - 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, - 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x65, 0x69, 0x67, + 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x70, + 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, + 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x06, 0x69, + 0x70, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x69, + 0x70, 0x53, 0x74, 0x72, 0x12, 0x1b, 0x0a, 0x08, 0x69, 0x70, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x07, 0x69, 0x70, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x42, 0x05, 0x0a, 0x03, 0x64, 0x65, 0x76, 0x42, 0x04, 0x0a, 0x02, 0x69, 0x70, 0x22, 0x18, + 0x0a, 0x16, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x13, 0x41, 0x64, 0x64, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x15, 0x0a, 0x06, 0x76, 0x72, 0x66, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x76, 0x72, 0x66, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, + 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, + 0x75, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0x16, 0x0a, 0x14, + 0x41, 0x64, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x7c, 0x0a, 0x0c, 0x50, 0x6f, 0x72, 0x74, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4c, 0x4f, 0x43, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4c, 0x4f, 0x43, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, + 0x1a, 0x0a, 0x16, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x50, + 0x4f, 0x52, 0x54, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x50, 0x55, + 0x10, 0x03, 0x2a, 0x60, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x41, 0x43, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x44, 0x52, 0x4f, 0x50, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, + 0x52, 0x44, 0x10, 0x02, 0x2a, 0x9a, 0x01, 0x0a, 0x0f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x47, 0x52, 0x4f, 0x55, + 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x27, 0x0a, 0x23, 0x47, + 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, + 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x4c, 0x49, + 0x43, 0x54, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x45, 0x4e, 0x44, + 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, + 0x03, 0x2a, 0x83, 0x01, 0x0a, 0x0d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, + 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, + 0x4f, 0x4f, 0x50, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x54, + 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x47, 0x47, 0x52, + 0x45, 0x47, 0x41, 0x54, 0x45, 0x10, 0x03, 0x32, 0xa0, 0x06, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, + 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, + 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x12, 0x24, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x50, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x64, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x12, 0x27, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x50, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, + 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, + 0x48, 0x6f, 0x70, 0x12, 0x24, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, + 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, + 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, + 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x29, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, + 0x74, 0x48, 0x6f, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, + 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x12, 0x25, 0x2e, + 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x69, 0x67, + 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, + 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, + 0x12, 0x28, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x65, 0x69, 0x67, 0x68, + 0x62, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6c, 0x65, 0x6d, + 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, + 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x27, 0x2e, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x6c, 0x65, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1886,72 +1958,74 @@ func file_proto_dataplane_dataplane_proto_rawDescGZIP() []byte { return file_proto_dataplane_dataplane_proto_rawDescData } -var file_proto_dataplane_dataplane_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_proto_dataplane_dataplane_proto_enumTypes = make([]protoimpl.EnumInfo, 4) var file_proto_dataplane_dataplane_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_proto_dataplane_dataplane_proto_goTypes = []interface{}{ - (PacketAction)(0), // 0: lemming.dataplane.PacketAction - (GroupUpdateMode)(0), // 1: lemming.dataplane.GroupUpdateMode - (InterfaceType)(0), // 2: lemming.dataplane.InterfaceType - (*NextHop)(nil), // 3: lemming.dataplane.NextHop - (*NextHopList)(nil), // 4: lemming.dataplane.NextHopList - (*NextHopIDList)(nil), // 5: lemming.dataplane.NextHopIDList - (*RoutePrefix)(nil), // 6: lemming.dataplane.RoutePrefix - (*Route)(nil), // 7: lemming.dataplane.Route - (*CreatePortRequest)(nil), // 8: lemming.dataplane.CreatePortRequest - (*CreatePortResponse)(nil), // 9: lemming.dataplane.CreatePortResponse - (*IpMask)(nil), // 10: lemming.dataplane.IpMask - (*AddIPRouteRequest)(nil), // 11: lemming.dataplane.AddIPRouteRequest - (*AddIPRouteResponse)(nil), // 12: lemming.dataplane.AddIPRouteResponse - (*RemoveIPRouteRequest)(nil), // 13: lemming.dataplane.RemoveIPRouteRequest - (*RemoveIPRouteResponse)(nil), // 14: lemming.dataplane.RemoveIPRouteResponse - (*AddNextHopRequest)(nil), // 15: lemming.dataplane.AddNextHopRequest - (*AddNextHopResponse)(nil), // 16: lemming.dataplane.AddNextHopResponse - (*AddNextHopGroupRequest)(nil), // 17: lemming.dataplane.AddNextHopGroupRequest - (*AddNextHopGroupResponse)(nil), // 18: lemming.dataplane.AddNextHopGroupResponse - (*AddNeighborRequest)(nil), // 19: lemming.dataplane.AddNeighborRequest - (*AddNeighborResponse)(nil), // 20: lemming.dataplane.AddNeighborResponse - (*RemoveNeighborRequest)(nil), // 21: lemming.dataplane.RemoveNeighborRequest - (*RemoveNeighborResponse)(nil), // 22: lemming.dataplane.RemoveNeighborResponse - (*AddInterfaceRequest)(nil), // 23: lemming.dataplane.AddInterfaceRequest - (*AddInterfaceResponse)(nil), // 24: lemming.dataplane.AddInterfaceResponse - (*forwarding.ActionDesc)(nil), // 25: forwarding.ActionDesc - (forwarding.PortType)(0), // 26: forwarding.PortType + (PortLocation)(0), // 0: lemming.dataplane.PortLocation + (PacketAction)(0), // 1: lemming.dataplane.PacketAction + (GroupUpdateMode)(0), // 2: lemming.dataplane.GroupUpdateMode + (InterfaceType)(0), // 3: lemming.dataplane.InterfaceType + (*NextHop)(nil), // 4: lemming.dataplane.NextHop + (*NextHopList)(nil), // 5: lemming.dataplane.NextHopList + (*NextHopIDList)(nil), // 6: lemming.dataplane.NextHopIDList + (*RoutePrefix)(nil), // 7: lemming.dataplane.RoutePrefix + (*Route)(nil), // 8: lemming.dataplane.Route + (*CreatePortRequest)(nil), // 9: lemming.dataplane.CreatePortRequest + (*CreatePortResponse)(nil), // 10: lemming.dataplane.CreatePortResponse + (*IpMask)(nil), // 11: lemming.dataplane.IpMask + (*AddIPRouteRequest)(nil), // 12: lemming.dataplane.AddIPRouteRequest + (*AddIPRouteResponse)(nil), // 13: lemming.dataplane.AddIPRouteResponse + (*RemoveIPRouteRequest)(nil), // 14: lemming.dataplane.RemoveIPRouteRequest + (*RemoveIPRouteResponse)(nil), // 15: lemming.dataplane.RemoveIPRouteResponse + (*AddNextHopRequest)(nil), // 16: lemming.dataplane.AddNextHopRequest + (*AddNextHopResponse)(nil), // 17: lemming.dataplane.AddNextHopResponse + (*AddNextHopGroupRequest)(nil), // 18: lemming.dataplane.AddNextHopGroupRequest + (*AddNextHopGroupResponse)(nil), // 19: lemming.dataplane.AddNextHopGroupResponse + (*AddNeighborRequest)(nil), // 20: lemming.dataplane.AddNeighborRequest + (*AddNeighborResponse)(nil), // 21: lemming.dataplane.AddNeighborResponse + (*RemoveNeighborRequest)(nil), // 22: lemming.dataplane.RemoveNeighborRequest + (*RemoveNeighborResponse)(nil), // 23: lemming.dataplane.RemoveNeighborResponse + (*AddInterfaceRequest)(nil), // 24: lemming.dataplane.AddInterfaceRequest + (*AddInterfaceResponse)(nil), // 25: lemming.dataplane.AddInterfaceResponse + (*forwarding.ActionDesc)(nil), // 26: forwarding.ActionDesc + (forwarding.PortType)(0), // 27: forwarding.PortType } var file_proto_dataplane_dataplane_proto_depIdxs = []int32{ - 25, // 0: lemming.dataplane.NextHop.pre_transmit_actions:type_name -> forwarding.ActionDesc - 3, // 1: lemming.dataplane.NextHopList.hops:type_name -> lemming.dataplane.NextHop - 10, // 2: lemming.dataplane.RoutePrefix.mask:type_name -> lemming.dataplane.IpMask - 6, // 3: lemming.dataplane.Route.prefix:type_name -> lemming.dataplane.RoutePrefix - 0, // 4: lemming.dataplane.Route.action:type_name -> lemming.dataplane.PacketAction - 4, // 5: lemming.dataplane.Route.next_hops:type_name -> lemming.dataplane.NextHopList - 26, // 6: lemming.dataplane.CreatePortRequest.type:type_name -> forwarding.PortType - 7, // 7: lemming.dataplane.AddIPRouteRequest.route:type_name -> lemming.dataplane.Route - 6, // 8: lemming.dataplane.RemoveIPRouteRequest.prefix:type_name -> lemming.dataplane.RoutePrefix - 3, // 9: lemming.dataplane.AddNextHopRequest.next_hop:type_name -> lemming.dataplane.NextHop - 5, // 10: lemming.dataplane.AddNextHopGroupRequest.list:type_name -> lemming.dataplane.NextHopIDList - 1, // 11: lemming.dataplane.AddNextHopGroupRequest.mode:type_name -> lemming.dataplane.GroupUpdateMode - 2, // 12: lemming.dataplane.AddInterfaceRequest.type:type_name -> lemming.dataplane.InterfaceType - 8, // 13: lemming.dataplane.Dataplane.CreatePort:input_type -> lemming.dataplane.CreatePortRequest - 11, // 14: lemming.dataplane.Dataplane.AddIPRoute:input_type -> lemming.dataplane.AddIPRouteRequest - 13, // 15: lemming.dataplane.Dataplane.RemoveIPRoute:input_type -> lemming.dataplane.RemoveIPRouteRequest - 15, // 16: lemming.dataplane.Dataplane.AddNextHop:input_type -> lemming.dataplane.AddNextHopRequest - 17, // 17: lemming.dataplane.Dataplane.AddNextHopGroup:input_type -> lemming.dataplane.AddNextHopGroupRequest - 19, // 18: lemming.dataplane.Dataplane.AddNeighbor:input_type -> lemming.dataplane.AddNeighborRequest - 21, // 19: lemming.dataplane.Dataplane.RemoveNeighbor:input_type -> lemming.dataplane.RemoveNeighborRequest - 23, // 20: lemming.dataplane.Dataplane.AddInterface:input_type -> lemming.dataplane.AddInterfaceRequest - 9, // 21: lemming.dataplane.Dataplane.CreatePort:output_type -> lemming.dataplane.CreatePortResponse - 12, // 22: lemming.dataplane.Dataplane.AddIPRoute:output_type -> lemming.dataplane.AddIPRouteResponse - 14, // 23: lemming.dataplane.Dataplane.RemoveIPRoute:output_type -> lemming.dataplane.RemoveIPRouteResponse - 16, // 24: lemming.dataplane.Dataplane.AddNextHop:output_type -> lemming.dataplane.AddNextHopResponse - 18, // 25: lemming.dataplane.Dataplane.AddNextHopGroup:output_type -> lemming.dataplane.AddNextHopGroupResponse - 20, // 26: lemming.dataplane.Dataplane.AddNeighbor:output_type -> lemming.dataplane.AddNeighborResponse - 22, // 27: lemming.dataplane.Dataplane.RemoveNeighbor:output_type -> lemming.dataplane.RemoveNeighborResponse - 24, // 28: lemming.dataplane.Dataplane.AddInterface:output_type -> lemming.dataplane.AddInterfaceResponse - 21, // [21:29] is the sub-list for method output_type - 13, // [13:21] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 26, // 0: lemming.dataplane.NextHop.pre_transmit_actions:type_name -> forwarding.ActionDesc + 4, // 1: lemming.dataplane.NextHopList.hops:type_name -> lemming.dataplane.NextHop + 11, // 2: lemming.dataplane.RoutePrefix.mask:type_name -> lemming.dataplane.IpMask + 7, // 3: lemming.dataplane.Route.prefix:type_name -> lemming.dataplane.RoutePrefix + 1, // 4: lemming.dataplane.Route.action:type_name -> lemming.dataplane.PacketAction + 5, // 5: lemming.dataplane.Route.next_hops:type_name -> lemming.dataplane.NextHopList + 27, // 6: lemming.dataplane.CreatePortRequest.type:type_name -> forwarding.PortType + 0, // 7: lemming.dataplane.CreatePortRequest.location:type_name -> lemming.dataplane.PortLocation + 8, // 8: lemming.dataplane.AddIPRouteRequest.route:type_name -> lemming.dataplane.Route + 7, // 9: lemming.dataplane.RemoveIPRouteRequest.prefix:type_name -> lemming.dataplane.RoutePrefix + 4, // 10: lemming.dataplane.AddNextHopRequest.next_hop:type_name -> lemming.dataplane.NextHop + 6, // 11: lemming.dataplane.AddNextHopGroupRequest.list:type_name -> lemming.dataplane.NextHopIDList + 2, // 12: lemming.dataplane.AddNextHopGroupRequest.mode:type_name -> lemming.dataplane.GroupUpdateMode + 3, // 13: lemming.dataplane.AddInterfaceRequest.type:type_name -> lemming.dataplane.InterfaceType + 9, // 14: lemming.dataplane.Dataplane.CreatePort:input_type -> lemming.dataplane.CreatePortRequest + 12, // 15: lemming.dataplane.Dataplane.AddIPRoute:input_type -> lemming.dataplane.AddIPRouteRequest + 14, // 16: lemming.dataplane.Dataplane.RemoveIPRoute:input_type -> lemming.dataplane.RemoveIPRouteRequest + 16, // 17: lemming.dataplane.Dataplane.AddNextHop:input_type -> lemming.dataplane.AddNextHopRequest + 18, // 18: lemming.dataplane.Dataplane.AddNextHopGroup:input_type -> lemming.dataplane.AddNextHopGroupRequest + 20, // 19: lemming.dataplane.Dataplane.AddNeighbor:input_type -> lemming.dataplane.AddNeighborRequest + 22, // 20: lemming.dataplane.Dataplane.RemoveNeighbor:input_type -> lemming.dataplane.RemoveNeighborRequest + 24, // 21: lemming.dataplane.Dataplane.AddInterface:input_type -> lemming.dataplane.AddInterfaceRequest + 10, // 22: lemming.dataplane.Dataplane.CreatePort:output_type -> lemming.dataplane.CreatePortResponse + 13, // 23: lemming.dataplane.Dataplane.AddIPRoute:output_type -> lemming.dataplane.AddIPRouteResponse + 15, // 24: lemming.dataplane.Dataplane.RemoveIPRoute:output_type -> lemming.dataplane.RemoveIPRouteResponse + 17, // 25: lemming.dataplane.Dataplane.AddNextHop:output_type -> lemming.dataplane.AddNextHopResponse + 19, // 26: lemming.dataplane.Dataplane.AddNextHopGroup:output_type -> lemming.dataplane.AddNextHopGroupResponse + 21, // 27: lemming.dataplane.Dataplane.AddNeighbor:output_type -> lemming.dataplane.AddNeighborResponse + 23, // 28: lemming.dataplane.Dataplane.RemoveNeighbor:output_type -> lemming.dataplane.RemoveNeighborResponse + 25, // 29: lemming.dataplane.Dataplane.AddInterface:output_type -> lemming.dataplane.AddInterfaceResponse + 22, // [22:30] is the sub-list for method output_type + 14, // [14:22] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_proto_dataplane_dataplane_proto_init() } @@ -2262,7 +2336,7 @@ func file_proto_dataplane_dataplane_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_dataplane_dataplane_proto_rawDesc, - NumEnums: 3, + NumEnums: 4, NumMessages: 22, NumExtensions: 0, NumServices: 1, diff --git a/proto/dataplane/dataplane.proto b/proto/dataplane/dataplane.proto index d6a74e94..f8166d9a 100644 --- a/proto/dataplane/dataplane.proto +++ b/proto/dataplane/dataplane.proto @@ -68,6 +68,14 @@ message Route { } } +enum PortLocation { + PORT_LOCATION_UNSPECIFIED = 0; + PORT_LOCATION_INTERNAL = 1; + PORT_LOCATION_EXTERNAL = 2; + PORT_LOCATION_CPU = 3; +} + + message CreatePortRequest { forwarding.PortType type = 1; string id = 2; @@ -78,6 +86,7 @@ message CreatePortRequest { // For internal ports (TAP interface), // the id of the corresponding port for punt rules. string external_port = 4; + PortLocation location = 5; } message CreatePortResponse {