The kernel favours the interface index but falls back to the interface name if the interface index is lesser-than 0 for kernels >= 2.6.11. Therefore you can request changes without mapping a interface name to the corresponding index first.
IFF_UP Status of link (up|down) IFF_BROADCAST Indicates this link allows broadcasting IFF_MULTICAST Indicates this link allows multicasting IFF_ALLMULTI Indicates this link is doing multicast routing IFF_DEBUG Tell the driver to do debugging (currently unused) IFF_LOOPBACK This is the loopback link IFF_POINTOPOINT Point-to-point link IFF_NOARP Link is unable to perform ARP IFF_PROMISC Status of promiscious mode flag IFF_MASTER Used by teql IFF_SLAVE Used by teql IFF_PORTSEL Indicates this link allows port selection IFF_AUTOMEDIA Indicates this link selects port automatically IFF_DYNAMIC Indicates the address of this link is dynamic IFF_RUNNING Link is running and carrier is ok. IFF_NOTRAILERS Unused, BSD compat.
// The first step is to retrieve a list of all available interfaces within // the kernel and put them into a cache. struct nl_cache *cache = rtnl_link_alloc_cache(nl_handle); // In a second step, a specific link may be looked up by either interface // index or interface name. struct rtnl_link *link = rtnl_link_get_by_name(cache, "lo"); // rtnl_link_get_by_name() is the short version for translating the // interface name to an interface index first like this: int ifindex = rtnl_link_name2i(cache, "lo"); struct rtnl_link *link = rtnl_link_get(cache, ifindex); // After successful usage, the object must be given back to the cache rtnl_link_put(link);
// In order to change any attributes of an existing link, we must allocate // a new link to hold the change requests: struct rtnl_link *request = rtnl_link_alloc(); // Now we can go on and specify the attributes we want to change: rtnl_link_set_weight(request, 300); rtnl_link_set_mtu(request, 1360); // We can also shut an interface down administratively rtnl_link_unset_flags(request, rtnl_link_str2flags("up")); // Actually, we should know which link to change, so let's look it up struct rtnl_link *old = rtnl_link_get(cache, "eth0"); // Two ways exist to commit this change request, the first one is to // build the required netlink message and send it out in one single // step: rtnl_link_change(nl_handle, old, request); // An alternative way is to build the netlink message and send it // out yourself using nl_send_auto_complete() struct nl_msg *msg = rtnl_link_build_change_request(old, request); nl_send_auto_complete(nl_handle, nlmsg_hdr(msg)); nlmsg_free(msg); // Don't forget to give back the link object ;-> rtnl_link_put(old);
Link Flags Translations | |
char * | rtnl_link_flags2str (int flags, char *buf, size_t len) |
Convert link flags to a character string (Reentrant). | |
int | rtnl_link_str2flags (const char *name) |
Convert a character string to a link flag. | |
Link Statistics Translations | |
char * | rtnl_link_stat2str (int st, char *buf, size_t len) |
Convert a link statistic to a character string (Reentrant). | |
int | rtnl_link_str2stat (const char *name) |
Convert a character string to a link statistic. | |
Link Object Allocation/Freeage | |
rtnl_link * | rtnl_link_alloc (void) |
Allocate and initialize new link object. | |
void | rtnl_link_put (struct rtnl_link *link) |
Give back reference on link object. | |
void | rtnl_link_free (struct rtnl_link *link) |
Free link object. | |
Link Cache Management | |
nl_cache * | rtnl_link_alloc_cache (struct nl_handle *handle) |
Allocate link cache and fill in all configured links. | |
rtnl_link * | rtnl_link_get (struct nl_cache *cache, int ifindex) |
Look up link by interface index in the provided cache. | |
rtnl_link * | rtnl_link_get_by_name (struct nl_cache *cache, const char *name) |
Look up link by link name in the provided cache. | |
Link Modifications | |
nl_msg * | rtnl_link_build_change_request (struct rtnl_link *old, struct rtnl_link *tmpl, int flags) |
Builds a netlink change request message to change link attributes. | |
int | rtnl_link_change (struct nl_handle *handle, struct rtnl_link *old, struct rtnl_link *tmpl, int flags) |
Change link attributes. | |
Name <-> Index Translations | |
char * | rtnl_link_i2name (struct nl_cache *cache, int ifindex, char *dst, size_t len) |
Translate an interface index to the corresponding link name. | |
int | rtnl_link_name2i (struct nl_cache *cache, const char *name) |
Translate a link name to the corresponding interface index. | |
Attribute Modification | |
void | rtnl_link_set_qdisc (struct rtnl_link *link, const char *qdisc) |
Set QDisc name. | |
char * | rtnl_link_get_qdisc (struct rtnl_link *link) |
Get QDisc name. | |
void | rtnl_link_set_name (struct rtnl_link *link, const char *name) |
Set new link name. | |
char * | rtnl_link_get_name (struct rtnl_link *link) |
Get link name. | |
void | rtnl_link_set_addr (struct rtnl_link *link, struct nl_addr *addr) |
Set link layer address. | |
nl_addr * | rtnl_link_get_addr (struct rtnl_link *link) |
Get link layer address. | |
void | rtnl_link_set_broadcast (struct rtnl_link *link, struct nl_addr *brd) |
Set link layer broadcast address. | |
nl_addr * | rtnl_link_get_broadcast (struct rtnl_link *link) |
Get link layer broadcast address. | |
void | rtnl_link_set_flags (struct rtnl_link *link, unsigned int flags) |
Set flags. | |
void | rtnl_link_unset_flags (struct rtnl_link *link, unsigned int flags) |
Unset flags. | |
unsigned int | rtnl_link_get_flags (struct rtnl_link *link) |
Get flags. | |
void | rtnl_link_set_family (struct rtnl_link *link, int family) |
Set link layer address family. | |
int | rtnl_link_get_family (struct rtnl_link *link) |
Get link layer address family. | |
void | rtnl_link_set_type (struct rtnl_link *link, unsigned int arptype) |
Set link layer type. | |
unsigned int | rtnl_link_get_arptype (struct rtnl_link *link) |
Get link layer type. | |
void | rtnl_link_set_ifindex (struct rtnl_link *link, int ifindex) |
Set interface index. | |
int | rtnl_link_get_ifindex (struct rtnl_link *link) |
Get interface index. | |
void | rtnl_link_set_mtu (struct rtnl_link *link, unsigned int mtu) |
Set Maximum Transmission Unit. | |
unsigned int | rtnl_link_get_mtu (struct rtnl_link *link) |
Get Maximum Transmission Unit. | |
void | rtnl_link_set_txqlen (struct rtnl_link *link, unsigned int txqlen) |
Set Transmission Queue Length. | |
unsigned int | rtnl_link_get_txqlen (struct rtnl_link *link) |
Get Transmission Queue Length. | |
void | rtnl_link_set_weight (struct rtnl_link *link, unsigned int weight) |
Set Weight. | |
unsigned int | rtnl_link_get_weight (struct rtnl_link *link) |
Get Weight. | |
void | rtnl_link_set_link (struct rtnl_link *link, int ifindex) |
Set parent interface index. | |
int | rtnl_link_get_link (struct rtnl_link *link) |
Get parent interface index. | |
void | rtnl_link_set_master (struct rtnl_link *link, int ifindex) |
Set master interface index. | |
int | rtnl_link_get_master (struct rtnl_link *link) |
Get master interface index. | |
uint64_t | rtnl_link_get_stat (struct rtnl_link *link, int id) |
Get the statistic specified by the id. | |
Defines | |
#define | RTNL_LINK_NOT_FOUND -1 |
Special interface index stating the link was not found. |
#define RTNL_LINK_NOT_FOUND -1 |
Special interface index stating the link was not found.
Definition at line 54 of file link.h.
Referenced by rtnl_addr_get_ifindex(), rtnl_link_get_ifindex(), rtnl_link_get_link(), rtnl_link_get_master(), rtnl_link_name2i(), rtnl_neigh_get_ifindex(), and rtnl_route_get_oif().
struct rtnl_link* rtnl_link_alloc | ( | void | ) |
Allocate and initialize new link object.
Definition at line 672 of file link.c.
References nl_object_alloc_from_ops().
void rtnl_link_put | ( | struct rtnl_link * | link | ) |
Give back reference on link object.
link | Link object to be given back. |
Definition at line 684 of file link.c.
References nl_object_put().
Referenced by rtnl_link_i2name(), and rtnl_link_name2i().
void rtnl_link_free | ( | struct rtnl_link * | link | ) |
Free link object.
link | Link object to be freed. |
Definition at line 695 of file link.c.
References nl_object_free().
struct nl_cache* rtnl_link_alloc_cache | ( | struct nl_handle * | handle | ) |
Allocate link cache and fill in all configured links.
handle | Netlink handle. |
Definition at line 718 of file link.c.
References nl_cache_alloc_from_ops(), nl_cache_free(), and nl_cache_update().
struct rtnl_link* rtnl_link_get | ( | struct nl_cache * | cache, | |
int | ifindex | |||
) |
Look up link by interface index in the provided cache.
cache | link cache | |
ifindex | link interface index |
Definition at line 744 of file link.c.
References nl_object_get().
Referenced by rtnl_link_i2name().
struct rtnl_link* rtnl_link_get_by_name | ( | struct nl_cache * | cache, | |
const char * | name | |||
) |
Look up link by link name in the provided cache.
cache | link cache | |
name | link name |
Definition at line 771 of file link.c.
References nl_object_get().
Referenced by rtnl_link_name2i().
struct nl_msg* rtnl_link_build_change_request | ( | struct rtnl_link * | old, | |
struct rtnl_link * | tmpl, | |||
int | flags | |||
) |
Builds a netlink change request message to change link attributes.
old | link to be changed | |
tmpl | template with requested changes | |
flags | additional netlink message flags |
rtnl_link_set_*
functions.
Definition at line 814 of file link.c.
References ifinfomsg::ifi_family, ifinfomsg::ifi_flags, NLA_PUT_ADDR, NLA_PUT_STRING, NLA_PUT_U32, nlmsg_append(), nlmsg_build_simple(), and nlmsg_free().
Referenced by rtnl_link_change().
int rtnl_link_change | ( | struct nl_handle * | handle, | |
struct rtnl_link * | old, | |||
struct rtnl_link * | tmpl, | |||
int | flags | |||
) |
Change link attributes.
handle | netlink handle | |
old | link to be changed | |
tmpl | template with requested changes | |
flags | additional netlink message flags |
Definition at line 876 of file link.c.
References nl_send_auto_complete(), nl_wait_for_ack(), nlmsg_free(), and rtnl_link_build_change_request().
char* rtnl_link_i2name | ( | struct nl_cache * | cache, | |
int | ifindex, | |||
char * | dst, | |||
size_t | len | |||
) |
Translate an interface index to the corresponding link name.
cache | link cache | |
ifindex | link interface index | |
dst | destination buffer | |
len | length of destination buffer |
Definition at line 913 of file link.c.
References rtnl_link_get(), and rtnl_link_put().
int rtnl_link_name2i | ( | struct nl_cache * | cache, | |
const char * | name | |||
) |
Translate a link name to the corresponding interface index.
cache | link cache | |
name | link name |
Definition at line 934 of file link.c.
References rtnl_link_get_by_name(), RTNL_LINK_NOT_FOUND, and rtnl_link_put().
char* rtnl_link_flags2str | ( | int | flags, | |
char * | buf, | |||
size_t | len | |||
) |
Convert link flags to a character string (Reentrant).
flags | link flags | |
buf | destination buffer | |
len | buffer length |
int rtnl_link_str2flags | ( | const char * | name | ) |
char* rtnl_link_stat2str | ( | int | st, | |
char * | buf, | |||
size_t | len | |||
) |
Convert a link statistic to a character string (Reentrant).
st | link statistic | |
buf | destination buffer | |
len | buffer length |
int rtnl_link_str2stat | ( | const char * | name | ) |
void rtnl_link_set_qdisc | ( | struct rtnl_link * | link, | |
const char * | qdisc | |||
) |
char* rtnl_link_get_qdisc | ( | struct rtnl_link * | link | ) |
void rtnl_link_set_name | ( | struct rtnl_link * | link, | |
const char * | name | |||
) |
char* rtnl_link_get_name | ( | struct rtnl_link * | link | ) |
void rtnl_link_set_addr | ( | struct rtnl_link * | link, | |
struct nl_addr * | addr | |||
) |
struct nl_addr* rtnl_link_get_addr | ( | struct rtnl_link * | link | ) |
void rtnl_link_set_broadcast | ( | struct rtnl_link * | link, | |
struct nl_addr * | brd | |||
) |
struct nl_addr* rtnl_link_get_broadcast | ( | struct rtnl_link * | link | ) |
void rtnl_link_set_flags | ( | struct rtnl_link * | link, | |
unsigned int | flags | |||
) |
void rtnl_link_unset_flags | ( | struct rtnl_link * | link, | |
unsigned int | flags | |||
) |
unsigned int rtnl_link_get_flags | ( | struct rtnl_link * | link | ) |
void rtnl_link_set_family | ( | struct rtnl_link * | link, | |
int | family | |||
) |
int rtnl_link_get_family | ( | struct rtnl_link * | link | ) |
void rtnl_link_set_type | ( | struct rtnl_link * | link, | |
unsigned int | arptype | |||
) |
unsigned int rtnl_link_get_arptype | ( | struct rtnl_link * | link | ) |
void rtnl_link_set_ifindex | ( | struct rtnl_link * | link, | |
int | ifindex | |||
) |
int rtnl_link_get_ifindex | ( | struct rtnl_link * | link | ) |
Get interface index.
link | link handle |
Definition at line 1282 of file link.c.
References RTNL_LINK_NOT_FOUND.
void rtnl_link_set_mtu | ( | struct rtnl_link * | link, | |
unsigned int | mtu | |||
) |
unsigned int rtnl_link_get_mtu | ( | struct rtnl_link * | link | ) |
void rtnl_link_set_txqlen | ( | struct rtnl_link * | link, | |
unsigned int | txqlen | |||
) |
unsigned int rtnl_link_get_txqlen | ( | 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 | ) |
void rtnl_link_set_link | ( | struct rtnl_link * | link, | |
int | ifindex | |||
) |
int rtnl_link_get_link | ( | struct rtnl_link * | link | ) |
Get parent interface index.
link | link handle |
Definition at line 1380 of file link.c.
References RTNL_LINK_NOT_FOUND.
void rtnl_link_set_master | ( | struct rtnl_link * | link, | |
int | ifindex | |||
) |
int rtnl_link_get_master | ( | struct rtnl_link * | link | ) |
Get master interface index.
link | link handle |
Definition at line 1404 of file link.c.
References RTNL_LINK_NOT_FOUND.
uint64_t rtnl_link_get_stat | ( | struct rtnl_link * | link, | |
int | id | |||
) |