📄 ip_vs_conn.c.txt
字号:
any problems, send mails to sindybear@163.com
相关文件
产成一个新的连接入口并将它连接到ip_vs_conn_tab中
struct ip_vs_conn *
ip_vs_conn_new(int proto, __u32 caddr, __u16 cport, __u32 vaddr, __u16 vport,
__u32 daddr, __u16 dport, unsigned flags,
struct ip_vs_dest *dest)
cp = kmem_cache_alloc(ip_vs_conn_cachep, GFP_ATOMIC); //分配连接结构
memset(cp, 0, sizeof(*cp)); //结构值0
…… //进行结构赋值,其中flags=0
ip_vs_bind_app(cp); //???
ip_vs_bind_dest(cp, dest); //将目标机器绑定到这个连接上
vs_set_state_timeout(cp, IP_VS_S_NONE); //设置超时处理
ip_vs_bind_xmit(cp); //绑定发送函数
ip_vs_conn_hash(cp); //将连接连接入连接hash表中
ip_vs_bind_dest(struct ip_vs_conn *cp, struct ip_vs_dest *dest)
cp->dest = dest; //就是这么简单
static inline void ip_vs_bind_xmit(struct ip_vs_conn *cp)
switch (IP_VS_FWD_METHOD(cp)) {
case IP_VS_CONN_F_MASQ: //0
cp->packet_xmit = ip_vs_nat_xmit; //一般默认是她
break;
case IP_VS_CONN_F_TUNNEL:
cp->packet_xmit = ip_vs_tunnel_xmit;
break;
case IP_VS_CONN_F_DROUTE:
cp->packet_xmit = ip_vs_dr_xmit;
break;
case IP_VS_CONN_F_LOCALNODE:
cp->packet_xmit = ip_vs_null_xmit;
break;
case IP_VS_CONN_F_BYPASS:
cp->packet_xmit = ip_vs_bypass_xmit;
break;
}
这个函数是nat的核心发送函数
static int ip_vs_nat_xmit(struct sk_buff *skb, struct ip_vs_conn *cp)
ip_send(skb); //将数据宝发送出去
return NF_STOLEN; //将数据包截流。因为已经发送出去了一个,这个当然丢弃了
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -