Skip to content

Commit f59218e

Browse files
committed
fixed vxlan delete for entries with vrf != 0
Signed-off-by: Vladimir Lavor <[email protected]>
1 parent 7c7703b commit f59218e

File tree

4 files changed

+43
-42
lines changed

4 files changed

+43
-42
lines changed

plugins/vpp/ifplugin/interface_config.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ func (plugin *InterfaceConfigurator) ConfigureVPPInterface(iface *intf.Interface
227227
if err != nil || cached {
228228
return err
229229
}
230-
ifIdx, err = plugin.ifHandler.AddVxlanTunnel(iface.Name, iface.Vxlan, iface.Vrf, multicastIfIdx)
230+
ifIdx, err = plugin.ifHandler.AddVxLanTunnel(iface.Name, iface.Vrf, multicastIfIdx, iface.Vxlan)
231231
case intf.InterfaceType_SOFTWARE_LOOPBACK:
232232
ifIdx, err = plugin.ifHandler.AddLoopbackInterface(iface.Name)
233233
case intf.InterfaceType_ETHERNET_CSMACD:
@@ -898,7 +898,7 @@ func (plugin *InterfaceConfigurator) deleteVPPInterface(oldConfig *intf.Interfac
898898
case intf.InterfaceType_MEMORY_INTERFACE:
899899
err = plugin.ifHandler.DeleteMemifInterface(oldConfig.Name, ifIdx)
900900
case intf.InterfaceType_VXLAN_TUNNEL:
901-
err = plugin.ifHandler.DeleteVxlanTunnel(oldConfig.Name, ifIdx, oldConfig.GetVxlan())
901+
err = plugin.ifHandler.DeleteVxLanTunnel(oldConfig.Name, ifIdx, oldConfig.Vrf, oldConfig.GetVxlan())
902902
case intf.InterfaceType_SOFTWARE_LOOPBACK:
903903
err = plugin.ifHandler.DeleteLoopbackInterface(oldConfig.Name, ifIdx)
904904
case intf.InterfaceType_ETHERNET_CSMACD:

plugins/vpp/ifplugin/vppcalls/api_vppcalls.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ type IfVppWrite interface {
5252
AddTapInterface(ifName string, tapIf *interfaces.Interfaces_Interface_Tap) (swIfIdx uint32, err error)
5353
// DeleteTapInterface calls TapDelete bin API.
5454
DeleteTapInterface(ifName string, idx uint32, version uint32) error
55-
// AddVxlanTunnel calls AddDelVxlanTunnelReq with flag add=1.
56-
AddVxlanTunnel(ifName string, vxlanIntf *interfaces.Interfaces_Interface_Vxlan, encapVrf, multicastIf uint32) (swIndex uint32, err error)
57-
// DeleteVxlanTunnel calls AddDelVxlanTunnelReq with flag add=0.
58-
DeleteVxlanTunnel(ifName string, idx uint32, vxlanIntf *interfaces.Interfaces_Interface_Vxlan) error
55+
// AddVxLanTunnel calls AddDelVxLanTunnelReq with flag add=1.
56+
AddVxLanTunnel(ifName string, vrf, multicastIf uint32, vxLan *interfaces.Interfaces_Interface_Vxlan) (swIndex uint32, err error)
57+
// DeleteVxLanTunnel calls AddDelVxLanTunnelReq with flag add=0.
58+
DeleteVxLanTunnel(ifName string, idx, vrf uint32, vxLan *interfaces.Interfaces_Interface_Vxlan) error
5959
// InterfaceAdminDown calls binary API SwInterfaceSetFlagsReply with AdminUpDown=0.
6060
InterfaceAdminDown(ifIdx uint32) error
6161
// InterfaceAdminUp calls binary API SwInterfaceSetFlagsReply with AdminUpDown=1.

plugins/vpp/ifplugin/vppcalls/vxlan_vppcalls.go

+18-17
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,30 @@ import (
2323
intf "github.com/ligato/vpp-agent/plugins/vpp/model/interfaces"
2424
)
2525

26-
func (handler *ifVppHandler) addDelVxlanTunnel(iface *intf.Interfaces_Interface_Vxlan, encVrf, multicastIf uint32, isAdd bool) (swIdx uint32, err error) {
26+
func (h *ifVppHandler) addDelVxLanTunnel(vxLan *intf.Interfaces_Interface_Vxlan, vrf, multicastIf uint32, isAdd bool) (swIdx uint32, err error) {
2727
defer func(t time.Time) {
28-
handler.stopwatch.TimeLog(vxlan.VxlanAddDelTunnel{}).LogTimeEntry(time.Since(t))
28+
h.stopwatch.TimeLog(vxlan.VxlanAddDelTunnel{}).LogTimeEntry(time.Since(t))
2929
}(time.Now())
3030

31-
// this is temporary fix to solve creation of VRF table for VXLAN
32-
if err := handler.CreateVrf(encVrf); err != nil {
31+
// this is temporary fix to solve creation of VRF table for VxLAN
32+
if err := h.CreateVrf(vrf); err != nil {
3333
return 0, err
3434
}
3535

3636
req := &vxlan.VxlanAddDelTunnel{
3737
IsAdd: boolToUint(isAdd),
38-
Vni: iface.Vni,
38+
Vni: vxLan.Vni,
3939
DecapNextIndex: 0xFFFFFFFF,
4040
Instance: ^uint32(0),
41-
EncapVrfID: encVrf,
41+
EncapVrfID: vrf,
4242
McastSwIfIndex: multicastIf,
4343
}
4444

45-
srcAddr := net.ParseIP(iface.SrcAddress).To4()
46-
dstAddr := net.ParseIP(iface.DstAddress).To4()
45+
srcAddr := net.ParseIP(vxLan.SrcAddress).To4()
46+
dstAddr := net.ParseIP(vxLan.DstAddress).To4()
4747
if srcAddr == nil && dstAddr == nil {
48-
srcAddr = net.ParseIP(iface.SrcAddress).To16()
49-
dstAddr = net.ParseIP(iface.DstAddress).To16()
48+
srcAddr = net.ParseIP(vxLan.SrcAddress).To16()
49+
dstAddr = net.ParseIP(vxLan.DstAddress).To16()
5050
req.IsIPv6 = 1
5151
if srcAddr == nil || dstAddr == nil {
5252
return 0, fmt.Errorf("invalid VXLAN address, src: %s, dst: %s", srcAddr, dstAddr)
@@ -59,7 +59,7 @@ func (handler *ifVppHandler) addDelVxlanTunnel(iface *intf.Interfaces_Interface_
5959
req.DstAddress = []byte(dstAddr)
6060

6161
reply := &vxlan.VxlanAddDelTunnelReply{}
62-
if err = handler.callsChannel.SendRequest(req).ReceiveReply(reply); err != nil {
62+
if err = h.callsChannel.SendRequest(req).ReceiveReply(reply); err != nil {
6363
return 0, err
6464
}
6565
if reply.Retval != 0 {
@@ -69,17 +69,18 @@ func (handler *ifVppHandler) addDelVxlanTunnel(iface *intf.Interfaces_Interface_
6969
return reply.SwIfIndex, nil
7070
}
7171

72-
func (handler *ifVppHandler) AddVxlanTunnel(ifName string, vxlanIntf *intf.Interfaces_Interface_Vxlan, encapVrf, multicastIf uint32) (swIndex uint32, err error) {
73-
swIfIdx, err := handler.addDelVxlanTunnel(vxlanIntf, encapVrf, multicastIf, true)
72+
func (h *ifVppHandler) AddVxLanTunnel(ifName string, vrf, multicastIf uint32, vxLan *intf.Interfaces_Interface_Vxlan) (swIndex uint32, err error) {
73+
swIfIdx, err := h.addDelVxLanTunnel(vxLan, vrf, multicastIf, true)
7474
if err != nil {
7575
return 0, err
7676
}
77-
return swIfIdx, handler.SetInterfaceTag(ifName, swIfIdx)
77+
return swIfIdx, h.SetInterfaceTag(ifName, swIfIdx)
7878
}
7979

80-
func (handler *ifVppHandler) DeleteVxlanTunnel(ifName string, idx uint32, vxlanIntf *intf.Interfaces_Interface_Vxlan) error {
81-
if _, err := handler.addDelVxlanTunnel(vxlanIntf, 0, 0, false); err != nil {
80+
func (h *ifVppHandler) DeleteVxLanTunnel(ifName string, idx, vrf uint32, vxLan *intf.Interfaces_Interface_Vxlan) error {
81+
// Multicast does not need to be set
82+
if _, err := h.addDelVxLanTunnel(vxLan, vrf, 0, false); err != nil {
8283
return err
8384
}
84-
return handler.RemoveInterfaceTag(ifName, idx)
85+
return h.RemoveInterfaceTag(ifName, idx)
8586
}

plugins/vpp/ifplugin/vppcalls/vxlan_vppcalls_test.go

+19-19
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ func TestAddVxlanTunnel(t *testing.T) {
3535
})
3636
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
3737

38-
swIfIdx, err := ifHandler.AddVxlanTunnel("ifName", &ifModel.Interfaces_Interface_Vxlan{
38+
swIfIdx, err := ifHandler.AddVxLanTunnel("ifName", 0, 2, &ifModel.Interfaces_Interface_Vxlan{
3939
SrcAddress: "10.0.0.1",
4040
DstAddress: "20.0.0.1",
4141
Vni: 1,
42-
}, 0, 2)
42+
})
4343
Expect(err).To(BeNil())
4444
Expect(swIfIdx).To(BeEquivalentTo(1))
4545
var msgCheck bool
@@ -73,11 +73,11 @@ func TestAddVxlanTunnelWithVrf(t *testing.T) {
7373
})
7474
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
7575

76-
swIfIdx, err := ifHandler.AddVxlanTunnel("ifName", &ifModel.Interfaces_Interface_Vxlan{
76+
swIfIdx, err := ifHandler.AddVxLanTunnel("ifName", 1, 1, &ifModel.Interfaces_Interface_Vxlan{
7777
SrcAddress: "10.0.0.1",
7878
DstAddress: "20.0.0.1",
7979
Vni: 1,
80-
}, 1, 1)
80+
})
8181
Expect(err).To(BeNil())
8282
Expect(swIfIdx).To(BeEquivalentTo(1))
8383
var msgCheck bool
@@ -106,11 +106,11 @@ func TestAddVxlanTunnelIPv6(t *testing.T) {
106106
})
107107
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
108108

109-
swIfIdx, err := ifHandler.AddVxlanTunnel("ifName", &ifModel.Interfaces_Interface_Vxlan{
109+
swIfIdx, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifModel.Interfaces_Interface_Vxlan{
110110
SrcAddress: "2001:db8:0:1:1:1:1:1",
111111
DstAddress: "2002:db8:0:1:1:1:1:1",
112112
Vni: 1,
113-
}, 0, 0)
113+
})
114114
Expect(err).To(BeNil())
115115
Expect(swIfIdx).To(BeEquivalentTo(1))
116116
var msgCheck bool
@@ -135,11 +135,11 @@ func TestAddVxlanTunnelIPMismatch(t *testing.T) {
135135
})
136136
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
137137

138-
_, err := ifHandler.AddVxlanTunnel("ifName", &ifModel.Interfaces_Interface_Vxlan{
138+
_, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifModel.Interfaces_Interface_Vxlan{
139139
SrcAddress: "10.0.0.1",
140140
DstAddress: "2001:db8:0:1:1:1:1:1",
141141
Vni: 1,
142-
}, 0, 0)
142+
})
143143
Expect(err).ToNot(BeNil())
144144
}
145145

@@ -152,11 +152,11 @@ func TestAddVxlanTunnelInvalidIP(t *testing.T) {
152152
})
153153
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
154154

155-
_, err := ifHandler.AddVxlanTunnel("ifName", &ifModel.Interfaces_Interface_Vxlan{
155+
_, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifModel.Interfaces_Interface_Vxlan{
156156
SrcAddress: "invalid-ip",
157157
DstAddress: "2001:db8:0:1:1:1:1:1",
158158
Vni: 1,
159-
}, 0, 0)
159+
})
160160
Expect(err).ToNot(BeNil())
161161
}
162162

@@ -167,11 +167,11 @@ func TestAddVxlanTunnelError(t *testing.T) {
167167
ctx.MockVpp.MockReply(&vxlan.VxlanAddDelTunnel{})
168168
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
169169

170-
_, err := ifHandler.AddVxlanTunnel("ifName", &ifModel.Interfaces_Interface_Vxlan{
170+
_, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifModel.Interfaces_Interface_Vxlan{
171171
SrcAddress: "10.0.0.1",
172172
DstAddress: "20.0.0.2",
173173
Vni: 1,
174-
}, 0, 0)
174+
})
175175
Expect(err).ToNot(BeNil())
176176
}
177177

@@ -189,11 +189,11 @@ func TestAddVxlanTunnelWithVrfError(t *testing.T) {
189189
})
190190
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
191191

192-
_, err := ifHandler.AddVxlanTunnel("ifName", &ifModel.Interfaces_Interface_Vxlan{
192+
_, err := ifHandler.AddVxLanTunnel("ifName", 1, 0, &ifModel.Interfaces_Interface_Vxlan{
193193
SrcAddress: "10.0.0.1",
194194
DstAddress: "20.0.0.1",
195195
Vni: 1,
196-
}, 1, 0)
196+
})
197197
Expect(err).ToNot(BeNil())
198198
}
199199

@@ -206,11 +206,11 @@ func TestAddVxlanTunnelRetval(t *testing.T) {
206206
})
207207
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
208208

209-
_, err := ifHandler.AddVxlanTunnel("ifName", &ifModel.Interfaces_Interface_Vxlan{
209+
_, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifModel.Interfaces_Interface_Vxlan{
210210
SrcAddress: "10.0.0.1",
211211
DstAddress: "20.0.0.2",
212212
Vni: 1,
213-
}, 0, 0)
213+
})
214214
Expect(err).ToNot(BeNil())
215215
}
216216

@@ -223,7 +223,7 @@ func TestDeleteVxlanTunnel(t *testing.T) {
223223
})
224224
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
225225

226-
err := ifHandler.DeleteVxlanTunnel("ifName", 1, &ifModel.Interfaces_Interface_Vxlan{
226+
err := ifHandler.DeleteVxLanTunnel("ifName", 1, 0, &ifModel.Interfaces_Interface_Vxlan{
227227
SrcAddress: "10.0.0.1",
228228
DstAddress: "20.0.0.1",
229229
Vni: 1,
@@ -238,7 +238,7 @@ func TestDeleteVxlanTunnelError(t *testing.T) {
238238
ctx.MockVpp.MockReply(&vxlan.VxlanAddDelTunnel{})
239239
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
240240

241-
err := ifHandler.DeleteVxlanTunnel("ifName", 1, &ifModel.Interfaces_Interface_Vxlan{
241+
err := ifHandler.DeleteVxLanTunnel("ifName", 1, 0, &ifModel.Interfaces_Interface_Vxlan{
242242
SrcAddress: "10.0.0.1",
243243
DstAddress: "20.0.0.1",
244244
Vni: 1,
@@ -255,7 +255,7 @@ func TestDeleteVxlanTunnelRetval(t *testing.T) {
255255
})
256256
ctx.MockVpp.MockReply(&interfaces.SwInterfaceTagAddDelReply{})
257257

258-
err := ifHandler.DeleteVxlanTunnel("ifName", 1, &ifModel.Interfaces_Interface_Vxlan{
258+
err := ifHandler.DeleteVxLanTunnel("ifName", 1, 0, &ifModel.Interfaces_Interface_Vxlan{
259259
SrcAddress: "10.0.0.1",
260260
DstAddress: "20.0.0.1",
261261
Vni: 1,

0 commit comments

Comments
 (0)