diff options
-rw-r--r-- | api/gobgp.pb.go | 3786 | ||||
-rw-r--r-- | api/gobgp.proto | 861 | ||||
-rw-r--r-- | gobgp/cmd/bmp.go | 37 | ||||
-rw-r--r-- | gobgp/cmd/common.go | 2 | ||||
-rw-r--r-- | gobgp/cmd/global.go | 44 | ||||
-rw-r--r-- | gobgp/cmd/mrt.go | 66 | ||||
-rw-r--r-- | gobgp/cmd/neighbor.go | 164 | ||||
-rw-r--r-- | gobgp/cmd/policy.go | 253 | ||||
-rw-r--r-- | gobgp/cmd/rpki.go | 74 | ||||
-rw-r--r-- | gobgp/cmd/vrf.go | 32 | ||||
-rw-r--r-- | openswitch/openswitch.go | 33 | ||||
-rw-r--r-- | server/grpc_server.go | 415 | ||||
-rw-r--r-- | server/rpki.go | 87 | ||||
-rw-r--r-- | server/server.go | 1341 | ||||
-rw-r--r-- | server/server_test.go | 25 |
15 files changed, 4501 insertions, 2719 deletions
diff --git a/api/gobgp.pb.go b/api/gobgp.pb.go index 0182000d..91a6bf71 100644 --- a/api/gobgp.pb.go +++ b/api/gobgp.pb.go @@ -1,33 +1,114 @@ // Code generated by protoc-gen-go. -// source: gobgp.proto +// source: api/gobgp.proto // DO NOT EDIT! /* Package gobgpapi is a generated protocol buffer package. It is generated from these files: - gobgp.proto + api/gobgp.proto It has these top-level messages: - Error + GetNeighborRequest + GetNeighborResponse Arguments - ModPathArguments - ModPathResponse - ModPathsArguments - ModNeighborArguments + AddPathRequest + AddPathResponse + DeletePathRequest + DeletePathResponse + AddNeighborRequest + AddNeighborResponse + DeleteNeighborRequest + DeleteNeighborResponse + ResetNeighborRequest + ResetNeighborResponse + SoftResetNeighborRequest + SoftResetNeighborResponse + ShutdownNeighborRequest + ShutdownNeighborResponse + EnableNeighborRequest + EnableNeighborResponse + DisableNeighborRequest + DisableNeighborResponse MrtArguments - ModMrtArguments - ModBmpArguments - ModRpkiArguments - ModVrfArguments - ModDefinedSetArguments - ModStatementArguments - ModPolicyArguments - ModPolicyAssignmentArguments - ModGlobalConfigArguments + EnableMrtRequest + EnableMrtResponse + DisableMrtRequest + DisableMrtResponse + InjectMrtRequest + InjectMrtResponse + AddBmpRequest + AddBmpResponse + DeleteBmpRequest + DeleteBmpResponse + RPKIConf + RPKIState + Rpki + GetRpkiRequest + GetRpkiResponse + AddRpkiRequest + AddRpkiResponse + DeleteRpkiRequest + DeleteRpkiResponse + EnableRpkiRequest + EnableRpkiResponse + DisableRpkiRequest + DisableRpkiResponse + ResetRpkiRequest + ResetRpkiResponse + SoftResetRpkiRequest + SoftResetRpkiResponse + GetVrfRequest + GetVrfResponse + AddVrfRequest + AddVrfResponse + DeleteVrfRequest + DeleteVrfResponse + GetDefinedSetRequest + GetDefinedSetResponse + AddDefinedSetRequest + AddDefinedSetResponse + DeleteDefinedSetRequest + DeleteDefinedSetResponse + ReplaceDefinedSetRequest + ReplaceDefinedSetResponse + GetStatementRequest + GetStatementResponse + AddStatementRequest + AddStatementResponse + DeleteStatementRequest + DeleteStatementResponse + ReplaceStatementRequest + ReplaceStatementResponse + GetPolicyRequest + GetPolicyResponse + AddPolicyRequest + AddPolicyResponse + DeletePolicyRequest + DeletePolicyResponse + ReplacePolicyRequest + ReplacePolicyResponse + GetPolicyAssignmentRequest + GetPolicyAssignmentResponse + AddPolicyAssignmentRequest + AddPolicyAssignmentResponse + DeletePolicyAssignmentRequest + DeletePolicyAssignmentResponse + ReplacePolicyAssignmentRequest + ReplacePolicyAssignmentResponse + GetServerRequest + GetServerResponse + StartServerRequest + StartServerResponse + StopServerRequest + StopServerResponse Path Destination Table + GetRibRequest + GetRibResponse + ValidateRibRequest + ValidateRibResponse Peer ApplyPolicy PrefixLimit @@ -57,10 +138,9 @@ It has these top-level messages: Policy PolicyAssignment MrtMessage - RPKIConf - RPKIState - RPKI - ROA + Roa + GetRoaRequest + GetRoaResponse Vrf Global */ @@ -114,48 +194,6 @@ func (x Resource) String() string { } func (Resource) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } -type Operation int32 - -const ( - Operation_ADD Operation = 0 - Operation_DEL Operation = 1 - Operation_DEL_ALL Operation = 2 - Operation_REPLACE Operation = 3 - Operation_ENABLE Operation = 4 - Operation_DISABLE Operation = 5 - Operation_RESET Operation = 6 - Operation_SOFTRESET Operation = 7 - Operation_INITIALIZE Operation = 8 -) - -var Operation_name = map[int32]string{ - 0: "ADD", - 1: "DEL", - 2: "DEL_ALL", - 3: "REPLACE", - 4: "ENABLE", - 5: "DISABLE", - 6: "RESET", - 7: "SOFTRESET", - 8: "INITIALIZE", -} -var Operation_value = map[string]int32{ - "ADD": 0, - "DEL": 1, - "DEL_ALL": 2, - "REPLACE": 3, - "ENABLE": 4, - "DISABLE": 5, - "RESET": 6, - "SOFTRESET": 7, - "INITIALIZE": 8, -} - -func (x Operation) String() string { - return proto.EnumName(Operation_name, int32(x)) -} -func (Operation) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - type DefinedType int32 const ( @@ -187,7 +225,7 @@ var DefinedType_value = map[string]int32{ func (x DefinedType) String() string { return proto.EnumName(DefinedType_name, int32(x)) } -func (DefinedType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (DefinedType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } type MatchType int32 @@ -211,7 +249,7 @@ var MatchType_value = map[string]int32{ func (x MatchType) String() string { return proto.EnumName(MatchType_name, int32(x)) } -func (MatchType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (MatchType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } type AsPathLengthType int32 @@ -235,7 +273,7 @@ var AsPathLengthType_value = map[string]int32{ func (x AsPathLengthType) String() string { return proto.EnumName(AsPathLengthType_name, int32(x)) } -func (AsPathLengthType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (AsPathLengthType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } type RouteAction int32 @@ -259,7 +297,7 @@ var RouteAction_value = map[string]int32{ func (x RouteAction) String() string { return proto.EnumName(RouteAction_name, int32(x)) } -func (RouteAction) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (RouteAction) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } type CommunityActionType int32 @@ -283,7 +321,7 @@ var CommunityActionType_value = map[string]int32{ func (x CommunityActionType) String() string { return proto.EnumName(CommunityActionType_name, int32(x)) } -func (CommunityActionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (CommunityActionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } type MedActionType int32 @@ -304,7 +342,7 @@ var MedActionType_value = map[string]int32{ func (x MedActionType) String() string { return proto.EnumName(MedActionType_name, int32(x)) } -func (MedActionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (MedActionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } type PolicyType int32 @@ -328,64 +366,83 @@ var PolicyType_value = map[string]int32{ func (x PolicyType) String() string { return proto.EnumName(PolicyType_name, int32(x)) } -func (PolicyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (PolicyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } -type Error_ErrorCode int32 +type SoftResetNeighborRequest_SoftResetDirection int32 const ( - Error_SUCCESS Error_ErrorCode = 0 - Error_FAIL Error_ErrorCode = 1 + SoftResetNeighborRequest_IN SoftResetNeighborRequest_SoftResetDirection = 0 + SoftResetNeighborRequest_OUT SoftResetNeighborRequest_SoftResetDirection = 1 + SoftResetNeighborRequest_BOTH SoftResetNeighborRequest_SoftResetDirection = 2 ) -var Error_ErrorCode_name = map[int32]string{ - 0: "SUCCESS", - 1: "FAIL", +var SoftResetNeighborRequest_SoftResetDirection_name = map[int32]string{ + 0: "IN", + 1: "OUT", + 2: "BOTH", } -var Error_ErrorCode_value = map[string]int32{ - "SUCCESS": 0, - "FAIL": 1, +var SoftResetNeighborRequest_SoftResetDirection_value = map[string]int32{ + "IN": 0, + "OUT": 1, + "BOTH": 2, } -func (x Error_ErrorCode) String() string { - return proto.EnumName(Error_ErrorCode_name, int32(x)) +func (x SoftResetNeighborRequest_SoftResetDirection) String() string { + return proto.EnumName(SoftResetNeighborRequest_SoftResetDirection_name, int32(x)) +} +func (SoftResetNeighborRequest_SoftResetDirection) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{13, 0} } -func (Error_ErrorCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } -type ModBmpArguments_MonitoringPolicy int32 +type AddBmpRequest_MonitoringPolicy int32 const ( - ModBmpArguments_PRE ModBmpArguments_MonitoringPolicy = 0 - ModBmpArguments_POST ModBmpArguments_MonitoringPolicy = 1 - ModBmpArguments_BOTH ModBmpArguments_MonitoringPolicy = 2 + AddBmpRequest_PRE AddBmpRequest_MonitoringPolicy = 0 + AddBmpRequest_POST AddBmpRequest_MonitoringPolicy = 1 + AddBmpRequest_BOTH AddBmpRequest_MonitoringPolicy = 2 ) -var ModBmpArguments_MonitoringPolicy_name = map[int32]string{ +var AddBmpRequest_MonitoringPolicy_name = map[int32]string{ 0: "PRE", 1: "POST", 2: "BOTH", } -var ModBmpArguments_MonitoringPolicy_value = map[string]int32{ +var AddBmpRequest_MonitoringPolicy_value = map[string]int32{ "PRE": 0, "POST": 1, "BOTH": 2, } -func (x ModBmpArguments_MonitoringPolicy) String() string { - return proto.EnumName(ModBmpArguments_MonitoringPolicy_name, int32(x)) +func (x AddBmpRequest_MonitoringPolicy) String() string { + return proto.EnumName(AddBmpRequest_MonitoringPolicy_name, int32(x)) } -func (ModBmpArguments_MonitoringPolicy) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{8, 0} +func (AddBmpRequest_MonitoringPolicy) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 0} } -type Error struct { - Code Error_ErrorCode `protobuf:"varint,1,opt,name=code,enum=gobgpapi.Error_ErrorCode" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg" json:"msg,omitempty"` +type GetNeighborRequest struct { } -func (m *Error) Reset() { *m = Error{} } -func (m *Error) String() string { return proto.CompactTextString(m) } -func (*Error) ProtoMessage() {} -func (*Error) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (m *GetNeighborRequest) Reset() { *m = GetNeighborRequest{} } +func (m *GetNeighborRequest) String() string { return proto.CompactTextString(m) } +func (*GetNeighborRequest) ProtoMessage() {} +func (*GetNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type GetNeighborResponse struct { + Peers []*Peer `protobuf:"bytes,1,rep,name=peers" json:"peers,omitempty"` +} + +func (m *GetNeighborResponse) Reset() { *m = GetNeighborResponse{} } +func (m *GetNeighborResponse) String() string { return proto.CompactTextString(m) } +func (*GetNeighborResponse) ProtoMessage() {} +func (*GetNeighborResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *GetNeighborResponse) GetPeers() []*Peer { + if m != nil { + return m.Peers + } + return nil +} type Arguments struct { Resource Resource `protobuf:"varint,1,opt,name=resource,enum=gobgpapi.Resource" json:"resource,omitempty"` @@ -396,75 +453,197 @@ type Arguments struct { func (m *Arguments) Reset() { *m = Arguments{} } func (m *Arguments) String() string { return proto.CompactTextString(m) } func (*Arguments) ProtoMessage() {} -func (*Arguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (*Arguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } -type ModPathArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Resource Resource `protobuf:"varint,2,opt,name=resource,enum=gobgpapi.Resource" json:"resource,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` - Path *Path `protobuf:"bytes,4,opt,name=path" json:"path,omitempty"` - // uuid field can be only used when operation is DEL - Uuid []byte `protobuf:"bytes,5,opt,name=uuid,proto3" json:"uuid,omitempty"` - // family field is only used when operation is DEL_ALL - Family uint32 `protobuf:"varint,6,opt,name=family" json:"family,omitempty"` +type AddPathRequest struct { + Resource Resource `protobuf:"varint,1,opt,name=resource,enum=gobgpapi.Resource" json:"resource,omitempty"` + VrfId string `protobuf:"bytes,2,opt,name=vrf_id,json=vrfId" json:"vrf_id,omitempty"` + Path *Path `protobuf:"bytes,3,opt,name=path" json:"path,omitempty"` } -func (m *ModPathArguments) Reset() { *m = ModPathArguments{} } -func (m *ModPathArguments) String() string { return proto.CompactTextString(m) } -func (*ModPathArguments) ProtoMessage() {} -func (*ModPathArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (m *AddPathRequest) Reset() { *m = AddPathRequest{} } +func (m *AddPathRequest) String() string { return proto.CompactTextString(m) } +func (*AddPathRequest) ProtoMessage() {} +func (*AddPathRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } -func (m *ModPathArguments) GetPath() *Path { +func (m *AddPathRequest) GetPath() *Path { if m != nil { return m.Path } return nil } -type ModPathResponse struct { +type AddPathResponse struct { Uuid []byte `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` } -func (m *ModPathResponse) Reset() { *m = ModPathResponse{} } -func (m *ModPathResponse) String() string { return proto.CompactTextString(m) } -func (*ModPathResponse) ProtoMessage() {} -func (*ModPathResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (m *AddPathResponse) Reset() { *m = AddPathResponse{} } +func (m *AddPathResponse) String() string { return proto.CompactTextString(m) } +func (*AddPathResponse) ProtoMessage() {} +func (*AddPathResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } -type ModPathsArguments struct { +type DeletePathRequest struct { Resource Resource `protobuf:"varint,1,opt,name=resource,enum=gobgpapi.Resource" json:"resource,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Paths []*Path `protobuf:"bytes,3,rep,name=paths" json:"paths,omitempty"` + VrfId string `protobuf:"bytes,2,opt,name=vrf_id,json=vrfId" json:"vrf_id,omitempty"` + Family uint32 `protobuf:"varint,3,opt,name=family" json:"family,omitempty"` + Path *Path `protobuf:"bytes,4,opt,name=path" json:"path,omitempty"` + Uuid []byte `protobuf:"bytes,5,opt,name=uuid,proto3" json:"uuid,omitempty"` } -func (m *ModPathsArguments) Reset() { *m = ModPathsArguments{} } -func (m *ModPathsArguments) String() string { return proto.CompactTextString(m) } -func (*ModPathsArguments) ProtoMessage() {} -func (*ModPathsArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (m *DeletePathRequest) Reset() { *m = DeletePathRequest{} } +func (m *DeletePathRequest) String() string { return proto.CompactTextString(m) } +func (*DeletePathRequest) ProtoMessage() {} +func (*DeletePathRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } -func (m *ModPathsArguments) GetPaths() []*Path { +func (m *DeletePathRequest) GetPath() *Path { if m != nil { - return m.Paths + return m.Path + } + return nil +} + +type DeletePathResponse struct { +} + +func (m *DeletePathResponse) Reset() { *m = DeletePathResponse{} } +func (m *DeletePathResponse) String() string { return proto.CompactTextString(m) } +func (*DeletePathResponse) ProtoMessage() {} +func (*DeletePathResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +type AddNeighborRequest struct { + Peer *Peer `protobuf:"bytes,1,opt,name=peer" json:"peer,omitempty"` +} + +func (m *AddNeighborRequest) Reset() { *m = AddNeighborRequest{} } +func (m *AddNeighborRequest) String() string { return proto.CompactTextString(m) } +func (*AddNeighborRequest) ProtoMessage() {} +func (*AddNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *AddNeighborRequest) GetPeer() *Peer { + if m != nil { + return m.Peer } return nil } -type ModNeighborArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Peer *Peer `protobuf:"bytes,2,opt,name=peer" json:"peer,omitempty"` +type AddNeighborResponse struct { } -func (m *ModNeighborArguments) Reset() { *m = ModNeighborArguments{} } -func (m *ModNeighborArguments) String() string { return proto.CompactTextString(m) } -func (*ModNeighborArguments) ProtoMessage() {} -func (*ModNeighborArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (m *AddNeighborResponse) Reset() { *m = AddNeighborResponse{} } +func (m *AddNeighborResponse) String() string { return proto.CompactTextString(m) } +func (*AddNeighborResponse) ProtoMessage() {} +func (*AddNeighborResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +type DeleteNeighborRequest struct { + Peer *Peer `protobuf:"bytes,1,opt,name=peer" json:"peer,omitempty"` +} -func (m *ModNeighborArguments) GetPeer() *Peer { +func (m *DeleteNeighborRequest) Reset() { *m = DeleteNeighborRequest{} } +func (m *DeleteNeighborRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteNeighborRequest) ProtoMessage() {} +func (*DeleteNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DeleteNeighborRequest) GetPeer() *Peer { if m != nil { return m.Peer } return nil } +type DeleteNeighborResponse struct { +} + +func (m *DeleteNeighborResponse) Reset() { *m = DeleteNeighborResponse{} } +func (m *DeleteNeighborResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteNeighborResponse) ProtoMessage() {} +func (*DeleteNeighborResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +type ResetNeighborRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` +} + +func (m *ResetNeighborRequest) Reset() { *m = ResetNeighborRequest{} } +func (m *ResetNeighborRequest) String() string { return proto.CompactTextString(m) } +func (*ResetNeighborRequest) ProtoMessage() {} +func (*ResetNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +type ResetNeighborResponse struct { +} + +func (m *ResetNeighborResponse) Reset() { *m = ResetNeighborResponse{} } +func (m *ResetNeighborResponse) String() string { return proto.CompactTextString(m) } +func (*ResetNeighborResponse) ProtoMessage() {} +func (*ResetNeighborResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +type SoftResetNeighborRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` + Direction SoftResetNeighborRequest_SoftResetDirection `protobuf:"varint,2,opt,name=direction,enum=gobgpapi.SoftResetNeighborRequest_SoftResetDirection" json:"direction,omitempty"` +} + +func (m *SoftResetNeighborRequest) Reset() { *m = SoftResetNeighborRequest{} } +func (m *SoftResetNeighborRequest) String() string { return proto.CompactTextString(m) } +func (*SoftResetNeighborRequest) ProtoMessage() {} +func (*SoftResetNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +type SoftResetNeighborResponse struct { +} + +func (m *SoftResetNeighborResponse) Reset() { *m = SoftResetNeighborResponse{} } +func (m *SoftResetNeighborResponse) String() string { return proto.CompactTextString(m) } +func (*SoftResetNeighborResponse) ProtoMessage() {} +func (*SoftResetNeighborResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +type ShutdownNeighborRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` +} + +func (m *ShutdownNeighborRequest) Reset() { *m = ShutdownNeighborRequest{} } +func (m *ShutdownNeighborRequest) String() string { return proto.CompactTextString(m) } +func (*ShutdownNeighborRequest) ProtoMessage() {} +func (*ShutdownNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +type ShutdownNeighborResponse struct { +} + +func (m *ShutdownNeighborResponse) Reset() { *m = ShutdownNeighborResponse{} } +func (m *ShutdownNeighborResponse) String() string { return proto.CompactTextString(m) } +func (*ShutdownNeighborResponse) ProtoMessage() {} +func (*ShutdownNeighborResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +type EnableNeighborRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` +} + +func (m *EnableNeighborRequest) Reset() { *m = EnableNeighborRequest{} } +func (m *EnableNeighborRequest) String() string { return proto.CompactTextString(m) } +func (*EnableNeighborRequest) ProtoMessage() {} +func (*EnableNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +type EnableNeighborResponse struct { +} + +func (m *EnableNeighborResponse) Reset() { *m = EnableNeighborResponse{} } +func (m *EnableNeighborResponse) String() string { return proto.CompactTextString(m) } +func (*EnableNeighborResponse) ProtoMessage() {} +func (*EnableNeighborResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +type DisableNeighborRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` +} + +func (m *DisableNeighborRequest) Reset() { *m = DisableNeighborRequest{} } +func (m *DisableNeighborRequest) String() string { return proto.CompactTextString(m) } +func (*DisableNeighborRequest) ProtoMessage() {} +func (*DisableNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +type DisableNeighborResponse struct { +} + +func (m *DisableNeighborResponse) Reset() { *m = DisableNeighborResponse{} } +func (m *DisableNeighborResponse) String() string { return proto.CompactTextString(m) } +func (*DisableNeighborResponse) ProtoMessage() {} +func (*DisableNeighborResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + type MrtArguments struct { Resource Resource `protobuf:"varint,1,opt,name=resource,enum=gobgpapi.Resource" json:"resource,omitempty"` Family uint32 `protobuf:"varint,2,opt,name=family" json:"family,omitempty"` @@ -475,156 +654,842 @@ type MrtArguments struct { func (m *MrtArguments) Reset() { *m = MrtArguments{} } func (m *MrtArguments) String() string { return proto.CompactTextString(m) } func (*MrtArguments) ProtoMessage() {} -func (*MrtArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*MrtArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +type EnableMrtRequest struct { + DumpType int32 `protobuf:"varint,1,opt,name=dump_type,json=dumpType" json:"dump_type,omitempty"` + Filename string `protobuf:"bytes,2,opt,name=filename" json:"filename,omitempty"` + Interval uint64 `protobuf:"varint,3,opt,name=interval" json:"interval,omitempty"` +} + +func (m *EnableMrtRequest) Reset() { *m = EnableMrtRequest{} } +func (m *EnableMrtRequest) String() string { return proto.CompactTextString(m) } +func (*EnableMrtRequest) ProtoMessage() {} +func (*EnableMrtRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +type EnableMrtResponse struct { +} + +func (m *EnableMrtResponse) Reset() { *m = EnableMrtResponse{} } +func (m *EnableMrtResponse) String() string { return proto.CompactTextString(m) } +func (*EnableMrtResponse) ProtoMessage() {} +func (*EnableMrtResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +type DisableMrtRequest struct { +} + +func (m *DisableMrtRequest) Reset() { *m = DisableMrtRequest{} } +func (m *DisableMrtRequest) String() string { return proto.CompactTextString(m) } +func (*DisableMrtRequest) ProtoMessage() {} +func (*DisableMrtRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +type DisableMrtResponse struct { +} + +func (m *DisableMrtResponse) Reset() { *m = DisableMrtResponse{} } +func (m *DisableMrtResponse) String() string { return proto.CompactTextString(m) } +func (*DisableMrtResponse) ProtoMessage() {} +func (*DisableMrtResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +type InjectMrtRequest struct { + Resource Resource `protobuf:"varint,1,opt,name=resource,enum=gobgpapi.Resource" json:"resource,omitempty"` + VrfId string `protobuf:"bytes,2,opt,name=vrf_id,json=vrfId" json:"vrf_id,omitempty"` + Paths []*Path `protobuf:"bytes,3,rep,name=paths" json:"paths,omitempty"` +} + +func (m *InjectMrtRequest) Reset() { *m = InjectMrtRequest{} } +func (m *InjectMrtRequest) String() string { return proto.CompactTextString(m) } +func (*InjectMrtRequest) ProtoMessage() {} +func (*InjectMrtRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *InjectMrtRequest) GetPaths() []*Path { + if m != nil { + return m.Paths + } + return nil +} + +type InjectMrtResponse struct { +} + +func (m *InjectMrtResponse) Reset() { *m = InjectMrtResponse{} } +func (m *InjectMrtResponse) String() string { return proto.CompactTextString(m) } +func (*InjectMrtResponse) ProtoMessage() {} +func (*InjectMrtResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +type AddBmpRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` + Port uint32 `protobuf:"varint,2,opt,name=port" json:"port,omitempty"` + Type AddBmpRequest_MonitoringPolicy `protobuf:"varint,3,opt,name=type,enum=gobgpapi.AddBmpRequest_MonitoringPolicy" json:"type,omitempty"` +} + +func (m *AddBmpRequest) Reset() { *m = AddBmpRequest{} } +func (m *AddBmpRequest) String() string { return proto.CompactTextString(m) } +func (*AddBmpRequest) ProtoMessage() {} +func (*AddBmpRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } + +type AddBmpResponse struct { +} + +func (m *AddBmpResponse) Reset() { *m = AddBmpResponse{} } +func (m *AddBmpResponse) String() string { return proto.CompactTextString(m) } +func (*AddBmpResponse) ProtoMessage() {} +func (*AddBmpResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } + +type DeleteBmpRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` + Port uint32 `protobuf:"varint,2,opt,name=port" json:"port,omitempty"` +} + +func (m *DeleteBmpRequest) Reset() { *m = DeleteBmpRequest{} } +func (m *DeleteBmpRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteBmpRequest) ProtoMessage() {} +func (*DeleteBmpRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } + +type DeleteBmpResponse struct { +} + +func (m *DeleteBmpResponse) Reset() { *m = DeleteBmpResponse{} } +func (m *DeleteBmpResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteBmpResponse) ProtoMessage() {} +func (*DeleteBmpResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } + +type RPKIConf struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` + RemotePort string `protobuf:"bytes,2,opt,name=remote_port,json=remotePort" json:"remote_port,omitempty"` +} + +func (m *RPKIConf) Reset() { *m = RPKIConf{} } +func (m *RPKIConf) String() string { return proto.CompactTextString(m) } +func (*RPKIConf) ProtoMessage() {} +func (*RPKIConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } + +type RPKIState struct { + Uptime int64 `protobuf:"varint,1,opt,name=uptime" json:"uptime,omitempty"` + Downtime int64 `protobuf:"varint,2,opt,name=downtime" json:"downtime,omitempty"` + Up bool `protobuf:"varint,3,opt,name=up" json:"up,omitempty"` + RecordIpv4 uint32 `protobuf:"varint,4,opt,name=record_ipv4,json=recordIpv4" json:"record_ipv4,omitempty"` + RecordIpv6 uint32 `protobuf:"varint,5,opt,name=record_ipv6,json=recordIpv6" json:"record_ipv6,omitempty"` + PrefixIpv4 uint32 `protobuf:"varint,6,opt,name=prefix_ipv4,json=prefixIpv4" json:"prefix_ipv4,omitempty"` + PrefixIpv6 uint32 `protobuf:"varint,7,opt,name=prefix_ipv6,json=prefixIpv6" json:"prefix_ipv6,omitempty"` + Serial uint32 `protobuf:"varint,8,opt,name=serial" json:"serial,omitempty"` + ReceivedIpv4 int64 `protobuf:"varint,9,opt,name=received_ipv4,json=receivedIpv4" json:"received_ipv4,omitempty"` + ReceivedIpv6 int64 `protobuf:"varint,10,opt,name=received_ipv6,json=receivedIpv6" json:"received_ipv6,omitempty"` + SerialNotify int64 `protobuf:"varint,11,opt,name=serial_notify,json=serialNotify" json:"serial_notify,omitempty"` + CacheReset int64 `protobuf:"varint,12,opt,name=cache_reset,json=cacheReset" json:"cache_reset,omitempty"` + CacheResponse int64 `protobuf:"varint,13,opt,name=cache_response,json=cacheResponse" json:"cache_response,omitempty"` + EndOfData int64 `protobuf:"varint,14,opt,name=end_of_data,json=endOfData" json:"end_of_data,omitempty"` + Error int64 `protobuf:"varint,15,opt,name=error" json:"error,omitempty"` + SerialQuery int64 `protobuf:"varint,16,opt,name=serial_query,json=serialQuery" json:"serial_query,omitempty"` + ResetQuery int64 `protobuf:"varint,17,opt,name=reset_query,json=resetQuery" json:"reset_query,omitempty"` +} + +func (m *RPKIState) Reset() { *m = RPKIState{} } +func (m *RPKIState) String() string { return proto.CompactTextString(m) } +func (*RPKIState) ProtoMessage() {} +func (*RPKIState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } + +type Rpki struct { + Conf *RPKIConf `protobuf:"bytes,1,opt,name=conf" json:"conf,omitempty"` + State *RPKIState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` +} + +func (m *Rpki) Reset() { *m = Rpki{} } +func (m *Rpki) String() string { return proto.CompactTextString(m) } +func (*Rpki) ProtoMessage() {} +func (*Rpki) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } + +func (m *Rpki) GetConf() *RPKIConf { + if m != nil { + return m.Conf + } + return nil +} + +func (m *Rpki) GetState() *RPKIState { + if m != nil { + return m.State + } + return nil +} + +type GetRpkiRequest struct { + Family uint32 `protobuf:"varint,1,opt,name=family" json:"family,omitempty"` +} + +func (m *GetRpkiRequest) Reset() { *m = GetRpkiRequest{} } +func (m *GetRpkiRequest) String() string { return proto.CompactTextString(m) } +func (*GetRpkiRequest) ProtoMessage() {} +func (*GetRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } + +type GetRpkiResponse struct { + Servers []*Rpki `protobuf:"bytes,1,rep,name=servers" json:"servers,omitempty"` +} + +func (m *GetRpkiResponse) Reset() { *m = GetRpkiResponse{} } +func (m *GetRpkiResponse) String() string { return proto.CompactTextString(m) } +func (*GetRpkiResponse) ProtoMessage() {} +func (*GetRpkiResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } + +func (m *GetRpkiResponse) GetServers() []*Rpki { + if m != nil { + return m.Servers + } + return nil +} + +type AddRpkiRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` + Port uint32 `protobuf:"varint,2,opt,name=port" json:"port,omitempty"` + Lifetime int64 `protobuf:"varint,3,opt,name=lifetime" json:"lifetime,omitempty"` +} + +func (m *AddRpkiRequest) Reset() { *m = AddRpkiRequest{} } +func (m *AddRpkiRequest) String() string { return proto.CompactTextString(m) } +func (*AddRpkiRequest) ProtoMessage() {} +func (*AddRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } + +type AddRpkiResponse struct { +} + +func (m *AddRpkiResponse) Reset() { *m = AddRpkiResponse{} } +func (m *AddRpkiResponse) String() string { return proto.CompactTextString(m) } +func (*AddRpkiResponse) ProtoMessage() {} +func (*AddRpkiResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } + +type DeleteRpkiRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` + Port uint32 `protobuf:"varint,2,opt,name=port" json:"port,omitempty"` +} + +func (m *DeleteRpkiRequest) Reset() { *m = DeleteRpkiRequest{} } +func (m *DeleteRpkiRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteRpkiRequest) ProtoMessage() {} +func (*DeleteRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } + +type DeleteRpkiResponse struct { +} + +func (m *DeleteRpkiResponse) Reset() { *m = DeleteRpkiResponse{} } +func (m *DeleteRpkiResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteRpkiResponse) ProtoMessage() {} +func (*DeleteRpkiResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } + +type EnableRpkiRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` +} + +func (m *EnableRpkiRequest) Reset() { *m = EnableRpkiRequest{} } +func (m *EnableRpkiRequest) String() string { return proto.CompactTextString(m) } +func (*EnableRpkiRequest) ProtoMessage() {} +func (*EnableRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } + +type EnableRpkiResponse struct { +} + +func (m *EnableRpkiResponse) Reset() { *m = EnableRpkiResponse{} } +func (m *EnableRpkiResponse) String() string { return proto.CompactTextString(m) } +func (*EnableRpkiResponse) ProtoMessage() {} +func (*EnableRpkiResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } + +type DisableRpkiRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` +} + +func (m *DisableRpkiRequest) Reset() { *m = DisableRpkiRequest{} } +func (m *DisableRpkiRequest) String() string { return proto.CompactTextString(m) } +func (*DisableRpkiRequest) ProtoMessage() {} +func (*DisableRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } + +type DisableRpkiResponse struct { +} + +func (m *DisableRpkiResponse) Reset() { *m = DisableRpkiResponse{} } +func (m *DisableRpkiResponse) String() string { return proto.CompactTextString(m) } +func (*DisableRpkiResponse) ProtoMessage() {} +func (*DisableRpkiResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } -type ModMrtArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - DumpType int32 `protobuf:"varint,2,opt,name=dump_type,json=dumpType" json:"dump_type,omitempty"` - Filename string `protobuf:"bytes,3,opt,name=filename" json:"filename,omitempty"` - Interval uint64 `protobuf:"varint,4,opt,name=interval" json:"interval,omitempty"` +type ResetRpkiRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` +} + +func (m *ResetRpkiRequest) Reset() { *m = ResetRpkiRequest{} } +func (m *ResetRpkiRequest) String() string { return proto.CompactTextString(m) } +func (*ResetRpkiRequest) ProtoMessage() {} +func (*ResetRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } + +type ResetRpkiResponse struct { +} + +func (m *ResetRpkiResponse) Reset() { *m = ResetRpkiResponse{} } +func (m *ResetRpkiResponse) String() string { return proto.CompactTextString(m) } +func (*ResetRpkiResponse) ProtoMessage() {} +func (*ResetRpkiResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } + +type SoftResetRpkiRequest struct { + Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` +} + +func (m *SoftResetRpkiRequest) Reset() { *m = SoftResetRpkiRequest{} } +func (m *SoftResetRpkiRequest) String() string { return proto.CompactTextString(m) } +func (*SoftResetRpkiRequest) ProtoMessage() {} +func (*SoftResetRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } + +type SoftResetRpkiResponse struct { +} + +func (m *SoftResetRpkiResponse) Reset() { *m = SoftResetRpkiResponse{} } +func (m *SoftResetRpkiResponse) String() string { return proto.CompactTextString(m) } +func (*SoftResetRpkiResponse) ProtoMessage() {} +func (*SoftResetRpkiResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } + +type GetVrfRequest struct { +} + +func (m *GetVrfRequest) Reset() { *m = GetVrfRequest{} } +func (m *GetVrfRequest) String() string { return proto.CompactTextString(m) } +func (*GetVrfRequest) ProtoMessage() {} +func (*GetVrfRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } + +type GetVrfResponse struct { + Vrfs []*Vrf `protobuf:"bytes,1,rep,name=vrfs" json:"vrfs,omitempty"` } -func (m *ModMrtArguments) Reset() { *m = ModMrtArguments{} } -func (m *ModMrtArguments) String() string { return proto.CompactTextString(m) } -func (*ModMrtArguments) ProtoMessage() {} -func (*ModMrtArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (m *GetVrfResponse) Reset() { *m = GetVrfResponse{} } +func (m *GetVrfResponse) String() string { return proto.CompactTextString(m) } +func (*GetVrfResponse) ProtoMessage() {} +func (*GetVrfResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } -type ModBmpArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Address string `protobuf:"bytes,2,opt,name=address" json:"address,omitempty"` - Port uint32 `protobuf:"varint,3,opt,name=port" json:"port,omitempty"` - Type ModBmpArguments_MonitoringPolicy `protobuf:"varint,4,opt,name=type,enum=gobgpapi.ModBmpArguments_MonitoringPolicy" json:"type,omitempty"` +func (m *GetVrfResponse) GetVrfs() []*Vrf { + if m != nil { + return m.Vrfs + } + return nil +} + +type AddVrfRequest struct { + Vrf *Vrf `protobuf:"bytes,1,opt,name=vrf" json:"vrf,omitempty"` } -func (m *ModBmpArguments) Reset() { *m = ModBmpArguments{} } -func (m *ModBmpArguments) String() string { return proto.CompactTextString(m) } -func (*ModBmpArguments) ProtoMessage() {} -func (*ModBmpArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (m *AddVrfRequest) Reset() { *m = AddVrfRequest{} } +func (m *AddVrfRequest) String() string { return proto.CompactTextString(m) } +func (*AddVrfRequest) ProtoMessage() {} +func (*AddVrfRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } -type ModRpkiArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Asn uint32 `protobuf:"varint,2,opt,name=asn" json:"asn,omitempty"` - Address string `protobuf:"bytes,3,opt,name=address" json:"address,omitempty"` - Port uint32 `protobuf:"varint,4,opt,name=port" json:"port,omitempty"` - Lifetime int64 `protobuf:"varint,5,opt,name=lifetime" json:"lifetime,omitempty"` - Prefix string `protobuf:"bytes,6,opt,name=prefix" json:"prefix,omitempty"` +func (m *AddVrfRequest) GetVrf() *Vrf { + if m != nil { + return m.Vrf + } + return nil } -func (m *ModRpkiArguments) Reset() { *m = ModRpkiArguments{} } -func (m *ModRpkiArguments) String() string { return proto.CompactTextString(m) } -func (*ModRpkiArguments) ProtoMessage() {} -func (*ModRpkiArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +type AddVrfResponse struct { +} + +func (m *AddVrfResponse) Reset() { *m = AddVrfResponse{} } +func (m *AddVrfResponse) String() string { return proto.CompactTextString(m) } +func (*AddVrfResponse) ProtoMessage() {} +func (*AddVrfResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } -type ModVrfArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Vrf *Vrf `protobuf:"bytes,2,opt,name=vrf" json:"vrf,omitempty"` +type DeleteVrfRequest struct { + Vrf *Vrf `protobuf:"bytes,1,opt,name=vrf" json:"vrf,omitempty"` } -func (m *ModVrfArguments) Reset() { *m = ModVrfArguments{} } -func (m *ModVrfArguments) String() string { return proto.CompactTextString(m) } -func (*ModVrfArguments) ProtoMessage() {} -func (*ModVrfArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (m *DeleteVrfRequest) Reset() { *m = DeleteVrfRequest{} } +func (m *DeleteVrfRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVrfRequest) ProtoMessage() {} +func (*DeleteVrfRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } -func (m *ModVrfArguments) GetVrf() *Vrf { +func (m *DeleteVrfRequest) GetVrf() *Vrf { if m != nil { return m.Vrf } return nil } -type ModDefinedSetArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Set *DefinedSet `protobuf:"bytes,2,opt,name=set" json:"set,omitempty"` +type DeleteVrfResponse struct { +} + +func (m *DeleteVrfResponse) Reset() { *m = DeleteVrfResponse{} } +func (m *DeleteVrfResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteVrfResponse) ProtoMessage() {} +func (*DeleteVrfResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } + +type GetDefinedSetRequest struct { + Type DefinedType `protobuf:"varint,1,opt,name=type,enum=gobgpapi.DefinedType" json:"type,omitempty"` +} + +func (m *GetDefinedSetRequest) Reset() { *m = GetDefinedSetRequest{} } +func (m *GetDefinedSetRequest) String() string { return proto.CompactTextString(m) } +func (*GetDefinedSetRequest) ProtoMessage() {} +func (*GetDefinedSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } + +type GetDefinedSetResponse struct { + Sets []*DefinedSet `protobuf:"bytes,1,rep,name=sets" json:"sets,omitempty"` +} + +func (m *GetDefinedSetResponse) Reset() { *m = GetDefinedSetResponse{} } +func (m *GetDefinedSetResponse) String() string { return proto.CompactTextString(m) } +func (*GetDefinedSetResponse) ProtoMessage() {} +func (*GetDefinedSetResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } + +func (m *GetDefinedSetResponse) GetSets() []*DefinedSet { + if m != nil { + return m.Sets + } + return nil +} + +type AddDefinedSetRequest struct { + Set *DefinedSet `protobuf:"bytes,1,opt,name=set" json:"set,omitempty"` +} + +func (m *AddDefinedSetRequest) Reset() { *m = AddDefinedSetRequest{} } +func (m *AddDefinedSetRequest) String() string { return proto.CompactTextString(m) } +func (*AddDefinedSetRequest) ProtoMessage() {} +func (*AddDefinedSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} } + +func (m *AddDefinedSetRequest) GetSet() *DefinedSet { + if m != nil { + return m.Set + } + return nil +} + +type AddDefinedSetResponse struct { } -func (m *ModDefinedSetArguments) Reset() { *m = ModDefinedSetArguments{} } -func (m *ModDefinedSetArguments) String() string { return proto.CompactTextString(m) } -func (*ModDefinedSetArguments) ProtoMessage() {} -func (*ModDefinedSetArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (m *AddDefinedSetResponse) Reset() { *m = AddDefinedSetResponse{} } +func (m *AddDefinedSetResponse) String() string { return proto.CompactTextString(m) } +func (*AddDefinedSetResponse) ProtoMessage() {} +func (*AddDefinedSetResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} } -func (m *ModDefinedSetArguments) GetSet() *DefinedSet { +type DeleteDefinedSetRequest struct { + Set *DefinedSet `protobuf:"bytes,1,opt,name=set" json:"set,omitempty"` + All bool `protobuf:"varint,2,opt,name=all" json:"all,omitempty"` +} + +func (m *DeleteDefinedSetRequest) Reset() { *m = DeleteDefinedSetRequest{} } +func (m *DeleteDefinedSetRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDefinedSetRequest) ProtoMessage() {} +func (*DeleteDefinedSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} } + +func (m *DeleteDefinedSetRequest) GetSet() *DefinedSet { if m != nil { return m.Set } return nil } -type ModStatementArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Statement *Statement `protobuf:"bytes,2,opt,name=statement" json:"statement,omitempty"` +type DeleteDefinedSetResponse struct { } -func (m *ModStatementArguments) Reset() { *m = ModStatementArguments{} } -func (m *ModStatementArguments) String() string { return proto.CompactTextString(m) } -func (*ModStatementArguments) ProtoMessage() {} -func (*ModStatementArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (m *DeleteDefinedSetResponse) Reset() { *m = DeleteDefinedSetResponse{} } +func (m *DeleteDefinedSetResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteDefinedSetResponse) ProtoMessage() {} +func (*DeleteDefinedSetResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} } + +type ReplaceDefinedSetRequest struct { + Set *DefinedSet `protobuf:"bytes,1,opt,name=set" json:"set,omitempty"` +} -func (m *ModStatementArguments) GetStatement() *Statement { +func (m *ReplaceDefinedSetRequest) Reset() { *m = ReplaceDefinedSetRequest{} } +func (m *ReplaceDefinedSetRequest) String() string { return proto.CompactTextString(m) } +func (*ReplaceDefinedSetRequest) ProtoMessage() {} +func (*ReplaceDefinedSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} } + +func (m *ReplaceDefinedSetRequest) GetSet() *DefinedSet { + if m != nil { + return m.Set + } + return nil +} + +type ReplaceDefinedSetResponse struct { +} + +func (m *ReplaceDefinedSetResponse) Reset() { *m = ReplaceDefinedSetResponse{} } +func (m *ReplaceDefinedSetResponse) String() string { return proto.CompactTextString(m) } +func (*ReplaceDefinedSetResponse) ProtoMessage() {} +func (*ReplaceDefinedSetResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} } + +type GetStatementRequest struct { +} + +func (m *GetStatementRequest) Reset() { *m = GetStatementRequest{} } +func (m *GetStatementRequest) String() string { return proto.CompactTextString(m) } +func (*GetStatementRequest) ProtoMessage() {} +func (*GetStatementRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} } + +type GetStatementResponse struct { + Statements []*Statement `protobuf:"bytes,1,rep,name=statements" json:"statements,omitempty"` +} + +func (m *GetStatementResponse) Reset() { *m = GetStatementResponse{} } +func (m *GetStatementResponse) String() string { return proto.CompactTextString(m) } +func (*GetStatementResponse) ProtoMessage() {} +func (*GetStatementResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} } + +func (m *GetStatementResponse) GetStatements() []*Statement { + if m != nil { + return m.Statements + } + return nil +} + +type AddStatementRequest struct { + Statement *Statement `protobuf:"bytes,1,opt,name=statement" json:"statement,omitempty"` +} + +func (m *AddStatementRequest) Reset() { *m = AddStatementRequest{} } +func (m *AddStatementRequest) String() string { return proto.CompactTextString(m) } +func (*AddStatementRequest) ProtoMessage() {} +func (*AddStatementRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} } + +func (m *AddStatementRequest) GetStatement() *Statement { + if m != nil { + return m.Statement + } + return nil +} + +type AddStatementResponse struct { +} + +func (m *AddStatementResponse) Reset() { *m = AddStatementResponse{} } +func (m *AddStatementResponse) String() string { return proto.CompactTextString(m) } +func (*AddStatementResponse) ProtoMessage() {} +func (*AddStatementResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} } + +type DeleteStatementRequest struct { + Statement *Statement `protobuf:"bytes,1,opt,name=statement" json:"statement,omitempty"` + All bool `protobuf:"varint,2,opt,name=all" json:"all,omitempty"` +} + +func (m *DeleteStatementRequest) Reset() { *m = DeleteStatementRequest{} } +func (m *DeleteStatementRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteStatementRequest) ProtoMessage() {} +func (*DeleteStatementRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} } + +func (m *DeleteStatementRequest) GetStatement() *Statement { + if m != nil { + return m.Statement + } + return nil +} + +type DeleteStatementResponse struct { +} + +func (m *DeleteStatementResponse) Reset() { *m = DeleteStatementResponse{} } +func (m *DeleteStatementResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteStatementResponse) ProtoMessage() {} +func (*DeleteStatementResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} } + +type ReplaceStatementRequest struct { + Statement *Statement `protobuf:"bytes,1,opt,name=statement" json:"statement,omitempty"` +} + +func (m *ReplaceStatementRequest) Reset() { *m = ReplaceStatementRequest{} } +func (m *ReplaceStatementRequest) String() string { return proto.CompactTextString(m) } +func (*ReplaceStatementRequest) ProtoMessage() {} +func (*ReplaceStatementRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} } + +func (m *ReplaceStatementRequest) GetStatement() *Statement { if m != nil { return m.Statement } return nil } -type ModPolicyArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Policy *Policy `protobuf:"bytes,2,opt,name=policy" json:"policy,omitempty"` +type ReplaceStatementResponse struct { +} + +func (m *ReplaceStatementResponse) Reset() { *m = ReplaceStatementResponse{} } +func (m *ReplaceStatementResponse) String() string { return proto.CompactTextString(m) } +func (*ReplaceStatementResponse) ProtoMessage() {} +func (*ReplaceStatementResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} } + +type GetPolicyRequest struct { +} + +func (m *GetPolicyRequest) Reset() { *m = GetPolicyRequest{} } +func (m *GetPolicyRequest) String() string { return proto.CompactTextString(m) } +func (*GetPolicyRequest) ProtoMessage() {} +func (*GetPolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} } + +type GetPolicyResponse struct { + Policies []*Policy `protobuf:"bytes,1,rep,name=policies" json:"policies,omitempty"` +} + +func (m *GetPolicyResponse) Reset() { *m = GetPolicyResponse{} } +func (m *GetPolicyResponse) String() string { return proto.CompactTextString(m) } +func (*GetPolicyResponse) ProtoMessage() {} +func (*GetPolicyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} } + +func (m *GetPolicyResponse) GetPolicies() []*Policy { + if m != nil { + return m.Policies + } + return nil +} + +type AddPolicyRequest struct { + Policy *Policy `protobuf:"bytes,1,opt,name=policy" json:"policy,omitempty"` + // if this flag is set, gobgpd won't define new statements + // but refer existing statements using statement's names in this arguments. + ReferExistingStatements bool `protobuf:"varint,2,opt,name=refer_existing_statements,json=referExistingStatements" json:"refer_existing_statements,omitempty"` +} + +func (m *AddPolicyRequest) Reset() { *m = AddPolicyRequest{} } +func (m *AddPolicyRequest) String() string { return proto.CompactTextString(m) } +func (*AddPolicyRequest) ProtoMessage() {} +func (*AddPolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} } + +func (m *AddPolicyRequest) GetPolicy() *Policy { + if m != nil { + return m.Policy + } + return nil +} + +type AddPolicyResponse struct { +} + +func (m *AddPolicyResponse) Reset() { *m = AddPolicyResponse{} } +func (m *AddPolicyResponse) String() string { return proto.CompactTextString(m) } +func (*AddPolicyResponse) ProtoMessage() {} +func (*AddPolicyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} } + +type DeletePolicyRequest struct { + Policy *Policy `protobuf:"bytes,1,opt,name=policy" json:"policy,omitempty"` + // if this flag is set, gobgpd won't delete any statements + // even if some statements get not used by any policy by this operation. + PreserveStatements bool `protobuf:"varint,2,opt,name=preserve_statements,json=preserveStatements" json:"preserve_statements,omitempty"` + All bool `protobuf:"varint,3,opt,name=all" json:"all,omitempty"` +} + +func (m *DeletePolicyRequest) Reset() { *m = DeletePolicyRequest{} } +func (m *DeletePolicyRequest) String() string { return proto.CompactTextString(m) } +func (*DeletePolicyRequest) ProtoMessage() {} +func (*DeletePolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} } + +func (m *DeletePolicyRequest) GetPolicy() *Policy { + if m != nil { + return m.Policy + } + return nil +} + +type DeletePolicyResponse struct { +} + +func (m *DeletePolicyResponse) Reset() { *m = DeletePolicyResponse{} } +func (m *DeletePolicyResponse) String() string { return proto.CompactTextString(m) } +func (*DeletePolicyResponse) ProtoMessage() {} +func (*DeletePolicyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} } + +type ReplacePolicyRequest struct { + Policy *Policy `protobuf:"bytes,1,opt,name=policy" json:"policy,omitempty"` // if this flag is set, gobgpd won't define new statements // but refer existing statements using statement's names in this arguments. - // this flag only works with Operation_ADD - ReferExistingStatements bool `protobuf:"varint,3,opt,name=refer_existing_statements,json=referExistingStatements" json:"refer_existing_statements,omitempty"` + ReferExistingStatements bool `protobuf:"varint,2,opt,name=refer_existing_statements,json=referExistingStatements" json:"refer_existing_statements,omitempty"` // if this flag is set, gobgpd won't delete any statements // even if some statements get not used by any policy by this operation. - // this flag means nothing if it is used with Operation_ADD - PreserveStatements bool `protobuf:"varint,4,opt,name=preserve_statements,json=preserveStatements" json:"preserve_statements,omitempty"` + PreserveStatements bool `protobuf:"varint,3,opt,name=preserve_statements,json=preserveStatements" json:"preserve_statements,omitempty"` } -func (m *ModPolicyArguments) Reset() { *m = ModPolicyArguments{} } -func (m *ModPolicyArguments) String() string { return proto.CompactTextString(m) } -func (*ModPolicyArguments) ProtoMessage() {} -func (*ModPolicyArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (m *ReplacePolicyRequest) Reset() { *m = ReplacePolicyRequest{} } +func (m *ReplacePolicyRequest) String() string { return proto.CompactTextString(m) } +func (*ReplacePolicyRequest) ProtoMessage() {} +func (*ReplacePolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} } -func (m *ModPolicyArguments) GetPolicy() *Policy { +func (m *ReplacePolicyRequest) GetPolicy() *Policy { if m != nil { return m.Policy } return nil } -type ModPolicyAssignmentArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Assignment *PolicyAssignment `protobuf:"bytes,2,opt,name=assignment" json:"assignment,omitempty"` +type ReplacePolicyResponse struct { +} + +func (m *ReplacePolicyResponse) Reset() { *m = ReplacePolicyResponse{} } +func (m *ReplacePolicyResponse) String() string { return proto.CompactTextString(m) } +func (*ReplacePolicyResponse) ProtoMessage() {} +func (*ReplacePolicyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} } + +type GetPolicyAssignmentRequest struct { + Assignment *PolicyAssignment `protobuf:"bytes,1,opt,name=assignment" json:"assignment,omitempty"` +} + +func (m *GetPolicyAssignmentRequest) Reset() { *m = GetPolicyAssignmentRequest{} } +func (m *GetPolicyAssignmentRequest) String() string { return proto.CompactTextString(m) } +func (*GetPolicyAssignmentRequest) ProtoMessage() {} +func (*GetPolicyAssignmentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} } + +func (m *GetPolicyAssignmentRequest) GetAssignment() *PolicyAssignment { + if m != nil { + return m.Assignment + } + return nil +} + +type GetPolicyAssignmentResponse struct { + Assignment *PolicyAssignment `protobuf:"bytes,1,opt,name=assignment" json:"assignment,omitempty"` +} + +func (m *GetPolicyAssignmentResponse) Reset() { *m = GetPolicyAssignmentResponse{} } +func (m *GetPolicyAssignmentResponse) String() string { return proto.CompactTextString(m) } +func (*GetPolicyAssignmentResponse) ProtoMessage() {} +func (*GetPolicyAssignmentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} } + +func (m *GetPolicyAssignmentResponse) GetAssignment() *PolicyAssignment { + if m != nil { + return m.Assignment + } + return nil +} + +type AddPolicyAssignmentRequest struct { + Assignment *PolicyAssignment `protobuf:"bytes,1,opt,name=assignment" json:"assignment,omitempty"` +} + +func (m *AddPolicyAssignmentRequest) Reset() { *m = AddPolicyAssignmentRequest{} } +func (m *AddPolicyAssignmentRequest) String() string { return proto.CompactTextString(m) } +func (*AddPolicyAssignmentRequest) ProtoMessage() {} +func (*AddPolicyAssignmentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} } + +func (m *AddPolicyAssignmentRequest) GetAssignment() *PolicyAssignment { + if m != nil { + return m.Assignment + } + return nil +} + +type AddPolicyAssignmentResponse struct { +} + +func (m *AddPolicyAssignmentResponse) Reset() { *m = AddPolicyAssignmentResponse{} } +func (m *AddPolicyAssignmentResponse) String() string { return proto.CompactTextString(m) } +func (*AddPolicyAssignmentResponse) ProtoMessage() {} +func (*AddPolicyAssignmentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} } + +type DeletePolicyAssignmentRequest struct { + Assignment *PolicyAssignment `protobuf:"bytes,1,opt,name=assignment" json:"assignment,omitempty"` + All bool `protobuf:"varint,2,opt,name=all" json:"all,omitempty"` +} + +func (m *DeletePolicyAssignmentRequest) Reset() { *m = DeletePolicyAssignmentRequest{} } +func (m *DeletePolicyAssignmentRequest) String() string { return proto.CompactTextString(m) } +func (*DeletePolicyAssignmentRequest) ProtoMessage() {} +func (*DeletePolicyAssignmentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} } + +func (m *DeletePolicyAssignmentRequest) GetAssignment() *PolicyAssignment { + if m != nil { + return m.Assignment + } + return nil +} + +type DeletePolicyAssignmentResponse struct { } -func (m *ModPolicyAssignmentArguments) Reset() { *m = ModPolicyAssignmentArguments{} } -func (m *ModPolicyAssignmentArguments) String() string { return proto.CompactTextString(m) } -func (*ModPolicyAssignmentArguments) ProtoMessage() {} -func (*ModPolicyAssignmentArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (m *DeletePolicyAssignmentResponse) Reset() { *m = DeletePolicyAssignmentResponse{} } +func (m *DeletePolicyAssignmentResponse) String() string { return proto.CompactTextString(m) } +func (*DeletePolicyAssignmentResponse) ProtoMessage() {} +func (*DeletePolicyAssignmentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} } + +type ReplacePolicyAssignmentRequest struct { + Assignment *PolicyAssignment `protobuf:"bytes,1,opt,name=assignment" json:"assignment,omitempty"` +} -func (m *ModPolicyAssignmentArguments) GetAssignment() *PolicyAssignment { +func (m *ReplacePolicyAssignmentRequest) Reset() { *m = ReplacePolicyAssignmentRequest{} } +func (m *ReplacePolicyAssignmentRequest) String() string { return proto.CompactTextString(m) } +func (*ReplacePolicyAssignmentRequest) ProtoMessage() {} +func (*ReplacePolicyAssignmentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} } + +func (m *ReplacePolicyAssignmentRequest) GetAssignment() *PolicyAssignment { if m != nil { return m.Assignment } return nil } -type ModGlobalConfigArguments struct { - Operation Operation `protobuf:"varint,1,opt,name=operation,enum=gobgpapi.Operation" json:"operation,omitempty"` - Global *Global `protobuf:"bytes,2,opt,name=global" json:"global,omitempty"` +type ReplacePolicyAssignmentResponse struct { +} + +func (m *ReplacePolicyAssignmentResponse) Reset() { *m = ReplacePolicyAssignmentResponse{} } +func (m *ReplacePolicyAssignmentResponse) String() string { return proto.CompactTextString(m) } +func (*ReplacePolicyAssignmentResponse) ProtoMessage() {} +func (*ReplacePolicyAssignmentResponse) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{86} } -func (m *ModGlobalConfigArguments) Reset() { *m = ModGlobalConfigArguments{} } -func (m *ModGlobalConfigArguments) String() string { return proto.CompactTextString(m) } -func (*ModGlobalConfigArguments) ProtoMessage() {} -func (*ModGlobalConfigArguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +type GetServerRequest struct { +} -func (m *ModGlobalConfigArguments) GetGlobal() *Global { +func (m *GetServerRequest) Reset() { *m = GetServerRequest{} } +func (m *GetServerRequest) String() string { return proto.CompactTextString(m) } +func (*GetServerRequest) ProtoMessage() {} +func (*GetServerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} } + +type GetServerResponse struct { + Global *Global `protobuf:"bytes,1,opt,name=global" json:"global,omitempty"` +} + +func (m *GetServerResponse) Reset() { *m = GetServerResponse{} } +func (m *GetServerResponse) String() string { return proto.CompactTextString(m) } +func (*GetServerResponse) ProtoMessage() {} +func (*GetServerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} } + +func (m *GetServerResponse) GetGlobal() *Global { if m != nil { return m.Global } return nil } +type StartServerRequest struct { + Global *Global `protobuf:"bytes,1,opt,name=global" json:"global,omitempty"` +} + +func (m *StartServerRequest) Reset() { *m = StartServerRequest{} } +func (m *StartServerRequest) String() string { return proto.CompactTextString(m) } +func (*StartServerRequest) ProtoMessage() {} +func (*StartServerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} } + +func (m *StartServerRequest) GetGlobal() *Global { + if m != nil { + return m.Global + } + return nil +} + +type StartServerResponse struct { +} + +func (m *StartServerResponse) Reset() { *m = StartServerResponse{} } +func (m *StartServerResponse) String() string { return proto.CompactTextString(m) } +func (*StartServerResponse) ProtoMessage() {} +func (*StartServerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{90} } + +type StopServerRequest struct { +} + +func (m *StopServerRequest) Reset() { *m = StopServerRequest{} } +func (m *StopServerRequest) String() string { return proto.CompactTextString(m) } +func (*StopServerRequest) ProtoMessage() {} +func (*StopServerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{91} } + +type StopServerResponse struct { +} + +func (m *StopServerResponse) Reset() { *m = StopServerResponse{} } +func (m *StopServerResponse) String() string { return proto.CompactTextString(m) } +func (*StopServerResponse) ProtoMessage() {} +func (*StopServerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{92} } + type Path struct { Nlri []byte `protobuf:"bytes,1,opt,name=nlri,proto3" json:"nlri,omitempty"` Pattrs [][]byte `protobuf:"bytes,2,rep,name=pattrs,proto3" json:"pattrs,omitempty"` @@ -645,7 +1510,7 @@ type Path struct { func (m *Path) Reset() { *m = Path{} } func (m *Path) String() string { return proto.CompactTextString(m) } func (*Path) ProtoMessage() {} -func (*Path) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*Path) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{93} } type Destination struct { Prefix string `protobuf:"bytes,1,opt,name=prefix" json:"prefix,omitempty"` @@ -656,7 +1521,7 @@ type Destination struct { func (m *Destination) Reset() { *m = Destination{} } func (m *Destination) String() string { return proto.CompactTextString(m) } func (*Destination) ProtoMessage() {} -func (*Destination) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*Destination) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} } func (m *Destination) GetPaths() []*Path { if m != nil { @@ -676,7 +1541,7 @@ type Table struct { func (m *Table) Reset() { *m = Table{} } func (m *Table) String() string { return proto.CompactTextString(m) } func (*Table) ProtoMessage() {} -func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} } func (m *Table) GetDestinations() []*Destination { if m != nil { @@ -685,22 +1550,73 @@ func (m *Table) GetDestinations() []*Destination { return nil } +type GetRibRequest struct { + Table *Table `protobuf:"bytes,1,opt,name=table" json:"table,omitempty"` +} + +func (m *GetRibRequest) Reset() { *m = GetRibRequest{} } +func (m *GetRibRequest) String() string { return proto.CompactTextString(m) } +func (*GetRibRequest) ProtoMessage() {} +func (*GetRibRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} } + +func (m *GetRibRequest) GetTable() *Table { + if m != nil { + return m.Table + } + return nil +} + +type GetRibResponse struct { + Table *Table `protobuf:"bytes,1,opt,name=table" json:"table,omitempty"` +} + +func (m *GetRibResponse) Reset() { *m = GetRibResponse{} } +func (m *GetRibResponse) String() string { return proto.CompactTextString(m) } +func (*GetRibResponse) ProtoMessage() {} +func (*GetRibResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{97} } + +func (m *GetRibResponse) GetTable() *Table { + if m != nil { + return m.Table + } + return nil +} + +type ValidateRibRequest struct { + Type Resource `protobuf:"varint,1,opt,name=type,enum=gobgpapi.Resource" json:"type,omitempty"` + Family uint32 `protobuf:"varint,2,opt,name=family" json:"family,omitempty"` + Prefix string `protobuf:"bytes,3,opt,name=prefix" json:"prefix,omitempty"` +} + +func (m *ValidateRibRequest) Reset() { *m = ValidateRibRequest{} } +func (m *ValidateRibRequest) String() string { return proto.CompactTextString(m) } +func (*ValidateRibRequest) ProtoMessage() {} +func (*ValidateRibRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{98} } + +type ValidateRibResponse struct { +} + +func (m *ValidateRibResponse) Reset() { *m = ValidateRibResponse{} } +func (m *ValidateRibResponse) String() string { return proto.CompactTextString(m) } +func (*ValidateRibResponse) ProtoMessage() {} +func (*ValidateRibResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{99} } + type Peer struct { - Families []uint32 `protobuf:"varint,2,rep,name=families" json:"families,omitempty"` - ApplyPolicy *ApplyPolicy `protobuf:"bytes,3,opt,name=apply_policy,json=applyPolicy" json:"apply_policy,omitempty"` - Conf *PeerConf `protobuf:"bytes,5,opt,name=conf" json:"conf,omitempty"` - EbgpMultihop *EbgpMultihop `protobuf:"bytes,6,opt,name=ebgp_multihop,json=ebgpMultihop" json:"ebgp_multihop,omitempty"` - RouteReflector *RouteReflector `protobuf:"bytes,10,opt,name=route_reflector,json=routeReflector" json:"route_reflector,omitempty"` - Info *PeerState `protobuf:"bytes,11,opt,name=info" json:"info,omitempty"` - Timers *Timers `protobuf:"bytes,12,opt,name=timers" json:"timers,omitempty"` - Transport *Transport `protobuf:"bytes,13,opt,name=transport" json:"transport,omitempty"` - RouteServer *RouteServer `protobuf:"bytes,15,opt,name=route_server,json=routeServer" json:"route_server,omitempty"` + Families []uint32 `protobuf:"varint,1,rep,name=families" json:"families,omitempty"` + ApplyPolicy *ApplyPolicy `protobuf:"bytes,2,opt,name=apply_policy,json=applyPolicy" json:"apply_policy,omitempty"` + Conf *PeerConf `protobuf:"bytes,3,opt,name=conf" json:"conf,omitempty"` + EbgpMultihop *EbgpMultihop `protobuf:"bytes,4,opt,name=ebgp_multihop,json=ebgpMultihop" json:"ebgp_multihop,omitempty"` + RouteReflector *RouteReflector `protobuf:"bytes,5,opt,name=route_reflector,json=routeReflector" json:"route_reflector,omitempty"` + Info *PeerState `protobuf:"bytes,6,opt,name=info" json:"info,omitempty"` + Timers *Timers `protobuf:"bytes,7,opt,name=timers" json:"timers,omitempty"` + Transport *Transport `protobuf:"bytes,8,opt,name=transport" json:"transport,omitempty"` + RouteServer *RouteServer `protobuf:"bytes,9,opt,name=route_server,json=routeServer" json:"route_server,omitempty"` } func (m *Peer) Reset() { *m = Peer{} } func (m *Peer) String() string { return proto.CompactTextString(m) } func (*Peer) ProtoMessage() {} -func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{100} } func (m *Peer) GetApplyPolicy() *ApplyPolicy { if m != nil { @@ -767,7 +1683,7 @@ type ApplyPolicy struct { func (m *ApplyPolicy) Reset() { *m = ApplyPolicy{} } func (m *ApplyPolicy) String() string { return proto.CompactTextString(m) } func (*ApplyPolicy) ProtoMessage() {} -func (*ApplyPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*ApplyPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{101} } func (m *ApplyPolicy) GetInPolicy() *PolicyAssignment { if m != nil { @@ -799,7 +1715,7 @@ type PrefixLimit struct { func (m *PrefixLimit) Reset() { *m = PrefixLimit{} } func (m *PrefixLimit) String() string { return proto.CompactTextString(m) } func (*PrefixLimit) ProtoMessage() {} -func (*PrefixLimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (*PrefixLimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{102} } type PeerConf struct { AuthPassword string `protobuf:"bytes,1,opt,name=auth_password,json=authPassword" json:"auth_password,omitempty"` @@ -821,7 +1737,7 @@ type PeerConf struct { func (m *PeerConf) Reset() { *m = PeerConf{} } func (m *PeerConf) String() string { return proto.CompactTextString(m) } func (*PeerConf) ProtoMessage() {} -func (*PeerConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } +func (*PeerConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{103} } func (m *PeerConf) GetPrefixLimits() []*PrefixLimit { if m != nil { @@ -838,7 +1754,7 @@ type EbgpMultihop struct { func (m *EbgpMultihop) Reset() { *m = EbgpMultihop{} } func (m *EbgpMultihop) String() string { return proto.CompactTextString(m) } func (*EbgpMultihop) ProtoMessage() {} -func (*EbgpMultihop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*EbgpMultihop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{104} } type RouteReflector struct { RouteReflectorClient bool `protobuf:"varint,1,opt,name=route_reflector_client,json=routeReflectorClient" json:"route_reflector_client,omitempty"` @@ -848,7 +1764,7 @@ type RouteReflector struct { func (m *RouteReflector) Reset() { *m = RouteReflector{} } func (m *RouteReflector) String() string { return proto.CompactTextString(m) } func (*RouteReflector) ProtoMessage() {} -func (*RouteReflector) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } +func (*RouteReflector) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{105} } type PeerState struct { AuthPassword string `protobuf:"bytes,1,opt,name=auth_password,json=authPassword" json:"auth_password,omitempty"` @@ -877,7 +1793,7 @@ type PeerState struct { func (m *PeerState) Reset() { *m = PeerState{} } func (m *PeerState) String() string { return proto.CompactTextString(m) } func (*PeerState) ProtoMessage() {} -func (*PeerState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } +func (*PeerState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{106} } func (m *PeerState) GetMessages() *Messages { if m != nil { @@ -901,7 +1817,7 @@ type Messages struct { func (m *Messages) Reset() { *m = Messages{} } func (m *Messages) String() string { return proto.CompactTextString(m) } func (*Messages) ProtoMessage() {} -func (*Messages) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } +func (*Messages) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{107} } func (m *Messages) GetReceived() *Message { if m != nil { @@ -930,7 +1846,7 @@ type Message struct { func (m *Message) Reset() { *m = Message{} } func (m *Message) String() string { return proto.CompactTextString(m) } func (*Message) ProtoMessage() {} -func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } +func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{108} } type Queues struct { Input uint32 `protobuf:"varint,1,opt,name=input" json:"input,omitempty"` @@ -940,7 +1856,7 @@ type Queues struct { func (m *Queues) Reset() { *m = Queues{} } func (m *Queues) String() string { return proto.CompactTextString(m) } func (*Queues) ProtoMessage() {} -func (*Queues) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } +func (*Queues) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{109} } type Timers struct { Config *TimersConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` @@ -950,7 +1866,7 @@ type Timers struct { func (m *Timers) Reset() { *m = Timers{} } func (m *Timers) String() string { return proto.CompactTextString(m) } func (*Timers) ProtoMessage() {} -func (*Timers) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (*Timers) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{110} } func (m *Timers) GetConfig() *TimersConfig { if m != nil { @@ -976,7 +1892,7 @@ type TimersConfig struct { func (m *TimersConfig) Reset() { *m = TimersConfig{} } func (m *TimersConfig) String() string { return proto.CompactTextString(m) } func (*TimersConfig) ProtoMessage() {} -func (*TimersConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } +func (*TimersConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{111} } type TimersState struct { ConnectRetry uint64 `protobuf:"varint,1,opt,name=connect_retry,json=connectRetry" json:"connect_retry,omitempty"` @@ -991,7 +1907,7 @@ type TimersState struct { func (m *TimersState) Reset() { *m = TimersState{} } func (m *TimersState) String() string { return proto.CompactTextString(m) } func (*TimersState) ProtoMessage() {} -func (*TimersState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (*TimersState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{112} } type Transport struct { LocalAddress string `protobuf:"bytes,1,opt,name=local_address,json=localAddress" json:"local_address,omitempty"` @@ -1006,7 +1922,7 @@ type Transport struct { func (m *Transport) Reset() { *m = Transport{} } func (m *Transport) String() string { return proto.CompactTextString(m) } func (*Transport) ProtoMessage() {} -func (*Transport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } +func (*Transport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{113} } type RouteServer struct { RouteServerClient bool `protobuf:"varint,1,opt,name=route_server_client,json=routeServerClient" json:"route_server_client,omitempty"` @@ -1015,7 +1931,7 @@ type RouteServer struct { func (m *RouteServer) Reset() { *m = RouteServer{} } func (m *RouteServer) String() string { return proto.CompactTextString(m) } func (*RouteServer) ProtoMessage() {} -func (*RouteServer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } +func (*RouteServer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{114} } type Prefix struct { IpPrefix string `protobuf:"bytes,1,opt,name=ip_prefix,json=ipPrefix" json:"ip_prefix,omitempty"` @@ -1026,7 +1942,7 @@ type Prefix struct { func (m *Prefix) Reset() { *m = Prefix{} } func (m *Prefix) String() string { return proto.CompactTextString(m) } func (*Prefix) ProtoMessage() {} -func (*Prefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } +func (*Prefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{115} } type DefinedSet struct { Type DefinedType `protobuf:"varint,1,opt,name=type,enum=gobgpapi.DefinedType" json:"type,omitempty"` @@ -1038,7 +1954,7 @@ type DefinedSet struct { func (m *DefinedSet) Reset() { *m = DefinedSet{} } func (m *DefinedSet) String() string { return proto.CompactTextString(m) } func (*DefinedSet) ProtoMessage() {} -func (*DefinedSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } +func (*DefinedSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{116} } func (m *DefinedSet) GetPrefixes() []*Prefix { if m != nil { @@ -1055,7 +1971,7 @@ type MatchSet struct { func (m *MatchSet) Reset() { *m = MatchSet{} } func (m *MatchSet) String() string { return proto.CompactTextString(m) } func (*MatchSet) ProtoMessage() {} -func (*MatchSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } +func (*MatchSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{117} } type AsPathLength struct { Type AsPathLengthType `protobuf:"varint,1,opt,name=type,enum=gobgpapi.AsPathLengthType" json:"type,omitempty"` @@ -1065,7 +1981,7 @@ type AsPathLength struct { func (m *AsPathLength) Reset() { *m = AsPathLength{} } func (m *AsPathLength) String() string { return proto.CompactTextString(m) } func (*AsPathLength) ProtoMessage() {} -func (*AsPathLength) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } +func (*AsPathLength) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{118} } type Conditions struct { PrefixSet *MatchSet `protobuf:"bytes,1,opt,name=prefix_set,json=prefixSet" json:"prefix_set,omitempty"` @@ -1080,7 +1996,7 @@ type Conditions struct { func (m *Conditions) Reset() { *m = Conditions{} } func (m *Conditions) String() string { return proto.CompactTextString(m) } func (*Conditions) ProtoMessage() {} -func (*Conditions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } +func (*Conditions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{119} } func (m *Conditions) GetPrefixSet() *MatchSet { if m != nil { @@ -1132,7 +2048,7 @@ type CommunityAction struct { func (m *CommunityAction) Reset() { *m = CommunityAction{} } func (m *CommunityAction) String() string { return proto.CompactTextString(m) } func (*CommunityAction) ProtoMessage() {} -func (*CommunityAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } +func (*CommunityAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{120} } type MedAction struct { Type MedActionType `protobuf:"varint,1,opt,name=type,enum=gobgpapi.MedActionType" json:"type,omitempty"` @@ -1142,7 +2058,7 @@ type MedAction struct { func (m *MedAction) Reset() { *m = MedAction{} } func (m *MedAction) String() string { return proto.CompactTextString(m) } func (*MedAction) ProtoMessage() {} -func (*MedAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } +func (*MedAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{121} } type AsPrependAction struct { Asn uint32 `protobuf:"varint,1,opt,name=asn" json:"asn,omitempty"` @@ -1153,7 +2069,7 @@ type AsPrependAction struct { func (m *AsPrependAction) Reset() { *m = AsPrependAction{} } func (m *AsPrependAction) String() string { return proto.CompactTextString(m) } func (*AsPrependAction) ProtoMessage() {} -func (*AsPrependAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } +func (*AsPrependAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{122} } type NexthopAction struct { Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` @@ -1162,7 +2078,7 @@ type NexthopAction struct { func (m *NexthopAction) Reset() { *m = NexthopAction{} } func (m *NexthopAction) String() string { return proto.CompactTextString(m) } func (*NexthopAction) ProtoMessage() {} -func (*NexthopAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } +func (*NexthopAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{123} } type Actions struct { RouteAction RouteAction `protobuf:"varint,1,opt,name=route_action,json=routeAction,enum=gobgpapi.RouteAction" json:"route_action,omitempty"` @@ -1176,7 +2092,7 @@ type Actions struct { func (m *Actions) Reset() { *m = Actions{} } func (m *Actions) String() string { return proto.CompactTextString(m) } func (*Actions) ProtoMessage() {} -func (*Actions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } +func (*Actions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{124} } func (m *Actions) GetCommunity() *CommunityAction { if m != nil { @@ -1222,7 +2138,7 @@ type Statement struct { func (m *Statement) Reset() { *m = Statement{} } func (m *Statement) String() string { return proto.CompactTextString(m) } func (*Statement) ProtoMessage() {} -func (*Statement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } +func (*Statement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{125} } func (m *Statement) GetConditions() *Conditions { if m != nil { @@ -1246,7 +2162,7 @@ type Policy struct { func (m *Policy) Reset() { *m = Policy{} } func (m *Policy) String() string { return proto.CompactTextString(m) } func (*Policy) ProtoMessage() {} -func (*Policy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } +func (*Policy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{126} } func (m *Policy) GetStatements() []*Statement { if m != nil { @@ -1266,7 +2182,7 @@ type PolicyAssignment struct { func (m *PolicyAssignment) Reset() { *m = PolicyAssignment{} } func (m *PolicyAssignment) String() string { return proto.CompactTextString(m) } func (*PolicyAssignment) ProtoMessage() {} -func (*PolicyAssignment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } +func (*PolicyAssignment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{127} } func (m *PolicyAssignment) GetPolicies() []*Policy { if m != nil { @@ -1282,83 +2198,49 @@ type MrtMessage struct { func (m *MrtMessage) Reset() { *m = MrtMessage{} } func (m *MrtMessage) String() string { return proto.CompactTextString(m) } func (*MrtMessage) ProtoMessage() {} -func (*MrtMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } - -type RPKIConf struct { - Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` - RemotePort string `protobuf:"bytes,2,opt,name=remote_port,json=remotePort" json:"remote_port,omitempty"` -} - -func (m *RPKIConf) Reset() { *m = RPKIConf{} } -func (m *RPKIConf) String() string { return proto.CompactTextString(m) } -func (*RPKIConf) ProtoMessage() {} -func (*RPKIConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } - -type RPKIState struct { - Uptime int64 `protobuf:"varint,1,opt,name=uptime" json:"uptime,omitempty"` - Downtime int64 `protobuf:"varint,2,opt,name=downtime" json:"downtime,omitempty"` - Up bool `protobuf:"varint,3,opt,name=up" json:"up,omitempty"` - RecordIpv4 uint32 `protobuf:"varint,4,opt,name=record_ipv4,json=recordIpv4" json:"record_ipv4,omitempty"` - RecordIpv6 uint32 `protobuf:"varint,5,opt,name=record_ipv6,json=recordIpv6" json:"record_ipv6,omitempty"` - PrefixIpv4 uint32 `protobuf:"varint,6,opt,name=prefix_ipv4,json=prefixIpv4" json:"prefix_ipv4,omitempty"` - PrefixIpv6 uint32 `protobuf:"varint,7,opt,name=prefix_ipv6,json=prefixIpv6" json:"prefix_ipv6,omitempty"` - Serial uint32 `protobuf:"varint,8,opt,name=serial" json:"serial,omitempty"` - ReceivedIpv4 int64 `protobuf:"varint,9,opt,name=received_ipv4,json=receivedIpv4" json:"received_ipv4,omitempty"` - ReceivedIpv6 int64 `protobuf:"varint,10,opt,name=received_ipv6,json=receivedIpv6" json:"received_ipv6,omitempty"` - SerialNotify int64 `protobuf:"varint,11,opt,name=serial_notify,json=serialNotify" json:"serial_notify,omitempty"` - CacheReset int64 `protobuf:"varint,12,opt,name=cache_reset,json=cacheReset" json:"cache_reset,omitempty"` - CacheResponse int64 `protobuf:"varint,13,opt,name=cache_response,json=cacheResponse" json:"cache_response,omitempty"` - EndOfData int64 `protobuf:"varint,14,opt,name=end_of_data,json=endOfData" json:"end_of_data,omitempty"` - Error int64 `protobuf:"varint,15,opt,name=error" json:"error,omitempty"` - SerialQuery int64 `protobuf:"varint,16,opt,name=serial_query,json=serialQuery" json:"serial_query,omitempty"` - ResetQuery int64 `protobuf:"varint,17,opt,name=reset_query,json=resetQuery" json:"reset_query,omitempty"` -} +func (*MrtMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{128} } -func (m *RPKIState) Reset() { *m = RPKIState{} } -func (m *RPKIState) String() string { return proto.CompactTextString(m) } -func (*RPKIState) ProtoMessage() {} -func (*RPKIState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } - -type RPKI struct { - Conf *RPKIConf `protobuf:"bytes,1,opt,name=conf" json:"conf,omitempty"` - State *RPKIState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` +type Roa struct { + As uint32 `protobuf:"varint,1,opt,name=as" json:"as,omitempty"` + Prefixlen uint32 `protobuf:"varint,2,opt,name=prefixlen" json:"prefixlen,omitempty"` + Maxlen uint32 `protobuf:"varint,3,opt,name=maxlen" json:"maxlen,omitempty"` + Prefix string `protobuf:"bytes,4,opt,name=prefix" json:"prefix,omitempty"` + Conf *RPKIConf `protobuf:"bytes,5,opt,name=conf" json:"conf,omitempty"` } -func (m *RPKI) Reset() { *m = RPKI{} } -func (m *RPKI) String() string { return proto.CompactTextString(m) } -func (*RPKI) ProtoMessage() {} -func (*RPKI) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } +func (m *Roa) Reset() { *m = Roa{} } +func (m *Roa) String() string { return proto.CompactTextString(m) } +func (*Roa) ProtoMessage() {} +func (*Roa) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{129} } -func (m *RPKI) GetConf() *RPKIConf { +func (m *Roa) GetConf() *RPKIConf { if m != nil { return m.Conf } return nil } -func (m *RPKI) GetState() *RPKIState { - if m != nil { - return m.State - } - return nil +type GetRoaRequest struct { + Family uint32 `protobuf:"varint,1,opt,name=family" json:"family,omitempty"` } -type ROA struct { - As uint32 `protobuf:"varint,1,opt,name=as" json:"as,omitempty"` - Prefixlen uint32 `protobuf:"varint,2,opt,name=prefixlen" json:"prefixlen,omitempty"` - Maxlen uint32 `protobuf:"varint,3,opt,name=maxlen" json:"maxlen,omitempty"` - Prefix string `protobuf:"bytes,4,opt,name=prefix" json:"prefix,omitempty"` - Conf *RPKIConf `protobuf:"bytes,5,opt,name=conf" json:"conf,omitempty"` +func (m *GetRoaRequest) Reset() { *m = GetRoaRequest{} } +func (m *GetRoaRequest) String() string { return proto.CompactTextString(m) } +func (*GetRoaRequest) ProtoMessage() {} +func (*GetRoaRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{130} } + +type GetRoaResponse struct { + Roas []*Roa `protobuf:"bytes,1,rep,name=roas" json:"roas,omitempty"` } -func (m *ROA) Reset() { *m = ROA{} } -func (m *ROA) String() string { return proto.CompactTextString(m) } -func (*ROA) ProtoMessage() {} -func (*ROA) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } +func (m *GetRoaResponse) Reset() { *m = GetRoaResponse{} } +func (m *GetRoaResponse) String() string { return proto.CompactTextString(m) } +func (*GetRoaResponse) ProtoMessage() {} +func (*GetRoaResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{131} } -func (m *ROA) GetConf() *RPKIConf { +func (m *GetRoaResponse) GetRoas() []*Roa { if m != nil { - return m.Conf + return m.Roas } return nil } @@ -1373,7 +2255,7 @@ type Vrf struct { func (m *Vrf) Reset() { *m = Vrf{} } func (m *Vrf) String() string { return proto.CompactTextString(m) } func (*Vrf) ProtoMessage() {} -func (*Vrf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } +func (*Vrf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{132} } type Global struct { As uint32 `protobuf:"varint,1,opt,name=as" json:"as,omitempty"` @@ -1388,28 +2270,109 @@ type Global struct { func (m *Global) Reset() { *m = Global{} } func (m *Global) String() string { return proto.CompactTextString(m) } func (*Global) ProtoMessage() {} -func (*Global) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } +func (*Global) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{133} } func init() { - proto.RegisterType((*Error)(nil), "gobgpapi.Error") + proto.RegisterType((*GetNeighborRequest)(nil), "gobgpapi.GetNeighborRequest") + proto.RegisterType((*GetNeighborResponse)(nil), "gobgpapi.GetNeighborResponse") proto.RegisterType((*Arguments)(nil), "gobgpapi.Arguments") - proto.RegisterType((*ModPathArguments)(nil), "gobgpapi.ModPathArguments") - proto.RegisterType((*ModPathResponse)(nil), "gobgpapi.ModPathResponse") - proto.RegisterType((*ModPathsArguments)(nil), "gobgpapi.ModPathsArguments") - proto.RegisterType((*ModNeighborArguments)(nil), "gobgpapi.ModNeighborArguments") + proto.RegisterType((*AddPathRequest)(nil), "gobgpapi.AddPathRequest") + proto.RegisterType((*AddPathResponse)(nil), "gobgpapi.AddPathResponse") + proto.RegisterType((*DeletePathRequest)(nil), "gobgpapi.DeletePathRequest") + proto.RegisterType((*DeletePathResponse)(nil), "gobgpapi.DeletePathResponse") + proto.RegisterType((*AddNeighborRequest)(nil), "gobgpapi.AddNeighborRequest") + proto.RegisterType((*AddNeighborResponse)(nil), "gobgpapi.AddNeighborResponse") + proto.RegisterType((*DeleteNeighborRequest)(nil), "gobgpapi.DeleteNeighborRequest") + proto.RegisterType((*DeleteNeighborResponse)(nil), "gobgpapi.DeleteNeighborResponse") + proto.RegisterType((*ResetNeighborRequest)(nil), "gobgpapi.ResetNeighborRequest") + proto.RegisterType((*ResetNeighborResponse)(nil), "gobgpapi.ResetNeighborResponse") + proto.RegisterType((*SoftResetNeighborRequest)(nil), "gobgpapi.SoftResetNeighborRequest") + proto.RegisterType((*SoftResetNeighborResponse)(nil), "gobgpapi.SoftResetNeighborResponse") + proto.RegisterType((*ShutdownNeighborRequest)(nil), "gobgpapi.ShutdownNeighborRequest") + proto.RegisterType((*ShutdownNeighborResponse)(nil), "gobgpapi.ShutdownNeighborResponse") + proto.RegisterType((*EnableNeighborRequest)(nil), "gobgpapi.EnableNeighborRequest") + proto.RegisterType((*EnableNeighborResponse)(nil), "gobgpapi.EnableNeighborResponse") + proto.RegisterType((*DisableNeighborRequest)(nil), "gobgpapi.DisableNeighborRequest") + proto.RegisterType((*DisableNeighborResponse)(nil), "gobgpapi.DisableNeighborResponse") proto.RegisterType((*MrtArguments)(nil), "gobgpapi.MrtArguments") - proto.RegisterType((*ModMrtArguments)(nil), "gobgpapi.ModMrtArguments") - proto.RegisterType((*ModBmpArguments)(nil), "gobgpapi.ModBmpArguments") - proto.RegisterType((*ModRpkiArguments)(nil), "gobgpapi.ModRpkiArguments") - proto.RegisterType((*ModVrfArguments)(nil), "gobgpapi.ModVrfArguments") - proto.RegisterType((*ModDefinedSetArguments)(nil), "gobgpapi.ModDefinedSetArguments") - proto.RegisterType((*ModStatementArguments)(nil), "gobgpapi.ModStatementArguments") - proto.RegisterType((*ModPolicyArguments)(nil), "gobgpapi.ModPolicyArguments") - proto.RegisterType((*ModPolicyAssignmentArguments)(nil), "gobgpapi.ModPolicyAssignmentArguments") - proto.RegisterType((*ModGlobalConfigArguments)(nil), "gobgpapi.ModGlobalConfigArguments") + proto.RegisterType((*EnableMrtRequest)(nil), "gobgpapi.EnableMrtRequest") + proto.RegisterType((*EnableMrtResponse)(nil), "gobgpapi.EnableMrtResponse") + proto.RegisterType((*DisableMrtRequest)(nil), "gobgpapi.DisableMrtRequest") + proto.RegisterType((*DisableMrtResponse)(nil), "gobgpapi.DisableMrtResponse") + proto.RegisterType((*InjectMrtRequest)(nil), "gobgpapi.InjectMrtRequest") + proto.RegisterType((*InjectMrtResponse)(nil), "gobgpapi.InjectMrtResponse") + proto.RegisterType((*AddBmpRequest)(nil), "gobgpapi.AddBmpRequest") + proto.RegisterType((*AddBmpResponse)(nil), "gobgpapi.AddBmpResponse") + proto.RegisterType((*DeleteBmpRequest)(nil), "gobgpapi.DeleteBmpRequest") + proto.RegisterType((*DeleteBmpResponse)(nil), "gobgpapi.DeleteBmpResponse") + proto.RegisterType((*RPKIConf)(nil), "gobgpapi.RPKIConf") + proto.RegisterType((*RPKIState)(nil), "gobgpapi.RPKIState") + proto.RegisterType((*Rpki)(nil), "gobgpapi.Rpki") + proto.RegisterType((*GetRpkiRequest)(nil), "gobgpapi.GetRpkiRequest") + proto.RegisterType((*GetRpkiResponse)(nil), "gobgpapi.GetRpkiResponse") + proto.RegisterType((*AddRpkiRequest)(nil), "gobgpapi.AddRpkiRequest") + proto.RegisterType((*AddRpkiResponse)(nil), "gobgpapi.AddRpkiResponse") + proto.RegisterType((*DeleteRpkiRequest)(nil), "gobgpapi.DeleteRpkiRequest") + proto.RegisterType((*DeleteRpkiResponse)(nil), "gobgpapi.DeleteRpkiResponse") + proto.RegisterType((*EnableRpkiRequest)(nil), "gobgpapi.EnableRpkiRequest") + proto.RegisterType((*EnableRpkiResponse)(nil), "gobgpapi.EnableRpkiResponse") + proto.RegisterType((*DisableRpkiRequest)(nil), "gobgpapi.DisableRpkiRequest") + proto.RegisterType((*DisableRpkiResponse)(nil), "gobgpapi.DisableRpkiResponse") + proto.RegisterType((*ResetRpkiRequest)(nil), "gobgpapi.ResetRpkiRequest") + proto.RegisterType((*ResetRpkiResponse)(nil), "gobgpapi.ResetRpkiResponse") + proto.RegisterType((*SoftResetRpkiRequest)(nil), "gobgpapi.SoftResetRpkiRequest") + proto.RegisterType((*SoftResetRpkiResponse)(nil), "gobgpapi.SoftResetRpkiResponse") + proto.RegisterType((*GetVrfRequest)(nil), "gobgpapi.GetVrfRequest") + proto.RegisterType((*GetVrfResponse)(nil), "gobgpapi.GetVrfResponse") + proto.RegisterType((*AddVrfRequest)(nil), "gobgpapi.AddVrfRequest") + proto.RegisterType((*AddVrfResponse)(nil), "gobgpapi.AddVrfResponse") + proto.RegisterType((*DeleteVrfRequest)(nil), "gobgpapi.DeleteVrfRequest") + proto.RegisterType((*DeleteVrfResponse)(nil), "gobgpapi.DeleteVrfResponse") + proto.RegisterType((*GetDefinedSetRequest)(nil), "gobgpapi.GetDefinedSetRequest") + proto.RegisterType((*GetDefinedSetResponse)(nil), "gobgpapi.GetDefinedSetResponse") + proto.RegisterType((*AddDefinedSetRequest)(nil), "gobgpapi.AddDefinedSetRequest") + proto.RegisterType((*AddDefinedSetResponse)(nil), "gobgpapi.AddDefinedSetResponse") + proto.RegisterType((*DeleteDefinedSetRequest)(nil), "gobgpapi.DeleteDefinedSetRequest") + proto.RegisterType((*DeleteDefinedSetResponse)(nil), "gobgpapi.DeleteDefinedSetResponse") + proto.RegisterType((*ReplaceDefinedSetRequest)(nil), "gobgpapi.ReplaceDefinedSetRequest") + proto.RegisterType((*ReplaceDefinedSetResponse)(nil), "gobgpapi.ReplaceDefinedSetResponse") + proto.RegisterType((*GetStatementRequest)(nil), "gobgpapi.GetStatementRequest") + proto.RegisterType((*GetStatementResponse)(nil), "gobgpapi.GetStatementResponse") + proto.RegisterType((*AddStatementRequest)(nil), "gobgpapi.AddStatementRequest") + proto.RegisterType((*AddStatementResponse)(nil), "gobgpapi.AddStatementResponse") + proto.RegisterType((*DeleteStatementRequest)(nil), "gobgpapi.DeleteStatementRequest") + proto.RegisterType((*DeleteStatementResponse)(nil), "gobgpapi.DeleteStatementResponse") + proto.RegisterType((*ReplaceStatementRequest)(nil), "gobgpapi.ReplaceStatementRequest") + proto.RegisterType((*ReplaceStatementResponse)(nil), "gobgpapi.ReplaceStatementResponse") + proto.RegisterType((*GetPolicyRequest)(nil), "gobgpapi.GetPolicyRequest") + proto.RegisterType((*GetPolicyResponse)(nil), "gobgpapi.GetPolicyResponse") + proto.RegisterType((*AddPolicyRequest)(nil), "gobgpapi.AddPolicyRequest") + proto.RegisterType((*AddPolicyResponse)(nil), "gobgpapi.AddPolicyResponse") + proto.RegisterType((*DeletePolicyRequest)(nil), "gobgpapi.DeletePolicyRequest") + proto.RegisterType((*DeletePolicyResponse)(nil), "gobgpapi.DeletePolicyResponse") + proto.RegisterType((*ReplacePolicyRequest)(nil), "gobgpapi.ReplacePolicyRequest") + proto.RegisterType((*ReplacePolicyResponse)(nil), "gobgpapi.ReplacePolicyResponse") + proto.RegisterType((*GetPolicyAssignmentRequest)(nil), "gobgpapi.GetPolicyAssignmentRequest") + proto.RegisterType((*GetPolicyAssignmentResponse)(nil), "gobgpapi.GetPolicyAssignmentResponse") + proto.RegisterType((*AddPolicyAssignmentRequest)(nil), "gobgpapi.AddPolicyAssignmentRequest") + proto.RegisterType((*AddPolicyAssignmentResponse)(nil), "gobgpapi.AddPolicyAssignmentResponse") + proto.RegisterType((*DeletePolicyAssignmentRequest)(nil), "gobgpapi.DeletePolicyAssignmentRequest") + proto.RegisterType((*DeletePolicyAssignmentResponse)(nil), "gobgpapi.DeletePolicyAssignmentResponse") + proto.RegisterType((*ReplacePolicyAssignmentRequest)(nil), "gobgpapi.ReplacePolicyAssignmentRequest") + proto.RegisterType((*ReplacePolicyAssignmentResponse)(nil), "gobgpapi.ReplacePolicyAssignmentResponse") + proto.RegisterType((*GetServerRequest)(nil), "gobgpapi.GetServerRequest") + proto.RegisterType((*GetServerResponse)(nil), "gobgpapi.GetServerResponse") + proto.RegisterType((*StartServerRequest)(nil), "gobgpapi.StartServerRequest") + proto.RegisterType((*StartServerResponse)(nil), "gobgpapi.StartServerResponse") + proto.RegisterType((*StopServerRequest)(nil), "gobgpapi.StopServerRequest") + proto.RegisterType((*StopServerResponse)(nil), "gobgpapi.StopServerResponse") proto.RegisterType((*Path)(nil), "gobgpapi.Path") proto.RegisterType((*Destination)(nil), "gobgpapi.Destination") proto.RegisterType((*Table)(nil), "gobgpapi.Table") + proto.RegisterType((*GetRibRequest)(nil), "gobgpapi.GetRibRequest") + proto.RegisterType((*GetRibResponse)(nil), "gobgpapi.GetRibResponse") + proto.RegisterType((*ValidateRibRequest)(nil), "gobgpapi.ValidateRibRequest") + proto.RegisterType((*ValidateRibResponse)(nil), "gobgpapi.ValidateRibResponse") proto.RegisterType((*Peer)(nil), "gobgpapi.Peer") proto.RegisterType((*ApplyPolicy)(nil), "gobgpapi.ApplyPolicy") proto.RegisterType((*PrefixLimit)(nil), "gobgpapi.PrefixLimit") @@ -1439,14 +2402,12 @@ func init() { proto.RegisterType((*Policy)(nil), "gobgpapi.Policy") proto.RegisterType((*PolicyAssignment)(nil), "gobgpapi.PolicyAssignment") proto.RegisterType((*MrtMessage)(nil), "gobgpapi.MrtMessage") - proto.RegisterType((*RPKIConf)(nil), "gobgpapi.RPKIConf") - proto.RegisterType((*RPKIState)(nil), "gobgpapi.RPKIState") - proto.RegisterType((*RPKI)(nil), "gobgpapi.RPKI") - proto.RegisterType((*ROA)(nil), "gobgpapi.ROA") + proto.RegisterType((*Roa)(nil), "gobgpapi.Roa") + proto.RegisterType((*GetRoaRequest)(nil), "gobgpapi.GetRoaRequest") + proto.RegisterType((*GetRoaResponse)(nil), "gobgpapi.GetRoaResponse") proto.RegisterType((*Vrf)(nil), "gobgpapi.Vrf") proto.RegisterType((*Global)(nil), "gobgpapi.Global") proto.RegisterEnum("gobgpapi.Resource", Resource_name, Resource_value) - proto.RegisterEnum("gobgpapi.Operation", Operation_name, Operation_value) proto.RegisterEnum("gobgpapi.DefinedType", DefinedType_name, DefinedType_value) proto.RegisterEnum("gobgpapi.MatchType", MatchType_name, MatchType_value) proto.RegisterEnum("gobgpapi.AsPathLengthType", AsPathLengthType_name, AsPathLengthType_value) @@ -1454,8 +2415,8 @@ func init() { proto.RegisterEnum("gobgpapi.CommunityActionType", CommunityActionType_name, CommunityActionType_value) proto.RegisterEnum("gobgpapi.MedActionType", MedActionType_name, MedActionType_value) proto.RegisterEnum("gobgpapi.PolicyType", PolicyType_name, PolicyType_value) - proto.RegisterEnum("gobgpapi.Error_ErrorCode", Error_ErrorCode_name, Error_ErrorCode_value) - proto.RegisterEnum("gobgpapi.ModBmpArguments_MonitoringPolicy", ModBmpArguments_MonitoringPolicy_name, ModBmpArguments_MonitoringPolicy_value) + proto.RegisterEnum("gobgpapi.SoftResetNeighborRequest_SoftResetDirection", SoftResetNeighborRequest_SoftResetDirection_name, SoftResetNeighborRequest_SoftResetDirection_value) + proto.RegisterEnum("gobgpapi.AddBmpRequest_MonitoringPolicy", AddBmpRequest_MonitoringPolicy_name, AddBmpRequest_MonitoringPolicy_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -1469,43 +2430,57 @@ const _ = grpc.SupportPackageIsVersion2 // Client API for GobgpApi service type GobgpApiClient interface { - GetGlobalConfig(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Global, error) - ModGlobalConfig(ctx context.Context, in *ModGlobalConfigArguments, opts ...grpc.CallOption) (*Error, error) - GetNeighbors(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_GetNeighborsClient, error) - GetNeighbor(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Peer, error) - ModNeighbor(ctx context.Context, in *ModNeighborArguments, opts ...grpc.CallOption) (*Error, error) - GetRib(ctx context.Context, in *Table, opts ...grpc.CallOption) (*Table, error) - Reset(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) - SoftReset(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) - SoftResetIn(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) - SoftResetOut(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) - Shutdown(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) - Enable(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) - Disable(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) - ModPath(ctx context.Context, in *ModPathArguments, opts ...grpc.CallOption) (*ModPathResponse, error) - ModPaths(ctx context.Context, opts ...grpc.CallOption) (GobgpApi_ModPathsClient, error) + StartServer(ctx context.Context, in *StartServerRequest, opts ...grpc.CallOption) (*StartServerResponse, error) + StopServer(ctx context.Context, in *StopServerRequest, opts ...grpc.CallOption) (*StopServerResponse, error) + GetServer(ctx context.Context, in *GetServerRequest, opts ...grpc.CallOption) (*GetServerResponse, error) + AddNeighbor(ctx context.Context, in *AddNeighborRequest, opts ...grpc.CallOption) (*AddNeighborResponse, error) + DeleteNeighbor(ctx context.Context, in *DeleteNeighborRequest, opts ...grpc.CallOption) (*DeleteNeighborResponse, error) + GetNeighbor(ctx context.Context, in *GetNeighborRequest, opts ...grpc.CallOption) (*GetNeighborResponse, error) + ResetNeighbor(ctx context.Context, in *ResetNeighborRequest, opts ...grpc.CallOption) (*ResetNeighborResponse, error) + SoftResetNeighbor(ctx context.Context, in *SoftResetNeighborRequest, opts ...grpc.CallOption) (*SoftResetNeighborResponse, error) + ShutdownNeighbor(ctx context.Context, in *ShutdownNeighborRequest, opts ...grpc.CallOption) (*ShutdownNeighborResponse, error) + EnableNeighbor(ctx context.Context, in *EnableNeighborRequest, opts ...grpc.CallOption) (*EnableNeighborResponse, error) + DisableNeighbor(ctx context.Context, in *DisableNeighborRequest, opts ...grpc.CallOption) (*DisableNeighborResponse, error) + GetRib(ctx context.Context, in *GetRibRequest, opts ...grpc.CallOption) (*GetRibResponse, error) + ValidateRib(ctx context.Context, in *ValidateRibRequest, opts ...grpc.CallOption) (*ValidateRibResponse, error) + AddPath(ctx context.Context, in *AddPathRequest, opts ...grpc.CallOption) (*AddPathResponse, error) + DeletePath(ctx context.Context, in *DeletePathRequest, opts ...grpc.CallOption) (*DeletePathResponse, error) MonitorRib(ctx context.Context, in *Table, opts ...grpc.CallOption) (GobgpApi_MonitorRibClient, error) MonitorBestChanged(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_MonitorBestChangedClient, error) MonitorPeerState(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_MonitorPeerStateClient, error) + EnableMrt(ctx context.Context, in *EnableMrtRequest, opts ...grpc.CallOption) (*EnableMrtResponse, error) + DisableMrt(ctx context.Context, in *DisableMrtRequest, opts ...grpc.CallOption) (*DisableMrtResponse, error) GetMrt(ctx context.Context, in *MrtArguments, opts ...grpc.CallOption) (GobgpApi_GetMrtClient, error) - ModMrt(ctx context.Context, in *ModMrtArguments, opts ...grpc.CallOption) (*Error, error) - ModBmp(ctx context.Context, in *ModBmpArguments, opts ...grpc.CallOption) (*Error, error) - GetRPKI(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_GetRPKIClient, error) - ModRPKI(ctx context.Context, in *ModRpkiArguments, opts ...grpc.CallOption) (*Error, error) - GetROA(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_GetROAClient, error) - GetVrfs(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_GetVrfsClient, error) - ModVrf(ctx context.Context, in *ModVrfArguments, opts ...grpc.CallOption) (*Error, error) - GetDefinedSet(ctx context.Context, in *DefinedSet, opts ...grpc.CallOption) (*DefinedSet, error) - GetDefinedSets(ctx context.Context, in *DefinedSet, opts ...grpc.CallOption) (GobgpApi_GetDefinedSetsClient, error) - ModDefinedSet(ctx context.Context, in *ModDefinedSetArguments, opts ...grpc.CallOption) (*Error, error) - GetStatement(ctx context.Context, in *Statement, opts ...grpc.CallOption) (*Statement, error) - GetStatements(ctx context.Context, in *Statement, opts ...grpc.CallOption) (GobgpApi_GetStatementsClient, error) - ModStatement(ctx context.Context, in *ModStatementArguments, opts ...grpc.CallOption) (*Error, error) - GetPolicy(ctx context.Context, in *Policy, opts ...grpc.CallOption) (*Policy, error) - GetPolicies(ctx context.Context, in *Policy, opts ...grpc.CallOption) (GobgpApi_GetPoliciesClient, error) - ModPolicy(ctx context.Context, in *ModPolicyArguments, opts ...grpc.CallOption) (*Error, error) - GetPolicyAssignment(ctx context.Context, in *PolicyAssignment, opts ...grpc.CallOption) (*PolicyAssignment, error) - ModPolicyAssignment(ctx context.Context, in *ModPolicyAssignmentArguments, opts ...grpc.CallOption) (*Error, error) + InjectMrt(ctx context.Context, opts ...grpc.CallOption) (GobgpApi_InjectMrtClient, error) + AddBmp(ctx context.Context, in *AddBmpRequest, opts ...grpc.CallOption) (*AddBmpResponse, error) + DeleteBmp(ctx context.Context, in *DeleteBmpRequest, opts ...grpc.CallOption) (*DeleteBmpResponse, error) + GetRpki(ctx context.Context, in *GetRpkiRequest, opts ...grpc.CallOption) (*GetRpkiResponse, error) + AddRpki(ctx context.Context, in *AddRpkiRequest, opts ...grpc.CallOption) (*AddRpkiResponse, error) + DeleteRpki(ctx context.Context, in *DeleteRpkiRequest, opts ...grpc.CallOption) (*DeleteRpkiResponse, error) + EnableRpki(ctx context.Context, in *EnableRpkiRequest, opts ...grpc.CallOption) (*EnableRpkiResponse, error) + DisableRpki(ctx context.Context, in *DisableRpkiRequest, opts ...grpc.CallOption) (*DisableRpkiResponse, error) + ResetRpki(ctx context.Context, in *ResetRpkiRequest, opts ...grpc.CallOption) (*ResetRpkiResponse, error) + SoftResetRpki(ctx context.Context, in *SoftResetRpkiRequest, opts ...grpc.CallOption) (*SoftResetRpkiResponse, error) + GetRoa(ctx context.Context, in *GetRoaRequest, opts ...grpc.CallOption) (*GetRoaResponse, error) + AddVrf(ctx context.Context, in *AddVrfRequest, opts ...grpc.CallOption) (*AddVrfResponse, error) + DeleteVrf(ctx context.Context, in *DeleteVrfRequest, opts ...grpc.CallOption) (*DeleteVrfResponse, error) + GetVrf(ctx context.Context, in *GetVrfRequest, opts ...grpc.CallOption) (*GetVrfResponse, error) + GetDefinedSet(ctx context.Context, in *GetDefinedSetRequest, opts ...grpc.CallOption) (*GetDefinedSetResponse, error) + AddDefinedSet(ctx context.Context, in *AddDefinedSetRequest, opts ...grpc.CallOption) (*AddDefinedSetResponse, error) + DeleteDefinedSet(ctx context.Context, in *DeleteDefinedSetRequest, opts ...grpc.CallOption) (*DeleteDefinedSetResponse, error) + ReplaceDefinedSet(ctx context.Context, in *ReplaceDefinedSetRequest, opts ...grpc.CallOption) (*ReplaceDefinedSetResponse, error) + GetStatement(ctx context.Context, in *GetStatementRequest, opts ...grpc.CallOption) (*GetStatementResponse, error) + AddStatement(ctx context.Context, in *AddStatementRequest, opts ...grpc.CallOption) (*AddStatementResponse, error) + DeleteStatement(ctx context.Context, in *DeleteStatementRequest, opts ...grpc.CallOption) (*DeleteStatementResponse, error) + ReplaceStatement(ctx context.Context, in *ReplaceStatementRequest, opts ...grpc.CallOption) (*ReplaceStatementResponse, error) + GetPolicy(ctx context.Context, in *GetPolicyRequest, opts ...grpc.CallOption) (*GetPolicyResponse, error) + AddPolicy(ctx context.Context, in *AddPolicyRequest, opts ...grpc.CallOption) (*AddPolicyResponse, error) + DeletePolicy(ctx context.Context, in *DeletePolicyRequest, opts ...grpc.CallOption) (*DeletePolicyResponse, error) + ReplacePolicy(ctx context.Context, in *ReplacePolicyRequest, opts ...grpc.CallOption) (*ReplacePolicyResponse, error) + GetPolicyAssignment(ctx context.Context, in *GetPolicyAssignmentRequest, opts ...grpc.CallOption) (*GetPolicyAssignmentResponse, error) + AddPolicyAssignment(ctx context.Context, in *AddPolicyAssignmentRequest, opts ...grpc.CallOption) (*AddPolicyAssignmentResponse, error) + DeletePolicyAssignment(ctx context.Context, in *DeletePolicyAssignmentRequest, opts ...grpc.CallOption) (*DeletePolicyAssignmentResponse, error) + ReplacePolicyAssignment(ctx context.Context, in *ReplacePolicyAssignmentRequest, opts ...grpc.CallOption) (*ReplacePolicyAssignmentResponse, error) } type gobgpApiClient struct { @@ -1516,191 +2491,143 @@ func NewGobgpApiClient(cc *grpc.ClientConn) GobgpApiClient { return &gobgpApiClient{cc} } -func (c *gobgpApiClient) GetGlobalConfig(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Global, error) { - out := new(Global) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetGlobalConfig", in, out, c.cc, opts...) +func (c *gobgpApiClient) StartServer(ctx context.Context, in *StartServerRequest, opts ...grpc.CallOption) (*StartServerResponse, error) { + out := new(StartServerResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/StartServer", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) ModGlobalConfig(ctx context.Context, in *ModGlobalConfigArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModGlobalConfig", in, out, c.cc, opts...) +func (c *gobgpApiClient) StopServer(ctx context.Context, in *StopServerRequest, opts ...grpc.CallOption) (*StopServerResponse, error) { + out := new(StopServerResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/StopServer", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) GetNeighbors(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_GetNeighborsClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[0], c.cc, "/gobgpapi.GobgpApi/GetNeighbors", opts...) +func (c *gobgpApiClient) GetServer(ctx context.Context, in *GetServerRequest, opts ...grpc.CallOption) (*GetServerResponse, error) { + out := new(GetServerResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetServer", in, out, c.cc, opts...) if err != nil { return nil, err } - x := &gobgpApiGetNeighborsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type GobgpApi_GetNeighborsClient interface { - Recv() (*Peer, error) - grpc.ClientStream -} - -type gobgpApiGetNeighborsClient struct { - grpc.ClientStream -} - -func (x *gobgpApiGetNeighborsClient) Recv() (*Peer, error) { - m := new(Peer) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil + return out, nil } -func (c *gobgpApiClient) GetNeighbor(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Peer, error) { - out := new(Peer) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetNeighbor", in, out, c.cc, opts...) +func (c *gobgpApiClient) AddNeighbor(ctx context.Context, in *AddNeighborRequest, opts ...grpc.CallOption) (*AddNeighborResponse, error) { + out := new(AddNeighborResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/AddNeighbor", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) ModNeighbor(ctx context.Context, in *ModNeighborArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModNeighbor", in, out, c.cc, opts...) +func (c *gobgpApiClient) DeleteNeighbor(ctx context.Context, in *DeleteNeighborRequest, opts ...grpc.CallOption) (*DeleteNeighborResponse, error) { + out := new(DeleteNeighborResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DeleteNeighbor", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) GetRib(ctx context.Context, in *Table, opts ...grpc.CallOption) (*Table, error) { - out := new(Table) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetRib", in, out, c.cc, opts...) +func (c *gobgpApiClient) GetNeighbor(ctx context.Context, in *GetNeighborRequest, opts ...grpc.CallOption) (*GetNeighborResponse, error) { + out := new(GetNeighborResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetNeighbor", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) Reset(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/Reset", in, out, c.cc, opts...) +func (c *gobgpApiClient) ResetNeighbor(ctx context.Context, in *ResetNeighborRequest, opts ...grpc.CallOption) (*ResetNeighborResponse, error) { + out := new(ResetNeighborResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ResetNeighbor", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) SoftReset(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/SoftReset", in, out, c.cc, opts...) +func (c *gobgpApiClient) SoftResetNeighbor(ctx context.Context, in *SoftResetNeighborRequest, opts ...grpc.CallOption) (*SoftResetNeighborResponse, error) { + out := new(SoftResetNeighborResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/SoftResetNeighbor", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) SoftResetIn(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/SoftResetIn", in, out, c.cc, opts...) +func (c *gobgpApiClient) ShutdownNeighbor(ctx context.Context, in *ShutdownNeighborRequest, opts ...grpc.CallOption) (*ShutdownNeighborResponse, error) { + out := new(ShutdownNeighborResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ShutdownNeighbor", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) SoftResetOut(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/SoftResetOut", in, out, c.cc, opts...) +func (c *gobgpApiClient) EnableNeighbor(ctx context.Context, in *EnableNeighborRequest, opts ...grpc.CallOption) (*EnableNeighborResponse, error) { + out := new(EnableNeighborResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/EnableNeighbor", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) Shutdown(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/Shutdown", in, out, c.cc, opts...) +func (c *gobgpApiClient) DisableNeighbor(ctx context.Context, in *DisableNeighborRequest, opts ...grpc.CallOption) (*DisableNeighborResponse, error) { + out := new(DisableNeighborResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DisableNeighbor", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) Enable(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/Enable", in, out, c.cc, opts...) +func (c *gobgpApiClient) GetRib(ctx context.Context, in *GetRibRequest, opts ...grpc.CallOption) (*GetRibResponse, error) { + out := new(GetRibResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetRib", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) Disable(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/Disable", in, out, c.cc, opts...) +func (c *gobgpApiClient) ValidateRib(ctx context.Context, in *ValidateRibRequest, opts ...grpc.CallOption) (*ValidateRibResponse, error) { + out := new(ValidateRibResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ValidateRib", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) ModPath(ctx context.Context, in *ModPathArguments, opts ...grpc.CallOption) (*ModPathResponse, error) { - out := new(ModPathResponse) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModPath", in, out, c.cc, opts...) +func (c *gobgpApiClient) AddPath(ctx context.Context, in *AddPathRequest, opts ...grpc.CallOption) (*AddPathResponse, error) { + out := new(AddPathResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/AddPath", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) ModPaths(ctx context.Context, opts ...grpc.CallOption) (GobgpApi_ModPathsClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[1], c.cc, "/gobgpapi.GobgpApi/ModPaths", opts...) +func (c *gobgpApiClient) DeletePath(ctx context.Context, in *DeletePathRequest, opts ...grpc.CallOption) (*DeletePathResponse, error) { + out := new(DeletePathResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DeletePath", in, out, c.cc, opts...) if err != nil { return nil, err } - x := &gobgpApiModPathsClient{stream} - return x, nil -} - -type GobgpApi_ModPathsClient interface { - Send(*ModPathsArguments) error - CloseAndRecv() (*Error, error) - grpc.ClientStream -} - -type gobgpApiModPathsClient struct { - grpc.ClientStream -} - -func (x *gobgpApiModPathsClient) Send(m *ModPathsArguments) error { - return x.ClientStream.SendMsg(m) -} - -func (x *gobgpApiModPathsClient) CloseAndRecv() (*Error, error) { - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - m := new(Error) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil + return out, nil } func (c *gobgpApiClient) MonitorRib(ctx context.Context, in *Table, opts ...grpc.CallOption) (GobgpApi_MonitorRibClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[2], c.cc, "/gobgpapi.GobgpApi/MonitorRib", opts...) + stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[0], c.cc, "/gobgpapi.GobgpApi/MonitorRib", opts...) if err != nil { return nil, err } @@ -1732,7 +2659,7 @@ func (x *gobgpApiMonitorRibClient) Recv() (*Destination, error) { } func (c *gobgpApiClient) MonitorBestChanged(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_MonitorBestChangedClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[3], c.cc, "/gobgpapi.GobgpApi/MonitorBestChanged", opts...) + stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[1], c.cc, "/gobgpapi.GobgpApi/MonitorBestChanged", opts...) if err != nil { return nil, err } @@ -1764,7 +2691,7 @@ func (x *gobgpApiMonitorBestChangedClient) Recv() (*Destination, error) { } func (c *gobgpApiClient) MonitorPeerState(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_MonitorPeerStateClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[4], c.cc, "/gobgpapi.GobgpApi/MonitorPeerState", opts...) + stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[2], c.cc, "/gobgpapi.GobgpApi/MonitorPeerState", opts...) if err != nil { return nil, err } @@ -1795,8 +2722,26 @@ func (x *gobgpApiMonitorPeerStateClient) Recv() (*Peer, error) { return m, nil } +func (c *gobgpApiClient) EnableMrt(ctx context.Context, in *EnableMrtRequest, opts ...grpc.CallOption) (*EnableMrtResponse, error) { + out := new(EnableMrtResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/EnableMrt", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *gobgpApiClient) DisableMrt(ctx context.Context, in *DisableMrtRequest, opts ...grpc.CallOption) (*DisableMrtResponse, error) { + out := new(DisableMrtResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DisableMrt", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *gobgpApiClient) GetMrt(ctx context.Context, in *MrtArguments, opts ...grpc.CallOption) (GobgpApi_GetMrtClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[5], c.cc, "/gobgpapi.GobgpApi/GetMrt", opts...) + stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[3], c.cc, "/gobgpapi.GobgpApi/GetMrt", opts...) if err != nil { return nil, err } @@ -1827,140 +2772,159 @@ func (x *gobgpApiGetMrtClient) Recv() (*MrtMessage, error) { return m, nil } -func (c *gobgpApiClient) ModMrt(ctx context.Context, in *ModMrtArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModMrt", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *gobgpApiClient) ModBmp(ctx context.Context, in *ModBmpArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModBmp", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *gobgpApiClient) GetRPKI(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_GetRPKIClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[6], c.cc, "/gobgpapi.GobgpApi/GetRPKI", opts...) +func (c *gobgpApiClient) InjectMrt(ctx context.Context, opts ...grpc.CallOption) (GobgpApi_InjectMrtClient, error) { + stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[4], c.cc, "/gobgpapi.GobgpApi/InjectMrt", opts...) if err != nil { return nil, err } - x := &gobgpApiGetRPKIClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } + x := &gobgpApiInjectMrtClient{stream} return x, nil } -type GobgpApi_GetRPKIClient interface { - Recv() (*RPKI, error) +type GobgpApi_InjectMrtClient interface { + Send(*InjectMrtRequest) error + CloseAndRecv() (*InjectMrtResponse, error) grpc.ClientStream } -type gobgpApiGetRPKIClient struct { +type gobgpApiInjectMrtClient struct { grpc.ClientStream } -func (x *gobgpApiGetRPKIClient) Recv() (*RPKI, error) { - m := new(RPKI) +func (x *gobgpApiInjectMrtClient) Send(m *InjectMrtRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *gobgpApiInjectMrtClient) CloseAndRecv() (*InjectMrtResponse, error) { + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + m := new(InjectMrtResponse) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } return m, nil } -func (c *gobgpApiClient) ModRPKI(ctx context.Context, in *ModRpkiArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModRPKI", in, out, c.cc, opts...) +func (c *gobgpApiClient) AddBmp(ctx context.Context, in *AddBmpRequest, opts ...grpc.CallOption) (*AddBmpResponse, error) { + out := new(AddBmpResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/AddBmp", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) GetROA(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_GetROAClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[7], c.cc, "/gobgpapi.GobgpApi/GetROA", opts...) +func (c *gobgpApiClient) DeleteBmp(ctx context.Context, in *DeleteBmpRequest, opts ...grpc.CallOption) (*DeleteBmpResponse, error) { + out := new(DeleteBmpResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DeleteBmp", in, out, c.cc, opts...) if err != nil { return nil, err } - x := &gobgpApiGetROAClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { + return out, nil +} + +func (c *gobgpApiClient) GetRpki(ctx context.Context, in *GetRpkiRequest, opts ...grpc.CallOption) (*GetRpkiResponse, error) { + out := new(GetRpkiResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetRpki", in, out, c.cc, opts...) + if err != nil { return nil, err } - return x, nil + return out, nil } -type GobgpApi_GetROAClient interface { - Recv() (*ROA, error) - grpc.ClientStream +func (c *gobgpApiClient) AddRpki(ctx context.Context, in *AddRpkiRequest, opts ...grpc.CallOption) (*AddRpkiResponse, error) { + out := new(AddRpkiResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/AddRpki", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil } -type gobgpApiGetROAClient struct { - grpc.ClientStream +func (c *gobgpApiClient) DeleteRpki(ctx context.Context, in *DeleteRpkiRequest, opts ...grpc.CallOption) (*DeleteRpkiResponse, error) { + out := new(DeleteRpkiResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DeleteRpki", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (x *gobgpApiGetROAClient) Recv() (*ROA, error) { - m := new(ROA) - if err := x.ClientStream.RecvMsg(m); err != nil { +func (c *gobgpApiClient) EnableRpki(ctx context.Context, in *EnableRpkiRequest, opts ...grpc.CallOption) (*EnableRpkiResponse, error) { + out := new(EnableRpkiResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/EnableRpki", in, out, c.cc, opts...) + if err != nil { return nil, err } - return m, nil + return out, nil } -func (c *gobgpApiClient) GetVrfs(ctx context.Context, in *Arguments, opts ...grpc.CallOption) (GobgpApi_GetVrfsClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[8], c.cc, "/gobgpapi.GobgpApi/GetVrfs", opts...) +func (c *gobgpApiClient) DisableRpki(ctx context.Context, in *DisableRpkiRequest, opts ...grpc.CallOption) (*DisableRpkiResponse, error) { + out := new(DisableRpkiResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DisableRpki", in, out, c.cc, opts...) if err != nil { return nil, err } - x := &gobgpApiGetVrfsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { + return out, nil +} + +func (c *gobgpApiClient) ResetRpki(ctx context.Context, in *ResetRpkiRequest, opts ...grpc.CallOption) (*ResetRpkiResponse, error) { + out := new(ResetRpkiResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ResetRpki", in, out, c.cc, opts...) + if err != nil { return nil, err } - if err := x.ClientStream.CloseSend(); err != nil { + return out, nil +} + +func (c *gobgpApiClient) SoftResetRpki(ctx context.Context, in *SoftResetRpkiRequest, opts ...grpc.CallOption) (*SoftResetRpkiResponse, error) { + out := new(SoftResetRpkiResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/SoftResetRpki", in, out, c.cc, opts...) + if err != nil { return nil, err } - return x, nil + return out, nil } -type GobgpApi_GetVrfsClient interface { - Recv() (*Vrf, error) - grpc.ClientStream +func (c *gobgpApiClient) GetRoa(ctx context.Context, in *GetRoaRequest, opts ...grpc.CallOption) (*GetRoaResponse, error) { + out := new(GetRoaResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetRoa", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil } -type gobgpApiGetVrfsClient struct { - grpc.ClientStream +func (c *gobgpApiClient) AddVrf(ctx context.Context, in *AddVrfRequest, opts ...grpc.CallOption) (*AddVrfResponse, error) { + out := new(AddVrfResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/AddVrf", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (x *gobgpApiGetVrfsClient) Recv() (*Vrf, error) { - m := new(Vrf) - if err := x.ClientStream.RecvMsg(m); err != nil { +func (c *gobgpApiClient) DeleteVrf(ctx context.Context, in *DeleteVrfRequest, opts ...grpc.CallOption) (*DeleteVrfResponse, error) { + out := new(DeleteVrfResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DeleteVrf", in, out, c.cc, opts...) + if err != nil { return nil, err } - return m, nil + return out, nil } -func (c *gobgpApiClient) ModVrf(ctx context.Context, in *ModVrfArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModVrf", in, out, c.cc, opts...) +func (c *gobgpApiClient) GetVrf(ctx context.Context, in *GetVrfRequest, opts ...grpc.CallOption) (*GetVrfResponse, error) { + out := new(GetVrfResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetVrf", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) GetDefinedSet(ctx context.Context, in *DefinedSet, opts ...grpc.CallOption) (*DefinedSet, error) { - out := new(DefinedSet) +func (c *gobgpApiClient) GetDefinedSet(ctx context.Context, in *GetDefinedSetRequest, opts ...grpc.CallOption) (*GetDefinedSetResponse, error) { + out := new(GetDefinedSetResponse) err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetDefinedSet", in, out, c.cc, opts...) if err != nil { return nil, err @@ -1968,49 +2932,35 @@ func (c *gobgpApiClient) GetDefinedSet(ctx context.Context, in *DefinedSet, opts return out, nil } -func (c *gobgpApiClient) GetDefinedSets(ctx context.Context, in *DefinedSet, opts ...grpc.CallOption) (GobgpApi_GetDefinedSetsClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[9], c.cc, "/gobgpapi.GobgpApi/GetDefinedSets", opts...) +func (c *gobgpApiClient) AddDefinedSet(ctx context.Context, in *AddDefinedSetRequest, opts ...grpc.CallOption) (*AddDefinedSetResponse, error) { + out := new(AddDefinedSetResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/AddDefinedSet", in, out, c.cc, opts...) if err != nil { return nil, err } - x := &gobgpApiGetDefinedSetsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type GobgpApi_GetDefinedSetsClient interface { - Recv() (*DefinedSet, error) - grpc.ClientStream -} - -type gobgpApiGetDefinedSetsClient struct { - grpc.ClientStream + return out, nil } -func (x *gobgpApiGetDefinedSetsClient) Recv() (*DefinedSet, error) { - m := new(DefinedSet) - if err := x.ClientStream.RecvMsg(m); err != nil { +func (c *gobgpApiClient) DeleteDefinedSet(ctx context.Context, in *DeleteDefinedSetRequest, opts ...grpc.CallOption) (*DeleteDefinedSetResponse, error) { + out := new(DeleteDefinedSetResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DeleteDefinedSet", in, out, c.cc, opts...) + if err != nil { return nil, err } - return m, nil + return out, nil } -func (c *gobgpApiClient) ModDefinedSet(ctx context.Context, in *ModDefinedSetArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModDefinedSet", in, out, c.cc, opts...) +func (c *gobgpApiClient) ReplaceDefinedSet(ctx context.Context, in *ReplaceDefinedSetRequest, opts ...grpc.CallOption) (*ReplaceDefinedSetResponse, error) { + out := new(ReplaceDefinedSetResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ReplaceDefinedSet", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) GetStatement(ctx context.Context, in *Statement, opts ...grpc.CallOption) (*Statement, error) { - out := new(Statement) +func (c *gobgpApiClient) GetStatement(ctx context.Context, in *GetStatementRequest, opts ...grpc.CallOption) (*GetStatementResponse, error) { + out := new(GetStatementResponse) err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetStatement", in, out, c.cc, opts...) if err != nil { return nil, err @@ -2018,49 +2968,35 @@ func (c *gobgpApiClient) GetStatement(ctx context.Context, in *Statement, opts . return out, nil } -func (c *gobgpApiClient) GetStatements(ctx context.Context, in *Statement, opts ...grpc.CallOption) (GobgpApi_GetStatementsClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[10], c.cc, "/gobgpapi.GobgpApi/GetStatements", opts...) +func (c *gobgpApiClient) AddStatement(ctx context.Context, in *AddStatementRequest, opts ...grpc.CallOption) (*AddStatementResponse, error) { + out := new(AddStatementResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/AddStatement", in, out, c.cc, opts...) if err != nil { return nil, err } - x := &gobgpApiGetStatementsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type GobgpApi_GetStatementsClient interface { - Recv() (*Statement, error) - grpc.ClientStream -} - -type gobgpApiGetStatementsClient struct { - grpc.ClientStream + return out, nil } -func (x *gobgpApiGetStatementsClient) Recv() (*Statement, error) { - m := new(Statement) - if err := x.ClientStream.RecvMsg(m); err != nil { +func (c *gobgpApiClient) DeleteStatement(ctx context.Context, in *DeleteStatementRequest, opts ...grpc.CallOption) (*DeleteStatementResponse, error) { + out := new(DeleteStatementResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DeleteStatement", in, out, c.cc, opts...) + if err != nil { return nil, err } - return m, nil + return out, nil } -func (c *gobgpApiClient) ModStatement(ctx context.Context, in *ModStatementArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModStatement", in, out, c.cc, opts...) +func (c *gobgpApiClient) ReplaceStatement(ctx context.Context, in *ReplaceStatementRequest, opts ...grpc.CallOption) (*ReplaceStatementResponse, error) { + out := new(ReplaceStatementResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ReplaceStatement", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) GetPolicy(ctx context.Context, in *Policy, opts ...grpc.CallOption) (*Policy, error) { - out := new(Policy) +func (c *gobgpApiClient) GetPolicy(ctx context.Context, in *GetPolicyRequest, opts ...grpc.CallOption) (*GetPolicyResponse, error) { + out := new(GetPolicyResponse) err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetPolicy", in, out, c.cc, opts...) if err != nil { return nil, err @@ -2068,59 +3004,63 @@ func (c *gobgpApiClient) GetPolicy(ctx context.Context, in *Policy, opts ...grpc return out, nil } -func (c *gobgpApiClient) GetPolicies(ctx context.Context, in *Policy, opts ...grpc.CallOption) (GobgpApi_GetPoliciesClient, error) { - stream, err := grpc.NewClientStream(ctx, &_GobgpApi_serviceDesc.Streams[11], c.cc, "/gobgpapi.GobgpApi/GetPolicies", opts...) +func (c *gobgpApiClient) AddPolicy(ctx context.Context, in *AddPolicyRequest, opts ...grpc.CallOption) (*AddPolicyResponse, error) { + out := new(AddPolicyResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/AddPolicy", in, out, c.cc, opts...) if err != nil { return nil, err } - x := &gobgpApiGetPoliciesClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil + return out, nil } -type GobgpApi_GetPoliciesClient interface { - Recv() (*Policy, error) - grpc.ClientStream +func (c *gobgpApiClient) DeletePolicy(ctx context.Context, in *DeletePolicyRequest, opts ...grpc.CallOption) (*DeletePolicyResponse, error) { + out := new(DeletePolicyResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DeletePolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil } -type gobgpApiGetPoliciesClient struct { - grpc.ClientStream +func (c *gobgpApiClient) ReplacePolicy(ctx context.Context, in *ReplacePolicyRequest, opts ...grpc.CallOption) (*ReplacePolicyResponse, error) { + out := new(ReplacePolicyResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ReplacePolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (x *gobgpApiGetPoliciesClient) Recv() (*Policy, error) { - m := new(Policy) - if err := x.ClientStream.RecvMsg(m); err != nil { +func (c *gobgpApiClient) GetPolicyAssignment(ctx context.Context, in *GetPolicyAssignmentRequest, opts ...grpc.CallOption) (*GetPolicyAssignmentResponse, error) { + out := new(GetPolicyAssignmentResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetPolicyAssignment", in, out, c.cc, opts...) + if err != nil { return nil, err } - return m, nil + return out, nil } -func (c *gobgpApiClient) ModPolicy(ctx context.Context, in *ModPolicyArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModPolicy", in, out, c.cc, opts...) +func (c *gobgpApiClient) AddPolicyAssignment(ctx context.Context, in *AddPolicyAssignmentRequest, opts ...grpc.CallOption) (*AddPolicyAssignmentResponse, error) { + out := new(AddPolicyAssignmentResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/AddPolicyAssignment", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) GetPolicyAssignment(ctx context.Context, in *PolicyAssignment, opts ...grpc.CallOption) (*PolicyAssignment, error) { - out := new(PolicyAssignment) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/GetPolicyAssignment", in, out, c.cc, opts...) +func (c *gobgpApiClient) DeletePolicyAssignment(ctx context.Context, in *DeletePolicyAssignmentRequest, opts ...grpc.CallOption) (*DeletePolicyAssignmentResponse, error) { + out := new(DeletePolicyAssignmentResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/DeletePolicyAssignment", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -func (c *gobgpApiClient) ModPolicyAssignment(ctx context.Context, in *ModPolicyAssignmentArguments, opts ...grpc.CallOption) (*Error, error) { - out := new(Error) - err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ModPolicyAssignment", in, out, c.cc, opts...) +func (c *gobgpApiClient) ReplacePolicyAssignment(ctx context.Context, in *ReplacePolicyAssignmentRequest, opts ...grpc.CallOption) (*ReplacePolicyAssignmentResponse, error) { + out := new(ReplacePolicyAssignmentResponse) + err := grpc.Invoke(ctx, "/gobgpapi.GobgpApi/ReplacePolicyAssignment", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -2130,328 +3070,331 @@ func (c *gobgpApiClient) ModPolicyAssignment(ctx context.Context, in *ModPolicyA // Server API for GobgpApi service type GobgpApiServer interface { - GetGlobalConfig(context.Context, *Arguments) (*Global, error) - ModGlobalConfig(context.Context, *ModGlobalConfigArguments) (*Error, error) - GetNeighbors(*Arguments, GobgpApi_GetNeighborsServer) error - GetNeighbor(context.Context, *Arguments) (*Peer, error) - ModNeighbor(context.Context, *ModNeighborArguments) (*Error, error) - GetRib(context.Context, *Table) (*Table, error) - Reset(context.Context, *Arguments) (*Error, error) - SoftReset(context.Context, *Arguments) (*Error, error) - SoftResetIn(context.Context, *Arguments) (*Error, error) - SoftResetOut(context.Context, *Arguments) (*Error, error) - Shutdown(context.Context, *Arguments) (*Error, error) - Enable(context.Context, *Arguments) (*Error, error) - Disable(context.Context, *Arguments) (*Error, error) - ModPath(context.Context, *ModPathArguments) (*ModPathResponse, error) - ModPaths(GobgpApi_ModPathsServer) error + StartServer(context.Context, *StartServerRequest) (*StartServerResponse, error) + StopServer(context.Context, *StopServerRequest) (*StopServerResponse, error) + GetServer(context.Context, *GetServerRequest) (*GetServerResponse, error) + AddNeighbor(context.Context, *AddNeighborRequest) (*AddNeighborResponse, error) + DeleteNeighbor(context.Context, *DeleteNeighborRequest) (*DeleteNeighborResponse, error) + GetNeighbor(context.Context, *GetNeighborRequest) (*GetNeighborResponse, error) + ResetNeighbor(context.Context, *ResetNeighborRequest) (*ResetNeighborResponse, error) + SoftResetNeighbor(context.Context, *SoftResetNeighborRequest) (*SoftResetNeighborResponse, error) + ShutdownNeighbor(context.Context, *ShutdownNeighborRequest) (*ShutdownNeighborResponse, error) + EnableNeighbor(context.Context, *EnableNeighborRequest) (*EnableNeighborResponse, error) + DisableNeighbor(context.Context, *DisableNeighborRequest) (*DisableNeighborResponse, error) + GetRib(context.Context, *GetRibRequest) (*GetRibResponse, error) + ValidateRib(context.Context, *ValidateRibRequest) (*ValidateRibResponse, error) + AddPath(context.Context, *AddPathRequest) (*AddPathResponse, error) + DeletePath(context.Context, *DeletePathRequest) (*DeletePathResponse, error) MonitorRib(*Table, GobgpApi_MonitorRibServer) error MonitorBestChanged(*Arguments, GobgpApi_MonitorBestChangedServer) error MonitorPeerState(*Arguments, GobgpApi_MonitorPeerStateServer) error + EnableMrt(context.Context, *EnableMrtRequest) (*EnableMrtResponse, error) + DisableMrt(context.Context, *DisableMrtRequest) (*DisableMrtResponse, error) GetMrt(*MrtArguments, GobgpApi_GetMrtServer) error - ModMrt(context.Context, *ModMrtArguments) (*Error, error) - ModBmp(context.Context, *ModBmpArguments) (*Error, error) - GetRPKI(*Arguments, GobgpApi_GetRPKIServer) error - ModRPKI(context.Context, *ModRpkiArguments) (*Error, error) - GetROA(*Arguments, GobgpApi_GetROAServer) error - GetVrfs(*Arguments, GobgpApi_GetVrfsServer) error - ModVrf(context.Context, *ModVrfArguments) (*Error, error) - GetDefinedSet(context.Context, *DefinedSet) (*DefinedSet, error) - GetDefinedSets(*DefinedSet, GobgpApi_GetDefinedSetsServer) error - ModDefinedSet(context.Context, *ModDefinedSetArguments) (*Error, error) - GetStatement(context.Context, *Statement) (*Statement, error) - GetStatements(*Statement, GobgpApi_GetStatementsServer) error - ModStatement(context.Context, *ModStatementArguments) (*Error, error) - GetPolicy(context.Context, *Policy) (*Policy, error) - GetPolicies(*Policy, GobgpApi_GetPoliciesServer) error - ModPolicy(context.Context, *ModPolicyArguments) (*Error, error) - GetPolicyAssignment(context.Context, *PolicyAssignment) (*PolicyAssignment, error) - ModPolicyAssignment(context.Context, *ModPolicyAssignmentArguments) (*Error, error) + InjectMrt(GobgpApi_InjectMrtServer) error + AddBmp(context.Context, *AddBmpRequest) (*AddBmpResponse, error) + DeleteBmp(context.Context, *DeleteBmpRequest) (*DeleteBmpResponse, error) + GetRpki(context.Context, *GetRpkiRequest) (*GetRpkiResponse, error) + AddRpki(context.Context, *AddRpkiRequest) (*AddRpkiResponse, error) + DeleteRpki(context.Context, *DeleteRpkiRequest) (*DeleteRpkiResponse, error) + EnableRpki(context.Context, *EnableRpkiRequest) (*EnableRpkiResponse, error) + DisableRpki(context.Context, *DisableRpkiRequest) (*DisableRpkiResponse, error) + ResetRpki(context.Context, *ResetRpkiRequest) (*ResetRpkiResponse, error) + SoftResetRpki(context.Context, *SoftResetRpkiRequest) (*SoftResetRpkiResponse, error) + GetRoa(context.Context, *GetRoaRequest) (*GetRoaResponse, error) + AddVrf(context.Context, *AddVrfRequest) (*AddVrfResponse, error) + DeleteVrf(context.Context, *DeleteVrfRequest) (*DeleteVrfResponse, error) + GetVrf(context.Context, *GetVrfRequest) (*GetVrfResponse, error) + GetDefinedSet(context.Context, *GetDefinedSetRequest) (*GetDefinedSetResponse, error) + AddDefinedSet(context.Context, *AddDefinedSetRequest) (*AddDefinedSetResponse, error) + DeleteDefinedSet(context.Context, *DeleteDefinedSetRequest) (*DeleteDefinedSetResponse, error) + ReplaceDefinedSet(context.Context, *ReplaceDefinedSetRequest) (*ReplaceDefinedSetResponse, error) + GetStatement(context.Context, *GetStatementRequest) (*GetStatementResponse, error) + AddStatement(context.Context, *AddStatementRequest) (*AddStatementResponse, error) + DeleteStatement(context.Context, *DeleteStatementRequest) (*DeleteStatementResponse, error) + ReplaceStatement(context.Context, *ReplaceStatementRequest) (*ReplaceStatementResponse, error) + GetPolicy(context.Context, *GetPolicyRequest) (*GetPolicyResponse, error) + AddPolicy(context.Context, *AddPolicyRequest) (*AddPolicyResponse, error) + DeletePolicy(context.Context, *DeletePolicyRequest) (*DeletePolicyResponse, error) + ReplacePolicy(context.Context, *ReplacePolicyRequest) (*ReplacePolicyResponse, error) + GetPolicyAssignment(context.Context, *GetPolicyAssignmentRequest) (*GetPolicyAssignmentResponse, error) + AddPolicyAssignment(context.Context, *AddPolicyAssignmentRequest) (*AddPolicyAssignmentResponse, error) + DeletePolicyAssignment(context.Context, *DeletePolicyAssignmentRequest) (*DeletePolicyAssignmentResponse, error) + ReplacePolicyAssignment(context.Context, *ReplacePolicyAssignmentRequest) (*ReplacePolicyAssignmentResponse, error) } func RegisterGobgpApiServer(s *grpc.Server, srv GobgpApiServer) { s.RegisterService(&_GobgpApi_serviceDesc, srv) } -func _GobgpApi_GetGlobalConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Arguments) +func _GobgpApi_StartServer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartServerRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).GetGlobalConfig(ctx, in) + return srv.(GobgpApiServer).StartServer(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/GetGlobalConfig", + FullMethod: "/gobgpapi.GobgpApi/StartServer", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).GetGlobalConfig(ctx, req.(*Arguments)) + return srv.(GobgpApiServer).StartServer(ctx, req.(*StartServerRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModGlobalConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModGlobalConfigArguments) +func _GobgpApi_StopServer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StopServerRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModGlobalConfig(ctx, in) + return srv.(GobgpApiServer).StopServer(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModGlobalConfig", + FullMethod: "/gobgpapi.GobgpApi/StopServer", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModGlobalConfig(ctx, req.(*ModGlobalConfigArguments)) + return srv.(GobgpApiServer).StopServer(ctx, req.(*StopServerRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetNeighbors_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(Arguments) - if err := stream.RecvMsg(m); err != nil { - return err +func _GobgpApi_GetServer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServerRequest) + if err := dec(in); err != nil { + return nil, err } - return srv.(GobgpApiServer).GetNeighbors(m, &gobgpApiGetNeighborsServer{stream}) -} - -type GobgpApi_GetNeighborsServer interface { - Send(*Peer) error - grpc.ServerStream -} - -type gobgpApiGetNeighborsServer struct { - grpc.ServerStream -} - -func (x *gobgpApiGetNeighborsServer) Send(m *Peer) error { - return x.ServerStream.SendMsg(m) + if interceptor == nil { + return srv.(GobgpApiServer).GetServer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/GetServer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).GetServer(ctx, req.(*GetServerRequest)) + } + return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Arguments) +func _GobgpApi_AddNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddNeighborRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).GetNeighbor(ctx, in) + return srv.(GobgpApiServer).AddNeighbor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/GetNeighbor", + FullMethod: "/gobgpapi.GobgpApi/AddNeighbor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).GetNeighbor(ctx, req.(*Arguments)) + return srv.(GobgpApiServer).AddNeighbor(ctx, req.(*AddNeighborRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModNeighborArguments) +func _GobgpApi_DeleteNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteNeighborRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModNeighbor(ctx, in) + return srv.(GobgpApiServer).DeleteNeighbor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModNeighbor", + FullMethod: "/gobgpapi.GobgpApi/DeleteNeighbor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModNeighbor(ctx, req.(*ModNeighborArguments)) + return srv.(GobgpApiServer).DeleteNeighbor(ctx, req.(*DeleteNeighborRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetRib_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Table) +func _GobgpApi_GetNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNeighborRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).GetRib(ctx, in) + return srv.(GobgpApiServer).GetNeighbor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/GetRib", + FullMethod: "/gobgpapi.GobgpApi/GetNeighbor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).GetRib(ctx, req.(*Table)) + return srv.(GobgpApiServer).GetNeighbor(ctx, req.(*GetNeighborRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_Reset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Arguments) +func _GobgpApi_ResetNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResetNeighborRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).Reset(ctx, in) + return srv.(GobgpApiServer).ResetNeighbor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/Reset", + FullMethod: "/gobgpapi.GobgpApi/ResetNeighbor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).Reset(ctx, req.(*Arguments)) + return srv.(GobgpApiServer).ResetNeighbor(ctx, req.(*ResetNeighborRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_SoftReset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Arguments) +func _GobgpApi_SoftResetNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SoftResetNeighborRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).SoftReset(ctx, in) + return srv.(GobgpApiServer).SoftResetNeighbor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/SoftReset", + FullMethod: "/gobgpapi.GobgpApi/SoftResetNeighbor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).SoftReset(ctx, req.(*Arguments)) + return srv.(GobgpApiServer).SoftResetNeighbor(ctx, req.(*SoftResetNeighborRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_SoftResetIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Arguments) +func _GobgpApi_ShutdownNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ShutdownNeighborRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).SoftResetIn(ctx, in) + return srv.(GobgpApiServer).ShutdownNeighbor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/SoftResetIn", + FullMethod: "/gobgpapi.GobgpApi/ShutdownNeighbor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).SoftResetIn(ctx, req.(*Arguments)) + return srv.(GobgpApiServer).ShutdownNeighbor(ctx, req.(*ShutdownNeighborRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_SoftResetOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Arguments) +func _GobgpApi_EnableNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EnableNeighborRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).SoftResetOut(ctx, in) + return srv.(GobgpApiServer).EnableNeighbor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/SoftResetOut", + FullMethod: "/gobgpapi.GobgpApi/EnableNeighbor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).SoftResetOut(ctx, req.(*Arguments)) + return srv.(GobgpApiServer).EnableNeighbor(ctx, req.(*EnableNeighborRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_Shutdown_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Arguments) +func _GobgpApi_DisableNeighbor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DisableNeighborRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).Shutdown(ctx, in) + return srv.(GobgpApiServer).DisableNeighbor(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/Shutdown", + FullMethod: "/gobgpapi.GobgpApi/DisableNeighbor", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).Shutdown(ctx, req.(*Arguments)) + return srv.(GobgpApiServer).DisableNeighbor(ctx, req.(*DisableNeighborRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_Enable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Arguments) +func _GobgpApi_GetRib_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRibRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).Enable(ctx, in) + return srv.(GobgpApiServer).GetRib(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/Enable", + FullMethod: "/gobgpapi.GobgpApi/GetRib", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).Enable(ctx, req.(*Arguments)) + return srv.(GobgpApiServer).GetRib(ctx, req.(*GetRibRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_Disable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Arguments) +func _GobgpApi_ValidateRib_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ValidateRibRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).Disable(ctx, in) + return srv.(GobgpApiServer).ValidateRib(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/Disable", + FullMethod: "/gobgpapi.GobgpApi/ValidateRib", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).Disable(ctx, req.(*Arguments)) + return srv.(GobgpApiServer).ValidateRib(ctx, req.(*ValidateRibRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModPath_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModPathArguments) +func _GobgpApi_AddPath_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddPathRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModPath(ctx, in) + return srv.(GobgpApiServer).AddPath(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModPath", + FullMethod: "/gobgpapi.GobgpApi/AddPath", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModPath(ctx, req.(*ModPathArguments)) + return srv.(GobgpApiServer).AddPath(ctx, req.(*AddPathRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModPaths_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(GobgpApiServer).ModPaths(&gobgpApiModPathsServer{stream}) -} - -type GobgpApi_ModPathsServer interface { - SendAndClose(*Error) error - Recv() (*ModPathsArguments, error) - grpc.ServerStream -} - -type gobgpApiModPathsServer struct { - grpc.ServerStream -} - -func (x *gobgpApiModPathsServer) SendAndClose(m *Error) error { - return x.ServerStream.SendMsg(m) -} - -func (x *gobgpApiModPathsServer) Recv() (*ModPathsArguments, error) { - m := new(ModPathsArguments) - if err := x.ServerStream.RecvMsg(m); err != nil { +func _GobgpApi_DeletePath_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePathRequest) + if err := dec(in); err != nil { return nil, err } - return m, nil + if interceptor == nil { + return srv.(GobgpApiServer).DeletePath(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/DeletePath", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).DeletePath(ctx, req.(*DeletePathRequest)) + } + return interceptor(ctx, in, info, handler) } func _GobgpApi_MonitorRib_Handler(srv interface{}, stream grpc.ServerStream) error { @@ -2517,6 +3460,42 @@ func (x *gobgpApiMonitorPeerStateServer) Send(m *Peer) error { return x.ServerStream.SendMsg(m) } +func _GobgpApi_EnableMrt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EnableMrtRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).EnableMrt(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/EnableMrt", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).EnableMrt(ctx, req.(*EnableMrtRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GobgpApi_DisableMrt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DisableMrtRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).DisableMrt(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/DisableMrt", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).DisableMrt(ctx, req.(*DisableMrtRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _GobgpApi_GetMrt_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(MrtArguments) if err := stream.RecvMsg(m); err != nil { @@ -2538,143 +3517,268 @@ func (x *gobgpApiGetMrtServer) Send(m *MrtMessage) error { return x.ServerStream.SendMsg(m) } -func _GobgpApi_ModMrt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModMrtArguments) +func _GobgpApi_InjectMrt_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(GobgpApiServer).InjectMrt(&gobgpApiInjectMrtServer{stream}) +} + +type GobgpApi_InjectMrtServer interface { + SendAndClose(*InjectMrtResponse) error + Recv() (*InjectMrtRequest, error) + grpc.ServerStream +} + +type gobgpApiInjectMrtServer struct { + grpc.ServerStream +} + +func (x *gobgpApiInjectMrtServer) SendAndClose(m *InjectMrtResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *gobgpApiInjectMrtServer) Recv() (*InjectMrtRequest, error) { + m := new(InjectMrtRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _GobgpApi_AddBmp_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddBmpRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModMrt(ctx, in) + return srv.(GobgpApiServer).AddBmp(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModMrt", + FullMethod: "/gobgpapi.GobgpApi/AddBmp", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModMrt(ctx, req.(*ModMrtArguments)) + return srv.(GobgpApiServer).AddBmp(ctx, req.(*AddBmpRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModBmp_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModBmpArguments) +func _GobgpApi_DeleteBmp_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteBmpRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModBmp(ctx, in) + return srv.(GobgpApiServer).DeleteBmp(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModBmp", + FullMethod: "/gobgpapi.GobgpApi/DeleteBmp", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModBmp(ctx, req.(*ModBmpArguments)) + return srv.(GobgpApiServer).DeleteBmp(ctx, req.(*DeleteBmpRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetRPKI_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(Arguments) - if err := stream.RecvMsg(m); err != nil { - return err +func _GobgpApi_GetRpki_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRpkiRequest) + if err := dec(in); err != nil { + return nil, err } - return srv.(GobgpApiServer).GetRPKI(m, &gobgpApiGetRPKIServer{stream}) -} - -type GobgpApi_GetRPKIServer interface { - Send(*RPKI) error - grpc.ServerStream -} - -type gobgpApiGetRPKIServer struct { - grpc.ServerStream -} - -func (x *gobgpApiGetRPKIServer) Send(m *RPKI) error { - return x.ServerStream.SendMsg(m) + if interceptor == nil { + return srv.(GobgpApiServer).GetRpki(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/GetRpki", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).GetRpki(ctx, req.(*GetRpkiRequest)) + } + return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModRPKI_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModRpkiArguments) +func _GobgpApi_AddRpki_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddRpkiRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModRPKI(ctx, in) + return srv.(GobgpApiServer).AddRpki(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModRPKI", + FullMethod: "/gobgpapi.GobgpApi/AddRpki", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModRPKI(ctx, req.(*ModRpkiArguments)) + return srv.(GobgpApiServer).AddRpki(ctx, req.(*AddRpkiRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetROA_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(Arguments) - if err := stream.RecvMsg(m); err != nil { - return err +func _GobgpApi_DeleteRpki_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteRpkiRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).DeleteRpki(ctx, in) } - return srv.(GobgpApiServer).GetROA(m, &gobgpApiGetROAServer{stream}) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/DeleteRpki", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).DeleteRpki(ctx, req.(*DeleteRpkiRequest)) + } + return interceptor(ctx, in, info, handler) } -type GobgpApi_GetROAServer interface { - Send(*ROA) error - grpc.ServerStream +func _GobgpApi_EnableRpki_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EnableRpkiRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).EnableRpki(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/EnableRpki", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).EnableRpki(ctx, req.(*EnableRpkiRequest)) + } + return interceptor(ctx, in, info, handler) } -type gobgpApiGetROAServer struct { - grpc.ServerStream +func _GobgpApi_DisableRpki_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DisableRpkiRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).DisableRpki(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/DisableRpki", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).DisableRpki(ctx, req.(*DisableRpkiRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *gobgpApiGetROAServer) Send(m *ROA) error { - return x.ServerStream.SendMsg(m) +func _GobgpApi_ResetRpki_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResetRpkiRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).ResetRpki(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/ResetRpki", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).ResetRpki(ctx, req.(*ResetRpkiRequest)) + } + return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetVrfs_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(Arguments) - if err := stream.RecvMsg(m); err != nil { - return err +func _GobgpApi_SoftResetRpki_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SoftResetRpkiRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).SoftResetRpki(ctx, in) } - return srv.(GobgpApiServer).GetVrfs(m, &gobgpApiGetVrfsServer{stream}) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/SoftResetRpki", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).SoftResetRpki(ctx, req.(*SoftResetRpkiRequest)) + } + return interceptor(ctx, in, info, handler) } -type GobgpApi_GetVrfsServer interface { - Send(*Vrf) error - grpc.ServerStream +func _GobgpApi_GetRoa_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRoaRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).GetRoa(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/GetRoa", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).GetRoa(ctx, req.(*GetRoaRequest)) + } + return interceptor(ctx, in, info, handler) } -type gobgpApiGetVrfsServer struct { - grpc.ServerStream +func _GobgpApi_AddVrf_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddVrfRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).AddVrf(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/AddVrf", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).AddVrf(ctx, req.(*AddVrfRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *gobgpApiGetVrfsServer) Send(m *Vrf) error { - return x.ServerStream.SendMsg(m) +func _GobgpApi_DeleteVrf_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVrfRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).DeleteVrf(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/DeleteVrf", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).DeleteVrf(ctx, req.(*DeleteVrfRequest)) + } + return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModVrf_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModVrfArguments) +func _GobgpApi_GetVrf_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVrfRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModVrf(ctx, in) + return srv.(GobgpApiServer).GetVrf(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModVrf", + FullMethod: "/gobgpapi.GobgpApi/GetVrf", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModVrf(ctx, req.(*ModVrfArguments)) + return srv.(GobgpApiServer).GetVrf(ctx, req.(*GetVrfRequest)) } return interceptor(ctx, in, info, handler) } func _GobgpApi_GetDefinedSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DefinedSet) + in := new(GetDefinedSetRequest) if err := dec(in); err != nil { return nil, err } @@ -2686,52 +3790,67 @@ func _GobgpApi_GetDefinedSet_Handler(srv interface{}, ctx context.Context, dec f FullMethod: "/gobgpapi.GobgpApi/GetDefinedSet", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).GetDefinedSet(ctx, req.(*DefinedSet)) + return srv.(GobgpApiServer).GetDefinedSet(ctx, req.(*GetDefinedSetRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetDefinedSets_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(DefinedSet) - if err := stream.RecvMsg(m); err != nil { - return err +func _GobgpApi_AddDefinedSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddDefinedSetRequest) + if err := dec(in); err != nil { + return nil, err } - return srv.(GobgpApiServer).GetDefinedSets(m, &gobgpApiGetDefinedSetsServer{stream}) -} - -type GobgpApi_GetDefinedSetsServer interface { - Send(*DefinedSet) error - grpc.ServerStream -} - -type gobgpApiGetDefinedSetsServer struct { - grpc.ServerStream + if interceptor == nil { + return srv.(GobgpApiServer).AddDefinedSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/AddDefinedSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).AddDefinedSet(ctx, req.(*AddDefinedSetRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *gobgpApiGetDefinedSetsServer) Send(m *DefinedSet) error { - return x.ServerStream.SendMsg(m) +func _GobgpApi_DeleteDefinedSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDefinedSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).DeleteDefinedSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/DeleteDefinedSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).DeleteDefinedSet(ctx, req.(*DeleteDefinedSetRequest)) + } + return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModDefinedSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModDefinedSetArguments) +func _GobgpApi_ReplaceDefinedSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReplaceDefinedSetRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModDefinedSet(ctx, in) + return srv.(GobgpApiServer).ReplaceDefinedSet(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModDefinedSet", + FullMethod: "/gobgpapi.GobgpApi/ReplaceDefinedSet", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModDefinedSet(ctx, req.(*ModDefinedSetArguments)) + return srv.(GobgpApiServer).ReplaceDefinedSet(ctx, req.(*ReplaceDefinedSetRequest)) } return interceptor(ctx, in, info, handler) } func _GobgpApi_GetStatement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Statement) + in := new(GetStatementRequest) if err := dec(in); err != nil { return nil, err } @@ -2743,52 +3862,67 @@ func _GobgpApi_GetStatement_Handler(srv interface{}, ctx context.Context, dec fu FullMethod: "/gobgpapi.GobgpApi/GetStatement", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).GetStatement(ctx, req.(*Statement)) + return srv.(GobgpApiServer).GetStatement(ctx, req.(*GetStatementRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetStatements_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(Statement) - if err := stream.RecvMsg(m); err != nil { - return err +func _GobgpApi_AddStatement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddStatementRequest) + if err := dec(in); err != nil { + return nil, err } - return srv.(GobgpApiServer).GetStatements(m, &gobgpApiGetStatementsServer{stream}) -} - -type GobgpApi_GetStatementsServer interface { - Send(*Statement) error - grpc.ServerStream -} - -type gobgpApiGetStatementsServer struct { - grpc.ServerStream + if interceptor == nil { + return srv.(GobgpApiServer).AddStatement(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/AddStatement", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).AddStatement(ctx, req.(*AddStatementRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *gobgpApiGetStatementsServer) Send(m *Statement) error { - return x.ServerStream.SendMsg(m) +func _GobgpApi_DeleteStatement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteStatementRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).DeleteStatement(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/DeleteStatement", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).DeleteStatement(ctx, req.(*DeleteStatementRequest)) + } + return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModStatement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModStatementArguments) +func _GobgpApi_ReplaceStatement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReplaceStatementRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModStatement(ctx, in) + return srv.(GobgpApiServer).ReplaceStatement(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModStatement", + FullMethod: "/gobgpapi.GobgpApi/ReplaceStatement", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModStatement(ctx, req.(*ModStatementArguments)) + return srv.(GobgpApiServer).ReplaceStatement(ctx, req.(*ReplaceStatementRequest)) } return interceptor(ctx, in, info, handler) } func _GobgpApi_GetPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Policy) + in := new(GetPolicyRequest) if err := dec(in); err != nil { return nil, err } @@ -2800,82 +3934,133 @@ func _GobgpApi_GetPolicy_Handler(srv interface{}, ctx context.Context, dec func( FullMethod: "/gobgpapi.GobgpApi/GetPolicy", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).GetPolicy(ctx, req.(*Policy)) + return srv.(GobgpApiServer).GetPolicy(ctx, req.(*GetPolicyRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetPolicies_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(Policy) - if err := stream.RecvMsg(m); err != nil { - return err +func _GobgpApi_AddPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).AddPolicy(ctx, in) } - return srv.(GobgpApiServer).GetPolicies(m, &gobgpApiGetPoliciesServer{stream}) + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/AddPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).AddPolicy(ctx, req.(*AddPolicyRequest)) + } + return interceptor(ctx, in, info, handler) } -type GobgpApi_GetPoliciesServer interface { - Send(*Policy) error - grpc.ServerStream +func _GobgpApi_DeletePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).DeletePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/DeletePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).DeletePolicy(ctx, req.(*DeletePolicyRequest)) + } + return interceptor(ctx, in, info, handler) } -type gobgpApiGetPoliciesServer struct { - grpc.ServerStream +func _GobgpApi_ReplacePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReplacePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).ReplacePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/ReplacePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).ReplacePolicy(ctx, req.(*ReplacePolicyRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *gobgpApiGetPoliciesServer) Send(m *Policy) error { - return x.ServerStream.SendMsg(m) +func _GobgpApi_GetPolicyAssignment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPolicyAssignmentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GobgpApiServer).GetPolicyAssignment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gobgpapi.GobgpApi/GetPolicyAssignment", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GobgpApiServer).GetPolicyAssignment(ctx, req.(*GetPolicyAssignmentRequest)) + } + return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModPolicyArguments) +func _GobgpApi_AddPolicyAssignment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddPolicyAssignmentRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModPolicy(ctx, in) + return srv.(GobgpApiServer).AddPolicyAssignment(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModPolicy", + FullMethod: "/gobgpapi.GobgpApi/AddPolicyAssignment", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModPolicy(ctx, req.(*ModPolicyArguments)) + return srv.(GobgpApiServer).AddPolicyAssignment(ctx, req.(*AddPolicyAssignmentRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_GetPolicyAssignment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PolicyAssignment) +func _GobgpApi_DeletePolicyAssignment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePolicyAssignmentRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).GetPolicyAssignment(ctx, in) + return srv.(GobgpApiServer).DeletePolicyAssignment(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/GetPolicyAssignment", + FullMethod: "/gobgpapi.GobgpApi/DeletePolicyAssignment", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).GetPolicyAssignment(ctx, req.(*PolicyAssignment)) + return srv.(GobgpApiServer).DeletePolicyAssignment(ctx, req.(*DeletePolicyAssignmentRequest)) } return interceptor(ctx, in, info, handler) } -func _GobgpApi_ModPolicyAssignment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ModPolicyAssignmentArguments) +func _GobgpApi_ReplacePolicyAssignment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReplacePolicyAssignmentRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(GobgpApiServer).ModPolicyAssignment(ctx, in) + return srv.(GobgpApiServer).ReplacePolicyAssignment(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gobgpapi.GobgpApi/ModPolicyAssignment", + FullMethod: "/gobgpapi.GobgpApi/ReplacePolicyAssignment", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GobgpApiServer).ModPolicyAssignment(ctx, req.(*ModPolicyAssignmentArguments)) + return srv.(GobgpApiServer).ReplacePolicyAssignment(ctx, req.(*ReplacePolicyAssignmentRequest)) } return interceptor(ctx, in, info, handler) } @@ -2885,117 +4070,191 @@ var _GobgpApi_serviceDesc = grpc.ServiceDesc{ HandlerType: (*GobgpApiServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "GetGlobalConfig", - Handler: _GobgpApi_GetGlobalConfig_Handler, + MethodName: "StartServer", + Handler: _GobgpApi_StartServer_Handler, + }, + { + MethodName: "StopServer", + Handler: _GobgpApi_StopServer_Handler, }, { - MethodName: "ModGlobalConfig", - Handler: _GobgpApi_ModGlobalConfig_Handler, + MethodName: "GetServer", + Handler: _GobgpApi_GetServer_Handler, + }, + { + MethodName: "AddNeighbor", + Handler: _GobgpApi_AddNeighbor_Handler, + }, + { + MethodName: "DeleteNeighbor", + Handler: _GobgpApi_DeleteNeighbor_Handler, }, { MethodName: "GetNeighbor", Handler: _GobgpApi_GetNeighbor_Handler, }, { - MethodName: "ModNeighbor", - Handler: _GobgpApi_ModNeighbor_Handler, + MethodName: "ResetNeighbor", + Handler: _GobgpApi_ResetNeighbor_Handler, + }, + { + MethodName: "SoftResetNeighbor", + Handler: _GobgpApi_SoftResetNeighbor_Handler, + }, + { + MethodName: "ShutdownNeighbor", + Handler: _GobgpApi_ShutdownNeighbor_Handler, + }, + { + MethodName: "EnableNeighbor", + Handler: _GobgpApi_EnableNeighbor_Handler, + }, + { + MethodName: "DisableNeighbor", + Handler: _GobgpApi_DisableNeighbor_Handler, }, { MethodName: "GetRib", Handler: _GobgpApi_GetRib_Handler, }, { - MethodName: "Reset", - Handler: _GobgpApi_Reset_Handler, + MethodName: "ValidateRib", + Handler: _GobgpApi_ValidateRib_Handler, + }, + { + MethodName: "AddPath", + Handler: _GobgpApi_AddPath_Handler, + }, + { + MethodName: "DeletePath", + Handler: _GobgpApi_DeletePath_Handler, + }, + { + MethodName: "EnableMrt", + Handler: _GobgpApi_EnableMrt_Handler, }, { - MethodName: "SoftReset", - Handler: _GobgpApi_SoftReset_Handler, + MethodName: "DisableMrt", + Handler: _GobgpApi_DisableMrt_Handler, }, { - MethodName: "SoftResetIn", - Handler: _GobgpApi_SoftResetIn_Handler, + MethodName: "AddBmp", + Handler: _GobgpApi_AddBmp_Handler, }, { - MethodName: "SoftResetOut", - Handler: _GobgpApi_SoftResetOut_Handler, + MethodName: "DeleteBmp", + Handler: _GobgpApi_DeleteBmp_Handler, }, { - MethodName: "Shutdown", - Handler: _GobgpApi_Shutdown_Handler, + MethodName: "GetRpki", + Handler: _GobgpApi_GetRpki_Handler, }, { - MethodName: "Enable", - Handler: _GobgpApi_Enable_Handler, + MethodName: "AddRpki", + Handler: _GobgpApi_AddRpki_Handler, }, { - MethodName: "Disable", - Handler: _GobgpApi_Disable_Handler, + MethodName: "DeleteRpki", + Handler: _GobgpApi_DeleteRpki_Handler, }, { - MethodName: "ModPath", - Handler: _GobgpApi_ModPath_Handler, + MethodName: "EnableRpki", + Handler: _GobgpApi_EnableRpki_Handler, }, { - MethodName: "ModMrt", - Handler: _GobgpApi_ModMrt_Handler, + MethodName: "DisableRpki", + Handler: _GobgpApi_DisableRpki_Handler, }, { - MethodName: "ModBmp", - Handler: _GobgpApi_ModBmp_Handler, + MethodName: "ResetRpki", + Handler: _GobgpApi_ResetRpki_Handler, }, { - MethodName: "ModRPKI", - Handler: _GobgpApi_ModRPKI_Handler, + MethodName: "SoftResetRpki", + Handler: _GobgpApi_SoftResetRpki_Handler, }, { - MethodName: "ModVrf", - Handler: _GobgpApi_ModVrf_Handler, + MethodName: "GetRoa", + Handler: _GobgpApi_GetRoa_Handler, + }, + { + MethodName: "AddVrf", + Handler: _GobgpApi_AddVrf_Handler, + }, + { + MethodName: "DeleteVrf", + Handler: _GobgpApi_DeleteVrf_Handler, + }, + { + MethodName: "GetVrf", + Handler: _GobgpApi_GetVrf_Handler, }, { MethodName: "GetDefinedSet", Handler: _GobgpApi_GetDefinedSet_Handler, }, { - MethodName: "ModDefinedSet", - Handler: _GobgpApi_ModDefinedSet_Handler, + MethodName: "AddDefinedSet", + Handler: _GobgpApi_AddDefinedSet_Handler, + }, + { + MethodName: "DeleteDefinedSet", + Handler: _GobgpApi_DeleteDefinedSet_Handler, + }, + { + MethodName: "ReplaceDefinedSet", + Handler: _GobgpApi_ReplaceDefinedSet_Handler, }, { MethodName: "GetStatement", Handler: _GobgpApi_GetStatement_Handler, }, { - MethodName: "ModStatement", - Handler: _GobgpApi_ModStatement_Handler, + MethodName: "AddStatement", + Handler: _GobgpApi_AddStatement_Handler, + }, + { + MethodName: "DeleteStatement", + Handler: _GobgpApi_DeleteStatement_Handler, + }, + { + MethodName: "ReplaceStatement", + Handler: _GobgpApi_ReplaceStatement_Handler, }, { MethodName: "GetPolicy", Handler: _GobgpApi_GetPolicy_Handler, }, { - MethodName: "ModPolicy", - Handler: _GobgpApi_ModPolicy_Handler, + MethodName: "AddPolicy", + Handler: _GobgpApi_AddPolicy_Handler, + }, + { + MethodName: "DeletePolicy", + Handler: _GobgpApi_DeletePolicy_Handler, + }, + { + MethodName: "ReplacePolicy", + Handler: _GobgpApi_ReplacePolicy_Handler, }, { MethodName: "GetPolicyAssignment", Handler: _GobgpApi_GetPolicyAssignment_Handler, }, { - MethodName: "ModPolicyAssignment", - Handler: _GobgpApi_ModPolicyAssignment_Handler, + MethodName: "AddPolicyAssignment", + Handler: _GobgpApi_AddPolicyAssignment_Handler, }, - }, - Streams: []grpc.StreamDesc{ { - StreamName: "GetNeighbors", - Handler: _GobgpApi_GetNeighbors_Handler, - ServerStreams: true, + MethodName: "DeletePolicyAssignment", + Handler: _GobgpApi_DeletePolicyAssignment_Handler, }, { - StreamName: "ModPaths", - Handler: _GobgpApi_ModPaths_Handler, - ClientStreams: true, + MethodName: "ReplacePolicyAssignment", + Handler: _GobgpApi_ReplacePolicyAssignment_Handler, }, + }, + Streams: []grpc.StreamDesc{ { StreamName: "MonitorRib", Handler: _GobgpApi_MonitorRib_Handler, @@ -3017,305 +4276,340 @@ var _GobgpApi_serviceDesc = grpc.ServiceDesc{ ServerStreams: true, }, { - StreamName: "GetRPKI", - Handler: _GobgpApi_GetRPKI_Handler, - ServerStreams: true, - }, - { - StreamName: "GetROA", - Handler: _GobgpApi_GetROA_Handler, - ServerStreams: true, - }, - { - StreamName: "GetVrfs", - Handler: _GobgpApi_GetVrfs_Handler, - ServerStreams: true, - }, - { - StreamName: "GetDefinedSets", - Handler: _GobgpApi_GetDefinedSets_Handler, - ServerStreams: true, - }, - { - StreamName: "GetStatements", - Handler: _GobgpApi_GetStatements_Handler, - ServerStreams: true, - }, - { - StreamName: "GetPolicies", - Handler: _GobgpApi_GetPolicies_Handler, - ServerStreams: true, + StreamName: "InjectMrt", + Handler: _GobgpApi_InjectMrt_Handler, + ClientStreams: true, }, }, } var fileDescriptor0 = []byte{ - // 4272 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x7b, 0xcd, 0x73, 0x1b, 0x47, - 0x76, 0xb8, 0x41, 0x7c, 0x10, 0x78, 0x00, 0x48, 0x70, 0x44, 0xc9, 0x14, 0xd7, 0xeb, 0xf5, 0x6f, - 0x7e, 0x6b, 0xaf, 0xc5, 0xb5, 0x2d, 0x5b, 0xb6, 0xe9, 0x8d, 0xd6, 0xbb, 0x09, 0x04, 0x42, 0x12, - 0xd6, 0x24, 0x01, 0x35, 0x21, 0xc5, 0xce, 0x65, 0x32, 0x04, 0x06, 0xe4, 0x94, 0x00, 0xcc, 0x78, - 0x66, 0xa0, 0x8f, 0x54, 0x25, 0x87, 0xcd, 0x31, 0x95, 0x3f, 0x20, 0x55, 0x9b, 0x5b, 0x4e, 0xf9, - 0x07, 0x52, 0xb9, 0x27, 0x55, 0x39, 0xe6, 0x9a, 0x4b, 0x72, 0x48, 0xe5, 0x90, 0x3f, 0x20, 0x55, - 0x39, 0xe6, 0xbd, 0xd7, 0x3d, 0x33, 0x3d, 0xc0, 0x88, 0xa2, 0x96, 0x5b, 0xa9, 0xca, 0x85, 0x98, - 0x7e, 0x5f, 0xfd, 0xba, 0xfb, 0x7d, 0xf5, 0x07, 0xa1, 0x7e, 0xe6, 0x9d, 0x9e, 0xf9, 0x9f, 0xf8, - 0x81, 0x17, 0x79, 0x46, 0x95, 0x1b, 0xb6, 0xef, 0x9a, 0x53, 0x28, 0x77, 0x83, 0xc0, 0x0b, 0x8c, - 0x8f, 0xa1, 0x34, 0xf2, 0xc6, 0xce, 0x4e, 0xe1, 0xbd, 0xc2, 0x87, 0x1b, 0x77, 0x6e, 0x7e, 0x12, - 0x53, 0x7c, 0xc2, 0x68, 0xf9, 0xb7, 0x83, 0x04, 0x82, 0xc9, 0x8c, 0x16, 0x14, 0x67, 0xe1, 0xd9, - 0xce, 0x1a, 0x52, 0xd7, 0x04, 0x7d, 0x9a, 0x26, 0xd4, 0x12, 0x22, 0xa3, 0x0e, 0xeb, 0x27, 0x8f, - 0x3b, 0x9d, 0xee, 0xc9, 0x49, 0xeb, 0x2d, 0xa3, 0x0a, 0xa5, 0xfb, 0xed, 0xde, 0x61, 0xab, 0x60, - 0x9e, 0x41, 0xad, 0x1d, 0x9c, 0x2d, 0x66, 0xce, 0x3c, 0x0a, 0x8d, 0x4f, 0xa0, 0x1a, 0x38, 0xa1, - 0xb7, 0x08, 0x46, 0x71, 0xaf, 0x46, 0xda, 0xab, 0x50, 0x18, 0x91, 0xd0, 0x18, 0x37, 0xa0, 0x32, - 0xb1, 0x67, 0xee, 0xf4, 0x25, 0xf7, 0xda, 0x14, 0xaa, 0x65, 0x18, 0x50, 0x9a, 0xdb, 0x33, 0x67, - 0xa7, 0xc8, 0xba, 0xf0, 0xb7, 0xf9, 0x2f, 0x05, 0x68, 0x1d, 0x79, 0xe3, 0x81, 0x1d, 0x9d, 0xa7, - 0x1d, 0x7e, 0x06, 0x35, 0xcf, 0x77, 0x02, 0x3b, 0x72, 0xbd, 0xb9, 0xea, 0xf1, 0x5a, 0xda, 0x63, - 0x3f, 0x46, 0x89, 0x94, 0x2a, 0xa3, 0xe3, 0xda, 0x25, 0x74, 0xcc, 0xd1, 0xc5, 0x30, 0xa1, 0xe4, - 0xa3, 0x1e, 0x3b, 0x25, 0x84, 0xd5, 0xef, 0x6c, 0xa4, 0xfc, 0xa4, 0x9d, 0x60, 0x1c, 0xf1, 0x2d, - 0x16, 0xee, 0x78, 0xa7, 0x8c, 0x34, 0x0d, 0xc1, 0xdf, 0xda, 0x78, 0x2b, 0xfa, 0x78, 0xcd, 0xf7, - 0x61, 0x53, 0x0d, 0x0d, 0x15, 0xf0, 0xbd, 0x79, 0xe8, 0x24, 0xec, 0x85, 0x94, 0xdd, 0xfc, 0x53, - 0xd8, 0x52, 0x64, 0xe1, 0x6f, 0x3f, 0xe7, 0xf1, 0x78, 0xd6, 0xb4, 0xf1, 0xfc, 0x18, 0xca, 0xa4, - 0x73, 0x88, 0x83, 0x2c, 0xe6, 0x0c, 0x48, 0x22, 0xcd, 0x19, 0x6c, 0x63, 0xf7, 0xc7, 0x8e, 0x7b, - 0x76, 0x7e, 0xea, 0x05, 0x57, 0x5a, 0x04, 0x9a, 0x40, 0xc7, 0x09, 0x58, 0x89, 0x6c, 0x7f, 0x08, - 0x15, 0x8c, 0x33, 0xff, 0xba, 0x00, 0x8d, 0xa3, 0x20, 0xfa, 0xdd, 0x5b, 0xd7, 0x2e, 0x54, 0xdd, - 0x79, 0xe4, 0x04, 0xcf, 0xec, 0x29, 0xaf, 0x6a, 0x49, 0x24, 0x6d, 0xe3, 0x16, 0xb4, 0xe6, 0x6a, - 0x80, 0x96, 0x3d, 0x1e, 0xa3, 0xac, 0x90, 0x57, 0xb9, 0x26, 0x36, 0x63, 0x78, 0x5b, 0x82, 0xcd, - 0xbf, 0x2a, 0xf0, 0xaa, 0x65, 0x54, 0xfc, 0x2d, 0xa6, 0xe2, 0x07, 0x50, 0x1b, 0x2f, 0x66, 0xbe, - 0x15, 0xbd, 0xf4, 0xe5, 0xa2, 0x94, 0x45, 0x95, 0x00, 0x43, 0x6c, 0x93, 0xaa, 0x13, 0x77, 0xea, - 0x68, 0x06, 0x98, 0xb4, 0x33, 0xc3, 0x28, 0x65, 0x87, 0x61, 0xfe, 0xbb, 0xd4, 0xed, 0xde, 0xcc, - 0xbf, 0x92, 0x6e, 0x3b, 0xb0, 0x1e, 0x4f, 0x82, 0x34, 0x97, 0xb8, 0x49, 0x56, 0xe4, 0x7b, 0x41, - 0xc4, 0x4a, 0x35, 0x05, 0x7f, 0x1b, 0xbf, 0x84, 0x12, 0x0f, 0xa2, 0xc4, 0xb2, 0xf7, 0x52, 0xd9, - 0x4b, 0x9a, 0x60, 0x7b, 0xee, 0x46, 0x5e, 0xe0, 0xce, 0xcf, 0x06, 0xde, 0xd4, 0x1d, 0xbd, 0x14, - 0xcc, 0x67, 0xde, 0x26, 0x07, 0xcf, 0x62, 0x8c, 0x75, 0x28, 0x0e, 0x44, 0x57, 0x46, 0x9c, 0x41, - 0xff, 0x64, 0xd8, 0x2a, 0xd0, 0xd7, 0xbd, 0xfe, 0xf0, 0x61, 0x6b, 0xcd, 0xfc, 0x7b, 0x19, 0x12, - 0x84, 0xff, 0xd4, 0xbd, 0xd2, 0x30, 0x31, 0xf2, 0xd9, 0xe1, 0x5c, 0x59, 0x09, 0x7d, 0xea, 0x03, - 0x2f, 0xe6, 0x0f, 0xbc, 0xa4, 0x0d, 0x1c, 0x57, 0x62, 0xea, 0x4e, 0x9c, 0xc8, 0xc5, 0x55, 0x22, - 0x77, 0x2f, 0x8a, 0xa4, 0x4d, 0x46, 0xe8, 0x07, 0xce, 0xc4, 0x7d, 0xc1, 0x2e, 0x5f, 0x13, 0xaa, - 0x65, 0x3a, 0xbc, 0x40, 0x4f, 0x82, 0xc9, 0x95, 0x34, 0xff, 0x11, 0x14, 0x9f, 0x05, 0x13, 0xe5, - 0x46, 0xcd, 0x94, 0x18, 0xe5, 0x0a, 0xc2, 0x98, 0x21, 0xdc, 0xc0, 0x6e, 0x0e, 0xb0, 0xcb, 0xb9, - 0x33, 0x3e, 0x71, 0xae, 0x66, 0xaa, 0x1f, 0x40, 0x31, 0x74, 0x22, 0xd5, 0xdb, 0x76, 0x4a, 0x9c, - 0x8a, 0x17, 0x44, 0x80, 0x71, 0xea, 0x3a, 0x76, 0x7a, 0x12, 0xd9, 0x91, 0x43, 0x7d, 0x5d, 0xa9, - 0x4f, 0x64, 0x09, 0x63, 0x41, 0xaa, 0x67, 0x8d, 0x25, 0xe9, 0x43, 0xa4, 0x54, 0xe6, 0xbf, 0x16, - 0xc0, 0xa0, 0x38, 0xc9, 0x16, 0x74, 0xa5, 0xce, 0x3f, 0xc4, 0xc5, 0x63, 0x29, 0xaa, 0xe7, 0x96, - 0x16, 0xa8, 0xa4, 0xe5, 0x2a, 0xbc, 0x71, 0x17, 0x6e, 0xe2, 0xba, 0x3a, 0x81, 0xe5, 0xbc, 0x70, - 0xc3, 0x08, 0xed, 0xd7, 0x4a, 0xf4, 0x91, 0x26, 0x54, 0x15, 0x6f, 0x33, 0x41, 0x57, 0xe1, 0x13, - 0xcd, 0x43, 0xe3, 0x36, 0x5c, 0x43, 0xa3, 0x08, 0xd1, 0x73, 0x1d, 0x9d, 0xab, 0xc4, 0x5c, 0x46, - 0x8c, 0x4a, 0x19, 0xcc, 0xbf, 0x2c, 0xc0, 0x3b, 0xe9, 0x00, 0xc3, 0xd0, 0x3d, 0x9b, 0x5f, 0x79, - 0x9e, 0xef, 0x02, 0xd8, 0x89, 0x24, 0x35, 0xdc, 0xdd, 0xe5, 0xe1, 0xa6, 0x7d, 0x09, 0x8d, 0xda, - 0x7c, 0x0e, 0x3b, 0xa8, 0xce, 0x83, 0xa9, 0x77, 0x6a, 0x4f, 0x3b, 0xde, 0x7c, 0xe2, 0x9e, 0x5d, - 0x75, 0xd6, 0xcf, 0x58, 0xd6, 0xea, 0xac, 0xcb, 0x3e, 0x84, 0xc2, 0x9b, 0xbf, 0x29, 0x62, 0x54, - 0x50, 0xc9, 0x76, 0x3e, 0x0d, 0xdc, 0x38, 0x5b, 0xd2, 0x37, 0x7b, 0x9e, 0x1d, 0x45, 0x01, 0xc5, - 0xae, 0x22, 0x42, 0x55, 0x8b, 0xbd, 0xfd, 0x4c, 0x86, 0xd3, 0xa2, 0xa0, 0x4f, 0xe2, 0x3e, 0x75, - 0xc2, 0x48, 0xcd, 0x38, 0x7f, 0xa3, 0x67, 0xd5, 0xdd, 0xd0, 0x7a, 0xee, 0x46, 0xe7, 0xe3, 0xc0, - 0x7e, 0xce, 0x6e, 0x5d, 0x15, 0xe0, 0x86, 0x7f, 0xa8, 0x20, 0xc6, 0xbb, 0x00, 0x18, 0x69, 0xdd, - 0xb1, 0x1c, 0x59, 0x85, 0x03, 0xb7, 0x06, 0x31, 0x3e, 0x85, 0xed, 0xb9, 0x67, 0xb9, 0x33, 0x1f, - 0x27, 0xce, 0x8d, 0x52, 0x49, 0xeb, 0x72, 0x59, 0xe7, 0x5e, 0x4f, 0xa1, 0x12, 0x89, 0x69, 0xbe, - 0xaa, 0x66, 0xf2, 0xd5, 0x0f, 0x01, 0x64, 0x46, 0xb3, 0x28, 0x4a, 0xd5, 0x18, 0x57, 0x93, 0x90, - 0x76, 0xc8, 0x09, 0x44, 0xa1, 0xb1, 0x5c, 0x00, 0x99, 0x24, 0x24, 0xa0, 0x37, 0x56, 0x09, 0x04, - 0xb3, 0x82, 0x33, 0xde, 0xa9, 0x73, 0xcf, 0x49, 0xdb, 0xd8, 0x86, 0x32, 0x9a, 0xdb, 0xd4, 0xd9, - 0x69, 0x30, 0x42, 0x36, 0x70, 0xf6, 0x5b, 0x38, 0xf0, 0x49, 0xe0, 0xcd, 0xd0, 0x96, 0x91, 0x70, - 0x8e, 0xeb, 0xd0, 0x64, 0x82, 0x0d, 0x37, 0xbc, 0x8f, 0xe0, 0xae, 0x82, 0xd2, 0x14, 0x25, 0xb9, - 0xd2, 0xf5, 0x77, 0x36, 0xb8, 0x6b, 0x88, 0x41, 0x3d, 0xdf, 0x8c, 0xa0, 0x7e, 0xe0, 0x90, 0xb5, - 0xcb, 0x19, 0x49, 0x43, 0x61, 0x41, 0x0f, 0x85, 0x69, 0xf5, 0xb1, 0x76, 0x41, 0xf5, 0x61, 0xfc, - 0x04, 0x36, 0xa7, 0xde, 0xfc, 0x0c, 0x5d, 0x4c, 0xb2, 0x39, 0xb1, 0x5f, 0x6d, 0x48, 0xf0, 0x40, - 0x41, 0xcd, 0xbf, 0x2b, 0x40, 0x79, 0x68, 0x9f, 0xe2, 0x50, 0x3e, 0x50, 0x09, 0xe9, 0xd5, 0xc5, - 0x02, 0xe3, 0x73, 0x4b, 0xa2, 0x74, 0x31, 0x8a, 0x99, 0xc5, 0xf8, 0x3d, 0x68, 0x8c, 0xd3, 0x31, - 0x91, 0x97, 0x92, 0xce, 0xd7, 0xf5, 0x60, 0x98, 0x60, 0x45, 0x86, 0x94, 0xe6, 0xcb, 0xf7, 0xc2, - 0xc8, 0x52, 0x21, 0x45, 0x99, 0x14, 0x81, 0xa4, 0x77, 0x99, 0xff, 0x40, 0xe6, 0x8c, 0xa5, 0x0f, - 0xaf, 0x1a, 0x75, 0xe7, 0x3a, 0x72, 0x52, 0x9a, 0x22, 0x69, 0x1b, 0x3f, 0x83, 0x86, 0xed, 0xfb, - 0xd3, 0x97, 0xb1, 0x98, 0x22, 0xfb, 0x88, 0xa6, 0x40, 0x9b, 0xb0, 0x2a, 0x3c, 0xd5, 0xed, 0xb4, - 0x41, 0xd3, 0x31, 0x42, 0xef, 0xe4, 0x8e, 0xeb, 0xfa, 0x74, 0x50, 0x9f, 0xe4, 0xb7, 0x82, 0xf1, - 0xc6, 0xcf, 0xa1, 0xe9, 0x20, 0xc6, 0x9a, 0x2d, 0xa6, 0x91, 0x7b, 0xee, 0xf9, 0x6c, 0xdc, 0xf5, - 0x3b, 0x37, 0xb4, 0x0d, 0x04, 0xfe, 0x1e, 0x29, 0xac, 0x68, 0x38, 0x5a, 0xcb, 0x68, 0xc3, 0x66, - 0xe0, 0x2d, 0x22, 0xc7, 0xc2, 0xe5, 0x98, 0x3a, 0x23, 0x4c, 0xe6, 0x6c, 0x93, 0xf5, 0x3b, 0x3b, - 0xda, 0xf4, 0x13, 0x81, 0x88, 0xf1, 0x62, 0x23, 0xc8, 0xb4, 0x71, 0xa5, 0x4b, 0xee, 0x7c, 0xe2, - 0xb1, 0xbd, 0x66, 0xa2, 0x3d, 0xe9, 0xc9, 0x61, 0x50, 0x30, 0x01, 0x05, 0x0a, 0xca, 0xb1, 0xe8, - 0xe1, 0x8d, 0xe5, 0x40, 0x31, 0x64, 0xb8, 0x50, 0x78, 0x8a, 0x42, 0x51, 0x60, 0xcf, 0x43, 0x4e, - 0xdd, 0xcd, 0x65, 0xb9, 0xc3, 0x18, 0x25, 0x52, 0x2a, 0x9a, 0x67, 0x39, 0x10, 0x8e, 0xbe, 0xc1, - 0xce, 0xe6, 0xf2, 0x3c, 0xf3, 0x28, 0x4e, 0x18, 0x29, 0xea, 0x41, 0xda, 0x30, 0xff, 0xa9, 0x00, - 0x75, 0x6d, 0x11, 0x8c, 0xaf, 0xa0, 0xe6, 0xce, 0xe3, 0xe5, 0x2a, 0xbc, 0x36, 0xb2, 0x62, 0x15, - 0xa7, 0x18, 0x7f, 0x1f, 0x17, 0xe2, 0x05, 0x29, 0x63, 0x65, 0xb2, 0xd0, 0x45, 0xcc, 0x0d, 0xc9, - 0x90, 0x0a, 0xc0, 0x00, 0xa4, 0x09, 0x28, 0xbe, 0x5e, 0x80, 0x64, 0x50, 0x16, 0xf9, 0x67, 0x50, - 0x97, 0x7e, 0x75, 0xe8, 0xce, 0xdc, 0x48, 0x73, 0x8a, 0x42, 0xc6, 0x29, 0xfe, 0x1f, 0x34, 0x66, - 0xf6, 0x8b, 0xd4, 0x31, 0x65, 0x25, 0x55, 0x47, 0x58, 0xec, 0x95, 0xc6, 0x17, 0x70, 0x23, 0x3c, - 0x5f, 0x44, 0x63, 0xef, 0xf9, 0xdc, 0x8a, 0xce, 0x31, 0xa7, 0x9d, 0x7b, 0xd3, 0xb1, 0xe5, 0x8f, - 0xe2, 0x12, 0x72, 0x3b, 0xc6, 0x0e, 0x63, 0xe4, 0x60, 0x14, 0x99, 0xff, 0x55, 0x84, 0x6a, 0x6c, - 0x9d, 0xc6, 0xff, 0x87, 0xa6, 0xbd, 0x88, 0xce, 0x2d, 0x1f, 0x53, 0xcf, 0x73, 0x2f, 0x18, 0xab, - 0x30, 0xd2, 0x20, 0xe0, 0x40, 0xc1, 0x8c, 0xf7, 0xa0, 0x8e, 0x4e, 0x37, 0x0a, 0x5c, 0x9f, 0xe3, - 0xb2, 0x74, 0x69, 0x1d, 0x64, 0xdc, 0xc4, 0x6a, 0xcd, 0x1b, 0xd9, 0x53, 0x8c, 0xa6, 0xaa, 0xef, - 0x75, 0x6e, 0xb7, 0xc3, 0x37, 0xa8, 0xfe, 0x8d, 0xb7, 0x61, 0x9d, 0x76, 0x29, 0x24, 0xa4, 0x2c, - 0xe7, 0x82, 0x9a, 0x28, 0x03, 0xa3, 0x35, 0x23, 0xce, 0xd0, 0x24, 0x7c, 0x55, 0xf4, 0xd5, 0x08, - 0xf2, 0x80, 0x00, 0x14, 0xad, 0x19, 0xcd, 0x81, 0x69, 0x9d, 0x39, 0xab, 0x04, 0xe0, 0x72, 0x7f, - 0x0f, 0xb6, 0x02, 0x67, 0xe6, 0x61, 0x1d, 0xe0, 0x07, 0xee, 0x33, 0x34, 0x74, 0x12, 0x2f, 0x93, - 0xc1, 0xa6, 0x44, 0x0c, 0x24, 0x1c, 0xfb, 0xf9, 0x08, 0x0c, 0x69, 0x9f, 0x93, 0xa9, 0xed, 0x5b, - 0x63, 0x7b, 0xe6, 0x63, 0x55, 0xc1, 0xd9, 0xa1, 0x2a, 0x5a, 0x8c, 0xb9, 0x8f, 0x88, 0x03, 0x09, - 0x37, 0xde, 0x87, 0x8d, 0xd0, 0x99, 0x8f, 0xad, 0x91, 0x37, 0x9b, 0x2d, 0xb0, 0xc6, 0x7e, 0xc9, - 0x5e, 0xd9, 0x14, 0x4d, 0x82, 0x76, 0x62, 0x20, 0x29, 0x4f, 0xfd, 0xa0, 0xd4, 0x91, 0xed, 0xa3, - 0x03, 0x52, 0xde, 0xac, 0x49, 0x48, 0xc7, 0x66, 0xe5, 0xe5, 0xd4, 0x11, 0xb6, 0xc1, 0x58, 0x39, - 0x97, 0x84, 0xdc, 0x80, 0x35, 0x4c, 0x40, 0x4d, 0x1e, 0x30, 0x7e, 0x61, 0x45, 0xd1, 0x94, 0x06, - 0x61, 0x4d, 0xc9, 0x78, 0x42, 0x4c, 0x10, 0x4b, 0xa1, 0x52, 0x33, 0x2d, 0xd1, 0xf0, 0xd3, 0x46, - 0x68, 0x7e, 0x03, 0x0d, 0x3d, 0xc6, 0x50, 0x3d, 0x8e, 0x9b, 0x1e, 0x8c, 0xe9, 0x72, 0xd1, 0xab, - 0x22, 0x6e, 0xb2, 0xe9, 0x29, 0x2a, 0x2b, 0x8a, 0xa6, 0x89, 0xe9, 0x29, 0xd8, 0x30, 0x9a, 0x9a, - 0x7f, 0x5e, 0x80, 0x8d, 0x6c, 0xc8, 0x21, 0x6b, 0x5c, 0x8a, 0x52, 0xd6, 0x08, 0xa3, 0x2b, 0x56, - 0x3e, 0x52, 0xfc, 0x76, 0x36, 0x24, 0x75, 0x18, 0x87, 0x81, 0x71, 0x77, 0x95, 0x6b, 0x11, 0x62, - 0x3a, 0xa4, 0xd4, 0x2b, 0x7b, 0x7e, 0x7b, 0x99, 0x93, 0xf1, 0xbd, 0xb1, 0xf9, 0x1f, 0x65, 0xa8, - 0x25, 0x01, 0xec, 0x7f, 0xc1, 0x96, 0x71, 0xb7, 0x3c, 0x43, 0x43, 0xc5, 0xfa, 0x26, 0x54, 0xe7, - 0x14, 0x5a, 0xc4, 0x3f, 0x52, 0x18, 0x91, 0xd0, 0xe4, 0xda, 0x7e, 0xf9, 0xb5, 0xb6, 0x5f, 0xb9, - 0xc0, 0xf6, 0xd7, 0x2f, 0xb4, 0xfd, 0xea, 0x92, 0xed, 0x63, 0x30, 0xff, 0x7e, 0xe1, 0x2c, 0x50, - 0xdb, 0xda, 0x72, 0x30, 0x7f, 0xc4, 0x70, 0xa1, 0xf0, 0xf9, 0x5e, 0x02, 0x6f, 0xe2, 0x25, 0xf5, - 0x4b, 0x7b, 0x49, 0x23, 0xcf, 0x4b, 0x70, 0xf1, 0x42, 0x9c, 0x07, 0x5c, 0x00, 0x59, 0xaf, 0xb3, - 0xd1, 0x37, 0x45, 0x43, 0x01, 0xe5, 0x0a, 0x7f, 0x89, 0x01, 0x6f, 0xe1, 0x53, 0x2c, 0x75, 0xc6, - 0xe4, 0x2f, 0xf6, 0x29, 0xe6, 0xef, 0x88, 0x32, 0x3a, 0xf9, 0x41, 0x4d, 0x5c, 0x4f, 0xb0, 0x1d, - 0x0d, 0x49, 0x73, 0x44, 0xb9, 0x57, 0xca, 0xdd, 0x94, 0xd5, 0x1c, 0x02, 0xa4, 0x4c, 0xac, 0x20, - 0xec, 0xf1, 0xcc, 0x8d, 0xbb, 0x6d, 0xc9, 0x8a, 0x8b, 0x41, 0x92, 0x60, 0x97, 0x8e, 0x48, 0x46, - 0x8e, 0xfb, 0x0c, 0x1d, 0x65, 0x4b, 0x4e, 0x70, 0xdc, 0x26, 0x9c, 0x3d, 0x1a, 0x39, 0x3e, 0xf6, - 0xb8, 0x63, 0x48, 0x5c, 0xdc, 0xa6, 0x62, 0xd6, 0x1e, 0x63, 0xee, 0x8a, 0xdc, 0x10, 0xb1, 0xd7, - 0x18, 0xab, 0x41, 0x8c, 0x6b, 0x50, 0xc6, 0xb9, 0xb2, 0xbe, 0xdf, 0xd9, 0x96, 0xdb, 0x5e, 0x6c, - 0x3c, 0xa2, 0xfa, 0x71, 0x32, 0xf5, 0xfc, 0x70, 0xe7, 0x3a, 0x03, 0x65, 0xc3, 0xfc, 0x63, 0xa8, - 0xc6, 0xd6, 0x65, 0x7c, 0xac, 0xa9, 0x23, 0x13, 0xdf, 0xd6, 0x8a, 0x0d, 0x6a, 0x1a, 0xbe, 0x0f, - 0xa5, 0x30, 0xdd, 0x7d, 0xe4, 0x90, 0x32, 0xda, 0xfc, 0xc7, 0x02, 0xac, 0x2b, 0x88, 0x61, 0x42, - 0xe3, 0xb8, 0x3f, 0xec, 0xdd, 0xef, 0x75, 0xda, 0xc3, 0x5e, 0xff, 0x98, 0x7b, 0x29, 0x89, 0xc6, - 0x5c, 0x83, 0x51, 0xd6, 0x7a, 0x3c, 0x38, 0x68, 0x0f, 0xbb, 0x2c, 0xb8, 0x24, 0x2a, 0x0b, 0x6e, - 0x51, 0xd9, 0xd7, 0x1f, 0x74, 0x8f, 0xd5, 0x19, 0x50, 0xc9, 0xc3, 0x6f, 0xe3, 0x1d, 0xa8, 0x7d, - 0xd3, 0xed, 0x0e, 0xda, 0x87, 0xbd, 0x27, 0x5d, 0x75, 0xaa, 0x52, 0x7b, 0x1a, 0x03, 0x28, 0x0c, - 0x89, 0xee, 0x7d, 0xd1, 0x3d, 0x79, 0xc8, 0xae, 0x51, 0x12, 0xeb, 0x81, 0x6c, 0x12, 0xdf, 0x41, - 0xef, 0xa4, 0xd3, 0x16, 0x07, 0xdd, 0x03, 0x76, 0x0a, 0xe4, 0x1b, 0xc7, 0x00, 0x9a, 0xa9, 0x61, - 0x7f, 0xd8, 0x3e, 0x64, 0x97, 0x28, 0x89, 0x72, 0x44, 0x0d, 0x73, 0x1f, 0x2a, 0xd2, 0xb2, 0x09, - 0xef, 0xce, 0xfd, 0x45, 0xa4, 0xd2, 0xaa, 0x6c, 0x90, 0xde, 0x38, 0xcf, 0x04, 0x56, 0xe7, 0x57, - 0xb2, 0x65, 0x3a, 0x50, 0x91, 0xe5, 0x0d, 0xfa, 0x78, 0x65, 0xc4, 0xfb, 0x2d, 0x35, 0xbb, 0x37, - 0x96, 0x0b, 0x20, 0xb9, 0x1b, 0x13, 0x8a, 0xca, 0xf8, 0x29, 0x57, 0xfc, 0x91, 0xa3, 0x66, 0xf8, - 0xfa, 0x32, 0xb9, 0x2c, 0xae, 0x24, 0x0d, 0x4d, 0x73, 0x43, 0x97, 0x42, 0x66, 0x8f, 0x72, 0xe6, - 0x18, 0xd7, 0x30, 0x00, 0x46, 0xc1, 0xcb, 0x78, 0xb2, 0x15, 0x50, 0x10, 0x8c, 0xec, 0x97, 0x33, - 0x3b, 0x1f, 0x86, 0xc8, 0xf9, 0xae, 0x12, 0x80, 0x24, 0xa1, 0x3d, 0x18, 0x4f, 0x1d, 0xc7, 0xc7, - 0x4d, 0x12, 0x3a, 0xef, 0xd2, 0x19, 0xdc, 0x56, 0x82, 0xe9, 0xc5, 0x87, 0x71, 0x07, 0xf0, 0x2e, - 0x5a, 0xb6, 0x3b, 0x5b, 0xcc, 0xac, 0xc4, 0x16, 0xa9, 0x48, 0xb1, 0x96, 0xce, 0xbd, 0xde, 0x51, - 0x54, 0x6d, 0x9d, 0x28, 0x96, 0x62, 0xfe, 0xed, 0x1a, 0xd4, 0xb5, 0xe1, 0xfd, 0x1f, 0x1d, 0x06, - 0xef, 0x27, 0x9d, 0x33, 0x2f, 0x72, 0x6d, 0x0a, 0x28, 0xa9, 0x72, 0xd2, 0x10, 0x8d, 0x14, 0xf7, - 0x30, 0x56, 0x13, 0xed, 0x67, 0xe1, 0x33, 0x4d, 0x45, 0xd9, 0x3d, 0xb7, 0x28, 0x10, 0x50, 0xa1, - 0xc5, 0x18, 0x69, 0x90, 0x49, 0xdb, 0xfc, 0xef, 0x02, 0xd4, 0x92, 0x72, 0x98, 0xa6, 0x4a, 0xa5, - 0x17, 0x95, 0x10, 0x54, 0x96, 0x92, 0x39, 0x46, 0x65, 0x03, 0x0c, 0xfa, 0x92, 0x88, 0x8b, 0x6b, - 0x69, 0xaa, 0xb2, 0x4c, 0x18, 0x28, 0x19, 0xb3, 0x68, 0x61, 0x8d, 0xdd, 0x70, 0x84, 0x91, 0x39, - 0x78, 0xa9, 0x76, 0x6d, 0x0d, 0x04, 0x1e, 0xc4, 0x30, 0xca, 0xe2, 0x94, 0x09, 0x69, 0x3e, 0x67, - 0x74, 0x65, 0x21, 0x77, 0xe2, 0x75, 0x05, 0x3b, 0xa2, 0xfb, 0x07, 0x8c, 0xcd, 0xaa, 0x34, 0xc9, - 0x66, 0xa7, 0xa6, 0x84, 0xc6, 0xda, 0x60, 0x88, 0x54, 0x64, 0xac, 0x8e, 0xcc, 0x4f, 0xaa, 0xa8, - 0x61, 0x7d, 0x30, 0x79, 0x45, 0x23, 0xdc, 0xdc, 0xa0, 0x00, 0x59, 0x7e, 0x55, 0xb0, 0x79, 0x14, - 0x86, 0xe6, 0x2f, 0xa0, 0xae, 0x95, 0xf4, 0xe8, 0x5b, 0xd7, 0xf4, 0xfa, 0x3f, 0x5b, 0x1f, 0x6c, - 0x69, 0xf5, 0xbe, 0x2c, 0x0e, 0xcc, 0x05, 0x54, 0x64, 0x3d, 0x43, 0xb6, 0xe3, 0xfa, 0x56, 0x66, - 0xab, 0x5b, 0x75, 0x7d, 0x85, 0xfc, 0x00, 0x36, 0x67, 0x76, 0xf8, 0xd4, 0x9a, 0x3a, 0xf3, 0x33, - 0xcc, 0xff, 0xb8, 0xe4, 0x6a, 0xca, 0x9a, 0x04, 0x3e, 0x64, 0xe8, 0x91, 0x3b, 0x5f, 0xa1, 0xb3, - 0x5f, 0xa8, 0x04, 0xaf, 0xd3, 0xd9, 0x2f, 0xe8, 0x2c, 0x08, 0xd2, 0xf3, 0x37, 0xcc, 0xe2, 0xfa, - 0x96, 0xf7, 0xfa, 0xca, 0x19, 0x1d, 0xa5, 0xda, 0x0b, 0x76, 0xbd, 0x08, 0x9b, 0xba, 0x61, 0xc4, - 0xf7, 0x00, 0x08, 0xa3, 0x6f, 0x4c, 0xa1, 0xd5, 0xa4, 0xb0, 0x97, 0xbb, 0xdd, 0xd6, 0x72, 0x09, - 0x27, 0x12, 0x0a, 0xf3, 0x01, 0x86, 0x7f, 0x3b, 0x1a, 0x9d, 0x93, 0x32, 0x3f, 0xc9, 0x28, 0xa3, - 0x6d, 0xb8, 0x98, 0xe2, 0x62, 0x55, 0xcc, 0x27, 0xd0, 0x68, 0x87, 0x74, 0x00, 0x20, 0xc7, 0x8a, - 0xeb, 0xa1, 0x0b, 0xd3, 0xb6, 0x30, 0x3a, 0x95, 0x26, 0x13, 0xad, 0x5f, 0xce, 0x5d, 0x1c, 0x3d, - 0x65, 0xcb, 0xfc, 0x75, 0x11, 0x00, 0x03, 0xda, 0xd8, 0x95, 0x9b, 0xf2, 0xcf, 0xb0, 0x64, 0x91, - 0x55, 0x2a, 0x1d, 0x6d, 0x16, 0x56, 0x0a, 0x25, 0x35, 0x16, 0x2c, 0x63, 0x98, 0x8a, 0x86, 0xf5, - 0x25, 0x34, 0x92, 0x4a, 0x29, 0x3d, 0x0f, 0xcd, 0x63, 0x4a, 0xce, 0x47, 0x88, 0xed, 0x6b, 0xd8, - 0xb0, 0x43, 0x8b, 0x0e, 0x33, 0xd4, 0xa2, 0xaa, 0xdd, 0xd8, 0x8d, 0xfc, 0xa1, 0x60, 0x2d, 0xa8, - 0x0f, 0xff, 0x0e, 0xa6, 0x7e, 0xc5, 0x4d, 0x7d, 0x96, 0x5e, 0xad, 0xa8, 0x64, 0xa3, 0x1e, 0xbf, - 0xa2, 0x48, 0xa7, 0x8a, 0x16, 0xe6, 0x2a, 0xbf, 0x92, 0xab, 0x91, 0x10, 0x12, 0xe3, 0x2f, 0x61, - 0xcb, 0x79, 0x11, 0x59, 0x59, 0xe6, 0xca, 0x2b, 0x99, 0x37, 0x91, 0xb8, 0xa3, 0xf3, 0x93, 0x13, - 0xfa, 0x4f, 0x5d, 0x8c, 0xaf, 0x21, 0xd6, 0xe1, 0xec, 0x67, 0x65, 0x74, 0x42, 0x04, 0x09, 0x86, - 0x98, 0x13, 0xd8, 0x4c, 0x18, 0xda, 0x23, 0x75, 0xd0, 0xab, 0xaf, 0xef, 0x0f, 0xd3, 0x6e, 0x96, - 0x08, 0xb5, 0x25, 0xc6, 0xfa, 0x38, 0x56, 0x31, 0x3e, 0x29, 0xc1, 0xfa, 0x58, 0x03, 0x99, 0xc7, - 0x50, 0x3b, 0x72, 0xc6, 0xaa, 0x87, 0x9f, 0x66, 0x7a, 0x78, 0x5b, 0x2f, 0x2f, 0xc6, 0x2b, 0xb2, - 0x31, 0x25, 0x63, 0xd4, 0x5d, 0x48, 0x9b, 0x2c, 0x0a, 0xd9, 0x30, 0x2d, 0xd8, 0xc4, 0x35, 0x0a, - 0x1c, 0x1f, 0xeb, 0x41, 0x25, 0x55, 0x5d, 0x1e, 0x14, 0xd2, 0xcb, 0x03, 0xb4, 0x3c, 0xa2, 0xb0, - 0x93, 0xbc, 0x2d, 0x5b, 0x58, 0xab, 0x34, 0x17, 0xa1, 0x83, 0x8b, 0x3f, 0x89, 0x30, 0xca, 0x85, - 0x91, 0x8a, 0x84, 0x75, 0x04, 0x1e, 0x22, 0xec, 0x08, 0x41, 0xe6, 0x2d, 0x68, 0x1e, 0xe3, 0x6c, - 0xe2, 0xce, 0x45, 0x89, 0xd7, 0x6e, 0x22, 0x0a, 0x99, 0x9b, 0x08, 0xf3, 0x9f, 0xd7, 0x60, 0x5d, - 0x12, 0x85, 0xe9, 0x61, 0x85, 0x3d, 0xd2, 0x0e, 0x5a, 0x97, 0x0f, 0x2b, 0x24, 0xb5, 0x3a, 0xac, - 0x50, 0xf2, 0xbf, 0x82, 0x5a, 0x5a, 0xed, 0x4a, 0x4b, 0xbe, 0xf9, 0xca, 0xb9, 0x17, 0x29, 0x2d, - 0xc6, 0xe3, 0xe2, 0x0c, 0xcb, 0xba, 0xe2, 0xf2, 0x61, 0x4a, 0x32, 0x99, 0x82, 0xf0, 0xa8, 0x19, - 0x90, 0xdd, 0xca, 0x29, 0x53, 0x66, 0x7b, 0x33, 0x63, 0xf1, 0xfa, 0x6c, 0xb2, 0xf5, 0x4a, 0x00, - 0x1a, 0x61, 0x33, 0x63, 0x84, 0xca, 0x7a, 0x2f, 0xd0, 0xae, 0xa1, 0xdb, 0x21, 0x1a, 0xd4, 0xfa, - 0x5c, 0x4e, 0xa5, 0x32, 0x5d, 0x6d, 0xc5, 0x33, 0x73, 0x2c, 0x62, 0x3a, 0xf3, 0xd7, 0x98, 0xfd, - 0x92, 0x73, 0xf6, 0x24, 0x2a, 0x15, 0xb4, 0x00, 0xf9, 0x05, 0xc0, 0x28, 0x09, 0x1e, 0xab, 0x37, - 0x21, 0x69, 0x60, 0x11, 0x1a, 0x1d, 0x5a, 0xde, 0xba, 0x5c, 0x98, 0x50, 0xcd, 0x97, 0x56, 0xdb, - 0xaa, 0x25, 0x14, 0x31, 0x85, 0xf9, 0x08, 0x13, 0x89, 0x3c, 0xbe, 0xc9, 0x53, 0xe0, 0x73, 0x00, - 0xed, 0x8e, 0x40, 0x9e, 0x98, 0xe6, 0x5e, 0x88, 0x68, 0x64, 0xe6, 0xbf, 0x15, 0xa0, 0xb5, 0x7c, - 0xd2, 0x83, 0x1b, 0x2e, 0xdd, 0x1d, 0xb6, 0x97, 0xcf, 0x84, 0x34, 0x5f, 0xf8, 0x5d, 0x5c, 0x99, - 0x53, 0x16, 0x21, 0xb9, 0x6e, 0x6e, 0x16, 0x91, 0xa7, 0x95, 0x09, 0x85, 0x71, 0x1b, 0xd6, 0xc7, - 0xce, 0xc4, 0xa6, 0xe0, 0x51, 0xbe, 0xc8, 0x94, 0x63, 0x2a, 0xf3, 0x3d, 0x80, 0xa3, 0x20, 0x8a, - 0x77, 0x05, 0xa8, 0xc0, 0xd8, 0x8e, 0xec, 0xf8, 0x3a, 0x80, 0xbe, 0xcd, 0x2e, 0x54, 0xc5, 0xe0, - 0x9b, 0x1e, 0x9f, 0x24, 0xbd, 0xd2, 0xa9, 0x96, 0xcb, 0x07, 0x99, 0x90, 0xb4, 0xf2, 0xc1, 0xfc, - 0x4d, 0x09, 0x6a, 0x24, 0x47, 0xd6, 0x92, 0x69, 0x89, 0x55, 0xe0, 0x30, 0x91, 0x57, 0x62, 0xc9, - 0x00, 0x92, 0xb4, 0xe9, 0x9c, 0x04, 0x37, 0xc7, 0xd2, 0xf7, 0xf1, 0x4b, 0x76, 0x39, 0xc2, 0xfd, - 0xbe, 0xe5, 0xfa, 0xcf, 0xbe, 0x50, 0x17, 0x8b, 0x20, 0x41, 0x3d, 0x84, 0x64, 0x09, 0xf6, 0xd5, - 0x71, 0x53, 0x4a, 0xb0, 0xcf, 0x07, 0xcb, 0x32, 0x87, 0xb1, 0x04, 0x55, 0xf3, 0x48, 0x50, 0x2c, - 0x21, 0x25, 0xd8, 0x57, 0x75, 0x4f, 0x4a, 0xb0, 0x4f, 0xe3, 0xc0, 0x32, 0xc7, 0xc5, 0x52, 0x54, - 0x5d, 0x3d, 0xc8, 0x16, 0x15, 0x6f, 0xf1, 0xee, 0x4c, 0xca, 0xae, 0xf1, 0x60, 0x1a, 0x31, 0x90, - 0xa5, 0x2f, 0x11, 0xed, 0xf3, 0x5e, 0x3c, 0x4b, 0xb4, 0x2f, 0xf7, 0xcc, 0x24, 0xd3, 0x9a, 0x63, - 0x9d, 0x3a, 0x79, 0xc9, 0x7b, 0xf0, 0x22, 0xed, 0x99, 0x09, 0x78, 0xcc, 0x30, 0xd2, 0x73, 0x64, - 0x8f, 0xce, 0xe9, 0x80, 0x85, 0x32, 0x4e, 0x83, 0x49, 0x80, 0x41, 0x82, 0x20, 0x54, 0x04, 0x26, - 0x04, 0xfc, 0x4e, 0x82, 0xb7, 0xde, 0x45, 0xd1, 0x8c, 0x69, 0xe4, 0xe3, 0x89, 0x77, 0xa1, 0x4e, - 0xdb, 0x78, 0x6f, 0x62, 0xb1, 0x19, 0x6c, 0x30, 0x4d, 0x0d, 0x41, 0xfd, 0xc9, 0x01, 0x02, 0x28, - 0xb8, 0x3b, 0xf4, 0xb0, 0x85, 0x37, 0xd8, 0x18, 0xdc, 0xb9, 0x41, 0x45, 0xa8, 0x52, 0xf1, 0xfb, - 0x05, 0x15, 0xaa, 0x2d, 0x46, 0xd6, 0x25, 0xec, 0x11, 0x81, 0xe4, 0x52, 0xa0, 0x22, 0x8a, 0x62, - 0x4b, 0x2a, 0xc8, 0x20, 0x26, 0x30, 0xbf, 0x83, 0x12, 0x59, 0x47, 0x72, 0xd6, 0xbe, 0x52, 0x50, - 0xc4, 0x36, 0xa8, 0xce, 0xda, 0x6f, 0x65, 0x77, 0x64, 0xd7, 0xb2, 0x84, 0x99, 0xfd, 0xd8, 0x5f, - 0x14, 0xa0, 0x28, 0xfa, 0x6d, 0xb2, 0x1f, 0x3b, 0x54, 0xf9, 0x06, 0xbf, 0x68, 0xeb, 0x29, 0x57, - 0x12, 0xab, 0x8a, 0xb8, 0xfc, 0x4e, 0x00, 0xb4, 0xb2, 0x58, 0x3b, 0x12, 0x4a, 0xdd, 0x63, 0xc8, - 0x96, 0x76, 0x19, 0x53, 0xca, 0x5c, 0xc6, 0xbc, 0xf2, 0x92, 0x20, 0xab, 0xb8, 0x39, 0x82, 0xe2, - 0x93, 0x60, 0x92, 0x1b, 0xa2, 0x50, 0xc1, 0x40, 0x1e, 0x87, 0x35, 0x04, 0x7e, 0x71, 0x3d, 0x2c, - 0x4f, 0xa1, 0x03, 0x59, 0x59, 0x36, 0xb0, 0x1e, 0x66, 0x80, 0x88, 0x08, 0xa9, 0xce, 0xb8, 0xf9, - 0x52, 0x9d, 0x91, 0x12, 0x20, 0x22, 0xf3, 0x3f, 0x0b, 0x50, 0x91, 0x57, 0x7e, 0x2b, 0xa3, 0x46, - 0x3e, 0x4e, 0x63, 0xc9, 0xd1, 0x1b, 0x16, 0xd9, 0x12, 0xd0, 0x1b, 0xd3, 0x32, 0x51, 0xe9, 0xea, - 0xcc, 0xad, 0xe4, 0x91, 0x02, 0xd6, 0x1f, 0x12, 0xc4, 0x9b, 0x80, 0x5b, 0xd0, 0x52, 0x04, 0xca, - 0xf1, 0x55, 0x54, 0xaa, 0x89, 0x4d, 0x09, 0x6f, 0xc7, 0xe0, 0xcc, 0x5d, 0x4c, 0x79, 0xe9, 0x2e, - 0xe6, 0xc7, 0xb0, 0x31, 0xf3, 0xa7, 0xa1, 0x35, 0xb5, 0x4f, 0x9d, 0x29, 0xd7, 0xf2, 0xd2, 0xf7, - 0x1a, 0x04, 0x3d, 0x24, 0x20, 0x95, 0xf2, 0x4b, 0x54, 0x58, 0xc9, 0xaf, 0x2f, 0x53, 0xd9, 0x2f, - 0xf6, 0x3a, 0x18, 0x9f, 0xe2, 0x00, 0x0a, 0x38, 0xec, 0xc3, 0xfe, 0xbd, 0xf6, 0x61, 0xeb, 0x2d, - 0xa3, 0x06, 0xe5, 0xc3, 0x7e, 0x07, 0x3f, 0x0b, 0x04, 0x6e, 0x1f, 0xfc, 0xca, 0xea, 0x1d, 0xb7, - 0xd6, 0xe8, 0x39, 0x16, 0x7d, 0xf7, 0x1f, 0x0f, 0x5b, 0x45, 0x7a, 0x25, 0xf1, 0x44, 0xdc, 0x6f, - 0x95, 0xf6, 0xfe, 0x04, 0x6a, 0xc9, 0x95, 0x2a, 0x41, 0xdb, 0x07, 0x07, 0x28, 0x02, 0x3f, 0x0e, - 0xba, 0x24, 0x00, 0x99, 0xf0, 0xc3, 0x6a, 0x1f, 0x1e, 0x4a, 0x09, 0xa2, 0x3b, 0x38, 0x6c, 0x77, - 0xba, 0x28, 0x01, 0x45, 0x77, 0x8f, 0xdb, 0xf7, 0x0e, 0xbb, 0xad, 0x12, 0x53, 0xf5, 0x4e, 0xb8, - 0x51, 0xa6, 0xee, 0x45, 0xf7, 0xa4, 0x3b, 0x6c, 0x55, 0x8c, 0x26, 0x26, 0xc7, 0xfe, 0xfd, 0xa1, - 0x6c, 0xae, 0xe3, 0x8a, 0x40, 0xef, 0xb8, 0x37, 0xec, 0xb5, 0x0f, 0x7b, 0x7f, 0xd4, 0x6d, 0x55, - 0xf7, 0x2c, 0xba, 0xed, 0x4b, 0x36, 0x19, 0x24, 0x71, 0x20, 0xba, 0xf7, 0x7b, 0xdf, 0xa2, 0x02, - 0x0d, 0xa8, 0x1e, 0x77, 0x7b, 0x0f, 0x1e, 0xde, 0xeb, 0x0b, 0xd4, 0x02, 0xd5, 0x19, 0xb6, 0x1f, - 0xa8, 0x31, 0x9c, 0x58, 0x83, 0xf6, 0xf0, 0x21, 0x6a, 0x80, 0xd2, 0x3b, 0xfd, 0xa3, 0xa3, 0xc7, - 0x28, 0xf2, 0x3b, 0x54, 0x62, 0x0b, 0x9a, 0xdd, 0x6f, 0x87, 0x56, 0x0a, 0x2a, 0xef, 0xdd, 0xc2, - 0x62, 0x2e, 0xde, 0x38, 0xf0, 0xe0, 0x8e, 0xbf, 0x93, 0x83, 0xa3, 0xf1, 0xf0, 0xec, 0xf4, 0x8e, - 0x9f, 0x74, 0xc5, 0xb0, 0xb5, 0xb6, 0xb7, 0x07, 0xad, 0xe5, 0x6d, 0x81, 0x51, 0x81, 0xb5, 0xee, - 0x23, 0x64, 0xc0, 0xdf, 0x07, 0x5d, 0xa4, 0xc7, 0x5f, 0x1c, 0xe1, 0xda, 0xde, 0x6d, 0xb5, 0xef, - 0x53, 0x05, 0x51, 0x15, 0x4a, 0xc7, 0xfd, 0x63, 0x7a, 0x72, 0x42, 0xd3, 0xdd, 0xe9, 0x74, 0x07, - 0x43, 0x29, 0x5c, 0x74, 0x7f, 0xd5, 0xed, 0x90, 0xf0, 0xc7, 0x70, 0x2d, 0xa7, 0x26, 0x25, 0x8d, - 0x13, 0x6d, 0x2d, 0x39, 0xf1, 0xdb, 0xd0, 0x4a, 0x41, 0xa2, 0x7b, 0xd4, 0x7f, 0x42, 0x1d, 0x5f, - 0x87, 0x2d, 0x1d, 0x2a, 0x97, 0x60, 0x6d, 0xef, 0x63, 0x68, 0x66, 0x0a, 0x51, 0x9a, 0x9e, 0xa3, - 0xee, 0x81, 0x75, 0xd4, 0x27, 0x51, 0x9b, 0x50, 0xa7, 0x46, 0x4c, 0x5e, 0xd8, 0xfb, 0x08, 0x20, - 0x4d, 0xd4, 0x34, 0x18, 0x34, 0x0b, 0xd6, 0xb9, 0x77, 0x34, 0xe8, 0x0b, 0xa5, 0x73, 0xf7, 0x5b, - 0xfe, 0x5e, 0xbb, 0xf3, 0x37, 0x5b, 0x50, 0x7d, 0x40, 0xae, 0xdc, 0xf6, 0x5d, 0xe3, 0x2e, 0x6c, - 0x3e, 0x70, 0x22, 0xfd, 0xbe, 0xde, 0xd0, 0x02, 0x4f, 0x72, 0x77, 0xbf, 0xbb, 0x72, 0xf1, 0x6e, - 0xbe, 0x65, 0x3c, 0xe4, 0x77, 0x2b, 0x19, 0x5e, 0x33, 0xf3, 0xd2, 0x27, 0xf7, 0x19, 0xc0, 0xee, - 0xe6, 0xd2, 0xeb, 0x43, 0x94, 0xf4, 0x15, 0x34, 0x50, 0x8b, 0xf8, 0x39, 0x59, 0x98, 0xaf, 0xc2, - 0xd2, 0xd3, 0x30, 0xf3, 0xad, 0x4f, 0x0b, 0x58, 0x83, 0xd5, 0x35, 0xc6, 0x4b, 0xf2, 0x19, 0x7f, - 0x80, 0x13, 0x98, 0xbe, 0x5e, 0x33, 0xde, 0xcd, 0x28, 0xbd, 0xf2, 0xa8, 0x2d, 0x4f, 0xe1, 0x8f, - 0xd0, 0x2b, 0x71, 0xb7, 0xe3, 0x9e, 0x1a, 0x1a, 0x92, 0x6f, 0x9a, 0x77, 0x97, 0x01, 0x48, 0x7d, - 0x1b, 0x1d, 0x87, 0x73, 0x56, 0xae, 0x7e, 0x39, 0xe2, 0x3f, 0x47, 0xf7, 0xf2, 0x26, 0xd1, 0x9b, - 0x31, 0x7d, 0x09, 0xf5, 0x84, 0xa9, 0x37, 0xbf, 0x34, 0xdb, 0x3e, 0x34, 0x12, 0xb6, 0xfe, 0xe2, - 0xf2, 0xdd, 0xdd, 0x81, 0xea, 0x89, 0xba, 0xa7, 0xbb, 0x34, 0xcf, 0xa7, 0x68, 0x86, 0x7c, 0x59, - 0x73, 0x69, 0x0e, 0xac, 0xdc, 0x0f, 0xdc, 0xf0, 0x8d, 0x58, 0xee, 0xa1, 0xaf, 0xc8, 0xa7, 0x91, - 0xc6, 0x6e, 0x66, 0x65, 0x33, 0xef, 0x45, 0x77, 0x6f, 0xae, 0xe0, 0xe2, 0x9a, 0x01, 0x65, 0x7c, - 0x0d, 0xd5, 0xf8, 0x79, 0xa5, 0xf1, 0x83, 0x15, 0xc2, 0xf0, 0xa2, 0xfe, 0x3f, 0x2c, 0xd0, 0x46, - 0x47, 0xbd, 0x5e, 0xcb, 0xb5, 0x90, 0xfc, 0x17, 0x02, 0x6c, 0xcf, 0x07, 0xf4, 0x5c, 0x89, 0x39, - 0xef, 0x21, 0xa6, 0x73, 0x6e, 0xcf, 0xcf, 0xe8, 0xc8, 0x3d, 0x6f, 0xe4, 0x17, 0x48, 0xf9, 0x79, - 0xf2, 0x7a, 0x2e, 0xbd, 0x65, 0xba, 0xb4, 0x4b, 0xdd, 0x65, 0xd3, 0xc6, 0x0a, 0xda, 0xd0, 0x4e, - 0x23, 0xf4, 0x97, 0x8d, 0xbb, 0xdb, 0x19, 0xb8, 0x2a, 0xb4, 0x99, 0x77, 0x1f, 0x2a, 0xf2, 0x19, - 0xa4, 0x91, 0x9d, 0xdd, 0x0c, 0x7b, 0xae, 0x0d, 0x56, 0xe4, 0xc3, 0xc0, 0x25, 0x3e, 0xfd, 0xa9, - 0x60, 0xbe, 0x0d, 0xae, 0x93, 0x1b, 0x52, 0x95, 0xf5, 0xba, 0xf1, 0x11, 0x11, 0xeb, 0xf8, 0x33, - 0x36, 0x0f, 0xe6, 0xc9, 0x9a, 0x47, 0xe6, 0xed, 0xe0, 0x2b, 0xac, 0x97, 0x7a, 0xc3, 0xba, 0x2b, - 0xb7, 0x33, 0xed, 0xcd, 0x1d, 0xd2, 0x70, 0x5f, 0x9f, 0xb1, 0x7e, 0x58, 0x1c, 0x85, 0xaf, 0x65, - 0x41, 0x22, 0x6d, 0x0a, 0xa9, 0x9e, 0xca, 0x4e, 0x85, 0xfe, 0x3c, 0x30, 0x4f, 0xb9, 0x5f, 0x40, - 0x13, 0xbb, 0xd2, 0x8e, 0xff, 0x72, 0x1f, 0xe5, 0xed, 0xe6, 0x42, 0x39, 0x24, 0x6e, 0x64, 0xd8, - 0xc3, 0x37, 0xe3, 0x67, 0xd3, 0x6d, 0x66, 0x9e, 0x17, 0x1a, 0xef, 0x65, 0xf4, 0xcf, 0x79, 0x77, - 0x98, 0x37, 0x8c, 0xbb, 0x9c, 0x09, 0xd2, 0x8d, 0x77, 0xde, 0x7e, 0x76, 0x37, 0x0f, 0x98, 0x4c, - 0x81, 0xf6, 0x9a, 0xee, 0x0d, 0x98, 0x71, 0x00, 0xf7, 0xa0, 0xa1, 0x3f, 0x55, 0x34, 0x7e, 0x94, - 0xd1, 0x7f, 0xf5, 0x09, 0x63, 0x7e, 0xb8, 0xaa, 0xa1, 0x0a, 0x6a, 0xcf, 0xbe, 0xb2, 0xab, 0xdd, - 0x5d, 0x81, 0xc8, 0xb0, 0x1d, 0xb3, 0x50, 0x1d, 0x79, 0x29, 0x26, 0xd4, 0xf6, 0x6b, 0xac, 0x80, - 0xe2, 0x77, 0x7f, 0xc6, 0x3b, 0xd9, 0x10, 0x95, 0x7d, 0xed, 0x98, 0xa7, 0x67, 0x1f, 0xae, 0x25, - 0x7a, 0x6a, 0xe7, 0x00, 0x17, 0xbc, 0x06, 0xd9, 0xbd, 0x00, 0x87, 0x02, 0x07, 0x70, 0x2d, 0xe7, - 0x19, 0xa2, 0xf1, 0x41, 0x9e, 0x62, 0xab, 0xaf, 0x14, 0x73, 0x54, 0x3c, 0xad, 0xf0, 0x3f, 0x33, - 0x7c, 0xfe, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x85, 0xf7, 0xed, 0x86, 0xdb, 0x30, 0x00, 0x00, + // 5225 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x7c, 0x5f, 0x73, 0x1b, 0x47, + 0x72, 0x38, 0x41, 0x80, 0x24, 0xd0, 0x00, 0x48, 0x70, 0x44, 0x4a, 0x10, 0x64, 0xc9, 0xd6, 0x9e, + 0xff, 0x48, 0x3a, 0x5b, 0x3e, 0xcb, 0xb6, 0x7c, 0x3f, 0xfb, 0x7c, 0xbf, 0x83, 0x48, 0x48, 0xc2, + 0x99, 0xff, 0xbc, 0xa4, 0x15, 0x3b, 0xff, 0x90, 0x15, 0xb0, 0x24, 0x37, 0x06, 0xb0, 0x7b, 0xbb, + 0x0b, 0x59, 0xac, 0x54, 0x25, 0x55, 0x97, 0xc7, 0x54, 0xbe, 0xc1, 0xe5, 0x0b, 0x5c, 0x25, 0xcf, + 0xa9, 0xca, 0x53, 0x1e, 0x92, 0xaa, 0x3c, 0xe6, 0x1b, 0xe4, 0x29, 0x0f, 0xf9, 0x00, 0xa9, 0xca, + 0x63, 0xba, 0x7b, 0x66, 0x77, 0x67, 0xff, 0x80, 0xa2, 0x14, 0x25, 0xa9, 0x3c, 0x11, 0xdb, 0xdd, + 0xd3, 0xd3, 0x33, 0xd3, 0xd3, 0xdd, 0xd3, 0xd3, 0x43, 0x58, 0xb3, 0x3c, 0xe7, 0xc3, 0x13, 0xf7, + 0xe9, 0x89, 0x77, 0xd7, 0xf3, 0xdd, 0xd0, 0x15, 0x55, 0xfe, 0x40, 0xa8, 0xb1, 0x01, 0xe2, 0x91, + 0x1d, 0xee, 0xd9, 0xce, 0xc9, 0xe9, 0x53, 0xd7, 0x37, 0xed, 0x5f, 0xcd, 0xec, 0x20, 0x34, 0xbe, + 0x80, 0x4b, 0x29, 0x68, 0xe0, 0xb9, 0xd3, 0xc0, 0x16, 0x6f, 0xc3, 0x92, 0x67, 0xdb, 0x7e, 0xd0, + 0x2e, 0xbd, 0x55, 0xbe, 0x55, 0xbf, 0xb7, 0x7a, 0x37, 0x62, 0x73, 0xf7, 0x00, 0xc1, 0xa6, 0x44, + 0x1a, 0x27, 0x50, 0xeb, 0xfa, 0x27, 0xb3, 0x89, 0x3d, 0x0d, 0x03, 0x71, 0x17, 0xaa, 0xbe, 0x1d, + 0xb8, 0x33, 0x7f, 0x68, 0x63, 0xab, 0xd2, 0xad, 0xd5, 0x7b, 0x22, 0x69, 0x65, 0x2a, 0x8c, 0x19, + 0xd3, 0x88, 0xcb, 0xb0, 0x7c, 0x6c, 0x4d, 0x9c, 0xf1, 0x59, 0x7b, 0x11, 0xa9, 0x9b, 0xa6, 0xfa, + 0x12, 0x02, 0x2a, 0x53, 0x6b, 0x62, 0xb7, 0xcb, 0x08, 0xad, 0x99, 0xfc, 0xdb, 0xf8, 0x13, 0x58, + 0xed, 0x8e, 0x46, 0x07, 0x56, 0x78, 0xaa, 0xe4, 0x7e, 0xe9, 0xde, 0x36, 0x61, 0xf9, 0x99, 0x7f, + 0x3c, 0x70, 0x46, 0xdc, 0x5b, 0xcd, 0x5c, 0xc2, 0xaf, 0xfe, 0x48, 0x18, 0x50, 0xf1, 0x90, 0x2b, + 0x77, 0x96, 0x1e, 0x26, 0xf5, 0xc5, 0x38, 0xe3, 0x1d, 0x58, 0x8b, 0x3b, 0x57, 0xd3, 0x83, 0x32, + 0xce, 0x66, 0xc8, 0x8b, 0x7a, 0x6e, 0x98, 0xfc, 0xdb, 0xf8, 0x6d, 0x09, 0xd6, 0xb7, 0xed, 0xb1, + 0x1d, 0xda, 0xff, 0x0d, 0x72, 0x26, 0x93, 0x55, 0x4e, 0x4d, 0x56, 0x24, 0x7f, 0x65, 0xbe, 0xfc, + 0xb1, 0xb0, 0x4b, 0x9a, 0xb0, 0xa8, 0x0c, 0xba, 0xac, 0x72, 0x58, 0xc6, 0x4f, 0x41, 0xe0, 0x48, + 0x33, 0x2a, 0xc2, 0x7d, 0xe0, 0x72, 0xb3, 0xf8, 0x79, 0x55, 0x60, 0x9c, 0xb1, 0x09, 0x97, 0x52, + 0x2d, 0x15, 0xc3, 0x2f, 0x60, 0x53, 0x76, 0xf3, 0x2a, 0x3c, 0xdb, 0x70, 0x39, 0xdb, 0x58, 0xb1, + 0xfd, 0x09, 0x6c, 0xe0, 0xef, 0x9c, 0x32, 0x8b, 0x36, 0xac, 0x58, 0xa3, 0x11, 0xce, 0x65, 0xc0, + 0x8c, 0x6b, 0x66, 0xf4, 0x69, 0x5c, 0x81, 0xcd, 0x4c, 0x0b, 0xc5, 0xea, 0xef, 0x4a, 0xd0, 0x3e, + 0x74, 0x8f, 0xc3, 0x97, 0xe3, 0x27, 0x0e, 0xa1, 0x36, 0x72, 0x7c, 0x7b, 0x18, 0x3a, 0xee, 0x94, + 0x57, 0x6a, 0xf5, 0xde, 0xa7, 0xc9, 0x20, 0xe6, 0x31, 0x4c, 0x10, 0xdb, 0x51, 0x63, 0x33, 0xe1, + 0x63, 0x7c, 0x08, 0x22, 0x4f, 0x20, 0x96, 0x61, 0xb1, 0xbf, 0xd7, 0x5a, 0x10, 0x2b, 0x50, 0xde, + 0xff, 0xe6, 0xa8, 0x55, 0x12, 0x55, 0xa8, 0x3c, 0xd8, 0x3f, 0x7a, 0xdc, 0x5a, 0x34, 0xae, 0xc1, + 0xd5, 0x82, 0xae, 0xd4, 0xc8, 0x3e, 0x86, 0x2b, 0x87, 0xa7, 0xb3, 0x70, 0xe4, 0xfe, 0x30, 0xbd, + 0xf8, 0x3c, 0x75, 0x70, 0x36, 0x72, 0x8d, 0x14, 0xc3, 0x8f, 0x60, 0xb3, 0x37, 0xb5, 0x9e, 0x8e, + 0xed, 0x8b, 0xb3, 0xc3, 0x25, 0xcc, 0x36, 0x51, 0xcc, 0xee, 0xe1, 0xe2, 0x3a, 0xc1, 0xcb, 0x71, + 0xbb, 0x0a, 0x57, 0x72, 0x6d, 0x14, 0xbb, 0xbf, 0x2a, 0x41, 0x63, 0xd7, 0x0f, 0x5f, 0xbf, 0x35, + 0xea, 0x40, 0xd5, 0x99, 0x86, 0xb6, 0xff, 0xcc, 0x1a, 0xf3, 0xd6, 0xab, 0x98, 0xf1, 0xb7, 0xb8, + 0x0d, 0xad, 0xa9, 0x12, 0x64, 0x10, 0x89, 0x5c, 0x61, 0x91, 0xd7, 0x22, 0x78, 0x57, 0x89, 0x7e, + 0x02, 0x2d, 0x39, 0x11, 0x28, 0x64, 0x34, 0xd0, 0x6b, 0xa8, 0x43, 0xb3, 0x89, 0x37, 0x08, 0xcf, + 0x3c, 0x29, 0xe3, 0x92, 0x59, 0x25, 0xc0, 0x11, 0x7e, 0x53, 0xbf, 0xc7, 0xce, 0xd8, 0x66, 0x4b, + 0x28, 0x2d, 0x41, 0xfc, 0x7d, 0x9e, 0x4c, 0xc6, 0x25, 0x58, 0xd7, 0x3a, 0x52, 0xb3, 0x83, 0x40, + 0x35, 0x71, 0x49, 0xf7, 0x6c, 0x02, 0x34, 0xa0, 0x22, 0xfd, 0x33, 0x68, 0xf5, 0xa7, 0x7f, 0x8c, + 0xaa, 0xa7, 0x09, 0xfa, 0x9a, 0x6c, 0x18, 0xf9, 0x14, 0xb4, 0x36, 0x01, 0xca, 0x5c, 0x2e, 0x30, + 0x56, 0x12, 0x49, 0xb2, 0x6a, 0x02, 0x28, 0xa9, 0xfe, 0xba, 0x04, 0x4d, 0x9c, 0xca, 0x07, 0x13, + 0xef, 0xc5, 0x5b, 0x13, 0xcd, 0x9d, 0xe7, 0xfa, 0xa1, 0x5a, 0x47, 0xfe, 0x2d, 0x7e, 0x06, 0x15, + 0x9e, 0xe5, 0x32, 0x4b, 0x7f, 0x2b, 0xe9, 0x39, 0xc5, 0xf4, 0xee, 0xae, 0x3b, 0x75, 0x42, 0xd7, + 0x77, 0xa6, 0x27, 0x07, 0xee, 0xd8, 0x19, 0x9e, 0x99, 0xdc, 0x0a, 0xf7, 0x65, 0x2b, 0x8b, 0xa1, + 0xdd, 0x78, 0x60, 0xf6, 0x70, 0x5b, 0xe2, 0x6e, 0x3c, 0xd8, 0x3f, 0x4c, 0xef, 0xcb, 0x16, 0xbb, + 0x2b, 0x66, 0xac, 0x06, 0xf0, 0x0b, 0x68, 0x49, 0x5b, 0xf6, 0xaa, 0x43, 0xe0, 0x35, 0x4c, 0x38, + 0x28, 0xb6, 0x3d, 0xa8, 0x9a, 0x07, 0x5f, 0xf5, 0xb7, 0xdc, 0xe9, 0xf1, 0x39, 0xec, 0xde, 0x84, + 0xba, 0x6f, 0x4f, 0xdc, 0xd0, 0x1e, 0xc4, 0x5c, 0x6b, 0x26, 0x48, 0xd0, 0x01, 0xf1, 0xfe, 0x4d, + 0x05, 0x6a, 0xc4, 0xe7, 0x30, 0xb4, 0x42, 0xde, 0x0a, 0x33, 0x2f, 0x74, 0x26, 0x72, 0xb1, 0xcb, + 0xa6, 0xfa, 0x22, 0xb5, 0x23, 0xbb, 0xc0, 0x98, 0x45, 0xc6, 0xc4, 0xdf, 0x62, 0x15, 0x16, 0x67, + 0x1e, 0x4f, 0x6f, 0xd5, 0xc4, 0x5f, 0xb2, 0xcb, 0xa1, 0xeb, 0x8f, 0x06, 0x8e, 0xf7, 0xec, 0x13, + 0xde, 0x15, 0x4d, 0xea, 0x92, 0x40, 0x7d, 0x84, 0xa4, 0x09, 0xee, 0xb3, 0x6f, 0xd2, 0x09, 0xee, + 0x13, 0x81, 0xe7, 0xdb, 0xc7, 0xce, 0x73, 0xc9, 0x61, 0x59, 0x12, 0x48, 0x50, 0xc4, 0x21, 0x21, + 0xb8, 0xdf, 0x5e, 0xc9, 0x10, 0xdc, 0xa7, 0x71, 0x04, 0xb6, 0xef, 0xe0, 0x26, 0xa9, 0xca, 0x2d, + 0x2d, 0xbf, 0xc4, 0x8f, 0xa0, 0x89, 0xfd, 0xd8, 0xce, 0x33, 0x5b, 0x49, 0x57, 0xe3, 0xc1, 0x34, + 0x22, 0x20, 0x73, 0xcf, 0x10, 0xdd, 0x6f, 0x43, 0x8e, 0xe8, 0x3e, 0x11, 0x49, 0x9e, 0x83, 0xa9, + 0x1b, 0x3a, 0xc7, 0x67, 0xed, 0xba, 0x24, 0x92, 0xc0, 0x3d, 0x86, 0x91, 0x9c, 0x43, 0x6b, 0x78, + 0x6a, 0x0f, 0x7c, 0x32, 0xd3, 0xed, 0x06, 0x93, 0x00, 0x83, 0xd8, 0x70, 0x8b, 0x77, 0x60, 0x35, + 0x26, 0xe0, 0x65, 0x6d, 0x37, 0x99, 0xa6, 0x19, 0xd1, 0xc8, 0x98, 0xe3, 0x06, 0xd4, 0xed, 0xe9, + 0x68, 0xe0, 0x1e, 0x0f, 0x46, 0x56, 0x68, 0xb5, 0x57, 0x99, 0xa6, 0x86, 0xa0, 0xfd, 0xe3, 0x6d, + 0x04, 0x88, 0x0d, 0x58, 0xb2, 0x7d, 0xdf, 0xf5, 0xdb, 0x6b, 0x8c, 0x91, 0x1f, 0xe2, 0x26, 0x28, + 0x69, 0x06, 0xa8, 0x74, 0xfe, 0x59, 0xbb, 0xc5, 0xc8, 0xba, 0x84, 0x7d, 0x4d, 0x20, 0xb9, 0x14, + 0x28, 0x88, 0xa2, 0x58, 0x97, 0x02, 0x32, 0x88, 0x09, 0x8c, 0xef, 0xa0, 0x62, 0x7a, 0xdf, 0x3b, + 0xe2, 0x5d, 0xa8, 0x0c, 0x51, 0xd3, 0x94, 0xd3, 0xd6, 0x6d, 0x80, 0xd2, 0x41, 0x93, 0xf1, 0x68, + 0x17, 0x97, 0x02, 0xd2, 0x24, 0xd6, 0x92, 0xfa, 0xbd, 0x4b, 0x69, 0x42, 0x56, 0x32, 0x53, 0x52, + 0x18, 0xb7, 0x60, 0x15, 0xc3, 0x4f, 0xe2, 0x1e, 0xed, 0x8a, 0xc4, 0x10, 0x97, 0x74, 0x43, 0x8c, + 0xa1, 0xc4, 0x5a, 0x4c, 0xa9, 0x66, 0xe4, 0x16, 0xac, 0xe0, 0x38, 0x9e, 0x15, 0x86, 0xa9, 0x4c, + 0x18, 0xa1, 0x8d, 0xdf, 0xe5, 0x0d, 0xa9, 0x77, 0xf3, 0x72, 0xf6, 0x03, 0x55, 0x7f, 0xec, 0x1c, + 0xdb, 0xac, 0xfa, 0x65, 0xa9, 0xfa, 0xd1, 0xb7, 0xb1, 0xce, 0xe1, 0xa1, 0x2e, 0x98, 0xd1, 0x8d, + 0xf6, 0xea, 0x2b, 0xf7, 0x98, 0x04, 0x68, 0x29, 0xc6, 0x1f, 0x44, 0xd6, 0xfd, 0x42, 0x8c, 0x89, + 0x89, 0x4e, 0xae, 0x98, 0xdc, 0x8d, 0x0d, 0xff, 0xc5, 0xb8, 0x60, 0x6c, 0x97, 0xa2, 0x57, 0x6c, + 0xde, 0x87, 0x16, 0xeb, 0xef, 0xc5, 0x98, 0xa0, 0xf9, 0xd2, 0xa8, 0x93, 0x38, 0x2e, 0x8e, 0x5f, + 0x2e, 0xc6, 0x06, 0xe3, 0xb8, 0x4c, 0x0b, 0xc5, 0x6a, 0x0d, 0x9a, 0xa8, 0x1e, 0x4f, 0xfc, 0xe3, + 0xc8, 0xbd, 0x7d, 0xcc, 0x9a, 0xc5, 0x00, 0xa5, 0x2e, 0x37, 0xa1, 0x82, 0x8e, 0x28, 0xd2, 0x95, + 0x66, 0xa2, 0x2b, 0x44, 0xc4, 0x28, 0x14, 0x88, 0xdc, 0x4c, 0xc2, 0x05, 0xf7, 0x46, 0x19, 0x11, + 0x4a, 0xe3, 0x33, 0x4d, 0x08, 0xa3, 0x4c, 0xbd, 0xd6, 0x0d, 0x76, 0xac, 0x4c, 0xfd, 0xcb, 0xb0, + 0x89, 0xad, 0xbb, 0xce, 0xa9, 0x0b, 0x1b, 0x38, 0x84, 0x6d, 0x34, 0x68, 0x53, 0x7b, 0x74, 0x68, + 0xc7, 0xfe, 0xf8, 0xb6, 0xf2, 0x66, 0xd2, 0x17, 0x6f, 0x26, 0xec, 0x14, 0x29, 0x05, 0x10, 0xca, + 0x75, 0x75, 0x61, 0x33, 0xc3, 0x22, 0xde, 0x3b, 0x15, 0x9c, 0xc2, 0x68, 0x32, 0x36, 0x72, 0x3c, + 0x88, 0x96, 0x29, 0x8c, 0x9f, 0xc3, 0x06, 0x8e, 0x30, 0x2f, 0xc5, 0xbb, 0x50, 0x26, 0x7b, 0x26, + 0xc7, 0x54, 0xcc, 0x80, 0x08, 0x68, 0xc9, 0x32, 0xed, 0xd5, 0xf0, 0x0e, 0x31, 0x9c, 0xe3, 0x31, + 0xbf, 0x32, 0x6f, 0xd1, 0x82, 0xb2, 0x35, 0x1e, 0xf3, 0xc6, 0xa9, 0x9a, 0xf4, 0x93, 0x02, 0xd8, + 0x3c, 0x53, 0xd5, 0xe1, 0x03, 0x68, 0x9b, 0xb6, 0x37, 0xb6, 0x86, 0xaf, 0xde, 0x23, 0x85, 0xdc, + 0x05, 0x3c, 0x54, 0x07, 0x9b, 0x7c, 0x98, 0x66, 0x03, 0x47, 0x51, 0x68, 0xa4, 0x8a, 0x5f, 0xf1, + 0x3a, 0x6a, 0x60, 0xb5, 0x06, 0x1f, 0x03, 0x04, 0x11, 0x30, 0x5a, 0x09, 0xcd, 0x58, 0x26, 0x0d, + 0x34, 0x32, 0xe3, 0x31, 0x9f, 0xb4, 0xb2, 0x7d, 0x88, 0x8f, 0xa0, 0x16, 0x13, 0xa9, 0x51, 0x14, + 0xb2, 0x4a, 0xa8, 0x8c, 0xcb, 0xbc, 0xb0, 0x39, 0xb1, 0x8c, 0x3f, 0x88, 0xce, 0x5d, 0xaf, 0xa1, + 0x93, 0x82, 0x15, 0xba, 0x1a, 0x2d, 0x7b, 0xbe, 0xe7, 0x1d, 0xb8, 0xa2, 0x26, 0xf7, 0x75, 0x8c, + 0xaf, 0x13, 0x2f, 0x77, 0xbe, 0x27, 0x01, 0x2d, 0x5c, 0x12, 0x15, 0xe5, 0xa9, 0x65, 0x42, 0xab, + 0xad, 0xc1, 0xd4, 0x1a, 0xbd, 0x0f, 0x55, 0x8f, 0x20, 0x8e, 0x1d, 0xad, 0x50, 0x4b, 0x8b, 0x5b, + 0x25, 0x6d, 0x4c, 0x61, 0x3c, 0x87, 0x16, 0xa5, 0x0a, 0x74, 0xb6, 0xb8, 0xd3, 0x96, 0x19, 0x7f, + 0xa6, 0xc4, 0xce, 0xb7, 0x57, 0x78, 0xf1, 0x39, 0x5c, 0xc5, 0xe8, 0xc5, 0xf6, 0x07, 0xf6, 0x73, + 0x27, 0x08, 0x31, 0xd6, 0x1c, 0x68, 0xea, 0x21, 0x67, 0xf0, 0x0a, 0x13, 0xf4, 0x14, 0xfe, 0x30, + 0x51, 0x0b, 0x34, 0x20, 0x5a, 0xcf, 0x6a, 0x94, 0xbf, 0x2e, 0xa1, 0xe9, 0x96, 0xc7, 0xfc, 0x57, + 0x14, 0xe9, 0x43, 0xb8, 0xe4, 0x51, 0x24, 0x80, 0x6e, 0x34, 0x2f, 0x8c, 0x88, 0x50, 0x89, 0x1c, + 0xd1, 0x7a, 0x97, 0x93, 0xf5, 0x46, 0x35, 0x4b, 0xcb, 0xa0, 0x84, 0xfb, 0x9b, 0x12, 0x9d, 0xe2, + 0x79, 0x7d, 0xfe, 0x17, 0x26, 0x6c, 0xde, 0xc8, 0xca, 0xf3, 0x46, 0x26, 0x53, 0x08, 0x29, 0x71, + 0xd5, 0x40, 0xbe, 0x85, 0x4e, 0xac, 0x37, 0xdd, 0x20, 0x70, 0x4e, 0xa6, 0xba, 0xe2, 0x7e, 0x0e, + 0x60, 0xc5, 0x40, 0x35, 0xa2, 0x4e, 0x76, 0x44, 0x5a, 0x33, 0x8d, 0x1a, 0x03, 0xaf, 0x6b, 0x85, + 0x9c, 0x95, 0x6e, 0xfe, 0x57, 0x58, 0xa3, 0xd0, 0xb1, 0xbe, 0xbc, 0x5e, 0xa1, 0xaf, 0xc3, 0xb5, + 0x42, 0xce, 0x6a, 0xb6, 0x26, 0x70, 0x5d, 0x57, 0x87, 0xd7, 0xda, 0x77, 0x81, 0xb5, 0x79, 0x0b, + 0x6e, 0xcc, 0xeb, 0x4e, 0x09, 0xf4, 0xfb, 0x70, 0x23, 0xb5, 0xae, 0xaf, 0x77, 0x36, 0x6e, 0xc2, + 0x9b, 0x73, 0xb9, 0xa7, 0x6c, 0xd1, 0x21, 0x87, 0xaa, 0x91, 0x2d, 0xfa, 0x92, 0x6d, 0x51, 0x04, + 0x8b, 0x7d, 0xf6, 0xf2, 0xc9, 0xd8, 0x7d, 0x8a, 0x07, 0x9a, 0xdc, 0xc6, 0x78, 0xc4, 0x70, 0x53, + 0xe1, 0xd1, 0x67, 0x0b, 0xd4, 0x5c, 0x3f, 0xcd, 0xf4, 0x25, 0xda, 0xa3, 0x23, 0x4b, 0xb5, 0x4f, + 0xf2, 0x08, 0x87, 0xa1, 0xeb, 0xa5, 0x45, 0xdd, 0xa0, 0xbe, 0x12, 0xa0, 0x22, 0xfd, 0x4d, 0x19, + 0xcf, 0xc5, 0x2a, 0xfb, 0x38, 0x1d, 0xfb, 0x4e, 0x94, 0x2a, 0xa5, 0xdf, 0x14, 0xe3, 0xe3, 0x61, + 0x3f, 0xf4, 0x69, 0x93, 0x96, 0x11, 0xaa, 0xbe, 0x78, 0xf9, 0x4e, 0xa2, 0x08, 0x9b, 0x7e, 0x52, + 0xeb, 0xa7, 0xd8, 0x09, 0x1f, 0x20, 0xab, 0x26, 0xff, 0xa6, 0xf3, 0x8a, 0x13, 0x0c, 0x7e, 0x70, + 0xc2, 0xd3, 0x91, 0x6f, 0xfd, 0xc0, 0x47, 0xc7, 0xaa, 0x09, 0x4e, 0xf0, 0x3b, 0x0a, 0x82, 0x27, + 0x25, 0x78, 0x66, 0x8d, 0x1d, 0x3c, 0x26, 0x51, 0x76, 0x6e, 0x99, 0x33, 0x2b, 0x1a, 0x44, 0x60, + 0xd8, 0x39, 0x75, 0x07, 0xce, 0xc4, 0x23, 0xab, 0x1d, 0x26, 0x9c, 0x56, 0xe4, 0xde, 0x9f, 0xba, + 0x7d, 0x85, 0x8a, 0x39, 0x26, 0x87, 0x92, 0x6a, 0x2a, 0x3b, 0x74, 0x1d, 0x3d, 0x38, 0xe7, 0x3c, + 0x06, 0x56, 0x30, 0xe5, 0x73, 0x64, 0x13, 0x3d, 0x10, 0x43, 0xba, 0xc1, 0x94, 0x32, 0x3c, 0x0a, + 0xed, 0x8c, 0xf8, 0x00, 0x59, 0x33, 0xab, 0x12, 0xd0, 0x1f, 0xa9, 0x0c, 0x4f, 0x68, 0xfb, 0xf6, + 0x88, 0xcf, 0x8d, 0x55, 0x33, 0xfe, 0xa6, 0xb3, 0x1c, 0xda, 0xa4, 0xb1, 0xcd, 0xa7, 0xc5, 0xaa, + 0x29, 0x3f, 0x70, 0xfd, 0x5a, 0x38, 0xf0, 0x63, 0xdf, 0x9d, 0xa0, 0xc1, 0x43, 0xc2, 0x29, 0xae, + 0x64, 0x93, 0x09, 0x56, 0x9d, 0xe0, 0x21, 0x82, 0x7b, 0x0a, 0x4a, 0x53, 0x14, 0x67, 0xa6, 0x1c, + 0x8f, 0xcf, 0x8a, 0x78, 0xe2, 0x8f, 0x40, 0x7d, 0xcf, 0x08, 0xa1, 0xbe, 0x6d, 0x93, 0x49, 0x94, + 0x33, 0x42, 0x0b, 0xc2, 0x07, 0x67, 0x15, 0x6f, 0xab, 0xaf, 0x24, 0x65, 0xb3, 0x78, 0x4e, 0xca, + 0x46, 0xbc, 0x07, 0x6b, 0x63, 0x77, 0x7a, 0x82, 0x76, 0x58, 0x36, 0xb3, 0x23, 0x33, 0xba, 0x2a, + 0xc1, 0x07, 0x0a, 0x6a, 0xfc, 0x6d, 0x09, 0x96, 0x8e, 0xe8, 0x20, 0x41, 0x47, 0x49, 0x2d, 0x84, + 0x2d, 0x4a, 0x27, 0x31, 0x3e, 0xbe, 0x0c, 0x58, 0x4c, 0x2e, 0x03, 0xe6, 0xe6, 0xc2, 0xff, 0x1f, + 0x34, 0x46, 0xc9, 0x98, 0x28, 0x15, 0x47, 0x32, 0xa7, 0xc2, 0xe3, 0x18, 0x6b, 0xa6, 0x48, 0x39, + 0x97, 0xe0, 0x06, 0xe1, 0x40, 0xf9, 0x1d, 0xa5, 0x52, 0x04, 0x92, 0xbb, 0xd6, 0xb8, 0xcf, 0xc7, + 0x0b, 0xd3, 0x79, 0x1a, 0xed, 0xa5, 0x77, 0x60, 0x29, 0xa4, 0x91, 0xa8, 0xad, 0xb4, 0x96, 0xf4, + 0xc2, 0x03, 0x34, 0x25, 0xd6, 0xf8, 0x4c, 0x9e, 0x6f, 0xa9, 0x9d, 0xda, 0xc4, 0x17, 0x6c, 0x38, + 0x06, 0xf1, 0x44, 0x6a, 0xac, 0xad, 0xf5, 0x7a, 0xd1, 0x69, 0x9b, 0x97, 0xcd, 0x4c, 0xd6, 0xb9, + 0xac, 0xaf, 0x33, 0xed, 0xf7, 0x54, 0x6f, 0x6a, 0x13, 0xff, 0x03, 0x6d, 0x62, 0xdb, 0xf6, 0x59, + 0x57, 0x89, 0x43, 0x14, 0x05, 0x35, 0xcd, 0xf8, 0x5b, 0xfc, 0x14, 0x1a, 0x96, 0xe7, 0x8d, 0xcf, + 0xa2, 0xc9, 0x93, 0x87, 0x7e, 0x6d, 0xda, 0xbb, 0x84, 0x55, 0x3e, 0xb3, 0x6e, 0x25, 0x1f, 0x71, + 0x3e, 0xa1, 0x9c, 0xcd, 0x27, 0x50, 0x9f, 0x5a, 0x3e, 0xe1, 0x0b, 0x68, 0xda, 0x88, 0x19, 0x4c, + 0x66, 0xe3, 0xd0, 0x39, 0x75, 0x3d, 0x75, 0xdb, 0x71, 0x39, 0x69, 0xd0, 0xc3, 0xbf, 0xbb, 0x0a, + 0x6b, 0x36, 0x6c, 0xed, 0x4b, 0x74, 0x61, 0xcd, 0x77, 0x67, 0x21, 0x65, 0x57, 0x8e, 0xc7, 0xf6, + 0x30, 0x74, 0x7d, 0x5e, 0xde, 0xfa, 0xbd, 0xb6, 0x36, 0x7b, 0x44, 0x60, 0x46, 0x78, 0x73, 0xd5, + 0x4f, 0x7d, 0xa3, 0x7e, 0x57, 0x9c, 0xe9, 0xb1, 0xcb, 0x96, 0x24, 0x15, 0x76, 0x92, 0x9c, 0x32, + 0x9d, 0xc1, 0x04, 0x64, 0x60, 0x29, 0x25, 0x80, 0x76, 0x6d, 0x25, 0x6b, 0x60, 0x8f, 0x18, 0x6e, + 0x2a, 0x3c, 0x85, 0xb3, 0xa1, 0x6f, 0x4d, 0x03, 0x3e, 0xf7, 0x57, 0xb3, 0x7c, 0x8f, 0x22, 0x94, + 0x99, 0x50, 0xd1, 0x3c, 0xcb, 0x81, 0xc8, 0xa4, 0x06, 0x5b, 0x9b, 0xd4, 0x3c, 0xf3, 0x28, 0x94, + 0x19, 0xae, 0xfb, 0xc9, 0x87, 0xf1, 0x4f, 0x25, 0xa8, 0x6b, 0x8b, 0x20, 0x3e, 0x83, 0x9a, 0x33, + 0x1d, 0xa4, 0x62, 0xac, 0xf3, 0xdc, 0x59, 0xd5, 0x99, 0xaa, 0x86, 0xff, 0x1f, 0x17, 0xe2, 0x39, + 0x09, 0x93, 0x5e, 0xeb, 0xf3, 0x1a, 0x37, 0x64, 0x83, 0x84, 0x01, 0x9a, 0x5d, 0x8d, 0x41, 0xf9, + 0xc5, 0x0c, 0x64, 0x03, 0xb5, 0x0f, 0xff, 0x14, 0xea, 0xd2, 0x9a, 0xec, 0x38, 0x13, 0x67, 0x6e, + 0xb2, 0x88, 0xb2, 0x5e, 0x13, 0xeb, 0x79, 0x62, 0x8e, 0xe4, 0x2e, 0xa8, 0x23, 0x2c, 0xb2, 0x45, + 0xe2, 0x13, 0xb8, 0x1c, 0xa8, 0x9b, 0x8e, 0x41, 0x78, 0x8a, 0xe1, 0xde, 0xa9, 0x3b, 0x1e, 0x0d, + 0xbc, 0x61, 0xa8, 0xac, 0xca, 0x46, 0x84, 0x3d, 0x8a, 0x90, 0x07, 0xc3, 0xd0, 0xf8, 0xf7, 0x32, + 0x54, 0x23, 0xed, 0xa4, 0xf4, 0x9f, 0x35, 0x0b, 0x4f, 0x07, 0x1e, 0xfa, 0xfb, 0x1f, 0x5c, 0x7f, + 0xa4, 0x8c, 0x67, 0x83, 0x80, 0x07, 0x0a, 0x26, 0xde, 0x82, 0x3a, 0x9a, 0x9a, 0xa1, 0xef, 0x78, + 0xf1, 0x5d, 0x51, 0xcd, 0xd4, 0x41, 0xe2, 0x2a, 0x54, 0xc7, 0xee, 0xd0, 0x1a, 0xa3, 0x0f, 0x51, + 0x7d, 0xaf, 0xf0, 0x77, 0x37, 0x78, 0x89, 0x1b, 0x06, 0x71, 0x05, 0x56, 0xe8, 0xd6, 0x8c, 0x98, + 0xc8, 0x64, 0xea, 0x32, 0x7d, 0x22, 0x0f, 0xf4, 0x51, 0x8c, 0x38, 0x41, 0x95, 0xf0, 0x58, 0x87, + 0x6b, 0x66, 0x8d, 0x20, 0x8f, 0x08, 0x40, 0x3e, 0x8a, 0xd1, 0x6c, 0x57, 0x64, 0x12, 0xb5, 0x4a, + 0x00, 0xbe, 0x85, 0xb8, 0x03, 0xeb, 0x94, 0x26, 0xc6, 0x10, 0xd9, 0xf3, 0x9d, 0x67, 0xa8, 0xe8, + 0xc4, 0x5e, 0xba, 0xc0, 0x35, 0x89, 0x38, 0x90, 0x70, 0xec, 0xe7, 0x7d, 0x10, 0x52, 0x3f, 0x8f, + 0xc7, 0x96, 0x37, 0x18, 0x59, 0x13, 0x0f, 0x03, 0x6e, 0xd6, 0xd2, 0xaa, 0xd9, 0x62, 0xcc, 0x43, + 0x44, 0x6c, 0x4b, 0x38, 0x25, 0x3d, 0x03, 0x4a, 0x67, 0x0e, 0xdd, 0xc9, 0x64, 0x36, 0x75, 0xc2, + 0x33, 0xf6, 0x8f, 0x4d, 0xb3, 0x49, 0xd0, 0xad, 0x08, 0x48, 0xc2, 0xab, 0xd4, 0xf5, 0xd0, 0xf2, + 0xd0, 0x4d, 0x52, 0xb4, 0x50, 0x93, 0x90, 0x2d, 0x8b, 0x85, 0x97, 0x53, 0x47, 0xd8, 0x06, 0x63, + 0xe5, 0x5c, 0x12, 0x72, 0x15, 0x16, 0xd1, 0xed, 0x36, 0x79, 0xc0, 0xf8, 0x0b, 0xc3, 0xb8, 0xa6, + 0x4a, 0x18, 0x8f, 0x49, 0x79, 0x02, 0x74, 0x8b, 0x19, 0x07, 0xa1, 0xa9, 0x96, 0xd9, 0xf0, 0x92, + 0x8f, 0x00, 0x8f, 0xf0, 0x0d, 0xdd, 0xc6, 0x50, 0x86, 0xca, 0xe6, 0xcc, 0x9a, 0x5c, 0xf4, 0xaa, + 0x19, 0x7d, 0xb2, 0xea, 0x29, 0xaa, 0x41, 0x18, 0x8e, 0x63, 0xd5, 0x53, 0xb0, 0xa3, 0x70, 0x6c, + 0xfc, 0x79, 0x09, 0x56, 0xd3, 0x26, 0x87, 0xb4, 0x31, 0x63, 0xa5, 0x06, 0x43, 0xb4, 0xae, 0x2a, + 0xdc, 0xac, 0x9a, 0x1b, 0x69, 0x93, 0xb4, 0xc5, 0x38, 0x34, 0x8c, 0x9d, 0x7c, 0xab, 0x59, 0x80, + 0x41, 0x40, 0x74, 0xf9, 0xd2, 0xc4, 0x03, 0x50, 0xa6, 0x25, 0xe3, 0xfb, 0x23, 0xe3, 0x5f, 0x97, + 0xa0, 0x16, 0x1b, 0xb0, 0xff, 0x01, 0x5d, 0xbe, 0x0b, 0xd5, 0x09, 0x2a, 0x2a, 0x46, 0x75, 0x81, + 0x32, 0xe0, 0x9a, 0xc5, 0xdf, 0x55, 0x18, 0x33, 0xa6, 0x29, 0xd4, 0xfd, 0xa5, 0x17, 0xea, 0xfe, + 0xf2, 0x39, 0xba, 0xbf, 0x72, 0xae, 0xee, 0x57, 0x33, 0xba, 0x8f, 0xc6, 0x1c, 0x9d, 0x2e, 0xba, + 0x5d, 0x65, 0x69, 0x35, 0x63, 0xfe, 0x35, 0xc3, 0x4d, 0x85, 0x2f, 0xde, 0x25, 0xf0, 0x32, 0xbb, + 0xa4, 0x7e, 0xe1, 0x5d, 0xd2, 0x28, 0xda, 0x25, 0x7c, 0x0f, 0x81, 0x26, 0xd3, 0x9d, 0xca, 0xa3, + 0x2c, 0x2b, 0x7d, 0x93, 0xee, 0x21, 0x18, 0x28, 0x57, 0xf8, 0x53, 0x34, 0x78, 0x33, 0x8f, 0x6c, + 0xa9, 0x3d, 0xa2, 0xfd, 0x62, 0x3d, 0x45, 0xff, 0x1d, 0x92, 0x47, 0xa7, 0x7d, 0x50, 0x33, 0x37, + 0x63, 0xec, 0x96, 0x86, 0xa4, 0x39, 0x22, 0xdf, 0x2b, 0xf9, 0xae, 0xc9, 0x18, 0x16, 0x01, 0x92, + 0x27, 0xc6, 0x4d, 0xd6, 0x68, 0xe2, 0x44, 0xdd, 0xb6, 0x64, 0x9c, 0xc9, 0x20, 0x49, 0xd0, 0xa1, + 0xab, 0x43, 0x79, 0x63, 0xc2, 0x17, 0x0b, 0x4d, 0x33, 0xfe, 0x26, 0x9c, 0x35, 0x1c, 0xda, 0x1e, + 0xf6, 0xd8, 0x16, 0x12, 0x17, 0x7d, 0x53, 0x08, 0x6f, 0x8d, 0xd0, 0x77, 0x85, 0x4e, 0x80, 0xd8, + 0x4b, 0xf2, 0x6e, 0x27, 0x81, 0x88, 0x4b, 0xb0, 0x84, 0x73, 0x35, 0xf8, 0x55, 0x7b, 0x43, 0xe6, + 0xcc, 0xf1, 0xe3, 0x6b, 0x8a, 0x9a, 0x8f, 0xc7, 0xae, 0x17, 0xb4, 0x37, 0x19, 0x28, 0x3f, 0x8c, + 0x3f, 0x82, 0x6a, 0xa4, 0x5d, 0xe2, 0x03, 0x4d, 0x1c, 0xe9, 0xf8, 0xd6, 0x73, 0x3a, 0xa8, 0x49, + 0xf8, 0x0e, 0x25, 0x49, 0xa7, 0xa1, 0x72, 0x73, 0x05, 0xa4, 0x8c, 0x36, 0xfe, 0xb1, 0x04, 0x2b, + 0x0a, 0x22, 0x0c, 0x68, 0xec, 0xed, 0x1f, 0xf5, 0x1f, 0xf6, 0xb7, 0xba, 0x47, 0xfd, 0xfd, 0x3d, + 0xee, 0xa5, 0x62, 0x36, 0xa6, 0x1a, 0x8c, 0xbc, 0xd6, 0x37, 0x07, 0xdb, 0xdd, 0xa3, 0x1e, 0x33, + 0xae, 0x98, 0xcb, 0x33, 0xfe, 0xa2, 0x60, 0x77, 0xff, 0xa0, 0xb7, 0xa7, 0xee, 0x74, 0x2b, 0x2e, + 0xfe, 0x16, 0x6f, 0x40, 0xed, 0xab, 0x5e, 0xef, 0xa0, 0xbb, 0xd3, 0x7f, 0xd2, 0xe3, 0x6d, 0x53, + 0x31, 0x6b, 0xdf, 0x47, 0x00, 0x32, 0x43, 0x66, 0xef, 0xa1, 0xd9, 0x3b, 0x7c, 0xcc, 0x5b, 0xa3, + 0x62, 0xae, 0xf8, 0xf2, 0x93, 0xda, 0x6d, 0xf7, 0x0f, 0xb7, 0xba, 0xe6, 0x76, 0x6f, 0x9b, 0x37, + 0x05, 0xb6, 0x1b, 0x45, 0x00, 0x9a, 0xa9, 0xa3, 0xfd, 0xa3, 0xee, 0x0e, 0x6f, 0x89, 0x0a, 0xc6, + 0x9c, 0xf4, 0x81, 0x41, 0xee, 0xb2, 0xd4, 0x6c, 0xc2, 0x3b, 0x53, 0x6f, 0x16, 0x2a, 0xb7, 0x2a, + 0x3f, 0x48, 0x6e, 0x9c, 0x67, 0x02, 0xab, 0xa8, 0x52, 0x7e, 0x19, 0x36, 0x2c, 0xcb, 0xf0, 0x06, + 0xf7, 0xf8, 0x32, 0x45, 0x6c, 0xce, 0x89, 0x9a, 0xdd, 0xcb, 0xd9, 0x00, 0x68, 0x8b, 0xb1, 0xa6, + 0xa2, 0x12, 0x3f, 0x4e, 0xdf, 0x14, 0x6d, 0x66, 0xc9, 0x53, 0x77, 0x45, 0x38, 0xcd, 0x0d, 0x9d, + 0x0b, 0xa9, 0x3d, 0xf2, 0x99, 0xa2, 0x5d, 0x43, 0x03, 0x18, 0xfa, 0x67, 0xd1, 0x64, 0x2b, 0xa0, + 0x49, 0x30, 0xd2, 0x5f, 0xf6, 0xec, 0xf1, 0xb5, 0x65, 0xc5, 0xac, 0x12, 0x80, 0x38, 0xa1, 0x3e, + 0x88, 0xef, 0x6d, 0xdb, 0xc3, 0xd0, 0x17, 0x37, 0x6f, 0xe6, 0x4e, 0x7d, 0x3d, 0xc6, 0xf4, 0xa3, + 0x0b, 0xff, 0x6d, 0xb8, 0x81, 0x9a, 0xed, 0x4c, 0x66, 0x93, 0x41, 0xac, 0x8b, 0x14, 0xa4, 0x24, + 0x4d, 0xe5, 0x0a, 0xbd, 0xa1, 0xa8, 0xba, 0x3a, 0x51, 0xc4, 0xc5, 0xf8, 0xed, 0x22, 0xd4, 0xb5, + 0xe1, 0xfd, 0x1f, 0x1d, 0x06, 0x9f, 0xa2, 0xed, 0x13, 0x37, 0x74, 0x2c, 0x32, 0x28, 0x89, 0x70, + 0x52, 0x11, 0x45, 0x82, 0x7b, 0x1c, 0x89, 0x99, 0x5c, 0x2c, 0x2f, 0x2b, 0xbd, 0xcf, 0x5f, 0x2c, + 0x4b, 0x85, 0x8c, 0xbf, 0x8d, 0xff, 0x28, 0x41, 0x2d, 0x0e, 0x87, 0x69, 0xaa, 0x94, 0x7b, 0x49, + 0x5d, 0x0f, 0x35, 0xa4, 0x8f, 0x51, 0xde, 0x00, 0x8d, 0xbe, 0x24, 0xd2, 0x2e, 0xd5, 0x64, 0x98, + 0x70, 0xa0, 0x78, 0x4c, 0xc2, 0xd9, 0x60, 0xe4, 0x04, 0x43, 0xb4, 0xcc, 0xfe, 0x99, 0x3a, 0xab, + 0x36, 0x10, 0xb8, 0x1d, 0xc1, 0xc8, 0x8b, 0x93, 0x27, 0xa4, 0xf9, 0x9c, 0xb8, 0x23, 0x5b, 0xe5, + 0x1f, 0xea, 0x0a, 0xb6, 0x8b, 0x20, 0xb2, 0xcd, 0x2a, 0x34, 0x49, 0x7b, 0xa7, 0xa6, 0x84, 0x76, + 0x8b, 0x2f, 0xdf, 0x97, 0xa3, 0x8b, 0xee, 0xe8, 0xf2, 0x9d, 0x9c, 0x57, 0x38, 0xc4, 0xc3, 0x4d, + 0x10, 0xa8, 0xf0, 0x6b, 0x19, 0x3f, 0x77, 0x83, 0xc0, 0xf8, 0x12, 0xea, 0x5a, 0x48, 0x8f, 0x7b, + 0xeb, 0x92, 0x1e, 0xff, 0xa7, 0xe3, 0x83, 0x75, 0x2d, 0xde, 0x97, 0xc1, 0x81, 0x31, 0x83, 0x65, + 0x19, 0xcf, 0x90, 0xee, 0x38, 0xde, 0x20, 0x75, 0xc0, 0xaf, 0x3a, 0x9e, 0x42, 0xbe, 0x0b, 0x6b, + 0x13, 0x2b, 0xf8, 0x7e, 0x30, 0xb6, 0xa7, 0x27, 0xe8, 0xff, 0x71, 0xc9, 0xd5, 0x94, 0x35, 0x09, + 0xbc, 0xc3, 0xd0, 0x5d, 0x67, 0x9a, 0xa3, 0xb3, 0x9e, 0x2b, 0x07, 0xaf, 0xd3, 0x59, 0xcf, 0x8d, + 0xbf, 0x2c, 0x01, 0x24, 0x57, 0x23, 0x2f, 0x71, 0x57, 0x55, 0x78, 0xd6, 0x47, 0xd8, 0xd8, 0x09, + 0x42, 0x2e, 0x19, 0x41, 0x18, 0xfd, 0xe6, 0x94, 0x7c, 0x14, 0xd8, 0x57, 0x72, 0x29, 0x79, 0xc6, + 0x98, 0x31, 0x85, 0xf1, 0x08, 0xcd, 0xbf, 0x15, 0x0e, 0x4f, 0x49, 0x98, 0xf7, 0x52, 0xc2, 0x68, + 0x07, 0x2e, 0xa6, 0x38, 0x5f, 0x14, 0xe3, 0x09, 0x34, 0xba, 0x01, 0xa5, 0x3d, 0xe4, 0x58, 0x71, + 0x3d, 0x74, 0x66, 0xda, 0x11, 0x46, 0xa7, 0xd2, 0x78, 0xa2, 0xf6, 0xcb, 0xb9, 0x8b, 0xac, 0xa7, + 0xfc, 0x32, 0x7e, 0x5d, 0x06, 0x40, 0x83, 0x36, 0x72, 0x64, 0x2a, 0xe2, 0x23, 0x50, 0x35, 0x0c, + 0x83, 0xe4, 0x3e, 0x4a, 0x64, 0x24, 0xa5, 0x3b, 0xa7, 0x9a, 0xa4, 0xa2, 0x61, 0x7d, 0x0a, 0x8d, + 0x38, 0x52, 0xa2, 0x46, 0x8b, 0x73, 0x1b, 0xc5, 0x59, 0x21, 0x6a, 0xf6, 0x33, 0x58, 0xb5, 0x82, + 0x01, 0xa5, 0x70, 0xd4, 0xa2, 0xaa, 0xd3, 0xd8, 0xe5, 0xe2, 0xa1, 0x60, 0x2c, 0xa8, 0x0f, 0xff, + 0x1e, 0xba, 0x7e, 0xd5, 0x9a, 0xfa, 0xac, 0xcc, 0x17, 0x54, 0x36, 0xa3, 0x1e, 0x3f, 0x23, 0x4b, + 0xa7, 0x82, 0x16, 0x6e, 0xb5, 0x34, 0xb7, 0x55, 0x23, 0x26, 0xa4, 0x86, 0x3f, 0x87, 0x75, 0xfb, + 0x79, 0x38, 0x48, 0x37, 0x5e, 0x9e, 0xdb, 0x78, 0x0d, 0x89, 0xb7, 0xf4, 0xf6, 0xb4, 0x09, 0xbd, + 0xef, 0x1d, 0xaa, 0xb0, 0xc0, 0x38, 0x9c, 0xf7, 0xd9, 0x12, 0x6e, 0x42, 0x79, 0x81, 0x8c, 0x10, + 0xe3, 0x18, 0xd6, 0xe2, 0x06, 0x5d, 0x59, 0x77, 0xf7, 0x51, 0x6a, 0x7d, 0xaf, 0x27, 0xdd, 0x64, + 0x08, 0xb5, 0x25, 0xc6, 0xf8, 0x38, 0x12, 0xd1, 0xb1, 0x65, 0xd2, 0x0c, 0xe3, 0x63, 0x0d, 0x64, + 0xec, 0x41, 0x6d, 0xd7, 0x1e, 0xa9, 0x1e, 0x7e, 0x9c, 0xea, 0xe1, 0x8a, 0x1e, 0x5e, 0x8c, 0x72, + 0xbc, 0xd1, 0x25, 0xa3, 0xd5, 0x9d, 0x45, 0xa5, 0x37, 0xf2, 0xc3, 0x18, 0xc0, 0x1a, 0xae, 0x91, + 0x6f, 0x7b, 0x18, 0x0f, 0x2a, 0xae, 0x94, 0x44, 0x0d, 0xa6, 0xca, 0x73, 0xd3, 0x4f, 0xd2, 0x3c, + 0xa2, 0xb0, 0x62, 0xbf, 0x2d, 0xbf, 0x30, 0x56, 0x69, 0xce, 0x02, 0x1b, 0x17, 0xff, 0x38, 0x44, + 0x2b, 0x17, 0x84, 0xca, 0x12, 0xd6, 0x11, 0xb8, 0x83, 0xb0, 0x5d, 0x04, 0x19, 0xb7, 0xa1, 0xb9, + 0x87, 0xb3, 0x89, 0x27, 0x17, 0xc5, 0x7e, 0xfe, 0xdd, 0xfc, 0x3f, 0x2f, 0xc2, 0x8a, 0x24, 0x0a, + 0x92, 0x64, 0x85, 0x25, 0x4b, 0x24, 0x73, 0xdb, 0x9f, 0x2d, 0x9b, 0xa4, 0x56, 0xc9, 0x0a, 0xc5, + 0xff, 0x33, 0xa8, 0x25, 0xd1, 0xae, 0xd4, 0xe4, 0xab, 0x73, 0xe7, 0xde, 0x4c, 0x68, 0xd1, 0x1e, + 0x97, 0x27, 0x18, 0xd6, 0x95, 0xb3, 0xc9, 0x94, 0x78, 0x32, 0x4d, 0xc2, 0xa3, 0x64, 0x40, 0x7a, + 0x2b, 0xa7, 0x4c, 0xa9, 0xed, 0xd5, 0x94, 0xc6, 0xeb, 0xb3, 0xc9, 0xda, 0x2b, 0x01, 0xa8, 0x84, + 0xcd, 0x94, 0x12, 0x2a, 0xed, 0x3d, 0x47, 0xba, 0x86, 0xae, 0x87, 0xa8, 0x50, 0x2b, 0x53, 0x39, + 0x95, 0x4a, 0x75, 0xb5, 0x15, 0x4f, 0xcd, 0xb1, 0x19, 0xd1, 0xd1, 0x05, 0x5e, 0x2d, 0xbe, 0x82, + 0x8a, 0xad, 0x52, 0x49, 0x33, 0x90, 0x9f, 0x00, 0x0c, 0x63, 0xe3, 0xa1, 0xe6, 0x6b, 0x43, 0x97, + 0x28, 0xc2, 0x99, 0x1a, 0x1d, 0x6a, 0xde, 0x8a, 0x5c, 0x98, 0x40, 0xcd, 0x97, 0x16, 0xdb, 0xaa, + 0x25, 0x34, 0x23, 0x0a, 0xe3, 0x6b, 0x74, 0x24, 0x32, 0x7d, 0x53, 0x24, 0x40, 0xfa, 0x12, 0x7b, + 0xf1, 0x62, 0x97, 0xd8, 0xff, 0x52, 0x82, 0x56, 0x36, 0xd3, 0x43, 0x25, 0x09, 0xda, 0x76, 0xd8, + 0xc8, 0xe6, 0x84, 0xb4, 0xbd, 0xa0, 0x17, 0x24, 0x2e, 0x5e, 0xa0, 0x20, 0xb1, 0xa0, 0xa4, 0x3c, + 0x75, 0xb1, 0x5b, 0x79, 0xd1, 0xc5, 0xae, 0xf8, 0x10, 0x56, 0x46, 0xf6, 0xb1, 0x45, 0xc6, 0x63, + 0xe9, 0x3c, 0x55, 0x8e, 0xa8, 0x8c, 0xb7, 0x00, 0x76, 0xfd, 0x30, 0x3a, 0x15, 0xa0, 0x00, 0x5c, + 0xb4, 0xa5, 0x2e, 0x41, 0xe8, 0xb7, 0xf1, 0x17, 0x25, 0x28, 0x9b, 0xae, 0x45, 0x69, 0x0a, 0x2b, + 0x50, 0xdb, 0x15, 0x7f, 0x51, 0xe4, 0x2e, 0x4d, 0x3b, 0x1a, 0xe5, 0x28, 0x7a, 0x89, 0x01, 0xb4, + 0x97, 0xd1, 0xf5, 0x12, 0x4a, 0x25, 0xbf, 0xe5, 0x97, 0x96, 0xd9, 0xad, 0xa4, 0x32, 0xf8, 0x51, + 0x8e, 0x75, 0xe9, 0xfc, 0x9a, 0x2d, 0xe3, 0x3d, 0x99, 0xe0, 0x76, 0xad, 0x17, 0xd5, 0x61, 0xc9, + 0xba, 0x1a, 0x26, 0x4c, 0xea, 0x6a, 0x7c, 0xd7, 0x2a, 0xa8, 0xab, 0x21, 0x22, 0x46, 0x19, 0x43, + 0x28, 0x3f, 0xf1, 0x8f, 0x0b, 0xf5, 0x07, 0x87, 0xef, 0xcb, 0x5c, 0x45, 0xc3, 0xc4, 0x5f, 0x1c, + 0xac, 0xc8, 0x14, 0xa1, 0x2f, 0xdd, 0x7e, 0x03, 0x83, 0x15, 0x06, 0x98, 0x5c, 0x32, 0xab, 0x12, + 0x90, 0x7e, 0xc8, 0xab, 0x86, 0x48, 0x09, 0x30, 0x43, 0xe3, 0xdf, 0x4a, 0xb0, 0x2c, 0xef, 0xb1, + 0x72, 0x73, 0x8a, 0xed, 0xd8, 0xc6, 0xf8, 0x49, 0x51, 0x6a, 0x55, 0x02, 0xfa, 0x23, 0x72, 0x0e, + 0x14, 0x57, 0xd8, 0x53, 0x19, 0xa1, 0x95, 0xa5, 0x73, 0x90, 0x20, 0x8e, 0xd0, 0x6e, 0x43, 0x4b, + 0x11, 0x28, 0x53, 0xa7, 0x54, 0xa6, 0x66, 0xae, 0x49, 0x78, 0x37, 0x02, 0xa7, 0x12, 0xe5, 0x4b, + 0x99, 0x44, 0xf9, 0xdb, 0xb0, 0x3a, 0xf1, 0xc6, 0xc1, 0x60, 0x6c, 0x3d, 0xb5, 0xc7, 0x1c, 0x68, + 0xc9, 0x60, 0xb0, 0x41, 0xd0, 0x1d, 0x02, 0x52, 0x9c, 0x95, 0xa1, 0xc2, 0x30, 0x6b, 0x25, 0x4b, + 0x65, 0x3d, 0xbf, 0xb3, 0x05, 0xd5, 0x48, 0xcf, 0x05, 0xe0, 0xb0, 0x77, 0xf6, 0x1f, 0x74, 0x77, + 0x5a, 0x0b, 0xa2, 0x06, 0x4b, 0x3b, 0xfb, 0x5b, 0xf8, 0xb3, 0x44, 0xe0, 0xee, 0xf6, 0x2f, 0x07, + 0xfd, 0xbd, 0xd6, 0xa2, 0xa8, 0xa3, 0x65, 0xc6, 0xdf, 0x54, 0x3f, 0x5e, 0xa6, 0xd2, 0xd5, 0x27, + 0xe6, 0xc3, 0x56, 0xe5, 0xce, 0x80, 0x2e, 0x81, 0xe2, 0x28, 0x8c, 0x1a, 0x1c, 0xe0, 0x69, 0xb2, + 0xff, 0x2d, 0xf2, 0x69, 0x40, 0x75, 0xaf, 0xd7, 0x7f, 0xf4, 0xf8, 0xc1, 0xbe, 0x89, 0xac, 0xb0, + 0xc5, 0x51, 0xf7, 0x91, 0xe2, 0x73, 0x38, 0x38, 0xe8, 0x1e, 0x3d, 0x46, 0x3e, 0x4d, 0xa8, 0x6d, + 0xed, 0xef, 0xee, 0x7e, 0xb3, 0xd7, 0x3f, 0xfa, 0xae, 0x55, 0x11, 0xeb, 0xd0, 0xec, 0x7d, 0x7b, + 0x34, 0x48, 0x40, 0x4b, 0x77, 0x6e, 0xa3, 0xb7, 0x8b, 0x22, 0x2b, 0x62, 0xd2, 0xdd, 0xfb, 0x4e, + 0x16, 0xb2, 0x77, 0x77, 0x94, 0x84, 0xfd, 0xbd, 0x27, 0x3d, 0xf3, 0xa8, 0xb5, 0x78, 0xe7, 0x0e, + 0xb4, 0xb2, 0x71, 0x13, 0x55, 0xbe, 0xf7, 0xbe, 0xc6, 0x06, 0xf8, 0xf7, 0x51, 0x0f, 0xe9, 0xf1, + 0xef, 0x4e, 0x0f, 0x69, 0x3f, 0x54, 0x81, 0xb1, 0xf2, 0x18, 0x55, 0xa8, 0xec, 0xed, 0xef, 0x51, + 0x2d, 0x2e, 0x0d, 0x79, 0x6b, 0xab, 0x77, 0x70, 0x24, 0x99, 0x9b, 0xbd, 0x5f, 0xf6, 0xb6, 0x88, + 0xf9, 0x37, 0x70, 0xa9, 0xc0, 0x69, 0x93, 0xc4, 0xb1, 0xb4, 0x83, 0xee, 0xf6, 0x36, 0x72, 0xd8, + 0x80, 0x56, 0x02, 0x32, 0x7b, 0xbb, 0xfb, 0x4f, 0xa8, 0xe3, 0x4d, 0x58, 0xd7, 0xa1, 0x07, 0x3b, + 0xdd, 0x2d, 0x92, 0xe3, 0x03, 0x68, 0xa6, 0x3c, 0x35, 0x4d, 0xcf, 0x6e, 0x6f, 0x7b, 0xb0, 0xbb, + 0x4f, 0xac, 0xd6, 0xa0, 0x4e, 0x1f, 0x11, 0x79, 0xe9, 0xce, 0xfb, 0x00, 0x89, 0x25, 0x8b, 0xcb, + 0xfa, 0x69, 0x12, 0x76, 0x0f, 0xf6, 0x4d, 0x25, 0x73, 0xef, 0x5b, 0xfe, 0xbd, 0x78, 0xef, 0xef, + 0xdf, 0x84, 0xea, 0x23, 0xda, 0x49, 0x5d, 0xcf, 0x11, 0x3b, 0x50, 0xd7, 0xee, 0x63, 0xc5, 0x1b, + 0x29, 0xfb, 0x9a, 0xb9, 0xe6, 0xed, 0x5c, 0x9f, 0x83, 0x55, 0x97, 0x3a, 0x0b, 0xa2, 0x0f, 0x90, + 0xdc, 0xd8, 0x8a, 0x6b, 0x3a, 0x79, 0xe6, 0x72, 0xb7, 0xf3, 0x46, 0x31, 0x32, 0x66, 0xf5, 0x10, + 0x6a, 0xf1, 0x3d, 0xb5, 0xd0, 0x62, 0xe0, 0xec, 0x85, 0x76, 0xe7, 0x5a, 0x21, 0x2e, 0xe6, 0x83, + 0x03, 0xd4, 0xde, 0x8f, 0xe8, 0x03, 0xcc, 0x3f, 0x48, 0xd1, 0x07, 0x58, 0xf4, 0xe8, 0x64, 0x41, + 0x7c, 0x03, 0xab, 0xe9, 0x97, 0x23, 0xe2, 0x4d, 0xfd, 0xe0, 0x51, 0xf0, 0x20, 0xa5, 0xf3, 0xd6, + 0x7c, 0x02, 0x5d, 0x48, 0xed, 0xad, 0x94, 0x2e, 0x64, 0xfe, 0x61, 0x95, 0x2e, 0x64, 0xc1, 0x03, + 0x2b, 0xe4, 0x66, 0x42, 0x33, 0xf5, 0x70, 0x43, 0xdc, 0x48, 0xf9, 0xb0, 0x3c, 0xc7, 0x37, 0xe7, + 0xe2, 0x63, 0x9e, 0x7f, 0x08, 0xeb, 0xb9, 0x07, 0x21, 0xc2, 0x78, 0xf1, 0xc3, 0x94, 0xce, 0x8f, + 0xce, 0xa5, 0x89, 0xf9, 0xff, 0x1e, 0xb4, 0xb2, 0xcf, 0x43, 0xc4, 0x4d, 0xad, 0x69, 0xf1, 0x7b, + 0x93, 0x8e, 0x71, 0x1e, 0x89, 0xbe, 0x6a, 0xe9, 0xc7, 0x22, 0xfa, 0xaa, 0x15, 0xbe, 0x3c, 0xd1, + 0x57, 0x6d, 0xce, 0x3b, 0x93, 0x05, 0xf1, 0x2d, 0xac, 0x65, 0x5e, 0x8d, 0x08, 0x7d, 0xb1, 0x0b, + 0x1f, 0xa1, 0x74, 0x6e, 0x9e, 0x43, 0x11, 0x73, 0xfe, 0x12, 0x0d, 0x2f, 0x5f, 0xee, 0x8a, 0x2b, + 0xa9, 0xc5, 0x4e, 0x2e, 0x6c, 0x3b, 0xed, 0x3c, 0x42, 0x57, 0x27, 0xed, 0xd2, 0x55, 0x57, 0xa7, + 0xfc, 0xcd, 0xaf, 0xae, 0x4e, 0x45, 0x37, 0xb5, 0x0b, 0xe2, 0x17, 0x68, 0x9a, 0xe5, 0x2b, 0x35, + 0xd1, 0x4e, 0xed, 0x0f, 0xed, 0x35, 0x5a, 0xe7, 0x6a, 0x01, 0x46, 0x37, 0x0b, 0xc9, 0x9b, 0x30, + 0xdd, 0x2c, 0xe4, 0x5e, 0xb5, 0xe9, 0x66, 0xa1, 0xe0, 0x19, 0xd9, 0x02, 0x05, 0xd9, 0xea, 0xc5, + 0x04, 0x8d, 0x2c, 0x7b, 0xc7, 0xdd, 0x29, 0xbe, 0x93, 0x37, 0x16, 0x7e, 0x52, 0x12, 0xdb, 0x20, + 0x54, 0xcb, 0x07, 0x88, 0xd9, 0x3a, 0xb5, 0xa6, 0x27, 0x94, 0xee, 0xd5, 0xe4, 0x8e, 0x9e, 0xf8, + 0x9c, 0xc7, 0xe5, 0x8b, 0xf8, 0xc5, 0x46, 0x72, 0xc3, 0x51, 0xc8, 0x23, 0xf3, 0xf2, 0x8c, 0x1b, + 0xa3, 0x4d, 0x8b, 0x9f, 0xd0, 0xe8, 0x36, 0x2d, 0xfb, 0x80, 0x47, 0xb7, 0x69, 0xf9, 0x37, 0x37, + 0x72, 0x3e, 0xe3, 0x07, 0x36, 0xa9, 0xf9, 0xcc, 0xbe, 0xc5, 0x49, 0xcd, 0x67, 0xfe, 0x4d, 0xce, + 0x82, 0xf8, 0x9c, 0x35, 0x8d, 0xd8, 0x68, 0x87, 0x73, 0xfd, 0xbd, 0x53, 0x67, 0x23, 0x05, 0x57, + 0x71, 0x27, 0x0f, 0xe7, 0x31, 0xd4, 0xe2, 0x07, 0x35, 0xfa, 0x70, 0xb2, 0xcf, 0x7c, 0xf4, 0xe1, + 0xe4, 0x5f, 0xe0, 0x2c, 0xdc, 0x2a, 0x91, 0xbe, 0xcb, 0x67, 0x2d, 0xba, 0xbe, 0xa7, 0x5e, 0xd0, + 0x74, 0xda, 0x79, 0x84, 0xee, 0x2b, 0xe2, 0x17, 0x2c, 0xba, 0x20, 0xd9, 0x87, 0x31, 0x9d, 0x6b, + 0x85, 0x38, 0x5d, 0xd3, 0xd5, 0x4b, 0x00, 0x91, 0xd9, 0x5e, 0x49, 0x09, 0xb9, 0xae, 0xe9, 0x99, + 0x67, 0x03, 0xf1, 0x5e, 0xc9, 0x72, 0x48, 0xbf, 0x10, 0xc8, 0xec, 0x95, 0x0c, 0x87, 0x78, 0xaf, + 0x30, 0x93, 0x9c, 0xc0, 0x3a, 0x9f, 0x37, 0x8a, 0x91, 0x3a, 0xab, 0xa4, 0x48, 0x5f, 0xe4, 0x74, + 0x6a, 0x0e, 0xab, 0x82, 0xba, 0x7e, 0xb6, 0x28, 0x5a, 0xa5, 0xbe, 0xc8, 0x6b, 0x95, 0xce, 0xec, + 0xfa, 0x1c, 0xac, 0xbe, 0x5e, 0x71, 0x9d, 0xbd, 0xbe, 0x5e, 0xd9, 0x72, 0x7d, 0x7d, 0xbd, 0xf2, + 0x85, 0xf9, 0xec, 0xe8, 0x52, 0x35, 0xfb, 0xba, 0xa3, 0x2b, 0x2a, 0xff, 0xd7, 0x1d, 0x5d, 0x71, + 0xb1, 0x7f, 0x6c, 0x7a, 0xf1, 0xf8, 0x94, 0x31, 0xbd, 0xf1, 0x01, 0x26, 0x6b, 0x7a, 0x93, 0x03, + 0x8b, 0x6c, 0x2e, 0xab, 0xf6, 0x33, 0x9a, 0x9c, 0x94, 0xec, 0x67, 0x34, 0x59, 0x2f, 0xcb, 0xd7, + 0x34, 0x99, 0x38, 0xe4, 0x34, 0x59, 0x63, 0x72, 0xad, 0x10, 0x97, 0x19, 0x45, 0x46, 0x8c, 0xd4, + 0x33, 0x86, 0xcc, 0x28, 0xd2, 0xcd, 0x4d, 0x3e, 0xb3, 0x69, 0xc9, 0xd6, 0x1b, 0x29, 0xe2, 0x5c, + 0x91, 0xbb, 0x3e, 0xb1, 0x85, 0xaf, 0x02, 0x24, 0xcf, 0x54, 0xb5, 0xbe, 0xce, 0xb3, 0xe8, 0x19, + 0x80, 0xce, 0xb3, 0xb8, 0xcc, 0x9f, 0xa3, 0x86, 0x6c, 0x4d, 0xbe, 0x1e, 0x35, 0xcc, 0x79, 0x04, + 0xa0, 0x47, 0x0d, 0x73, 0x4b, 0xfa, 0x39, 0xe4, 0xc9, 0x15, 0xe4, 0xeb, 0x21, 0xcf, 0xbc, 0x8a, + 0x7f, 0x3d, 0xe4, 0x99, 0x5f, 0xd1, 0xbf, 0x20, 0xf6, 0xa1, 0xa1, 0x17, 0xef, 0x8b, 0x74, 0x5c, + 0x97, 0xad, 0x53, 0xef, 0xdc, 0x98, 0x87, 0xd6, 0x19, 0xea, 0x65, 0xf7, 0x22, 0x1d, 0xcd, 0x9e, + 0xc7, 0xb0, 0xb0, 0x5a, 0x5f, 0x06, 0x38, 0xe9, 0x82, 0x7a, 0x91, 0x8b, 0x66, 0x73, 0x6c, 0x6f, + 0x9e, 0x43, 0xa1, 0x2f, 0x5c, 0xb6, 0x82, 0x5e, 0x5f, 0xb8, 0x39, 0xb5, 0xfa, 0x1d, 0xe3, 0x3c, + 0x92, 0xcc, 0xd1, 0x41, 0x65, 0x96, 0xd2, 0x47, 0x87, 0x54, 0x3d, 0x78, 0xe6, 0xe8, 0x90, 0x29, + 0xbe, 0x66, 0x3e, 0x71, 0xbd, 0xb1, 0xce, 0x27, 0x5b, 0x88, 0xaf, 0xf3, 0xc9, 0x97, 0xca, 0xf3, + 0xba, 0xe8, 0x95, 0xc2, 0xfa, 0xba, 0x14, 0xd4, 0xd0, 0xeb, 0xeb, 0x52, 0x58, 0xde, 0xae, 0x02, + 0x7c, 0xad, 0xf4, 0x37, 0x1d, 0xe0, 0xe7, 0x0b, 0xdf, 0xd3, 0x01, 0x7e, 0x51, 0xa5, 0xf9, 0x82, + 0x18, 0xf1, 0x0b, 0x93, 0x5c, 0xea, 0xec, 0xed, 0x82, 0x29, 0xca, 0xd5, 0x31, 0x77, 0xde, 0x79, + 0x01, 0x95, 0xde, 0x4b, 0x41, 0x09, 0xb7, 0xde, 0xcb, 0xfc, 0xda, 0x71, 0xbd, 0x97, 0xf3, 0xea, + 0xc0, 0x17, 0xc4, 0x24, 0x7a, 0x67, 0x92, 0xeb, 0xe8, 0xbd, 0xe2, 0xb9, 0xcd, 0xf7, 0x75, 0xeb, + 0xc5, 0x84, 0x71, 0x77, 0x5e, 0xfc, 0xb8, 0x24, 0x9f, 0x79, 0x9c, 0x33, 0xf1, 0xf9, 0x0e, 0x6f, + 0x5f, 0x80, 0x32, 0xea, 0xf1, 0xe9, 0x32, 0xff, 0x0b, 0x8e, 0x8f, 0xff, 0x33, 0x00, 0x00, 0xff, + 0xff, 0x76, 0x45, 0x45, 0x00, 0x95, 0x43, 0x00, 0x00, } diff --git a/api/gobgp.proto b/api/gobgp.proto index cbae4af0..bcf6f94e 100644 --- a/api/gobgp.proto +++ b/api/gobgp.proto @@ -20,220 +20,521 @@ package gobgpapi; // Interface exported by the server. service GobgpApi { - rpc GetGlobalConfig(Arguments) returns (Global) {} - rpc ModGlobalConfig(ModGlobalConfigArguments) returns (Error) {} - rpc GetNeighbors(Arguments) returns (stream Peer) {} - rpc GetNeighbor(Arguments) returns (Peer) {} - rpc ModNeighbor(ModNeighborArguments) returns(Error) {} - rpc GetRib(Table) returns (Table) {} - rpc Reset(Arguments) returns (Error) {} - rpc SoftReset(Arguments) returns (Error) {} - rpc SoftResetIn(Arguments) returns (Error) {} - rpc SoftResetOut(Arguments) returns (Error) {} - rpc Shutdown(Arguments) returns (Error) {} - rpc Enable(Arguments) returns (Error) {} - rpc Disable(Arguments) returns (Error) {} - rpc ModPath(ModPathArguments) returns (ModPathResponse) {} - rpc ModPaths(stream ModPathsArguments) returns (Error) {} + rpc StartServer(StartServerRequest) returns (StartServerResponse) {} + rpc StopServer(StopServerRequest) returns (StopServerResponse) {} + rpc GetServer(GetServerRequest) returns (GetServerResponse) {} + rpc AddNeighbor(AddNeighborRequest) returns (AddNeighborResponse) {} + rpc DeleteNeighbor(DeleteNeighborRequest) returns (DeleteNeighborResponse) {} + rpc GetNeighbor(GetNeighborRequest) returns (GetNeighborResponse) {} + rpc ResetNeighbor(ResetNeighborRequest) returns (ResetNeighborResponse) {} + rpc SoftResetNeighbor(SoftResetNeighborRequest) returns (SoftResetNeighborResponse) {} + rpc ShutdownNeighbor(ShutdownNeighborRequest) returns (ShutdownNeighborResponse) {} + rpc EnableNeighbor(EnableNeighborRequest) returns (EnableNeighborResponse) {} + rpc DisableNeighbor(DisableNeighborRequest) returns (DisableNeighborResponse) {} + rpc GetRib(GetRibRequest) returns (GetRibResponse) {} + rpc ValidateRib(ValidateRibRequest) returns (ValidateRibResponse) {} + rpc AddPath(AddPathRequest) returns (AddPathResponse) {} + rpc DeletePath(DeletePathRequest) returns (DeletePathResponse) {} rpc MonitorRib(Table) returns (stream Destination) {} rpc MonitorBestChanged(Arguments) returns (stream Destination) {} rpc MonitorPeerState(Arguments) returns (stream Peer) {} + rpc EnableMrt(EnableMrtRequest) returns (EnableMrtResponse) {} + rpc DisableMrt(DisableMrtRequest) returns (DisableMrtResponse) {} rpc GetMrt(MrtArguments) returns (stream MrtMessage) {} - rpc ModMrt(ModMrtArguments) returns (Error) {} - rpc ModBmp(ModBmpArguments) returns (Error) {} - rpc GetRPKI(Arguments) returns (stream RPKI) {} - rpc ModRPKI(ModRpkiArguments) returns (Error) {} - rpc GetROA(Arguments) returns (stream ROA) {} - rpc GetVrfs(Arguments) returns (stream Vrf) {} - rpc ModVrf(ModVrfArguments) returns (Error) {} - rpc GetDefinedSet(DefinedSet) returns (DefinedSet) {} - rpc GetDefinedSets(DefinedSet) returns (stream DefinedSet) {} - rpc ModDefinedSet(ModDefinedSetArguments) returns (Error) {} - rpc GetStatement(Statement) returns (Statement) {} - rpc GetStatements(Statement) returns (stream Statement) {} - rpc ModStatement(ModStatementArguments) returns (Error) {} - rpc GetPolicy(Policy) returns (Policy) {} - rpc GetPolicies(Policy) returns (stream Policy) {} - rpc ModPolicy(ModPolicyArguments) returns (Error) {} - rpc GetPolicyAssignment(PolicyAssignment) returns (PolicyAssignment) {} - rpc ModPolicyAssignment(ModPolicyAssignmentArguments) returns (Error) {} -} - -message Error { - enum ErrorCode { - SUCCESS = 0; - FAIL = 1; - } - ErrorCode code = 1; - string msg = 2; + rpc InjectMrt(stream InjectMrtRequest) returns (InjectMrtResponse) {} + rpc AddBmp(AddBmpRequest) returns (AddBmpResponse) {} + rpc DeleteBmp(DeleteBmpRequest) returns (DeleteBmpResponse) {} + rpc GetRpki(GetRpkiRequest) returns (GetRpkiResponse) {} + rpc AddRpki(AddRpkiRequest) returns (AddRpkiResponse) {} + rpc DeleteRpki(DeleteRpkiRequest) returns (DeleteRpkiResponse) {} + rpc EnableRpki(EnableRpkiRequest) returns (EnableRpkiResponse) {} + rpc DisableRpki(DisableRpkiRequest) returns (DisableRpkiResponse) {} + rpc ResetRpki(ResetRpkiRequest) returns (ResetRpkiResponse) {} + rpc SoftResetRpki(SoftResetRpkiRequest) returns (SoftResetRpkiResponse) {} + rpc GetRoa(GetRoaRequest) returns (GetRoaResponse) {} + rpc AddVrf(AddVrfRequest) returns (AddVrfResponse) {} + rpc DeleteVrf(DeleteVrfRequest) returns (DeleteVrfResponse) {} + rpc GetVrf(GetVrfRequest) returns (GetVrfResponse) {} + rpc GetDefinedSet(GetDefinedSetRequest) returns (GetDefinedSetResponse) {} + rpc AddDefinedSet(AddDefinedSetRequest) returns (AddDefinedSetResponse) {} + rpc DeleteDefinedSet(DeleteDefinedSetRequest) returns (DeleteDefinedSetResponse) {} + rpc ReplaceDefinedSet(ReplaceDefinedSetRequest) returns (ReplaceDefinedSetResponse) {} + rpc GetStatement(GetStatementRequest) returns (GetStatementResponse) {} + rpc AddStatement(AddStatementRequest) returns (AddStatementResponse) {} + rpc DeleteStatement(DeleteStatementRequest) returns (DeleteStatementResponse) {} + rpc ReplaceStatement(ReplaceStatementRequest) returns (ReplaceStatementResponse) {} + rpc GetPolicy(GetPolicyRequest) returns (GetPolicyResponse) {} + rpc AddPolicy(AddPolicyRequest) returns (AddPolicyResponse) {} + rpc DeletePolicy(DeletePolicyRequest) returns (DeletePolicyResponse) {} + rpc ReplacePolicy(ReplacePolicyRequest) returns (ReplacePolicyResponse) {} + rpc GetPolicyAssignment(GetPolicyAssignmentRequest) returns (GetPolicyAssignmentResponse) {} + rpc AddPolicyAssignment(AddPolicyAssignmentRequest) returns (AddPolicyAssignmentResponse) {} + rpc DeletePolicyAssignment(DeletePolicyAssignmentRequest) returns (DeletePolicyAssignmentResponse) {} + rpc ReplacePolicyAssignment(ReplacePolicyAssignmentRequest) returns (ReplacePolicyAssignmentResponse) {} +} + +message GetNeighborRequest { +} + +message GetNeighborResponse { + repeated Peer peers = 1; } message Arguments { - Resource resource = 1; - uint32 family = 2; - string name = 3; + Resource resource = 1; + uint32 family = 2; + string name = 3; } -message ModPathArguments { - Operation operation = 1; - Resource resource = 2; - string name = 3; - Path path = 4; - // uuid field can be only used when operation is DEL - bytes uuid = 5; - // family field is only used when operation is DEL_ALL - uint32 family = 6; +message AddPathRequest { + Resource resource = 1; + string vrf_id = 2; + Path path = 3; } -message ModPathResponse { - bytes uuid = 1; +message AddPathResponse { + bytes uuid = 1; } -message ModPathsArguments { - Resource resource = 1; - string name = 2; - repeated Path paths = 3; +message DeletePathRequest { + Resource resource = 1; + string vrf_id = 2; + uint32 family = 3; + Path path = 4; + bytes uuid = 5; } -message ModNeighborArguments { - Operation operation = 1; - Peer peer = 2; +message DeletePathResponse { +} + +message AddNeighborRequest { + Peer peer = 1; +} + +message AddNeighborResponse { +} + +message DeleteNeighborRequest { + Peer peer = 1; +} + +message DeleteNeighborResponse { +} + +message ResetNeighborRequest { + string address = 1; +} + +message ResetNeighborResponse { +} + +message SoftResetNeighborRequest { + string address = 1; + enum SoftResetDirection { + IN = 0; + OUT = 1; + BOTH = 2; + } + SoftResetDirection direction = 2; +} + +message SoftResetNeighborResponse { +} + +message ShutdownNeighborRequest { + string address = 1; +} + +message ShutdownNeighborResponse { +} + +message EnableNeighborRequest { + string address = 1; +} + +message EnableNeighborResponse { +} + +message DisableNeighborRequest { + string address = 1; +} + +message DisableNeighborResponse { } message MrtArguments { - Resource resource = 1; - uint32 family = 2; - uint64 interval = 3; - string neighbor_address = 4; + Resource resource = 1; + uint32 family = 2; + uint64 interval = 3; + string neighbor_address = 4; } -message ModMrtArguments { - Operation operation = 1; - int32 dump_type = 2; - string filename = 3; - uint64 interval = 4; +message EnableMrtRequest { + int32 dump_type = 1; + string filename = 2; + uint64 interval = 3; } -message ModBmpArguments { - Operation operation = 1; - string address = 2; - uint32 port = 3; - enum MonitoringPolicy { - PRE = 0; - POST = 1; - BOTH = 2; - } - MonitoringPolicy type = 4; +message EnableMrtResponse { } -message ModRpkiArguments { - Operation operation = 1; - uint32 asn = 2; - string address = 3; - uint32 port = 4; - int64 lifetime = 5; - string prefix = 6; +message DisableMrtRequest { } -message ModVrfArguments { - Operation operation = 1; - Vrf vrf = 2; +message DisableMrtResponse { } -message ModDefinedSetArguments { - Operation operation = 1; - DefinedSet set = 2; +message InjectMrtRequest { + Resource resource = 1; + string vrf_id = 2; + repeated Path paths = 3; } -message ModStatementArguments { - Operation operation = 1; - Statement statement = 2; +message InjectMrtResponse { } -message ModPolicyArguments { - Operation operation = 1; - Policy policy = 2; - // if this flag is set, gobgpd won't define new statements - // but refer existing statements using statement's names in this arguments. - // this flag only works with Operation_ADD - bool refer_existing_statements = 3; - // if this flag is set, gobgpd won't delete any statements - // even if some statements get not used by any policy by this operation. - // this flag means nothing if it is used with Operation_ADD - bool preserve_statements = 4; +message AddBmpRequest { + string address = 1; + uint32 port = 2; + enum MonitoringPolicy { + PRE = 0; + POST = 1; + BOTH = 2; + } + MonitoringPolicy type = 3; } -message ModPolicyAssignmentArguments { - Operation operation = 1; - PolicyAssignment assignment = 2; +message AddBmpResponse { } -message ModGlobalConfigArguments { - Operation operation = 1; - Global global = 2; +message DeleteBmpRequest { + string address = 1; + uint32 port = 2; } -enum Resource { - GLOBAL = 0; - LOCAL = 1; - ADJ_IN = 2; - ADJ_OUT = 3; - VRF = 4; +message DeleteBmpResponse { +} + +message RPKIConf { + string address = 1; + string remote_port = 2; +} + +message RPKIState { + int64 uptime = 1; + int64 downtime = 2; + bool up = 3; + uint32 record_ipv4 = 4; + uint32 record_ipv6 = 5; + uint32 prefix_ipv4 = 6; + uint32 prefix_ipv6 = 7; + uint32 serial = 8; + int64 received_ipv4 = 9; + int64 received_ipv6 = 10; + int64 serial_notify = 11; + int64 cache_reset = 12; + int64 cache_response = 13; + int64 end_of_data = 14; + int64 error = 15; + int64 serial_query = 16; + int64 reset_query = 17; +} + +message Rpki { + RPKIConf conf = 1; + RPKIState state = 2; +} + +message GetRpkiRequest { + uint32 family = 1; +} + +message GetRpkiResponse { + repeated Rpki servers = 1; +} + +message AddRpkiRequest { + string address = 1; + uint32 port = 2; + int64 lifetime = 3; +} + +message AddRpkiResponse { +} + +message DeleteRpkiRequest { + string address = 1; + uint32 port = 2; +} + +message DeleteRpkiResponse { +} + +message EnableRpkiRequest { + string address = 1; +} + +message EnableRpkiResponse { +} + +message DisableRpkiRequest { + string address = 1; +} + +message DisableRpkiResponse { +} + +message ResetRpkiRequest { + string address = 1; +} + +message ResetRpkiResponse { +} + +message SoftResetRpkiRequest { + string address = 1; +} + +message SoftResetRpkiResponse { +} + +message GetVrfRequest { +} + +message GetVrfResponse { + repeated Vrf vrfs = 1; +} + +message AddVrfRequest { + Vrf vrf = 1; +} + +message AddVrfResponse { } -enum Operation { - ADD = 0; - DEL = 1; - DEL_ALL = 2; - REPLACE = 3; - ENABLE = 4; - DISABLE = 5; - RESET = 6; - SOFTRESET = 7; - INITIALIZE = 8; +message DeleteVrfRequest { + Vrf vrf = 1; +} + +message DeleteVrfResponse { +} + +message GetDefinedSetRequest { + DefinedType type = 1; +} + +message GetDefinedSetResponse { + repeated DefinedSet sets = 1; +} + +message AddDefinedSetRequest { + DefinedSet set = 1; +} + +message AddDefinedSetResponse { +} + +message DeleteDefinedSetRequest { + DefinedSet set = 1; + bool all = 2; +} + +message DeleteDefinedSetResponse { +} + +message ReplaceDefinedSetRequest { + DefinedSet set = 1; +} + +message ReplaceDefinedSetResponse { +} + +message GetStatementRequest { +} + +message GetStatementResponse { + repeated Statement statements = 1; +} + +message AddStatementRequest { + Statement statement = 1; +} + +message AddStatementResponse { +} + +message DeleteStatementRequest { + Statement statement = 1; + bool all = 2; +} + +message DeleteStatementResponse { +} + +message ReplaceStatementRequest { + Statement statement = 1; +} + +message ReplaceStatementResponse { +} + +message GetPolicyRequest { +} + +message GetPolicyResponse { + repeated Policy policies = 1; +} + +message AddPolicyRequest { + Policy policy = 1; + // if this flag is set, gobgpd won't define new statements + // but refer existing statements using statement's names in this arguments. + bool refer_existing_statements = 2; +} + +message AddPolicyResponse { +} + +message DeletePolicyRequest { + Policy policy = 1; + // if this flag is set, gobgpd won't delete any statements + // even if some statements get not used by any policy by this operation. + bool preserve_statements = 2; + bool all = 3; +} + +message DeletePolicyResponse { +} + +message ReplacePolicyRequest { + Policy policy = 1; + // if this flag is set, gobgpd won't define new statements + // but refer existing statements using statement's names in this arguments. + bool refer_existing_statements = 2; + // if this flag is set, gobgpd won't delete any statements + // even if some statements get not used by any policy by this operation. + bool preserve_statements = 3; +} + +message ReplacePolicyResponse { +} + +message GetPolicyAssignmentRequest { + PolicyAssignment assignment = 1; +} + +message GetPolicyAssignmentResponse { + PolicyAssignment assignment = 1; +} + +message AddPolicyAssignmentRequest { + PolicyAssignment assignment = 1; +} + +message AddPolicyAssignmentResponse { +} + +message DeletePolicyAssignmentRequest { + PolicyAssignment assignment = 1; + bool all = 2; +} + +message DeletePolicyAssignmentResponse { +} + +message ReplacePolicyAssignmentRequest { + PolicyAssignment assignment = 1; +} + +message ReplacePolicyAssignmentResponse { +} + +message GetServerRequest { +} + +message GetServerResponse { + Global global = 1; +} + +message StartServerRequest { + Global global = 1; +} + +message StartServerResponse { +} + +message StopServerRequest { +} + +message StopServerResponse { +} + +enum Resource { + GLOBAL = 0; + LOCAL = 1; + ADJ_IN = 2; + ADJ_OUT = 3; + VRF = 4; } message Path { - bytes nlri = 1; - repeated bytes pattrs = 2; - int64 age = 3; - bool best = 4; - bool is_withdraw = 5; - int32 validation = 6; - bool no_implicit_withdraw = 7; - uint32 family = 8; - uint32 source_asn = 9; - string source_id = 10; - bool filtered = 11; - bool stale = 12; - bool is_from_external = 13; - string neighbor_ip = 14; + bytes nlri = 1; + repeated bytes pattrs = 2; + int64 age = 3; + bool best = 4; + bool is_withdraw = 5; + int32 validation = 6; + bool no_implicit_withdraw = 7; + uint32 family = 8; + uint32 source_asn = 9; + string source_id = 10; + bool filtered = 11; + bool stale = 12; + bool is_from_external = 13; + string neighbor_ip = 14; } message Destination { - string prefix = 1; - repeated Path paths = 2; - bool longer_prefixes = 3; + string prefix = 1; + repeated Path paths = 2; + bool longer_prefixes = 3; } message Table { - Resource type = 1; - string name = 2; - uint32 family = 3; - repeated Destination destinations = 4; - bool post_policy = 5; + Resource type = 1; + string name = 2; + uint32 family = 3; + repeated Destination destinations = 4; + bool post_policy = 5; +} + +message GetRibRequest { + Table table = 1; +} + +message GetRibResponse { + Table table = 1; +} + +message ValidateRibRequest { + Resource type = 1; + uint32 family = 2; + string prefix = 3; +} + +message ValidateRibResponse { } message Peer { - repeated uint32 families = 2; - ApplyPolicy apply_policy = 3; - PeerConf conf = 5; - EbgpMultihop ebgp_multihop = 6; - RouteReflector route_reflector = 10; - PeerState info = 11; - Timers timers = 12; - Transport transport = 13; - RouteServer route_server = 15; + repeated uint32 families = 1; + ApplyPolicy apply_policy = 2; + PeerConf conf = 3; + EbgpMultihop ebgp_multihop = 4; + RouteReflector route_reflector = 5; + PeerState info = 6; + Timers timers = 7; + Transport transport = 8; + RouteServer route_server = 9; } message ApplyPolicy { @@ -243,9 +544,9 @@ message ApplyPolicy { } message PrefixLimit { - uint32 family = 1; - uint32 max_prefixes = 2; - uint32 shutdown_threshold_pct = 3; + uint32 family = 1; + uint32 max_prefixes = 2; + uint32 shutdown_threshold_pct = 3; } message PeerConf { @@ -273,7 +574,7 @@ message EbgpMultihop { message RouteReflector { bool route_reflector_client = 1; uint32 route_reflector_cluster_id = 2; - } +} message PeerState { string auth_password = 1; @@ -320,25 +621,25 @@ message Queues { } message Timers { - TimersConfig config =1; - TimersState state = 2; + TimersConfig config =1; + TimersState state = 2; } message TimersConfig{ - uint64 connect_retry = 1; - uint64 hold_time = 2; - uint64 keepalive_interval = 3; - uint64 minimum_advertisement_interval = 4; + uint64 connect_retry = 1; + uint64 hold_time = 2; + uint64 keepalive_interval = 3; + uint64 minimum_advertisement_interval = 4; } message TimersState{ - uint64 connect_retry = 1; - uint64 hold_time = 2; - uint64 keepalive_interval = 3; - uint64 minimum_advertisement_interval = 4; - uint64 negotiated_hold_time = 5; - uint64 uptime = 6; - uint64 downtime = 7; + uint64 connect_retry = 1; + uint64 hold_time = 2; + uint64 keepalive_interval = 3; + uint64 minimum_advertisement_interval = 4; + uint64 negotiated_hold_time = 5; + uint64 uptime = 6; + uint64 downtime = 7; } message Transport { @@ -349,192 +650,170 @@ message Transport { string remote_address = 5; uint32 remote_port = 6; uint32 tcp_mss = 7; - } +} message RouteServer { bool route_server_client = 1; } message Prefix { - string ip_prefix = 1; - uint32 mask_length_min = 2; - uint32 mask_length_max = 3; + string ip_prefix = 1; + uint32 mask_length_min = 2; + uint32 mask_length_max = 3; } enum DefinedType { - PREFIX = 0; - NEIGHBOR = 1; - TAG = 2; - AS_PATH = 3; - COMMUNITY = 4; - EXT_COMMUNITY = 5; + PREFIX = 0; + NEIGHBOR = 1; + TAG = 2; + AS_PATH = 3; + COMMUNITY = 4; + EXT_COMMUNITY = 5; } message DefinedSet { - DefinedType type = 1; - string name = 2; - repeated string list = 3; - repeated Prefix prefixes = 4; + DefinedType type = 1; + string name = 2; + repeated string list = 3; + repeated Prefix prefixes = 4; } enum MatchType { - ANY = 0; - ALL = 1; - INVERT = 2; + ANY = 0; + ALL = 1; + INVERT = 2; } message MatchSet { - MatchType type = 1; - string name = 2; + MatchType type = 1; + string name = 2; } enum AsPathLengthType { - EQ = 0; - GE = 1; - LE = 2; + EQ = 0; + GE = 1; + LE = 2; } message AsPathLength { - AsPathLengthType type = 1; - uint32 length = 2; + AsPathLengthType type = 1; + uint32 length = 2; } message Conditions { - MatchSet prefix_set = 1; - MatchSet neighbor_set = 2; - AsPathLength as_path_length = 3; - MatchSet as_path_set = 4; - MatchSet community_set = 5; - MatchSet ext_community_set = 6; - int32 rpki_result = 7; + MatchSet prefix_set = 1; + MatchSet neighbor_set = 2; + AsPathLength as_path_length = 3; + MatchSet as_path_set = 4; + MatchSet community_set = 5; + MatchSet ext_community_set = 6; + int32 rpki_result = 7; } enum RouteAction { - NONE = 0; - ACCEPT = 1; - REJECT = 2; + NONE = 0; + ACCEPT = 1; + REJECT = 2; } enum CommunityActionType { - COMMUNITY_ADD = 0; - COMMUNITY_REMOVE = 1; - COMMUNITY_REPLACE = 2; + COMMUNITY_ADD = 0; + COMMUNITY_REMOVE = 1; + COMMUNITY_REPLACE = 2; } message CommunityAction { - CommunityActionType type = 1; - repeated string communities = 2; + CommunityActionType type = 1; + repeated string communities = 2; } enum MedActionType { - MED_MOD = 0; - MED_REPLACE = 1; + MED_MOD = 0; + MED_REPLACE = 1; } message MedAction { - MedActionType type = 1; - int64 value = 2; + MedActionType type = 1; + int64 value = 2; } message AsPrependAction { - uint32 asn = 1; - uint32 repeat = 2; - bool use_left_most = 3; + uint32 asn = 1; + uint32 repeat = 2; + bool use_left_most = 3; } message NexthopAction { - string address = 1; + string address = 1; } message Actions { - RouteAction route_action = 1; - CommunityAction community = 2; - MedAction med = 3; - AsPrependAction as_prepend = 4; - CommunityAction ext_community = 5; - NexthopAction nexthop = 6; + RouteAction route_action = 1; + CommunityAction community = 2; + MedAction med = 3; + AsPrependAction as_prepend = 4; + CommunityAction ext_community = 5; + NexthopAction nexthop = 6; } message Statement { - string name = 1; - Conditions conditions = 2; - Actions actions = 3; + string name = 1; + Conditions conditions = 2; + Actions actions = 3; } message Policy { - string name = 1; - repeated Statement statements = 2; + string name = 1; + repeated Statement statements = 2; } enum PolicyType { - IN = 0; - IMPORT = 1; - EXPORT = 2; + IN = 0; + IMPORT = 1; + EXPORT = 2; } message PolicyAssignment { - PolicyType type = 1; - Resource resource = 2; - string name = 3; - repeated Policy policies = 4; - RouteAction default = 5; + PolicyType type = 1; + Resource resource = 2; + string name = 3; + repeated Policy policies = 4; + RouteAction default = 5; } message MrtMessage { - bytes data = 1; + bytes data = 1; } -message RPKIConf { - string address = 1; - string remote_port = 2; +message Roa { + uint32 as = 1; + uint32 prefixlen = 2; + uint32 maxlen = 3; + string prefix = 4; + RPKIConf conf = 5; } -message RPKIState { - int64 uptime = 1; - int64 downtime = 2; - bool up = 3; - uint32 record_ipv4 = 4; - uint32 record_ipv6 = 5; - uint32 prefix_ipv4 = 6; - uint32 prefix_ipv6 = 7; - uint32 serial = 8; - int64 received_ipv4 = 9; - int64 received_ipv6 = 10; - int64 serial_notify = 11; - int64 cache_reset = 12; - int64 cache_response = 13; - int64 end_of_data = 14; - int64 error = 15; - int64 serial_query = 16; - int64 reset_query = 17; -} - -message RPKI { - RPKIConf conf = 1; - RPKIState state = 2; -} - -message ROA { - uint32 as = 1; - uint32 prefixlen = 2; - uint32 maxlen = 3; - string prefix = 4; - RPKIConf conf = 5; +message GetRoaRequest { + uint32 family = 1; +} + +message GetRoaResponse { + repeated Roa roas = 1; } message Vrf { - string name = 1; - bytes rd = 2; - repeated bytes import_rt = 3; - repeated bytes export_rt = 4; + string name = 1; + bytes rd = 2; + repeated bytes import_rt = 3; + repeated bytes export_rt = 4; } message Global { - uint32 as = 1; - string router_id = 2; - int32 listen_port = 3; - repeated string listen_addresses = 4; - repeated uint32 families = 5; - uint32 mpls_label_min = 6; - uint32 mpls_label_max = 7; + uint32 as = 1; + string router_id = 2; + int32 listen_port = 3; + repeated string listen_addresses = 4; + repeated uint32 families = 5; + uint32 mpls_label_min = 6; + uint32 mpls_label_max = 7; } diff --git a/gobgp/cmd/bmp.go b/gobgp/cmd/bmp.go index 70ea8f47..20364592 100644 --- a/gobgp/cmd/bmp.go +++ b/gobgp/cmd/bmp.go @@ -26,46 +26,51 @@ import ( ) func modBmpServer(cmdType string, args []string) error { - arg := &api.ModBmpArguments{} if len(args) < 1 { return fmt.Errorf("usage: gobgp bmp %s <addr>[:<port>] [{pre|post|both}]", cmdType) } - host, port, err := net.SplitHostPort(args[0]) - if err != nil { + var address string + port := uint32(bmp.BMP_DEFAULT_PORT) + if host, p, err := net.SplitHostPort(args[0]); err != nil { ip := net.ParseIP(args[0]) if ip == nil { return nil } - arg.Address = args[0] - arg.Port = bmp.BMP_DEFAULT_PORT + address = args[0] } else { - arg.Address = host - p, _ := strconv.Atoi(port) - arg.Port = uint32(p) + address = host + pn, _ := strconv.Atoi(p) + port = uint32(pn) } + var err error switch cmdType { case CMD_ADD: - arg.Operation = api.Operation_ADD + policyType := api.AddBmpRequest_PRE if len(args) > 1 { switch args[1] { case "pre": - arg.Type = api.ModBmpArguments_PRE + policyType = api.AddBmpRequest_PRE case "post": - arg.Type = api.ModBmpArguments_POST + policyType = api.AddBmpRequest_POST case "both": - arg.Type = api.ModBmpArguments_BOTH + policyType = api.AddBmpRequest_BOTH default: return fmt.Errorf("invalid bmp policy type. valid type is {pre|post|both}") } - } else { - arg.Type = api.ModBmpArguments_PRE } + _, err = client.AddBmp(context.Background(), &api.AddBmpRequest{ + Address: address, + Port: port, + Type: policyType, + }) case CMD_DEL: - arg.Operation = api.Operation_DEL + _, err = client.DeleteBmp(context.Background(), &api.DeleteBmpRequest{ + Address: address, + Port: port, + }) } - _, err = client.ModBmp(context.Background(), arg) return err } diff --git a/gobgp/cmd/common.go b/gobgp/cmd/common.go index c3fcca7b..852f001c 100644 --- a/gobgp/cmd/common.go +++ b/gobgp/cmd/common.go @@ -384,7 +384,7 @@ func (p policies) Less(i, j int) bool { return p[i].Name < p[j].Name } -type roas []*gobgpapi.ROA +type roas []*gobgpapi.Roa func (r roas) Len() int { return len(r) diff --git a/gobgp/cmd/global.go b/gobgp/cmd/global.go index 4a1dee08..bcf55ff2 100644 --- a/gobgp/cmd/global.go +++ b/gobgp/cmd/global.go @@ -790,26 +790,30 @@ usage: %s rib %s match <MATCH_EXPR> then <THEN_EXPR> -a %%s return err } - arg := &api.ModPathArguments{ - Operation: api.Operation_ADD, - Resource: resource, - Name: name, - Path: path, - } - - if modtype == CMD_DEL { - arg.Operation = api.Operation_DEL + if modtype == CMD_ADD { + arg := &api.AddPathRequest{ + Resource: resource, + VrfId: name, + Path: path, + } + _, err = client.AddPath(context.Background(), arg) + } else { + arg := &api.DeletePathRequest{ + Resource: resource, + VrfId: name, + Path: path, + } + _, err = client.DeletePath(context.Background(), arg) } - - _, err = client.ModPath(context.Background(), arg) return err } func showGlobalConfig(args []string) error { - g, err := client.GetGlobalConfig(context.Background(), &api.Arguments{}) + rsp, err := client.GetServer(context.Background(), &api.GetServerRequest{}) if err != nil { return err } + g := rsp.Global if globalOpts.Json { j, _ := json.Marshal(g) fmt.Println(string(j)) @@ -859,8 +863,7 @@ func modGlobalConfig(args []string) error { return err } } - _, err = client.ModGlobalConfig(context.Background(), &api.ModGlobalConfigArguments{ - Operation: api.Operation_ADD, + _, err = client.StartServer(context.Background(), &api.StartServerRequest{ Global: &api.Global{ As: uint32(asn), RouterId: id.String(), @@ -920,12 +923,11 @@ func NewGlobalCmd() *cobra.Command { if err != nil { exitWithError(err) } - arg := &api.ModPathArguments{ - Operation: api.Operation_DEL_ALL, - Resource: api.Resource_GLOBAL, - Family: uint32(family), + arg := &api.DeletePathRequest{ + Resource: api.Resource_GLOBAL, + Family: uint32(family), } - _, err = client.ModPath(context.Background(), arg) + _, err = client.DeletePath(context.Background(), arg) if err != nil { exitWithError(err) } @@ -982,9 +984,7 @@ func NewGlobalCmd() *cobra.Command { allCmd := &cobra.Command{ Use: CMD_ALL, Run: func(cmd *cobra.Command, args []string) { - _, err := client.ModGlobalConfig(context.Background(), &api.ModGlobalConfigArguments{ - Operation: api.Operation_DEL_ALL, - }) + _, err := client.StopServer(context.Background(), &api.StopServerRequest{}) if err != nil { exitWithError(err) } diff --git a/gobgp/cmd/mrt.go b/gobgp/cmd/mrt.go index 658e9703..e770cc48 100644 --- a/gobgp/cmd/mrt.go +++ b/gobgp/cmd/mrt.go @@ -200,7 +200,7 @@ func injectMrt(r string, filename string, count int, skip int) error { idx := 0 - ch := make(chan *api.ModPathsArguments, 1<<20) + ch := make(chan *api.InjectMrtRequest, 1<<20) go func() { @@ -288,7 +288,7 @@ func injectMrt(r string, filename string, count int, skip int) error { } if idx >= skip { - ch <- &api.ModPathsArguments{ + ch <- &api.InjectMrtRequest{ Resource: resource, Paths: paths, } @@ -304,7 +304,7 @@ func injectMrt(r string, filename string, count int, skip int) error { close(ch) }() - stream, err := client.ModPaths(context.Background()) + stream, err := client.InjectMrt(context.Background()) if err != nil { return fmt.Errorf("failed to modpath: %s", err) } @@ -316,13 +316,10 @@ func injectMrt(r string, filename string, count int, skip int) error { } } - res, err := stream.CloseAndRecv() + _, err = stream.CloseAndRecv() if err != nil { return fmt.Errorf("failed to send: %s", err) } - if res.Code != api.Error_SUCCESS { - return fmt.Errorf("error: code: %d, msg: %s", res.Code, res.Msg) - } return nil } @@ -402,63 +399,10 @@ func NewMrtCmd() *cobra.Command { } injectCmd.AddCommand(globalInjectCmd) - modMrt := func(op api.Operation, filename string) { - arg := &api.ModMrtArguments{ - Operation: op, - Filename: filename, - } - client.ModMrt(context.Background(), arg) - } - - enableCmd := &cobra.Command{ - Use: CMD_ENABLE, - Run: func(cmd *cobra.Command, args []string) { - if len(args) != 1 { - exitWithError(fmt.Errorf("usage: gobgp mrt update enable <filename>")) - } - modMrt(api.Operation_ADD, args[0]) - }, - } - - disableCmd := &cobra.Command{ - Use: CMD_DISABLE, - Run: func(cmd *cobra.Command, args []string) { - if len(args) != 0 { - exitWithError(fmt.Errorf("usage: gobgp mrt update disable")) - } - modMrt(api.Operation_DEL, "") - }, - } - - rotateCmd := &cobra.Command{ - Use: CMD_ROTATE, - Run: func(cmd *cobra.Command, args []string) { - if len(args) != 1 { - exitWithError(fmt.Errorf("usage: gobgp mrt update rotate <filename>")) - } - modMrt(api.Operation_REPLACE, args[0]) - }, - } - - restartCmd := &cobra.Command{ - Use: CMD_RESET, - Run: func(cmd *cobra.Command, args []string) { - if len(args) > 0 { - exitWithError(fmt.Errorf("usage: gobgp mrt update reset")) - } - modMrt(api.Operation_REPLACE, "") - }, - } - - updateCmd := &cobra.Command{ - Use: CMD_UPDATE, - } - updateCmd.AddCommand(enableCmd, disableCmd, restartCmd, rotateCmd) - mrtCmd := &cobra.Command{ Use: CMD_MRT, } - mrtCmd.AddCommand(dumpCmd, injectCmd, updateCmd) + mrtCmd.AddCommand(dumpCmd, injectCmd) return mrtCmd } diff --git a/gobgp/cmd/neighbor.go b/gobgp/cmd/neighbor.go index 78d2484b..3d83f01a 100644 --- a/gobgp/cmd/neighbor.go +++ b/gobgp/cmd/neighbor.go @@ -23,7 +23,6 @@ import ( "github.com/osrg/gobgp/packet/bgp" "github.com/spf13/cobra" "golang.org/x/net/context" - "io" "net" "sort" "strconv" @@ -32,20 +31,13 @@ import ( ) func getNeighbors() (peers, error) { - arg := &api.Arguments{} - stream, e := client.GetNeighbors(context.Background(), arg) + r, e := client.GetNeighbor(context.Background(), &api.GetNeighborRequest{}) if e != nil { fmt.Println(e) return nil, e } m := peers{} - for { - p, e := stream.Recv() - if e == io.EOF { - break - } else if e != nil { - return nil, e - } + for _, p := range r.Peers { if neighborsOpts.Transport != "" { addr := net.ParseIP(p.Conf.NeighborAddress) if addr.To4() != nil { @@ -63,6 +55,19 @@ func getNeighbors() (peers, error) { return m, nil } +func getNeighbor(addr string) (*Peer, error) { + l, e := getNeighbors() + if e != nil { + return nil, e + } + for _, p := range l { + if p.Conf.RemoteIp.String() == addr { + return p, nil + } + } + return nil, fmt.Errorf("Neighbor that has %v doesn't exist.", addr) +} + func showNeighbors() error { m, err := getNeighbors() if err != nil { @@ -143,15 +148,10 @@ func showNeighbors() error { } func showNeighbor(args []string) error { - arg := &api.Arguments{ - Name: args[0], - } - peer, e := client.GetNeighbor(context.Background(), arg) + p, e := getNeighbor(args[0]) if e != nil { return e } - p := ApiStruct2Peer(peer) - if globalOpts.Json { j, _ := json.Marshal(p) fmt.Println(string(j)) @@ -488,21 +488,21 @@ func showNeighborRib(r string, name string, args []string) error { } } - rib, err := client.GetRib(context.Background(), arg) + rsp, err := client.GetRib(context.Background(), &api.GetRibRequest{ + Table: arg, + }) if err != nil { return err } - + rib := rsp.Table switch r { case CMD_LOCAL, CMD_ADJ_IN, CMD_ACCEPTED, CMD_REJECTED, CMD_ADJ_OUT: if len(rib.Destinations) == 0 { - peer, err := client.GetNeighbor(context.Background(), &api.Arguments{ - Name: name, - }) + peer, err := getNeighbor(name) if err != nil { return err } - if ApiStruct2Peer(peer).Info.BgpState != "BGP_FSM_ESTABLISHED" { + if peer.Info.BgpState != "BGP_FSM_ESTABLISHED" { return fmt.Errorf("Neighbor %v's BGP session is not established", name) } } @@ -590,40 +590,37 @@ func showNeighborRib(r string, name string, args []string) error { } func resetNeighbor(cmd string, remoteIP string, args []string) error { - family, err := checkAddressFamily(addr2AddressFamily(net.ParseIP(remoteIP))) - if err != nil { - return err - } - arg := &api.Arguments{ - Name: remoteIP, - Family: uint32(family), - } switch cmd { case CMD_RESET: - client.Reset(context.Background(), arg) + client.ResetNeighbor(context.Background(), &api.ResetNeighborRequest{Address: remoteIP}) case CMD_SOFT_RESET: - client.SoftReset(context.Background(), arg) + client.SoftResetNeighbor(context.Background(), &api.SoftResetNeighborRequest{ + Address: remoteIP, + Direction: api.SoftResetNeighborRequest_BOTH, + }) case CMD_SOFT_RESET_IN: - client.SoftResetIn(context.Background(), arg) + client.SoftResetNeighbor(context.Background(), &api.SoftResetNeighborRequest{ + Address: remoteIP, + Direction: api.SoftResetNeighborRequest_IN, + }) case CMD_SOFT_RESET_OUT: - client.SoftResetOut(context.Background(), arg) + client.SoftResetNeighbor(context.Background(), &api.SoftResetNeighborRequest{ + Address: remoteIP, + Direction: api.SoftResetNeighborRequest_OUT, + }) } return nil } func stateChangeNeighbor(cmd string, remoteIP string, args []string) error { - arg := &api.Arguments{ - Family: uint32(bgp.RF_IPv4_UC), - Name: remoteIP, - } var err error switch cmd { case CMD_SHUTDOWN: - _, err = client.Shutdown(context.Background(), arg) + _, err = client.ShutdownNeighbor(context.Background(), &api.ShutdownNeighborRequest{Address: remoteIP}) case CMD_ENABLE: - _, err = client.Enable(context.Background(), arg) + _, err = client.EnableNeighbor(context.Background(), &api.EnableNeighborRequest{Address: remoteIP}) case CMD_DISABLE: - _, err = client.Disable(context.Background(), arg) + _, err = client.DisableNeighbor(context.Background(), &api.DisableNeighborRequest{Address: remoteIP}) } return err } @@ -642,12 +639,13 @@ func showNeighborPolicy(remoteIP net.IP, policyType string, indent int) error { if remoteIP == nil { r = api.Resource_GLOBAL } - arg := &api.PolicyAssignment{ - Name: remoteIP.String(), - Resource: r, - Type: typ, + arg := &api.GetPolicyAssignmentRequest{ + Assignment: &api.PolicyAssignment{ + Name: remoteIP.String(), + Resource: r, + Type: typ, + }, } - ap, e := client.GetPolicyAssignment(context.Background(), arg) if e != nil { return e @@ -660,8 +658,8 @@ func showNeighborPolicy(remoteIP net.IP, policyType string, indent int) error { } fmt.Printf("%s policy:\n", strings.Title(policyType)) - fmt.Printf("%sDefault: %s\n", strings.Repeat(" ", indent), ap.Default) - for _, p := range ap.Policies { + fmt.Printf("%sDefault: %s\n", strings.Repeat(" ", indent), ap.Assignment.Default) + for _, p := range ap.Assignment.Policies { fmt.Printf("%sName %s:\n", strings.Repeat(" ", indent), p.Name) printPolicy(indent+4, p) } @@ -705,14 +703,13 @@ func modNeighborPolicy(remoteIP net.IP, policyType, cmdType string, args []strin usage = fmt.Sprintf("usage: gobgp global policy %s %s", policyType, cmdType) } - arg := &api.ModPolicyAssignmentArguments{ - Assignment: &api.PolicyAssignment{ - Type: typ, - Resource: r, - Name: remoteIP.String(), - }, + assign := &api.PolicyAssignment{ + Type: typ, + Resource: r, + Name: remoteIP.String(), } + var err error switch cmdType { case CMD_ADD, CMD_SET: if len(args) < 1 { @@ -724,24 +721,32 @@ func modNeighborPolicy(remoteIP net.IP, policyType, cmdType string, args []strin if err != nil { return fmt.Errorf("%s\n%s <policy name>... [default {%s|%s}]", err, usage, "accept", "reject") } - if cmdType == CMD_ADD { - arg.Operation = api.Operation_ADD - } else { - arg.Operation = api.Operation_REPLACE - } - arg.Assignment.Default = def - case CMD_DEL: - arg.Operation = api.Operation_DEL - if len(args) == 0 { - arg.Operation = api.Operation_DEL_ALL - } + assign.Default = def } ps := make([]*api.Policy, 0, len(args)) for _, name := range args { ps = append(ps, &api.Policy{Name: name}) } - arg.Assignment.Policies = ps - _, err := client.ModPolicyAssignment(context.Background(), arg) + assign.Policies = ps + switch cmdType { + case CMD_ADD: + _, err = client.AddPolicyAssignment(context.Background(), &api.AddPolicyAssignmentRequest{ + Assignment: assign, + }) + case CMD_SET: + _, err = client.ReplacePolicyAssignment(context.Background(), &api.ReplacePolicyAssignmentRequest{ + Assignment: assign, + }) + case CMD_DEL: + all := false + if len(args) == 0 { + all = true + } + _, err = client.DeletePolicyAssignment(context.Background(), &api.DeletePolicyAssignmentRequest{ + Assignment: assign, + All: all, + }) + } return err } @@ -755,7 +760,7 @@ func modNeighbor(cmdType string, args []string) error { if len(m[""]) != 1 || net.ParseIP(m[""][0]) == nil { return fmt.Errorf("%s", usage) } - arg := &api.ModNeighborArguments{} + var err error switch cmdType { case CMD_ADD: if len(m["as"]) != 1 { @@ -765,22 +770,25 @@ func modNeighbor(cmdType string, args []string) error { if err != nil { return err } - arg.Operation = api.Operation_ADD - arg.Peer = &api.Peer{ - Conf: &api.PeerConf{ - NeighborAddress: m[""][0], - PeerAs: uint32(as), + arg := &api.AddNeighborRequest{ + Peer: &api.Peer{ + Conf: &api.PeerConf{ + NeighborAddress: m[""][0], + PeerAs: uint32(as), + }, }, } + _, err = client.AddNeighbor(context.Background(), arg) case CMD_DEL: - arg.Operation = api.Operation_DEL - arg.Peer = &api.Peer{ - Conf: &api.PeerConf{ - NeighborAddress: m[""][0], + arg := &api.DeleteNeighborRequest{ + Peer: &api.Peer{ + Conf: &api.PeerConf{ + NeighborAddress: m[""][0], + }, }, } + _, err = client.DeleteNeighbor(context.Background(), arg) } - _, err := client.ModNeighbor(context.Background(), arg) return err } diff --git a/gobgp/cmd/policy.go b/gobgp/cmd/policy.go index 01b402ac..071fe0ef 100644 --- a/gobgp/cmd/policy.go +++ b/gobgp/cmd/policy.go @@ -24,7 +24,6 @@ import ( "github.com/osrg/gobgp/table" "github.com/spf13/cobra" "golang.org/x/net/context" - "io" "net" "regexp" "sort" @@ -150,34 +149,22 @@ func showDefinedSet(v string, args []string) error { default: return fmt.Errorf("unknown defined type: %s", v) } + rsp, err := client.GetDefinedSet(context.Background(), &api.GetDefinedSetRequest{Type: typ}) + if err != nil { + return err + } m := sets{} if len(args) > 0 { - arg := &api.DefinedSet{ - Type: typ, - Name: args[0], + for _, set := range rsp.Sets { + if args[0] == set.Name { + m = append(m, set) + } } - p, e := client.GetDefinedSet(context.Background(), arg) - if e != nil { - return e + if len(m) == 0 { + return fmt.Errorf("not found %s", args[0]) } - m = append(m, p) } else { - arg := &api.DefinedSet{ - Type: typ, - } - stream, e := client.GetDefinedSets(context.Background(), arg) - if e != nil { - return e - } - for { - p, e := stream.Recv() - if e == io.EOF { - break - } else if e != nil { - return e - } - m = append(m, p) - } + m = rsp.Sets } if globalOpts.Json { j, _ := json.Marshal(m) @@ -383,23 +370,25 @@ func modDefinedSet(settype string, modtype string, args []string) error { if d, err = parseDefinedSet(settype, args); err != nil { return err } - var op api.Operation switch modtype { case CMD_ADD: - op = api.Operation_ADD + _, err = client.AddDefinedSet(context.Background(), &api.AddDefinedSetRequest{ + Set: d, + }) case CMD_DEL: + all := false if len(args) < 2 { - op = api.Operation_DEL_ALL - } else { - op = api.Operation_DEL + all = true } + _, err = client.DeleteDefinedSet(context.Background(), &api.DeleteDefinedSetRequest{ + Set: d, + All: all, + }) case CMD_SET: - op = api.Operation_REPLACE + _, err = client.ReplaceDefinedSet(context.Background(), &api.ReplaceDefinedSetRequest{ + Set: d, + }) } - _, err = client.ModDefinedSet(context.Background(), &api.ModDefinedSetArguments{ - Operation: op, - Set: d, - }) return err } @@ -488,31 +477,23 @@ func printPolicy(indent int, pd *api.Policy) { } func showPolicy(args []string) error { + rsp, err := client.GetPolicy(context.Background(), &api.GetPolicyRequest{}) + if err != nil { + return err + } m := policies{} if len(args) > 0 { - arg := &api.Policy{ - Name: args[0], - } - p, e := client.GetPolicy(context.Background(), arg) - if e != nil { - return e - } - m = append(m, p) - } else { - arg := &api.Policy{} - stream, e := client.GetPolicies(context.Background(), arg) - if e != nil { - return e - } - for { - p, e := stream.Recv() - if e == io.EOF { + for _, p := range rsp.Policies { + if args[0] == p.Name { + m = append(m, p) break - } else if e != nil { - return e } - m = append(m, p) } + if len(m) == 0 { + return fmt.Errorf("not found %s", args[0]) + } + } else { + m = rsp.Policies } if globalOpts.Json { j, _ := json.Marshal(m) @@ -534,31 +515,23 @@ func showPolicy(args []string) error { } func showStatement(args []string) error { + rsp, err := client.GetStatement(context.Background(), &api.GetStatementRequest{}) + if err != nil { + return err + } m := []*api.Statement{} if len(args) > 0 { - arg := &api.Statement{ - Name: args[0], - } - p, e := client.GetStatement(context.Background(), arg) - if e != nil { - return e - } - m = append(m, p) - } else { - arg := &api.Statement{} - stream, e := client.GetStatements(context.Background(), arg) - if e != nil { - return e - } - for { - p, e := stream.Recv() - if e == io.EOF { + for _, s := range rsp.Statements { + if args[0] == s.Name { + m = append(m, s) break - } else if e != nil { - return e } - m = append(m, p) } + if len(m) == 0 { + return fmt.Errorf("not found %s", args[0]) + } + } else { + m = rsp.Statements } if globalOpts.Json { j, _ := json.Marshal(m) @@ -581,47 +554,30 @@ func modStatement(op string, args []string) error { if len(args) < 1 { return fmt.Errorf("usage: gobgp policy statement %s <name>", op) } - name := args[0] - var o api.Operation + stmt := &api.Statement{ + Name: args[0], + } + var err error switch op { case CMD_ADD: - o = api.Operation_ADD + _, err = client.AddStatement(context.Background(), &api.AddStatementRequest{ + Statement: stmt, + }) case CMD_DEL: - o = api.Operation_DEL_ALL + _, err = client.DeleteStatement(context.Background(), &api.DeleteStatementRequest{ + Statement: stmt, + }) default: return fmt.Errorf("invalid operation: %s", op) } - stmt := &api.Statement{ - Name: name, - } - arg := &api.ModStatementArguments{ - Operation: o, - Statement: stmt, - } - _, err := client.ModStatement(context.Background(), arg) return err } func modCondition(name, op string, args []string) error { - var o api.Operation - switch op { - case CMD_ADD: - o = api.Operation_ADD - case CMD_DEL: - o = api.Operation_DEL - case CMD_SET: - o = api.Operation_REPLACE - default: - return fmt.Errorf("invalid operation: %s", op) - } stmt := &api.Statement{ Name: name, Conditions: &api.Conditions{}, } - arg := &api.ModStatementArguments{ - Operation: o, - Statement: stmt, - } usage := fmt.Sprintf("usage: gobgp policy statement %s %s condition", name, op) if len(args) < 1 { return fmt.Errorf("%s { prefix | neighbor | as-path | community | ext-community | as-path-length | rpki }", usage) @@ -761,30 +717,31 @@ func modCondition(name, op string, args []string) error { return fmt.Errorf("%s rpki { valid | invalid | not-found }", usage) } } - _, err := client.ModStatement(context.Background(), arg) - return err -} - -func modAction(name, op string, args []string) error { - var o api.Operation + var err error switch op { case CMD_ADD: - o = api.Operation_ADD + _, err = client.AddStatement(context.Background(), &api.AddStatementRequest{ + Statement: stmt, + }) case CMD_DEL: - o = api.Operation_DEL + _, err = client.DeleteStatement(context.Background(), &api.DeleteStatementRequest{ + Statement: stmt, + }) case CMD_SET: - o = api.Operation_REPLACE + _, err = client.ReplaceStatement(context.Background(), &api.ReplaceStatementRequest{ + Statement: stmt, + }) default: return fmt.Errorf("invalid operation: %s", op) } + return err +} + +func modAction(name, op string, args []string) error { stmt := &api.Statement{ Name: name, Actions: &api.Actions{}, } - arg := &api.ModStatementArguments{ - Operation: o, - Statement: stmt, - } usage := fmt.Sprintf("usage: gobgp policy statement %s %s action", name, op) if len(args) < 1 { return fmt.Errorf("%s { reject | accept | community | ext-community | med | as-prepend | next-hop }", usage) @@ -880,7 +837,23 @@ func modAction(name, op string, args []string) error { Address: args[0], } } - _, err := client.ModStatement(context.Background(), arg) + var err error + switch op { + case CMD_ADD: + _, err = client.AddStatement(context.Background(), &api.AddStatementRequest{ + Statement: stmt, + }) + case CMD_DEL: + _, err = client.DeleteStatement(context.Background(), &api.DeleteStatementRequest{ + Statement: stmt, + }) + case CMD_SET: + _, err = client.ReplaceStatement(context.Background(), &api.ReplaceStatementRequest{ + Statement: stmt, + }) + default: + return fmt.Errorf("invalid operation: %s", op) + } return err } @@ -890,33 +863,43 @@ func modPolicy(modtype string, args []string) error { } name := args[0] args = args[1:] - var op api.Operation + stmts := make([]*api.Statement, 0, len(args)) + for _, n := range args { + stmts = append(stmts, &api.Statement{Name: n}) + } + var err error switch modtype { case CMD_ADD: - op = api.Operation_ADD + _, err = client.AddPolicy(context.Background(), &api.AddPolicyRequest{ + Policy: &api.Policy{ + Name: name, + Statements: stmts, + }, + ReferExistingStatements: true, + }) case CMD_DEL: + all := false if len(args) < 1 { - op = api.Operation_DEL_ALL - } else { - op = api.Operation_DEL + all = true } + _, err = client.DeletePolicy(context.Background(), &api.DeletePolicyRequest{ + Policy: &api.Policy{ + Name: name, + Statements: stmts, + }, + All: all, + PreserveStatements: true, + }) case CMD_SET: - op = api.Operation_REPLACE - } - stmts := make([]*api.Statement, 0, len(args)) - for _, n := range args { - stmts = append(stmts, &api.Statement{Name: n}) - } - arg := &api.ModPolicyArguments{ - Operation: op, - Policy: &api.Policy{ - Name: name, - Statements: stmts, - }, - ReferExistingStatements: true, - PreserveStatements: true, + _, err = client.ReplacePolicy(context.Background(), &api.ReplacePolicyRequest{ + Policy: &api.Policy{ + Name: name, + Statements: stmts, + }, + ReferExistingStatements: true, + PreserveStatements: true, + }) } - _, err := client.ModPolicy(context.Background(), arg) return err } diff --git a/gobgp/cmd/rpki.go b/gobgp/cmd/rpki.go index 603b1c0d..11c75b6a 100644 --- a/gobgp/cmd/rpki.go +++ b/gobgp/cmd/rpki.go @@ -21,33 +21,20 @@ import ( "github.com/osrg/gobgp/packet/bgp" "github.com/spf13/cobra" "golang.org/x/net/context" - "io" "net" "time" ) func showRPKIServer(args []string) error { - arg := &api.Arguments{} - - stream, err := client.GetRPKI(context.Background(), arg) + rsp, err := client.GetRpki(context.Background(), &api.GetRpkiRequest{}) if err != nil { fmt.Println(err) return err } - servers := make([]*api.RPKI, 0) - for { - r, err := stream.Recv() - if err == io.EOF { - break - } else if err != nil { - return err - } - servers = append(servers, r) - } if len(args) == 0 { format := "%-23s %-6s %-10s %s\n" fmt.Printf(format, "Session", "State", "Uptime", "#IPv4/IPv6 records") - for _, r := range servers { + for _, r := range rsp.Servers { s := "Down" uptime := "never" if r.State.Up == true { @@ -58,7 +45,7 @@ func showRPKIServer(args []string) error { fmt.Printf(format, net.JoinHostPort(r.Conf.Address, r.Conf.RemotePort), s, uptime, fmt.Sprintf("%d/%d", r.State.RecordIpv4, r.State.RecordIpv6)) } } else { - for _, r := range servers { + for _, r := range rsp.Servers { if r.Conf.Address == args[0] { up := "Down" if r.State.Up == true { @@ -90,13 +77,10 @@ func showRPKITable(args []string) error { if err != nil { exitWithError(err) } - arg := &api.Arguments{ + arg := &api.GetRoaRequest{ Family: uint32(family), } - if len(args) > 0 { - arg.Name = args[0] - } - stream, err := client.GetROA(context.Background(), arg) + rsp, err := client.GetRoa(context.Background(), arg) if err != nil { fmt.Println(err) return err @@ -110,13 +94,7 @@ func showRPKITable(args []string) error { format = "%-42s %-6s %-10s %s\n" } fmt.Printf(format, "Network", "Maxlen", "AS", "Server") - for { - r, err := stream.Recv() - if err == io.EOF { - break - } else if err != nil { - return err - } + for _, r := range rsp.Roas { if len(args) > 0 && args[0] != r.Conf.Address { continue } @@ -132,16 +110,6 @@ func NewRPKICmd() *cobra.Command { Use: CMD_RPKI, } - modRPKI := func(op api.Operation, address string) error { - arg := &api.ModRpkiArguments{ - Operation: op, - Address: address, - Port: 323, - } - _, err := client.ModRPKI(context.Background(), arg) - return err - } - serverCmd := &cobra.Command{ Use: CMD_RPKI_SERVER, Run: func(cmd *cobra.Command, args []string) { @@ -155,20 +123,32 @@ func NewRPKICmd() *cobra.Command { if addr == nil { exitWithError(fmt.Errorf("invalid ip address: %s", args[0])) } - var op api.Operation + var err error switch args[1] { case "add": - op = api.Operation_ADD + _, err = client.AddRpki(context.Background(), &api.AddRpkiRequest{ + Address: addr.String(), + Port: 323, + }) case "reset": - op = api.Operation_RESET + _, err = client.ResetRpki(context.Background(), &api.ResetRpkiRequest{ + Address: addr.String(), + }) case "softreset": - op = api.Operation_SOFTRESET + _, err = client.SoftResetRpki(context.Background(), &api.SoftResetRpkiRequest{ + Address: addr.String(), + }) case "enable": - op = api.Operation_ENABLE + _, err = client.EnableRpki(context.Background(), &api.EnableRpkiRequest{ + Address: addr.String(), + }) + case "disable": + _, err = client.DisableRpki(context.Background(), &api.DisableRpkiRequest{ + Address: addr.String(), + }) default: exitWithError(fmt.Errorf("unknown operation: %s", args[1])) } - err := modRPKI(op, addr.String()) if err != nil { exitWithError(err) } @@ -187,13 +167,11 @@ func NewRPKICmd() *cobra.Command { validateCmd := &cobra.Command{ Use: "validate", Run: func(cmd *cobra.Command, args []string) { - arg := &api.ModRpkiArguments{ - Operation: api.Operation_REPLACE, - } + arg := &api.ValidateRibRequest{} if len(args) == 1 { arg.Prefix = args[0] } - client.ModRPKI(context.Background(), arg) + client.ValidateRib(context.Background(), arg) }, } rpkiCmd.AddCommand(validateCmd) diff --git a/gobgp/cmd/vrf.go b/gobgp/cmd/vrf.go index 16848471..f30c9495 100644 --- a/gobgp/cmd/vrf.go +++ b/gobgp/cmd/vrf.go @@ -22,31 +22,17 @@ import ( "github.com/osrg/gobgp/packet/bgp" "github.com/spf13/cobra" "golang.org/x/net/context" - "io" "sort" "strings" ) func getVrfs() (vrfs, error) { - arg := &api.Arguments{} - stream, err := client.GetVrfs(context.Background(), arg) + rsp, err := client.GetVrf(context.Background(), &api.GetVrfRequest{}) if err != nil { return nil, err } - vs := make(vrfs, 0) - for { - v, err := stream.Recv() - if err == io.EOF { - break - } else if err != nil { - return nil, err - } - vs = append(vs, v) - } - - sort.Sort(vs) - - return vs, nil + sort.Sort(vrfs(rsp.Vrfs)) + return rsp.Vrfs, nil } func showVrfs() error { @@ -107,7 +93,7 @@ func showVrf(name string) error { } func modVrf(typ string, args []string) error { - var arg *api.ModVrfArguments + var err error switch typ { case CMD_ADD: if len(args) < 6 || args[1] != "rd" || args[3] != "rt" { @@ -147,8 +133,7 @@ func modVrf(typ string, args []string) error { } } buf, _ := rd.Serialize() - arg = &api.ModVrfArguments{ - Operation: api.Operation_ADD, + arg := &api.AddVrfRequest{ Vrf: &api.Vrf{ Name: name, Rd: buf, @@ -156,19 +141,18 @@ func modVrf(typ string, args []string) error { ExportRt: exportRt, }, } + _, err = client.AddVrf(context.Background(), arg) case CMD_DEL: if len(args) != 1 { return fmt.Errorf("Usage: gobgp vrf del <vrf name>") } - arg = &api.ModVrfArguments{ - Operation: api.Operation_DEL, + arg := &api.DeleteVrfRequest{ Vrf: &api.Vrf{ Name: args[0], }, } + _, err = client.DeleteVrf(context.Background(), arg) } - - _, err := client.ModVrf(context.Background(), arg) return err } diff --git a/openswitch/openswitch.go b/openswitch/openswitch.go index 898d6398..1792fc9e 100644 --- a/openswitch/openswitch.go +++ b/openswitch/openswitch.go @@ -276,9 +276,7 @@ func (m *OpsManager) handleVrfUpdate(update ovsdb.TableUpdate) *server.GrpcReque } else if _, ok := v.Old.Fields["bgp_routers"]; ok { _, _, err := m.getBGPRouterUUID() if err != nil { - return server.NewGrpcRequest(server.REQ_MOD_GLOBAL_CONFIG, "del", bgp.RouteFamily(0), &api.ModGlobalConfigArguments{ - Operation: api.Operation_DEL, - }) + return server.NewGrpcRequest(server.REQ_STOP_SERVER, "", bgp.RouteFamily(0), &api.StopServerRequest{}) } } } @@ -309,8 +307,7 @@ func (m *OpsManager) handleBgpRouterUpdate(update ovsdb.TableUpdate) []*server.G }).Debug("router-id is not configured yet") return nil } - reqs = append(reqs, server.NewGrpcRequest(server.REQ_MOD_GLOBAL_CONFIG, "add", bgp.RouteFamily(0), &api.ModGlobalConfigArguments{ - Operation: api.Operation_ADD, + reqs = append(reqs, server.NewGrpcRequest(server.REQ_START_SERVER, "", bgp.RouteFamily(0), &api.StartServerRequest{ Global: &api.Global{ As: asn, RouterId: r, @@ -322,8 +319,7 @@ func (m *OpsManager) handleBgpRouterUpdate(update ovsdb.TableUpdate) []*server.G newNeighMap := v.New.Fields["bgp_neighbors"].(ovsdb.OvsMap).GoMap for k, _ := range oldNeighMap { if _, ok := newNeighMap[k]; !ok { - reqs = append(reqs, server.NewGrpcRequest(server.REQ_MOD_NEIGHBOR, "del", bgp.RouteFamily(0), &api.ModNeighborArguments{ - Operation: api.Operation_DEL, + reqs = append(reqs, server.NewGrpcRequest(server.REQ_GRPC_DELETE_NEIGHBOR, "", bgp.RouteFamily(0), &api.DeleteNeighborRequest{ Peer: &api.Peer{ Conf: &api.PeerConf{ NeighborAddress: k.(string), @@ -355,8 +351,7 @@ func (m *OpsManager) handleNeighborUpdate(update ovsdb.TableUpdate) []*server.Gr }).Debug("remote-as is not configured yet") continue } - reqs = append(reqs, server.NewGrpcRequest(server.REQ_MOD_NEIGHBOR, "add", bgp.RouteFamily(0), &api.ModNeighborArguments{ - Operation: api.Operation_ADD, + reqs = append(reqs, server.NewGrpcRequest(server.REQ_GRPC_ADD_NEIGHBOR, "", bgp.RouteFamily(0), &api.AddNeighborRequest{ Peer: &api.Peer{ Conf: &api.PeerConf{ NeighborAddress: addrs[idx].String(), @@ -390,21 +385,17 @@ func (m *OpsManager) handleRouteUpdate(update ovsdb.TableUpdate) []*server.GrpcR return nil } if isWithdraw { - reqs = append(reqs, server.NewGrpcRequest(server.REQ_MOD_PATH, "del", bgp.RouteFamily(0), &api.ModPathArguments{ - Operation: api.Operation_DEL, - Resource: api.Resource_GLOBAL, - Name: "", - Path: path, + reqs = append(reqs, server.NewGrpcRequest(server.REQ_DELETE_PATH, "", bgp.RouteFamily(0), &api.AddPathRequest{ + Resource: api.Resource_GLOBAL, + Path: path, })) } else { if isFromGobgp { return nil } - reqs = append(reqs, server.NewGrpcRequest(server.REQ_MOD_PATH, "add", bgp.RouteFamily(0), &api.ModPathArguments{ - Operation: api.Operation_ADD, - Resource: api.Resource_GLOBAL, - Name: "", - Path: path, + reqs = append(reqs, server.NewGrpcRequest(server.REQ_ADD_PATH, "", bgp.RouteFamily(0), &api.AddPathRequest{ + Resource: api.Resource_GLOBAL, + Path: path, })) } } @@ -644,11 +635,11 @@ func (m *OpsManager) GobgpServe() error { }).Error("grpc operation failed") } else { if monitorReady { - if grpcReq.RequestType == server.REQ_MOD_GLOBAL_CONFIG && grpcReq.Name == "del" { + if grpcReq.RequestType == server.REQ_STOP_SERVER { monitorReady = false } } else { - if grpcReq.RequestType == server.REQ_MOD_GLOBAL_CONFIG && grpcReq.Name == "add" { + if grpcReq.RequestType == server.REQ_START_SERVER { monitorReady = true go m.GobgpMonitor(&monitorReady) } diff --git a/server/grpc_server.go b/server/grpc_server.go index 806a94ef..17a005a6 100644 --- a/server/grpc_server.go +++ b/server/grpc_server.go @@ -29,23 +29,25 @@ import ( const ( _ = iota - REQ_GLOBAL_CONFIG - REQ_MOD_GLOBAL_CONFIG + REQ_GET_SERVER + REQ_START_SERVER + REQ_STOP_SERVER REQ_NEIGHBOR - REQ_NEIGHBORS REQ_ADJ_RIB_IN REQ_ADJ_RIB_OUT REQ_LOCAL_RIB - REQ_NEIGHBOR_SHUTDOWN REQ_NEIGHBOR_RESET REQ_NEIGHBOR_SOFT_RESET REQ_NEIGHBOR_SOFT_RESET_IN REQ_NEIGHBOR_SOFT_RESET_OUT + REQ_NEIGHBOR_SHUTDOWN REQ_NEIGHBOR_ENABLE REQ_NEIGHBOR_DISABLE - REQ_MOD_NEIGHBOR REQ_ADD_NEIGHBOR REQ_DEL_NEIGHBOR + // FIXME: we should merge + REQ_GRPC_ADD_NEIGHBOR + REQ_GRPC_DELETE_NEIGHBOR REQ_UPDATE_NEIGHBOR REQ_GLOBAL_RIB REQ_MONITOR_GLOBAL_BEST_CHANGED @@ -53,24 +55,44 @@ const ( REQ_MONITOR_NEIGHBOR_PEER_STATE REQ_MRT_GLOBAL_RIB REQ_MRT_LOCAL_RIB - REQ_MOD_MRT - REQ_MOD_BMP - REQ_RPKI - REQ_MOD_RPKI + REQ_ENABLE_MRT + REQ_DISABLE_MRT + REQ_INJECT_MRT + REQ_ADD_BMP + REQ_DELETE_BMP + REQ_VALIDATE_RIB + // TODO: delete + REQ_INITIALIZE_RPKI + REQ_GET_RPKI + REQ_ADD_RPKI + REQ_DELETE_RPKI + REQ_ENABLE_RPKI + REQ_DISABLE_RPKI + REQ_RESET_RPKI + REQ_SOFT_RESET_RPKI REQ_ROA + REQ_ADD_VRF + REQ_DELETE_VRF REQ_VRF - REQ_VRFS - REQ_VRF_MOD - REQ_MOD_PATH - REQ_MOD_PATHS - REQ_DEFINED_SET - REQ_MOD_DEFINED_SET - REQ_STATEMENT - REQ_MOD_STATEMENT - REQ_POLICY - REQ_MOD_POLICY - REQ_POLICY_ASSIGNMENT - REQ_MOD_POLICY_ASSIGNMENT + REQ_GET_VRF + REQ_ADD_PATH + REQ_DELETE_PATH + REQ_GET_DEFINED_SET + REQ_ADD_DEFINED_SET + REQ_DELETE_DEFINED_SET + REQ_REPLACE_DEFINED_SET + REQ_GET_STATEMENT + REQ_ADD_STATEMENT + REQ_DELETE_STATEMENT + REQ_REPLACE_STATEMENT + REQ_GET_POLICY + REQ_ADD_POLICY + REQ_DELETE_POLICY + REQ_REPLACE_POLICY + REQ_GET_POLICY_ASSIGNMENT + REQ_ADD_POLICY_ASSIGNMENT + REQ_DELETE_POLICY_ASSIGNMENT + REQ_REPLACE_POLICY_ASSIGNMENT REQ_BMP_NEIGHBORS REQ_BMP_GLOBAL REQ_BMP_ADJ_IN @@ -102,18 +124,12 @@ func (s *Server) Serve() error { return nil } -func (s *Server) GetNeighbor(ctx context.Context, arg *api.Arguments) (*api.Peer, error) { +func (s *Server) GetNeighbor(ctx context.Context, arg *api.GetNeighborRequest) (*api.GetNeighborResponse, error) { var rf bgp.RouteFamily - req := NewGrpcRequest(REQ_NEIGHBOR, arg.Name, rf, nil) + req := NewGrpcRequest(REQ_NEIGHBOR, "", rf, nil) s.bgpServerCh <- req - res := <-req.ResponseCh - if err := res.Err(); err != nil { - log.Debug(err.Error()) - return nil, err - } - - return res.Data.(*api.Peer), nil + return res.Data.(*api.GetNeighborResponse), res.Err() } func handleMultipleResponses(req *GrpcRequest, f func(*GrpcResponse) error) error { @@ -131,19 +147,9 @@ func handleMultipleResponses(req *GrpcRequest, f func(*GrpcResponse) error) erro return nil } -func (s *Server) GetNeighbors(_ *api.Arguments, stream api.GobgpApi_GetNeighborsServer) error { - var rf bgp.RouteFamily - req := NewGrpcRequest(REQ_NEIGHBORS, "", rf, nil) - s.bgpServerCh <- req - - return handleMultipleResponses(req, func(res *GrpcResponse) error { - return stream.Send(res.Data.(*api.Peer)) - }) -} - -func (s *Server) GetRib(ctx context.Context, arg *api.Table) (*api.Table, error) { +func (s *Server) GetRib(ctx context.Context, arg *api.GetRibRequest) (*api.GetRibResponse, error) { var reqType int - switch arg.Type { + switch arg.Table.Type { case api.Resource_LOCAL: reqType = REQ_LOCAL_RIB case api.Resource_GLOBAL: @@ -155,13 +161,13 @@ func (s *Server) GetRib(ctx context.Context, arg *api.Table) (*api.Table, error) case api.Resource_VRF: reqType = REQ_VRF default: - return nil, fmt.Errorf("unsupported resource type: %v", arg.Type) + return nil, fmt.Errorf("unsupported resource type: %v", arg.Table.Type) } d, err := s.get(reqType, arg) if err != nil { return nil, err } - return d.(*api.Table), nil + return d.(*api.GetRibResponse), nil } func (s *Server) MonitorBestChanged(arg *api.Arguments, stream api.GobgpApi_MonitorBestChangedServer) error { @@ -205,56 +211,81 @@ func (s *Server) MonitorPeerState(arg *api.Arguments, stream api.GobgpApi_Monito }) } -func (s *Server) neighbor(reqType int, arg *api.Arguments) (*api.Error, error) { - none := &api.Error{} - req := NewGrpcRequest(reqType, arg.Name, bgp.RouteFamily(arg.Family), nil) +func (s *Server) neighbor(reqType int, address string, d interface{}) (interface{}, error) { + req := NewGrpcRequest(reqType, address, bgp.RouteFamily(0), d) s.bgpServerCh <- req - res := <-req.ResponseCh - if err := res.Err(); err != nil { - log.Debug(err.Error()) - return nil, err + return res.Data, res.Err() +} + +func (s *Server) ResetNeighbor(ctx context.Context, arg *api.ResetNeighborRequest) (*api.ResetNeighborResponse, error) { + d, err := s.neighbor(REQ_NEIGHBOR_RESET, arg.Address, arg) + if err == nil { + return d.(*api.ResetNeighborResponse), err } - return none, nil + return nil, err } -func (s *Server) Reset(ctx context.Context, arg *api.Arguments) (*api.Error, error) { - return s.neighbor(REQ_NEIGHBOR_RESET, arg) +func (s *Server) SoftResetNeighbor(ctx context.Context, arg *api.SoftResetNeighborRequest) (*api.SoftResetNeighborResponse, error) { + op := REQ_NEIGHBOR_SOFT_RESET + switch arg.Direction { + case api.SoftResetNeighborRequest_IN: + op = REQ_NEIGHBOR_SOFT_RESET_IN + case api.SoftResetNeighborRequest_OUT: + op = REQ_NEIGHBOR_SOFT_RESET_OUT + } + d, err := s.neighbor(op, arg.Address, arg) + if err == nil { + return d.(*api.SoftResetNeighborResponse), err + } + return nil, err } -func (s *Server) SoftReset(ctx context.Context, arg *api.Arguments) (*api.Error, error) { - return s.neighbor(REQ_NEIGHBOR_SOFT_RESET, arg) +func (s *Server) ShutdownNeighbor(ctx context.Context, arg *api.ShutdownNeighborRequest) (*api.ShutdownNeighborResponse, error) { + d, err := s.neighbor(REQ_NEIGHBOR_SHUTDOWN, arg.Address, arg) + if err == nil { + return d.(*api.ShutdownNeighborResponse), err + } + return nil, err } -func (s *Server) SoftResetIn(ctx context.Context, arg *api.Arguments) (*api.Error, error) { - return s.neighbor(REQ_NEIGHBOR_SOFT_RESET_IN, arg) +func (s *Server) EnableNeighbor(ctx context.Context, arg *api.EnableNeighborRequest) (*api.EnableNeighborResponse, error) { + d, err := s.neighbor(REQ_NEIGHBOR_ENABLE, arg.Address, arg) + if err == nil { + return d.(*api.EnableNeighborResponse), err + } + return nil, err } -func (s *Server) SoftResetOut(ctx context.Context, arg *api.Arguments) (*api.Error, error) { - return s.neighbor(REQ_NEIGHBOR_SOFT_RESET_OUT, arg) +func (s *Server) DisableNeighbor(ctx context.Context, arg *api.DisableNeighborRequest) (*api.DisableNeighborResponse, error) { + d, err := s.neighbor(REQ_NEIGHBOR_DISABLE, arg.Address, arg) + if err == nil { + return d.(*api.DisableNeighborResponse), err + } + return nil, err } -func (s *Server) Shutdown(ctx context.Context, arg *api.Arguments) (*api.Error, error) { - return s.neighbor(REQ_NEIGHBOR_SHUTDOWN, arg) +func (s *Server) AddPath(ctx context.Context, arg *api.AddPathRequest) (*api.AddPathResponse, error) { + d, err := s.get(REQ_ADD_PATH, arg) + return d.(*api.AddPathResponse), err } -func (s *Server) Enable(ctx context.Context, arg *api.Arguments) (*api.Error, error) { - return s.neighbor(REQ_NEIGHBOR_ENABLE, arg) +func (s *Server) DeletePath(ctx context.Context, arg *api.DeletePathRequest) (*api.DeletePathResponse, error) { + d, err := s.get(REQ_DELETE_PATH, arg) + return d.(*api.DeletePathResponse), err } -func (s *Server) Disable(ctx context.Context, arg *api.Arguments) (*api.Error, error) { - return s.neighbor(REQ_NEIGHBOR_DISABLE, arg) +func (s *Server) EnableMrt(ctx context.Context, arg *api.EnableMrtRequest) (*api.EnableMrtResponse, error) { + d, err := s.get(REQ_ENABLE_MRT, arg) + return d.(*api.EnableMrtResponse), err } -func (s *Server) ModPath(ctx context.Context, arg *api.ModPathArguments) (*api.ModPathResponse, error) { - d, err := s.get(REQ_MOD_PATH, arg) - if err != nil { - return nil, err - } - return d.(*api.ModPathResponse), nil +func (s *Server) DisableMrt(ctx context.Context, arg *api.DisableMrtRequest) (*api.DisableMrtResponse, error) { + d, err := s.get(REQ_DISABLE_MRT, arg) + return d.(*api.DisableMrtResponse), err } -func (s *Server) ModPaths(stream api.GobgpApi_ModPathsServer) error { +func (s *Server) InjectMrt(stream api.GobgpApi_InjectMrtServer) error { for { arg, err := stream.Recv() @@ -268,7 +299,7 @@ func (s *Server) ModPaths(stream api.GobgpApi_ModPathsServer) error { return fmt.Errorf("unsupported resource: %s", arg.Resource) } - req := NewGrpcRequest(REQ_MOD_PATHS, arg.Name, bgp.RouteFamily(0), arg) + req := NewGrpcRequest(REQ_INJECT_MRT, "", bgp.RouteFamily(0), arg) s.bgpServerCh <- req res := <-req.ResponseCh @@ -277,11 +308,7 @@ func (s *Server) ModPaths(stream api.GobgpApi_ModPathsServer) error { return err } } - err := stream.SendAndClose(&api.Error{ - Code: api.Error_SUCCESS, - }) - - return err + return stream.SendAndClose(&api.InjectMrtResponse{}) } func (s *Server) GetMrt(arg *api.MrtArguments, stream api.GobgpApi_GetMrtServer) error { @@ -301,156 +328,192 @@ func (s *Server) GetMrt(arg *api.MrtArguments, stream api.GobgpApi_GetMrtServer) }) } -func (s *Server) ModMrt(ctx context.Context, arg *api.ModMrtArguments) (*api.Error, error) { - return s.mod(REQ_MOD_MRT, arg) +func (s *Server) AddBmp(ctx context.Context, arg *api.AddBmpRequest) (*api.AddBmpResponse, error) { + d, err := s.get(REQ_ADD_BMP, arg) + return d.(*api.AddBmpResponse), err } -func (s *Server) ModBmp(ctx context.Context, arg *api.ModBmpArguments) (*api.Error, error) { - return s.mod(REQ_MOD_BMP, arg) +func (s *Server) DeleteBmp(ctx context.Context, arg *api.DeleteBmpRequest) (*api.DeleteBmpResponse, error) { + d, err := s.get(REQ_DELETE_BMP, arg) + return d.(*api.DeleteBmpResponse), err } -func (s *Server) ModRPKI(ctx context.Context, arg *api.ModRpkiArguments) (*api.Error, error) { - return s.mod(REQ_MOD_RPKI, arg) +func (s *Server) ValidateRib(ctx context.Context, arg *api.ValidateRibRequest) (*api.ValidateRibResponse, error) { + d, err := s.get(REQ_VALIDATE_RIB, arg) + return d.(*api.ValidateRibResponse), err } -func (s *Server) GetRPKI(arg *api.Arguments, stream api.GobgpApi_GetRPKIServer) error { - req := NewGrpcRequest(REQ_RPKI, "", bgp.RouteFamily(arg.Family), nil) - s.bgpServerCh <- req +func (s *Server) AddRpki(ctx context.Context, arg *api.AddRpkiRequest) (*api.AddRpkiResponse, error) { + d, err := s.get(REQ_ADD_RPKI, arg) + return d.(*api.AddRpkiResponse), err +} - return handleMultipleResponses(req, func(res *GrpcResponse) error { - return stream.Send(res.Data.(*api.RPKI)) - }) +func (s *Server) DeleteRpki(ctx context.Context, arg *api.DeleteRpkiRequest) (*api.DeleteRpkiResponse, error) { + d, err := s.get(REQ_DELETE_RPKI, arg) + return d.(*api.DeleteRpkiResponse), err } -func (s *Server) GetROA(arg *api.Arguments, stream api.GobgpApi_GetROAServer) error { - req := NewGrpcRequest(REQ_ROA, arg.Name, bgp.RouteFamily(arg.Family), nil) - s.bgpServerCh <- req +func (s *Server) EnableRpki(ctx context.Context, arg *api.EnableRpkiRequest) (*api.EnableRpkiResponse, error) { + d, err := s.get(REQ_ENABLE_RPKI, arg) + return d.(*api.EnableRpkiResponse), err +} - return handleMultipleResponses(req, func(res *GrpcResponse) error { - return stream.Send(res.Data.(*api.ROA)) - }) +func (s *Server) DisableRpki(ctx context.Context, arg *api.DisableRpkiRequest) (*api.DisableRpkiResponse, error) { + d, err := s.get(REQ_DISABLE_RPKI, arg) + return d.(*api.DisableRpkiResponse), err +} + +func (s *Server) ResetRpki(ctx context.Context, arg *api.ResetRpkiRequest) (*api.ResetRpkiResponse, error) { + d, err := s.get(REQ_RESET_RPKI, arg) + return d.(*api.ResetRpkiResponse), err } -func (s *Server) GetVrfs(arg *api.Arguments, stream api.GobgpApi_GetVrfsServer) error { - req := NewGrpcRequest(REQ_VRFS, "", bgp.RouteFamily(0), nil) +func (s *Server) SoftResetRpki(ctx context.Context, arg *api.SoftResetRpkiRequest) (*api.SoftResetRpkiResponse, error) { + d, err := s.get(REQ_SOFT_RESET_RPKI, arg) + return d.(*api.SoftResetRpkiResponse), err +} + +func (s *Server) GetRpki(ctx context.Context, arg *api.GetRpkiRequest) (*api.GetRpkiResponse, error) { + req := NewGrpcRequest(REQ_GET_RPKI, "", bgp.RouteFamily(arg.Family), nil) s.bgpServerCh <- req + res := <-req.ResponseCh + return res.Data.(*api.GetRpkiResponse), res.Err() +} - return handleMultipleResponses(req, func(res *GrpcResponse) error { - return stream.Send(res.Data.(*api.Vrf)) - }) +func (s *Server) GetRoa(ctx context.Context, arg *api.GetRoaRequest) (*api.GetRoaResponse, error) { + req := NewGrpcRequest(REQ_ROA, "", bgp.RouteFamily(arg.Family), nil) + s.bgpServerCh <- req + res := <-req.ResponseCh + return res.Data.(*api.GetRoaResponse), res.Err() } -func (s *Server) get(typ int, d interface{}) (interface{}, error) { - req := NewGrpcRequest(typ, "", bgp.RouteFamily(0), d) +func (s *Server) GetVrf(ctx context.Context, arg *api.GetVrfRequest) (*api.GetVrfResponse, error) { + req := NewGrpcRequest(REQ_GET_VRF, "", bgp.RouteFamily(0), nil) s.bgpServerCh <- req res := <-req.ResponseCh - if err := res.Err(); err != nil { - return nil, err - } - return res.Data, nil + return res.Data.(*api.GetVrfResponse), res.Err() } -func (s *Server) mod(typ int, d interface{}) (*api.Error, error) { - none := &api.Error{} +func (s *Server) get(typ int, d interface{}) (interface{}, error) { req := NewGrpcRequest(typ, "", bgp.RouteFamily(0), d) s.bgpServerCh <- req res := <-req.ResponseCh - if err := res.Err(); err != nil { - return none, err - } - return none, nil + return res.Data, res.Err() } -func (s *Server) ModVrf(ctx context.Context, arg *api.ModVrfArguments) (*api.Error, error) { - return s.mod(REQ_VRF_MOD, arg) +func (s *Server) AddVrf(ctx context.Context, arg *api.AddVrfRequest) (*api.AddVrfResponse, error) { + d, err := s.get(REQ_ADD_VRF, arg) + return d.(*api.AddVrfResponse), err } -func (s *Server) ModNeighbor(ctx context.Context, arg *api.ModNeighborArguments) (*api.Error, error) { - return s.mod(REQ_MOD_NEIGHBOR, arg) +func (s *Server) DeleteVrf(ctx context.Context, arg *api.DeleteVrfRequest) (*api.DeleteVrfResponse, error) { + d, err := s.get(REQ_DELETE_VRF, arg) + return d.(*api.DeleteVrfResponse), err } -func (s *Server) GetDefinedSet(ctx context.Context, arg *api.DefinedSet) (*api.DefinedSet, error) { - d, err := s.get(REQ_DEFINED_SET, arg) - if err != nil { - return nil, err - } - return d.(*api.DefinedSet), nil +func (s *Server) AddNeighbor(ctx context.Context, arg *api.AddNeighborRequest) (*api.AddNeighborResponse, error) { + d, err := s.get(REQ_GRPC_ADD_NEIGHBOR, arg) + return d.(*api.AddNeighborResponse), err } -func (s *Server) GetDefinedSets(arg *api.DefinedSet, stream api.GobgpApi_GetDefinedSetsServer) error { - req := NewGrpcRequest(REQ_DEFINED_SET, "", bgp.RouteFamily(0), arg) - s.bgpServerCh <- req - return handleMultipleResponses(req, func(res *GrpcResponse) error { - return stream.Send(res.Data.(*api.DefinedSet)) - }) +func (s *Server) DeleteNeighbor(ctx context.Context, arg *api.DeleteNeighborRequest) (*api.DeleteNeighborResponse, error) { + d, err := s.get(REQ_GRPC_DELETE_NEIGHBOR, arg) + return d.(*api.DeleteNeighborResponse), err } -func (s *Server) ModDefinedSet(ctx context.Context, arg *api.ModDefinedSetArguments) (*api.Error, error) { - return s.mod(REQ_MOD_DEFINED_SET, arg) +func (s *Server) GetDefinedSet(ctx context.Context, arg *api.GetDefinedSetRequest) (*api.GetDefinedSetResponse, error) { + d, err := s.get(REQ_GET_DEFINED_SET, arg) + return d.(*api.GetDefinedSetResponse), err } -func (s *Server) GetStatement(ctx context.Context, arg *api.Statement) (*api.Statement, error) { - d, err := s.get(REQ_STATEMENT, arg) - if err != nil { - return nil, err - } - return d.(*api.Statement), nil +func (s *Server) AddDefinedSet(ctx context.Context, arg *api.AddDefinedSetRequest) (*api.AddDefinedSetResponse, error) { + d, err := s.get(REQ_ADD_DEFINED_SET, arg) + return d.(*api.AddDefinedSetResponse), err } -func (s *Server) GetStatements(arg *api.Statement, stream api.GobgpApi_GetStatementsServer) error { - req := NewGrpcRequest(REQ_STATEMENT, "", bgp.RouteFamily(0), arg) - s.bgpServerCh <- req - return handleMultipleResponses(req, func(res *GrpcResponse) error { - return stream.Send(res.Data.(*api.Statement)) - }) +func (s *Server) DeleteDefinedSet(ctx context.Context, arg *api.DeleteDefinedSetRequest) (*api.DeleteDefinedSetResponse, error) { + d, err := s.get(REQ_DELETE_DEFINED_SET, arg) + return d.(*api.DeleteDefinedSetResponse), err } -func (s *Server) ModStatement(ctx context.Context, arg *api.ModStatementArguments) (*api.Error, error) { - return s.mod(REQ_MOD_STATEMENT, arg) +func (s *Server) ReplaceDefinedSet(ctx context.Context, arg *api.ReplaceDefinedSetRequest) (*api.ReplaceDefinedSetResponse, error) { + d, err := s.get(REQ_REPLACE_DEFINED_SET, arg) + return d.(*api.ReplaceDefinedSetResponse), err } -func (s *Server) GetPolicy(ctx context.Context, arg *api.Policy) (*api.Policy, error) { - d, err := s.get(REQ_POLICY, arg) - if err != nil { - return nil, err - } - return d.(*api.Policy), nil +func (s *Server) GetStatement(ctx context.Context, arg *api.GetStatementRequest) (*api.GetStatementResponse, error) { + d, err := s.get(REQ_GET_STATEMENT, arg) + return d.(*api.GetStatementResponse), err } -func (s *Server) GetPolicies(arg *api.Policy, stream api.GobgpApi_GetPoliciesServer) error { - req := NewGrpcRequest(REQ_POLICY, "", bgp.RouteFamily(0), arg) - s.bgpServerCh <- req - return handleMultipleResponses(req, func(res *GrpcResponse) error { - return stream.Send(res.Data.(*api.Policy)) - }) +func (s *Server) AddStatement(ctx context.Context, arg *api.AddStatementRequest) (*api.AddStatementResponse, error) { + d, err := s.get(REQ_ADD_STATEMENT, arg) + return d.(*api.AddStatementResponse), err } -func (s *Server) ModPolicy(ctx context.Context, arg *api.ModPolicyArguments) (*api.Error, error) { - return s.mod(REQ_MOD_POLICY, arg) +func (s *Server) DeleteStatement(ctx context.Context, arg *api.DeleteStatementRequest) (*api.DeleteStatementResponse, error) { + d, err := s.get(REQ_DELETE_STATEMENT, arg) + return d.(*api.DeleteStatementResponse), err } -func (s *Server) GetPolicyAssignment(ctx context.Context, arg *api.PolicyAssignment) (*api.PolicyAssignment, error) { - d, err := s.get(REQ_POLICY_ASSIGNMENT, arg) - if err != nil { - return nil, err - } - return d.(*api.PolicyAssignment), nil +func (s *Server) ReplaceStatement(ctx context.Context, arg *api.ReplaceStatementRequest) (*api.ReplaceStatementResponse, error) { + d, err := s.get(REQ_REPLACE_STATEMENT, arg) + return d.(*api.ReplaceStatementResponse), err } -func (s *Server) ModPolicyAssignment(ctx context.Context, arg *api.ModPolicyAssignmentArguments) (*api.Error, error) { - return s.mod(REQ_MOD_POLICY_ASSIGNMENT, arg) +func (s *Server) GetPolicy(ctx context.Context, arg *api.GetPolicyRequest) (*api.GetPolicyResponse, error) { + d, err := s.get(REQ_GET_POLICY, arg) + return d.(*api.GetPolicyResponse), err } -func (s *Server) GetGlobalConfig(ctx context.Context, arg *api.Arguments) (*api.Global, error) { - d, err := s.get(REQ_GLOBAL_CONFIG, arg) - if err != nil { - return nil, err - } - return d.(*api.Global), nil +func (s *Server) AddPolicy(ctx context.Context, arg *api.AddPolicyRequest) (*api.AddPolicyResponse, error) { + d, err := s.get(REQ_ADD_POLICY, arg) + return d.(*api.AddPolicyResponse), err +} + +func (s *Server) DeletePolicy(ctx context.Context, arg *api.DeletePolicyRequest) (*api.DeletePolicyResponse, error) { + d, err := s.get(REQ_DELETE_POLICY, arg) + return d.(*api.DeletePolicyResponse), err +} + +func (s *Server) ReplacePolicy(ctx context.Context, arg *api.ReplacePolicyRequest) (*api.ReplacePolicyResponse, error) { + d, err := s.get(REQ_REPLACE_POLICY, arg) + return d.(*api.ReplacePolicyResponse), err +} + +func (s *Server) GetPolicyAssignment(ctx context.Context, arg *api.GetPolicyAssignmentRequest) (*api.GetPolicyAssignmentResponse, error) { + d, err := s.get(REQ_GET_POLICY_ASSIGNMENT, arg) + return d.(*api.GetPolicyAssignmentResponse), err +} + +func (s *Server) AddPolicyAssignment(ctx context.Context, arg *api.AddPolicyAssignmentRequest) (*api.AddPolicyAssignmentResponse, error) { + d, err := s.get(REQ_ADD_POLICY_ASSIGNMENT, arg) + return d.(*api.AddPolicyAssignmentResponse), err +} + +func (s *Server) DeletePolicyAssignment(ctx context.Context, arg *api.DeletePolicyAssignmentRequest) (*api.DeletePolicyAssignmentResponse, error) { + d, err := s.get(REQ_DELETE_POLICY_ASSIGNMENT, arg) + return d.(*api.DeletePolicyAssignmentResponse), err +} + +func (s *Server) ReplacePolicyAssignment(ctx context.Context, arg *api.ReplacePolicyAssignmentRequest) (*api.ReplacePolicyAssignmentResponse, error) { + d, err := s.get(REQ_REPLACE_POLICY_ASSIGNMENT, arg) + return d.(*api.ReplacePolicyAssignmentResponse), err +} + +func (s *Server) GetServer(ctx context.Context, arg *api.GetServerRequest) (*api.GetServerResponse, error) { + d, err := s.get(REQ_GET_SERVER, arg) + return d.(*api.GetServerResponse), err +} + +func (s *Server) StartServer(ctx context.Context, arg *api.StartServerRequest) (*api.StartServerResponse, error) { + d, err := s.get(REQ_START_SERVER, arg) + return d.(*api.StartServerResponse), err } -func (s *Server) ModGlobalConfig(ctx context.Context, arg *api.ModGlobalConfigArguments) (*api.Error, error) { - return s.mod(REQ_MOD_GLOBAL_CONFIG, arg) +func (s *Server) StopServer(ctx context.Context, arg *api.StopServerRequest) (*api.StopServerResponse, error) { + d, err := s.get(REQ_STOP_SERVER, arg) + return d.(*api.StopServerResponse), err } type GrpcRequest struct { diff --git a/server/rpki.go b/server/rpki.go index af2c4bb2..1463fd9b 100644 --- a/server/rpki.go +++ b/server/rpki.go @@ -77,9 +77,9 @@ func (r *ROA) Equal(roa *ROA) bool { return false } -func (r *ROA) toApiStruct() *api.ROA { +func (r *ROA) toApiStruct() *api.Roa { host, port, _ := net.SplitHostPort(r.Src) - return &api.ROA{ + return &api.Roa{ As: r.AS, Maxlen: uint32(r.MaxLen), Prefixlen: uint32(r.Prefix.Length), @@ -91,7 +91,7 @@ func (r *ROA) toApiStruct() *api.ROA { } } -type roas []*api.ROA +type roas []*api.Roa func (r roas) Len() int { return len(r) @@ -214,20 +214,45 @@ func (m *roaManager) deleteAllROA(network string) { } } -func (m *roaManager) operate(op api.Operation, address string) error { +func (m *roaManager) Enable(address string) error { for network, client := range m.clientMap { add, _, _ := net.SplitHostPort(network) if add == address { - switch op { - case api.Operation_ENABLE: - client.enable(client.serialNumber) - case api.Operation_DISABLE: - case api.Operation_RESET: - client.reset() - case api.Operation_SOFTRESET: - client.softReset() - m.deleteAllROA(network) - } + client.enable(client.serialNumber) + return nil + } + } + return fmt.Errorf("roa server not found %s", address) +} + +func (m *roaManager) Disable(address string) error { + for network, client := range m.clientMap { + add, _, _ := net.SplitHostPort(network) + if add == address { + client.reset() + return nil + } + } + return fmt.Errorf("roa server not found %s", address) +} + +func (m *roaManager) Reset(address string) error { + for network, client := range m.clientMap { + add, _, _ := net.SplitHostPort(network) + if add == address { + client.reset() + return nil + } + } + return fmt.Errorf("roa server not found %s", address) +} + +func (m *roaManager) SoftReset(address string) error { + for network, client := range m.clientMap { + add, _, _ := net.SplitHostPort(network) + if add == address { + client.softReset() + m.deleteAllROA(network) return nil } } @@ -412,11 +437,9 @@ func (c *roaManager) handleRTRMsg(client *roaClient, state *config.RpkiServerSta } } -func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) { +func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) *GrpcResponse { switch grpcReq.RequestType { - case REQ_RPKI: - results := make([]*GrpcResponse, 0) - + case REQ_GET_RPKI: f := func(tree *radix.Tree) (map[string]uint32, map[string]uint32) { records := make(map[string]uint32) prefixes := make(map[string]uint32) @@ -442,6 +465,7 @@ func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) { recordsV4, prefixesV4 := f(c.Roas[bgp.RF_IPv4_UC]) recordsV6, prefixesV6 := f(c.Roas[bgp.RF_IPv6_UC]) + l := make([]*api.Rpki, 0, len(c.clientMap)) for _, client := range c.clientMap { state := client.state addr, port, _ := net.SplitHostPort(client.host) @@ -459,7 +483,7 @@ func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) { return 0 } - rpki := &api.RPKI{ + rpki := &api.Rpki{ Conf: &api.RPKIConf{ Address: addr, RemotePort: port, @@ -484,20 +508,16 @@ func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) { ResetQuery: sent.ResetQuery, }, } - result := &GrpcResponse{} - result.Data = rpki - results = append(results, result) + l = append(l, rpki) } - go sendMultipleResponses(grpcReq, results) - + return &GrpcResponse{Data: &api.GetRpkiResponse{Servers: l}} case REQ_ROA: if len(c.clientMap) == 0 { - result := &GrpcResponse{} - result.ResponseErr = fmt.Errorf("RPKI server isn't configured.") - grpcReq.ResponseCh <- result - break + return &GrpcResponse{ + ResponseErr: fmt.Errorf("RPKI server isn't configured."), + Data: &api.GetRoaResponse{}, + } } - results := make([]*GrpcResponse, 0) var rfList []bgp.RouteFamily switch grpcReq.RouteFamily { case bgp.RF_IPv4_UC: @@ -507,6 +527,7 @@ func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) { default: rfList = []bgp.RouteFamily{bgp.RF_IPv4_UC, bgp.RF_IPv6_UC} } + l := make([]*api.Roa, 0) for _, rf := range rfList { if tree, ok := c.Roas[rf]; ok { tree.Walk(func(s string, v interface{}) bool { @@ -517,17 +538,15 @@ func (c *roaManager) handleGRPC(grpcReq *GrpcRequest) { } sort.Sort(roaList) for _, roa := range roaList { - result := &GrpcResponse{ - Data: roa, - } - results = append(results, result) + l = append(l, roa) } return false }) } } - go sendMultipleResponses(grpcReq, results) + return &GrpcResponse{Data: &api.GetRoaResponse{Roas: l}} } + return nil } func validatePath(ownAs uint32, tree *radix.Tree, cidr string, asPath *bgp.PathAttributeAsPath) config.RpkiValidationResultType { diff --git a/server/server.go b/server/server.go index 8d156ae9..5f83a258 100644 --- a/server/server.go +++ b/server/server.go @@ -984,7 +984,7 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) []*SenderMsg { func (server *BgpServer) SetGlobalType(g config.Global) error { ch := make(chan *GrpcResponse) server.GrpcReqCh <- &GrpcRequest{ - RequestType: REQ_MOD_GLOBAL_CONFIG, + RequestType: REQ_START_SERVER, Data: &g, ResponseCh: ch, } @@ -1005,12 +1005,9 @@ func (server *BgpServer) SetGlobalType(g config.Global) error { func (server *BgpServer) SetRpkiConfig(c []config.RpkiServer) error { ch := make(chan *GrpcResponse) server.GrpcReqCh <- &GrpcRequest{ - RequestType: REQ_MOD_RPKI, - Data: &api.ModRpkiArguments{ - Operation: api.Operation_INITIALIZE, - Asn: server.bgpConfig.Global.Config.As, - }, - ResponseCh: ch, + RequestType: REQ_INITIALIZE_RPKI, + Data: &server.bgpConfig.Global, + ResponseCh: ch, } if err := (<-ch).Err(); err != nil { return err @@ -1019,12 +1016,11 @@ func (server *BgpServer) SetRpkiConfig(c []config.RpkiServer) error { for _, s := range c { ch := make(chan *GrpcResponse) server.GrpcReqCh <- &GrpcRequest{ - RequestType: REQ_MOD_RPKI, - Data: &api.ModRpkiArguments{ - Operation: api.Operation_ADD, - Address: s.Config.Address, - Port: s.Config.Port, - Lifetime: s.Config.RecordLifetime, + RequestType: REQ_ADD_RPKI, + Data: &api.AddRpkiRequest{ + Address: s.Config.Address, + Port: s.Config.Port, + Lifetime: s.Config.RecordLifetime, }, ResponseCh: ch, } @@ -1039,7 +1035,7 @@ func (server *BgpServer) SetBmpConfig(c []config.BmpServer) error { for _, s := range c { ch := make(chan *GrpcResponse) server.GrpcReqCh <- &GrpcRequest{ - RequestType: REQ_MOD_BMP, + RequestType: REQ_ADD_BMP, Data: &s.Config, ResponseCh: ch, } @@ -1055,12 +1051,11 @@ func (server *BgpServer) SetMrtConfig(c []config.Mrt) error { if s.FileName != "" { ch := make(chan *GrpcResponse) server.GrpcReqCh <- &GrpcRequest{ - RequestType: REQ_MOD_MRT, - Data: &api.ModMrtArguments{ - Operation: api.Operation_ADD, - DumpType: int32(s.DumpType.ToInt()), - Filename: s.FileName, - Interval: s.Interval, + RequestType: REQ_ENABLE_MRT, + Data: &api.EnableMrtRequest{ + DumpType: int32(s.DumpType.ToInt()), + Filename: s.FileName, + Interval: s.Interval, }, ResponseCh: ch, } @@ -1380,44 +1375,57 @@ func (server *BgpServer) Api2PathList(resource api.Resource, name string, ApiPat return paths, nil } -func (server *BgpServer) handleModPathRequest(grpcReq *GrpcRequest) []*table.Path { +func (server *BgpServer) handleAddPathRequest(grpcReq *GrpcRequest) []*table.Path { var err error var uuidBytes []byte paths := make([]*table.Path, 0, 1) - arg, ok := grpcReq.Data.(*api.ModPathArguments) + arg, ok := grpcReq.Data.(*api.AddPathRequest) if !ok { err = fmt.Errorf("type assertion failed") + } else { + paths, err = server.Api2PathList(arg.Resource, arg.VrfId, []*api.Path{arg.Path}) + if err == nil { + u := uuid.NewV4() + uuidBytes = u.Bytes() + paths[0].SetUUID(uuidBytes) + } + } + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: &api.AddPathResponse{ + Uuid: uuidBytes, + }, } + close(grpcReq.ResponseCh) + return paths +} - if err == nil { - switch arg.Operation { - case api.Operation_DEL: - if len(arg.Uuid) > 0 { - path := func() *table.Path { - for _, path := range server.globalRib.GetPathList(table.GLOBAL_RIB_NAME, server.globalRib.GetRFlist()) { - if len(path.UUID()) > 0 && bytes.Equal(path.UUID(), arg.Uuid) { - return path - } +func (server *BgpServer) handleDeletePathRequest(grpcReq *GrpcRequest) []*table.Path { + var err error + paths := make([]*table.Path, 0, 1) + arg, ok := grpcReq.Data.(*api.DeletePathRequest) + if !ok { + err = fmt.Errorf("type assertion failed") + } else { + if len(arg.Uuid) > 0 { + path := func() *table.Path { + for _, path := range server.globalRib.GetPathList(table.GLOBAL_RIB_NAME, server.globalRib.GetRFlist()) { + if len(path.UUID()) > 0 && bytes.Equal(path.UUID(), arg.Uuid) { + return path } - return nil - }() - if path != nil { - paths = append(paths, path.Clone(true)) - } else { - err = fmt.Errorf("Can't find a specified path") } - break + return nil + }() + if path != nil { + paths = append(paths, path.Clone(true)) + } else { + err = fmt.Errorf("Can't find a specified path") } + } else if arg.Path != nil { arg.Path.IsWithdraw = true - fallthrough - case api.Operation_ADD: - paths, err = server.Api2PathList(arg.Resource, arg.Name, []*api.Path{arg.Path}) - if err == nil { - u := uuid.NewV4() - uuidBytes = u.Bytes() - paths[0].SetUUID(uuidBytes) - } - case api.Operation_DEL_ALL: + paths, err = server.Api2PathList(arg.Resource, arg.VrfId, []*api.Path{arg.Path}) + } else { + // delete all paths families := server.globalRib.GetRFlist() if arg.Family != 0 { families = []bgp.RouteFamily{bgp.RouteFamily(arg.Family)} @@ -1427,26 +1435,23 @@ func (server *BgpServer) handleModPathRequest(grpcReq *GrpcRequest) []*table.Pat } } } - result := &GrpcResponse{ + grpcReq.ResponseCh <- &GrpcResponse{ ResponseErr: err, - Data: &api.ModPathResponse{ - Uuid: uuidBytes, - }, + Data: &api.DeletePathResponse{}, } - grpcReq.ResponseCh <- result close(grpcReq.ResponseCh) return paths } -func (server *BgpServer) handleModPathsRequest(grpcReq *GrpcRequest) []*table.Path { +func (server *BgpServer) handleInjectMrtRequest(grpcReq *GrpcRequest) []*table.Path { var err error var paths []*table.Path - arg, ok := grpcReq.Data.(*api.ModPathsArguments) + arg, ok := grpcReq.Data.(*api.InjectMrtRequest) if !ok { err = fmt.Errorf("type assertion failed") } if err == nil { - paths, err = server.Api2PathList(arg.Resource, arg.Name, arg.Paths) + paths, err = server.Api2PathList(arg.Resource, arg.VrfId, arg.Paths) if err == nil { return paths } @@ -1460,49 +1465,40 @@ func (server *BgpServer) handleModPathsRequest(grpcReq *GrpcRequest) []*table.Pa } -func (server *BgpServer) handleVrfMod(arg *api.ModVrfArguments) ([]*table.Path, error) { +func (server *BgpServer) handleAddVrfRequest(grpcReq *GrpcRequest) ([]*table.Path, error) { + arg, _ := grpcReq.Data.(*api.AddVrfRequest) rib := server.globalRib - var msgs []*table.Path - switch arg.Operation { - case api.Operation_ADD: - rd := bgp.GetRouteDistinguisher(arg.Vrf.Rd) - f := func(bufs [][]byte) ([]bgp.ExtendedCommunityInterface, error) { - ret := make([]bgp.ExtendedCommunityInterface, 0, len(bufs)) - for _, rt := range bufs { - r, err := bgp.ParseExtended(rt) - if err != nil { - return nil, err - } - ret = append(ret, r) + rd := bgp.GetRouteDistinguisher(arg.Vrf.Rd) + f := func(bufs [][]byte) ([]bgp.ExtendedCommunityInterface, error) { + ret := make([]bgp.ExtendedCommunityInterface, 0, len(bufs)) + for _, rt := range bufs { + r, err := bgp.ParseExtended(rt) + if err != nil { + return nil, err } - return ret, nil - } - importRt, err := f(arg.Vrf.ImportRt) - if err != nil { - return nil, err - } - exportRt, err := f(arg.Vrf.ExportRt) - if err != nil { - return nil, err - } - pi := &table.PeerInfo{ - AS: server.bgpConfig.Global.Config.As, - LocalID: net.ParseIP(server.bgpConfig.Global.Config.RouterId).To4(), - } - msgs, err = rib.AddVrf(arg.Vrf.Name, rd, importRt, exportRt, pi) - if err != nil { - return nil, err - } - case api.Operation_DEL: - var err error - msgs, err = rib.DeleteVrf(arg.Vrf.Name) - if err != nil { - return nil, err + ret = append(ret, r) } - default: - return nil, fmt.Errorf("unknown operation: %d", arg.Operation) + return ret, nil } - return msgs, nil + importRt, err := f(arg.Vrf.ImportRt) + if err != nil { + return nil, err + } + exportRt, err := f(arg.Vrf.ExportRt) + if err != nil { + return nil, err + } + pi := &table.PeerInfo{ + AS: server.bgpConfig.Global.Config.As, + LocalID: net.ParseIP(server.bgpConfig.Global.Config.RouterId).To4(), + } + return rib.AddVrf(arg.Vrf.Name, rd, importRt, exportRt, pi) +} + +func (server *BgpServer) handleDeleteVrfRequest(grpcReq *GrpcRequest) ([]*table.Path, error) { + arg, _ := grpcReq.Data.(*api.DeleteVrfRequest) + rib := server.globalRib + return rib.DeleteVrf(arg.Vrf.Name) } func (server *BgpServer) handleVrfRequest(req *GrpcRequest) []*table.Path { @@ -1511,8 +1507,8 @@ func (server *BgpServer) handleVrfRequest(req *GrpcRequest) []*table.Path { switch req.RequestType { case REQ_VRF: - arg := req.Data.(*api.Table) - name := arg.Name + arg := req.Data.(*api.GetRibRequest) + name := arg.Table.Name rib := server.globalRib vrfs := rib.Vrfs if _, ok := vrfs[name]; !ok { @@ -1520,7 +1516,7 @@ func (server *BgpServer) handleVrfRequest(req *GrpcRequest) []*table.Path { break } var rf bgp.RouteFamily - switch bgp.RouteFamily(arg.Family) { + switch bgp.RouteFamily(arg.Table.Family) { case bgp.RF_IPv4_UC: rf = bgp.RF_IPv4_VPN case bgp.RF_IPv6_UC: @@ -1528,7 +1524,7 @@ func (server *BgpServer) handleVrfRequest(req *GrpcRequest) []*table.Path { case bgp.RF_EVPN: rf = bgp.RF_EVPN default: - result.ResponseErr = fmt.Errorf("unsupported route family: %s", bgp.RouteFamily(arg.Family)) + result.ResponseErr = fmt.Errorf("unsupported route family: %s", bgp.RouteFamily(arg.Table.Family)) break } paths := rib.GetPathList(table.GLOBAL_RIB_NAME, []bgp.RouteFamily{rf}) @@ -1544,24 +1540,27 @@ func (server *BgpServer) handleVrfRequest(req *GrpcRequest) []*table.Path { }) } req.ResponseCh <- &GrpcResponse{ - Data: &api.Table{ - Type: arg.Type, - Family: arg.Family, - Destinations: dsts, + Data: &api.GetRibResponse{ + Table: &api.Table{ + Type: arg.Table.Type, + Family: arg.Table.Family, + Destinations: dsts, + }, }, } goto END - case REQ_VRFS: - vrfs := server.globalRib.Vrfs - for _, vrf := range vrfs { - req.ResponseCh <- &GrpcResponse{ - Data: vrf.ToApiStruct(), - } - } - goto END - case REQ_VRF_MOD: - arg := req.Data.(*api.ModVrfArguments) - msgs, result.ResponseErr = server.handleVrfMod(arg) + case REQ_GET_VRF: + l := make([]*api.Vrf, 0, len(server.globalRib.Vrfs)) + for _, vrf := range server.globalRib.Vrfs { + l = append(l, vrf.ToApiStruct()) + } + result.Data = &api.GetVrfResponse{Vrfs: l} + case REQ_ADD_VRF: + msgs, result.ResponseErr = server.handleAddVrfRequest(req) + result.Data = &api.AddVrfResponse{} + case REQ_DELETE_VRF: + msgs, result.ResponseErr = server.handleDeleteVrfRequest(req) + result.Data = &api.DeleteVrfResponse{} default: result.ResponseErr = fmt.Errorf("unknown request type: %d", req.RequestType) } @@ -1573,87 +1572,51 @@ END: } func (server *BgpServer) handleModConfig(grpcReq *GrpcRequest) error { - var op api.Operation var c *config.Global switch arg := grpcReq.Data.(type) { - case *api.ModGlobalConfigArguments: - op = arg.Operation - if op == api.Operation_ADD { - g := arg.Global - if net.ParseIP(g.RouterId) == nil { - return fmt.Errorf("invalid router-id format: %s", g.RouterId) - } - families := make([]config.AfiSafi, 0, len(g.Families)) - for _, f := range g.Families { - name := config.AfiSafiType(bgp.RouteFamily(f).String()) - families = append(families, config.AfiSafi{ - Config: config.AfiSafiConfig{ - AfiSafiName: name, - Enabled: true, - }, - State: config.AfiSafiState{ - AfiSafiName: name, - }, - }) - } - b := &config.BgpConfigSet{ - Global: config.Global{ - Config: config.GlobalConfig{ - As: g.As, - RouterId: g.RouterId, - Port: g.ListenPort, - LocalAddressList: g.ListenAddresses, - }, - MplsLabelRange: config.MplsLabelRange{ - MinLabel: g.MplsLabelMin, - MaxLabel: g.MplsLabelMax, - }, - AfiSafis: families, + case *api.StartServerRequest: + g := arg.Global + if net.ParseIP(g.RouterId) == nil { + return fmt.Errorf("invalid router-id format: %s", g.RouterId) + } + families := make([]config.AfiSafi, 0, len(g.Families)) + for _, f := range g.Families { + name := config.AfiSafiType(bgp.RouteFamily(f).String()) + families = append(families, config.AfiSafi{ + Config: config.AfiSafiConfig{ + AfiSafiName: name, + Enabled: true, }, - } - if err := config.SetDefaultConfigValues(nil, b); err != nil { - return err - } - c = &b.Global - } - case *config.Global: - op = api.Operation_ADD - c = arg - } - - switch op { - case api.Operation_ADD: - if server.bgpConfig.Global.Config.As != 0 { - return fmt.Errorf("gobgp is already started") + State: config.AfiSafiState{ + AfiSafiName: name, + }, + }) } - - if c.Config.Port > 0 { - acceptCh := make(chan *net.TCPConn, 4096) - for _, addr := range c.Config.LocalAddressList { - l, err := NewTCPListener(addr, uint32(c.Config.Port), acceptCh) - if err != nil { - return err - } - server.listeners = append(server.listeners, l) - } - server.acceptCh = acceptCh + b := &config.BgpConfigSet{ + Global: config.Global{ + Config: config.GlobalConfig{ + As: g.As, + RouterId: g.RouterId, + Port: g.ListenPort, + LocalAddressList: g.ListenAddresses, + }, + MplsLabelRange: config.MplsLabelRange{ + MinLabel: g.MplsLabelMin, + MaxLabel: g.MplsLabelMax, + }, + AfiSafis: families, + }, } - - rfs, _ := config.AfiSafis(c.AfiSafis).ToRfList() - server.globalRib = table.NewTableManager(rfs, c.MplsLabelRange.MinLabel, c.MplsLabelRange.MaxLabel) - - p := config.RoutingPolicy{} - if err := server.SetRoutingPolicy(p); err != nil { + if err := config.SetDefaultConfigValues(nil, b); err != nil { return err } - server.bgpConfig.Global = *c - // update route selection options - table.SelectionOptions = c.RouteSelectionOptions.Config - case api.Operation_DEL_ALL: + c = &b.Global + case *config.Global: + c = arg + case *api.StopServerRequest: for k, _ := range server.neighborMap { - _, err := server.handleGrpcModNeighbor(&GrpcRequest{ - Data: &api.ModNeighborArguments{ - Operation: api.Operation_DEL, + _, err := server.handleDeleteNeighborRequest(&GrpcRequest{ + Data: &api.DeleteNeighborRequest{ Peer: &api.Peer{ Conf: &api.PeerConf{ NeighborAddress: k, @@ -1669,7 +1632,35 @@ func (server *BgpServer) handleModConfig(grpcReq *GrpcRequest) error { l.Close() } server.bgpConfig.Global = config.Global{} + return nil } + + if server.bgpConfig.Global.Config.As != 0 { + return fmt.Errorf("gobgp is already started") + } + + if c.Config.Port > 0 { + acceptCh := make(chan *net.TCPConn, 4096) + for _, addr := range c.Config.LocalAddressList { + l, err := NewTCPListener(addr, uint32(c.Config.Port), acceptCh) + if err != nil { + return err + } + server.listeners = append(server.listeners, l) + } + server.acceptCh = acceptCh + } + + rfs, _ := config.AfiSafis(c.AfiSafis).ToRfList() + server.globalRib = table.NewTableManager(rfs, c.MplsLabelRange.MinLabel, c.MplsLabelRange.MaxLabel) + + p := config.RoutingPolicy{} + if err := server.SetRoutingPolicy(p); err != nil { + return err + } + server.bgpConfig.Global = *c + // update route selection options + table.SelectionOptions = c.RouteSelectionOptions.Config return nil } @@ -1723,7 +1714,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { return results } - if server.bgpConfig.Global.Config.As == 0 && grpcReq.RequestType != REQ_MOD_GLOBAL_CONFIG { + if server.bgpConfig.Global.Config.As == 0 && grpcReq.RequestType != REQ_START_SERVER { grpcReq.ResponseCh <- &GrpcResponse{ ResponseErr: fmt.Errorf("bgpd main loop is not started yet"), } @@ -1734,47 +1725,57 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { var err error switch grpcReq.RequestType { - case REQ_GLOBAL_CONFIG: + case REQ_GET_SERVER: g := server.bgpConfig.Global result := &GrpcResponse{ - Data: &api.Global{ - As: g.Config.As, - RouterId: g.Config.RouterId, - ListenPort: g.Config.Port, - ListenAddresses: g.Config.LocalAddressList, - MplsLabelMin: g.MplsLabelRange.MinLabel, - MplsLabelMax: g.MplsLabelRange.MaxLabel, + Data: &api.GetServerResponse{ + Global: &api.Global{ + As: g.Config.As, + RouterId: g.Config.RouterId, + ListenPort: g.Config.Port, + ListenAddresses: g.Config.LocalAddressList, + MplsLabelMin: g.MplsLabelRange.MinLabel, + MplsLabelMax: g.MplsLabelRange.MaxLabel, + }, }, } grpcReq.ResponseCh <- result close(grpcReq.ResponseCh) - case REQ_MOD_GLOBAL_CONFIG: + case REQ_START_SERVER: + err := server.handleModConfig(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: &api.StartServerResponse{}, + } + close(grpcReq.ResponseCh) + case REQ_STOP_SERVER: err := server.handleModConfig(grpcReq) grpcReq.ResponseCh <- &GrpcResponse{ ResponseErr: err, + Data: &api.StopServerResponse{}, } close(grpcReq.ResponseCh) case REQ_GLOBAL_RIB, REQ_LOCAL_RIB: - arg := grpcReq.Data.(*api.Table) + arg := grpcReq.Data.(*api.GetRibRequest) d := &api.Table{ - Type: arg.Type, - Family: arg.Family, + Type: arg.Table.Type, + Family: arg.Table.Family, } rib := server.globalRib id := table.GLOBAL_RIB_NAME if grpcReq.RequestType == REQ_LOCAL_RIB { - peer, ok := server.neighborMap[arg.Name] + peer, ok := server.neighborMap[arg.Table.Name] if !ok { - err = fmt.Errorf("Neighbor that has %v doesn't exist.", arg.Name) + err = fmt.Errorf("Neighbor that has %v doesn't exist.", arg.Table.Name) goto ERROR } if !peer.isRouteServerClient() { - err = fmt.Errorf("Neighbor %v doesn't have local rib", arg.Name) + err = fmt.Errorf("Neighbor %v doesn't have local rib", arg.Table.Name) goto ERROR } id = peer.ID() } - af := bgp.RouteFamily(arg.Family) + af := bgp.RouteFamily(arg.Table.Family) if _, ok := rib.Tables[af]; !ok { err = fmt.Errorf("address family: %s not supported", af) goto ERROR @@ -1782,7 +1783,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { switch af { case bgp.RF_IPv4_UC, bgp.RF_IPv6_UC: - if len(arg.Destinations) > 0 { + if len(arg.Table.Destinations) > 0 { dsts := []*api.Destination{} f := func(id, cidr string) (bool, error) { _, prefix, err := net.ParseCIDR(cidr) @@ -1798,7 +1799,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { return false, nil } } - for _, dst := range arg.Destinations { + for _, dst := range arg.Table.Destinations { key := dst.Prefix if _, err := f(id, key); err != nil { if host := net.ParseIP(key); host != nil { @@ -1834,7 +1835,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { } } grpcReq.ResponseCh <- &GrpcResponse{ - Data: d, + Data: &api.GetRibResponse{Table: d}, } close(grpcReq.ResponseCh) case REQ_BMP_GLOBAL: @@ -1849,29 +1850,16 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { Data: bmpmsgs, } close(grpcReq.ResponseCh) - case REQ_MOD_PATH: - pathList := server.handleModPathRequest(grpcReq) + case REQ_ADD_PATH: + pathList := server.handleAddPathRequest(grpcReq) if len(pathList) > 0 { msgs, _ = server.propagateUpdate(nil, pathList) } - case REQ_MOD_PATHS: - pathList := server.handleModPathsRequest(grpcReq) + case REQ_DELETE_PATH: + pathList := server.handleDeletePathRequest(grpcReq) if len(pathList) > 0 { msgs, _ = server.propagateUpdate(nil, pathList) - grpcReq.ResponseCh <- &GrpcResponse{} - close(grpcReq.ResponseCh) } - case REQ_NEIGHBORS: - results := make([]*GrpcResponse, len(server.neighborMap)) - i := 0 - for _, peer := range server.neighborMap { - result := &GrpcResponse{ - Data: peer.ToApiStruct(), - } - results[i] = result - i++ - } - go sendMultipleResponses(grpcReq, results) case REQ_BMP_NEIGHBORS: //TODO: merge REQ_NEIGHBORS and REQ_BMP_NEIGHBORS msgs := make([]*bmp.BMPMessage, 0, len(server.neighborMap)) @@ -1892,30 +1880,30 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { } close(grpcReq.ResponseCh) case REQ_NEIGHBOR: - peer, err := server.checkNeighborRequest(grpcReq) - if err != nil { - break + l := []*api.Peer{} + for _, peer := range server.neighborMap { + l = append(l, peer.ToApiStruct()) } - result := &GrpcResponse{ - Data: peer.ToApiStruct(), + grpcReq.ResponseCh <- &GrpcResponse{ + Data: &api.GetNeighborResponse{ + Peers: l, + }, } - grpcReq.ResponseCh <- result close(grpcReq.ResponseCh) - case REQ_ADJ_RIB_IN, REQ_ADJ_RIB_OUT: - arg := grpcReq.Data.(*api.Table) + arg := grpcReq.Data.(*api.GetRibRequest) d := &api.Table{ - Type: arg.Type, - Family: arg.Family, + Type: arg.Table.Type, + Family: arg.Table.Family, } - peer, ok := server.neighborMap[arg.Name] + peer, ok := server.neighborMap[arg.Table.Name] if !ok { - err = fmt.Errorf("Neighbor that has %v doesn't exist.", arg.Name) + err = fmt.Errorf("Neighbor that has %v doesn't exist.", arg.Table.Name) goto ERROR } - rf := bgp.RouteFamily(arg.Family) + rf := bgp.RouteFamily(arg.Table.Family) var paths []*table.Path if grpcReq.RequestType == REQ_ADJ_RIB_IN { paths = peer.adjRibIn.PathList([]bgp.RouteFamily{rf}, false) @@ -1932,7 +1920,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { for _, p := range paths { key := p.GetNlri().String() found := true - for _, dst := range arg.Destinations { + for _, dst := range arg.Table.Destinations { found = false if dst.Prefix == key { found = true @@ -1967,7 +1955,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { } d.Destinations = results grpcReq.ResponseCh <- &GrpcResponse{ - Data: d, + Data: &api.GetRibResponse{Table: d}, } close(grpcReq.ResponseCh) case REQ_BMP_ADJ_IN: @@ -1996,7 +1984,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { for _, peer := range peers { msgs = append(msgs, newSenderMsg(peer, nil, m, false)) } - grpcReq.ResponseCh <- &GrpcResponse{} + grpcReq.ResponseCh <- &GrpcResponse{Data: &api.ShutdownNeighborResponse{}} close(grpcReq.ResponseCh) case REQ_NEIGHBOR_RESET: @@ -2010,7 +1998,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { peer.fsm.idleHoldTime = peer.fsm.pConf.Timers.Config.IdleHoldTimeAfterReset msgs = append(msgs, newSenderMsg(peer, nil, m, false)) } - grpcReq.ResponseCh <- &GrpcResponse{} + grpcReq.ResponseCh <- &GrpcResponse{Data: &api.ResetNeighborResponse{}} close(grpcReq.ResponseCh) case REQ_NEIGHBOR_SOFT_RESET, REQ_NEIGHBOR_SOFT_RESET_IN: @@ -2048,7 +2036,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { } if grpcReq.RequestType == REQ_NEIGHBOR_SOFT_RESET_IN { - grpcReq.ResponseCh <- &GrpcResponse{} + grpcReq.ResponseCh <- &GrpcResponse{Data: &api.SoftResetNeighborResponse{}} close(grpcReq.ResponseCh) break } @@ -2114,7 +2102,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { msgs = append(msgs, newSenderMsg(peer, withdrawnList, nil, false)) } } - grpcReq.ResponseCh <- &GrpcResponse{} + grpcReq.ResponseCh <- &GrpcResponse{Data: &api.SoftResetNeighborResponse{}} close(grpcReq.ResponseCh) case REQ_NEIGHBOR_ENABLE, REQ_NEIGHBOR_DISABLE: @@ -2122,7 +2110,6 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { if err1 != nil { break } - var err api.Error result := &GrpcResponse{} if grpcReq.RequestType == REQ_NEIGHBOR_ENABLE { select { @@ -2131,13 +2118,11 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { "Topic": "Peer", "Key": peer.fsm.pConf.Config.NeighborAddress, }).Debug("ADMIN_STATE_UP requested") - err.Code = api.Error_SUCCESS - err.Msg = "ADMIN_STATE_UP" default: log.Warning("previous request is still remaining. : ", peer.fsm.pConf.Config.NeighborAddress) - err.Code = api.Error_FAIL - err.Msg = "previous request is still remaining" + result.ResponseErr = fmt.Errorf("previous request is still remaining %v", peer.fsm.pConf.Config.NeighborAddress) } + result.Data = &api.EnableNeighborResponse{} } else { select { case peer.fsm.adminStateCh <- ADMIN_STATE_DOWN: @@ -2145,20 +2130,25 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { "Topic": "Peer", "Key": peer.fsm.pConf.Config.NeighborAddress, }).Debug("ADMIN_STATE_DOWN requested") - err.Code = api.Error_SUCCESS - err.Msg = "ADMIN_STATE_DOWN" default: log.Warning("previous request is still remaining. : ", peer.fsm.pConf.Config.NeighborAddress) - err.Code = api.Error_FAIL - err.Msg = "previous request is still remaining" + result.ResponseErr = fmt.Errorf("previous request is still remaining %v", peer.fsm.pConf.Config.NeighborAddress) } + result.Data = &api.DisableNeighborResponse{} } - result.Data = err grpcReq.ResponseCh <- result close(grpcReq.ResponseCh) - case REQ_MOD_NEIGHBOR: - m, err := server.handleGrpcModNeighbor(grpcReq) + case REQ_GRPC_ADD_NEIGHBOR: + _, err := server.handleAddNeighborRequest(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + Data: &api.AddNeighborResponse{}, + ResponseErr: err, + } + close(grpcReq.ResponseCh) + case REQ_GRPC_DELETE_NEIGHBOR: + m, err := server.handleDeleteNeighborRequest(grpcReq) grpcReq.ResponseCh <- &GrpcResponse{ + Data: &api.DeleteNeighborResponse{}, ResponseErr: err, } if len(m) > 0 { @@ -2190,56 +2180,116 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { msgs = append(msgs, m...) } close(grpcReq.ResponseCh) - case REQ_DEFINED_SET: - if err := server.handleGrpcGetDefinedSet(grpcReq); err != nil { - grpcReq.ResponseCh <- &GrpcResponse{ - ResponseErr: err, - } + case REQ_GET_DEFINED_SET: + rsp, err := server.handleGrpcGetDefinedSet(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: rsp, } close(grpcReq.ResponseCh) - case REQ_MOD_DEFINED_SET: - err := server.handleGrpcModDefinedSet(grpcReq) + case REQ_ADD_DEFINED_SET: + rsp, err := server.handleGrpcAddDefinedSet(grpcReq) grpcReq.ResponseCh <- &GrpcResponse{ ResponseErr: err, + Data: rsp, } close(grpcReq.ResponseCh) - case REQ_STATEMENT: - if err := server.handleGrpcGetStatement(grpcReq); err != nil { - grpcReq.ResponseCh <- &GrpcResponse{ - ResponseErr: err, - } + case REQ_DELETE_DEFINED_SET: + rsp, err := server.handleGrpcDeleteDefinedSet(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: rsp, } close(grpcReq.ResponseCh) - case REQ_MOD_STATEMENT: - err := server.handleGrpcModStatement(grpcReq) + case REQ_REPLACE_DEFINED_SET: + rsp, err := server.handleGrpcReplaceDefinedSet(grpcReq) grpcReq.ResponseCh <- &GrpcResponse{ ResponseErr: err, + Data: rsp, } close(grpcReq.ResponseCh) - case REQ_POLICY: - if err := server.handleGrpcGetPolicy(grpcReq); err != nil { - grpcReq.ResponseCh <- &GrpcResponse{ - ResponseErr: err, - } + case REQ_GET_STATEMENT: + rsp, err := server.handleGrpcGetStatement(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: rsp, } close(grpcReq.ResponseCh) - case REQ_MOD_POLICY: - err := server.handleGrpcModPolicy(grpcReq) + case REQ_ADD_STATEMENT: + data, err := server.handleGrpcAddStatement(grpcReq) grpcReq.ResponseCh <- &GrpcResponse{ ResponseErr: err, + Data: data, } close(grpcReq.ResponseCh) - case REQ_POLICY_ASSIGNMENT: - if err := server.handleGrpcGetPolicyAssignment(grpcReq); err != nil { - grpcReq.ResponseCh <- &GrpcResponse{ - ResponseErr: err, - } + case REQ_DELETE_STATEMENT: + data, err := server.handleGrpcDeleteStatement(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: data, + } + close(grpcReq.ResponseCh) + case REQ_REPLACE_STATEMENT: + data, err := server.handleGrpcReplaceStatement(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: data, } close(grpcReq.ResponseCh) - case REQ_MOD_POLICY_ASSIGNMENT: - err := server.handleGrpcModPolicyAssignment(grpcReq) + case REQ_GET_POLICY: + rsp, err := server.handleGrpcGetPolicy(grpcReq) grpcReq.ResponseCh <- &GrpcResponse{ ResponseErr: err, + Data: rsp, + } + close(grpcReq.ResponseCh) + case REQ_ADD_POLICY: + data, err := server.handleGrpcAddPolicy(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: data, + } + close(grpcReq.ResponseCh) + case REQ_DELETE_POLICY: + data, err := server.handleGrpcDeletePolicy(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: data, + } + close(grpcReq.ResponseCh) + case REQ_REPLACE_POLICY: + data, err := server.handleGrpcReplacePolicy(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: data, + } + close(grpcReq.ResponseCh) + case REQ_GET_POLICY_ASSIGNMENT: + data, err := server.handleGrpcGetPolicyAssignment(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: data, + } + close(grpcReq.ResponseCh) + case REQ_ADD_POLICY_ASSIGNMENT: + data, err := server.handleGrpcAddPolicyAssignment(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: data, + } + close(grpcReq.ResponseCh) + case REQ_DELETE_POLICY_ASSIGNMENT: + data, err := server.handleGrpcDeletePolicyAssignment(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: data, + } + close(grpcReq.ResponseCh) + case REQ_REPLACE_POLICY_ASSIGNMENT: + data, err := server.handleGrpcReplacePolicyAssignment(grpcReq) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: data, } close(grpcReq.ResponseCh) case REQ_MONITOR_GLOBAL_BEST_CHANGED, REQ_MONITOR_NEIGHBOR_PEER_STATE: @@ -2254,15 +2304,33 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { go w.(*grpcIncomingWatcher).addRequest(grpcReq) case REQ_MRT_GLOBAL_RIB, REQ_MRT_LOCAL_RIB: server.handleMrt(grpcReq) - case REQ_MOD_MRT: - server.handleModMrt(grpcReq) - case REQ_MOD_BMP: - server.handleModBmp(grpcReq) - case REQ_MOD_RPKI: + case REQ_ENABLE_MRT: + server.handleEnableMrtRequest(grpcReq) + case REQ_DISABLE_MRT: + server.handleDisableMrtRequest(grpcReq) + case REQ_INJECT_MRT: + pathList := server.handleInjectMrtRequest(grpcReq) + if len(pathList) > 0 { + msgs, _ = server.propagateUpdate(nil, pathList) + grpcReq.ResponseCh <- &GrpcResponse{} + close(grpcReq.ResponseCh) + } + case REQ_ADD_BMP: + server.handleAddBmp(grpcReq) + case REQ_DELETE_BMP: + server.handleDeleteBmp(grpcReq) + case REQ_VALIDATE_RIB: + server.handleValidateRib(grpcReq) + case REQ_INITIALIZE_RPKI: + g := grpcReq.Data.(*config.Global) + grpcDone(grpcReq, server.roaManager.SetAS(g.Config.As)) + case REQ_ADD_RPKI, REQ_DELETE_RPKI, REQ_ENABLE_RPKI, REQ_DISABLE_RPKI, REQ_RESET_RPKI, REQ_SOFT_RESET_RPKI: server.handleModRpki(grpcReq) - case REQ_ROA, REQ_RPKI: - server.roaManager.handleGRPC(grpcReq) - case REQ_VRF, REQ_VRFS, REQ_VRF_MOD: + case REQ_ROA, REQ_GET_RPKI: + rsp := server.roaManager.handleGRPC(grpcReq) + grpcReq.ResponseCh <- rsp + close(grpcReq.ResponseCh) + case REQ_VRF, REQ_GET_VRF, REQ_ADD_VRF, REQ_DELETE_VRF: pathList := server.handleVrfRequest(grpcReq) if len(pathList) > 0 { msgs, _ = server.propagateUpdate(nil, pathList) @@ -2286,31 +2354,18 @@ ERROR: return msgs } -func (server *BgpServer) handleGrpcGetDefinedSet(grpcReq *GrpcRequest) error { - arg := grpcReq.Data.(*api.DefinedSet) +func (server *BgpServer) handleGrpcGetDefinedSet(grpcReq *GrpcRequest) (*api.GetDefinedSetResponse, error) { + arg := grpcReq.Data.(*api.GetDefinedSetRequest) typ := table.DefinedType(arg.Type) - name := arg.Name set, ok := server.policy.DefinedSetMap[typ] if !ok { - return fmt.Errorf("invalid defined-set type: %d", typ) + return &api.GetDefinedSetResponse{}, fmt.Errorf("invalid defined-set type: %d", typ) } - found := false + sets := make([]*api.DefinedSet, 0) for _, s := range set { - if name != "" && name != s.Name() { - continue - } - grpcReq.ResponseCh <- &GrpcResponse{ - Data: s.ToApiStruct(), - } - found = true - if name != "" { - break - } - } - if !found { - return fmt.Errorf("not found %s", name) + sets = append(sets, s.ToApiStruct()) } - return nil + return &api.GetDefinedSetResponse{Sets: sets}, nil } func (server *BgpServer) handleAddNeighbor(c *config.Neighbor) ([]*SenderMsg, error) { @@ -2439,10 +2494,11 @@ func (server *BgpServer) handleUpdateNeighbor(c *config.Neighbor) ([]*SenderMsg, return msgs, policyUpdated, nil } -func (server *BgpServer) handleGrpcModNeighbor(grpcReq *GrpcRequest) ([]*SenderMsg, error) { - arg := grpcReq.Data.(*api.ModNeighborArguments) - switch arg.Operation { - case api.Operation_ADD: +func (server *BgpServer) handleAddNeighborRequest(grpcReq *GrpcRequest) ([]*SenderMsg, error) { + arg, ok := grpcReq.Data.(*api.AddNeighborRequest) + if !ok { + return []*SenderMsg{}, fmt.Errorf("AddNeighborRequest type assertion failed") + } else { apitoConfig := func(a *api.Peer) (*config.Neighbor, error) { pconf := &config.Neighbor{} if a.Conf != nil { @@ -2552,130 +2608,164 @@ func (server *BgpServer) handleGrpcModNeighbor(grpcReq *GrpcRequest) ([]*SenderM return nil, err } return server.handleAddNeighbor(c) - case api.Operation_DEL: - return server.handleDelNeighbor(&config.Neighbor{ - Config: config.NeighborConfig{ - NeighborAddress: arg.Peer.Conf.NeighborAddress, - }, - }, bgp.BGP_ERROR_CEASE, bgp.BGP_ERROR_SUB_PEER_DECONFIGURED) - default: - return nil, fmt.Errorf("unsupported operation %s", arg.Operation) } } -func (server *BgpServer) handleGrpcModDefinedSet(grpcReq *GrpcRequest) error { - arg := grpcReq.Data.(*api.ModDefinedSetArguments) +func (server *BgpServer) handleDeleteNeighborRequest(grpcReq *GrpcRequest) ([]*SenderMsg, error) { + arg := grpcReq.Data.(*api.DeleteNeighborRequest) + return server.handleDelNeighbor(&config.Neighbor{ + Config: config.NeighborConfig{ + NeighborAddress: arg.Peer.Conf.NeighborAddress, + }, + }, bgp.BGP_ERROR_CEASE, bgp.BGP_ERROR_SUB_PEER_DECONFIGURED) +} + +func (server *BgpServer) handleGrpcAddDefinedSet(grpcReq *GrpcRequest) (*api.AddDefinedSetResponse, error) { + arg := grpcReq.Data.(*api.AddDefinedSetRequest) + set := arg.Set + typ := table.DefinedType(set.Type) + name := set.Name + var err error + m, ok := server.policy.DefinedSetMap[typ] + if !ok { + return nil, fmt.Errorf("invalid defined-set type: %d", typ) + } + d, ok := m[name] + s, err := table.NewDefinedSetFromApiStruct(set) + if err != nil { + return nil, err + } + if ok { + err = d.Append(s) + } else { + m[name] = s + } + return &api.AddDefinedSetResponse{}, err +} + +func (server *BgpServer) handleGrpcDeleteDefinedSet(grpcReq *GrpcRequest) (*api.DeleteDefinedSetResponse, error) { + arg := grpcReq.Data.(*api.DeleteDefinedSetRequest) set := arg.Set typ := table.DefinedType(set.Type) name := set.Name var err error m, ok := server.policy.DefinedSetMap[typ] if !ok { - return fmt.Errorf("invalid defined-set type: %d", typ) + return nil, fmt.Errorf("invalid defined-set type: %d", typ) } d, ok := m[name] - if arg.Operation != api.Operation_ADD && !ok { - return fmt.Errorf("not found defined-set: %s", name) + if !ok { + return nil, fmt.Errorf("not found defined-set: %s", name) } s, err := table.NewDefinedSetFromApiStruct(set) if err != nil { - return err + return nil, err } - switch arg.Operation { - case api.Operation_ADD: - if ok { - err = d.Append(s) - } else { - m[name] = s - } - case api.Operation_DEL: - err = d.Remove(s) - case api.Operation_DEL_ALL: + if arg.All { if server.policy.InUse(d) { - return fmt.Errorf("can't delete. defined-set %s is in use", name) + return nil, fmt.Errorf("can't delete. defined-set %s is in use", name) } delete(m, name) - case api.Operation_REPLACE: - err = d.Replace(s) + } else { + err = d.Remove(s) } - return err + return &api.DeleteDefinedSetResponse{}, err } -func (server *BgpServer) handleGrpcGetStatement(grpcReq *GrpcRequest) error { - arg := grpcReq.Data.(*api.Statement) - name := arg.Name - found := false - for _, s := range server.policy.StatementMap { - if name != "" && name != s.Name { - continue - } - grpcReq.ResponseCh <- &GrpcResponse{ - Data: s.ToApiStruct(), - } - found = true - if name != "" { - break - } +func (server *BgpServer) handleGrpcReplaceDefinedSet(grpcReq *GrpcRequest) (*api.ReplaceDefinedSetResponse, error) { + arg := grpcReq.Data.(*api.ReplaceDefinedSetRequest) + set := arg.Set + typ := table.DefinedType(set.Type) + name := set.Name + var err error + m, ok := server.policy.DefinedSetMap[typ] + if !ok { + return nil, fmt.Errorf("invalid defined-set type: %d", typ) } - if !found { - return fmt.Errorf("not found %s", name) + d, ok := m[name] + if !ok { + return nil, fmt.Errorf("not found defined-set: %s", name) } - return nil + s, err := table.NewDefinedSetFromApiStruct(set) + if err != nil { + return nil, err + } + return &api.ReplaceDefinedSetResponse{}, d.Replace(s) +} + +func (server *BgpServer) handleGrpcGetStatement(grpcReq *GrpcRequest) (*api.GetStatementResponse, error) { + l := make([]*api.Statement, 0) + for _, s := range server.policy.StatementMap { + l = append(l, s.ToApiStruct()) + } + return &api.GetStatementResponse{Statements: l}, nil } -func (server *BgpServer) handleGrpcModStatement(grpcReq *GrpcRequest) error { - arg := grpcReq.Data.(*api.ModStatementArguments) +func (server *BgpServer) handleGrpcAddStatement(grpcReq *GrpcRequest) (*api.AddStatementResponse, error) { + var err error + arg := grpcReq.Data.(*api.AddStatementRequest) s, err := table.NewStatementFromApiStruct(arg.Statement, server.policy.DefinedSetMap) if err != nil { - return err + return nil, err } m := server.policy.StatementMap name := s.Name - d, ok := m[name] - if arg.Operation != api.Operation_ADD && !ok { - return fmt.Errorf("not found statement: %s", name) + if d, ok := m[name]; ok { + err = d.Add(s) + } else { + m[name] = s + } + return &api.AddStatementResponse{}, err +} + +func (server *BgpServer) handleGrpcDeleteStatement(grpcReq *GrpcRequest) (*api.DeleteStatementResponse, error) { + var err error + arg := grpcReq.Data.(*api.DeleteStatementRequest) + s, err := table.NewStatementFromApiStruct(arg.Statement, server.policy.DefinedSetMap) + if err != nil { + return nil, err } - switch arg.Operation { - case api.Operation_ADD: - if ok { - err = d.Add(s) + m := server.policy.StatementMap + name := s.Name + if d, ok := m[name]; ok { + if arg.All { + if server.policy.StatementInUse(d) { + err = fmt.Errorf("can't delete. statement %s is in use", name) + } else { + delete(m, name) + } } else { - m[name] = s - } - case api.Operation_DEL: - err = d.Remove(s) - case api.Operation_DEL_ALL: - if server.policy.StatementInUse(d) { - return fmt.Errorf("can't delete. statement %s is in use", name) + err = d.Remove(s) } - delete(m, name) - case api.Operation_REPLACE: - err = d.Replace(s) + } else { + err = fmt.Errorf("not found statement: %s", name) } - return err + return &api.DeleteStatementResponse{}, err +} +func (server *BgpServer) handleGrpcReplaceStatement(grpcReq *GrpcRequest) (*api.ReplaceStatementResponse, error) { + var err error + arg := grpcReq.Data.(*api.ReplaceStatementRequest) + s, err := table.NewStatementFromApiStruct(arg.Statement, server.policy.DefinedSetMap) + if err != nil { + return nil, err + } + m := server.policy.StatementMap + name := s.Name + if d, ok := m[name]; ok { + err = d.Replace(s) + } else { + err = fmt.Errorf("not found statement: %s", name) + } + return &api.ReplaceStatementResponse{}, err } -func (server *BgpServer) handleGrpcGetPolicy(grpcReq *GrpcRequest) error { - arg := grpcReq.Data.(*api.Policy) - name := arg.Name - found := false +func (server *BgpServer) handleGrpcGetPolicy(grpcReq *GrpcRequest) (*api.GetPolicyResponse, error) { + policies := make([]*api.Policy, 0, len(server.policy.PolicyMap)) for _, s := range server.policy.PolicyMap { - if name != "" && name != s.Name() { - continue - } - grpcReq.ResponseCh <- &GrpcResponse{ - Data: s.ToApiStruct(), - } - found = true - if name != "" { - break - } + policies = append(policies, s.ToApiStruct()) } - if !found { - return fmt.Errorf("not found %s", name) - } - return nil + return &api.GetPolicyResponse{Policies: policies}, nil } func (server *BgpServer) policyInUse(x *table.Policy) bool { @@ -2698,56 +2788,66 @@ func (server *BgpServer) policyInUse(x *table.Policy) bool { return false } -func (server *BgpServer) handleGrpcModPolicy(grpcReq *GrpcRequest) error { +func (server *BgpServer) handleGrpcAddPolicy(grpcReq *GrpcRequest) (*api.AddPolicyResponse, error) { policyMutex.Lock() defer policyMutex.Unlock() - arg := grpcReq.Data.(*api.ModPolicyArguments) + rsp := &api.AddPolicyResponse{} + arg := grpcReq.Data.(*api.AddPolicyRequest) x, err := table.NewPolicyFromApiStruct(arg.Policy, server.policy.DefinedSetMap) if err != nil { - return err + return rsp, err } pMap := server.policy.PolicyMap sMap := server.policy.StatementMap name := x.Name() y, ok := pMap[name] - if arg.Operation != api.Operation_ADD && !ok { - return fmt.Errorf("not found policy: %s", name) - } - switch arg.Operation { - case api.Operation_ADD, api.Operation_REPLACE: - if arg.ReferExistingStatements { - err = x.FillUp(sMap) - if err != nil { - return err - } - } else { - for _, s := range x.Statements { - if _, ok := sMap[s.Name]; ok { - return fmt.Errorf("statement %s already defined", s.Name) - } - sMap[s.Name] = s + if arg.ReferExistingStatements { + err = x.FillUp(sMap) + } else { + for _, s := range x.Statements { + if _, ok := sMap[s.Name]; ok { + return rsp, fmt.Errorf("statement %s already defined", s.Name) } + sMap[s.Name] = s } - if arg.Operation == api.Operation_REPLACE { - err = y.Replace(x) - } else if ok { - err = y.Add(x) - } else { - pMap[name] = x - } - case api.Operation_DEL: - err = y.Remove(x) - case api.Operation_DEL_ALL: + } + if ok { + err = y.Add(x) + } else { + pMap[name] = x + } + return &api.AddPolicyResponse{}, err +} + +func (server *BgpServer) handleGrpcDeletePolicy(grpcReq *GrpcRequest) (*api.DeletePolicyResponse, error) { + policyMutex.Lock() + defer policyMutex.Unlock() + rsp := &api.DeletePolicyResponse{} + arg := grpcReq.Data.(*api.DeletePolicyRequest) + x, err := table.NewPolicyFromApiStruct(arg.Policy, server.policy.DefinedSetMap) + if err != nil { + return rsp, err + } + pMap := server.policy.PolicyMap + sMap := server.policy.StatementMap + name := x.Name() + y, ok := pMap[name] + if !ok { + return rsp, fmt.Errorf("not found policy: %s", name) + } + if arg.All { if server.policyInUse(y) { - return fmt.Errorf("can't delete. policy %s is in use", name) + return rsp, fmt.Errorf("can't delete. policy %s is in use", name) } log.WithFields(log.Fields{ "Topic": "Policy", "Key": name, }).Debug("delete policy") delete(pMap, name) + } else { + err = y.Remove(x) } - if err == nil && arg.Operation != api.Operation_ADD && !arg.PreserveStatements { + if err == nil && !arg.PreserveStatements { for _, s := range y.Statements { if !server.policy.StatementInUse(s) { log.WithFields(log.Fields{ @@ -2758,7 +2858,51 @@ func (server *BgpServer) handleGrpcModPolicy(grpcReq *GrpcRequest) error { } } } - return err + return rsp, err +} + +func (server *BgpServer) handleGrpcReplacePolicy(grpcReq *GrpcRequest) (*api.ReplacePolicyResponse, error) { + policyMutex.Lock() + defer policyMutex.Unlock() + rsp := &api.ReplacePolicyResponse{} + arg := grpcReq.Data.(*api.ReplacePolicyRequest) + x, err := table.NewPolicyFromApiStruct(arg.Policy, server.policy.DefinedSetMap) + if err != nil { + return rsp, err + } + pMap := server.policy.PolicyMap + sMap := server.policy.StatementMap + name := x.Name() + y, ok := pMap[name] + if !ok { + return rsp, fmt.Errorf("not found policy: %s", name) + } + if arg.ReferExistingStatements { + if err = x.FillUp(sMap); err != nil { + return rsp, err + } + } else { + for _, s := range x.Statements { + if _, ok := sMap[s.Name]; ok { + return rsp, fmt.Errorf("statement %s already defined", s.Name) + } + sMap[s.Name] = s + } + } + + err = y.Replace(x) + if err == nil && !arg.PreserveStatements { + for _, s := range y.Statements { + if !server.policy.StatementInUse(s) { + log.WithFields(log.Fields{ + "Topic": "Policy", + "Key": s.Name, + }).Debug("delete unused statement") + delete(sMap, s.Name) + } + } + } + return rsp, err } func (server *BgpServer) getPolicyInfo(a *api.PolicyAssignment) (string, table.PolicyDirection, error) { @@ -2796,76 +2940,109 @@ func (server *BgpServer) getPolicyInfo(a *api.PolicyAssignment) (string, table.P } -func (server *BgpServer) handleGrpcGetPolicyAssignment(grpcReq *GrpcRequest) error { - arg := grpcReq.Data.(*api.PolicyAssignment) - id, dir, err := server.getPolicyInfo(arg) +func (server *BgpServer) handleGrpcGetPolicyAssignment(grpcReq *GrpcRequest) (*api.GetPolicyAssignmentResponse, error) { + rsp := &api.GetPolicyAssignmentResponse{} + id, dir, err := server.getPolicyInfo(grpcReq.Data.(*api.GetPolicyAssignmentRequest).Assignment) if err != nil { - return err + return rsp, err } - arg.Default = server.policy.GetDefaultPolicy(id, dir).ToApiStruct() + rsp.Assignment.Default = server.policy.GetDefaultPolicy(id, dir).ToApiStruct() ps := server.policy.GetPolicy(id, dir) - arg.Policies = make([]*api.Policy, 0, len(ps)) + rsp.Assignment.Policies = make([]*api.Policy, 0, len(ps)) for _, x := range ps { - arg.Policies = append(arg.Policies, x.ToApiStruct()) - } - grpcReq.ResponseCh <- &GrpcResponse{ - Data: arg, + rsp.Assignment.Policies = append(rsp.Assignment.Policies, x.ToApiStruct()) } - return nil + return rsp, nil } -func (server *BgpServer) handleGrpcModPolicyAssignment(grpcReq *GrpcRequest) error { +func (server *BgpServer) handleGrpcAddPolicyAssignment(grpcReq *GrpcRequest) (*api.AddPolicyAssignmentResponse, error) { var err error var dir table.PolicyDirection var id string + rsp := &api.AddPolicyAssignmentResponse{} policyMutex.Lock() defer policyMutex.Unlock() - arg := grpcReq.Data.(*api.ModPolicyAssignmentArguments) + arg := grpcReq.Data.(*api.AddPolicyAssignmentRequest) assignment := arg.Assignment id, dir, err = server.getPolicyInfo(assignment) if err != nil { - return err + return rsp, err } ps := make([]*table.Policy, 0, len(assignment.Policies)) seen := make(map[string]bool) for _, x := range assignment.Policies { p, ok := server.policy.PolicyMap[x.Name] if !ok { - return fmt.Errorf("not found policy %s", x.Name) + return rsp, fmt.Errorf("not found policy %s", x.Name) } if seen[x.Name] { - return fmt.Errorf("duplicated policy %s", x.Name) + return rsp, fmt.Errorf("duplicated policy %s", x.Name) } seen[x.Name] = true ps = append(ps, p) } cur := server.policy.GetPolicy(id, dir) - - switch arg.Operation { - case api.Operation_ADD, api.Operation_REPLACE: - if arg.Operation == api.Operation_REPLACE || cur == nil { - err = server.policy.SetPolicy(id, dir, ps) - } else { - seen = make(map[string]bool) - ps = append(cur, ps...) - for _, x := range ps { - if seen[x.Name()] { - return fmt.Errorf("duplicated policy %s", x.Name()) - } - seen[x.Name()] = true + if cur == nil { + err = server.policy.SetPolicy(id, dir, ps) + } else { + seen = make(map[string]bool) + ps = append(cur, ps...) + for _, x := range ps { + if seen[x.Name()] { + return rsp, fmt.Errorf("duplicated policy %s", x.Name()) } - err = server.policy.SetPolicy(id, dir, ps) + seen[x.Name()] = true } - if err != nil { - return err + err = server.policy.SetPolicy(id, dir, ps) + } + if err != nil { + return rsp, err + } + + switch assignment.Default { + case api.RouteAction_ACCEPT: + err = server.policy.SetDefaultPolicy(id, dir, table.ROUTE_TYPE_ACCEPT) + case api.RouteAction_REJECT: + err = server.policy.SetDefaultPolicy(id, dir, table.ROUTE_TYPE_REJECT) + } + return rsp, err +} + +func (server *BgpServer) handleGrpcDeletePolicyAssignment(grpcReq *GrpcRequest) (*api.DeletePolicyAssignmentResponse, error) { + var err error + var dir table.PolicyDirection + var id string + policyMutex.Lock() + defer policyMutex.Unlock() + rsp := &api.DeletePolicyAssignmentResponse{} + arg := grpcReq.Data.(*api.DeletePolicyAssignmentRequest) + assignment := arg.Assignment + id, dir, err = server.getPolicyInfo(assignment) + if err != nil { + return rsp, err + } + ps := make([]*table.Policy, 0, len(assignment.Policies)) + seen := make(map[string]bool) + for _, x := range assignment.Policies { + p, ok := server.policy.PolicyMap[x.Name] + if !ok { + return rsp, fmt.Errorf("not found policy %s", x.Name) } - switch assignment.Default { - case api.RouteAction_ACCEPT: - err = server.policy.SetDefaultPolicy(id, dir, table.ROUTE_TYPE_ACCEPT) - case api.RouteAction_REJECT: - err = server.policy.SetDefaultPolicy(id, dir, table.ROUTE_TYPE_REJECT) + if seen[x.Name] { + return rsp, fmt.Errorf("duplicated policy %s", x.Name) } - case api.Operation_DEL: + seen[x.Name] = true + ps = append(ps, p) + } + cur := server.policy.GetPolicy(id, dir) + + if arg.All { + err = server.policy.SetPolicy(id, dir, nil) + if err != nil { + return rsp, err + } + err = server.policy.SetDefaultPolicy(id, dir, table.ROUTE_TYPE_NONE) + } else { n := make([]*table.Policy, 0, len(cur)-len(ps)) for _, y := range cur { found := false @@ -2880,14 +3057,48 @@ func (server *BgpServer) handleGrpcModPolicyAssignment(grpcReq *GrpcRequest) err } } err = server.policy.SetPolicy(id, dir, n) - case api.Operation_DEL_ALL: - err = server.policy.SetPolicy(id, dir, nil) - if err != nil { - return err + } + return rsp, err +} + +func (server *BgpServer) handleGrpcReplacePolicyAssignment(grpcReq *GrpcRequest) (*api.ReplacePolicyAssignmentResponse, error) { + var err error + var dir table.PolicyDirection + var id string + policyMutex.Lock() + defer policyMutex.Unlock() + rsp := &api.ReplacePolicyAssignmentResponse{} + arg := grpcReq.Data.(*api.ReplacePolicyAssignmentRequest) + assignment := arg.Assignment + id, dir, err = server.getPolicyInfo(assignment) + if err != nil { + return rsp, err + } + ps := make([]*table.Policy, 0, len(assignment.Policies)) + seen := make(map[string]bool) + for _, x := range assignment.Policies { + p, ok := server.policy.PolicyMap[x.Name] + if !ok { + return rsp, fmt.Errorf("not found policy %s", x.Name) } - err = server.policy.SetDefaultPolicy(id, dir, table.ROUTE_TYPE_NONE) + if seen[x.Name] { + return rsp, fmt.Errorf("duplicated policy %s", x.Name) + } + seen[x.Name] = true + ps = append(ps, p) + } + server.policy.GetPolicy(id, dir) + err = server.policy.SetPolicy(id, dir, ps) + if err != nil { + return rsp, err + } + switch assignment.Default { + case api.RouteAction_ACCEPT: + err = server.policy.SetDefaultPolicy(id, dir, table.ROUTE_TYPE_ACCEPT) + case api.RouteAction_REJECT: + err = server.policy.SetDefaultPolicy(id, dir, table.ROUTE_TYPE_REJECT) } - return err + return rsp, err } func grpcDone(grpcReq *GrpcRequest, e error) { @@ -2898,112 +3109,140 @@ func grpcDone(grpcReq *GrpcRequest, e error) { close(grpcReq.ResponseCh) } -func (server *BgpServer) handleModMrt(grpcReq *GrpcRequest) { - arg := grpcReq.Data.(*api.ModMrtArguments) +func (server *BgpServer) handleEnableMrtRequest(grpcReq *GrpcRequest) { + arg := grpcReq.Data.(*api.EnableMrtRequest) + if _, y := server.watchers[WATCHER_MRT]; y { + grpcDone(grpcReq, fmt.Errorf("already enabled")) + return + } + if arg.Interval != 0 && arg.Interval < 30 { + log.Info("minimum mrt dump interval is 30 seconds") + arg.Interval = 30 + } + w, err := newMrtWatcher(arg.DumpType, arg.Filename, arg.Interval) + if err == nil { + server.watchers[WATCHER_MRT] = w + } + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: &api.EnableMrtResponse{}, + } + close(grpcReq.ResponseCh) +} + +func (server *BgpServer) handleDisableMrtRequest(grpcReq *GrpcRequest) { w, y := server.watchers[WATCHER_MRT] - if arg.Operation == api.Operation_ADD { - if y { - grpcDone(grpcReq, fmt.Errorf("already enabled")) - return - } - } else { - if !y { - grpcDone(grpcReq, fmt.Errorf("not enabled yet")) - return - } + if !y { + grpcDone(grpcReq, fmt.Errorf("not enabled yet")) + return } - switch arg.Operation { - case api.Operation_ADD: - if arg.Interval != 0 && arg.Interval < 30 { - log.Info("minimum mrt dump interval is 30 seconds") - arg.Interval = 30 - } - w, err := newMrtWatcher(arg.DumpType, arg.Filename, arg.Interval) - if err == nil { - server.watchers[WATCHER_MRT] = w - } - grpcDone(grpcReq, err) - case api.Operation_DEL: - delete(server.watchers, WATCHER_MRT) - w.stop() - grpcDone(grpcReq, nil) + + delete(server.watchers, WATCHER_MRT) + w.stop() + grpcReq.ResponseCh <- &GrpcResponse{ + Data: &api.DisableMrtResponse{}, } + close(grpcReq.ResponseCh) } -func (server *BgpServer) handleModBmp(grpcReq *GrpcRequest) { - var op api.Operation +func (server *BgpServer) handleAddBmp(grpcReq *GrpcRequest) { var c *config.BmpServerConfig switch arg := grpcReq.Data.(type) { - case *api.ModBmpArguments: + case *api.AddBmpRequest: c = &config.BmpServerConfig{ Address: arg.Address, Port: arg.Port, RouteMonitoringPolicy: config.BmpRouteMonitoringPolicyType(arg.Type), } - op = arg.Operation case *config.BmpServerConfig: c = arg - op = api.Operation_ADD } w, y := server.watchers[WATCHER_BMP] if !y { - if op == api.Operation_ADD { - w, _ = newBmpWatcher(server.GrpcReqCh) - server.watchers[WATCHER_BMP] = w - } else if op == api.Operation_DEL { - grpcDone(grpcReq, fmt.Errorf("not enabled yet")) - return + w, _ = newBmpWatcher(server.GrpcReqCh) + server.watchers[WATCHER_BMP] = w + } + + err := w.(*bmpWatcher).addServer(*c) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: &api.AddBmpResponse{}, + } + close(grpcReq.ResponseCh) +} + +func (server *BgpServer) handleDeleteBmp(grpcReq *GrpcRequest) { + var c *config.BmpServerConfig + switch arg := grpcReq.Data.(type) { + case *api.DeleteBmpRequest: + c = &config.BmpServerConfig{ + Address: arg.Address, + Port: arg.Port, } + case *config.BmpServerConfig: + c = arg } - switch op { - case api.Operation_ADD: - err := w.(*bmpWatcher).addServer(*c) - grpcDone(grpcReq, err) - case api.Operation_DEL: + if w, y := server.watchers[WATCHER_BMP]; y { err := w.(*bmpWatcher).deleteServer(*c) - grpcDone(grpcReq, err) - default: - grpcDone(grpcReq, fmt.Errorf("unsupported operation: %s", op)) + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + Data: &api.DeleteBmpResponse{}, + } + close(grpcReq.ResponseCh) + } else { + grpcDone(grpcReq, fmt.Errorf("bmp not configured")) } } -func (server *BgpServer) handleModRpki(grpcReq *GrpcRequest) { - arg := grpcReq.Data.(*api.ModRpkiArguments) - - switch arg.Operation { - case api.Operation_INITIALIZE: - grpcDone(grpcReq, server.roaManager.SetAS(arg.Asn)) - return - case api.Operation_ADD: - grpcDone(grpcReq, server.roaManager.AddServer(net.JoinHostPort(arg.Address, strconv.Itoa(int(arg.Port))), arg.Lifetime)) - return - case api.Operation_DEL: - grpcDone(grpcReq, server.roaManager.DeleteServer(arg.Address)) - return - case api.Operation_ENABLE, api.Operation_DISABLE, api.Operation_RESET, api.Operation_SOFTRESET: - grpcDone(grpcReq, server.roaManager.operate(arg.Operation, arg.Address)) - return - case api.Operation_REPLACE: - for _, rf := range server.globalRib.GetRFlist() { - if t, ok := server.globalRib.Tables[rf]; ok { - dsts := t.GetDestinations() - if arg.Prefix != "" { - _, prefix, _ := net.ParseCIDR(arg.Prefix) - if dst := t.GetDestination(prefix.String()); dst != nil { - dsts = map[string]*table.Destination{prefix.String(): dst} - } - } - for _, dst := range dsts { - server.roaManager.validate(dst.GetAllKnownPathList()) +func (server *BgpServer) handleValidateRib(grpcReq *GrpcRequest) { + arg := grpcReq.Data.(*api.ValidateRibRequest) + for _, rf := range server.globalRib.GetRFlist() { + if t, ok := server.globalRib.Tables[rf]; ok { + dsts := t.GetDestinations() + if arg.Prefix != "" { + _, prefix, _ := net.ParseCIDR(arg.Prefix) + if dst := t.GetDestination(prefix.String()); dst != nil { + dsts = map[string]*table.Destination{prefix.String(): dst} } } + for _, dst := range dsts { + server.roaManager.validate(dst.GetAllKnownPathList()) + } } - grpcDone(grpcReq, nil) - return } - grpcDone(grpcReq, fmt.Errorf("not supported yet")) + result := &GrpcResponse{ + Data: &api.ValidateRibResponse{}, + } + grpcReq.ResponseCh <- result + close(grpcReq.ResponseCh) +} + +func (server *BgpServer) handleModRpki(grpcReq *GrpcRequest) { + done := func(grpcReq *GrpcRequest, data interface{}, e error) { + result := &GrpcResponse{ + ResponseErr: e, + Data: data, + } + grpcReq.ResponseCh <- result + close(grpcReq.ResponseCh) + } + + switch arg := grpcReq.Data.(type) { + case *api.AddRpkiRequest: + done(grpcReq, &api.AddRpkiResponse{}, server.roaManager.AddServer(net.JoinHostPort(arg.Address, strconv.Itoa(int(arg.Port))), arg.Lifetime)) + case *api.DeleteRpkiRequest: + done(grpcReq, &api.DeleteRpkiResponse{}, server.roaManager.DeleteServer(arg.Address)) + case *api.EnableRpkiRequest: + done(grpcReq, &api.EnableRpkiResponse{}, server.roaManager.Enable(arg.Address)) + case *api.DisableRpkiRequest: + done(grpcReq, &api.DisableRpkiResponse{}, server.roaManager.Disable(arg.Address)) + case *api.ResetRpkiRequest: + done(grpcReq, &api.ResetRpkiResponse{}, server.roaManager.Reset(arg.Address)) + case *api.SoftResetRpkiRequest: + done(grpcReq, &api.SoftResetRpkiResponse{}, server.roaManager.SoftReset(arg.Address)) + } } func (server *BgpServer) handleMrt(grpcReq *GrpcRequest) { diff --git a/server/server_test.go b/server/server_test.go index 7644b900..48d7e52d 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -33,36 +33,32 @@ func TestModPolicyAssign(t *testing.T) { RouterId: "1.1.1.1", }, }) - err := s.handleGrpcModPolicy(&GrpcRequest{ - Data: &api.ModPolicyArguments{ - Operation: api.Operation_ADD, + _, err := s.handleGrpcAddPolicy(&GrpcRequest{ + Data: &api.AddPolicyRequest{ Policy: &api.Policy{ Name: "p1", }, }, }) assert.Nil(err) - err = s.handleGrpcModPolicy(&GrpcRequest{ - Data: &api.ModPolicyArguments{ - Operation: api.Operation_ADD, + _, err = s.handleGrpcAddPolicy(&GrpcRequest{ + Data: &api.AddPolicyRequest{ Policy: &api.Policy{ Name: "p2", }, }, }) assert.Nil(err) - err = s.handleGrpcModPolicy(&GrpcRequest{ - Data: &api.ModPolicyArguments{ - Operation: api.Operation_ADD, + _, err = s.handleGrpcAddPolicy(&GrpcRequest{ + Data: &api.AddPolicyRequest{ Policy: &api.Policy{ Name: "p3", }, }, }) assert.Nil(err) - err = s.handleGrpcModPolicyAssignment(&GrpcRequest{ - Data: &api.ModPolicyAssignmentArguments{ - Operation: api.Operation_ADD, + _, err = s.handleGrpcAddPolicyAssignment(&GrpcRequest{ + Data: &api.AddPolicyAssignmentRequest{ Assignment: &api.PolicyAssignment{ Type: api.PolicyType_IMPORT, Resource: api.Resource_GLOBAL, @@ -72,9 +68,8 @@ func TestModPolicyAssign(t *testing.T) { }) assert.Nil(err) - err = s.handleGrpcModPolicyAssignment(&GrpcRequest{ - Data: &api.ModPolicyAssignmentArguments{ - Operation: api.Operation_DEL, + _, err = s.handleGrpcDeletePolicyAssignment(&GrpcRequest{ + Data: &api.DeletePolicyAssignmentRequest{ Assignment: &api.PolicyAssignment{ Type: api.PolicyType_IMPORT, Resource: api.Resource_GLOBAL, |