Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3169925
  • 博文数量: 685
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5303
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-19 14:17
个人简介

文章分类

全部博文(685)

文章存档

2015年(116)

2014年(569)

分类: 嵌入式

2014-11-05 18:40:39

原文地址:http://blog.chinaunix.net/uid-13746440-id-3076106.html
其中netlink的协议族注册是在net/netlink/af_netlink.c中完成的, af_netlink协议初始化如下
netlink_proto_init

1. 调用proto_register, 将netlink_proto结构挂接到系统的网络协议链表中
2. 分配MAX_LINKS个netlink表结构, nl_table
, 每个成员代表一种协议类型
3. 然后为nl_table中每种协议类型分配一个hash表的链头, 并进行初始化
4. 调用sock_register注册netlink协议族的操作结构. 这样就可以使用其注册的接口完成socket中的初始化动作了
5. 调用rtnetlink_init完成路由netlink的初始化

用户态: 套接字绑定, bind(socket_fd, (struct sockaddr *)&src_addr, sizeof(src_addr)
内核态: sys_bind
  • 对于 AF_INET 协议簇来讲,其地址格式是 strut sockaddr_in,对AF_NETLINK协议族而言, 其地址格式为
    struct sockaddr_nl, 而对于 socket 来讲,strut sockaddr 结构表示的地址格式实现了更高层次 的抽像,
    因为每种协议簇的地址不一定是相同的,所以,系统调用的第三个参数得指明该协议簇的地址格式的长度。
  • sys_bind入参包括套接字描述符, 地址, 和地址长度, 首先要根据socket_fd找到对应的struct socket *sock
    结构信息


阅读(2100) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~