Skip to content

Commit

Permalink
Merge pull request #4949 from tjmehta/4908-fix_dynamic_port_allocatio…
Browse files Browse the repository at this point in the history
…n_limit

Fix dynamic port allocation limit
  • Loading branch information
creack committed Apr 1, 2014
2 parents b4b8741 + 739d124 commit 7462cc6
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
12 changes: 8 additions & 4 deletions runtime/networkdriver/portallocator/portallocator.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ type (
)

var (
ErrAllPortsAllocated = errors.New("all ports are allocated")
ErrPortAlreadyAllocated = errors.New("port has already been allocated")
ErrPortExceedsRange = errors.New("port exceeds upper range")
ErrUnknownProtocol = errors.New("unknown protocol")
)

Expand Down Expand Up @@ -152,17 +152,21 @@ func equalsDefault(ip net.IP) bool {

func findNextPort(proto string, allocated *collections.OrderedIntSet) (int, error) {
port := nextPort(proto)
startSearchPort := port
for allocated.Exists(port) {
port = nextPort(proto)
}
if port > EndPortRange {
return 0, ErrPortExceedsRange
if startSearchPort == port {
return 0, ErrAllPortsAllocated
}
}
return port, nil
}

func nextPort(proto string) int {
c := currentDynamicPort[proto] + 1
if c > EndPortRange {
c = BeginPortRange
}
currentDynamicPort[proto] = c
return c
}
Expand Down
4 changes: 2 additions & 2 deletions runtime/networkdriver/portallocator/portallocator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ func TestAllocateAllPorts(t *testing.T) {
}
}

if _, err := RequestPort(defaultIP, "tcp", 0); err != ErrPortExceedsRange {
t.Fatalf("Expected error %s got %s", ErrPortExceedsRange, err)
if _, err := RequestPort(defaultIP, "tcp", 0); err != ErrAllPortsAllocated {
t.Fatalf("Expected error %s got %s", ErrAllPortsAllocated, err)
}

_, err := RequestPort(defaultIP, "udp", 0)
Expand Down

0 comments on commit 7462cc6

Please sign in to comment.