Chapter 4. Interfaces: Ethernet
来源:互联网 发布:java编程思想 编辑:程序博客网 时间:2024/05/16 09:53
- 对于典型的ethernet驱动流程图如下
- 接收流程
- 以太包接收到之后,触发硬件中断,硬件中断调用leread
- leread函数调用m_devget将不带ETH头的报文存入一个mbuf链,并设置mbuf的flag标志,指示是组播还是广播包,之后调用ether_input
- ether_input根据eth报文头中的type字段将报文分发到不同的接收队列,如ipintrq/arpintrq
- 发送流程
- ether_output检查参数rt0的有效性,如果无效,则重新查找
- 调用arpresove获取mac地址;或者直接从参数dst中提取mac地址和eth类型
- 通过M_PREPEND在mbuf链中添加eth头,eth头的源mac地址从ifp的arpcom结构中获取
- 将完整的以太帧挂入ifp->if_snd队列
- 如果硬件没有启动发送则启动发送过程
- 对网络接口的IOCTL配置
- 对网络接口的配置通过IOCTL进行,FD可以是任意一种socket插口
- icoctl函数根据fd的类型会分发到soo_ioctl中
- soo_ioctl函数根据cmd命令字的group属性进行分发,如果是对网络接口的配置会分发到ifioctl函数中
- ifconf函数用于实现SIOCGIFCONFF cmd功能,用户可以通过该接口获取所有网络接口的所有地址(包括链路地址和IP地址)
- 在ifioctl中直接处理SIOCGIFFLAGS cmd功能,如果有对网络接口的UP/DOWN状态改变会调用if_down/if_up函数通知高层协议栈,调用ifp->if_ioctl通知底层驱动;
- if_up/if_down
- 通过调用pfctlinput通知各协议簇端口状态变更,对于IP协议栈,则会重新出发选路;
- 通过调用rt_ifmsg通知路由系统改端口状态变更
- ifp->ioctl函数
- 该函数由网络接口驱动实现,负责关闭和开启网络端口
- if_up/if_down
- 目前没有实现的cmd命令字转交so->so_proto->pr_usrreq 处理
- Chapter 4. Interfaces: Ethernet
- Chapter 6 Interfaces and Inner Classes.md
- Chapter 2. Ethernet Table of Contents
- PpLK: |Practical Java| Chapter 6 Classes and Interfaces
- Linker and Libraries Guide Chapter 6 Support Interfaces
- Interfaces
- Interfaces
- interfaces
- Ethernet
- ethernet
- ethernet
- Linker and Libraries Guide Chapter 5 Application Binary Interfaces and Versioning
- ATL Internals 2ed复习.chapter 8.COM Collection and Enumeration Interfaces
- Chapter 4. IP Routing
- Chapter 4. Spring 资源
- Chapter 4. Locks
- Chapter 4. XML Support
- Chapter 4. URLs
- 微博和SNS推广的巨大商机
- 如何写出无法维护的代码
- 苹果产品其实也没多少大的创新
- 40种javascript网页常用小技巧
- 采用开源软件建站的麻烦
- Chapter 4. Interfaces: Ethernet
- 新浪已经购入eju.com域名
- View编程(4): Template method
- 外贸电子商务B-C到底怎么赚钱
- Tyvj 1082 找朋友
- 线程控制的基本方法
- 时间的自动变化,js
- apache + tomcat 单IP多域名多应用配置(1)
- 软件公司面试小结