来来来,这里解释下从网卡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
这里是以函数调用方式来体现:
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