/* Return a new packet. zero out pkttag */ void* osl_pktget(osl_t *osh, uint len, bool send) { struct sk_buff *skb; if ((skb = dev_alloc_skb(len))) { skb_put(skb, len); skb->priority = 0; #ifdef BCMDBG_PKT pktlist_add(&(osh->pktlist), (void *) skb); #endif /* BCMDBG_PKT */ osh->pub.pktalloced++; } return ((void*) skb); }
void * osl_pkt_frmnative(osl_t *osh, struct sk_buff *skb) { struct sk_buff *nskb; if (osh->pub.pkttag) bzero((void*)skb->cb, OSL_PKTTAG_SZ); for (nskb = skb; nskb; nskb = nskb->next) { #ifdef BCMDBG_PKT pktlist_add(&(osh->pktlist), (void *) nskb); #endif osh->pub.pktalloced++; } return (void *)skb; }
void * osl_pktdup(osl_t *osh, void *skb) { void * p; if ((p = skb_clone((struct sk_buff*)skb, GFP_ATOMIC)) == NULL) return NULL; if (osh->pub.pkttag) bzero((void*)((struct sk_buff *)p)->cb, OSL_PKTTAG_SZ); osh->pub.pktalloced++; #ifdef BCMDBG_PKT pktlist_add(&(osh->pktlist), (void *) p); #endif return (p); }
/* Clone a packet. * The pkttag contents are NOT cloned. */ void * osl_pktdup(osl_t *osh, void *skb) { void * p; if ((p = skb_clone((struct sk_buff*)skb, GFP_ATOMIC)) == NULL) return NULL; /* skb_clone copies skb->cb.. we don't want that */ if (osh->pub.pkttag) bzero((void*)((struct sk_buff *)p)->cb, OSL_PKTTAG_SZ); /* Increment the packet counter */ osh->pub.pktalloced++; #ifdef BCMDBG_PKT pktlist_add(&(osh->pktlist), (void *) p); #endif /* BCMDBG_PKT */ return (p); }
void osl_pktlist_add(osl_t *osh, void *p) { pktlist_add(&(osh->pktlist), p); }