⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ip_icmp.h

📁 VRTX 商用嵌入式实时操作系统
💻 H
字号:
/***************************************************************************
*
*               Copyright (c) 1993 READY SYSTEMS CORPORATION.
*
*       All rights reserved. READY SYSTEMS' source code is an unpublished
*       work and the use of a copyright notice does not imply otherwise.
*       This source code contains confidential, trade secret material of
*       READY SYSTEMS. Any attempt or participation in deciphering, decoding,
*       reverse engineering or in any way altering the source code is
*       strictly prohibited, unless the prior written consent of
*       READY SYSTEMS is obtained.
*
*
*       Module Name:            %M%
*
*       Identification:         %Z% %I% %M%
*
*       Date:                   %G%  %U%
*
****************************************************************************
*/

/*
 RCS header identifier - $Id: ip_icmp.h,v 1.3 1993/10/05 18:08:40 robert Exp $
*/
/*
 * Copyrighted as an unpublished work.
 * (c) Copyright 1987-1993 Lachman Technology, Incorporated
 * All rights reserved.
 * 
 * RESTRICTED RIGHTS
 * 
 * These programs are supplied under a license.  They may be used,
 * disclosed, and/or copied only as permitted under such license
 * agreement.  Any copy must contain the above copyright notice and
 * this restricted rights notice.  Use, copying, and/or disclosure
 * of the programs is strictly prohibited unless otherwise provided
 * in the license agreement.
 */
/*
 * Copyright (c) 1985 Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that the above copyright notice and this paragraph are
 * duplicated in all such forms and that any documentation,
 * advertising materials, and other materials related to such
 * distribution and use acknowledge that the software was developed
 * by the University of California, Berkeley.  The name of the
 * University may not be used to endorse or promote products derived
 * from this software without specific prior written permission.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

#ifndef ip_icmp_h
#define ip_icmp_h

#ifdef __cplusplus
extern "C" {
#endif

/* ip_icmp.h 6.1 83/07/29 */
/*
 * Interface Control Message Protocol Definitions. Per RFC 792, September
 * 1981. 
 */

/*
 * Structure of an icmp header. 
 */
struct icmp {
	u_char          icmp_type;	/* type of message, see below */
	u_char          icmp_code;	/* type sub code */
	u_short         icmp_cksum;	/* ones complement cksum of struct */
	union {
		u_char          ih_pptr;	/* ICMP_PARAMPROB */
		struct in_addr  ih_gwaddr;	/* ICMP_REDIRECT */
		struct ih_idseq {
			n_short         icd_id;
			n_short         icd_seq;
		}               ih_idseq;
		long            ih_void;
	}               icmp_hun;
#define	icmp_pptr	icmp_hun.ih_pptr
#define	icmp_gwaddr	icmp_hun.ih_gwaddr
#define	icmp_id		icmp_hun.ih_idseq.icd_id
#define	icmp_seq	icmp_hun.ih_idseq.icd_seq
#define	icmp_void	icmp_hun.ih_void
	union {
		struct id_ts {
			n_time          its_otime;
			n_time          its_rtime;
			n_time          its_ttime;
		}               id_ts;
		struct id_ip {
			struct ip       idi_ip;
			/* options and then 64 bits of data */
		}               id_ip;
		u_long          id_mask;
		char            id_data[1];
	}               icmp_dun;
#define	icmp_otime	icmp_dun.id_ts.its_otime
#define	icmp_rtime	icmp_dun.id_ts.its_rtime
#define	icmp_ttime	icmp_dun.id_ts.its_ttime
#define	icmp_ip		icmp_dun.id_ip.idi_ip
#define	icmp_mask	icmp_dun.id_mask
#define	icmp_data	icmp_dun.id_data
};

/*
 * Lower bounds on packet lengths for various types. For the error advice
 * packets must first insure that the packet is large enought to contain the
 * returned ip header. Only then can we do the check to see if 64 bits of
 * packet data have been returned, since we need to check the returned ip
 * header length. 
 */
#define	ICMP_MINLEN	8	/* abs minimum */
#define	ICMP_TSLEN	(8 + 3 * sizeof (n_time))	/* timestamp */
#define	ICMP_MASKLEN	12	/* address mask */
#define	ICMP_ADVLENMIN	(8 + sizeof (struct ip) + 8)	/* min */
#define	ICMP_ADVLEN(p)	(8 + ((p)->icmp_ip.ip_hl << 2) + 8)
/* N.B.: must separately check that ip_hl >= 5 */

/*
 * Definition of type and code field values. 
 */
#define	ICMP_ECHOREPLY		0	/* echo reply */
#define	ICMP_UNREACH		3	/* dest unreachable, codes: */
#define		ICMP_UNREACH_NET	0	/* bad net */
#define		ICMP_UNREACH_HOST	1	/* bad host */
#define		ICMP_UNREACH_PROTOCOL	2	/* bad protocol */
#define		ICMP_UNREACH_PORT	3	/* bad port */
#define		ICMP_UNREACH_NEEDFRAG	4	/* IP_DF caused drop */
#define		ICMP_UNREACH_SRCFAIL	5	/* src route failed */
#define	ICMP_SOURCEQUENCH	4	/* packet lost, slow down */
#define	ICMP_REDIRECT		5	/* shorter route, codes: */
#define		ICMP_REDIRECT_NET	0	/* for network */
#define		ICMP_REDIRECT_HOST	1	/* for host */
#define		ICMP_REDIRECT_TOSNET	2	/* for tos and net */
#define		ICMP_REDIRECT_TOSHOST	3	/* for tos and host */
#define	ICMP_ECHO		8	/* echo service */
#define	ICMP_TIMXCEED		11	/* time exceeded, code: */
#define		ICMP_TIMXCEED_INTRANS	0	/* ttl==0 in transit */
#define		ICMP_TIMXCEED_REASS	1	/* ttl==0 in reass */
#define	ICMP_PARAMPROB		12	/* ip header bad */
#define	ICMP_TSTAMP		13	/* timestamp request */
#define	ICMP_TSTAMPREPLY	14	/* timestamp reply */
#define	ICMP_IREQ		15	/* information request */
#define	ICMP_IREQREPLY		16	/* information reply */
#define	ICMP_MASKREQ		17	/* address mask request */
#define	ICMP_MASKREPLY		18	/* address mask reply */

#define	ICMP_MAXTYPE		18
#define ICMP_INFOTYPE(type) \
        ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
        (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
        (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
        (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)

#ifdef __cplusplus
}
#endif

#endif				/* ip_icmp_h */

⌨️ 快捷键说明

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