static struct nf_ct_frag6_queue * nf_ct_frag6_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr *dst) { struct nf_ct_frag6_queue *fq; if ((fq = frag_alloc_queue()) == NULL) { DEBUGP("Can't alloc new queue\n"); goto oom; } memset(fq, 0, sizeof(struct nf_ct_frag6_queue)); fq->id = id; ipv6_addr_copy(&fq->saddr, src); ipv6_addr_copy(&fq->daddr, dst); init_timer(&fq->timer); fq->timer.function = nf_ct_frag6_expire; fq->timer.data = (long) fq; fq->lock = SPIN_LOCK_UNLOCKED; atomic_set(&fq->refcnt, 1); return nf_ct_frag6_intern(hash, fq); oom: return NULL; }
static struct frag_queue * ip6_frag_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr *dst) { struct frag_queue *fq; if ((fq = frag_alloc_queue()) == NULL) goto oom; memset(fq, 0, sizeof(struct frag_queue)); fq->id = id; ipv6_addr_copy(&fq->saddr, src); ipv6_addr_copy(&fq->daddr, dst); /* init_timer has been done by the memset */ fq->timer.function = ip6_frag_expire; fq->timer.data = (long) fq; fq->lock = SPIN_LOCK_UNLOCKED; atomic_set(&fq->refcnt, 1); return ip6_frag_intern(hash, fq); oom: IP6_INC_STATS_BH(Ip6ReasmFails); return NULL; }