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);
// Some link types offer additional parameters and statistics specific // to their type. F.e. a VLAN link can be configured like this: // // Allocate a new link and set the info type to "vlan". This is required // to prepare the link to hold vlan specific attributes. struct rtnl_link *request = rtnl_link_alloc(); rtnl_link_set_info_type(request, "vlan"); // Now vlan specific attributes can be set: rtnl_link_vlan_set_id(request, 10); rtnl_link_vlan_set_ingress_map(request, 2, 8); // Of course the attributes can also be read, check the info type // to make sure you are using the right access functions: char *type = rtnl_link_get_info_type(link); if (!strcmp(type, "vlan")) int id = rtnl_link_vlan_get_id(link);
Modules | |
Link Info API | |
| |
Link Flags Translations | |
char * | rtnl_link_flags2str (int flags, char *buf, size_t len) |
int | rtnl_link_str2flags (const char *name) |
Link Statistics Translations | |
char * | rtnl_link_stat2str (int st, char *buf, size_t len) |
int | rtnl_link_str2stat (const char *name) |
Link Operstate Translations | |
char * | rtnl_link_operstate2str (int st, char *buf, size_t len) |
int | rtnl_link_str2operstate (const char *name) |
Link Mode Translations | |
char * | rtnl_link_mode2str (int st, char *buf, size_t len) |
int | rtnl_link_str2mode (const char *name) |
Allocation/Freeing | |
struct rtnl_link * | rtnl_link_alloc (void) |
void | rtnl_link_put (struct rtnl_link *link) |
Cache Management | |
struct nl_cache * | rtnl_link_alloc_cache (struct nl_handle *handle) |
Allocate link cache and fill in all configured links. | |
struct rtnl_link * | rtnl_link_get (struct nl_cache *cache, int ifindex) |
Look up link by interface index in the provided cache. | |
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. | |
Link Modifications | |
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. | |
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. | |
Attributes | |
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_arptype (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) |
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) |
void | rtnl_link_set_master (struct rtnl_link *link, int ifindex) |
int | rtnl_link_get_master (struct rtnl_link *link) |
void | rtnl_link_set_operstate (struct rtnl_link *link, uint8_t operstate) |
uint8_t | rtnl_link_get_operstate (struct rtnl_link *link) |
void | rtnl_link_set_linkmode (struct rtnl_link *link, uint8_t linkmode) |
uint8_t | rtnl_link_get_linkmode (struct rtnl_link *link) |
uint64_t | rtnl_link_get_stat (struct rtnl_link *link, int id) |
int | rtnl_link_set_info_type (struct rtnl_link *link, const char *type) |
Specify the info type of a link. | |
char * | rtnl_link_get_info_type (struct rtnl_link *link) |
Return info type of a link. | |
Defines | |
#define | RTNL_LINK_NOT_FOUND -1 |
Special interface index stating the link was not found. |
struct nl_cache* rtnl_link_alloc_cache | ( | struct nl_handle * | handle | ) | [read] |
handle | Netlink handle. |
Definition at line 874 of file link.c.
References nl_cache_alloc(), nl_cache_free(), and nl_cache_refill().
struct rtnl_link* rtnl_link_get | ( | struct nl_cache * | cache, | |
int | ifindex | |||
) | [read] |
cache | link cache | |
ifindex | link interface index |
Definition at line 900 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 | |||
) | [read] |
cache | link cache | |
name | link name |
Definition at line 927 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 | |||
) | [read] |
old | link to be changed | |
tmpl | template with requested changes | |
flags | additional netlink message flags |
rtnl_link_set_*
functions.
Definition at line 970 of file link.c.
References nla_nest_end(), nla_nest_start(), NLA_PUT_ADDR, NLA_PUT_STRING, NLA_PUT_U32, NLA_PUT_U8, nlmsg_alloc_simple(), nlmsg_append(), 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 | |||
) |
handle | netlink handle | |
old | link to be changed | |
tmpl | template with requested changes | |
flags | additional netlink message flags |
Definition at line 1053 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 | |||
) |
cache | link cache | |
ifindex | link interface index | |
dst | destination buffer | |
len | length of destination buffer |
Definition at line 1090 of file link.c.
References rtnl_link_get().
int rtnl_link_name2i | ( | struct nl_cache * | cache, | |
const char * | name | |||
) |
cache | link cache | |
name | link name |
Definition at line 1111 of file link.c.
References rtnl_link_get_by_name(), and RTNL_LINK_NOT_FOUND.
int rtnl_link_set_info_type | ( | struct rtnl_link * | link, | |
const char * | type | |||
) |
link | link object | |
type | info type |
Definition at line 1506 of file link.c.
References rtnl_link_info_ops::io_alloc.
char* rtnl_link_get_info_type | ( | struct rtnl_link * | link | ) |