local_out.c,v

来自「TCP-IP红宝书源代码」· C,V 代码 · 共 78 行

C,V
78
字号
head	1.1;
access;
symbols;
locks
	dls:1.1; strict;
comment	@ * @;


1.1
date	97.09.21.19.27.59;	author dls;	state Dist;
branches;
next	;


desc
@@


1.1
log
@pre-3e code
@
text
@/* local_out.c - local_out */

#include <conf.h>
#include <kernel.h>
#include <proc.h>
#include <network.h>

struct ep	*ipreass();

/*------------------------------------------------------------------------
 *  local_out  -  handle an IP datagram headed for a local process
 *------------------------------------------------------------------------
 */
int local_out(pep)
struct	ep	*pep;
{
	struct	netif	*pni = &nif[NI_LOCAL];
	struct	ip	*pip = (struct ip *)pep->ep_data;
	int		rv;

	ipnet2h(pip);
	pep->ep_order |= EPO_IP;
	pep = ipreass(pep);
	if (pep == 0)
		return OK;
	pip = (struct ip *)pep->ep_data;
	ipdstopts(pni, pep);		/* do IP option processing	*/
	switch (pip->ip_proto) {
	case IPT_ICMP:
		rv = icmp_in(pni, pep);
		break;
	case IPT_IGMP:
		rv = igmp_in(pni, pep);
		break;
	case IPT_TCP:
		rv = tcp_in(pni, pep);
		break;
	case IPT_UDP:
		rv = udp_in(pni, pep);
		break;
#ifdef OSPF
	case IPT_OSPF:
		rv = ospf_in(pni, pep);
		break;
#endif
	default:
		IpInUnknownProtos++;
		icmp(ICT_DESTUR, ICC_PROTOUR, pip->ip_src, pep);
		return OK;
	}
	IpInDelivers++;
	return rv;
}
@

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?