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);
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().