secgateway/Platform/modules/netlink_api/libnetlink_k.h

81 lines
2.7 KiB
C
Raw Normal View History

2019-06-11 03:21:35 +00:00
#include <linux/module.h>
#include <linux/netlink.h>
#include <linux/netfilter.h>
#include <linux/ip.h>
#include <uapi/linux/netfilter_ipv4.h>
#include <uapi/linux/ip.h>
#include <net/netlink.h>
#include <net/net_namespace.h>
struct pdeliv_debugfs {
unsigned int rev_succ;
unsigned int rev_fail;
unsigned int pde_succ;
unsigned int pde_fail;
};
2019-06-11 03:21:35 +00:00
struct netlinkk_cfg
{
struct netlink_kernel_cfg cfg;
struct sock *sk; //内核端socket
int user_pid;/*用户态pid*/
unsigned int subscriptions;/*netlink总线netlink协议号*/
unsigned int groups;/*netlink 组播组*/
struct pdeliv_debugfs pdeliv_dfs;
2019-06-11 03:21:35 +00:00
};
typedef int (*commnl_doit_func)(struct sk_buff *, struct nlmsghdr *);
typedef int (*commnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
typedef u16 (*commnl_calcit_func)(struct sk_buff *, struct nlmsghdr *);
struct commnl_msgtype_process
{
int msgtype;
commnl_doit_func doit;
commnl_dumpit_func dumpit;
commnl_calcit_func calcit;
};
extern void printk_mem(unsigned char * p,int len);
extern void printk_ipaddress(unsigned int address);
2019-06-11 03:21:35 +00:00
extern int pdeliv_msgtype_register( int msgtype,commnl_doit_func doit,
2019-06-11 03:21:35 +00:00
commnl_dumpit_func dumpit,commnl_calcit_func calcit);
/****************************************************************/
/*函数功能:注册内核态配置接收消息处理函数。 */
/*输入参数: */
/*msgtype:注册的消息类型。*/
/*doit:对应的消息接收处理函数;*/
/*dumpit,calcit:框架预留接口暂未使用。填NULL.*/
/*输出参数: WU */
/*返回值0注册成功< 0,失败 */
/****************************************************************/
extern int cfg_msgtype_register( int msgtype,commnl_doit_func doit,
2019-06-11 03:21:35 +00:00
commnl_dumpit_func dumpit,commnl_calcit_func calcit);
extern int cfg_msgtype_unregister(int msgtype);
extern int pdeliv_msgtype_unregister(int msgtype);
2019-06-11 03:21:35 +00:00
/****************************************************************/
/*函数功能:在内核态创建报文上送通道,上送的 */
/*报文内容从链路层头开始。一个netlink协议号只能创建一个通道。 */
/*输入参数g_nlcfg */
/*输出参数: struct upmnl_handle * upmh ,存放创建的通道相关信息。*/
/*返回值0通道创建成果< 0,失败 */
/****************************************************************/
extern int libnetlinkk_init_byproto(struct netlinkk_cfg *g_nlcfg);
2019-06-11 03:21:35 +00:00
extern void libnetlinkk_exit(struct netlinkk_cfg *g_nlcfg);
2019-06-11 03:21:35 +00:00
extern int commnl_unicast(struct sock *sk, struct sk_buff *skb, u32 portid);
2019-06-11 03:21:35 +00:00