Lines Matching refs:frame

75 					   struct hsr_frame_info *frame)  in create_stripped_skb()  argument
93 if (frame->is_vlan) in create_stripped_skb()
103 static struct sk_buff *frame_get_stripped_skb(struct hsr_frame_info *frame, in frame_get_stripped_skb() argument
106 if (!frame->skb_std) in frame_get_stripped_skb()
107 frame->skb_std = create_stripped_skb(frame->skb_hsr, frame); in frame_get_stripped_skb()
108 return skb_clone(frame->skb_std, GFP_ATOMIC); in frame_get_stripped_skb()
112 static void hsr_fill_tag(struct sk_buff *skb, struct hsr_frame_info *frame, in hsr_fill_tag() argument
125 if (frame->is_vlan) in hsr_fill_tag()
132 hsr_ethhdr->hsr_tag.sequence_nr = htons(frame->sequence_nr); in hsr_fill_tag()
138 struct hsr_frame_info *frame, in create_tagged_skb() argument
155 if (frame->is_vlan) in create_tagged_skb()
163 hsr_fill_tag(skb, frame, port); in create_tagged_skb()
171 static struct sk_buff *frame_get_tagged_skb(struct hsr_frame_info *frame, in frame_get_tagged_skb() argument
174 if (frame->skb_hsr) in frame_get_tagged_skb()
175 return skb_clone(frame->skb_hsr, GFP_ATOMIC); in frame_get_tagged_skb()
182 return create_tagged_skb(frame->skb_std, frame, port); in frame_get_tagged_skb()
207 struct hsr_frame_info *frame) in hsr_xmit() argument
209 if (frame->port_rcv->type == HSR_PT_MASTER) { in hsr_xmit()
210 hsr_addr_subst_dest(frame->node_src, skb, port); in hsr_xmit()
232 static void hsr_forward_do(struct hsr_frame_info *frame) in hsr_forward_do() argument
237 hsr_for_each_port(frame->port_rcv->hsr, port) { in hsr_forward_do()
239 if (port == frame->port_rcv) in hsr_forward_do()
243 if ((port->type == HSR_PT_MASTER) && !frame->is_local_dest) in hsr_forward_do()
247 if ((port->type != HSR_PT_MASTER) && frame->is_local_exclusive) in hsr_forward_do()
251 if (hsr_register_frame_out(port, frame->node_src, in hsr_forward_do()
252 frame->sequence_nr)) in hsr_forward_do()
255 if (frame->is_supervision && (port->type == HSR_PT_MASTER)) { in hsr_forward_do()
256 hsr_handle_sup_frame(frame->skb_hsr, in hsr_forward_do()
257 frame->node_src, in hsr_forward_do()
258 frame->port_rcv); in hsr_forward_do()
263 skb = frame_get_tagged_skb(frame, port); in hsr_forward_do()
265 skb = frame_get_stripped_skb(frame, port); 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()
281 struct hsr_frame_info *frame) in check_local_dest() argument
288 frame->is_local_exclusive = true; in check_local_dest()
291 frame->is_local_exclusive = false; in check_local_dest()
297 frame->is_local_dest = true; in check_local_dest()
299 frame->is_local_dest = false; in check_local_dest()
304 static int hsr_fill_frame_info(struct hsr_frame_info *frame, 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()
312 frame->is_supervision); in hsr_fill_frame_info()
313 if (frame->node_src == NULL) in hsr_fill_frame_info()
317 frame->is_vlan = false; in hsr_fill_frame_info()
319 frame->is_vlan = true; in hsr_fill_frame_info()
324 frame->skb_std = NULL; 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()
329 frame->skb_hsr = NULL; in hsr_fill_frame_info()
332 frame->sequence_nr = port->hsr->sequence_nr; in hsr_fill_frame_info()
337 frame->port_rcv = port; in hsr_fill_frame_info()
338 check_local_dest(port->hsr, skb, frame); in hsr_fill_frame_info()
346 struct hsr_frame_info frame; in hsr_forward_skb() local
354 if (hsr_fill_frame_info(&frame, skb, port) < 0) in hsr_forward_skb()
356 hsr_register_frame_in(frame.node_src, port, frame.sequence_nr); in hsr_forward_skb()
357 hsr_forward_do(&frame); in hsr_forward_skb()
359 if (frame.skb_hsr != NULL) in hsr_forward_skb()
360 kfree_skb(frame.skb_hsr); in hsr_forward_skb()
361 if (frame.skb_std != NULL) in hsr_forward_skb()
362 kfree_skb(frame.skb_std); in hsr_forward_skb()