Is there a easiest way of calculate large packet's checksum in lwf?

In my lwf code, i want to modify send or recv IPV6 packet’s dest IP address, such as ICMP, UDP packet. But the problem is when recv an large ICMPV6, IPV6_UDP packet, it has been fragmentation, so when i recv first fragment packet, i must copy it’s data and copy other fragment packet’s data in same memory, then calculate the checksum and find first fragment packet’s NBL to modify. The big problem is NDIS may pass many large NBL to FilterRecv function in several times. For example, two large ICMPV6 packet in 10 NBL, NDIS will pass 6 NBL to FilterRecv function in firt time call, then pass 4 NBL to FilterRecv function in second time call, so I need at least one golbal memory area to store all data. This is too cumbersome. Is there a easiest way of calculate large packet’s checksum in lwf?