Skip to content

Commit

Permalink
apply review comments
Browse files Browse the repository at this point in the history
Signed-off-by: NikitaSkrynnik <[email protected]>
  • Loading branch information
NikitaSkrynnik committed Mar 11, 2024
1 parent 316c9d9 commit ddc3978
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 23 deletions.
42 changes: 26 additions & 16 deletions pkg/ipam/strictvl3ipam/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,43 +36,53 @@ type strictVl3IPAMServer struct {
}

// NewServer - returns a new ipam networkservice.NetworkServiceServer that validates the incoming IP context parameters and resets them based on the validation result.
func NewServer(ctx context.Context, prefixCh <-chan *ipam.PrefixResponse) networkservice.NetworkServiceServer {
var ipPool = ippool.New(net.IPv4len)
func NewServer(ctx context.Context, newVl3IPAMServer func(ctx context.Context, prefixCh <-chan *ipam.PrefixResponse) networkservice.NetworkServiceServer, prefixCh <-chan *ipam.PrefixResponse) networkservice.NetworkServiceServer {
var ipPool = ippool.New(net.IPv6len)

s := &strictVl3IPAMServer{ipPool: ipPool}
vl3IPAMPrefixCh := make(chan *ipam.PrefixResponse, 1)
server := &strictVl3IPAMServer{ipPool: ipPool}
go func() {
defer close(vl3IPAMPrefixCh)
for prefix := range prefixCh {
s.m.Lock()
s.ipPool = ippool.NewWithNetString(prefix.Prefix)
s.m.Unlock()
vl3IPAMPrefixCh <- prefix
server.m.Lock()
server.ipPool.Clear()
server.ipPool.AddNetString(prefix.Prefix)
server.m.Unlock()
}
}()

return s
return next.NewNetworkServiceServer(
server,
newVl3IPAMServer(ctx, vl3IPAMPrefixCh))
}

func (n *strictVl3IPAMServer) areAddressesValid(addresses []string) bool {
n.m.Lock()
defer n.m.Unlock()
func (s *strictVl3IPAMServer) areAddressesValid(addresses []string) bool {
s.m.Lock()
defer s.m.Unlock()

if len(addresses) == 0 {
return true
}

for _, addr := range addresses {
if !n.ipPool.ContainsNetString(addr) {
return false
if s.ipPool.ContainsNetString(addr) {
return true
}
}
return true
return false
}

func (n *strictVl3IPAMServer) Request(ctx context.Context, request *networkservice.NetworkServiceRequest) (*networkservice.Connection, error) {
func (s *strictVl3IPAMServer) Request(ctx context.Context, request *networkservice.NetworkServiceRequest) (*networkservice.Connection, error) {
srcAddrs := request.GetConnection().GetContext().GetIpContext().GetSrcIpAddrs()
dstAddrs := request.GetConnection().GetContext().GetIpContext().GetDstIpAddrs()

if !n.areAddressesValid(srcAddrs) && !n.areAddressesValid(dstAddrs) {
if !s.areAddressesValid(srcAddrs) || !s.areAddressesValid(dstAddrs) {
request.Connection.Context.IpContext = &networkservice.IPContext{}
}
return next.Server(ctx).Request(ctx, request)
}

func (n *strictVl3IPAMServer) Close(ctx context.Context, conn *networkservice.Connection) (*empty.Empty, error) {
func (s *strictVl3IPAMServer) Close(ctx context.Context, conn *networkservice.Connection) (*empty.Empty, error) {
return next.Server(ctx).Close(ctx, conn)
}
9 changes: 2 additions & 7 deletions pkg/networkservice/chains/nsmgr/vl3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -515,7 +515,7 @@ func Test_FloatingInterdomain_vl3_dns(t *testing.T) {
func Test_NSC_ConnectsTo_vl3NSE_With_Invalid_IpContext(t *testing.T) {
t.Cleanup(func() { goleak.VerifyNone(t) })

ctx, cancel := context.WithTimeout(context.Background(), time.Second*150)
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
defer cancel()

domain := sandbox.NewBuilder(ctx, t).
Expand All @@ -532,22 +532,18 @@ func Test_NSC_ConnectsTo_vl3NSE_With_Invalid_IpContext(t *testing.T) {
nseReg := defaultRegistryEndpoint(nsReg.Name)

var serverPrefixCh = make(chan *ipam.PrefixResponse, 1)
var strictIpamPrefixCh = make(chan *ipam.PrefixResponse, 1)
defer close(serverPrefixCh)
defer close(strictIpamPrefixCh)

prefix1 := "10.0.0.0/24"
prefix2 := "10.10.0.0/24"

serverPrefixCh <- &ipam.PrefixResponse{Prefix: prefix1}
strictIpamPrefixCh <- &ipam.PrefixResponse{Prefix: prefix1}

_ = domain.Nodes[0].NewEndpoint(
ctx,
nseReg,
sandbox.GenerateTestToken,
strictvl3ipam.NewServer(ctx, strictIpamPrefixCh),
vl3.NewServer(ctx, serverPrefixCh),
strictvl3ipam.NewServer(ctx, vl3.NewServer, serverPrefixCh),
)

nsc := domain.Nodes[0].NewClient(ctx, sandbox.GenerateTestToken)
Expand All @@ -559,7 +555,6 @@ func Test_NSC_ConnectsTo_vl3NSE_With_Invalid_IpContext(t *testing.T) {
require.True(t, checkIPContext(conn.Context.IpContext, prefix1))

serverPrefixCh <- &ipam.PrefixResponse{Prefix: prefix2}
strictIpamPrefixCh <- &ipam.PrefixResponse{Prefix: prefix2}

req.Connection = conn
conn, err = nsc.Request(ctx, req)
Expand Down
File renamed without changes.

0 comments on commit ddc3978

Please sign in to comment.