secgateway/Platform/modules/netlink_api/libnetlink_k.h

93 lines
3.2 KiB
C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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>
#include "../../../Common/commuapinl.h"
struct recv_debugfs {
unsigned int cfg_recv_succ;
unsigned int cfg_recv_fail;
unsigned int pde_recv_succ;
unsigned int pde_recv_fail;
};
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 netlink_debugfs netlink_dfs;
};
typedef int (*commnl_doit_func)(struct sk_buff *, struct nlmsghdr *,struct netlink_ext_ack *);
typedef int (*commnl_dumpit_func)(struct sk_buff *, struct netlink_callback *,struct netlink_ext_ack *);
typedef u16 (*commnl_calcit_func)(struct sk_buff *, struct nlmsghdr *,struct netlink_ext_ack *);
struct commnl_msgtype_process
{
int msgtype;
commnl_doit_func doit;
commnl_dumpit_func dumpit;
commnl_calcit_func calcit;
unsigned int cfg_recv_succ;
unsigned int cfg_recv_fail;
};
extern void printk_mem(unsigned char * p,int len);
extern void printk_ipaddress(unsigned int address);
extern int pdeliv_msgtype_register( int msgtype,commnl_doit_func doit,
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,
commnl_dumpit_func dumpit,commnl_calcit_func calcit);
extern int cfg_msgtype_unregister(int msgtype);
extern int pdeliv_msgtype_unregister(int msgtype);
/****************************************************************/
/*函数功能:在内核态创建报文上送通道,上送的 */
/*报文内容从链路层头开始。一个netlink协议号只能创建一个通道。 */
/*输入参数g_nlcfg */
/*输出参数: struct upmnl_handle * upmh ,存放创建的通道相关信息。*/
/*返回值0通道创建成果< 0,失败 */
/****************************************************************/
extern int libnetlinkk_init_byproto(struct netlinkk_cfg *g_nlcfg);
extern void libnetlinkk_exit(struct netlinkk_cfg *g_nlcfg);
extern int commnl_unicast(struct sock *sk, struct sk_buff *skb, u32 portid);
extern int debugfs_pkt_num_stati(struct netlinkk_cfg *g_nlcfg,
struct nlmsghdr *nlh,struct netlink_ext_ack *extack);
extern int debugfs_pkt_num_stati_witisend(struct netlinkk_cfg *g_nlcfg,
struct nlmsghdr *nlh,struct netlink_ext_ack *extack);
extern int nf_nlmsg_multicast(struct netlinkk_cfg *g_nlcfg, struct sk_buff *skb);