vxworks下调试网络----icmp记录(不完善)
ICMP协议分析
ICMP网络协议:工作在TCP/IP的网络层,请求类型为8,应答类型为0
Host主机向目标板ping命令的数据流向
在执行ping命令时:
ipcom_drv_eth_recv_end2 ---> ipcom_drv_eth_output
ipnet_queue_received_packet不会走
ipnet_icmp4_input函数会接收到主机ping的数据包,根据数据的类型,如果是8,设置应答类型,使用ipnet_icmp4_send函数,将准备好的数据发送出去
ipnet_ip4_local_rx
初始化流程
ipAttach ---> ipcom_drv_eth_init ---> ipcom_drv_eth_bind ---> mux2Bind ---> muxBindCommon ---> muxEndProtoRegister
协议栈分析简要:
协议栈中最主要的结构体Ipnet_netif和Ipcom_pkt;Ipnet_netif主要于网卡驱动有关,在使用ipAttach绑定网卡时创建并且添加Ipnet_netif到ipcom_port变量中, Ipcom_pkt主要是在接收或发送网络数据时使用,mux2OverEndReceive函数中会获取Ipnet_netif结构体,
Ipcom_pkt主要用于网络数据的接收,在
ipnet_ip4_init函数初始化
ipnet_ip4_transport_layer_rx 的默认值为ipnet_ip4_unsupported_transport_layer_rx
ipnet_ip4_transport_layer_rx
ipnet_ip4_transport_layer_rx[1] = ipnet_icmp4_input
ipnet_ip4_transport_layer_rx[2] = ipnet_igmp_input
ipnet_ip4_transport_layer_rx[3] =
ipnet_ip4_transport_layer_rx[4] = ipnet_tunnel_ip4_rx
ipnet_ip4_transport_layer_rx[6] = iptcp_ip4_rx
ipnet_ip4_transport_layer_rx[17] = ipnet_udp_ip4_rx
ipnet_ip4_transport_layer_rx[47] = ipnet_tunnel_ip4_rx
ipnet_ip4_transport_layer_rx[55] = ipnet_tunnel_ip4_rx
ipnet_ip4_transport_layer_rx[103] = ipnet_pim_ip4_rx
分析过程
在ipcom_drv_eth_output入口处添加taskSuspend(0),使用tt得出以下调用关系(标注绿色是自己反汇编的函数)
0xc0764480 jobQueueProcess+0x178: 0xc0563fe0 () synEndRxHandle
0xc0564198 synopGMAC_reset+0x638: 0xc044ba84 () muxReceive
0xc044bb3c muxReceive +0xbc : 0xc0651520 () mux2OverEndReceive
0xc06515f4 mux2OverEndInit+0x13c: 0xc0761460 () ipcom_drv_eth_recv_end2
0xc07614bc trcStackTrace+0x64c: ipcom_pkt_input ()
0xc0761950 ipcom_pkt_input+0x2c : ipnet_pkt_input ()
0xc0403fd8 ipnet_pkt_input+0x1d4: 0xc0761968 () ipnet_eth_rx
0xc076234c ipcom_pkt_input+0xa28: ipnet_ip4_input ()
0xc0762f90 ipnet_ip4_input+0x4cc: ipnet_ip4_rx ()
0xc0762aa4 ipnet_ip4_rx +0x188: 0xc040f5e0 () ipnet_ip4_local_rx
0xc040fa24 ipnet_ip4_fragment_timeout_peer+0x13b0: 0xc041bcbc () ipnet_icmp4_input
0xc041bfcc ipnet_ip4_pkt_with_iphdr_rawsock_tx+0xd44: ipnet_icmp4_send ()
0xc041698c ipnet_icmp4_send+0x1008: 0xc040f028 () ipnet_ip4_local_tx
0xc040f388 ipnet_ip4_fragment_timeout_peer+0xd14: 0xc07624fc () ipnet_eth_tx
0xc07626a8 ipcom_pkt_input+0xd84: ipnet_if_output ()
0xc0764ccc ipnet_if_output+0x10c: ipnet_if_drv_output ()
0xc0764a24 ipnet_if_drv_output+0x8c : 0xc0761524 () ipcom_drv_eth_output