func (c *CIDR) FirstIP() net.IP {
	var ip net.IP
	for ip = IncIP(c.ip.Mask(c.ipnet.Mask)); c.ipnet.Contains(ip); IncIP(ip) {
		break
	}
	return ip
}
FirstIP returns the first IP in this subnet that is not .0
package configure
import (
	"net"
	"github.com/gravitational/trace"
	"gopkg.in/alecthomas/kingpin.v2"
)
func CIDRFlag(s kingpin.Settings) *CIDR {
	vars := new(CIDR)
	s.SetValue(vars)
	return vars
}
func ParseCIDR(v string) (*CIDR, error) {
	ip, ipnet, err := net.ParseCIDR(v)
	if err != nil {
		return nil, trace.BadParameter("failed to parse CIDR(%v): %v", v, err.Error())
	}
	return &CIDR{val: v, ip: ip, ipnet: *ipnet}, nil
}
type CIDR struct {
	val   string
	ip    net.IP
	ipnet net.IPNet
}
func (c *CIDR) Set(v string) error {
	out, err := ParseCIDR(v)
	if err != nil {
		return trace.Wrap(err)
	}
	*c = *out
	return nil
}
func (c *CIDR) String() string {
	return c.ipnet.String()
}