Files
2026-07-30 11:19:44 +05:30

359 lines
14 KiB
C

/*
******************************************************************************
* HEADER FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipnet_rtnetlink.h,v $ $Revision: 1.9.10.1 $
* $Source:
* $Author: svc-cmnet $ $Date: 2013-03-13 07:45:36 $
* $State: Exp $ $Locker: $
*
* INTERPEAK_COPYRIGHT_STRING
* Design and implementation by Kenneth Jonsson <kenneth@interpeak.se>
******************************************************************************
*/
#ifndef IPNET_RTNETLINK_H
#define IPNET_RTNETLINK_H
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
* This is the header file for the Linux compatible NETLINK interface
*/
/*
****************************************************************************
* 2 CONFIGURATION
****************************************************************************
*/
#include "ipnet_config.h"
/*
****************************************************************************
* 3 INCLUDE FILES
****************************************************************************
*/
#include "ipnet_netlink.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
****************************************************************************
* 4 DEFINES
****************************************************************************
*/
/*
****************************************************************************
* 5 TYPES
****************************************************************************
*/
struct Ip_rtnl_link_ops;
struct Ip_rtnl_link_stats;
struct Ipnet_netif_struct;
struct Ipnet_socket_struct;
typedef int (*Ipnet_rtnetlink_do_t) (Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
struct Ip_rtattr **rta,
int family);
/* Basic callback */
/**/
typedef struct Ipnet_rtnetlink_func_table
{
Ip_size_t nl_rta_max;
Ip_size_t nl_size_min;
Ipnet_netlink_dump_t nl_dump;
Ipnet_rtnetlink_do_t nl_do;
} Ipnet_rtnetlink_func_table_t;
typedef struct Ipnet_rtnetlink_table
{
int nl_cmd;
Ipnet_rtnetlink_func_table_t nl_func_table;
} Ipnet_rtnetlink_table_t;
typedef struct Ipnet_rtnetlink_config
{
struct Ipnet_rtnetlink_table **family_event[IP_AF_MAX];
} Ipnet_rtnetlink_config_t;
/*
****************************************************************************
* 6 PROTOTYPES
****************************************************************************
*/
#ifdef IPCOM_USE_INET6
IP_GLOBAL Ip_u8 ipnet_rtnetlink_ip6_get_addr_flags(Ipnet_ip6_addr_entry *addr);
IP_GLOBAL Ip_u32 ipnet_rtnetlink_ip6_get_addr_x_flags(Ipnet_ip6_addr_entry *addr);
IP_GLOBAL Ip_u32 ipnet_rtnetlink_ip6_rtscope_to_scope(Ip_u32 scope);
IP_GLOBAL Ip_u32 ipnet_rtnetlink_ip6_scope_to_rtscope(Ip_u32 scope);
#endif /* IPCOM_USE_INET6 */
IP_GLOBAL Ip_u16 ipnet_rtnetlink_neigh_nc2nud(Ipnet_neigh *neigh);
IP_GLOBAL int ipnet_rtnetlink_neigh_nud2nc(Ip_u16 ndm_state);
IP_PUBLIC int
ipnet_netlink_rtm_newrule (Ip_u8 *data, Ip_size_t len,
struct Ip_nlmsghdr *nlh, void *arg, int vr);
IP_PUBLIC int
ipnet_netlink_rtm_delrule (Ip_u8 *data, Ip_size_t len,
struct Ip_nlmsghdr *nlh, void *arg);
IP_PUBLIC int
ipnet_netlink_rtm_dumprule (Ip_u8 *data, Ip_size_t len,
struct Ipnet_netlink_callback *cb);
IP_GLOBAL void
ipnet_rtnetlink_broadcast(Ipcom_pkt *pkt, int msg_group);
#ifdef IPCOM_USE_INET
IP_GLOBAL int
ipnet_rtnetlink_ip4_addr_dump(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
int req_addr_type,
Ip_ptrdiff_t *args);
IP_GLOBAL int
ipnet_rtnetlink_ip4_getroute(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta);
IP_GLOBAL int
ipnet_rtnetlink_ip4_newaddr(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta);
IP_GLOBAL int
ipnet_rtnetlink_ip4_deladdr(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta);
#endif /* IPCOM_USE_INET */
#ifdef IPCOM_USE_INET6
IP_GLOBAL int
ipnet_rtnetlink_ip6_addr_dump(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
int req_addr_type,
Ip_ptrdiff_t *args);
IP_GLOBAL int
ipnet_rtnetlink_ip6_getroute(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta);
IP_GLOBAL int
ipnet_rtnetlink_ip6_deladdr(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta);
IP_GLOBAL int
ipnet_rtnetlink_ip6_newaddr(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta);
#endif /* IPCOM_USE_INET6 */
IP_GLOBAL int
ipnet_rtnetlink_addr_dump_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
int family,
Ip_ptrdiff_t *args);
IP_GLOBAL int
ipnet_rtnetlink_addr_newaddr_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_addr_deladdr_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_route_dump_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
int family,
Ip_ptrdiff_t *args);
IP_GLOBAL int
ipnet_rtnetlink_route_newroute_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_route_delroute_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_route_getroute_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_neigh_get_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_neigh_dump_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
int family,
Ip_ptrdiff_t *args);
IP_GLOBAL int
ipnet_rtnetlink_neigh_newneigh_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_neigh_delneigh_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_rule_dump_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
int family,
Ip_ptrdiff_t *args);
IP_GLOBAL int
ipnet_rtnetlink_rule_newrule_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_rule_delrule_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_vr_newvr_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_vr_delvr_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_vr_changevr_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_vr_dump_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
int family,
Ip_ptrdiff_t *args);
#ifdef IPNET_USE_RFC3971
IP_GLOBAL int
ipnet_rtnetlink_neigh_send_sign_req_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_neigh_newsend_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
struct Ip_rtattr **rta,
int family);
#endif
#ifdef IPCOM_FORWARDER_NAE
IP_GLOBAL int
ipnet_rtnetlink_fwcache_dump_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
int family,
Ip_ptrdiff_t *args);
IP_GLOBAL int
ipnet_rtnetlink_fwcache_delfwcache_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_nae_getnae_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
IP_GLOBAL int
ipnet_rtnetlink_nae_setnae_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
#endif
#ifdef IPCOM_USE_FORWARDER_IPSEC
IP_GLOBAL int
ipnet_rtnetlink_sacache_dump_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlmsg,
int family,
Ip_ptrdiff_t *args);
IP_GLOBAL int
ipnet_rtnetlink_sacache_delsacache_family(Ipnet_netlink_mem_t *mem,
struct Ip_nlmsghdr *nlh,
struct Ip_rtattr **rta,
int family);
#endif
IP_GLOBAL void
ipnet_rtnetlink_register_ops(struct Ip_rtnl_link_ops *ops);
IP_GLOBAL struct Ip_rtnl_link_ops *
ipnet_rtnetlink_get_ops(const char *kind);
IP_GLOBAL Ipnet_rtnetlink_func_table_t *
ipnet_rtnetlink_family_get_dump(struct Ipnet_rtnetlink_table ***table,
int family,
int cmd);
IP_GLOBAL Ipnet_rtnetlink_func_table_t *
ipnet_rtnetlink_family_get_do(struct Ipnet_rtnetlink_table ***table,
int family,
int cmd);
#ifdef __cplusplus
}
#endif
#endif /* IPNET_NETLINK_H */
/*
****************************************************************************
* END OF FILE
****************************************************************************
*/