From 8a2d54981a1c1ee6563f3444cffc1d2d4784156e Mon Sep 17 00:00:00 2001 From: patacongo Date: Tue, 2 Sep 2008 20:42:01 +0000 Subject: Add uIP access to ICMP protocol git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@869 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/include/net/uip/uip-icmp.h | 72 ++++++++++++++++++++++++++++++++++++---- nuttx/include/net/uip/uip-tcp.h | 16 +++++++++ nuttx/include/net/uip/uip.h | 7 +++- nuttx/include/net/uip/uipopt.h | 6 ++++ 4 files changed, 93 insertions(+), 8 deletions(-) (limited to 'nuttx/include/net') diff --git a/nuttx/include/net/uip/uip-icmp.h b/nuttx/include/net/uip/uip-icmp.h index 816da04ab..632653ab8 100644 --- a/nuttx/include/net/uip/uip-icmp.h +++ b/nuttx/include/net/uip/uip-icmp.h @@ -2,7 +2,7 @@ * net/uip/uip-icmp.h * Header file for the uIP ICMP stack. * - * Copyright (C) 2007 Gregory Nutt. All rights reserved. + * Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * This logic was leveraged from uIP which also has a BSD-style license: @@ -53,6 +53,56 @@ * Definitions ****************************************************************************/ +/* ICMP/ICMP6 definitions */ + +/* ICMP/ICMP6 Message Types */ + +#define ICMP_ECHO_REPLY 0 /* RFC 792 */ +#define ICMP_DEST_UNREACHABLE 3 /* RFC 792 */ +#define ICMP_SRC_QUENCH 4 /* RFC 792 */ +#define ICMP_REDIRECT 5 /* RFC 792 */ +#define ICMP_ALT_HOST_ADDRESS 6 +#define ICMP_ECHO_REQUEST 8 /* RFC 792 */ +#define ICMP_ROUTER_ADVERTISEMENT 9 /* RFC 1256 */ +#define ICMP_ROUTER_SOLICITATION 10 /* RFC 1256 */ +#define ICMP_TIME_EXCEEDED 11 /* RFC 792 */ +#define ICMP_PARAMETER_PROBLEM 12 +#define ICMP_TIMESTAMP_REQUEST 13 +#define ICMP_TIMESTAMP_REPLY 14 +#define ICMP_INFORMATION_REQUEST 15 +#define ICMP_INFORMATION_REPLY 16 +#define ICMP_ADDRESS_MASK_REQUEST 17 +#define ICMP_ADDRESS_MASK_REPLY 18 +#define ICMP_TRACEROUTE 30 +#define ICMP_CONVERSION_ERROR 31 +#define ICMP_MOBILE_HOST_REDIRECT 32 +#define ICMP_IPV6_WHEREAREYOU 33 +#define ICMP_IPV6_IAMHERE 34 +#define ICMP_MOBILE_REGIS_REQUEST 35 +#define ICMP_MOBILE_REGIS_REPLY 36 +#define ICMP_DOMAIN_NAME_REQUEST 37 +#define ICMP_DOMAIN_NAME_REPLY 38 +#define ICMP_SKIP_DISCOVERY_PROTO 39 +#define ICMP_PHOTURIS_SECURITY_FAIL 40 +#define ICMP_EXP_MOBILE_PROTO 41 /* RFC 4065 */ + +/* ICMP6 Message Types */ + +#define ICMP6_ECHO_REPLY 129 +#define ICMP6_ECHO_REQUEST 128 +#define ICMP6_NEIGHBOR_SOLICITATION 135 +#define ICMP6_NEIGHBOR_ADVERTISEMENT 136 + +#define ICMP6_FLAG_S (1 << 6) + +#define ICMP6_OPTION_SOURCE_LINK_ADDRESS 1 +#define ICMP6_OPTION_TARGET_LINK_ADDRESS 2 + +/* Header sizes */ + +#define UIP_ICMPH_LEN 4 /* Size of ICMP header */ +#define UIP_IPICMPH_LEN (UIP_ICMPH_LEN + UIP_IPH_LEN) /* Size of IP + ICMP header */ + /**************************************************************************** * Public Type Definitions ****************************************************************************/ @@ -91,19 +141,27 @@ struct uip_icmpip_hdr #endif /* CONFIG_NET_IPv6 */ - /* ICMP (echo) header */ + /* ICMP header */ + + uint8 type; /* Defines the format of the ICMP message */ + uint8 icode; /* Further qualifies the ICMP messsage */ + uint16 icmpchksum; /* Checksum of ICMP header and data */ - uint8 type; - uint8 icode; - uint16 icmpchksum; + /* Data following the ICMP header contains the data specific to the + * message type indicated by the Type and Code fields. + */ #ifndef CONFIG_NET_IPv6 - uint16 id; - uint16 seqno; + /* ICMP_ECHO_REQUEST and ICMP_ECHO_REPLY data */ + + uint16 id; /* Used to match requests with replies */ + uint16 seqno; /* " " "" " " " " " " " " */ #else /* !CONFIG_NET_IPv6 */ + /* ICMP6_ECHO_REQUEST and ICMP6_ECHO_REPLY data */ + uint8 flags; uint8 reserved1; uint8 reserved2; diff --git a/nuttx/include/net/uip/uip-tcp.h b/nuttx/include/net/uip/uip-tcp.h index 0fa12880c..e0d696981 100644 --- a/nuttx/include/net/uip/uip-tcp.h +++ b/nuttx/include/net/uip/uip-tcp.h @@ -59,6 +59,22 @@ * Definitions ****************************************************************************/ +/* TCP definitions */ + +#define TCP_FIN 0x01 +#define TCP_SYN 0x02 +#define TCP_RST 0x04 +#define TCP_PSH 0x08 +#define TCP_ACK 0x10 +#define TCP_URG 0x20 +#define TCP_CTL 0x3f + +#define TCP_OPT_END 0 /* End of TCP options list */ +#define TCP_OPT_NOOP 1 /* "No-operation" TCP option */ +#define TCP_OPT_MSS 2 /* Maximum segment size TCP option */ + +#define TCP_OPT_MSS_LEN 4 /* Length of TCP MSS option. */ + /* The TCP states used in the struct uip_conn tcpstateflags field */ #define UIP_CLOSED 0 /* The connection is not in use and available */ diff --git a/nuttx/include/net/uip/uip.h b/nuttx/include/net/uip/uip.h index 08f2c14a3..54a94bf98 100644 --- a/nuttx/include/net/uip/uip.h +++ b/nuttx/include/net/uip/uip.h @@ -98,6 +98,11 @@ * UIP_TIMEDOUT IN: The connection has been aborted due to too many * retransmissions. (TCP only) * OUT: Not used + * UIP_ECHOREPLY IN: An ICMP Echo Reply has been received. Used to support + * ICMP ping from applications. (ICMP only) + * OUT: Cleared (only) by the application logic to indicate + * that the reply was processed, suppressing further + * attempts to process the reply. */ #define UIP_ACKDATA (1 << 0) @@ -109,8 +114,8 @@ #define UIP_ABORT (1 << 6) #define UIP_CONNECTED (1 << 7) #define UIP_TIMEDOUT (1 << 8) +#define UIP_ECHOREPLY (1 << 9) -#define UIP_DATA_EVENTS (UIP_ACKDATA|UIP_NEWDATA|UIP_REXMIT|UIP_POLL) #define UIP_CONN_EVENTS (UIP_CLOSE|UIP_ABORT|UIP_CONNECTED|UIP_TIMEDOUT) /* The buffer size available for user data in the d_buf buffer. diff --git a/nuttx/include/net/uip/uipopt.h b/nuttx/include/net/uip/uipopt.h index 98a5f4fce..e71ae00df 100644 --- a/nuttx/include/net/uip/uipopt.h +++ b/nuttx/include/net/uip/uipopt.h @@ -98,6 +98,12 @@ #define UIP_REASS_MAXAGE (20*10) /* 20 seconds */ +/* ICMP configuration options */ + +#if !defined(CONFIG_NET_ICMP) || defined(CONFIG_DISABLE_CLOCK) +# undef CONFIG_NET_ICMP_PING +#endif + /* UDP configuration options */ /* The maximum amount of concurrent UDP connection, Default: 10 */ -- cgit v1.2.3