summaryrefslogtreecommitdiffhomepage
path: root/pkg/server
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server')
-rw-r--r--pkg/server/grpc_server.go16
-rw-r--r--pkg/server/server.go31
2 files changed, 47 insertions, 0 deletions
diff --git a/pkg/server/grpc_server.go b/pkg/server/grpc_server.go
index 1ae58055..b0cae8d3 100644
--- a/pkg/server/grpc_server.go
+++ b/pkg/server/grpc_server.go
@@ -102,6 +102,18 @@ func (s *server) serve() error {
return nil
}
+func (s *server) ListDynamicNeighbor(r *api.ListDynamicNeighborRequest, stream api.GobgpApi_ListDynamicNeighborServer) error {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ fn := func(dn *api.DynamicNeighbor) {
+ if err := stream.Send(&api.ListDynamicNeighborResponse{DynamicNeighbor: dn}); err != nil {
+ cancel()
+ return
+ }
+ }
+ return s.bgpServer.ListDynamicNeighbor(ctx, r, fn)
+}
+
func (s *server) ListPeerGroup(r *api.ListPeerGroupRequest, stream api.GobgpApi_ListPeerGroupServer) error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
@@ -861,6 +873,10 @@ func (s *server) AddDynamicNeighbor(ctx context.Context, r *api.AddDynamicNeighb
return &empty.Empty{}, s.bgpServer.AddDynamicNeighbor(ctx, r)
}
+func (s *server) DeleteDynamicNeighbor(ctx context.Context, r *api.DeleteDynamicNeighborRequest) (*empty.Empty, error) {
+ return &empty.Empty{}, s.bgpServer.DeleteDynamicNeighbor(ctx, r)
+}
+
func newPrefixFromApiStruct(a *api.Prefix) (*table.Prefix, error) {
_, prefix, err := net.ParseCIDR(a.IpPrefix)
if err != nil {
diff --git a/pkg/server/server.go b/pkg/server/server.go
index 090d97b8..84a1e2da 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -2715,6 +2715,37 @@ func (s *BgpServer) GetBgp(ctx context.Context, r *api.GetBgpRequest) (*api.GetB
return rsp, nil
}
+func (s *BgpServer) ListDynamicNeighbor(ctx context.Context, r *api.ListDynamicNeighborRequest, fn func(neighbor *api.DynamicNeighbor)) error {
+ toApi := func(dn *config.DynamicNeighbor) *api.DynamicNeighbor {
+ return &api.DynamicNeighbor{
+ Prefix: dn.Config.Prefix,
+ PeerGroup: dn.Config.PeerGroup,
+ }
+ }
+ var l []*api.DynamicNeighbor
+ s.mgmtOperation(func() error {
+ peerGroupName := r.PeerGroup
+ for k, group := range s.peerGroupMap {
+ if peerGroupName != "" && peerGroupName != k {
+ continue
+ }
+ for _, dn := range group.dynamicNeighbors {
+ l = append(l, toApi(dn))
+ }
+ }
+ return nil
+ }, false)
+ for _, dn := range l {
+ select {
+ case <-ctx.Done():
+ return nil
+ default:
+ fn(dn)
+ }
+ }
+ return nil
+}
+
func (s *BgpServer) ListPeerGroup(ctx context.Context, r *api.ListPeerGroupRequest, fn func(*api.PeerGroup)) error {
var l []*api.PeerGroup
s.mgmtOperation(func() error {