diff options
Diffstat (limited to 'include/net.h')
| -rw-r--r-- | include/net.h | 19 | 
1 files changed, 19 insertions, 0 deletions
| diff --git a/include/net.h b/include/net.h index d5d37b650..d7ff0687c 100644 --- a/include/net.h +++ b/include/net.h @@ -48,6 +48,19 @@ typedef void rxhand_f(uchar *pkt, unsigned dport,  		      IPaddr_t sip, unsigned sport,  		      unsigned len); +/** + * An incoming ICMP packet handler. + * @param type	ICMP type + * @param code	ICMP code + * @param dport	destination UDP port + * @param sip	source IP address + * @param sport	source UDP port + * @param pkt	pointer to the ICMP packet data + * @param len	packet length + */ +typedef void rxhand_icmp_f(unsigned type, unsigned code, unsigned dport, +		IPaddr_t sip, unsigned sport, uchar *pkt, unsigned len); +  /*   *	A timeout handler.  Called after time interval has expired.   */ @@ -244,6 +257,7 @@ typedef struct   * ICMP stuff (just enough to handle (host) redirect messages)   */  #define ICMP_ECHO_REPLY		0	/* Echo reply			*/ +#define ICMP_NOT_REACH		3	/* Detination unreachable	*/  #define ICMP_REDIRECT		5	/* Redirect (change route)	*/  #define ICMP_ECHO_REQUEST	8	/* Echo request			*/ @@ -251,6 +265,9 @@ typedef struct  #define ICMP_REDIR_NET		0	/* Redirect Net			*/  #define ICMP_REDIR_HOST		1	/* Redirect Host		*/ +/* Codes for NOT_REACH */ +#define ICMP_NOT_REACH_PORT	3	/* Port unreachable		*/ +  typedef struct icmphdr {  	uchar		type;  	uchar		code; @@ -265,6 +282,7 @@ typedef struct icmphdr {  			ushort	__unused;  			ushort	mtu;  		} frag; +		uchar data[0];  	} un;  } ICMP_t; @@ -397,6 +415,7 @@ extern uint	NetCksum(uchar *, int);		/* Calculate the checksum	*/  /* Set callbacks */  extern void	NetSetHandler(rxhand_f *);	/* Set RX packet handler	*/ +extern void net_set_icmp_handler(rxhand_icmp_f *f); /* Set ICMP RX handler */  extern void	NetSetTimeout(ulong, thand_f *);/* Set timeout handler		*/  /* Transmit "NetTxPacket" */ |