WEB开发网
开发学院服务器服务器方案 LVS集群系统网络核心原理分析 阅读

LVS集群系统网络核心原理分析

 2008-11-26 10:59:09 来源:WEB开发网   
核心提示: hook:HOOK点的名字,对于IP层,LVS集群系统网络核心原理分析(3),就是取上面的五个值;skb:顾名思义indev:进来的设备,以struct net_device结构表示;outdev:出去的设备,谁先谁后,便要看优先级,以struct net_device结构表示;okfn:

hook:HOOK点的名字,对于IP层,就是取上面的五个值;

skb:顾名思义

indev:进来的设备,以struct net_device结构表示;

outdev:出去的设备,以struct net_device结构表示;

okfn:是个函数指针,当所有的该HOOK点的所有登记函数调用完后,转而走此流程。

这些点是已经在内核中定义好的,除非你是这部分内核代码的维护者,否则无权增加或修改,而在此检测点进行的处理,则可由用户指定。像packet filter,NAT,connection track这些功能,也是以这种方式提供的。正如netfilter的当初的设计目标--提供一个完善灵活的框架,为扩展功能提供方便。

如果我们想加入自己的代码,便要用nf_register_hook函数,其函数原型为:

int nf_register_hook(struct nf_hook_ops *reg)
struct nf_hook_ops://结构
struct nf_hook_ops
{
struct list_head list;
/* User fills in from here down. */
nf_hookfn *hook;
int pf;
int hooknum;
/* Hooks are ordered in ascending priority. */
int priority;
};

其实,类似LVS的做法就是生成一个struct nf_hook_ops结构的实例,并用nf_register_hook将其HOOK上。其中list项要初始化为{NULL,NULL};由于一般在 IP层工作,pf总是PF_INET;hooknum就是HOOK点;一个HOOK点可能挂多个处理函数,谁先谁后,便要看优先级,即priority的指定了。netfilter_ipv4.h中用一个枚举类型指定了内置的处理函数的优先级:

enum nf_ip_hook_priorities {
NF_IP_PRI_FIRST = INT_MIN,
NF_IP_PRI_CONNTRACK = -200,
NF_IP_PRI_MANGLE = -150,
NF_IP_PRI_NAT_DST = -100,
NF_IP_PRI_FILTER = 0,
NF_IP_PRI_NAT_SRC = 100,
NF_IP_PRI_LAST = INT_MAX,
};

上一页  1 2 3 4 5 6 7  下一页

Tags:LVS 集群

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接