Skip to content

Commit

Permalink
Make vxlan port configurable
Browse files Browse the repository at this point in the history
Signed-off-by: Zoltan Lugossy <zoltan.lugossy@est.tech>
  • Loading branch information
zolug committed Sep 28, 2021
1 parent dd436eb commit 149c847
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 11 deletions.
13 changes: 9 additions & 4 deletions pkg/networkservice/common/mechanisms/vxlan/vni/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,18 @@ import (
)

type vniClient struct {
tunnelIP net.IP
tunnelIP net.IP
tunnelPort uint16
}

// NewClient - set the SrcIP for the vxlan mechanism
func NewClient(tunnelIP net.IP) networkservice.NetworkServiceClient {
func NewClient(tunnelIP net.IP, tunnelPort uint16) networkservice.NetworkServiceClient {
if tunnelPort == 0 {
tunnelPort = vxlanPort
}
return &vniClient{
tunnelIP: tunnelIP,
tunnelIP: tunnelIP,
tunnelPort: tunnelPort,
}
}

Expand All @@ -47,7 +52,7 @@ func (v *vniClient) Request(ctx context.Context, request *networkservice.Network
// Note: This only has effect if this is a vxlan mechanism
if mech := vxlan.ToMechanism(m); mech != nil {
mech.SetSrcIP(v.tunnelIP)
mech.SetSrcPort(vxlanPort)
mech.SetSrcPort(v.tunnelPort)
}
}
return next.Client(ctx).Request(ctx, request, opts...)
Expand Down
14 changes: 13 additions & 1 deletion pkg/networkservice/common/mechanisms/vxlan/vni/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,23 @@ func TestVNIClient(t *testing.T) {
},
},
}
c := next.NewNetworkServiceClient(vni.NewClient(net.ParseIP("192.0.2.1")))
var port uint16 = 0
c := next.NewNetworkServiceClient(vni.NewClient(net.ParseIP("192.0.2.1"), port))
conn, err := c.Request(context.Background(), request)
assert.Nil(t, err)
assert.NotNil(t, conn)
mechanism := vxlan.ToMechanism(request.MechanismPreferences[0])
assert.NotNil(t, mechanism)
assert.Equal(t, "192.0.2.1", mechanism.SrcIP().String())
assert.NotEqual(t, port, mechanism.SrcPort())

port = 4466
c = next.NewNetworkServiceClient(vni.NewClient(net.ParseIP("192.0.2.1"), port))
conn, err = c.Request(context.Background(), request)
assert.Nil(t, err)
assert.NotNil(t, conn)
mechanism = vxlan.ToMechanism(request.MechanismPreferences[0])
assert.NotNil(t, mechanism)
assert.Equal(t, "192.0.2.1", mechanism.SrcIP().String())
assert.Equal(t, port, mechanism.SrcPort())
}
13 changes: 9 additions & 4 deletions pkg/networkservice/common/mechanisms/vxlan/vni/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,19 @@ import (
)

type vniServer struct {
tunnelIP net.IP
tunnelIP net.IP
tunnelPort uint16
sync.Map
}

// NewServer - set the DstIP *and* VNI for the vxlan mechanism
func NewServer(tunnelIP net.IP) networkservice.NetworkServiceServer {
func NewServer(tunnelIP net.IP, tunnelPort uint16) networkservice.NetworkServiceServer {
if tunnelPort == 0 {
tunnelPort = vxlanPort
}
return &vniServer{
tunnelIP: tunnelIP,
tunnelIP: tunnelIP,
tunnelPort: tunnelPort,
}
}

Expand All @@ -49,7 +54,7 @@ func (v *vniServer) Request(ctx context.Context, request *networkservice.Network
return next.Server(ctx).Request(ctx, request)
}
mechanism.SetDstIP(v.tunnelIP)
mechanism.SetDstPort(vxlanPort)
mechanism.SetDstPort(v.tunnelPort)
k := vniKey{
srcIPString: mechanism.SrcIP().String(),
vni: mechanism.VNI(),
Expand Down
17 changes: 15 additions & 2 deletions pkg/networkservice/common/mechanisms/vxlan/vni/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,26 @@ func TestVNIServer(t *testing.T) {
Type: vxlan.MECHANISM,
}
vxlan.ToMechanism(request.GetConnection().GetMechanism()).SetSrcIP(net.ParseIP("192.0.2.1"))
server := next.NewNetworkServiceServer(vni.NewServer(net.ParseIP("192.0.2.2")))
var port uint16 = 0
server := next.NewNetworkServiceServer(vni.NewServer(net.ParseIP("192.0.2.2"), port))
conn, err := server.Request(context.Background(), request)
assert.Nil(t, err)
assert.NotNil(t, conn)
mechanism := vxlan.ToMechanism(conn.GetMechanism())
assert.NotNil(t, mechanism)
assert.Equal(t, "192.0.2.2", mechanism.DstIP().String())
assert.NotEqual(t, port, mechanism.DstPort())
assert.NotEqual(t, 0, mechanism.VNI())

port = 4466
server = next.NewNetworkServiceServer(vni.NewServer(net.ParseIP("192.0.2.2"), port))
conn, err = server.Request(context.Background(), request)
assert.Nil(t, err)
assert.NotNil(t, conn)
mechanism = vxlan.ToMechanism(conn.GetMechanism())
assert.NotNil(t, mechanism)
assert.Equal(t, "192.0.2.2", mechanism.DstIP().String())
assert.Equal(t, port, mechanism.DstPort())
assert.NotEqual(t, 0, mechanism.VNI())
}

Expand All @@ -73,7 +86,7 @@ func TestVNIServerNonVxLAN(t *testing.T) {
Cls: cls.LOCAL,
Type: kernel.MECHANISM,
}
server := next.NewNetworkServiceServer(vni.NewServer(net.ParseIP("192.0.2.2")))
server := next.NewNetworkServiceServer(vni.NewServer(net.ParseIP("192.0.2.2"), uint16(0)))
conn, err := server.Request(context.Background(), request)
assert.Nil(t, err)
assert.NotNil(t, conn)
Expand Down

0 comments on commit 149c847

Please sign in to comment.