Skip to content

Commit b10a138

Browse files
committed
Fix egressip handling when a NetNamespace is updated
(We handled delete+recreate correctly, but not update.)
1 parent c854216 commit b10a138

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

pkg/network/node/egressip.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,9 @@ func (eip *egressIPWatcher) updateNamespaceEgress(vnid uint32, egressIP string)
278278
}
279279

280280
if ns.assignedIP != "" {
281-
eip.deleteEgressIP(egressIP)
282-
delete(eip.namespacesByEgressIP, egressIP)
281+
oldEgressIP := ns.assignedIP
282+
eip.deleteEgressIP(oldEgressIP)
283+
delete(eip.namespacesByEgressIP, oldEgressIP)
283284
ns.assignedIP = ""
284285
ns.nodeIP = ""
285286
}

pkg/network/node/egressip_test.go

+32-4
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ func TestEgressIP(t *testing.T) {
170170

171171
// Assign HostSubnet.EgressIP first, then NetNamespace.EgressIP, with a remote EgressIP
172172
eip.updateNodeEgress("172.17.0.3", []string{"172.17.0.101", "172.17.0.100"}) // Added .101
173+
eip.updateNodeEgress("172.17.0.5", []string{"172.17.0.105"}) // Added .105
173174
err = assertNoNetlinkChanges(eip)
174175
if err != nil {
175176
t.Fatalf("%v", err)
@@ -179,6 +180,17 @@ func TestEgressIP(t *testing.T) {
179180
t.Fatalf("%v", err)
180181
}
181182

183+
eip.updateNamespaceEgress(43, "172.17.0.105")
184+
err = assertNoNetlinkChanges(eip)
185+
if err != nil {
186+
t.Fatalf("%v", err)
187+
}
188+
err = assertOVSChanges(eip, &flows, egressOVSChange{vnid: 43, egress: Remote, remote: "172.17.0.5"})
189+
if err != nil {
190+
t.Fatalf("%v", err)
191+
}
192+
193+
// Change NetNamespace.EgressIP
182194
eip.updateNamespaceEgress(43, "172.17.0.101")
183195
err = assertNoNetlinkChanges(eip)
184196
if err != nil {
@@ -190,7 +202,7 @@ func TestEgressIP(t *testing.T) {
190202
}
191203

192204
// Assign NetNamespace.EgressIP first, then HostSubnet.EgressIP, with a local EgressIP
193-
eip.updateNamespaceEgress(44, "172.17.0.102")
205+
eip.updateNamespaceEgress(44, "172.17.0.104")
194206
err = assertNoNetlinkChanges(eip)
195207
if err != nil {
196208
t.Fatalf("%v", err)
@@ -200,8 +212,8 @@ func TestEgressIP(t *testing.T) {
200212
t.Fatalf("%v", err)
201213
}
202214

203-
eip.updateNodeEgress("172.17.0.4", []string{"172.17.0.102"}) // Added .102
204-
err = assertNetlinkChange(eip, "claim 172.17.0.102")
215+
eip.updateNodeEgress("172.17.0.4", []string{"172.17.0.102", "172.17.0.104"}) // Added .102, .104
216+
err = assertNetlinkChange(eip, "claim 172.17.0.104")
205217
if err != nil {
206218
t.Fatalf("%v", err)
207219
}
@@ -210,8 +222,24 @@ func TestEgressIP(t *testing.T) {
210222
t.Fatalf("%v", err)
211223
}
212224

225+
// Change Namespace EgressIP
226+
eip.updateNamespaceEgress(44, "172.17.0.102")
227+
err = assertNetlinkChange(eip, "release 172.17.0.104")
228+
if err != nil {
229+
t.Fatalf("%v", err)
230+
}
231+
err = assertNetlinkChange(eip, "claim 172.17.0.102")
232+
if err != nil {
233+
t.Fatalf("%v", err)
234+
}
235+
// The iptables rules change, but not the OVS flow
236+
err = assertNoOVSChanges(eip, &flows)
237+
if err != nil {
238+
t.Fatalf("%v", err)
239+
}
240+
213241
// Assign HostSubnet.EgressIP first, then NetNamespace.EgressIP, with a local EgressIP
214-
eip.updateNodeEgress("172.17.0.4", []string{"172.17.0.102", "172.17.0.103"}) // Added .103
242+
eip.updateNodeEgress("172.17.0.4", []string{"172.17.0.102", "172.17.0.103"}) // Added .103, Dropped .104
215243
err = assertNoNetlinkChanges(eip)
216244
if err != nil {
217245
t.Fatalf("%v", err)

0 commit comments

Comments
 (0)