diff --git a/include/os/rt_linux.h b/include/os/rt_linux.h index 1612e34..c3a7792 100644 --- a/include/os/rt_linux.h +++ b/include/os/rt_linux.h @@ -858,9 +858,14 @@ void linux_pci_unmap_single(void *handle, ra_dma_addr_t dma_addr, size_t size, i #define GET_OS_PKT_DATATAIL(_pkt) \ (RTPKT_TO_OSPKT(_pkt)->tail) +#ifdef NET_SKBUFF_DATA_USES_OFFSET +#define SET_OS_PKT_DATATAIL(_pkt, _start, _len) \ + ((RTPKT_TO_OSPKT(_pkt))->tail) = (PUCHAR)(RTPKT_TO_OSPKT(_pkt)->data-(RTPKT_TO_OSPKT(_pkt)->head) + (_len)) +#else #define SET_OS_PKT_DATATAIL(_pkt, _start, _len) \ ((RTPKT_TO_OSPKT(_pkt))->tail) = (PUCHAR)((_start) + (_len)) - +#endif + #define GET_OS_PKT_HEAD(_pkt) \ (RTPKT_TO_OSPKT(_pkt)->head) diff --git a/os/linux/rt_linux.c b/os/linux/rt_linux.c index f5b5e19..817bca8 100644 --- a/os/linux/rt_linux.c +++ b/os/linux/rt_linux.c @@ -505,9 +505,15 @@ PNDIS_PACKET duplicate_pkt( MEM_DBG_PKT_ALLOC_INC(skb); skb_reserve(skb, 2); +#ifdef NET_SKBUFF_DATA_USES_OFFSET + NdisMoveMemory(skb->data+skb->tail, pHeader802_3, HdrLen); + skb_put(skb, HdrLen); + NdisMoveMemory(skb->data+skb->tail, pData, DataSize); +#else NdisMoveMemory(skb->tail, pHeader802_3, HdrLen); skb_put(skb, HdrLen); NdisMoveMemory(skb->tail, pData, DataSize); +#endif skb_put(skb, DataSize); skb->dev = pNetDev; /*get_netdev_from_bssid(pAd, FromWhichBSSID); */ pPacket = OSPKT_TO_RTPKT(skb); @@ -705,7 +711,11 @@ void wlan_802_11_to_802_3_packet( pOSPkt->dev = pNetDev; pOSPkt->data = pData; pOSPkt->len = DataSize; +#ifdef NET_SKBUFF_DATA_USES_OFFSET + pOSPkt->tail = (pOSPkt->data-pOSPkt->head)+pOSPkt->len; +#else pOSPkt->tail = pOSPkt->data + pOSPkt->len; +#endif /* */ /* copy 802.3 header */