|
@@ -9,22 +9,6 @@ import (
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
)
|
|
|
|
|
|
-func sanitizePortRange(start int, end int) (newStart, newEnd int, err error) {
|
|
|
|
- if start > defaultPortRangeEnd || end < defaultPortRangeStart || start > end {
|
|
|
|
- return 0, 0, fmt.Errorf("Request out allowed range [%v, %v]",
|
|
|
|
- defaultPortRangeStart, defaultPortRangeEnd)
|
|
|
|
- }
|
|
|
|
- err = nil
|
|
|
|
- newStart, newEnd = start, end
|
|
|
|
- if start < defaultPortRangeStart {
|
|
|
|
- newStart = defaultPortRangeStart
|
|
|
|
- }
|
|
|
|
- if end > defaultPortRangeEnd {
|
|
|
|
- newEnd = defaultPortRangeEnd
|
|
|
|
- }
|
|
|
|
- return
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
type ipMapping map[string]protoMap
|
|
type ipMapping map[string]protoMap
|
|
|
|
|
|
var (
|
|
var (
|
|
@@ -104,20 +88,12 @@ func Get() *PortAllocator {
|
|
return instance
|
|
return instance
|
|
}
|
|
}
|
|
|
|
|
|
-func getDefaultPortRange() (int, int) {
|
|
|
|
|
|
+func newInstance() *PortAllocator {
|
|
start, end, err := getDynamicPortRange()
|
|
start, end, err := getDynamicPortRange()
|
|
- if err == nil {
|
|
|
|
- start, end, err = sanitizePortRange(start, end)
|
|
|
|
- }
|
|
|
|
if err != nil {
|
|
if err != nil {
|
|
- logrus.WithError(err).Infof("falling back to default port range %d-%d", defaultPortRangeStart, defaultPortRangeEnd)
|
|
|
|
- start, end = defaultPortRangeStart, defaultPortRangeEnd
|
|
|
|
|
|
+ logrus.WithError(err).Infof("falling back to default port range %d-%d", DefaultPortRangeStart, DefaultPortRangeEnd)
|
|
|
|
+ start, end = DefaultPortRangeStart, DefaultPortRangeEnd
|
|
}
|
|
}
|
|
- return start, end
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func newInstance() *PortAllocator {
|
|
|
|
- start, end := getDefaultPortRange()
|
|
|
|
return &PortAllocator{
|
|
return &PortAllocator{
|
|
ipMap: ipMapping{},
|
|
ipMap: ipMapping{},
|
|
Begin: start,
|
|
Begin: start,
|
|
@@ -191,30 +167,6 @@ func (p *PortAllocator) ReleasePort(ip net.IP, proto string, port int) error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
-// SetPortRange sets dynamic port allocation range.
|
|
|
|
-// if both portBegin and portEnd are 0, the port range reverts to default
|
|
|
|
-// value. Otherwise they are sanitized against the default values to
|
|
|
|
-// ensure their validity.
|
|
|
|
-func (p *PortAllocator) SetPortRange(portBegin, portEnd int) error {
|
|
|
|
- // if begin and end is zero, revert to default values
|
|
|
|
- var begin, end int
|
|
|
|
- var err error
|
|
|
|
- if portBegin == 0 && portEnd == 0 {
|
|
|
|
- begin, end = getDefaultPortRange()
|
|
|
|
- } else if begin, end, err = sanitizePortRange(portBegin, portEnd); err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- logrus.Debugf("Setting up port allocator to range %v-%v, current %v-%v", begin, end, p.Begin, p.End)
|
|
|
|
- p.mutex.Lock()
|
|
|
|
- defer p.mutex.Unlock()
|
|
|
|
- if p.Begin == begin && p.End == end {
|
|
|
|
- return nil
|
|
|
|
- }
|
|
|
|
- p.ipMap = ipMapping{}
|
|
|
|
- p.Begin, p.End = begin, end
|
|
|
|
- return nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
func (p *PortAllocator) newPortMap() *portMap {
|
|
func (p *PortAllocator) newPortMap() *portMap {
|
|
defaultKey := getRangeKey(p.Begin, p.End)
|
|
defaultKey := getRangeKey(p.Begin, p.End)
|
|
pm := &portMap{
|
|
pm := &portMap{
|