Lines Matching refs:skb
29 static int br_pass_frame_up(struct sk_buff *skb) in br_pass_frame_up() argument
31 struct net_device *indev, *brdev = BR_INPUT_SKB_CB(skb)->brdev; in br_pass_frame_up()
38 brstats->rx_bytes += skb->len; in br_pass_frame_up()
47 !br_allowed_egress(br, pv, skb)) { in br_pass_frame_up()
48 kfree_skb(skb); in br_pass_frame_up()
52 indev = skb->dev; in br_pass_frame_up()
53 skb->dev = brdev; in br_pass_frame_up()
54 skb = br_handle_vlan(br, pv, skb); in br_pass_frame_up()
55 if (!skb) in br_pass_frame_up()
58 return NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN, NULL, skb, in br_pass_frame_up()
63 static void br_do_proxy_arp(struct sk_buff *skb, struct net_bridge *br, in br_do_proxy_arp() argument
72 BR_INPUT_SKB_CB(skb)->proxyarp_replied = false; in br_do_proxy_arp()
77 if (!pskb_may_pull(skb, arp_hdr_len(dev))) { in br_do_proxy_arp()
81 parp = arp_hdr(skb); in br_do_proxy_arp()
113 arp_send(ARPOP_REPLY, ETH_P_ARP, sip, skb->dev, tip, in br_do_proxy_arp()
115 BR_INPUT_SKB_CB(skb)->proxyarp_replied = true; in br_do_proxy_arp()
123 int br_handle_frame_finish(struct sock *sk, struct sk_buff *skb) in br_handle_frame_finish() argument
125 const unsigned char *dest = eth_hdr(skb)->h_dest; in br_handle_frame_finish()
126 struct net_bridge_port *p = br_port_get_rcu(skb->dev); in br_handle_frame_finish()
137 if (!br_allowed_ingress(p->br, nbp_get_vlan_info(p), skb, &vid)) in br_handle_frame_finish()
143 br_fdb_update(br, p, eth_hdr(skb)->h_source, vid, false); in br_handle_frame_finish()
146 br_multicast_rcv(br, p, skb, vid)) in br_handle_frame_finish()
152 BR_INPUT_SKB_CB(skb)->brdev = br->dev; in br_handle_frame_finish()
158 skb2 = skb; in br_handle_frame_finish()
162 if (IS_ENABLED(CONFIG_INET) && skb->protocol == htons(ETH_P_ARP)) in br_handle_frame_finish()
163 br_do_proxy_arp(skb, br, vid, p); in br_handle_frame_finish()
166 skb2 = skb; in br_handle_frame_finish()
169 mdst = br_mdb_get(br, skb, vid); in br_handle_frame_finish()
170 if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) && in br_handle_frame_finish()
171 br_multicast_querier_exists(br, eth_hdr(skb))) { in br_handle_frame_finish()
174 skb2 = skb; in br_handle_frame_finish()
175 br_multicast_forward(mdst, skb, skb2); in br_handle_frame_finish()
176 skb = NULL; in br_handle_frame_finish()
180 skb2 = skb; in br_handle_frame_finish()
186 skb2 = skb; in br_handle_frame_finish()
188 skb = NULL; in br_handle_frame_finish()
191 if (skb) { in br_handle_frame_finish()
194 br_forward(dst->dst, skb, skb2); in br_handle_frame_finish()
196 br_flood_forward(br, skb, skb2, unicast); in br_handle_frame_finish()
205 kfree_skb(skb); in br_handle_frame_finish()
211 static int br_handle_local_finish(struct sock *sk, struct sk_buff *skb) in br_handle_local_finish() argument
213 struct net_bridge_port *p = br_port_get_rcu(skb->dev); in br_handle_local_finish()
217 if (p->flags & BR_LEARNING && br_should_learn(p, skb, &vid)) in br_handle_local_finish()
218 br_fdb_update(p->br, p, eth_hdr(skb)->h_source, vid, false); in br_handle_local_finish()
229 struct sk_buff *skb = *pskb; in br_handle_frame() local
230 const unsigned char *dest = eth_hdr(skb)->h_dest; in br_handle_frame()
233 if (unlikely(skb->pkt_type == PACKET_LOOPBACK)) in br_handle_frame()
236 if (!is_valid_ether_addr(eth_hdr(skb)->h_source)) in br_handle_frame()
239 skb = skb_share_check(skb, GFP_ATOMIC); in br_handle_frame()
240 if (!skb) in br_handle_frame()
243 p = br_port_get_rcu(skb->dev); in br_handle_frame()
281 if (NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN, NULL, skb, in br_handle_frame()
282 skb->dev, NULL, br_handle_local_finish)) { in br_handle_frame()
285 *pskb = skb; in br_handle_frame()
295 if ((*rhook)(skb)) { in br_handle_frame()
296 *pskb = skb; in br_handle_frame()
299 dest = eth_hdr(skb)->h_dest; in br_handle_frame()
304 skb->pkt_type = PACKET_HOST; in br_handle_frame()
306 NF_HOOK(NFPROTO_BRIDGE, NF_BR_PRE_ROUTING, NULL, skb, in br_handle_frame()
307 skb->dev, NULL, in br_handle_frame()
312 kfree_skb(skb); in br_handle_frame()