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>
| ... | ... |
@@ -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"),
|