blob: 43115e38df3ddb7bf65e57dd9e2d715fcd5c7f36 [file] [log] [blame]
David Why Use Two When One Will Do Presotto3e529b92014-09-29 10:24:01 -07001// package netconfig implements a network configuration watcher.
2// NOTE(p): This is also where we should put any code that changes
3// network configuration.
4
5package netconfig
6
Cosmos Nicolaou66bc1202014-09-30 20:42:43 -07007import "net"
David Why Use Two When One Will Do Presotto3e529b92014-09-29 10:24:01 -07008
9func isZeroSlice(a []byte) bool {
10 for _, i := range a {
11 if i != 0 {
12 return false
13 }
14 }
15 return true
16}
17
18// IsDefaultRoute returns true if r is a default route, i.e., that it matches any destination address.
19func IsDefaultIPRoute(r *IPRoute) bool {
20 if !r.Net.IP.Equal(net.IPv4zero) && !r.Net.IP.Equal(net.IPv6zero) {
21 return false
22 }
23 return isZeroSlice(r.Net.Mask[:])
24}
Cosmos Nicolaou66bc1202014-09-30 20:42:43 -070025
26// IsDefaultIPv4Route returns true if r is a default IPv4 route.
27func IsDefaultIPv4Route(r *IPRoute) bool {
28 if !r.Net.IP.Equal(net.IPv4zero) && !r.Net.IP.Equal(net.IPv6zero) {
29 return false
30 }
31 return len(r.Net.Mask) == 4 && isZeroSlice(r.Net.Mask[:])
32}
33
34// IsDefaultIPv6Route returns true if r is a default IPv6 route.
35func IsDefaultIPv6Route(r *IPRoute) bool {
36 if !r.Net.IP.Equal(net.IPv4zero) && !r.Net.IP.Equal(net.IPv6zero) {
37 return false
38 }
39 return len(r.Net.Mask) == 16 && isZeroSlice(r.Net.Mask[:])
40}