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. 9package netlink 10 11import ( 12 "net" 13 14 "github.com/vishvananda/netlink/nl" 15) 16 17const ( 18 // Family type definitions 19 FAMILY_ALL = nl.FAMILY_ALL 20 FAMILY_V4 = nl.FAMILY_V4 21 FAMILY_V6 = nl.FAMILY_V6 22) 23 24// ParseIPNet parses a string in ip/net format and returns a net.IPNet. 25// This is valuable because addresses in netlink are often IPNets and 26// ParseCIDR returns an IPNet with the IP part set to the base IP of the 27// range. 28func ParseIPNet(s string) (*net.IPNet, error) { 29 ip, ipNet, err := net.ParseCIDR(s) 30 if err != nil { 31 return nil, err 32 } 33 return &net.IPNet{IP: ip, Mask: ipNet.Mask}, nil 34} 35 36// NewIPNet generates an IPNet from an ip address using a netmask of 32. 37func NewIPNet(ip net.IP) *net.IPNet { 38 return &net.IPNet{IP: ip, Mask: net.CIDRMask(32, 32)} 39} 40