这一章主要看网桥的处理。
网桥是一种2层网络互连设备,而不是一种网络协议。它在协议结构上并没有占有一席之地,因此不能通过向协议栈注册协议的方式来申请网桥数据包的处理。
skb = handle_bridge(skb, &pt_prev, &ret, orig_dev);
static inline struct sk_buff *handle_bridge(struct sk_buff *skb,
struct packet_type **pt_prev, int *ret,
struct net_device *orig_dev)
{
struct net_bridge_port *port;
if (skb->pkt_type == PACKET_LOOPBACK || 如果该数据包产生于本机,而目标同时为本机
(port = rcu_dereference(skb->dev->br_port)) == NULL) 如果该数据包的输入接口不是网桥接口
return skb; 以上两种情况都需要让上层协议进行处理
struct packet_type **pt_prev, int *ret,
struct net_device *orig_dev)
{
struct net_bridge_port *port;
if (skb->pkt_type == PACKET_LOOPBACK || 如果该数据包产生于本机,而目标同时为本机
(port = rcu_dereference(skb->dev->br_port)) == NULL) 如果该数据包的输入接口不是网桥接口
return skb; 以上两种情况都需要让上层协议进行处理