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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? uipc_mbuf.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	 * calculating its length and finding the last mbuf.	 * If the adjustment only affects this mbuf, then just	 * adjust and return.  Otherwise, rescan and truncate	 * after the remaining size.	 */	len = -len;	count = 0;	for (;;)	    {	    count += m->m_len;	    if (m->m_next == (struct mbuf *)0)		break;	    m = m->m_next;	    }	if (m->m_len >= len)	    {	    m->m_len -= len;	    if (mp->m_flags & M_PKTHDR)		mp->m_pkthdr.len -= len;	    return;	    }	count -= len;	if (count < 0)	    count = 0;	/*	 * Correct length for chain is "count".	 * Find the mbuf with last data, adjust its length,	 * and toss data from remaining mbufs on chain.	 */	m = mp;	if (m->m_flags & M_PKTHDR)	    m->m_pkthdr.len = count;	for (; m; m = m->m_next) 	    {	    if (m->m_len >= count) 		{		m->m_len = count;		break;		}	    count -= m->m_len;	    }	while ((m = m->m_next))	    m->m_len = 0;	}    }/********************************************************************************* m_pullup - ensure contiguous data area at the beginnig of an mbuf chain** Rearange an mbuf chain so that len bytes are contiguous* and in the data area of an mbuf (so that mtod and dtom* will work for a structure of size len).  Returns the resulting* mbuf chain on success, frees it and returns null on failure.*/struct mbuf *m_pullup(n, len)    register struct mbuf *n;    int len;    {    register struct mbuf *m;    register int count;    int space;    if (((n->m_data + len) < (n->m_extBuf + n->m_extSize)) && n->m_next)	{	if (n->m_len >= len)	    return (n); 	m = n;	n = n->m_next;	len -= m->m_len;	}    else 	{	m = mBufClGet(M_DONTWAIT, n->m_type, len, TRUE);	if (m == 0)	    goto bad;	m->m_len = 0;	if (n->m_flags & M_PKTHDR)	    {	    m->m_pkthdr = n->m_pkthdr;	    m->m_flags = n->m_flags; 	    n->m_flags &= ~M_PKTHDR;	    }	}    space = (m->m_extBuf + m->m_extSize) - (m->m_data + m->m_len);    do 	{	count = min(min(max(len, max_protohdr), space), n->m_len);	bcopy(mtod(n, caddr_t), mtod(m, caddr_t) + m->m_len,	      (unsigned)count);	len -= count;	m->m_len += count;	n->m_len -= count;	space -= count;	if (n->m_len)	    n->m_data += count;	else	    n = m_free(n);	} while (len > 0 && n);    if (len > 0)	{	(void) m_free(m);	goto bad;	}    m->m_next = n;    return (m);    bad:    m_freem(n);    MPFail++;    return (0);    }/********************************************************************************* m_devget - Routine to copy from device local memory into mbufs.** Routine to copy from device local memory into mbufs.* This routine copies the device local memory into mbufs according to the* specified width. The interface pointer is initialized as a part of the* packet header in the mbuf chain. The first mbuf in the chain is always* a packet header and contains the interface pointer. This field is used* when it is necessary to retrieve the interface pointer from the mbuf chain.* If a copy function pointer is given, this function uses that function* pointer. This is given to enable the hardware specific copy routines to be* used instead of system routines.**/struct mbuf * m_devget(buf, totlen, width, ifp, copy)    char * buf;    int totlen;    int width;    struct ifnet *ifp;    void (*copy)();    {    register struct mbuf *m;    struct mbuf *top = NULL, **mp = &top;    register int len;    register char *cp;    cp = buf;    while (totlen > 0)	{        m = mBufClGet (M_DONTWAIT, MT_DATA, totlen, FALSE);        if (m == NULL)            {            if (top != NULL)                m_freem (top);            return (NULL);            }        	if (top == NULL)	    {            m->m_flags 		|= M_PKTHDR; 	    m->m_pkthdr.rcvif 	= ifp;	    m->m_pkthdr.len 	= totlen;	    len = min(totlen, m->m_extSize); 	/* length to copy */	    if (m->m_extSize > max_hdr) 		{		/* avoid costly m_prepends done in the context of tNetTask,		 * especially effective while forwarding packets.		 */		len = min (len, (m->m_extSize - max_linkhdr)); 		m->m_data += max_linkhdr;		}	    }	else            {	    len = min(totlen, m->m_extSize); 	/* length to copy */            }	m->m_len = len; 		/* initialize the length of mbuf */        	if (copy)	    (*copy)(cp, mtod(m, caddr_t), (unsigned)len);	else            {            switch (width)                {                case NONE:                    bcopy(cp, mtod(m, caddr_t), (unsigned)len);                    break;                case 1:                    bcopyBytes (cp, mtod(m, caddr_t), len);                    break;                case 2:                    bcopyWords (cp, mtod(m, caddr_t), (len + 1) >> 1);                    break;                case 4:                    bcopyLongs (cp, mtod(m, caddr_t), (len + 3) >> 2);                    break;                                        default:#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_EMERGENCY event */                    WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_EMERGENCY, 35, 3,                             WV_NETEVENT_DEVMEM_PANIC, width)#endif  /* INCLUDE_WVNET */#endif                    panic ("m_devget -- invalid mem copy width");                    break;                }            }	cp += len;		/* advance the pointer */	*mp = m;	mp = &m->m_next;	/* advance the mbuf */	totlen -= len;		/* decrment the total length */	}    return (top);		/* return the filled mbuf chain */    }#if 0 /* XXX *//* both m_copyback and m_copydata have to be reworked, these functions * are only used in rt_sock.c. They have been moved to rt_sock.c. * They have to be reworked and integrated into netBufLib.c *//* * Copy data from a buffer back into the indicated mbuf chain, * starting "off" bytes from the beginning, extending the mbuf * chain if necessary. */voidm_copyback(m0, off, len, cp)	struct	mbuf *m0;	register int off;	register int len;	caddr_t cp;{	register int mlen;	register struct mbuf *m = m0, *n;	int totlen = 0;	if (m0 == 0)		return;	while (off > (mlen = m->m_len)) {		off -= mlen;		totlen += mlen;		if (m->m_next == 0) {			n = m_getclr(M_DONTWAIT, m->m_type, CL_SIZE_128, TRUE);			if (n == 0)				goto out;			n->m_len = min(n->m_extSize, len + off);			m->m_next = n;		}		m = m->m_next;	}	while (len > 0) {		mlen = min (m->m_len - off, len);		bcopy(cp, off + mtod(m, caddr_t), (unsigned)mlen);		cp += mlen;		len -= mlen;		mlen += off;		off = 0;		totlen += mlen;		if (len == 0)			break;		if (m->m_next == 0) {			n = mBufClGet(M_DONTWAIT, m->m_type, CL_SIZE_128, TRUE);			if (n == 0)				break;			n->m_len = min(n->m_extSize, len);			m->m_next = n;		}		m = m->m_next;	}out:	if (((m = m0)->m_flags & M_PKTHDR) && (m->m_pkthdr.len < totlen))		m->m_pkthdr.len = totlen;}/********************************************************************************* m_copydata - copy data from an mbuf chain into a buff* Copy data from an mbuf chain starting "off" bytes from the beginning,* continuing for "len" bytes, into the indicated buffer.*/void m_copydata(m, off, len, cp)    register struct mbuf *m;    register int off;    register int len;    caddr_t cp;    {    register unsigned count;    if (off < 0 || len < 0)	panic("m_copydata");    while (off > 0)	{	if (m == 0)	    panic("m_copydata");	if (off < m->m_len)	    break;	off -= m->m_len;	m = m->m_next;	}    while (len > 0)	{	if (m == 0)	    panic("m_copydata");	count = min(m->m_len - off, len);	bcopy(mtod(m, caddr_t) + off, cp, count);	len -= count;	cp += count;	off = 0;	m = m->m_next;	}    }/* XXX merged with netMblkChainDup in netBufLib.c */LOCAL int 	MCFail;	 	/* XXX temp variable pullup fails *//********************************************************************************* m_copym - make a copy of an mbuf chain.** Make a copy of an mbuf chain starting "off0" bytes from the beginning,* continuing for "len" bytes.  If len is M_COPYALL, copy to end of mbuf.* The wait parameter is a choice of M_WAIT/M_DONTWAIT from caller.*/struct mbuf * m_copym(m, off0, len, wait)    register struct mbuf *m;    int off0, wait;    register int len;    {    register struct mbuf *n, **np;    register int off = off0;    struct mbuf *top;    int copyhdr = 0;    if (off < 0 || len < 0)        {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_EMERGENCY event */        WV_NET_MARKER_3 (NET_AUX_EVENT, WV_NET_EMERGENCY, 36, 4,                         WV_NETEVENT_MEMCOPY_PANIC, off, len, m)#endif  /* INCLUDE_WVNET */#endif        panic("m_copym");        }    if (off == 0 && m->m_flags & M_PKTHDR)	copyhdr = 1;    while (off > 0)	{	if (m == 0)            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_EMERGENCY event */            WV_NET_MARKER_3 (NET_AUX_EVENT, WV_NET_EMERGENCY, 36, 4,                             WV_NETEVENT_MEMCOPY_PANIC, off, len, m)#endif  /* INCLUDE_WVNET */#endif	    panic("m_copym");            }	if (off < m->m_len)	    break;	off -= m->m_len;	m = m->m_next;	}    np = &top;    top = 0;    while (len > 0)	{	if (m == 0)	    {	    if (len != M_COPYALL)                {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_EMERGENCY event */                WV_NET_MARKER_3 (NET_AUX_EVENT, WV_NET_EMERGENCY, 36, 4,                                 WV_NETEVENT_MEMCOPY_PANIC, off, len, m)#endif  /* INCLUDE_WVNET */#endif                panic("m_copym");                }	    break;	    }	n = mBlkGet(_pNetDpool, wait, m->m_type);	if ((*np = n) == NULL)	    goto nospace;	if (copyhdr)	    {            n->m_pkthdr = m->m_pkthdr;	    if (len == M_COPYALL)		n->m_pkthdr.len -= off0;	    else		n->m_pkthdr.len = len;	    copyhdr = 0;	    }	n->m_flags = m->m_flags; 	n->m_len = min(len, m->m_len - off);	n->m_data = m->m_data + off;	n->m_ext = m->m_ext;	++(n->m_extRefCnt);	if (len != M_COPYALL)	    len -= n->m_len;	off = 0;	m = m->m_next;	np = &n->m_next;	}    if (top == 0)	MCFail++;    return (top);    nospace:    m_freem(top);    MCFail++;    return (0);    }/* * XXX merged with netMblkClFree & netMblkClChainFree in netBufLib.c * turned m_free and m_freem as macros in mbuf.h *//********************************************************************************* m_free - free the mBlk and cluster pair** This function frees the mBlk and also the cluster if the mBlk points to it.* This function returns a pointer to the next mBlk connected to the one that* is freed.** NOMANUAL* * RETURNS mBLK/NULL*/struct mbuf * m_free    (    FAST struct mbuf * 	pMblk		/* pointer to the mBlk to free */    )    {    FAST struct mbuf *	pMblkNext;	/* pointer to the next mBlk */    NET_POOL_ID		pNetPool;	/* pointer to net pool */        if (pMblk->m_type == MT_FREE)        {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_EMERGENCY event */        WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_EMERGENCY, 37, 5,                         WV_NETEVENT_MEMFREE_PANIC, pMblk)#endif  /* INCLUDE_WVNET */#endif        panic("m_free");        }    pNetPool 	= MBLK_TO_NET_POOL(pMblk);     pMblkNext 	= pMblk->m_next;    /* free the cluster first if it is attached to the mBlk */        if (M_HASCL(pMblk))			        clBlkFree (pMblk->pClBlk->pNetPool, pMblk->pClBlk);    mBlkFree (pNetPool, pMblk); 		/* free the mBlk */    return (pMblkNext);    }/********************************************************************************* m_freem - free a list of mbufs linked via m_next** N.B.: If MFREE macro changes in mbuf.h m_freem should also change* 	accordingly.*/void m_freem(m)    FAST struct mbuf *m;    {    FAST struct mbuf *n;    if (m == NULL)	return;    do	{	n = m_free (m); 	}    while ((m = n));    }#endif /* XXX have to be reworked */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区中文精品| 亚洲一区二区精品3399| 亚洲精品中文字幕乱码三区 | 国产精品一线二线三线| 日本高清不卡在线观看| 久久久青草青青国产亚洲免观| 亚洲一区中文日韩| av不卡在线观看| 精品成人一区二区三区四区| 亚洲亚洲精品在线观看| 99久久99久久久精品齐齐| 久久免费视频色| 久久超级碰视频| 777亚洲妇女| 亚洲综合一二区| bt欧美亚洲午夜电影天堂| 精品捆绑美女sm三区| 日韩成人一区二区| 在线精品视频一区二区| 亚洲欧美自拍偷拍| 成人精品国产一区二区4080 | 欧亚洲嫩模精品一区三区| 欧美激情中文字幕一区二区| 国产乱国产乱300精品| 欧美老肥妇做.爰bbww视频| 夜夜夜精品看看| 在线欧美小视频| 亚洲国产三级在线| 欧美性受xxxx| 亚洲国产日日夜夜| 欧美日本国产视频| 视频一区在线播放| 欧美一级夜夜爽| 精品一区二区在线观看| 日韩欧美成人午夜| 国内成+人亚洲+欧美+综合在线| 欧美sm美女调教| 国产精品自拍毛片| 国产精品国产三级国产有无不卡 | 国产精品传媒在线| 国产·精品毛片| 国产精品美女一区二区| 99久久亚洲一区二区三区青草| 国产精品久久久久久久久免费相片 | 国产一本一道久久香蕉| 国产亚洲福利社区一区| 成人免费精品视频| 亚洲黄色av一区| 欧美二区乱c少妇| 精一区二区三区| 国产欧美一区二区精品性| av一二三不卡影片| 午夜精品免费在线| 亚洲精品在线观看网站| 高清成人在线观看| 亚洲国产日韩a在线播放性色| 91精品国产一区二区| 国产在线精品一区二区夜色| 欧美tickling挠脚心丨vk| 高清在线不卡av| 亚洲成av人片在线| 久久亚洲免费视频| 色视频一区二区| 精品亚洲国产成人av制服丝袜| 国产精品天天看| 91国偷自产一区二区使用方法| 奇米亚洲午夜久久精品| 国产精品蜜臀在线观看| 欧美日本一区二区| 成人aa视频在线观看| 日日夜夜精品视频免费| 国产欧美一区二区精品性色超碰 | 欧美色大人视频| 国产一区二区成人久久免费影院| 日韩美女视频一区| 欧美大胆人体bbbb| 色94色欧美sute亚洲线路一久 | 不卡一区二区三区四区| 亚洲成人激情自拍| 亚洲欧洲日产国码二区| 日韩一区二区三区免费看 | 日韩一区二区在线观看视频| 成人禁用看黄a在线| 日韩在线a电影| 国产精品久久久久久久裸模| 日韩免费高清视频| 欧美三级资源在线| 91免费视频大全| 国产精品中文字幕欧美| 日韩av在线发布| 青青草国产精品亚洲专区无| 欧美一区二区视频在线观看2022 | 精品国产凹凸成av人导航| 91视频一区二区三区| 国产在线一区观看| 肉色丝袜一区二区| 亚洲人成精品久久久久| 国产亚洲精品久| 日韩女优毛片在线| 欧美精品久久久久久久多人混战| 色综合一区二区三区| 粉嫩高潮美女一区二区三区| 久久精品国产网站| 久草热8精品视频在线观看| 男男视频亚洲欧美| 日韩av二区在线播放| 亚洲福利国产精品| 亚洲成人免费电影| 午夜精品在线看| 无吗不卡中文字幕| 亚洲bt欧美bt精品| 日日噜噜夜夜狠狠视频欧美人| 亚洲精品视频观看| 亚洲一区二区三区中文字幕在线| 亚洲日本青草视频在线怡红院 | 久久免费偷拍视频| 精品国产伦一区二区三区观看方式| 欧美精品123区| 日韩精品一区二区在线观看| 日韩精品一区二区三区四区视频| 日韩一二三四区| 欧美mv日韩mv| 久久精品夜夜夜夜久久| 国产区在线观看成人精品| 久久久久久电影| 国产精品美女久久久久久| 欧美激情一区二区三区蜜桃视频| 2021国产精品久久精品| 欧美经典一区二区| 亚洲欧美日韩在线| 亚洲va欧美va人人爽午夜| 日韩电影在线观看网站| 激情综合色综合久久| 成人性视频免费网站| 在线观看免费成人| 欧美一区二区三区视频在线观看| 欧美大度的电影原声| 国产精品久久免费看| 亚洲一线二线三线久久久| 麻豆极品一区二区三区| 国产美女视频91| 91丨九色porny丨蝌蚪| 欧美精品九九99久久| 久久久www成人免费无遮挡大片 | 欧美精品一区二区三区蜜桃视频| 久久久久亚洲综合| 亚洲丝袜自拍清纯另类| 日韩激情一二三区| 成人天堂资源www在线| 欧美片网站yy| 欧美经典一区二区| 爽好多水快深点欧美视频| 国产一区二区福利视频| 色婷婷久久久久swag精品| 欧美一区二区视频观看视频| 国产精品天美传媒沈樵| 日本特黄久久久高潮| 成人黄色小视频| 欧美一区二区三区在线| 成人免费一区二区三区在线观看| 美腿丝袜在线亚洲一区| 不卡欧美aaaaa| 日韩精品一区二区三区蜜臀 | 国产偷国产偷亚洲高清人白洁| 一区二区在线免费观看| 老司机午夜精品| 欧美日韩综合不卡| 欧美激情在线一区二区| 美女在线一区二区| 久久久蜜桃精品| 丝袜亚洲另类欧美| 国产在线播精品第三| 91色视频在线| 在线观看av一区二区| 色吧成人激情小说| 国产日韩欧美一区二区三区乱码 | 一本久久精品一区二区| www欧美成人18+| 五月天一区二区三区| 99久久综合色| 国产偷国产偷精品高清尤物 | 成人综合在线网站| 精品毛片乱码1区2区3区| 日韩极品在线观看| 欧美日韩高清在线| 亚洲精品国久久99热| 成人黄色片在线观看| 国产亚洲美州欧州综合国| 精品一区二区三区在线观看| 欧美日韩五月天| 亚洲国产精品久久不卡毛片| 91视频在线观看免费| 最新不卡av在线| 99精品视频免费在线观看| 国产精品嫩草久久久久| 国产传媒久久文化传媒| 国产喷白浆一区二区三区| 国产老肥熟一区二区三区| 久久久激情视频| 国v精品久久久网|