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