这里解释下从网卡PHY到IP层的数据接收流程:
这里是以函数调用方式来体现:
netif_add——>ethernetif_init——>low_level_init——>ethernetif_input——>low_level_input和tcpip_input——>
ethernet_input——>ip4_input(etharp_input、pppoe_disc_input)——>udp_input、tcp_input、icmp_input、igmp_input等
1.在netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);这个函数中,主要用到的是
ethernetif_init(对网口底层初始化)、tcpip_input(向上层递交数据)这两个函数。
2.在ethernetif_init函数中,调用low_level_init函数,low_level_init函数中创建ethernetif_input线程进行中断信号量方式的接收数
据,DMA接收到完整帧后释放信号量,ethernetif_input线程用low_level_input提取完整数据包,再通过tcpip_input中调用的
ethernet_input将数据传递给上层如:IP、ARP、PPOE等,具体递交给哪层由数据包类型决定,到这里底层PHY到IP层部分完成;
3.数据包递交到IP层后(只讨论含数据帧流程,ARP等不讨论),switch不同帧类型来将数据传递给不同传输层协议,如TCP、UDP等,这样数据就从IP层传输到了传输层,再递交给上层应用。至此,由IP层到应用层完成。
上面不同颜色含义:
浅绿色:底层PHY接收到IP层之间数据传递;
蓝色: IP层到应用层数据传递。