aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/conf
diff options
context:
space:
mode:
Diffstat (limited to 'conf')
-rw-r--r--conf/config.go15
-rw-r--r--conf/parser.go8
2 files changed, 21 insertions, 2 deletions
diff --git a/conf/config.go b/conf/config.go
index a321bc0c..d802ec61 100644
--- a/conf/config.go
+++ b/conf/config.go
@@ -64,6 +64,21 @@ func (r *IPCidr) String() string {
return fmt.Sprintf("%s/%d", r.IP.String(), r.Cidr)
}
+func (r *IPCidr) Bits() uint8 {
+ if r.IP.To4() != nil {
+ return 32
+ } else {
+ return 128
+ }
+}
+
+func (r *IPCidr) IPNet() net.IPNet {
+ return net.IPNet{
+ IP: r.IP,
+ Mask: net.CIDRMask(int(r.Cidr), int(r.Bits())),
+ }
+}
+
func (e *Endpoint) String() string {
if strings.IndexByte(e.Host, ':') > 0 {
return fmt.Sprintf("[%s]:%d", e.Host, e.Port)
diff --git a/conf/parser.go b/conf/parser.go
index 6a397a9d..48cf88b6 100644
--- a/conf/parser.go
+++ b/conf/parser.go
@@ -40,17 +40,21 @@ func parseIPCidr(s string) (ipcidr *IPCidr, err error) {
if addr == nil {
return
}
+ maybeV4 := addr.To4()
+ if maybeV4 != nil {
+ addr = maybeV4
+ }
if len(cidrStr) > 0 {
err = &ParseError{"Invalid network prefix length", s}
cidr, err = strconv.Atoi(cidrStr)
if err != nil || cidr < 0 || cidr > 128 {
return
}
- if cidr > 32 && addr.To4() != nil {
+ if cidr > 32 && maybeV4 != nil {
return
}
} else {
- if addr.To4() != nil {
+ if maybeV4 != nil {
cidr = 32
} else {
cidr = 128