secgateway/Platform/modules/netlink_api/libnetlink_k.h

95 lines
3.3 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.

#ifndef LIBNETLINKK_K_H
#define LIBNETLINKK_K_H
#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"
#define NETLINK_DEBUG(debugfs_enable, ...) \
if(DEBUGFS_PRK_ONOFF != debugfs_enable) printk(__VA_ARGS__)
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 dfs;
struct commnl_msgtype_process* msg_processer;
int msg_processer_num;
unsigned long debugfs_prk_enable;
};
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;
struct netlink_debugfs dfs;
};
extern void printk_mem(unsigned char * p,int len);
extern void printk_ipaddress(unsigned int address);
/****************************************************************/
/*函数功能:注册内核态配置接收消息处理函数。 */
/*输入参数: */
/*msgtype:注册的消息类型。*/
/*doit:对应的消息接收处理函数;*/
/*dumpit,calcit:框架预留接口暂未使用。填NULL.*/
/*输出参数: WU */
/*返回值0注册成功< 0,失败 */
/****************************************************************/
int commnl_register(struct commnl_msgtype_process *msg_handlers, int msgtype,
commnl_doit_func doit, commnl_dumpit_func dumpit,
commnl_calcit_func calcit);
int commnl_unregister(struct commnl_msgtype_process *msg_handlers, 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 commnl_msgtype_process* msg_process);
extern int nf_nlmsg_multicast(struct netlinkk_cfg *g_nlcfg, struct sk_buff *skb);
extern int debugfs_prk_onoff(struct netlinkk_cfg *g_nlcfg,
struct nlmsghdr *nlh,struct netlink_ext_ack *extack);
#endif