Browse code

Remove the assumption that the fist IP is the bridge IP

The assumption is not true if user specifies an IP address other than
the first IP, in that case the first IP address is never allocated to
any container.

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>

Hu Tao authored on 2015/01/21 03:13:58
Showing 2 changed files
... ...
@@ -23,11 +23,6 @@ func newAllocatedMap(network *net.IPNet) *allocatedMap {
23 23
 	begin := big.NewInt(0).Add(ipToBigInt(firstIP), big.NewInt(1))
24 24
 	end := big.NewInt(0).Sub(ipToBigInt(lastIP), big.NewInt(1))
25 25
 
26
-	// if IPv4 network, then allocation range starts at begin + 1 because begin is bridge IP
27
-	if len(firstIP) == 4 {
28
-		begin = begin.Add(begin, big.NewInt(1))
29
-	}
30
-
31 26
 	return &allocatedMap{
32 27
 		p:     make(map[string]struct{}),
33 28
 		begin: begin,
... ...
@@ -61,7 +61,7 @@ func TestRequestNewIps(t *testing.T) {
61 61
 	var ip net.IP
62 62
 	var err error
63 63
 
64
-	for i := 2; i < 10; i++ {
64
+	for i := 1; i < 10; i++ {
65 65
 		ip, err = RequestIP(network, nil)
66 66
 		if err != nil {
67 67
 			t.Fatal(err)
... ...
@@ -167,7 +167,7 @@ func TestGetReleasedIp(t *testing.T) {
167 167
 		t.Fatal(err)
168 168
 	}
169 169
 
170
-	for i := 0; i < 252; i++ {
170
+	for i := 0; i < 253; i++ {
171 171
 		_, err = RequestIP(network, nil)
172 172
 		if err != nil {
173 173
 			t.Fatal(err)
... ...
@@ -278,23 +278,24 @@ func TestRequestSpecificIpV6(t *testing.T) {
278 278
 
279 279
 func TestIPAllocator(t *testing.T) {
280 280
 	expectedIPs := []net.IP{
281
-		0: net.IPv4(127, 0, 0, 2),
282
-		1: net.IPv4(127, 0, 0, 3),
283
-		2: net.IPv4(127, 0, 0, 4),
284
-		3: net.IPv4(127, 0, 0, 5),
285
-		4: net.IPv4(127, 0, 0, 6),
281
+		0: net.IPv4(127, 0, 0, 1),
282
+		1: net.IPv4(127, 0, 0, 2),
283
+		2: net.IPv4(127, 0, 0, 3),
284
+		3: net.IPv4(127, 0, 0, 4),
285
+		4: net.IPv4(127, 0, 0, 5),
286
+		5: net.IPv4(127, 0, 0, 6),
286 287
 	}
287 288
 
288 289
 	gwIP, n, _ := net.ParseCIDR("127.0.0.1/29")
289 290
 
290 291
 	network := &net.IPNet{IP: gwIP, Mask: n.Mask}
291 292
 	// Pool after initialisation (f = free, u = used)
292
-	// 2(f) - 3(f) - 4(f) - 5(f) - 6(f)
293
+	// 1(f) - 2(f) - 3(f) - 4(f) - 5(f) - 6(f)
293 294
 	//  ↑
294 295
 
295
-	// Check that we get 5 IPs, from 127.0.0.2–127.0.0.6, in that
296
+	// Check that we get 6 IPs, from 127.0.0.1–127.0.0.6, in that
296 297
 	// order.
297
-	for i := 0; i < 5; i++ {
298
+	for i := 0; i < 6; i++ {
298 299
 		ip, err := RequestIP(network, nil)
299 300
 		if err != nil {
300 301
 			t.Fatal(err)
... ...
@@ -303,27 +304,31 @@ func TestIPAllocator(t *testing.T) {
303 303
 		assertIPEquals(t, expectedIPs[i], ip)
304 304
 	}
305 305
 	// Before loop begin
306
-	// 2(f) - 3(f) - 4(f) - 5(f) - 6(f)
306
+	// 1(f) - 2(f) - 3(f) - 4(f) - 5(f) - 6(f)
307 307
 	//  ↑
308 308
 
309 309
 	// After i = 0
310
-	// 2(u) - 3(f) - 4(f) - 5(f) - 6(f)
310
+	// 1(u) - 2(f) - 3(f) - 4(f) - 5(f) - 6(f)
311 311
 	//         ↑
312 312
 
313 313
 	// After i = 1
314
-	// 2(u) - 3(u) - 4(f) - 5(f) - 6(f)
314
+	// 1(u) - 2(u) - 3(f) - 4(f) - 5(f) - 6(f)
315 315
 	//                ↑
316 316
 
317 317
 	// After i = 2
318
-	// 2(u) - 3(u) - 4(u) - 5(f) - 6(f)
318
+	// 1(u) - 2(u) - 3(u) - 4(f) - 5(f) - 6(f)
319 319
 	//                       ↑
320 320
 
321 321
 	// After i = 3
322
-	// 2(u) - 3(u) - 4(u) - 5(u) - 6(f)
322
+	// 1(u) - 2(u) - 3(u) - 4(u) - 5(f) - 6(f)
323 323
 	//                              ↑
324 324
 
325 325
 	// After i = 4
326
-	// 2(u) - 3(u) - 4(u) - 5(u) - 6(u)
326
+	// 1(u) - 2(u) - 3(u) - 4(u) - 5(u) - 6(f)
327
+	//                                     ↑
328
+
329
+	// After i = 5
330
+	// 1(u) - 2(u) - 3(u) - 4(u) - 5(u) - 6(u)
327 331
 	//  ↑
328 332
 
329 333
 	// Check that there are no more IPs
... ...
@@ -336,20 +341,20 @@ func TestIPAllocator(t *testing.T) {
336 336
 	if err := ReleaseIP(network, expectedIPs[3]); err != nil {
337 337
 		t.Fatal(err)
338 338
 	}
339
-	// 2(u) - 3(u) - 4(u) - 5(f) - 6(u)
339
+	// 1(u) - 2(u) - 3(u) - 4(f) - 5(u) - 6(u)
340 340
 	//                       ↑
341 341
 
342 342
 	if err := ReleaseIP(network, expectedIPs[2]); err != nil {
343 343
 		t.Fatal(err)
344 344
 	}
345
-	// 2(u) - 3(u) - 4(f) - 5(f) - 6(u)
346
-	//                       ↑
345
+	// 1(u) - 2(u) - 3(f) - 4(f) - 5(u) - 6(u)
346
+	//                ↑
347 347
 
348 348
 	if err := ReleaseIP(network, expectedIPs[4]); err != nil {
349 349
 		t.Fatal(err)
350 350
 	}
351
-	// 2(u) - 3(u) - 4(f) - 5(f) - 6(f)
352
-	//                       ↑
351
+	// 1(u) - 2(u) - 3(f) - 4(f) - 5(f) - 6(u)
352
+	//                              ↑
353 353
 
354 354
 	// Make sure that IPs are reused in sequential order, starting
355 355
 	// with the first released IP
... ...
@@ -512,10 +517,10 @@ func TestAllocateDifferentSubnets(t *testing.T) {
512 512
 		Mask: []byte{255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0}, // /64 netmask
513 513
 	}
514 514
 	expectedIPs := []net.IP{
515
-		0: net.IPv4(192, 168, 0, 2),
516
-		1: net.IPv4(192, 168, 0, 3),
517
-		2: net.IPv4(127, 0, 0, 2),
518
-		3: net.IPv4(127, 0, 0, 3),
515
+		0: net.IPv4(192, 168, 0, 1),
516
+		1: net.IPv4(192, 168, 0, 2),
517
+		2: net.IPv4(127, 0, 0, 1),
518
+		3: net.IPv4(127, 0, 0, 2),
519 519
 		4: net.ParseIP("2a00:1450::1"),
520 520
 		5: net.ParseIP("2a00:1450::2"),
521 521
 		6: net.ParseIP("2a00:1450::3"),