Flags Translations | |
| |
char * | rtnl_addr_flags2str (int flags, char *buf, size_t size) |
int | rtnl_addr_str2flags (const char *name) |
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) |
// 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().
00738 { 00739 int required = ADDR_ATTR_IFINDEX | ADDR_ATTR_FAMILY | 00740 ADDR_ATTR_PREFIXLEN | ADDR_ATTR_LOCAL; 00741 00742 if ((addr->ce_mask & required) != required) { 00743 nl_error(EINVAL, "Missing mandatory attributes, required are: " 00744 "ifindex, family, prefixlen, local address."); 00745 return NULL; 00746 } 00747 00748 return build_addr_msg(addr, RTM_NEWADDR, NLM_F_CREATE | flags); 00749 }
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().
00766 { 00767 struct nl_msg *msg; 00768 int err; 00769 00770 msg = rtnl_addr_build_add_request(addr, flags); 00771 if (!msg) 00772 return nl_get_errno(); 00773 00774 err = nl_send_auto_complete(handle, msg); 00775 nlmsg_free(msg); 00776 if (err < 0) 00777 return err; 00778 00779 return nl_wait_for_ack(handle); 00780 }
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().
00812 { 00813 int required = ADDR_ATTR_IFINDEX | ADDR_ATTR_FAMILY; 00814 00815 if ((addr->ce_mask & required) != required) { 00816 nl_error(EINVAL, "Missing mandatory attributes, required are: " 00817 "ifindex, family"); 00818 return NULL; 00819 } 00820 00821 return build_addr_msg(addr, RTM_DELADDR, flags); 00822 }
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().
00840 { 00841 struct nl_msg *msg; 00842 int err; 00843 00844 msg = rtnl_addr_build_delete_request(addr, flags); 00845 if (!msg) 00846 return nl_get_errno(); 00847 00848 err = nl_send_auto_complete(handle, msg); 00849 nlmsg_free(msg); 00850 if (err < 0) 00851 return err; 00852 00853 return nl_wait_for_ack(handle); 00854 }