libnl
3.2.3
|
Allocation/Freeing | |
struct rtnl_addr * | rtnl_addr_alloc (void) |
void | rtnl_addr_put (struct rtnl_addr *addr) |
Cache Management | |
int | rtnl_addr_alloc_cache (struct nl_sock *sk, struct nl_cache **result) |
struct rtnl_addr * | rtnl_addr_get (struct nl_cache *cache, int ifindex, struct nl_addr *addr) |
Search address in cache. | |
Addition | |
int | rtnl_addr_build_add_request (struct rtnl_addr *addr, int flags, struct nl_msg **result) |
Build netlink request message to request addition of new address. | |
int | rtnl_addr_add (struct nl_sock *sk, struct rtnl_addr *addr, int flags) |
Request addition of new address. | |
Deletion | |
int | rtnl_addr_build_delete_request (struct rtnl_addr *addr, int flags, struct nl_msg **result) |
Build a netlink request message to request deletion of an address. | |
int | rtnl_addr_delete (struct nl_sock *sk, struct rtnl_addr *addr, int flags) |
Request deletion of an address. | |
Attributes | |
int | rtnl_addr_set_label (struct rtnl_addr *addr, const char *label) |
char * | rtnl_addr_get_label (struct rtnl_addr *addr) |
void | rtnl_addr_set_ifindex (struct rtnl_addr *addr, int ifindex) |
int | rtnl_addr_get_ifindex (struct rtnl_addr *addr) |
void | rtnl_addr_set_link (struct rtnl_addr *addr, struct rtnl_link *link) |
struct rtnl_link * | rtnl_addr_get_link (struct rtnl_addr *addr) |
void | rtnl_addr_set_family (struct rtnl_addr *addr, int family) |
int | rtnl_addr_get_family (struct rtnl_addr *addr) |
void | rtnl_addr_set_prefixlen (struct rtnl_addr *addr, int prefix) |
int | rtnl_addr_get_prefixlen (struct rtnl_addr *addr) |
void | rtnl_addr_set_scope (struct rtnl_addr *addr, int scope) |
int | rtnl_addr_get_scope (struct rtnl_addr *addr) |
void | rtnl_addr_set_flags (struct rtnl_addr *addr, unsigned int flags) |
void | rtnl_addr_unset_flags (struct rtnl_addr *addr, unsigned int flags) |
unsigned int | rtnl_addr_get_flags (struct rtnl_addr *addr) |
int | rtnl_addr_set_local (struct rtnl_addr *addr, struct nl_addr *local) |
struct nl_addr * | rtnl_addr_get_local (struct rtnl_addr *addr) |
int | rtnl_addr_set_peer (struct rtnl_addr *addr, struct nl_addr *peer) |
struct nl_addr * | rtnl_addr_get_peer (struct rtnl_addr *addr) |
int | rtnl_addr_set_broadcast (struct rtnl_addr *addr, struct nl_addr *bcast) |
struct nl_addr * | rtnl_addr_get_broadcast (struct rtnl_addr *addr) |
int | rtnl_addr_set_multicast (struct rtnl_addr *addr, struct nl_addr *multicast) |
struct nl_addr * | rtnl_addr_get_multicast (struct rtnl_addr *addr) |
int | rtnl_addr_set_anycast (struct rtnl_addr *addr, struct nl_addr *anycast) |
struct nl_addr * | rtnl_addr_get_anycast (struct rtnl_addr *addr) |
uint32_t | rtnl_addr_get_valid_lifetime (struct rtnl_addr *addr) |
void | rtnl_addr_set_valid_lifetime (struct rtnl_addr *addr, uint32_t lifetime) |
uint32_t | rtnl_addr_get_preferred_lifetime (struct rtnl_addr *addr) |
void | rtnl_addr_set_preferred_lifetime (struct rtnl_addr *addr, uint32_t lifetime) |
uint32_t | rtnl_addr_get_create_time (struct rtnl_addr *addr) |
uint32_t | rtnl_addr_get_last_update_time (struct rtnl_addr *addr) |
Flags Translations | |
char * | rtnl_addr_flags2str (int flags, char *buf, size_t size) |
int | rtnl_addr_str2flags (const char *name) |
// Allocate an empty address object to be filled out with the attributes // of the new address. struct rtnl_addr *addr = rtnl_addr_alloc(); // Fill out the mandatory attributes of the new address. Setting the // local address will automatically set the address family and the // prefix length to the correct values. rtnl_addr_set_ifindex(addr, ifindex); rtnl_addr_set_local(addr, local_addr); // The label of the address can be specified, currently only supported // by IPv4 and DECnet. rtnl_addr_set_label(addr, "mylabel"); // The peer address can be specified if necessary, in either case a peer // address will be sent to the kernel in order to fullfil the interface // requirements. If none is set, it will equal the local address. // Note: Real peer addresses are only supported by IPv4 for now. rtnl_addr_set_peer(addr, peer_addr); // In case you want to have the address have a scope other than global // it may be overwritten using rtnl_addr_set_scope(). The scope currently // cannot be set for IPv6 addresses. rtnl_addr_set_scope(addr, rtnl_str2scope("site")); // Broadcast address may be specified using the relevant // functions, the address family will be verified if one of the other // addresses has been set already. Currently only works for IPv4. rtnl_addr_set_broadcast(addr, broadcast_addr); // Build the netlink message and send it to the kernel, the operation will // block until the operation has been completed. Alternatively the required // netlink message can be built using rtnl_addr_build_add_request() to be // sent out using nl_send_auto_complete(). rtnl_addr_add(sk, addr, 0); // Free the memory rtnl_addr_put(addr);
// Allocate an empty address object to be filled out with the attributes // matching the address to be deleted. Alternatively a fully equipped // address object out of a cache can be used instead. struct rtnl_addr *addr = rtnl_addr_alloc(); // The only mandatory parameter besides the address family is the interface // index the address is on, i.e. leaving out all other parameters will // result in all addresses of the specified address family interface tuple // to be deleted. rtnl_addr_set_ifindex(addr, ifindex); // Specyfing the address family manually is only required if neither the // local nor peer address have been specified. rtnl_addr_set_family(addr, AF_INET); // Specyfing the local address is optional but the best choice to delete // specific addresses. rtnl_addr_set_local(addr, local_addr); // The label of the address can be specified, currently only supported // by IPv4 and DECnet. rtnl_addr_set_label(addr, "mylabel"); // The peer address can be specified if necessary, in either case a peer // address will be sent to the kernel in order to fullfil the interface // requirements. If none is set, it will equal the local address. // Note: Real peer addresses are only supported by IPv4 for now. rtnl_addr_set_peer(addr, peer_addr); // Build the netlink message and send it to the kernel, the operation will // block until the operation has been completed. Alternatively the required // netlink message can be built using rtnl_addr_build_delete_request() // to be sent out using nl_send_auto_complete(). rtnl_addr_delete(sk, addr, 0); // Free the memory rtnl_addr_put(addr);
struct rtnl_addr* rtnl_addr_get | ( | struct nl_cache * | cache, |
int | ifindex, | ||
struct nl_addr * | addr | ||
) | [read] |
Search address in cache.
cache | Address cache |
ifindex | Interface index of address |
addr | Local address part |
Searches address cache previously allocated with rtnl_addr_alloc_cache() for an address with a matching local address.
The reference counter is incremented before returning the address, therefore the reference must be given back with rtnl_addr_put() after usage.
Definition at line 513 of file addr.c.
References nl_addr_cmp(), and nl_object_get().
int rtnl_addr_build_add_request | ( | struct rtnl_addr * | addr, |
int | flags, | ||
struct nl_msg ** | result | ||
) |
Build netlink request message to request addition of new address.
addr | Address object representing the new address. |
flags | Additional netlink message flags. |
result | Pointer to store resulting message. |
Builds a new netlink message requesting the addition of a new address. The netlink message header isn't fully equipped with all relevant fields and must thus be sent out via nl_send_auto_complete() or supplemented as needed.
Minimal required attributes:
The scope will default to universe except for loopback addresses in which case a host scope is used if not specified otherwise.
Definition at line 625 of file addr.c.
Referenced by rtnl_addr_add().
int rtnl_addr_add | ( | struct nl_sock * | sk, |
struct rtnl_addr * | addr, | ||
int | flags | ||
) |
Request addition of new address.
sk | Netlink socket. |
addr | Address object representing the new address. |
flags | Additional netlink message flags. |
Builds a netlink message by calling rtnl_addr_build_add_request(), sends the request to the kernel and waits for the next ACK to be received and thus blocks until the request has been fullfilled.
Definition at line 651 of file addr.c.
References nlmsg_free(), and rtnl_addr_build_add_request().
int rtnl_addr_build_delete_request | ( | struct rtnl_addr * | addr, |
int | flags, | ||
struct nl_msg ** | result | ||
) |
Build a netlink request message to request deletion of an address.
addr | Address object to be deleteted. |
flags | Additional netlink message flags. |
result | Pointer to store resulting message. |
Builds a new netlink message requesting a deletion of an address. The netlink message header isn't fully equipped with all relevant fields and must thus be sent out via nl_send_auto_complete() or supplemented as needed.
Minimal required attributes:
Optional attributes:
Definition at line 698 of file addr.c.
Referenced by rtnl_addr_delete().
int rtnl_addr_delete | ( | struct nl_sock * | sk, |
struct rtnl_addr * | addr, | ||
int | flags | ||
) |
Request deletion of an address.
sk | Netlink socket. |
addr | Address object to be deleted. |
flags | Additional netlink message flags. |
Builds a netlink message by calling rtnl_addr_build_delete_request(), sends the request to the kernel and waits for the next ACK to be received and thus blocks until the request has been fullfilled.
Definition at line 723 of file addr.c.
References nlmsg_free(), and rtnl_addr_build_delete_request().