30 lines
475 B
Go
30 lines
475 B
Go
package common
|
|
|
|
import ipa "inet.af/netaddr"
|
|
|
|
func RangeIterate(ips interface{}) chan *ipa.IP {
|
|
var addrs ipa.IPRange
|
|
|
|
switch ips.(type) {
|
|
case ipa.IPRange:
|
|
addrs = ips.(ipa.IPRange)
|
|
case ipa.IPPrefix:
|
|
addrs = ips.(ipa.IPPrefix).Range()
|
|
}
|
|
|
|
ch := make(chan *ipa.IP)
|
|
go func() {
|
|
var head ipa.IP
|
|
head = addrs.From()
|
|
end := addrs.To()
|
|
for head != end {
|
|
if !head.IsUnspecified() {
|
|
ch <- &head
|
|
}
|
|
head = head.Next()
|
|
}
|
|
close(ch)
|
|
}()
|
|
return ch
|
|
}
|