iP层以上的注册协议 inet_add_protocol就是注册在这里的 我试过注册一个TCP的,打印出地址来,有时可以,有时连我的 网络都全部瘫痪了,faint,暂时还没有找到原因。 看来有点搞不懂了,:=( struct inet_protocol * inet_protocol_base ---->+ struct inet_protocol inet_protos[32] + icmp_protocol +--------+ ┌----------------------------------+------>+------------+ | 1 |-----┘ struct inet_protocol | icmp_rcv() | |--------| igmp_protocol |------------| | 2 |--------------------------->+------------+ | NULL | |--------| | igmp_rcv() | |------------| | 3 | |------------| | NULL | |--------| | NULL | |------------| | . | |------------| |IPPROTO_ICMP| | . | |IPPROTO_IGMP| |------------| | . | |------------| | 0 | |--------| | 0 | |------------| | 6 |----------------------+ |------------| | NULL | |--------| + | NULL | |------------| | . | + |------------| | "ICMP" | | . | + | "IGMP" | +------------+ | . | + +------------+ |--------| + | 17 |-------------+ +---------------+ |--------| + + | . | + + | . | + + | . | + + |--------| + + struct inet_protocol | 32 | + + tcp_protocol +--------+ + +--------->+------------+ + struct inet_protocol |tcp_v4_rcv()| + udp_protocol |------------| +------------->+------------+ |tcp_v4_err()| | udp_rcv() | |------------| |------------| | NULL | | udp_err() | |------------| |------------| |IPPROTO_TCP | |IPPROTO_UDP | |------------| |------------| | 0 | | 0 | |------------| |------------| | NULL | | NULL | |------------| |------------| | "TCP" | | "UDP" | +------------+ +------------+