11#ifndef _DAO_LIB_NETLINK_ROUTE_H
12#define _DAO_LIB_NETLINK_ROUTE_H
14#include <linux/rtnetlink.h>
15#include <netlink/cache.h>
16#include <netlink/route/addr.h>
17#include <netlink/route/link.h>
18#include <netlink/route/neighbour.h>
19#include <netlink/route/route.h>
31#define DAO_NETLINK_APP_IF_COOKIE_INITIALIZER (~0u)
34#define dao_foreach_netlink_neigh_states \
46#define dao_foreach_netlink_route_proto \
55#define _(n, state) DAO_NETLINK_ROUTE_PROTO_##state = RTPROT_##state,
61typedef enum dao_netlink_action {
62 DAO_NETLINK_ACTION_DEL = 0,
63 DAO_NETLINK_ACTION_ADD = 1,
64 DAO_NETLINK_ACTION_REPLACE = 2,
65 DAO_NETLINK_ACTION_UNKNOWN,
66} dao_netlink_action_t;
93#define dao_foreach_netlink_route_types \
109#define _(n, state) DAO_NETLINK_ROUTE_TYPES_##state = RTN_##state,
147 DAO_NETLINK_ROUTE_NH_F_DEAD = RTNH_F_DEAD,
148 DAO_NETLINK_ROUTE_NH_F_PERVASIVE = RTNH_F_PERVASIVE,
149 DAO_NETLINK_ROUTE_NH_F_ONLINK = RTNH_F_ONLINK,
174 struct in6_addr dst_in6_addr;
178 int is_default_route;
179 uint32_t route_flags;
187 int via_addr_prefixlen;
188 struct in6_addr via_in6_addr;
192 uint16_t nh_from_realms;
193 uint16_t nh_to_realms;
199#define _(n, state) DAO_NETLINK_NEIGHBOR_STATE_##state = NUD_##state,
205#define DAO_NETLINK_NEIGHBOR_STATE_VALID \
206 (DAO_NETLINK_NEIGHBOR_STATE_PERMANENT | DAO_NETLINK_NEIGHBOR_STATE_REACHABLE | \
207 DAO_NETLINK_NEIGHBOR_STATE_NOARP)
232 struct in6_addr dst_in6_addr;
233 uint8_t neigh_ll_addr[RTE_ETHER_ADDR_LEN];
354 dao_netlink_action_t action);
388 const char *prefix_interface_name);
struct dao_netlink_route_callback_ops dao_netlink_route_callback_ops_t
int dao_netlink_route_notifier_register(dao_netlink_route_callback_ops_t *ops, const char *prefix_interface_name)
Register application callbacks for getting route updates.
struct dao_netlink_route_ip_addr dao_netlink_route_ip_addr_t
dao_netlink_route_proto_t
struct dao_netlink_route_ip_route dao_netlink_route_ip_route_t
struct dao_netlink_route_link dao_netlink_route_link_t
int dao_netlink_route_notifier_run(void)
Function to synchronize LINUX route tables with application.
dao_netlink_neigh_state_t
dao_netlink_route_types_t
#define dao_foreach_netlink_neigh_states
dao_netlink_route_nh_flags_t
dao_netlink_route_nh_attr_t
@ DAO_NETLINK_ROUTE_NH_ATTR_VIA_GW
@ DAO_NETLINK_ROUTE_NH_ATTR_NEWDST
@ DAO_NETLINK_ROUTE_NH_ATTR_REALMS
@ DAO_NETLINK_ROUTE_NH_ATTR_ENCAP
@ DAO_NETLINK_ROUTE_NH_ATTR_FLAGS
@ DAO_NETLINK_ROUTE_NH_ATTR_VIA
@ DAO_NETLINK_ROUTE_NH_ATTR_WEIGHT
@ DAO_NETLINK_ROUTE_NH_ATTR_IFINDEX
#define dao_foreach_netlink_route_types
struct dao_netlink_route_ip_neigh dao_netlink_route_ip_neigh_t
#define dao_foreach_netlink_route_proto
int(* ip_route_add_del)(dao_netlink_route_ip_route_t *dao_ip_route, dao_netlink_action_t action)
int(* ip_neigh_add_del)(dao_netlink_route_ip_neigh_t *dao_ip_neigh, int is_add)
int(* ip_local_addr_add_del)(dao_netlink_route_ip_addr_t *dao_ip_addr, int is_add)
Add or delete Local IP address to interface.
int(* link_add_del)(dao_netlink_route_link_t *dao_link, int is_add)
int(* get_app_interface_cookie)(const char *interface_name, int linux_ifindex, uint32_t *cookie)
Get application specific cookie for relevant LINUX tap interfaces. This helps application to work wit...
struct in6_addr local_in6_addr
uint8_t local_ll_addr[RTE_ETHER_ADDR_LEN]