12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package netlink
- import (
- "fmt"
- "net"
- "strings"
- )
- // Addr represents an IP address from netlink. Netlink ip addresses
- // include a mask, so it stores the address as a net.IPNet.
- type Addr struct {
- *net.IPNet
- Label string
- Flags int
- Scope int
- Peer *net.IPNet
- Broadcast net.IP
- }
- // String returns $ip/$netmask $label
- func (a Addr) String() string {
- return strings.TrimSpace(fmt.Sprintf("%s %s", a.IPNet, a.Label))
- }
- // ParseAddr parses the string representation of an address in the
- // form $ip/$netmask $label. The label portion is optional
- func ParseAddr(s string) (*Addr, error) {
- label := ""
- parts := strings.Split(s, " ")
- if len(parts) > 1 {
- s = parts[0]
- label = parts[1]
- }
- m, err := ParseIPNet(s)
- if err != nil {
- return nil, err
- }
- return &Addr{IPNet: m, Label: label}, nil
- }
- // Equal returns true if both Addrs have the same net.IPNet value.
- func (a Addr) Equal(x Addr) bool {
- sizea, _ := a.Mask.Size()
- sizeb, _ := x.Mask.Size()
- // ignore label for comparison
- return a.IP.Equal(x.IP) && sizea == sizeb
- }
- func (a Addr) PeerEqual(x Addr) bool {
- sizea, _ := a.Peer.Mask.Size()
- sizeb, _ := x.Peer.Mask.Size()
- // ignore label for comparison
- return a.Peer.IP.Equal(x.Peer.IP) && sizea == sizeb
- }
|