'ip fragment reassembly'

def ipdefrag(self, pkt):

    f = self.frags.setdefault((pkt.src, pkt.dst, pkt.id), {})
    f[(pkt.off & dpkt.ip.IP_OFFMASK)] = pkt
    offset = 0
    data = ''
    while True:
        if (offset not in f):
            return None
        data += str(pkt.data)
        if (not (pkt.off & dpkt.ip.IP_MF)):
            break
        offset = (len(data) / 8)
    del self.frags[(pkt.src, pkt.dst, pkt.id)]
    pkt.data = data
    pkt.off = 0
    pkt.sum = 0
    return dpkt.ip.IP(str(pkt))
