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

经验分享 程序员 微信小程序 职场和发展