免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2172 | 回复: 2
打印 上一主题 下一主题

klips 源码分析1 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 01:02 |只看该作者 |倒序浏览
1, 初始化

对于每个ipv4的上层协议,如:icmp,udp,tcp,igmp,esp,ah 都会定义一个inet_protocol的结构,并把这些结构放入到ip上层的协议链中。
处理ip包时,若需要调用上层处理函数,就根据上层协议号调用协议链中的handler来进行处理。
若使用klips的话, esp,ah协议在ipsec_klips_init()函数中注册,其他的协议都在inet_init()函数中进行注册。

1.1 数据结构

ip上层协议注册数据结构:
/* This is used to register protocols. */
struct net_protocol {
    int         (*handler)(struct sk_buff *skb);
    void            (*err_handler)(struct sk_buff *skb, u32 info);
    int         (*gso_send_check)(struct sk_buff *skb);
    struct sk_buff         *(*gso_segment)(struct sk_buff *skb,
                           int features);
    int         no_policy;
};

static struct net_protocol udp_protocol = {
    .handler =  udp_rcv,
    .err_handler =  udp_err,
    .no_policy =    1,
};

struct inet_protocol esp_protocol = {
    ipsec_rcv,          /* ESP handler      */
    NULL,     
};

struct inet_protocol ah_protocol = {
  .handler = ipsec_rcv,
  .no_policy = 1,
};


1.2 esp,ah协议的初始化流程:

ipsec_klips_init()
   |
openswan_inet_add_protocol()  //该函数就是调用内核的inet_add_protocol函数
   |
inet_add_protocol()


1.3 包的处理路径

ip_rcv()
    |
ip_local_deliver()
    |
ipsec_rcv()
    |
ipsec_rcv_decap()
    |
ipsec_rcv_decap_once()



论坛徽章:
0
2 [报告]
发表于 2012-06-18 10:37 |只看该作者
:wink:写的不错,继续啊

论坛徽章:
0
3 [报告]
发表于 2012-06-19 09:20 |只看该作者
生活真他妈好玩,因为生活老他妈玩我。

顶,是一种速度  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP