亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? skbuff.h

?? 虛擬紅外線串口驅動
?? H
字號:
#ifndef _LINUX_SKBUFF_H
#define _LINUX_SKBUFF_H

#include <linux/timer.h>
#include <linux/types.h>
#include <linux/spinlock.h>

#include "irda2k_globals.h"

typedef int wait_queue_head_t;  // dummy

struct sk_buff_head {
    struct sk_buff* next;
    struct sk_buff* prev;
    __u32           qlen;
    spinlock_t      lock;
};

struct skb_shared_info {
    __u32   dataref;
};

struct sk_buff {
    struct sk_buff*         next;
    struct sk_buff*         prev;
    struct sk_buff_head*    list;
    void*                   sk;
    struct net_device*      dev;
    union
    {
        struct tcphdr*      th;
        struct udphdr*      uh;
        struct icmphdr*     icmph;
        struct igmphdr*     igmph;
        struct iphdr*       ipiph;
        struct spxhdr*      spxh;
        unsigned char*      raw;
    } h;
    union
    {
        struct iphdr*       iph;
        struct ipv6hdr*     ipv6h;
        struct arphdr*      arph;
        struct ipxhdr*      ipxh;
        unsigned char*      raw;
    } nh;
    union 
    {	
        struct ethhdr*      ethernet;
        unsigned char*      raw;
    } mac;
    char                    cb[48];
    unsigned int            len;
    unsigned char           cloned;
    __u32                   priority;
    __u32                   users;
    unsigned short          protocol;
    unsigned int            truesize;
    unsigned char*          head;
    unsigned char*          data;
    unsigned char*          tail;
    unsigned char*          end;
    void                    (*destructor)(struct sk_buff *);
    PNDIS_PACKET            pNdisPacket;
    struct {
        UINT                nextEntryOffset;
        NDIS_CLASS_ID       classId;
        UINT                size;
        UINT                extraBOFs;
        UINT                minTurnAroundTime;
        UINT                zero[3];
    } irdaPacketInfo;
};

#define skb_shinfo(SKB)     ((struct skb_shared_info*)((SKB)->end))


//
// private data in NDIS packets
//

typedef struct _IRDA_PACKET_RESERVED {
    PNDIS_PACKET    pOrigPacket;
    struct sk_buff  skb;
} IRDA_PACKET_RESERVED, *PIRDA_PACKET_RESERVED;



__inline __u32 skb_queue_len(struct sk_buff_head* list)
{
    return list->qlen;
}

__inline int skb_queue_empty(struct sk_buff_head* list)
{
    return (list->next == (struct sk_buff*)list);
}

__inline void skb_queue_head(struct sk_buff_head* list, struct sk_buff* newsk)
{
    unsigned long   dummy;
    struct sk_buff* prev;
    struct sk_buff* next;


    spin_lock_irqsave(&list->lock, dummy);

    newsk->list = list;
    list->qlen++;
    prev = (struct sk_buff*)list;
    next = prev->next;
    newsk->next = next;
    newsk->prev = prev;
    next->prev = newsk;
    prev->next = newsk;

    spin_unlock_irqrestore(&list->lock, dummy);
}

__inline void skb_queue_tail(struct sk_buff_head* list, struct sk_buff* newsk)
{
    unsigned long   dummy;
    struct sk_buff* prev;
    struct sk_buff* next;

    spin_lock_irqsave(&list->lock, dummy);

    newsk->list = list;
    list->qlen++;
    next = (struct sk_buff *)list;
    prev = next->prev;
    newsk->next = next;
    newsk->prev = prev;
    next->prev = newsk;
    prev->next = newsk;

    spin_unlock_irqrestore(&list->lock, dummy);
}

__inline struct sk_buff* skb_dequeue(struct sk_buff_head* list)
{
    unsigned long   dummy;
    struct sk_buff* next;
    struct sk_buff* prev;
    struct sk_buff* result;


    spin_lock_irqsave(&list->lock, dummy);

    prev = (struct sk_buff *) list;
    next = prev->next;
    result = NULL;
    if (next != prev)
    {
        result = next;
        next = next->next;
        list->qlen--;
        next->prev = prev;
        prev->next = next;
        result->next = NULL;
        result->prev = NULL;
        result->list = NULL;
    }
    spin_unlock_irqrestore(&list->lock, dummy);
    return result;
}

__inline int skb_is_nonlinear(const struct sk_buff* skb)
{
	return 0;
}

__inline struct sk_buff* skb_peek_tail(struct sk_buff_head* list)
{
    struct sk_buff* prev = ((struct sk_buff*)list)->prev;


    if (prev == (struct sk_buff*)list)
        prev = NULL;
	return prev;
}

__inline void skb_queue_head_init(struct sk_buff_head* list)
{
    spin_lock_init(&list->lock);
    list->prev = (struct sk_buff*)list;
    list->next = (struct sk_buff*)list;
    list->qlen = 0;
}

__inline struct sk_buff* skb_get(struct sk_buff* skb)
{
//if (((PIRDA_PACKET_RESERVED)(skb->pNdisPacket->ProtocolReserved))->pOrigPacket)
//KdPrint(("skb_get(%08X)\n", skb));
    NdisInterlockedIncrement(&skb->users);
    return skb;
}

__inline unsigned char* skb_put(struct sk_buff* skb, unsigned int len)
{
    unsigned char* tmp = skb->tail;


    skb->tail+=len;
    skb->len+=len;
    return tmp;
}

__inline unsigned char* skb_push(struct sk_buff* skb, unsigned int len)
{
    skb->data-=len;
    skb->len+=len;
    return skb->data;
}

__inline unsigned char* skb_pull(struct sk_buff* skb, unsigned int len)
{
    if (len > skb->len)
        return NULL;

    skb->len-=len;
    return skb->data+=len;
}

__inline int skb_headroom(const struct sk_buff* skb)
{
    return skb->data-skb->head;
}

__inline int skb_tailroom(const struct sk_buff *skb)
{
    return skb->end - skb->tail;
}

__inline struct sk_buff* skb_peek(struct sk_buff_head* list)
{
    struct sk_buff* next = ((struct sk_buff*)list)->next;


    if (next == (struct sk_buff*)list)
        next = NULL;
    return next;
}

__inline void skb_reserve(struct sk_buff* skb, unsigned int len)
{
    skb->data+=len;
    skb->tail+=len;
}

__inline void skb_trim(struct sk_buff* skb, unsigned int len)
{
    if (skb->len > len)
    {
        skb->len = len;
        skb->tail = skb->data+len;
    }
}

__inline void skb_orphan(struct sk_buff *skb)
{
    if (skb->destructor)
        skb->destructor(skb);
    skb->destructor = NULL;

    if (skb->sk != NULL)
        *(int*)5 = 0;
}

__inline struct sk_buff* dev_alloc_skb(unsigned int length)
{
    NDIS_STATUS         status;
    PNDIS_PACKET        pPacket;
    struct sk_buff*     skb;
    __u8*               data;


    length += 16;
    NdisAllocatePacket(&status, &pPacket, globals.packetPool);
    if (status != STATUS_SUCCESS)
        return NULL;

    if (NdisAllocateMemoryWithTag(&data, length + sizeof(struct skb_shared_info),
                                  'SKBd') != STATUS_SUCCESS)
    {
        NdisFreePacket(pPacket);
        return NULL;
    }

    ((PIRDA_PACKET_RESERVED)(pPacket->ProtocolReserved))->pOrigPacket = NULL;
    skb = &(((PIRDA_PACKET_RESERVED)(pPacket->ProtocolReserved))->skb);

    skb->sk          = NULL;
    skb->truesize    = length + sizeof(struct sk_buff);
    skb->head        = data;
    skb->data        = data + 16;
    skb->tail        = data + 16;
    skb->end         = data + length;
    skb->len         = 0;
    skb->cloned      = 0;
    skb->destructor  = NULL;
    skb->users       = 1;
    skb->pNdisPacket = pPacket;

    skb_shinfo(skb)->dataref = 1;

//    KdPrint(("*** NEW SKB: %p / %p (data) ***\n", skb, skb->head));

    return skb;
}

__inline struct sk_buff* skb_copy(const struct sk_buff* skb, int priority)
{
    struct sk_buff *n;
    int headerlen = skb->data-skb->head;
    unsigned long offset;


    n = dev_alloc_skb(skb->end - skb->head);
    if (n == NULL)
        return NULL;

    skb_reserve(n, headerlen);
    skb_put(n,skb->len);
//    n->csum = skb->csum;
//    n->ip_summed = skb->ip_summed;

    memcpy(n->data - headerlen, skb->head, headerlen+skb->len); 

    offset = n->data - skb->data;
    n->list=NULL;
    n->sk=NULL;
    n->dev=skb->dev;
    n->priority=skb->priority;
    n->protocol=skb->protocol;
//    n->dst=dst_clone(skb->dst);
    n->h.raw=skb->h.raw+offset;
    n->nh.raw=skb->nh.raw+offset;
    n->mac.raw=skb->mac.raw+offset;
    memcpy(n->cb, skb->cb, sizeof(skb->cb));
    n->users = 1;
//    n->pkt_type=skb->pkt_type;
//    n->stamp=skb->stamp;
    n->destructor = NULL;
//    n->security=skb->security;
//KdPrint(("copy %08X - %08X\n", ((PIRDA_PACKET_RESERVED)(skb->pNdisPacket->ProtocolReserved))->pOrigPacket, skb));

    return n;
}

__inline struct sk_buff* skb_clone(struct sk_buff* skb, int priority)
{
    NDIS_STATUS     status;
    PNDIS_PACKET    pPacket;
    struct sk_buff* n;


    NdisAllocatePacket(&status, &pPacket, globals.packetPool);
    if (status != STATUS_SUCCESS)
        return NULL;
    ((PIRDA_PACKET_RESERVED)(pPacket->ProtocolReserved))->pOrigPacket = NULL;
    n = &(((PIRDA_PACKET_RESERVED)(pPacket->ProtocolReserved))->skb);

#define C(x) n->x = skb->x

    n->next = n->prev = NULL;
    n->list = NULL;
    n->sk = NULL;
//    C(stamp);
    C(dev);
    C(h);
    C(nh);
    C(mac);
//    C(dst);
//    dst_clone(n->dst);
    memcpy(n->cb, skb->cb, sizeof(skb->cb));
    C(len);
//    C(csum);
    n->cloned = 1;
//    C(pkt_type);
//    C(ip_summed);
    C(priority);
    n->users = 1;
    C(protocol);
//    C(security);
    C(truesize);
    C(head);
    C(data);
    C(tail);
    C(end);
    n->destructor = NULL;
    n->pNdisPacket = pPacket;
    NdisInterlockedIncrement(&skb_shinfo(skb)->dataref);
    skb->cloned = 1;
//KdPrint(("clone %08X - %08X->%08X\n", ((PIRDA_PACKET_RESERVED)(skb->pNdisPacket->ProtocolReserved))->pOrigPacket, skb, n));
    return n;
}

__inline void kfree_skb(struct sk_buff* skb)
{
    PNDIS_BUFFER    pBuffer;


//if (((PIRDA_PACKET_RESERVED)(skb->pNdisPacket->ProtocolReserved))->pOrigPacket)
//KdPrint(("!%08X (%08X, %d) - %08X, %d\n", ((PIRDA_PACKET_RESERVED)(skb->pNdisPacket->ProtocolReserved))->pOrigPacket, skb->destructor, skb->cloned, skb, skb->users));
    if ((skb->users == 1) || (NdisInterlockedDecrement(&skb->users) == 0))
    {
//        KdPrint(("*** FREE SKB: %p / %p (data) / %p (packet) ***\n", skb, skb->head, skb->pNdisPacket));

        if (skb->destructor)
            skb->destructor(skb);

        NdisUnchainBufferAtFront(skb->pNdisPacket, &pBuffer);
        if (pBuffer != NULL)
            NdisFreeBuffer(pBuffer);

        if (!skb->cloned || (skb_shinfo(skb)->dataref == 1) ||
            (NdisInterlockedDecrement(&skb_shinfo(skb)->dataref) == 0))
        {
            NdisFreeMemory(skb->head, skb->truesize - sizeof(struct sk_buff) +
                           sizeof(struct skb_shared_info), 0);
        }

        NdisFreePacket(skb->pNdisPacket);
    }
}

#define dev_kfree_skb(a)    kfree_skb(a)

/**
 *	skb_share_check - check if buffer is shared and if so clone it
 *	@skb: buffer to check
 *	@pri: priority for memory allocation
 *
 *	If the buffer is shared the buffer is cloned and the old copy
 *	drops a reference. A new clone with a single reference is returned.
 *	If the buffer is not shared the original buffer is returned. When
 *	being called from interrupt status or with spinlocks held pri must
 *	be GFP_ATOMIC.
 *
 *	NULL is returned on a memory allocation failure.
 */
__inline struct sk_buff* skb_share_check(struct sk_buff* skb, int pri)
{
    if (skb->users != 1)
    {
        struct sk_buff *nskb = skb_clone(skb, pri);
        kfree_skb(skb);
        skb = nskb;
	}
	return skb;
}

/**
 *	skb_linearize - convert paged skb to linear one
 *	@skb: buffer to linarize
 *	@gfp: allocation mode
 *
 *	Here, this function does nothing because skbs are always linear
 */
__inline int skb_linearize(struct sk_buff *skb, int gfp)
{
    return 0;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美卡1卡2卡| 国产午夜亚洲精品午夜鲁丝片| 国产丝袜在线精品| 国产一区二区三区在线观看免费| 欧美一区二区高清| 日韩国产在线一| 欧美撒尿777hd撒尿| 成人欧美一区二区三区小说| 99亚偷拍自图区亚洲| 亚洲欧美中日韩| 精品视频一区二区不卡| 亚洲成年人影院| 欧美一区二区三区免费在线看| 亚洲mv在线观看| 精品成人一区二区| 国产suv精品一区二区三区| 国产精品久久久久久久第一福利 | 欧美激情在线一区二区| 成人免费va视频| 国产精品美女久久久久久2018 | 欧美性生交片4| 国产在线一区观看| 日韩码欧中文字| 欧美日本在线播放| 久久精品国产精品亚洲精品| 国产午夜久久久久| 在线亚洲一区二区| 欧美国产成人在线| 欧美午夜电影一区| 精品中文字幕一区二区| 国产精品天天看| 欧美在线短视频| 国产一区91精品张津瑜| 国产精品欧美极品| 91超碰这里只有精品国产| 国产麻豆视频一区二区| 亚洲午夜国产一区99re久久| 久久综合久久久久88| 在线观看亚洲精品| 国产成人av电影在线| 国产真实乱对白精彩久久| 亚洲欧洲av在线| 欧美男男青年gay1069videost| 国内国产精品久久| 亚洲最新在线观看| 国产午夜亚洲精品羞羞网站| 欧美影院一区二区三区| 国产尤物一区二区| 图片区小说区国产精品视频| 国产精品成人网| 欧美二区在线观看| 色综合久久99| 成人一级视频在线观看| 视频精品一区二区| 亚洲精品免费在线观看| 国产亚洲欧美色| 91精品国产乱| 欧美日韩一二三| 99久久精品99国产精品 | 亚洲国产日韩精品| 中文字幕一区二区三区不卡在线 | 欧美做爰猛烈大尺度电影无法无天| 狠狠色丁香久久婷婷综合_中| 亚洲成人激情社区| 欧美国产一区在线| 国产三级精品在线| 久久久综合激的五月天| 精品国产91乱码一区二区三区 | 国产精品色婷婷| 久久久亚洲精华液精华液精华液| av亚洲精华国产精华| 成人免费视频app| 日本欧美一区二区三区乱码| 亚洲成人av电影在线| 亚洲制服丝袜av| 亚洲成人久久影院| 爽好多水快深点欧美视频| 亚洲美女视频在线观看| 亚洲理论在线观看| 一区二区三区免费在线观看| 1024国产精品| 亚洲天堂免费看| 一区二区三区在线免费播放 | 久久精品夜色噜噜亚洲a∨| 精品91自产拍在线观看一区| 精品国产一区二区三区不卡 | 麻豆一区二区在线| 国产真实乱对白精彩久久| 久久精品国产亚洲5555| 国产九九视频一区二区三区| 91色九色蝌蚪| 精品免费国产一区二区三区四区| 精品国一区二区三区| 中文字幕中文字幕中文字幕亚洲无线 | 欧美成人精精品一区二区频| 国产欧美日韩精品一区| 亚洲一卡二卡三卡四卡| 国产伦精一区二区三区| 欧洲精品在线观看| 欧美激情一区在线| 久久99精品久久久久久动态图| 色噜噜久久综合| 国产日韩欧美精品一区| 日韩电影在线一区| 色婷婷综合久久久久中文| 国产精品视频麻豆| 精品一区二区三区影院在线午夜 | 在线精品亚洲一区二区不卡| 久久精品欧美日韩| 喷水一区二区三区| 欧美性videosxxxxx| 中文字幕一区二区三区在线不卡 | 99国产精品久久久久久久久久| 日韩欧美久久久| 五月天亚洲精品| 色综合激情五月| 中文字幕综合网| 91在线看国产| 最新国产の精品合集bt伙计| 高清国产一区二区三区| 久久久久国产精品麻豆ai换脸 | 日韩一区欧美小说| 福利91精品一区二区三区| 久久新电视剧免费观看| 激情小说亚洲一区| 日韩欧美国产1| 久久国产精品色| 精品久久人人做人人爱| 老司机精品视频线观看86 | 激情综合网激情| 欧美久久一区二区| 五月综合激情网| 日韩三级.com| 国产成人亚洲综合a∨婷婷| 国产欧美日韩激情| 91视频.com| 五月天丁香久久| 精品毛片乱码1区2区3区| 久久99国产乱子伦精品免费| 日韩亚洲国产中文字幕欧美| 奇米影视一区二区三区| www国产亚洲精品久久麻豆| 国产成人免费视频网站| 成人欧美一区二区三区白人| 色久综合一二码| 青青草原综合久久大伊人精品优势 | 精品乱人伦小说| 成人免费毛片片v| 亚洲一区二区影院| 日韩一级黄色片| 高清av一区二区| 一区二区三区精品久久久| 欧美精品v日韩精品v韩国精品v| 蜜臀a∨国产成人精品| 日本一区二区三区在线不卡| 91在线精品一区二区| 日韩制服丝袜av| 中文字幕第一页久久| 日本高清无吗v一区| 久久国内精品自在自线400部| 国产欧美精品一区二区色综合| 色综合久久综合| 免播放器亚洲一区| 亚洲欧美偷拍三级| 91精品国产色综合久久不卡蜜臀 | 91在线视频官网| 免费成人美女在线观看| 日韩美女视频一区| 精品国产网站在线观看| 欧洲激情一区二区| 国产成人亚洲综合a∨猫咪| 亚洲一区二区三区四区中文字幕 | 成人av网站免费观看| 午夜视频一区在线观看| 国产欧美日韩三区| 欧美一区二区三区喷汁尤物| 99re热这里只有精品免费视频| 日本sm残虐另类| 亚洲国产日韩在线一区模特| 久久精品一区二区三区不卡 | 国产精品一区二区男女羞羞无遮挡 | 欧美乱妇15p| 95精品视频在线| 岛国av在线一区| 狠狠色丁香久久婷婷综| 日韩中文字幕一区二区三区| 1000部国产精品成人观看| 久久香蕉国产线看观看99| 欧美精三区欧美精三区| 色综合久久久久综合体桃花网| 国产麻豆视频精品| 久久精品国产秦先生| 午夜日韩在线电影| 亚洲高清视频的网址| 依依成人综合视频| 亚洲欧美成人一区二区三区| 国产精品素人一区二区| 国产欧美日韩精品在线| 久久精品亚洲麻豆av一区二区| 日韩女优制服丝袜电影|