Skip to content

Commit

Permalink
Fix vl3 ipam refresh (#1601)
Browse files Browse the repository at this point in the history
Signed-off-by: Artem Glazychev <[email protected]>
  • Loading branch information
glazychev-art authored Mar 26, 2024
1 parent d2fe843 commit 050d53f
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
17 changes: 17 additions & 0 deletions pkg/networkservice/chains/nsmgr/vl3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"github.com/google/uuid"
"github.com/stretchr/testify/require"
"go.uber.org/goleak"
"google.golang.org/protobuf/proto"

"github.com/networkservicemesh/api/pkg/api/networkservice"
"github.com/networkservicemesh/api/pkg/api/networkservice/mechanisms/cls"
Expand Down Expand Up @@ -528,9 +529,17 @@ func Test_NSC_ConnectsTo_vl3NSE_With_Invalid_IpContext(t *testing.T) {
req := defaultRequest(nsReg.Name)
conn, err := nsc.Request(ctx, req)
require.NoError(t, err)
require.True(t, checkIPContext(conn.Context.IpContext, prefix1))

// Refresh
clonedConn := conn.Clone()
req.Connection = conn
conn, err = nsc.Request(ctx, req)
require.NoError(t, err)
require.True(t, checkIPContext(conn.Context.IpContext, prefix1))
require.True(t, proto.Equal(clonedConn.GetContext().IpContext, conn.GetContext().IpContext))

// Reset ipam with a new prefix
err = serverIpam.Reset(prefix2)
require.NoError(t, err)

Expand All @@ -540,6 +549,14 @@ func Test_NSC_ConnectsTo_vl3NSE_With_Invalid_IpContext(t *testing.T) {

require.False(t, checkIPContext(conn.Context.IpContext, prefix1))
require.True(t, checkIPContext(conn.Context.IpContext, prefix2))

// Refresh
clonedConn = conn.Clone()
req.Connection = conn
conn, err = nsc.Request(ctx, req)
require.NoError(t, err)
require.True(t, checkIPContext(conn.Context.IpContext, prefix2))
require.True(t, proto.Equal(clonedConn.GetContext().IpContext, conn.GetContext().IpContext))
}

func checkIPContext(ipContext *networkservice.IPContext, prefix string) bool {
Expand Down
9 changes: 8 additions & 1 deletion pkg/networkservice/connectioncontext/ipcontext/vl3/ipam.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,5 +185,12 @@ func (p *IPAM) Reset(prefix string, excludePrefies ...string) error {
func (p *IPAM) ContainsNetString(ipNet string) bool {
p.Lock()
defer p.Unlock()
return p.ipPool.ContainsNetString(ipNet)
selfAddress := &net.IPNet{
IP: p.self.IP,
Mask: net.CIDRMask(
int(p.clientMask),
int(p.clientMask),
),
}
return p.ipPool.ContainsNetString(ipNet) || selfAddress.String() == ipNet
}

0 comments on commit 050d53f

Please sign in to comment.