卷2 第20章 选路插口
20.1 引言
选路插口(PF_ROUTE)用于进程与内核交换选路消息。
20.2 routedomain和protosw结构
routedomain
- 域:PF_ROUTE
- 名称:“route”
- protosw:routsw
routsw
- 类型:SOCK_RAW
- 输入:raw_input
- 输出:route_output
- 用户请求:route_usrreq
20.3 选路控制块
rawcb结构
| 成员 | 说明 |
|---|---|
| rcb_next/prev | 链表指针 |
| rcb_socket | 回指socket |
| rcb_proto | 协议 |
| rcb_faddr | 远端地址 |
20.4 raw_init函数
- 初始化rawcb链表
20.5 route_output函数
处理命令
- RTM_ADD:rtrequest
- RTM_DELETE:rtrequest
- RTM_CHANGE:修改路由
- RTM_GET:返回路由信息
- RTM_LOCK:锁定度量
响应处理
- 构造响应消息
- 调用raw_input发送
20.6 rt_xaddrs函数
- 从消息中提取地址指针
- 填充rt_addrinfo结构
20.7 rt_setmetrics函数
- 设置路由度量
- 检查锁定标志
20.8 raw_input函数
- 选择接收进程
- 复制消息到接收缓存
20.9 route_usrreq函数
- PRU_ATTACH:分配rawcb
- PRU_DETACH:释放rawcb
- 设置SO_USELOOPBACK
20.10 raw_usrreq函数
请求处理
- PRU_ATTACH:raw_attach
- PRU_DETACH:raw_detach
- PRU_SEND:route_output
- PRU_SOCKADDR:返回本地地址
- PRU_PEERADDR:返回远端地址
20.11 raw_attach/detach/disconnect
- raw_attach:插入链表
- raw_detach:从链表删除
- raw_disconnect:断开连接
20.12 小结
选路插口提供进程访问内核路由表的接口。rawcb管理选路控制块。