Skip to content

Commit

Permalink
fix filter mechanisms
Browse files Browse the repository at this point in the history
Signed-off-by: Denis Tingajkin <[email protected]>
  • Loading branch information
denis-tingaikin committed Sep 23, 2020
1 parent 638c8c2 commit d2a79de
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 277 deletions.
4 changes: 4 additions & 0 deletions pkg/networkservice/chains/nsmgr/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ package nsmgr
import (
"context"

"github.com/networkservicemesh/sdk/pkg/networkservice/common/filtermechanisms"
"github.com/networkservicemesh/sdk/pkg/networkservice/common/interpose"

"github.com/networkservicemesh/api/pkg/api/networkservice"
Expand Down Expand Up @@ -72,6 +73,7 @@ type nsmgrServer struct {
func NewServer(ctx context.Context, nsmRegistration *registryapi.NetworkServiceEndpoint, authzServer networkservice.NetworkServiceServer, tokenGenerator token.GeneratorFunc, registryCC grpc.ClientConnInterface, clientDialOptions ...grpc.DialOption) Nsmgr {
rv := &nsmgrServer{}

var urlsRegistryServer registryapi.NetworkServiceEndpointRegistryServer
var localbypassRegistryServer registryapi.NetworkServiceEndpointRegistryServer

nsRegistry := newRemoteNSServer(registryCC)
Expand Down Expand Up @@ -100,6 +102,7 @@ func NewServer(ctx context.Context, nsmRegistration *registryapi.NetworkServiceE
localbypass.NewServer(&localbypassRegistryServer),
excludedprefixes.NewServer(ctx),
interpose.NewServer(nsmRegistration.Name, &interposeRegistry),
filtermechanisms.NewServer(&urlsRegistryServer),
connect.NewServer(
ctx,
client.NewClientFactory(nsmRegistration.Name,
Expand All @@ -111,6 +114,7 @@ func NewServer(ctx context.Context, nsmRegistration *registryapi.NetworkServiceE

nsChain := chain_registry.NewNetworkServiceRegistryServer(nsRegistry)
nseChain := chain_registry.NewNetworkServiceEndpointRegistryServer(
urlsRegistryServer,
interposeRegistry, // Store cross connect NSEs
localbypassRegistryServer, // Store endpoint Id to EndpointURL for local access.
seturl.NewNetworkServiceEndpointRegistryServer(nsmRegistration.Url), // Remember endpoint URL
Expand Down
69 changes: 0 additions & 69 deletions pkg/networkservice/common/filtermechanisms/client.go

This file was deleted.

119 changes: 0 additions & 119 deletions pkg/networkservice/common/filtermechanisms/client_test.go

This file was deleted.

48 changes: 24 additions & 24 deletions pkg/networkservice/common/filtermechanisms/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,46 +20,46 @@ import (
"context"

"github.com/golang/protobuf/ptypes/empty"
"google.golang.org/grpc/peer"

"github.com/networkservicemesh/api/pkg/api/networkservice"
"github.com/networkservicemesh/api/pkg/api/networkservice/mechanisms/cls"
"github.com/networkservicemesh/api/pkg/api/registry"

"github.com/networkservicemesh/sdk/pkg/networkservice/core/next"
"github.com/networkservicemesh/sdk/pkg/registry/common/endpointurls"
"github.com/networkservicemesh/sdk/pkg/tools/clienturl"
)

type filterMechanismsServer struct{}
type filterMechanismsServer struct {
urls endpointurls.Set
}

// NewServer - filters out remote mechanisms if connection is received from a unix file socket, otherwise filters
// out local mechanisms
func NewServer() networkservice.NetworkServiceServer {
return &filterMechanismsServer{}
func NewServer(registryServer *registry.NetworkServiceEndpointRegistryServer) networkservice.NetworkServiceServer {
result := &filterMechanismsServer{}
*registryServer = endpointurls.NewNetworkServiceEndpointRegistryServer(&result.urls)
return result
}

func (f *filterMechanismsServer) Request(ctx context.Context, request *networkservice.NetworkServiceRequest) (*networkservice.Connection, error) {
p, ok := peer.FromContext(ctx)
if ok {
if p.Addr.Network() == "unix" {
var mechanisms []*networkservice.Mechanism
for _, mechanism := range request.GetMechanismPreferences() {
if mechanism.Cls == cls.LOCAL {
mechanisms = append(mechanisms, mechanism)
}
}
request.MechanismPreferences = mechanisms
return next.Server(ctx).Request(ctx, request)
}
var mechanisms []*networkservice.Mechanism
for _, mechanism := range request.GetMechanismPreferences() {
if mechanism.Cls == cls.REMOTE {
mechanisms = append(mechanisms, mechanism)
}
}
request.MechanismPreferences = mechanisms
u := clienturl.ClientURL(ctx)
if _, ok := f.urls.Load(*u); ok {
request.MechanismPreferences = filterMechanismsByCls(request.GetMechanismPreferences(), cls.LOCAL)
} else {
request.MechanismPreferences = filterMechanismsByCls(request.GetMechanismPreferences(), cls.REMOTE)
}
return next.Server(ctx).Request(ctx, request)
}

func (f *filterMechanismsServer) Close(ctx context.Context, conn *networkservice.Connection) (*empty.Empty, error) {
return next.Server(ctx).Close(ctx, conn)
}
func filterMechanismsByCls(mechanisms []*networkservice.Mechanism, mechanismCls string) []*networkservice.Mechanism {
var result []*networkservice.Mechanism
for _, mechanism := range mechanisms {
if mechanism.Cls == mechanismCls {
mechanisms = append(mechanisms, mechanism)
}
}
return result
}
Loading

0 comments on commit d2a79de

Please sign in to comment.