NUD_INCOMPLETE NUD_REACHABLE NUD_STALE NUD_DELAY NUD_PROBE NUD_FAILED NUD_NOARP NUD_PERMANENT
NTF_PROXY NTF_ROUTER
// The first step is to retrieve a list of all available neighbour within // the kernel and put them into a cache. struct nl_cache *cache = rtnl_neigh_alloc_cache(handle); // Neighbours can then be looked up by the interface and destination // address: struct rtnl_neigh *neigh = rtnl_neigh_get(cache, ifindex, dst_addr); // After successful usage, the object must be given back to the cache rtnl_neigh_put(neigh);
// Allocate an empty neighbour handle to be filled out with the attributes // of the new neighbour. struct rtnl_neigh *neigh = rtnl_neigh_alloc(); // Fill out the attributes of the new neighbour rtnl_neigh_set_ifindex(neigh, ifindex); rtnl_neigh_set_dst(neigh, dst_addr); rtnl_neigh_set_state(neigh, rtnl_neigh_str2state("permanent")); // 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_neigh_build_add_request() // to be sent out using nl_send_auto_complete(). rtnl_neigh_add(nl_handle, neigh, NLM_F_REPLACE); // Free the memory rtnl_neigh_put(neigh);
// Allocate an empty neighbour object to be filled out with the attributes // matching the neighbour to be deleted. Alternatively a fully equipped // neighbour object out of a cache can be used instead. struct rtnl_neigh *neigh = rtnl_neigh_alloc(); // Neighbours are uniquely identified by their interface index and // destination address, you may fill out other attributes but they // will have no influence. rtnl_neigh_set_ifindex(neigh, ifindex); rtnl_neigh_set_dst(neigh, dst_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_neigh_build_delete_request() // to be sent out using nl_send_auto_complete(). rtnl_neigh_delete(handle, neigh, 0); // Free the memory rtnl_neigh_put(neigh);
// Allocate an empty neighbour object to be filled out with the attributes // matching the neighbour to be changed and the new parameters. Alternatively // a fully equipped modified neighbour object out of a cache can be used. struct rtnl_neigh *neigh = rtnl_neigh_alloc(); // Identify the neighbour to be changed by its interface index and // destination address rtnl_neigh_set_ifindex(neigh, ifindex); rtnl_neigh_set_dst(neigh, dst_addr); // The link layer address may be modified, if so it is wise to change // its state to "permanent" in order to avoid having it overwritten. rtnl_neigh_set_lladdr(neigh, lladdr); // Secondly the state can be modified allowing normal neighbours to be // converted into permanent entries or to manually confirm a neighbour. rtnl_neigh_set_state(neigh, state); // 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_neigh_build_change_request() // to be sent out using nl_send_auto_complete(). rtnl_neigh_change(handle, neigh, 0); // Free the memory rtnl_neigh_put(neigh);
Neighbour States Translations | |
char * | rtnl_neigh_state2str (int state, char *buf, size_t len) |
int | rtnl_neigh_str2state (const char *name) |
Neighbour Flags Translations | |
char * | rtnl_neigh_flags2str (int flags, char *buf, size_t len) |
int | rtnl_neigh_str2flag (const char *name) |
Neighbour Object Allocation/Freeage | |
struct rtnl_neigh * | rtnl_neigh_alloc (void) |
void | rtnl_neigh_put (struct rtnl_neigh *neigh) |
Neighbour Cache Managament | |
struct nl_cache * | rtnl_neigh_alloc_cache (struct nl_handle *handle) |
Build a neighbour cache including all neighbours currently configured in the kernel. | |
struct rtnl_neigh * | rtnl_neigh_get (struct nl_cache *cache, int ifindex, struct nl_addr *dst) |
Look up a neighbour by interface index and destination address. | |
Neighbour Addition | |
struct nl_msg * | rtnl_neigh_build_add_request (struct rtnl_neigh *tmpl, int flags) |
Build netlink request message to add a new neighbour. | |
int | rtnl_neigh_add (struct nl_handle *handle, struct rtnl_neigh *tmpl, int flags) |
Add a new neighbour. | |
Neighbour Deletion | |
struct nl_msg * | rtnl_neigh_build_delete_request (struct rtnl_neigh *neigh, int flags) |
Build a netlink request message to delete a neighbour. | |
int | rtnl_neigh_delete (struct nl_handle *handle, struct rtnl_neigh *neigh, int flags) |
Delete a neighbour. | |
Neighbour Modification | |
struct nl_msg * | rtnl_neigh_build_change_request (struct rtnl_neigh *neigh, int flags) |
Build a netlink request message to change neighbour attributes. | |
int | rtnl_neigh_change (struct nl_handle *handle, struct rtnl_neigh *neigh, int flags) |
Change neighbour attributes. | |
Attributes | |
void | rtnl_neigh_set_state (struct rtnl_neigh *neigh, int state) |
int | rtnl_neigh_get_state (struct rtnl_neigh *neigh) |
void | rtnl_neigh_unset_state (struct rtnl_neigh *neigh, int state) |
void | rtnl_neigh_set_flags (struct rtnl_neigh *neigh, unsigned int flags) |
unsigned int | rtnl_neigh_get_flags (struct rtnl_neigh *neigh) |
void | rtnl_neigh_unset_flags (struct rtnl_neigh *neigh, unsigned int flags) |
void | rtnl_neigh_set_ifindex (struct rtnl_neigh *neigh, int ifindex) |
int | rtnl_neigh_get_ifindex (struct rtnl_neigh *neigh) |
void | rtnl_neigh_set_lladdr (struct rtnl_neigh *neigh, struct nl_addr *addr) |
struct nl_addr * | rtnl_neigh_get_lladdr (struct rtnl_neigh *neigh) |
int | rtnl_neigh_set_dst (struct rtnl_neigh *neigh, struct nl_addr *addr) |
struct nl_addr * | rtnl_neigh_get_dst (struct rtnl_neigh *neigh) |
void | rtnl_neigh_set_family (struct rtnl_neigh *neigh, int family) |
void | rtnl_neigh_set_type (struct rtnl_neigh *neigh, int type) |
int | rtnl_neigh_get_type (struct rtnl_neigh *neigh) |
struct nl_cache* rtnl_neigh_alloc_cache | ( | struct nl_handle * | handle | ) | [read] |
handle | netlink handle |
Definition at line 534 of file neigh.c.
References nl_cache_alloc(), nl_cache_free(), and nl_cache_refill().
struct rtnl_neigh* rtnl_neigh_get | ( | struct nl_cache * | cache, | |
int | ifindex, | |||
struct nl_addr * | dst | |||
) | [read] |
cache | neighbour cache | |
ifindex | interface index the neighbour is on | |
dst | destination address of the neighbour |
Definition at line 559 of file neigh.c.
References nl_addr_cmp(), and nl_object_get().
struct nl_msg* rtnl_neigh_build_add_request | ( | struct rtnl_neigh * | tmpl, | |
int | flags | |||
) | [read] |
tmpl | template with data of new neighbour | |
flags | additional netlink message flags |
rtnl_neigh_set_*
functions.The following attributes must be set in the template:
Definition at line 633 of file neigh.c.
References NLM_F_CREATE.
Referenced by rtnl_neigh_add().
int rtnl_neigh_add | ( | struct nl_handle * | handle, | |
struct rtnl_neigh * | tmpl, | |||
int | flags | |||
) |
handle | netlink handle | |
tmpl | template with requested changes | |
flags | additional netlink message flags |
The following attributes must be set in the template:
Definition at line 656 of file neigh.c.
References nl_send_auto_complete(), nl_wait_for_ack(), nlmsg_free(), and rtnl_neigh_build_add_request().
struct nl_msg* rtnl_neigh_build_delete_request | ( | struct rtnl_neigh * | neigh, | |
int | flags | |||
) | [read] |
neigh | neighbour to delete | |
flags | additional netlink message flags |
Definition at line 693 of file neigh.c.
Referenced by rtnl_neigh_delete().
int rtnl_neigh_delete | ( | struct nl_handle * | handle, | |
struct rtnl_neigh * | neigh, | |||
int | flags | |||
) |
handle | netlink handle | |
neigh | neighbour to delete | |
flags | additional netlink message flags |
Definition at line 711 of file neigh.c.
References nl_send_auto_complete(), nl_wait_for_ack(), nlmsg_free(), and rtnl_neigh_build_delete_request().
struct nl_msg* rtnl_neigh_build_change_request | ( | struct rtnl_neigh * | neigh, | |
int | flags | |||
) | [read] |
neigh | the neighbour to change | |
flags | additional netlink message flags |
Definition at line 750 of file neigh.c.
References NLM_F_REPLACE.
Referenced by rtnl_neigh_change().
int rtnl_neigh_change | ( | struct nl_handle * | handle, | |
struct rtnl_neigh * | neigh, | |||
int | flags | |||
) |
handle | netlink handle | |
neigh | neighbour to be changed | |
flags | additional netlink message flags |
Definition at line 770 of file neigh.c.
References nl_send_auto_complete(), nl_wait_for_ack(), nlmsg_free(), and rtnl_neigh_build_change_request().