xxx
分类: LINUX
2009-12-12 22:27:08
struct packet_type {
__be16 type; /* This is really htons(ether_type). */
struct net_device *dev; /* NULL is wildcarded here */
int (*func) (struct sk_buff *,
struct net_device *,
struct packet_type *,
struct net_device *);
struct sk_buff *(*gso_segment)(struct sk_buff *skb,
int features);
int (*gso_send_check)(struct sk_buff *skb);
void *af_packet_priv;
struct list_head list;
};
这个结构是供属于不同协议的数据包使用的,用于数据链路层和网络层交互时,比如当有数据到来时通过其中的func指针调用网络层不同协议的函数来处理接收到的数据。
此结构的实例存储在ptype_base[]数组中
static struct packet_type ip_packet_type = {
.type = __constant_htons(ETH_P_IP),
.func = ip_rcv,
.gso_send_check = inet_gso_send_check,
.gso_segment = inet_gso_segment,
};
ip_packet_type是packet_type类型,当数据包属于ip类型时将用到此结构。