Free (GPLv2) TCP/IP stack developed by TASS Belgium
Dependents: lpc1768-picotcp-demo ZeroMQ_PicoTCP_Publisher_demo TCPSocket_HelloWorld_PicoTCP Pico_TCP_UDP_Test ... more
PicoTCP. Copyright (c) 2013 TASS Belgium NV.
Released under the GNU General Public License, version 2.
Different licensing models may exist, at the sole discretion of the Copyright holders.
Official homepage: http://www.picotcp.com
Bug tracker: https://github.com/tass-belgium/picotcp/issues
Development steps:
initial integration with mbed RTOSgeneric mbed Ethernet driverhigh performance NXP LPC1768 specific Ethernet driverMulti-threading support for mbed RTOSBerkeley sockets and integration with the New Socket APIFork of the apps running on top of the New Socket APIScheduling optimizations- Debugging/benchmarking/testing
Demo application (measuring TCP sender performance):
Import programlpc1768-picotcp-demo
A PicoTCP demo app testing the ethernet throughput on the lpc1768 mbed board.
modules/pico_icmp4.h@131:4758606c9316, 2013-12-16 (annotated)
- Committer:
- TASS Belgium NV
- Date:
- Mon Dec 16 11:25:54 2013 +0100
- Revision:
- 131:4758606c9316
- Parent:
- 128:ae39e6e81531
- Child:
- 149:5f4cb161cec3
Syncronized with master branch
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
daniele | 3:b4047e8a0123 | 1 | /********************************************************************* |
TASS Belgium NV |
131:4758606c9316 | 2 | PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved. |
TASS Belgium NV |
131:4758606c9316 | 3 | See LICENSE and COPYING for usage. |
daniele | 3:b4047e8a0123 | 4 | |
TASS Belgium NV |
131:4758606c9316 | 5 | . |
daniele | 3:b4047e8a0123 | 6 | |
TASS Belgium NV |
131:4758606c9316 | 7 | *********************************************************************/ |
daniele | 3:b4047e8a0123 | 8 | #ifndef _INCLUDE_PICO_ICMP4 |
daniele | 3:b4047e8a0123 | 9 | #define _INCLUDE_PICO_ICMP4 |
daniele | 3:b4047e8a0123 | 10 | #include "pico_addressing.h" |
daniele | 3:b4047e8a0123 | 11 | #include "pico_protocol.h" |
daniele | 3:b4047e8a0123 | 12 | |
daniele | 3:b4047e8a0123 | 13 | extern struct pico_protocol pico_proto_icmp4; |
daniele | 3:b4047e8a0123 | 14 | |
daniele | 3:b4047e8a0123 | 15 | struct __attribute__((packed)) pico_icmp4_hdr { |
TASS Belgium NV |
131:4758606c9316 | 16 | uint8_t type; |
TASS Belgium NV |
131:4758606c9316 | 17 | uint8_t code; |
TASS Belgium NV |
131:4758606c9316 | 18 | uint16_t crc; |
daniele | 3:b4047e8a0123 | 19 | |
TASS Belgium NV |
131:4758606c9316 | 20 | /* hun */ |
TASS Belgium NV |
131:4758606c9316 | 21 | union { |
TASS Belgium NV |
131:4758606c9316 | 22 | uint8_t ih_pptr; |
TASS Belgium NV |
131:4758606c9316 | 23 | struct pico_ip4 ih_gwaddr; |
TASS Belgium NV |
131:4758606c9316 | 24 | struct { |
TASS Belgium NV |
131:4758606c9316 | 25 | uint16_t idseq_id; |
TASS Belgium NV |
131:4758606c9316 | 26 | uint16_t idseq_seq; |
TASS Belgium NV |
131:4758606c9316 | 27 | } ih_idseq; |
TASS Belgium NV |
131:4758606c9316 | 28 | uint32_t ih_void; |
TASS Belgium NV |
131:4758606c9316 | 29 | struct { |
TASS Belgium NV |
131:4758606c9316 | 30 | uint16_t ipm_void; |
TASS Belgium NV |
131:4758606c9316 | 31 | uint16_t ipm_nmtu; |
TASS Belgium NV |
131:4758606c9316 | 32 | } ih_pmtu; |
TASS Belgium NV |
131:4758606c9316 | 33 | struct { |
TASS Belgium NV |
131:4758606c9316 | 34 | uint8_t rta_numgw; |
TASS Belgium NV |
131:4758606c9316 | 35 | uint8_t rta_wpa; |
TASS Belgium NV |
131:4758606c9316 | 36 | uint16_t rta_lifetime; |
TASS Belgium NV |
131:4758606c9316 | 37 | } ih_rta; |
TASS Belgium NV |
131:4758606c9316 | 38 | } hun; |
daniele | 3:b4047e8a0123 | 39 | |
TASS Belgium NV |
131:4758606c9316 | 40 | /* dun */ |
TASS Belgium NV |
131:4758606c9316 | 41 | union { |
TASS Belgium NV |
131:4758606c9316 | 42 | struct { |
TASS Belgium NV |
131:4758606c9316 | 43 | uint32_t ts_otime; |
TASS Belgium NV |
131:4758606c9316 | 44 | uint32_t ts_rtime; |
TASS Belgium NV |
131:4758606c9316 | 45 | uint32_t ts_ttime; |
TASS Belgium NV |
131:4758606c9316 | 46 | } id_ts; |
TASS Belgium NV |
131:4758606c9316 | 47 | struct { |
TASS Belgium NV |
131:4758606c9316 | 48 | uint32_t ip_options; |
TASS Belgium NV |
131:4758606c9316 | 49 | uint32_t ip_data_hi; |
TASS Belgium NV |
131:4758606c9316 | 50 | uint32_t ip_data_lo; |
TASS Belgium NV |
131:4758606c9316 | 51 | } id_ip; |
TASS Belgium NV |
131:4758606c9316 | 52 | struct { |
TASS Belgium NV |
131:4758606c9316 | 53 | uint32_t ira_addr; |
TASS Belgium NV |
131:4758606c9316 | 54 | uint32_t ira_pref; |
TASS Belgium NV |
131:4758606c9316 | 55 | } id_ra; |
TASS Belgium NV |
131:4758606c9316 | 56 | uint32_t id_mask; |
TASS Belgium NV |
131:4758606c9316 | 57 | uint8_t id_data[1]; |
TASS Belgium NV |
131:4758606c9316 | 58 | } dun; |
daniele | 3:b4047e8a0123 | 59 | }; |
daniele | 3:b4047e8a0123 | 60 | |
daniele | 3:b4047e8a0123 | 61 | #define PICO_ICMPHDR_DRY_SIZE 4 |
tass | 70:cd218dd180e5 | 62 | #define PICO_ICMPHDR_UN_SIZE 8u |
daniele | 3:b4047e8a0123 | 63 | |
TASS Belgium NV |
131:4758606c9316 | 64 | #define PICO_ICMP_ECHOREPLY 0 |
TASS Belgium NV |
131:4758606c9316 | 65 | #define PICO_ICMP_DEST_UNREACH 3 |
daniele | 3:b4047e8a0123 | 66 | #define PICO_ICMP_SOURCE_QUENCH 4 |
daniele | 3:b4047e8a0123 | 67 | #define PICO_ICMP_REDIRECT 5 |
daniele | 3:b4047e8a0123 | 68 | #define PICO_ICMP_ECHO 8 |
daniele | 3:b4047e8a0123 | 69 | #define PICO_ICMP_TIME_EXCEEDED 11 |
daniele | 3:b4047e8a0123 | 70 | #define PICO_ICMP_PARAMETERPROB 12 |
daniele | 3:b4047e8a0123 | 71 | #define PICO_ICMP_TIMESTAMP 13 |
daniele | 3:b4047e8a0123 | 72 | #define PICO_ICMP_TIMESTAMPREPLY 14 |
daniele | 3:b4047e8a0123 | 73 | #define PICO_ICMP_INFO_REQUEST 15 |
daniele | 3:b4047e8a0123 | 74 | #define PICO_ICMP_INFO_REPLY 16 |
daniele | 3:b4047e8a0123 | 75 | #define PICO_ICMP_ADDRESS 17 |
daniele | 3:b4047e8a0123 | 76 | #define PICO_ICMP_ADDRESSREPLY 18 |
daniele | 3:b4047e8a0123 | 77 | |
daniele | 3:b4047e8a0123 | 78 | |
TASS Belgium NV |
131:4758606c9316 | 79 | #define PICO_ICMP_UNREACH 3 |
TASS Belgium NV |
131:4758606c9316 | 80 | #define PICO_ICMP_SOURCEQUENCH 4 |
TASS Belgium NV |
131:4758606c9316 | 81 | #define PICO_ICMP_ROUTERADVERT 9 |
TASS Belgium NV |
131:4758606c9316 | 82 | #define PICO_ICMP_ROUTERSOLICIT 10 |
TASS Belgium NV |
131:4758606c9316 | 83 | #define PICO_ICMP_TIMXCEED 11 |
TASS Belgium NV |
131:4758606c9316 | 84 | #define PICO_ICMP_PARAMPROB 12 |
TASS Belgium NV |
131:4758606c9316 | 85 | #define PICO_ICMP_TSTAMP 13 |
TASS Belgium NV |
131:4758606c9316 | 86 | #define PICO_ICMP_TSTAMPREPLY 14 |
TASS Belgium NV |
131:4758606c9316 | 87 | #define PICO_ICMP_IREQ 15 |
TASS Belgium NV |
131:4758606c9316 | 88 | #define PICO_ICMP_IREQREPLY 16 |
TASS Belgium NV |
131:4758606c9316 | 89 | #define PICO_ICMP_MASKREQ 17 |
TASS Belgium NV |
131:4758606c9316 | 90 | #define PICO_ICMP_MASKREPLY 18 |
daniele | 3:b4047e8a0123 | 91 | |
daniele | 3:b4047e8a0123 | 92 | #define PICO_ICMP_MAXTYPE 18 |
daniele | 3:b4047e8a0123 | 93 | |
daniele | 3:b4047e8a0123 | 94 | |
TASS Belgium NV |
131:4758606c9316 | 95 | #define PICO_ICMP_UNREACH_NET 0 |
TASS Belgium NV |
131:4758606c9316 | 96 | #define PICO_ICMP_UNREACH_HOST 1 |
TASS Belgium NV |
131:4758606c9316 | 97 | #define PICO_ICMP_UNREACH_PROTOCOL 2 |
TASS Belgium NV |
131:4758606c9316 | 98 | #define PICO_ICMP_UNREACH_PORT 3 |
TASS Belgium NV |
131:4758606c9316 | 99 | #define PICO_ICMP_UNREACH_NEEDFRAG 4 |
TASS Belgium NV |
131:4758606c9316 | 100 | #define PICO_ICMP_UNREACH_SRCFAIL 5 |
TASS Belgium NV |
131:4758606c9316 | 101 | #define PICO_ICMP_UNREACH_NET_UNKNOWN 6 |
TASS Belgium NV |
131:4758606c9316 | 102 | #define PICO_ICMP_UNREACH_HOST_UNKNOWN 7 |
TASS Belgium NV |
131:4758606c9316 | 103 | #define PICO_ICMP_UNREACH_ISOLATED 8 |
TASS Belgium NV |
131:4758606c9316 | 104 | #define PICO_ICMP_UNREACH_NET_PROHIB 9 |
TASS Belgium NV |
131:4758606c9316 | 105 | #define PICO_ICMP_UNREACH_HOST_PROHIB 10 |
TASS Belgium NV |
131:4758606c9316 | 106 | #define PICO_ICMP_UNREACH_TOSNET 11 |
TASS Belgium NV |
131:4758606c9316 | 107 | #define PICO_ICMP_UNREACH_TOSHOST 12 |
TASS Belgium NV |
131:4758606c9316 | 108 | #define PICO_ICMP_UNREACH_FILTER_PROHIB 13 |
TASS Belgium NV |
131:4758606c9316 | 109 | #define PICO_ICMP_UNREACH_HOST_PRECEDENCE 14 |
TASS Belgium NV |
131:4758606c9316 | 110 | #define PICO_ICMP_UNREACH_PRECEDENCE_CUTOFF 15 |
daniele | 3:b4047e8a0123 | 111 | |
daniele | 3:b4047e8a0123 | 112 | |
TASS Belgium NV |
131:4758606c9316 | 113 | #define PICO_ICMP_REDIRECT_NET 0 |
TASS Belgium NV |
131:4758606c9316 | 114 | #define PICO_ICMP_REDIRECT_HOST 1 |
TASS Belgium NV |
131:4758606c9316 | 115 | #define PICO_ICMP_REDIRECT_TOSNET 2 |
TASS Belgium NV |
131:4758606c9316 | 116 | #define PICO_ICMP_REDIRECT_TOSHOST 3 |
daniele | 3:b4047e8a0123 | 117 | |
daniele | 3:b4047e8a0123 | 118 | |
TASS Belgium NV |
131:4758606c9316 | 119 | #define PICO_ICMP_TIMXCEED_INTRANS 0 |
TASS Belgium NV |
131:4758606c9316 | 120 | #define PICO_ICMP_TIMXCEED_REASS 1 |
daniele | 3:b4047e8a0123 | 121 | |
daniele | 3:b4047e8a0123 | 122 | |
TASS Belgium NV |
131:4758606c9316 | 123 | #define PICO_ICMP_PARAMPROB_OPTABSENT 1 |
daniele | 3:b4047e8a0123 | 124 | |
daniele | 3:b4047e8a0123 | 125 | #define PICO_SIZE_ICMP4HDR ((sizeof(struct pico_icmp4_hdr))) |
daniele | 3:b4047e8a0123 | 126 | |
daniele | 3:b4047e8a0123 | 127 | struct pico_icmp4_stats |
daniele | 3:b4047e8a0123 | 128 | { |
TASS Belgium NV |
131:4758606c9316 | 129 | struct pico_ip4 dst; |
TASS Belgium NV |
131:4758606c9316 | 130 | unsigned long size; |
TASS Belgium NV |
131:4758606c9316 | 131 | unsigned long seq; |
TASS Belgium NV |
131:4758606c9316 | 132 | pico_time time; |
TASS Belgium NV |
131:4758606c9316 | 133 | unsigned long ttl; |
TASS Belgium NV |
131:4758606c9316 | 134 | int err; |
daniele | 3:b4047e8a0123 | 135 | }; |
daniele | 3:b4047e8a0123 | 136 | |
daniele | 3:b4047e8a0123 | 137 | int pico_icmp4_port_unreachable(struct pico_frame *f); |
daniele | 3:b4047e8a0123 | 138 | int pico_icmp4_proto_unreachable(struct pico_frame *f); |
daniele | 3:b4047e8a0123 | 139 | int pico_icmp4_dest_unreachable(struct pico_frame *f); |
daniele | 3:b4047e8a0123 | 140 | int pico_icmp4_ttl_expired(struct pico_frame *f); |
daniele | 3:b4047e8a0123 | 141 | int pico_icmp4_packet_filtered(struct pico_frame *f); |
daniele | 3:b4047e8a0123 | 142 | |
daniele | 3:b4047e8a0123 | 143 | int pico_icmp4_ping(char *dst, int count, int interval, int timeout, int size, void (*cb)(struct pico_icmp4_stats *)); |
daniele | 3:b4047e8a0123 | 144 | #define PICO_PING_ERR_REPLIED 0 |
daniele | 3:b4047e8a0123 | 145 | #define PICO_PING_ERR_TIMEOUT 1 |
daniele | 3:b4047e8a0123 | 146 | #define PICO_PING_ERR_UNREACH 2 |
daniele | 3:b4047e8a0123 | 147 | #define PICO_PING_ERR_PENDING 0xFFFF |
daniele | 3:b4047e8a0123 | 148 | |
daniele | 3:b4047e8a0123 | 149 | #endif |