Skip to content

Commit

Permalink
gather: slightly de-compose
Browse files Browse the repository at this point in the history
  • Loading branch information
ernado committed Sep 2, 2018
1 parent c143abb commit 132d259
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 17 deletions.
48 changes: 31 additions & 17 deletions gather/gather.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ func (a Addr) ZeroPortAddr() string {

type defaultGatherer struct{}

func (defaultGatherer) precedence(ip net.IP) int {
func precedence(ip net.IP) int {
for _, p := range precedences {
if p.ipNet.Contains(ip) {
return p.value
Expand All @@ -119,32 +119,46 @@ func (defaultGatherer) precedence(ip net.IP) int {
return 0
}

type netInterface interface {
Addrs() ([]net.Addr, error)
}

func ifaceToAddr(i netInterface, name string) ([]Addr, error) {
var addrs []Addr
netAddrs, err := i.Addrs()
if err != nil {
return addrs, err
}
for _, a := range netAddrs {
ip, _, err := net.ParseCIDR(a.String())
if err != nil {
return addrs, err
}
addr := Addr{
IP: ip,
Precedence: precedence(ip),
}
if ip.IsLinkLocalUnicast() {
// Zone must be set for link-local addresses.
addr.Zone = name
}
addrs = append(addrs, addr)
}
return addrs, nil
}

func (g defaultGatherer) Gather() ([]Addr, error) {
interfaces, err := net.Interfaces()
if err != nil {
return nil, err
}
addrs := make([]Addr, 0, 10)
for _, iface := range interfaces {
iAddrs, err := iface.Addrs()
ifaceAddrs, err := ifaceToAddr(&iface, iface.Name)
if err != nil {
return addrs, err
}
for _, a := range iAddrs {
ip, _, err := net.ParseCIDR(a.String())
if err != nil {
return addrs, err
}
addr := Addr{
IP: ip,
Precedence: g.precedence(ip),
}
if ip.IsLinkLocalUnicast() {
// Zone must be set for link-local addresses.
addr.Zone = iface.Name
}
addrs = append(addrs, addr)
}
addrs = append(addrs, ifaceAddrs...)
}
sort.Sort(Addrs(addrs))
return addrs, nil
Expand Down
7 changes: 7 additions & 0 deletions gather/gather_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,10 @@ func TestAddr_ZeroPortAddr(t *testing.T) {
})
}
}

func TestDefaultGatherer_Gather(t *testing.T) {
_, err := DefaultGatherer.Gather()
if err != nil {
t.Error(err)
}
}

0 comments on commit 132d259

Please sign in to comment.