summaryrefslogtreecommitdiff
path: root/libnetwork/portallocator/portallocator_linux.go
blob: ea991fad98cb289986ad4e10392bfc791e830dcf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package portallocator

import (
	"bufio"
	"fmt"
	"os"
)

func getDynamicPortRange() (start int, end int, err error) {
	const portRangeKernelParam = "/proc/sys/net/ipv4/ip_local_port_range"
	file, err := os.Open(portRangeKernelParam)
	if err != nil {
		return 0, 0, err
	}
	defer file.Close()

	n, err := fmt.Fscanf(bufio.NewReader(file), "%d\t%d", &start, &end)
	if n != 2 || err != nil {
		if err == nil {
			err = fmt.Errorf("unexpected count of parsed numbers (%d)", n)
		}
		return 0, 0, fmt.Errorf("port allocator - failed to parse system ephemeral port range from %s: %v", portRangeKernelParam, err)
	}
	return start, end, nil
}