summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--api/gobgp.pb.go3786
-rw-r--r--api/gobgp.proto861
-rw-r--r--gobgp/cmd/bmp.go37
-rw-r--r--gobgp/cmd/common.go2
-rw-r--r--gobgp/cmd/global.go44
-rw-r--r--gobgp/cmd/mrt.go66
-rw-r--r--gobgp/cmd/neighbor.go164
-rw-r--r--gobgp/cmd/policy.go253
-rw-r--r--gobgp/cmd/rpki.go74
-rw-r--r--gobgp/cmd/vrf.go32
-rw-r--r--openswitch/openswitch.go33
-rw-r--r--server/grpc_server.go415
-rw-r--r--server/rpki.go87
-rw-r--r--server/server.go1341
-rw-r--r--server/server_test.go25
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,