libnl  3.2.24-rc1

Modules

 Bonding
 
 Bridging
 
 CAN
 Controller Area Network link module.
 
 Dummy
 
 
 MACVLAN
 MAC-based Virtual LAN link module.
 
 VETH
 Virtual Ethernet.
 
 VLAN
 Virtual LAN link module.
 
 VXLAN
 Virtual eXtensible Local Area Network link module.
 

Data Structures

struct  rtnl_link
 Link object. More...
 

Enumerations

enum  rtnl_link_stat_id_t {
  RTNL_LINK_RX_PACKETS,
  RTNL_LINK_TX_PACKETS,
  RTNL_LINK_RX_BYTES,
  RTNL_LINK_TX_BYTES,
  RTNL_LINK_RX_ERRORS,
  RTNL_LINK_TX_ERRORS,
  RTNL_LINK_RX_DROPPED,
  RTNL_LINK_TX_DROPPED,
  RTNL_LINK_RX_COMPRESSED,
  RTNL_LINK_TX_COMPRESSED,
  RTNL_LINK_RX_FIFO_ERR,
  RTNL_LINK_TX_FIFO_ERR,
  RTNL_LINK_RX_LEN_ERR,
  RTNL_LINK_RX_OVER_ERR,
  RTNL_LINK_RX_CRC_ERR,
  RTNL_LINK_RX_FRAME_ERR,
  RTNL_LINK_RX_MISSED_ERR,
  RTNL_LINK_TX_ABORT_ERR,
  RTNL_LINK_TX_CARRIER_ERR,
  RTNL_LINK_TX_HBEAT_ERR,
  RTNL_LINK_TX_WIN_ERR,
  RTNL_LINK_COLLISIONS,
  RTNL_LINK_MULTICAST,
  RTNL_LINK_IP6_INPKTS,
  RTNL_LINK_IP6_INHDRERRORS,
  RTNL_LINK_IP6_INTOOBIGERRORS,
  RTNL_LINK_IP6_INNOROUTES,
  RTNL_LINK_IP6_INADDRERRORS,
  RTNL_LINK_IP6_INUNKNOWNPROTOS,
  RTNL_LINK_IP6_INTRUNCATEDPKTS,
  RTNL_LINK_IP6_INDISCARDS,
  RTNL_LINK_IP6_INDELIVERS,
  RTNL_LINK_IP6_OUTFORWDATAGRAMS,
  RTNL_LINK_IP6_OUTPKTS,
  RTNL_LINK_IP6_OUTDISCARDS,
  RTNL_LINK_IP6_OUTNOROUTES,
  RTNL_LINK_IP6_REASMTIMEOUT,
  RTNL_LINK_IP6_REASMREQDS,
  RTNL_LINK_IP6_REASMOKS,
  RTNL_LINK_IP6_REASMFAILS,
  RTNL_LINK_IP6_FRAGOKS,
  RTNL_LINK_IP6_FRAGFAILS,
  RTNL_LINK_IP6_FRAGCREATES,
  RTNL_LINK_IP6_INMCASTPKTS,
  RTNL_LINK_IP6_OUTMCASTPKTS,
  RTNL_LINK_IP6_INBCASTPKTS,
  RTNL_LINK_IP6_OUTBCASTPKTS,
  RTNL_LINK_IP6_INOCTETS,
  RTNL_LINK_IP6_OUTOCTETS,
  RTNL_LINK_IP6_INMCASTOCTETS,
  RTNL_LINK_IP6_OUTMCASTOCTETS,
  RTNL_LINK_IP6_INBCASTOCTETS,
  RTNL_LINK_IP6_OUTBCASTOCTETS,
  RTNL_LINK_ICMP6_INMSGS,
  RTNL_LINK_ICMP6_INERRORS,
  RTNL_LINK_ICMP6_OUTMSGS,
  RTNL_LINK_ICMP6_OUTERRORS,
  __RTNL_LINK_STATS_MAX
}
 

Functions

int rtnl_link_info_parse (struct rtnl_link *link, struct nlattr **tb)
 
int rtnl_link_fill_info (struct nl_msg *msg, struct rtnl_link *link)
 

Variables

struct nla_policy rtln_link_policy [IFLA_MAX+1]
 

Get / List

int rtnl_link_alloc_cache (struct nl_sock *sk, int family, struct nl_cache **result)
 Allocate link cache and fill in all configured links. More...
 
struct rtnl_linkrtnl_link_get (struct nl_cache *cache, int ifindex)
 Lookup link in cache by interface index. More...
 
struct rtnl_linkrtnl_link_get_by_name (struct nl_cache *cache, const char *name)
 Lookup link in cache by link name. More...
 
int rtnl_link_build_get_request (int ifindex, const char *name, struct nl_msg **result)
 Construct RTM_GETLINK netlink message. More...
 
int rtnl_link_get_kernel (struct nl_sock *sk, int ifindex, const char *name, struct rtnl_link **result)
 Get a link object directly from kernel. More...
 
char * rtnl_link_i2name (struct nl_cache *cache, int ifindex, char *dst, size_t len)
 Translate interface index to corresponding link name. More...
 
int rtnl_link_name2i (struct nl_cache *cache, const char *name)
 Translate link name to corresponding interface index. More...
 

Add / Modify

int rtnl_link_build_add_request (struct rtnl_link *link, int flags, struct nl_msg **result)
 Build a netlink message requesting the addition of new virtual link. More...
 
int rtnl_link_add (struct nl_sock *sk, struct rtnl_link *link, int flags)
 Add virtual link. More...
 
int rtnl_link_build_change_request (struct rtnl_link *orig, struct rtnl_link *changes, int flags, struct nl_msg **result)
 Build a netlink message requesting the modification of link. More...
 
int rtnl_link_change (struct nl_sock *sk, struct rtnl_link *orig, struct rtnl_link *changes, int flags)
 Change link. More...
 

Delete

int rtnl_link_build_delete_request (const struct rtnl_link *link, struct nl_msg **result)
 Build a netlink message requesting the deletion of a link. More...
 
int rtnl_link_delete (struct nl_sock *sk, const struct rtnl_link *link)
 Delete link. More...
 

Link Object

struct rtnl_linkrtnl_link_alloc (void)
 Allocate link object. More...
 
void rtnl_link_put (struct rtnl_link *link)
 Return a link object reference. More...
 
void rtnl_link_set_name (struct rtnl_link *link, const char *name)
 Set name of link object. More...
 
char * rtnl_link_get_name (struct rtnl_link *link)
 Return name of link object. More...
 
void rtnl_link_set_group (struct rtnl_link *link, uint32_t group)
 Set the group identifier of a link object. More...
 
uint32_t rtnl_link_get_group (struct rtnl_link *link)
 Return the group identifier of link object. More...
 
void rtnl_link_set_addr (struct rtnl_link *link, struct nl_addr *addr)
 Set link layer address of link object. More...
 
struct nl_addr * rtnl_link_get_addr (struct rtnl_link *link)
 Return link layer address of link object. More...
 
void rtnl_link_set_broadcast (struct rtnl_link *link, struct nl_addr *addr)
 Set link layer broadcast address of link object. More...
 
struct nl_addr * rtnl_link_get_broadcast (struct rtnl_link *link)
 Return link layer broadcast address of link object. More...
 
void rtnl_link_set_flags (struct rtnl_link *link, unsigned int flags)
 Set flags of link object. More...
 
void rtnl_link_unset_flags (struct rtnl_link *link, unsigned int flags)
 Unset flags of link object. More...
 
unsigned int rtnl_link_get_flags (struct rtnl_link *link)
 Return flags of link object. More...
 
void rtnl_link_set_family (struct rtnl_link *link, int family)
 Set address family of link object. More...
 
int rtnl_link_get_family (struct rtnl_link *link)
 Return address family of link object. More...
 
void rtnl_link_set_arptype (struct rtnl_link *link, unsigned int arptype)
 Set hardware type of link object. More...
 
unsigned int rtnl_link_get_arptype (struct rtnl_link *link)
 Get hardware type of link object. More...
 
void rtnl_link_set_ifindex (struct rtnl_link *link, int ifindex)
 Set interface index of link object. More...
 
int rtnl_link_get_ifindex (struct rtnl_link *link)
 Return interface index of link object. More...
 
void rtnl_link_set_mtu (struct rtnl_link *link, unsigned int mtu)
 Set Maximum Transmission Unit of link object. More...
 
unsigned int rtnl_link_get_mtu (struct rtnl_link *link)
 Return maximum transmission unit of link object. More...
 
void rtnl_link_set_txqlen (struct rtnl_link *link, unsigned int txqlen)
 Set transmission queue length. More...
 
unsigned int rtnl_link_get_txqlen (struct rtnl_link *link)
 Return transmission queue length. More...
 
void rtnl_link_set_link (struct rtnl_link *link, int ifindex)
 
int rtnl_link_get_link (struct rtnl_link *link)
 
void rtnl_link_set_master (struct rtnl_link *link, int ifindex)
 Set master link of link object. More...
 
int rtnl_link_get_master (struct rtnl_link *link)
 Return master link of link object. More...
 
void rtnl_link_set_carrier (struct rtnl_link *link, uint8_t status)
 Set carrier of link object. More...
 
uint8_t rtnl_link_get_carrier (struct rtnl_link *link)
 Return carrier status of link object. More...
 
void rtnl_link_set_operstate (struct rtnl_link *link, uint8_t status)
 Set operational status of link object. More...
 
uint8_t rtnl_link_get_operstate (struct rtnl_link *link)
 Return operational status of link object. More...
 
void rtnl_link_set_linkmode (struct rtnl_link *link, uint8_t mode)
 Set link mode of link object. More...
 
uint8_t rtnl_link_get_linkmode (struct rtnl_link *link)
 Return link mode of link object. More...
 
const char * rtnl_link_get_ifalias (struct rtnl_link *link)
 Return alias name of link object (SNMP IfAlias) More...
 
void rtnl_link_set_ifalias (struct rtnl_link *link, const char *alias)
 Set alias name of link object (SNMP IfAlias) More...
 
void rtnl_link_set_qdisc (struct rtnl_link *link, const char *name)
 Set queueing discipline name of link object. More...
 
char * rtnl_link_get_qdisc (struct rtnl_link *link)
 Return name of queueing discipline of link object. More...
 
int rtnl_link_get_num_vf (struct rtnl_link *link, uint32_t *num_vf)
 Return number of PCI virtual functions of link object. More...
 
uint64_t rtnl_link_get_stat (struct rtnl_link *link, rtnl_link_stat_id_t id)
 Return value of link statistics counter. More...
 
int rtnl_link_set_stat (struct rtnl_link *link, rtnl_link_stat_id_t id, const uint64_t value)
 Set value of link statistics counter. More...
 
int rtnl_link_set_type (struct rtnl_link *link, const char *type)
 Set type of link object. More...
 
char * rtnl_link_get_type (struct rtnl_link *link)
 Return type of link. More...
 
void rtnl_link_set_promiscuity (struct rtnl_link *link, uint32_t count)
 Set link promiscuity count. More...
 
uint32_t rtnl_link_get_promiscuity (struct rtnl_link *link)
 Return link promiscuity count. More...
 
void rtnl_link_set_num_tx_queues (struct rtnl_link *link, uint32_t nqueues)
 Set number of TX queues. More...
 
uint32_t rtnl_link_get_num_tx_queues (struct rtnl_link *link)
 Return number of TX queues. More...
 
void rtnl_link_set_num_rx_queues (struct rtnl_link *link, uint32_t nqueues)
 Set number of RX queues. More...
 
uint32_t rtnl_link_get_num_rx_queues (struct rtnl_link *link)
 Return number of RX queues. More...
 
struct nl_data * rtnl_link_get_phys_port_id (struct rtnl_link *link)
 Return physical port id of link object. More...
 
void rtnl_link_set_ns_fd (struct rtnl_link *link, int fd)
 
int rtnl_link_get_ns_fd (struct rtnl_link *link)
 
void rtnl_link_set_ns_pid (struct rtnl_link *link, pid_t pid)
 
pid_t rtnl_link_get_ns_pid (struct rtnl_link *link)
 

Master/Slave

int rtnl_link_enslave_ifindex (struct nl_sock *sock, int master, int slave)
 Enslave slave link to master link. More...
 
int rtnl_link_enslave (struct nl_sock *sock, struct rtnl_link *master, struct rtnl_link *slave)
 Enslave slave link to master link. More...
 
int rtnl_link_release_ifindex (struct nl_sock *sock, int slave)
 Release slave link from its master. More...
 
int rtnl_link_release (struct nl_sock *sock, struct rtnl_link *slave)
 Release slave link from its master. More...
 

Utilities

char * rtnl_link_flags2str (int flags, char *buf, size_t len)
 
int rtnl_link_str2flags (const char *name)
 
char * rtnl_link_stat2str (int st, char *buf, size_t len)
 
int rtnl_link_str2stat (const char *name)
 
char * rtnl_link_operstate2str (uint8_t st, char *buf, size_t len)
 
int rtnl_link_str2operstate (const char *name)
 
char * rtnl_link_mode2str (uint8_t st, char *buf, size_t len)
 
int rtnl_link_str2mode (const char *name)
 
char * rtnl_link_carrier2str (uint8_t st, char *buf, size_t len)
 
int rtnl_link_str2carrier (const char *name)
 

Deprecated Functions

int rtnl_link_set_info_type (struct rtnl_link *link, const char *type)
 
char * rtnl_link_get_info_type (struct rtnl_link *link)
 
void rtnl_link_set_weight (struct rtnl_link *link, unsigned int weight)
 
unsigned int rtnl_link_get_weight (struct rtnl_link *link)
 

Detailed Description

Link Documentation (Netlink Routing Development Guide)

Enumeration Type Documentation

Enumerator
RTNL_LINK_RX_PACKETS 

Packets received

RTNL_LINK_TX_PACKETS 

Packets sent

RTNL_LINK_RX_BYTES 

Bytes received

RTNL_LINK_TX_BYTES 

Bytes sent

RTNL_LINK_RX_ERRORS 

Receive errors

RTNL_LINK_TX_ERRORS 

Send errors

RTNL_LINK_RX_DROPPED 

Received packets dropped

RTNL_LINK_TX_DROPPED 

Packets dropped during transmit

RTNL_LINK_RX_COMPRESSED 

Compressed packets received

RTNL_LINK_TX_COMPRESSED 

Compressed packets sent

RTNL_LINK_RX_FIFO_ERR 

Receive FIFO errors

RTNL_LINK_TX_FIFO_ERR 

Send FIFO errors

RTNL_LINK_RX_LEN_ERR 

Length errors

RTNL_LINK_RX_OVER_ERR 

Over errors

RTNL_LINK_RX_CRC_ERR 

CRC errors

RTNL_LINK_RX_FRAME_ERR 

Frame errors

RTNL_LINK_RX_MISSED_ERR 

Missed errors

RTNL_LINK_TX_ABORT_ERR 

Aborted errors

RTNL_LINK_TX_CARRIER_ERR 

Carrier errors

RTNL_LINK_TX_HBEAT_ERR 

Heartbeat errors

RTNL_LINK_TX_WIN_ERR 

Window errors

RTNL_LINK_COLLISIONS 

Send collisions

RTNL_LINK_MULTICAST 

Multicast

RTNL_LINK_IP6_INPKTS 

IPv6 SNMP InReceives

RTNL_LINK_IP6_INHDRERRORS 

IPv6 SNMP InHdrErrors

RTNL_LINK_IP6_INTOOBIGERRORS 

IPv6 SNMP InTooBigErrors

RTNL_LINK_IP6_INNOROUTES 

IPv6 SNMP InNoRoutes

RTNL_LINK_IP6_INADDRERRORS 

IPv6 SNMP InAddrErrors

RTNL_LINK_IP6_INUNKNOWNPROTOS 

IPv6 SNMP InUnknownProtos

RTNL_LINK_IP6_INTRUNCATEDPKTS 

IPv6 SNMP InTruncatedPkts

RTNL_LINK_IP6_INDISCARDS 

IPv6 SNMP InDiscards

RTNL_LINK_IP6_INDELIVERS 

IPv6 SNMP InDelivers

RTNL_LINK_IP6_OUTFORWDATAGRAMS 

IPv6 SNMP OutForwDatagrams

RTNL_LINK_IP6_OUTPKTS 

IPv6 SNMP OutRequests

RTNL_LINK_IP6_OUTDISCARDS 

IPv6 SNMP OutDiscards

RTNL_LINK_IP6_OUTNOROUTES 

IPv6 SNMP OutNoRoutes

RTNL_LINK_IP6_REASMTIMEOUT 

IPv6 SNMP ReasmTimeout

RTNL_LINK_IP6_REASMREQDS 

IPv6 SNMP ReasmReqds

RTNL_LINK_IP6_REASMOKS 

IPv6 SNMP ReasmOKs

RTNL_LINK_IP6_REASMFAILS 

IPv6 SNMP ReasmFails

RTNL_LINK_IP6_FRAGOKS 

IPv6 SNMP FragOKs

RTNL_LINK_IP6_FRAGFAILS 

IPv6 SNMP FragFails

RTNL_LINK_IP6_FRAGCREATES 

IPv6 SNMP FragCreates

RTNL_LINK_IP6_INMCASTPKTS 

IPv6 SNMP InMcastPkts

RTNL_LINK_IP6_OUTMCASTPKTS 

IPv6 SNMP OutMcastPkts

RTNL_LINK_IP6_INBCASTPKTS 

IPv6 SNMP InBcastPkts

RTNL_LINK_IP6_OUTBCASTPKTS 

IPv6 SNMP OutBcastPkts

RTNL_LINK_IP6_INOCTETS 

IPv6 SNMP InOctets

RTNL_LINK_IP6_OUTOCTETS 

IPv6 SNMP OutOctets

RTNL_LINK_IP6_INMCASTOCTETS 

IPv6 SNMP InMcastOctets

RTNL_LINK_IP6_OUTMCASTOCTETS 

IPv6 SNMP OutMcastOctets

RTNL_LINK_IP6_INBCASTOCTETS 

IPv6 SNMP InBcastOctets

RTNL_LINK_IP6_OUTBCASTOCTETS 

IPv6 SNMP OutBcastOctets

RTNL_LINK_ICMP6_INMSGS 

ICMPv6 SNMP InMsgs

RTNL_LINK_ICMP6_INERRORS 

ICMPv6 SNMP InErrors

RTNL_LINK_ICMP6_OUTMSGS 

ICMPv6 SNMP OutMsgs

RTNL_LINK_ICMP6_OUTERRORS 

ICMPv6 SNMP OutErrors

Definition at line 38 of file link.h.

Function Documentation

int rtnl_link_alloc_cache ( struct nl_sock *  sk,
int  family,
struct nl_cache **  result 
)

Allocate link cache and fill in all configured links.

Parameters
skNetlink socket.
familyLink address family or AF_UNSPEC
resultPointer to store resulting cache.

Allocates and initializes a new link cache. A netlink message is sent to the kernel requesting a full dump of all configured links. The returned messages are parsed and filled into the cache. If the operation succeeds the resulting cache will a link object for each link configured in the kernel.

If family is set to an address family other than AF_UNSPEC the contents of the cache can be limited to a specific address family. Currently the following address families are supported:

  • AF_BRIDGE
  • AF_INET6

Get List of Links (Netlink Routing Development Guide)

See Also
rtnl_link_get()
rtnl_link_get_by_name()
Returns
0 on success or a negative error code.

Definition at line 1017 of file link.c.

References nl_cache_alloc(), nl_cache_free(), and nl_cache_refill().

+ Here is the call graph for this function:

struct rtnl_link* rtnl_link_get ( struct nl_cache *  cache,
int  ifindex 
)
read

Lookup link in cache by interface index.

Parameters
cacheLink cache
ifindexInterface index

Searches through the provided cache looking for a link with matching interface index.

Attention
The reference counter of the returned link object will be incremented. Use rtnl_link_put() to release the reference.

Get List of Links (Netlink Routing Development Guide)

See Also
rtnl_link_get_by_name()
Returns
Link object or NULL if no match was found.

Definition at line 1052 of file link.c.

References nl_object_get().

Referenced by rtnl_link_i2name().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

struct rtnl_link* rtnl_link_get_by_name ( struct nl_cache *  cache,
const char *  name 
)
read

Lookup link in cache by link name.

Parameters
cacheLink cache
nameName of link

Searches through the provided cache looking for a link with matching link name

Attention
The reference counter of the returned link object will be incremented. Use rtnl_link_put() to release the reference.

Get List of Links (Netlink Routing Development Guide)

See Also
rtnl_link_get()
Returns
Link object or NULL if no match was found.

Definition at line 1084 of file link.c.

References nl_object_get().

Referenced by rtnl_link_name2i().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int rtnl_link_build_get_request ( int  ifindex,
const char *  name,
struct nl_msg **  result 
)

Construct RTM_GETLINK netlink message.

Parameters
ifindexInterface index
nameName of link
resultPointer to store resulting netlink message

The behaviour of this function is identical to rtnl_link_get_kernel() with the exception that it will not send the message but return it in the provided return pointer instead.

See Also
rtnl_link_get_kernel()
Returns
0 on success or a negative error code.

Definition at line 1116 of file link.c.

References NLA_PUT_STRING, nlmsg_alloc_simple(), nlmsg_append(), and nlmsg_free().

Referenced by rtnl_link_get_kernel().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int rtnl_link_get_kernel ( struct nl_sock *  sk,
int  ifindex,
const char *  name,
struct rtnl_link **  result 
)

Get a link object directly from kernel.

Parameters
skNetlink socket
ifindexInterface index
nameName of link
resultPointer to store resulting link object

This function builds a RTM_GETLINK netlink message to request a specific link directly from the kernel. The returned answer is parsed into a struct rtnl_link object and returned via the result pointer or -NLE_OBJ_NOTFOUND is returned if no matching link was found.

Lookup Single Link (Direct Lookup) (Netlink Routing Development Guide)

Returns
0 on success or a negative error code.

Definition at line 1165 of file link.c.

References nl_pickup(), nl_send_auto(), nlmsg_free(), and rtnl_link_build_get_request().

Referenced by rtnl_link_bond_enslave_ifindex(), and rtnl_link_enslave_ifindex().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

char* rtnl_link_i2name ( struct nl_cache *  cache,
int  ifindex,
char *  dst,
size_t  len 
)

Translate interface index to corresponding link name.

Parameters
cacheLink cache
ifindexInterface index
dstString to store name
lenLength of destination string

Translates the specified interface index to the corresponding link name and stores the name in the destination string.

Translating interface index to link name (Netlink Routing Development Guide)

See Also
rtnl_link_name2i()
Returns
Name of link or NULL if no match was found.

Definition at line 1207 of file link.c.

References rtnl_link_get(), and rtnl_link_put().

+ Here is the call graph for this function:

int rtnl_link_name2i ( struct nl_cache *  cache,
const char *  name 
)

Translate link name to corresponding interface index.

Parameters
cacheLink cache
nameName of link

Translating interface index to link name (Netlink Routing Development Guide)

See Also
rtnl_link_i2name()
Returns
Interface index or 0 if no match was found.

Definition at line 1230 of file link.c.

References rtnl_link_get_by_name(), and rtnl_link_put().

+ Here is the call graph for this function:

int rtnl_link_build_add_request ( struct rtnl_link link,
int  flags,
struct nl_msg **  result 
)

Build a netlink message requesting the addition of new virtual link.

Parameters
linknew link to add
flagsadditional netlink message flags
resultpointer to store resulting netlink message

The behaviour of this function is identical to rtnl_link_add() with the exception that it will not send the message but return it in the provided return pointer instead.

See Also
rtnl_link_add()
Note
This operation is not supported on all kernel versions.
Returns
0 on success or a negative error code.

Definition at line 1375 of file link.c.

Referenced by rtnl_link_add().

+ Here is the caller graph for this function:

int rtnl_link_add ( struct nl_sock *  sk,
struct rtnl_link link,
int  flags 
)

Add virtual link.

Parameters
sknetlink socket.
linknew link to add
flagsadditional netlink message flags

Builds a RTM_NEWLINK netlink message requesting the addition of a new virtual link.

After sending, the function will wait for the ACK or an eventual error message to be received and will therefore block until the operation has been completed.

Definition at line 1404 of file link.c.

References nl_send_sync(), and rtnl_link_build_add_request().

Referenced by rtnl_link_bond_add(), rtnl_link_bridge_add(), and rtnl_link_veth_add().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int rtnl_link_build_change_request ( struct rtnl_link orig,
struct rtnl_link changes,
int  flags,
struct nl_msg **  result 
)

Build a netlink message requesting the modification of link.

Parameters
origoriginal link to change
changeslink containing the changes to be made
flagsadditional netlink message flags
resultpointer to store resulting netlink message

The behaviour of this function is identical to rtnl_link_change() with the exception that it will not send the message but return it in the provided return pointer instead.

See Also
rtnl_link_change()
Note
The resulting message will have message type set to RTM_NEWLINK which may not work with older kernels. You may have to modify it to RTM_SETLINK (does not allow changing link info attributes) to have the change request work with older kernels.
Returns
0 on success or a negative error code.

Definition at line 1436 of file link.c.

Referenced by rtnl_link_change().

+ Here is the caller graph for this function:

int rtnl_link_change ( struct nl_sock *  sk,
struct rtnl_link orig,
struct rtnl_link changes,
int  flags 
)

Change link.

Parameters
sknetlink socket.
origoriginal link to be changed
changeslink containing the changes to be made
flagsadditional netlink message flags

Builds a RTM_NEWLINK netlink message requesting the change of a network link. If -EOPNOTSUPP is returned by the kernel, the message type will be changed to RTM_SETLINK and the message is resent to work around older kernel versions.

The link to be changed is looked up based on the interface index supplied in the orig link. Optionaly the link name is used but only if no interface index is provided, otherwise providing an link name will result in the link name being changed.

If no matching link exists, the function will return -NLE_OBJ_NOTFOUND.

After sending, the function will wait for the ACK or an eventual error message to be received and will therefore block until the operation has been completed.

Definition at line 1503 of file link.c.

References nl_send_auto_complete(), nlmsg_free(), and rtnl_link_build_change_request().

Referenced by rtnl_link_bond_enslave_ifindex(), and rtnl_link_enslave_ifindex().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int rtnl_link_build_delete_request ( const struct rtnl_link link,
struct nl_msg **  result 
)

Build a netlink message requesting the deletion of a link.

Parameters
linkLink to delete
resultPointer to store resulting netlink message

The behaviour of this function is identical to rtnl_link_delete() with the exception that it will not send the message but return it in the provided return pointer instead.

See Also
rtnl_link_delete()
Returns
0 on success or a negative error code.

Definition at line 1549 of file link.c.

References NLA_PUT_STRING, nlmsg_alloc_simple(), nlmsg_append(), and nlmsg_free().

Referenced by rtnl_link_delete().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int rtnl_link_delete ( struct nl_sock *  sk,
const struct rtnl_link link 
)

Delete link.

Parameters
skNetlink socket
linkLink to delete

Builds a RTM_DELLINK netlink message requesting the deletion of a network link which has been previously added to the kernel and sends the message to the kernel.

If no matching link exists, the function will return -NLE_OBJ_NOTFOUND.

After sending, the function will wait for the ACK or an eventual error message to be received and will therefore block until the operation has been completed.

Definition at line 1603 of file link.c.

References nl_send_sync(), and rtnl_link_build_delete_request().

+ Here is the call graph for this function:

struct rtnl_link* rtnl_link_alloc ( void  )
read

Allocate link object.

See Also
rtnl_link_put()
Returns
New link object or NULL if allocation failed

Definition at line 1627 of file link.c.

References nl_object_alloc().

Referenced by rtnl_link_bond_alloc(), rtnl_link_bridge_alloc(), rtnl_link_enslave_ifindex(), rtnl_link_macvlan_alloc(), rtnl_link_veth_alloc(), rtnl_link_vlan_alloc(), and rtnl_link_vxlan_alloc().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void rtnl_link_put ( struct rtnl_link link)
void rtnl_link_set_name ( struct rtnl_link link,
const char *  name 
)

Set name of link object.

Parameters
linkLink object
nameNew name
Note
To change the name of a link in the kernel, set the interface index to the link you wish to change, modify the link name using this function and pass the link object to rtnl_link_change() or rtnl_link_add().

Link Name (Netlink Routing Development Guide)

See Also
rtnl_link_get_name()
rtnl_link_set_ifindex()

Definition at line 1655 of file link.c.

Referenced by rtnl_link_bond_add(), rtnl_link_bridge_add(), and rtnl_link_veth_add().

+ Here is the caller graph for this function:

char* rtnl_link_get_name ( struct rtnl_link link)

Return name of link object.

Parameters
linkLink object

Link Name (Netlink Routing Development Guide)

See Also
rtnl_link_set_name()
Returns
Link name or NULL if name is not specified

Definition at line 1669 of file link.c.

Referenced by rtnl_link_bond_add().

+ Here is the caller graph for this function:

void rtnl_link_set_group ( struct rtnl_link link,
uint32_t  group 
)

Set the group identifier of a link object.

Parameters
linkLink object
groupGroup identifier

Definition at line 1679 of file link.c.

uint32_t rtnl_link_get_group ( struct rtnl_link link)

Return the group identifier of link object.

Parameters
linkLink object
Returns
Group identifier or 0 if not set.

Definition at line 1691 of file link.c.

void rtnl_link_set_addr ( struct rtnl_link link,
struct nl_addr *  addr 
)

Set link layer address of link object.

Parameters
linkLink object
addrNew link layer address

The function increments the reference counter of the address object and overwrites any existing link layer address previously assigned.

Link layer address (Netlink Routing Development Guide)

See Also
rtnl_link_get_addr()

Definition at line 1719 of file link.c.

struct nl_addr* rtnl_link_get_addr ( struct rtnl_link link)
read

Return link layer address of link object.

Parameters
linkLink object

Definition at line 1733 of file link.c.

void rtnl_link_set_broadcast ( struct rtnl_link link,
struct nl_addr *  addr 
)

Set link layer broadcast address of link object.

Parameters
linkLink object
addrNew broadcast address

The function increments the reference counter of the address object and overwrites any existing link layer broadcast address previously assigned.

Link Layer Broadcast Address (Netlink Routing Development Guide)

See Also
rtnl_link_get_broadcast()

Definition at line 1750 of file link.c.

struct nl_addr* rtnl_link_get_broadcast ( struct rtnl_link link)
read

Return link layer broadcast address of link object.

Parameters
linkLink object

Definition at line 1764 of file link.c.

void rtnl_link_set_flags ( struct rtnl_link link,
unsigned int  flags 
)

Set flags of link object.

Parameters
linkLink object
flagsFlags
See Also
rtnl_link_get_flags()
rtnl_link_unset_flags()

Definition at line 1777 of file link.c.

void rtnl_link_unset_flags ( struct rtnl_link link,
unsigned int  flags 
)

Unset flags of link object.

Parameters
linkLink object
flagsFlags
See Also
rtnl_link_set_flags()
rtnl_link_get_flags()

Definition at line 1792 of file link.c.

unsigned int rtnl_link_get_flags ( struct rtnl_link link)

Return flags of link object.

Parameters
linkLink object

Link Flags (Netlink Routing Development Guide)

See Also
rtnl_link_set_flags()
rtnl_link_unset_flags()
Returns
Link flags or 0 if none have been set.

Definition at line 1808 of file link.c.

void rtnl_link_set_family ( struct rtnl_link link,
int  family 
)

Set address family of link object.

See Also
rtnl_link_get_family()

Definition at line 1818 of file link.c.

int rtnl_link_get_family ( struct rtnl_link link)

Return address family of link object.

Parameters
linkLink object
See Also
rtnl_link_set_family()
Returns
Address family or AF_UNSPEC if not specified.

Definition at line 1839 of file link.c.

void rtnl_link_set_arptype ( struct rtnl_link link,
unsigned int  arptype 
)

Set hardware type of link object.

Parameters
linkLink object
arptypeNew hardware type (ARPHRD_*)

Hardware Type (Netlink Routing Development Guide)

Definition at line 1853 of file link.c.

unsigned int rtnl_link_get_arptype ( struct rtnl_link link)

Get hardware type of link object.

Parameters
linkLink object

Hardware Type (Netlink Routing Development Guide)

See Also
rtnl_link_set_arptype()
Returns
Hardware type (ARPHRD_ETHER *) or ARPHRD_VOID

Definition at line 1867 of file link.c.

void rtnl_link_set_ifindex ( struct rtnl_link link,
int  ifindex 
)

Set interface index of link object.

Parameters
linkLink object
ifindexInterface index

Interface Index (Netlink Routing Development Guide)

See Also
rtnl_link_get_ifindex()

Definition at line 1883 of file link.c.

Referenced by rtnl_link_bond_enslave_ifindex(), and rtnl_link_enslave_ifindex().

+ Here is the caller graph for this function:

int rtnl_link_get_ifindex ( struct rtnl_link link)

Return interface index of link object.

Parameters
linkLink object

Interface Index (Netlink Routing Development Guide)

See Also
rtnl_link_set_ifindex()
Returns
Interface index or 0 if not set.

Definition at line 1898 of file link.c.

Referenced by rtnl_link_bond_enslave(), rtnl_link_bond_release(), rtnl_link_enslave(), and rtnl_link_release().

+ Here is the caller graph for this function:

void rtnl_link_set_mtu ( struct rtnl_link link,
unsigned int  mtu 
)

Set Maximum Transmission Unit of link object.

Parameters
linkLink object
mtuNew MTU value in number of bytes

Maximum Transmission Unit (Netlink Routing Development Guide)

See Also
rtnl_link_get_mtu()

Definition at line 1911 of file link.c.

unsigned int rtnl_link_get_mtu ( struct rtnl_link link)

Return maximum transmission unit of link object.

Parameters
linkLink object

Maximum Transmission Unit (Netlink Routing Development Guide)

See Also
rtnl_link_set_mtu()
Returns
MTU in bytes or 0 if not set

Definition at line 1925 of file link.c.

void rtnl_link_set_txqlen ( struct rtnl_link link,
unsigned int  txqlen 
)

Set transmission queue length.

Parameters
linkLink object
txqlenNew queue length

The unit is dependant on the link type. The most common units is number of packets.

Transmission Queue Length (Netlink Routing Development Guide)

Definition at line 1940 of file link.c.

unsigned int rtnl_link_get_txqlen ( struct rtnl_link link)

Return transmission queue length.

Parameters
linkLink object

The unit is dependant on the link type. The most common units is number of packets.

Transmission Queue Length (Netlink Routing Development Guide)

Returns
queue length or 0 if not specified.

Definition at line 1956 of file link.c.

void rtnl_link_set_master ( struct rtnl_link link,
int  ifindex 
)

Set master link of link object.

Parameters
linkLink object
ifindexInterface index of master link
See Also
rtnl_link_get_master()

Definition at line 1979 of file link.c.

Referenced by rtnl_link_bond_enslave_ifindex(), and rtnl_link_enslave_ifindex().

+ Here is the caller graph for this function:

int rtnl_link_get_master ( struct rtnl_link link)

Return master link of link object.

Parameters
linkLink object
See Also
rtnl_link_set_master()
Returns
Interface index of master link or 0 if not specified

Definition at line 1992 of file link.c.

Referenced by rtnl_link_bond_enslave_ifindex(), and rtnl_link_enslave_ifindex().

+ Here is the caller graph for this function:

void rtnl_link_set_carrier ( struct rtnl_link link,
uint8_t  status 
)

Set carrier of link object.

Parameters
linkLink object
statusNew carrier status
See Also
rtnl_link_get_carrier()

Definition at line 2004 of file link.c.

uint8_t rtnl_link_get_carrier ( struct rtnl_link link)

Return carrier status of link object.

Parameters
linkLink object
See Also
rtnl_link_set_master()
Returns
Carrier state.

Definition at line 2017 of file link.c.

void rtnl_link_set_operstate ( struct rtnl_link link,
uint8_t  status 
)

Set operational status of link object.

Parameters
linkLink object
statusNew opertional status

Operational Status (Netlink Routing Development Guide)}

See Also
rtnl_link_get_operstate()

Definition at line 2030 of file link.c.

uint8_t rtnl_link_get_operstate ( struct rtnl_link link)

Return operational status of link object.

Parameters
linkLink object

Operational Status (Netlink Routing Development Guide)

See Also
rtnl_link_set_operstate()
Returns
Opertional state or IF_OPER_UNKNOWN

Definition at line 2044 of file link.c.

void rtnl_link_set_linkmode ( struct rtnl_link link,
uint8_t  mode 
)

Set link mode of link object.

Parameters
linkLink object
modeNew link mode

Mode (Netlink Routing Development Guide)

See Also
rtnl_link_get_linkmode()

Definition at line 2057 of file link.c.

uint8_t rtnl_link_get_linkmode ( struct rtnl_link link)

Return link mode of link object.

Parameters
linkLink object

Mode (Netlink Routing Development Guide)

See Also
rtnl_link_get_linkmode()
Returns
Link mode or IF_LINK_MODE_DEFAULT

Definition at line 2071 of file link.c.

const char* rtnl_link_get_ifalias ( struct rtnl_link link)

Return alias name of link object (SNMP IfAlias)

Parameters
linkLink object

Alias (Netlink Routing Development Guide)

See Also
rtnl_link_set_ifalias()
Returns
Alias name or NULL if not set.

Definition at line 2084 of file link.c.

void rtnl_link_set_ifalias ( struct rtnl_link link,
const char *  alias 
)

Set alias name of link object (SNMP IfAlias)

Parameters
linkLink object
aliasAlias name or NULL to unset

Sets the alias name of the link to the specified name. The alias name can be unset by specyfing NULL as the alias. The name will be strdup()ed, so no need to provide a persistent character string.

Alias (Netlink Routing Development Guide)

See Also
rtnl_link_get_ifalias()

Definition at line 2101 of file link.c.

void rtnl_link_set_qdisc ( struct rtnl_link link,
const char *  name 
)

Set queueing discipline name of link object.

Parameters
linkLink object
nameName of queueing discipline

Definition at line 2125 of file link.c.

char* rtnl_link_get_qdisc ( struct rtnl_link link)

Return name of queueing discipline of link object.

Parameters
linkLink object

Queueing Discipline Name (Netlink Routing Development Guide)

See Also
rtnl_link_set_qdisc()
Returns
Name of qdisc or NULL if not specified.

Definition at line 2139 of file link.c.

int rtnl_link_get_num_vf ( struct rtnl_link link,
uint32_t *  num_vf 
)

Return number of PCI virtual functions of link object.

Parameters
linkLink object
num_vfPointer to store number of VFs
Returns
0 on success or -NLE_OPNOTSUPP if not available

Definition at line 2152 of file link.c.

uint64_t rtnl_link_get_stat ( struct rtnl_link link,
rtnl_link_stat_id_t  id 
)

Return value of link statistics counter.

Parameters
linkLink object
idIdentifier of statistical counter
Returns
Value of counter or 0 if not specified.

Definition at line 2168 of file link.c.

int rtnl_link_set_stat ( struct rtnl_link link,
rtnl_link_stat_id_t  id,
const uint64_t  value 
)

Set value of link statistics counter.

Parameters
linkLink object
idIdentifier of statistical counter
valueNew value
Note
Changing the value of a statistical counter will not change the value in the kernel.
Returns
0 on success or a negative error code

Definition at line 2187 of file link.c.

int rtnl_link_set_type ( struct rtnl_link link,
const char *  type 
)

Set type of link object.

Parameters
linkLink object
typeName of link type

Looks up the link type module and prepares the link to store type specific attributes. If a type has been assigned already it will be released with all link type specific attributes lost.

Link Modules (Netlink Routing Development Guide)

Returns
0 on success or a negative errror code.

Definition at line 2210 of file link.c.

References rtnl_link_info_ops_lookup().

Referenced by rtnl_link_bond_alloc(), rtnl_link_bridge_alloc(), rtnl_link_macvlan_alloc(), rtnl_link_set_info_type(), rtnl_link_veth_alloc(), rtnl_link_vlan_alloc(), and rtnl_link_vxlan_alloc().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

char* rtnl_link_get_type ( struct rtnl_link link)

Return type of link.

Parameters
linkLink object

Link Modules (Netlink Routing Development Guide)

Returns
Name of link type or NULL if not specified.

Definition at line 2253 of file link.c.

Referenced by rtnl_link_get_info_type().

+ Here is the caller graph for this function:

void rtnl_link_set_promiscuity ( struct rtnl_link link,
uint32_t  count 
)

Set link promiscuity count.

Parameters
linkLink object
countNew promiscuity count

Definition at line 2267 of file link.c.

uint32_t rtnl_link_get_promiscuity ( struct rtnl_link link)

Return link promiscuity count.

Parameters
linkLink object
See Also
rtnl_link_set_promiscuity()
Returns
Link promiscuity count or 0

Definition at line 2280 of file link.c.

void rtnl_link_set_num_tx_queues ( struct rtnl_link link,
uint32_t  nqueues 
)

Set number of TX queues.

Parameters
linkLink object
nqueuesNumber of queues

Sets the number of TX queues of the link object. The value is considered by the kernel when creating network devices that can be created via netlink. The value will be passed on to alloc_netdev_mqs()

Therefore use of rtnl_link_set_num_tx_queues() only makes sense in combination with rtnl_link_add() or if the link object is used as a filter.

See Also
rtnl_link_get_num_tx_queues()

Definition at line 2299 of file link.c.

uint32_t rtnl_link_get_num_tx_queues ( struct rtnl_link link)

Return number of TX queues.

Parameters
linkLink object
Returns
Number of TX queues or 0

Definition at line 2311 of file link.c.

void rtnl_link_set_num_rx_queues ( struct rtnl_link link,
uint32_t  nqueues 
)

Set number of RX queues.

Parameters
linkLink object
nqueuesNumber of queues

Sets the number of RX queues of the link object. The value is considered by the kernel when creating network devices that can be created via netlink. The value will be passed on to alloc_netdev_mqs()

Therefore use of rtnl_link_set_num_rx_queues() only makes sense in combination with rtnl_link_add() or if the link object is used as a filter.

See Also
rtnl_link_get_num_rx_queues()

Definition at line 2330 of file link.c.

uint32_t rtnl_link_get_num_rx_queues ( struct rtnl_link link)

Return number of RX queues.

Parameters
linkLink object
Returns
Number of RX queues or 0

Definition at line 2342 of file link.c.

struct nl_data* rtnl_link_get_phys_port_id ( struct rtnl_link link)
read

Return physical port id of link object.

Parameters
linkLink object
Returns
Physical port id or NULL if not set.

Definition at line 2353 of file link.c.

int rtnl_link_enslave_ifindex ( struct nl_sock *  sock,
int  master,
int  slave 
)

Enslave slave link to master link.

Parameters
socknetlink socket
masterifindex of master link
slaveifindex of slave link

This function is identical to rtnl_link_enslave() except that it takes interface indices instead of rtnl_link objects.

See Also
rtnl_link_enslave()
Returns
0 on success or a negative error code.

Definition at line 2400 of file link.c.

References rtnl_link_alloc(), rtnl_link_change(), rtnl_link_get_kernel(), rtnl_link_get_master(), rtnl_link_put(), rtnl_link_set_ifindex(), and rtnl_link_set_master().

Referenced by rtnl_link_enslave(), and rtnl_link_release_ifindex().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int rtnl_link_enslave ( struct nl_sock *  sock,
struct rtnl_link master,
struct rtnl_link slave 
)

Enslave slave link to master link.

Parameters
socknetlink socket
mastermaster link
slaveslave link

Constructs a RTM_NEWLINK or RTM_SETLINK message adding the slave to the master and sends the request via the specified netlink socket.

Note
The feature of enslaving/releasing via netlink has only been added recently to the kernel (Feb 2011). Also, the kernel does not signal if the operation is not supported. Therefore this function will verify if the master assignment has changed and will return -NLE_OPNOTSUPP if it did not.
See Also
rtnl_link_enslave_ifindex()
rtnl_link_release()
Returns
0 on success or a negative error code.

Definition at line 2455 of file link.c.

References rtnl_link_enslave_ifindex(), and rtnl_link_get_ifindex().

+ Here is the call graph for this function:

int rtnl_link_release_ifindex ( struct nl_sock *  sock,
int  slave 
)

Release slave link from its master.

Parameters
socknetlink socket
slaveslave link

This function is identical to rtnl_link_release() except that it takes an interface index instead of a rtnl_link object.

See Also
rtnl_link_release()
Returns
0 on success or a negative error code.

Definition at line 2474 of file link.c.

References rtnl_link_enslave_ifindex().

Referenced by rtnl_link_release().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int rtnl_link_release ( struct nl_sock *  sock,
struct rtnl_link slave 
)

Release slave link from its master.

Parameters
socknetlink socket
slaveslave link

Constructs a RTM_NEWLINK or RTM_SETLINK message releasing the slave from its master and sends the request via the specified netlink socket.

Note
The feature of enslaving/releasing via netlink has only been added recently to the kernel (Feb 2011). Also, the kernel does not signal if the operation is not supported. Therefore this function will verify if the master assignment has changed and will return -NLE_OPNOTSUPP if it did not.
See Also
rtnl_link_release_ifindex()
rtnl_link_enslave()
Returns
0 on success or a negative error code.

Definition at line 2498 of file link.c.

References rtnl_link_get_ifindex(), and rtnl_link_release_ifindex().

+ Here is the call graph for this function:

int rtnl_link_set_info_type ( struct rtnl_link link,
const char *  type 
)
Deprecated:
Use of this function is deprecated, use rtnl_link_set_type()

Definition at line 2675 of file link.c.

References rtnl_link_set_type().

+ Here is the call graph for this function:

char* rtnl_link_get_info_type ( struct rtnl_link link)
Deprecated:
Use of this function is deprecated, use rtnl_link_get_type()

Definition at line 2683 of file link.c.

References rtnl_link_get_type().

+ Here is the call graph for this function:

void rtnl_link_set_weight ( struct rtnl_link link,
unsigned int  weight 
)
Deprecated:
The weight attribute is unused and obsoleted in all recent kernels

Definition at line 2691 of file link.c.

unsigned int rtnl_link_get_weight ( struct rtnl_link link)
Deprecated:
The weight attribute is unused and obsoleted in all recent kernels

Definition at line 2700 of file link.c.

Variable Documentation

struct nla_policy rtln_link_policy[IFLA_MAX+1]
Initial value:
= {
[IFLA_IFNAME] = { .type = NLA_STRING,
.maxlen = IFNAMSIZ },
[IFLA_MTU] = { .type = NLA_U32 },
[IFLA_TXQLEN] = { .type = NLA_U32 },
[IFLA_LINK] = { .type = NLA_U32 },
[IFLA_WEIGHT] = { .type = NLA_U32 },
[IFLA_MASTER] = { .type = NLA_U32 },
[IFLA_OPERSTATE] = { .type = NLA_U8 },
[IFLA_LINKMODE] = { .type = NLA_U8 },
[IFLA_LINKINFO] = { .type = NLA_NESTED },
[IFLA_QDISC] = { .type = NLA_STRING,
.maxlen = IFQDISCSIZ },
[IFLA_STATS] = { .minlen = sizeof(struct rtnl_link_stats) },
[IFLA_STATS64] = { .minlen = sizeof(struct rtnl_link_stats64)},
[IFLA_MAP] = { .minlen = sizeof(struct rtnl_link_ifmap) },
[IFLA_IFALIAS] = { .type = NLA_STRING, .maxlen = IFALIASZ },
[IFLA_NUM_VF] = { .type = NLA_U32 },
[IFLA_AF_SPEC] = { .type = NLA_NESTED },
[IFLA_PROMISCUITY] = { .type = NLA_U32 },
[IFLA_NUM_TX_QUEUES] = { .type = NLA_U32 },
[IFLA_NUM_RX_QUEUES] = { .type = NLA_U32 },
[IFLA_GROUP] = { .type = NLA_U32 },
[IFLA_CARRIER] = { .type = NLA_U8 },
[IFLA_PHYS_PORT_ID] = { .type = NLA_UNSPEC },
[IFLA_NET_NS_PID] = { .type = NLA_U32 },
[IFLA_NET_NS_FD] = { .type = NLA_U32 },
}

Definition at line 265 of file link.c.