common/range.go

30 lines
475 B
Go
Raw Normal View History

2022-01-01 21:39:27 +00:00
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
}