The address may not contain a prefix length if the peer address has been specified already.
// 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. |
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 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. |
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* rtnl_addr_build_delete_request | ( | struct rtnl_addr * | addr, | |
int | flags | |||
) | [read] |
addr | Address object to be deleteted. | |
flags | Additional netlink message flags. |
Minimal required attributes:
Optional attributes:
Definition at line 811 of file addr.c.
Referenced by rtnl_addr_delete().
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. |
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().