libnl 1.1
|
Allocation/Freeing | |
struct rtnl_addr * | rtnl_addr_alloc (void) |
void | rtnl_addr_put (struct rtnl_addr *addr) |
Cache Management | |
struct nl_cache * | rtnl_addr_alloc_cache (struct nl_handle *handle) |
Addition | |
struct nl_msg * | rtnl_addr_build_add_request (struct rtnl_addr *addr, int flags) |
Build netlink request message to request addition of new address. | |
int | rtnl_addr_add (struct nl_handle *handle, struct rtnl_addr *addr, int flags) |
Request addition of new address. | |
Deletion | |
struct nl_msg * | rtnl_addr_build_delete_request (struct rtnl_addr *addr, int flags) |
Build a netlink request message to request deletion of an address. | |
int | rtnl_addr_delete (struct nl_handle *handle, struct rtnl_addr *addr, int flags) |
Request deletion of an address. | |
Attributes | |
void | 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_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_anycast (struct rtnl_addr *addr, struct nl_addr *anycast) |
struct nl_addr * | rtnl_addr_get_anycast (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) |
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 and anycast 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); rtnl_addr_set_anycast(addr, anycast_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(handle, 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(handle, addr, 0); // Free the memory rtnl_addr_put(addr);
struct nl_msg* rtnl_addr_build_add_request | ( | struct rtnl_addr * | addr, |
int | flags | ||
) | [read] |
addr | Address object representing the new address. |
flags | Additional netlink message flags. |
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 737 of file addr.c.
References NLM_F_CREATE.
Referenced by rtnl_addr_add().
{ int required = ADDR_ATTR_IFINDEX | ADDR_ATTR_FAMILY | ADDR_ATTR_PREFIXLEN | ADDR_ATTR_LOCAL; if ((addr->ce_mask & required) != required) { nl_error(EINVAL, "Missing mandatory attributes, required are: " "ifindex, family, prefixlen, local address."); return NULL; } return build_addr_msg(addr, RTM_NEWADDR, NLM_F_CREATE | flags); }
int rtnl_addr_add | ( | struct nl_handle * | handle, |
struct rtnl_addr * | addr, | ||
int | flags | ||
) |
handle | Netlink handle. |
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 765 of file addr.c.
References nl_send_auto_complete(), nl_wait_for_ack(), nlmsg_free(), and rtnl_addr_build_add_request().
{ struct nl_msg *msg; int err; msg = rtnl_addr_build_add_request(addr, flags); if (!msg) return nl_get_errno(); err = nl_send_auto_complete(handle, msg); nlmsg_free(msg); if (err < 0) return err; return nl_wait_for_ack(handle); }
struct nl_msg* rtnl_addr_build_delete_request | ( | struct rtnl_addr * | addr, |
int | flags | ||
) | [read] |
addr | Address object to be deleteted. |
flags | Additional netlink message flags. |
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 811 of file addr.c.
Referenced by rtnl_addr_delete().
{ int required = ADDR_ATTR_IFINDEX | ADDR_ATTR_FAMILY; if ((addr->ce_mask & required) != required) { nl_error(EINVAL, "Missing mandatory attributes, required are: " "ifindex, family"); return NULL; } return build_addr_msg(addr, RTM_DELADDR, flags); }
int rtnl_addr_delete | ( | struct nl_handle * | handle, |
struct rtnl_addr * | addr, | ||
int | flags | ||
) |
handle | Netlink handle. |
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 838 of file addr.c.
References nl_send_auto_complete(), nl_wait_for_ack(), nlmsg_free(), and rtnl_addr_build_delete_request().
{ struct nl_msg *msg; int err; msg = rtnl_addr_build_delete_request(addr, flags); if (!msg) return nl_get_errno(); err = nl_send_auto_complete(handle, msg); nlmsg_free(msg); if (err < 0) return err; return nl_wait_for_ack(handle); }