...
1 package netlink
2
3 import (
4 "fmt"
5 "net"
6 "strings"
7 )
8
9
10
11 type Addr struct {
12 *net.IPNet
13 Label string
14 Flags int
15 Scope int
16 Peer *net.IPNet
17 Broadcast net.IP
18 PreferedLft int
19 ValidLft int
20 LinkIndex int
21 }
22
23
24 func (a Addr) String() string {
25 return strings.TrimSpace(fmt.Sprintf("%s %s", a.IPNet, a.Label))
26 }
27
28
29
30 func ParseAddr(s string) (*Addr, error) {
31 label := ""
32 parts := strings.Split(s, " ")
33 if len(parts) > 1 {
34 s = parts[0]
35 label = parts[1]
36 }
37 m, err := ParseIPNet(s)
38 if err != nil {
39 return nil, err
40 }
41 return &Addr{IPNet: m, Label: label}, nil
42 }
43
44
45 func (a Addr) Equal(x Addr) bool {
46 sizea, _ := a.Mask.Size()
47 sizeb, _ := x.Mask.Size()
48
49 return a.IP.Equal(x.IP) && sizea == sizeb
50 }
51
52 func (a Addr) PeerEqual(x Addr) bool {
53 sizea, _ := a.Peer.Mask.Size()
54 sizeb, _ := x.Peer.Mask.Size()
55
56 return a.Peer.IP.Equal(x.Peer.IP) && sizea == sizeb
57 }
58
View as plain text