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

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

?? raw_ip.c

?? 完整的TCP/IP源代碼
?? C
字號:
/* rawip.c - raw interface to IP protocol *//* Copyright 1984-1996 Wind River Systems, Inc. */#include "copyright_wrs.h"/* * Copyright (c) 1982, 1986, 1988, 1993, 1995 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)raw_ip.c	8.7 (Berkeley) 5/15/95 *//*modification history--------------------01g,26aug98,n_s  corrected rip_output for IP_HDRINCL case. spr #2224601f,26aug98,n_s  added return val check for M_PREPEND in rip_output and                 mBufClGet in rip_ctloutput. spr # 22238.01e,16apr97,vin	 added PRU_CONTROL support to rip_usrreq().01d,08apr97,vin  include pcb hashing changes from FREEBSD2.2.1, removed		 ip_mrouter, added mCastRouteCmdHook. removed all MROUTING01c,31jan97,vin  changed declaration according to prototype decl in protosw.h01b,22nov96,vin  added cluster support replaced m_get(..) with mBufClGet(..).01a,03mar96,vin  created from BSD4.4 stuff,integrated with 02i of raw_usrreq.c*//*DESCRIPTION*/#include "vxWorks.h"#include "net/mbuf.h"#include "sys/socket.h"#include "net/protosw.h"#include "net/socketvar.h"#include "errno.h"#include "net/if.h"#include "net/route.h"#include "net/raw_cb.h"#include "netinet/in.h"#include "netinet/in_systm.h"#include "netinet/ip.h"#include "netinet/ip_var.h"#include "netinet/ip_mroute.h"#include "netinet/in_pcb.h"/* externs */extern FUNCPTR _mCastRouteCmdHook;	/* WRS mcast route command hook *//* globals */static struct inpcbhead ripcb;static struct inpcbinfo ripcbinfo;static struct sockaddr_in ripsrc = { sizeof(ripsrc), AF_INET };/* * Nominal space allocated to a raw ip socket. */#define	RIPSNDQ		8192#define	RIPRCVQ		8192/* locals */static int _mCastCtlOutput (int option, int optName, struct socket * sockPtr,                            struct mbuf ** pPtrMbuf); /* * Raw interface to IP protocol. *//* * Initialize raw connection block q. */voidrip_init(){	LIST_INIT(&ripcb);        ripcbinfo.listhead = &ripcb;        /*         * XXX We don't use the hash list for raw IP, but it's easier         * to allocate a one entry hash list than it is to check all         * over the place for hashbase == NULL.         */        ripcbinfo.hashbase = hashinit(1, MT_PCB, &ripcbinfo.hashmask);}/* * Setup generic address and protocol structures * for raw_input routine, then pass them along with * mbuf chain. */voidrip_input(m)	struct mbuf *m;{	register struct ip *ip = mtod(m, struct ip *);	register struct inpcb *inp;	struct socket *last = 0;	ripsrc.sin_addr = ip->ip_src;        for (inp = ripcb.lh_first; inp != NULL; inp = inp->inp_list.le_next) {		if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != ip->ip_p)			continue;		if (inp->inp_laddr.s_addr &&		    inp->inp_laddr.s_addr != ip->ip_dst.s_addr)			continue;		if (inp->inp_faddr.s_addr &&		    inp->inp_faddr.s_addr != ip->ip_src.s_addr)			continue;		if (last) {			struct mbuf *n;			if (n = m_copy(m, 0, (int)M_COPYALL)) {				if (sbappendaddr(&last->so_rcv,				    (struct sockaddr *)&ripsrc, n,				    (struct mbuf *)0) == 0)					/* should notify about lost packet */					m_freem(n);				else					sorwakeup(last);			}		}		last = inp->inp_socket;	}	if (last) {		if (sbappendaddr(&last->so_rcv, (struct sockaddr *)&ripsrc,		    m, (struct mbuf *)0) == 0)			m_freem(m);		else			sorwakeup(last);	} else {		m_freem(m);		ipstat.ips_noproto++;		ipstat.ips_delivered--;	}	return;}/* * Generate IP header and pass packet to ip_output. * Tack on options user may have setup with control call. */intrip_output(m, so, dst)	register struct mbuf *m;	struct socket *so;	u_long dst;{	register struct ip *ip;	register struct inpcb *inp = sotoinpcb(so);	struct mbuf *opts;	int flags = (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST;	/*	 * If the user handed us a complete IP packet, use it.	 * Otherwise, allocate an mbuf for a header and fill it in.	 */	if ((inp->inp_flags & INP_HDRINCL) == 0) {		M_PREPEND(m, sizeof(struct ip), M_WAIT);		if (m == (struct mbuf *) NULL)		    {		    return (ENOBUFS);		    }		    		ip = mtod(m, struct ip *);		ip->ip_tos = 0;		ip->ip_off = 0;		ip->ip_p = inp->inp_ip.ip_p;		ip->ip_len = m->m_pkthdr.len;		ip->ip_src = inp->inp_laddr;		ip->ip_dst.s_addr = dst;	/* Default set to IPDEFTTL but can be Modified by SNMP through MIB-II */		ip->ip_ttl = ipTimeToLive;		opts = inp->inp_options;	} else {	        if (m->m_len < sizeof (struct ip) &&		    (m = m_pullup (m, sizeof (struct ip))) == NULL)		    {		    return (ENOBUFS);		    }		ip = mtod(m, struct ip *);		if (ip->ip_id == 0)			ip->ip_id = htons(ip_id++);		opts = NULL;		/* XXX prevent ip_output from overwriting header fields */		flags |= IP_RAWOUTPUT;		ipstat.ips_rawout++;	}	return (ip_output(m, opts, &inp->inp_route, flags, inp->inp_moptions));}/* * Raw IP socket option processing. */intrip_ctloutput(op, so, level, optname, m)	int op;	struct socket *so;	int level, optname;	struct mbuf **m;{	register struct inpcb *inp = sotoinpcb(so);	register int error;	if (level != IPPROTO_IP) {		if (op == PRCO_SETOPT && *m)			(void) m_free(*m);		return (EINVAL);	}	switch (optname) {	case IP_HDRINCL:		error = 0;		if (op == PRCO_SETOPT) {			if (*m == 0 || (*m)->m_len < sizeof (int))				error = EINVAL;			else if (*mtod(*m, int *))				inp->inp_flags |= INP_HDRINCL;			else				inp->inp_flags &= ~INP_HDRINCL;			if (*m)				(void)m_free(*m);		} else {			*m = mBufClGet(M_WAIT, MT_SOOPTS, CL_SIZE_128, TRUE);			if (*m == (struct mbuf *) NULL)			    {			    error = ENOBUFS;			    }			else			    {			    (*m)->m_len = sizeof (int);			    *mtod(*m, int *) = inp->inp_flags & INP_HDRINCL;			    }		}		return (error);	case DVMRP_INIT:	case DVMRP_DONE:	case DVMRP_ADD_VIF:	case DVMRP_DEL_VIF:	case DVMRP_ADD_LGRP:	case DVMRP_DEL_LGRP:	case DVMRP_ADD_MRT:	case DVMRP_DEL_MRT:            	return (_mCastCtlOutput (op, optname, so, m));	default:		if (optname >= DVMRP_INIT)            		return (_mCastCtlOutput (op, optname, so, m));	}	return (ip_ctloutput(op, so, level, optname, m));}u_long	rip_sendspace = RIPSNDQ;u_long	rip_recvspace = RIPRCVQ;/*ARGSUSED*/intrip_usrreq(so, req, m, nam, control)	register struct socket *so;	int req;	struct mbuf *m, *nam, *control;{	register int error = 0;	register struct inpcb *inp = sotoinpcb(so);        if (req == PRU_CONTROL)            return (in_control(so, (u_long)m, (caddr_t)nam,                    (struct ifnet *)control));	switch (req) {	case PRU_ATTACH:		if (inp)			panic("rip_attach");		if ((so->so_state & SS_PRIV) == 0) {			error = EACCES;			break;		}		if ((error = soreserve(so, rip_sendspace, rip_recvspace)) ||		    (error = in_pcballoc(so, &ripcbinfo)))			break;		inp = (struct inpcb *)so->so_pcb;		inp->inp_ip.ip_p = (int)nam;		break;	case PRU_DISCONNECT:		if ((so->so_state & SS_ISCONNECTED) == 0) {			error = ENOTCONN;			break;		}		/* FALLTHROUGH */	case PRU_ABORT:		soisdisconnected(so);		/* FALLTHROUGH */	case PRU_DETACH:		if (inp == 0)			panic("rip_detach");		in_pcbdetach(inp);		break;	case PRU_BIND:	    {		struct sockaddr_in *addr = mtod(nam, struct sockaddr_in *);		if (nam->m_len != sizeof(*addr)) {			error = EINVAL;			break;		}		if ((ifnet == 0) ||		    ((addr->sin_family != AF_INET) &&		     (addr->sin_family != AF_IMPLINK)) ||		    (addr->sin_addr.s_addr &&		     ifa_ifwithaddr((struct sockaddr *)addr) == 0)) {			error = EADDRNOTAVAIL;			break;		}		inp->inp_laddr = addr->sin_addr;		break;	    }	case PRU_CONNECT:	    {		struct sockaddr_in *addr = mtod(nam, struct sockaddr_in *);		if (nam->m_len != sizeof(*addr)) {			error = EINVAL;			break;		}		if (ifnet == 0) {			error = EADDRNOTAVAIL;			break;		}		if ((addr->sin_family != AF_INET) &&		     (addr->sin_family != AF_IMPLINK)) {			error = EAFNOSUPPORT;			break;		}		inp->inp_faddr = addr->sin_addr;		soisconnected(so);		break;	    }	case PRU_CONNECT2:		error = EOPNOTSUPP;		break;	/*	 * Mark the connection as being incapable of further input.	 */	case PRU_SHUTDOWN:		socantsendmore(so);		break;	/*	 * Ship a packet out.  The appropriate raw output	 * routine handles any massaging necessary.	 */	case PRU_SEND:	    {		register u_long dst;		if (so->so_state & SS_ISCONNECTED) {			if (nam) {				error = EISCONN;				break;			}			dst = inp->inp_faddr.s_addr;		} else {			if (nam == NULL) {				error = ENOTCONN;				break;			}			dst = mtod(nam, struct sockaddr_in *)->sin_addr.s_addr;		}		error = rip_output(m, so, dst);		m = NULL;		break;	    }	case PRU_SENSE:		/*		 * stat: don't bother with a blocksize.		 */		return (0);	/*	 * Not supported.	 */	case PRU_RCVOOB:	case PRU_RCVD:	case PRU_LISTEN:	case PRU_ACCEPT:	case PRU_SENDOOB:		error = EOPNOTSUPP;		break;	case PRU_SOCKADDR:		in_setsockaddr(inp, nam);		break;	case PRU_PEERADDR:		in_setpeeraddr(inp, nam);		break;	default:		panic("rip_usrreq");	}	if (m != NULL)		m_freem(m);	return (error);}/******************************************************************************** mCastCtlOutput - send commands to multicast routing engine.** This function sends commands to multicast routing engine.** INTERNAL* This function can be further expanded to receive multicast options also.* That is the reason for passing a pointer to a pointer to an mbuf as one of* the argument.** RETURNS: OK/ERROR** NOMANUAL*/static int _mCastCtlOutput    (    int 		option,		/* type of option */    int 		optName,	/* name of the option */    struct socket * 	sockPtr,	/* pointer to the socket */    struct mbuf **	pPtrMbuf	/* pointer to pointer to an mbuf */    )    {    register int error = EINVAL;	/* default error value */    if (pPtrMbuf == NULL)        return (error);        if (option == PRCO_SETOPT)        {        if (_mCastRouteCmdHook != NULL)            error = (*_mCastRouteCmdHook)(optName, sockPtr, *pPtrMbuf);        else            error = EOPNOTSUPP;         }    if (*pPtrMbuf != NULL)        (void) m_free (*pPtrMbuf);    return (error);    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品996| 久久99久久99| 欧美视频在线一区二区三区 | 成人va在线观看| 中文字幕中文字幕一区二区| 成人一区二区三区中文字幕| 国产精品国产精品国产专区不蜜| 色综合色狠狠综合色| 亚洲国产欧美在线| 日韩欧美中文字幕公布| 精品在线免费视频| 国产精品乱码妇女bbbb| 91麻豆swag| 麻豆freexxxx性91精品| 国产亚洲精品久| 在线观看一区二区视频| 欧美aaaaaa午夜精品| 中文一区二区完整视频在线观看| 色综合视频一区二区三区高清| 亚洲高清免费一级二级三级| 精品国产精品网麻豆系列| 成人国产精品免费观看动漫| 亚洲欧美日韩小说| 日韩一区二区三区电影在线观看 | 91麻豆精品国产91| 国产一区999| 一区二区三区在线视频播放| 日韩三区在线观看| 99精品视频免费在线观看| 亚洲成人在线观看视频| 久久精品男人天堂av| 欧美性xxxxxxxx| 国产成人午夜高潮毛片| 亚洲成a人片在线不卡一二三区| 欧美精品一区二区精品网| 色综合视频一区二区三区高清| 美日韩一级片在线观看| 亚洲精品水蜜桃| 精品国产一区二区三区不卡| 91国产福利在线| 国产福利一区二区三区在线视频| 亚洲r级在线视频| 国产精品久久久久久久久免费相片 | 久久久久久电影| 欧美色图激情小说| 国产成人精品免费| 日韩激情在线观看| 亚洲精品中文在线| 国产欧美一区二区精品秋霞影院| 欧美日韩电影在线| 日本二三区不卡| 99这里只有精品| 国产精品一级在线| 久久精品二区亚洲w码| 亚洲国产日韩在线一区模特| 亚洲欧美中日韩| 亚洲国产激情av| 久久久久88色偷偷免费| 777奇米成人网| 9191精品国产综合久久久久久| 91一区二区在线观看| 成人av网址在线| 成人妖精视频yjsp地址| 国产盗摄视频一区二区三区| 九色综合国产一区二区三区| 无吗不卡中文字幕| 亚洲第一福利视频在线| 亚洲成人av在线电影| 亚洲激情图片小说视频| 亚洲精品欧美激情| 亚洲激情欧美激情| 亚洲国产aⅴ天堂久久| 亚洲午夜激情网站| 亚洲综合清纯丝袜自拍| 亚洲综合无码一区二区| 亚洲精选视频在线| 亚洲午夜影视影院在线观看| 亚洲高清在线精品| 免费在线观看视频一区| 蜜臀精品一区二区三区在线观看 | 九九九久久久精品| 精品一区在线看| 极品少妇xxxx精品少妇| 国产精品亚洲专一区二区三区| 国内精品自线一区二区三区视频| 韩国欧美一区二区| 国产不卡视频在线观看| 99久久国产综合精品麻豆| 成人在线综合网| 欧美自拍丝袜亚洲| 99精品久久99久久久久| 在线欧美一区二区| 欧美日韩激情在线| 日韩女同互慰一区二区| 欧美tk—视频vk| 欧美国产日产图区| 亚洲精品写真福利| 青青青爽久久午夜综合久久午夜| 精品在线免费视频| 不卡的看片网站| 欧美网站大全在线观看| 日韩欧美国产小视频| 欧美韩日一区二区三区四区| 成人免费一区二区三区视频 | 中文字幕不卡的av| 中文字幕中文在线不卡住| 亚洲风情在线资源站| 久久av资源网| 不卡电影一区二区三区| 欧美老人xxxx18| 久久久久久久久久久久久久久99 | yourporn久久国产精品| 91高清视频在线| 亚洲精品一区二区三区在线观看| 国产清纯白嫩初高生在线观看91 | www.亚洲色图| 欧美日韩aaaaa| 国产免费成人在线视频| 一区二区三区国产豹纹内裤在线| 久久99国产精品麻豆| 色婷婷综合激情| 精品毛片乱码1区2区3区| 亚洲日本青草视频在线怡红院 | 在线视频中文字幕一区二区| 26uuu欧美| 亚洲国产成人porn| 不卡一区二区在线| 欧美大片一区二区三区| 亚洲激情校园春色| 国产999精品久久| 欧美一级二级三级蜜桃| 一区二区三区日韩欧美精品| 国产一区二区三区香蕉| 欧美日韩日日摸| 一区在线观看视频| 国产综合色精品一区二区三区| 欧美综合欧美视频| 日韩伦理电影网| 国产精品69毛片高清亚洲| 欧美精品日韩一本| 亚洲狠狠丁香婷婷综合久久久| 国产成人在线视频网站| 日韩欧美国产三级| 午夜精品久久久久久| 91丝袜国产在线播放| 日本一区二区免费在线观看视频 | 国产精品88av| 日韩美女在线视频| 日韩成人午夜精品| 91麻豆精品国产91久久久久久久久 | 亚洲欧洲综合另类| youjizz国产精品| 国产清纯白嫩初高生在线观看91 | 久久久久久久久一| 韩国三级电影一区二区| 欧美一个色资源| 亚洲gay无套男同| 欧美日韩激情在线| 午夜影视日本亚洲欧洲精品| 色综合久久88色综合天天免费| 国产精品麻豆视频| 成人一区二区三区在线观看| 国产色一区二区| 国产精品亚洲综合一区在线观看| 精品国产电影一区二区| 老司机精品视频导航| 欧美xxxx在线观看| 国产一区啦啦啦在线观看| 久久婷婷一区二区三区| 韩日av一区二区| 国产日韩欧美高清| 成人av免费网站| 亚洲男人电影天堂| 欧亚一区二区三区| 亚洲gay无套男同| 日韩欧美在线网站| 91日韩精品一区| 夜夜精品视频一区二区| 欧美在线你懂的| 首页国产欧美日韩丝袜| 日韩欧美中文一区| 国产91综合一区在线观看| 亚洲欧洲三级电影| 欧美午夜电影在线播放| 日韩精品电影一区亚洲| 欧美tickling挠脚心丨vk| 国产精品主播直播| 日韩一区日韩二区| 欧美日韩国产一级片| 久久99久久久欧美国产| 欧美激情中文字幕一区二区| caoporen国产精品视频| 亚洲自拍偷拍av| 欧美xxxx老人做受| www.日韩大片| 日本色综合中文字幕| 国产喷白浆一区二区三区| 色8久久人人97超碰香蕉987| 午夜精品久久久久久久久久 | 黄一区二区三区|