netlink.go 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. // Package netlink provides a simple library for netlink. Netlink is
  2. // the interface a user-space program in linux uses to communicate with
  3. // the kernel. It can be used to add and remove interfaces, set up ip
  4. // addresses and routes, and confiugre ipsec. Netlink communication
  5. // requires elevated privileges, so in most cases this code needs to
  6. // be run as root. The low level primitives for netlink are contained
  7. // in the nl subpackage. This package attempts to provide a high-level
  8. // interface that is loosly modeled on the iproute2 cli.
  9. package netlink
  10. import "net"
  11. // ParseIPNet parses a string in ip/net format and returns a net.IPNet.
  12. // This is valuable because addresses in netlink are often IPNets and
  13. // ParseCIDR returns an IPNet with the IP part set to the base IP of the
  14. // range.
  15. func ParseIPNet(s string) (*net.IPNet, error) {
  16. ip, ipNet, err := net.ParseCIDR(s)
  17. if err != nil {
  18. return nil, err
  19. }
  20. return &net.IPNet{IP: ip, Mask: ipNet.Mask}, nil
  21. }
  22. // NewIPNet generates an IPNet from an ip address using a netmask of 32 or 128.
  23. func NewIPNet(ip net.IP) *net.IPNet {
  24. if ip.To4() != nil {
  25. return &net.IPNet{IP: ip, Mask: net.CIDRMask(32, 32)}
  26. }
  27. return &net.IPNet{IP: ip, Mask: net.CIDRMask(128, 128)}
  28. }