Lines Matching refs:pd
279 static bool fwnet_frag_overlap(struct fwnet_partial_datagram *pd, in fwnet_frag_overlap() argument
285 list_for_each_entry(fi, &pd->fi_list, fi_link) in fwnet_frag_overlap()
294 struct fwnet_partial_datagram *pd, unsigned offset, unsigned len) in fwnet_frag_new() argument
299 list = &pd->fi_list; in fwnet_frag_new()
300 list_for_each_entry(fi, &pd->fi_list, fi_link) { in fwnet_frag_new()
396 struct fwnet_partial_datagram *pd; in fwnet_pd_find() local
398 list_for_each_entry(pd, &peer->pd_list, pd_link) in fwnet_pd_find()
399 if (pd->datagram_label == datagram_label) in fwnet_pd_find()
400 return pd; in fwnet_pd_find()
419 struct fwnet_partial_datagram *pd, void *frag_buf, in fwnet_pd_update() argument
422 if (fwnet_frag_new(pd, frag_off, frag_len) == NULL) in fwnet_pd_update()
425 memcpy(pd->pbuf + frag_off, frag_buf, frag_len); in fwnet_pd_update()
431 list_move_tail(&pd->pd_link, &peer->pd_list); in fwnet_pd_update()
436 static bool fwnet_pd_is_complete(struct fwnet_partial_datagram *pd) in fwnet_pd_is_complete() argument
440 fi = list_entry(pd->fi_list.next, struct fwnet_fragment_info, fi_link); in fwnet_pd_is_complete()
442 return fi->len == pd->datagram_size; in fwnet_pd_is_complete()
574 struct fwnet_partial_datagram *pd; in fwnet_incoming_packet() local
627 pd = fwnet_pd_find(peer, datagram_label); in fwnet_incoming_packet()
628 if (pd == NULL) { in fwnet_incoming_packet()
635 pd = fwnet_pd_new(net, peer, datagram_label, in fwnet_incoming_packet()
637 if (pd == NULL) { in fwnet_incoming_packet()
643 if (fwnet_frag_overlap(pd, fg_off, len) || in fwnet_incoming_packet()
644 pd->datagram_size != dg_size) { in fwnet_incoming_packet()
649 fwnet_pd_delete(pd); in fwnet_incoming_packet()
650 pd = fwnet_pd_new(net, peer, datagram_label, in fwnet_incoming_packet()
652 if (pd == NULL) { in fwnet_incoming_packet()
658 if (!fwnet_pd_update(peer, pd, buf, fg_off, len)) { in fwnet_incoming_packet()
664 fwnet_pd_delete(pd); in fwnet_incoming_packet()
673 pd->ether_type = ether_type; in fwnet_incoming_packet()
675 if (fwnet_pd_is_complete(pd)) { in fwnet_incoming_packet()
676 ether_type = pd->ether_type; in fwnet_incoming_packet()
678 skb = skb_get(pd->skb); in fwnet_incoming_packet()
679 fwnet_pd_delete(pd); in fwnet_incoming_packet()
1537 struct fwnet_partial_datagram *pd, *pd_next; in fwnet_remove_peer() local
1545 list_for_each_entry_safe(pd, pd_next, &peer->pd_list, pd_link) in fwnet_remove_peer()
1546 fwnet_pd_delete(pd); in fwnet_remove_peer()