Lines Matching refs:skb

51 static bool is_supervision_frame(struct hsr_priv *hsr, struct sk_buff *skb)  in is_supervision_frame()  argument
55 WARN_ON_ONCE(!skb_mac_header_was_set(skb)); in is_supervision_frame()
56 hdr = (struct hsr_ethhdr_sp *) skb_mac_header(skb); in is_supervision_frame()
77 struct sk_buff *skb; in create_stripped_skb() local
82 skb = __pskb_copy(skb_in, skb_headroom(skb_in) - HSR_HLEN, GFP_ATOMIC); in create_stripped_skb()
84 if (skb == NULL) in create_stripped_skb()
87 skb_reset_mac_header(skb); in create_stripped_skb()
89 if (skb->ip_summed == CHECKSUM_PARTIAL) in create_stripped_skb()
90 skb->csum_start -= HSR_HLEN; in create_stripped_skb()
96 dst = skb_mac_header(skb); in create_stripped_skb()
99 skb->protocol = eth_hdr(skb)->h_proto; in create_stripped_skb()
100 return skb; in create_stripped_skb()
112 static void hsr_fill_tag(struct sk_buff *skb, struct hsr_frame_info *frame, in hsr_fill_tag() argument
124 lsdu_size = skb->len - 14; in hsr_fill_tag()
128 hsr_ethhdr = (struct hsr_ethhdr *) skb_mac_header(skb); in hsr_fill_tag()
143 struct sk_buff *skb; in create_tagged_skb() local
146 skb = __pskb_copy(skb_o, skb_headroom(skb_o) + HSR_HLEN, GFP_ATOMIC); in create_tagged_skb()
147 if (skb == NULL) in create_tagged_skb()
149 skb_reset_mac_header(skb); in create_tagged_skb()
151 if (skb->ip_summed == CHECKSUM_PARTIAL) in create_tagged_skb()
152 skb->csum_start += HSR_HLEN; in create_tagged_skb()
158 src = skb_mac_header(skb); in create_tagged_skb()
159 dst = skb_push(skb, HSR_HLEN); in create_tagged_skb()
161 skb_reset_mac_header(skb); in create_tagged_skb()
163 hsr_fill_tag(skb, frame, port); in create_tagged_skb()
165 return skb; in create_tagged_skb()
186 static void hsr_deliver_master(struct sk_buff *skb, struct net_device *dev, in hsr_deliver_master() argument
192 was_multicast_frame = (skb->pkt_type == PACKET_MULTICAST); in hsr_deliver_master()
193 hsr_addr_subst_source(node_src, skb); in hsr_deliver_master()
194 skb_pull(skb, ETH_HLEN); in hsr_deliver_master()
195 res = netif_rx(skb); in hsr_deliver_master()
200 dev->stats.rx_bytes += skb->len; in hsr_deliver_master()
206 static int hsr_xmit(struct sk_buff *skb, struct hsr_port *port, in hsr_xmit() argument
210 hsr_addr_subst_dest(frame->node_src, skb, port); in hsr_xmit()
215 ether_addr_copy(eth_hdr(skb)->h_source, port->dev->dev_addr); in hsr_xmit()
217 return dev_queue_xmit(skb); in hsr_xmit()
235 struct sk_buff *skb; in hsr_forward_do() local
263 skb = frame_get_tagged_skb(frame, port); in hsr_forward_do()
265 skb = frame_get_stripped_skb(frame, port); in hsr_forward_do()
266 if (skb == NULL) { in hsr_forward_do()
271 skb->dev = port->dev; in hsr_forward_do()
273 hsr_deliver_master(skb, port->dev, frame->node_src); in hsr_forward_do()
275 hsr_xmit(skb, port, frame); in hsr_forward_do()
280 static void check_local_dest(struct hsr_priv *hsr, struct sk_buff *skb, in check_local_dest() argument
287 if (hsr_addr_is_self(hsr, eth_hdr(skb)->h_dest)) { in check_local_dest()
289 skb->pkt_type = PACKET_HOST; in check_local_dest()
294 if ((skb->pkt_type == PACKET_HOST) || in check_local_dest()
295 (skb->pkt_type == PACKET_MULTICAST) || in check_local_dest()
296 (skb->pkt_type == PACKET_BROADCAST)) { in check_local_dest()
305 struct sk_buff *skb, struct hsr_port *port) in hsr_fill_frame_info() argument
310 frame->is_supervision = is_supervision_frame(port->hsr, skb); in hsr_fill_frame_info()
311 frame->node_src = hsr_get_node(&port->hsr->node_db, skb, in hsr_fill_frame_info()
316 ethhdr = (struct ethhdr *) skb_mac_header(skb); in hsr_fill_frame_info()
325 frame->skb_hsr = skb; in hsr_fill_frame_info()
326 frame->sequence_nr = hsr_get_skb_sequence_nr(skb); in hsr_fill_frame_info()
328 frame->skb_std = skb; in hsr_fill_frame_info()
338 check_local_dest(port->hsr, skb, frame); in hsr_fill_frame_info()
344 void hsr_forward_skb(struct sk_buff *skb, struct hsr_port *port) in hsr_forward_skb() argument
348 if (skb_mac_header(skb) != skb->data) { in hsr_forward_skb()
354 if (hsr_fill_frame_info(&frame, skb, port) < 0) in hsr_forward_skb()
367 kfree_skb(skb); in hsr_forward_skb()