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@155:a70f34550c34, 2016-01-28 (annotated)
- Committer:
- tass
- Date:
- Thu Jan 28 15:12:00 2016 +0100
- Revision:
- 155:a70f34550c34
- Parent:
- 152:a3d286bf94e5
Adding TCP flag for FIN.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
daniele | 3:b4047e8a0123 | 1 | /********************************************************************* |
tass | 152:a3d286bf94e5 | 2 | PicoTCP. Copyright (c) 2012-2015 Altran Intelligent Systems. 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 | *********************************************************************/ |
tass picotcp@tass.be | 149:5f4cb161cec3 | 8 | #ifndef INCLUDE_PICO_ICMP4 |
tass picotcp@tass.be | 149:5f4cb161cec3 | 9 | #define INCLUDE_PICO_ICMP4 |
tass | 152:a3d286bf94e5 | 10 | #include "pico_defines.h" |
daniele | 3:b4047e8a0123 | 11 | #include "pico_addressing.h" |
daniele | 3:b4047e8a0123 | 12 | #include "pico_protocol.h" |
daniele | 3:b4047e8a0123 | 13 | |
tass | 152:a3d286bf94e5 | 14 | |
daniele | 3:b4047e8a0123 | 15 | extern struct pico_protocol pico_proto_icmp4; |
daniele | 3:b4047e8a0123 | 16 | |
tass picotcp@tass.be | 149:5f4cb161cec3 | 17 | PACKED_STRUCT_DEF pico_icmp4_hdr { |
TASS Belgium NV |
131:4758606c9316 | 18 | uint8_t type; |
TASS Belgium NV |
131:4758606c9316 | 19 | uint8_t code; |
TASS Belgium NV |
131:4758606c9316 | 20 | uint16_t crc; |
daniele | 3:b4047e8a0123 | 21 | |
TASS Belgium NV |
131:4758606c9316 | 22 | /* hun */ |
tass | 152:a3d286bf94e5 | 23 | PACKED_UNION_DEF hun_u { |
TASS Belgium NV |
131:4758606c9316 | 24 | uint8_t ih_pptr; |
TASS Belgium NV |
131:4758606c9316 | 25 | struct pico_ip4 ih_gwaddr; |
tass | 152:a3d286bf94e5 | 26 | PEDANTIC_STRUCT_DEF ih_idseq_s { |
TASS Belgium NV |
131:4758606c9316 | 27 | uint16_t idseq_id; |
TASS Belgium NV |
131:4758606c9316 | 28 | uint16_t idseq_seq; |
TASS Belgium NV |
131:4758606c9316 | 29 | } ih_idseq; |
TASS Belgium NV |
131:4758606c9316 | 30 | uint32_t ih_void; |
tass | 152:a3d286bf94e5 | 31 | PEDANTIC_STRUCT_DEF ih_pmtu_s { |
TASS Belgium NV |
131:4758606c9316 | 32 | uint16_t ipm_void; |
TASS Belgium NV |
131:4758606c9316 | 33 | uint16_t ipm_nmtu; |
TASS Belgium NV |
131:4758606c9316 | 34 | } ih_pmtu; |
tass | 152:a3d286bf94e5 | 35 | PEDANTIC_STRUCT_DEF ih_rta_s { |
TASS Belgium NV |
131:4758606c9316 | 36 | uint8_t rta_numgw; |
TASS Belgium NV |
131:4758606c9316 | 37 | uint8_t rta_wpa; |
TASS Belgium NV |
131:4758606c9316 | 38 | uint16_t rta_lifetime; |
TASS Belgium NV |
131:4758606c9316 | 39 | } ih_rta; |
TASS Belgium NV |
131:4758606c9316 | 40 | } hun; |
daniele | 3:b4047e8a0123 | 41 | |
TASS Belgium NV |
131:4758606c9316 | 42 | /* dun */ |
tass | 152:a3d286bf94e5 | 43 | PACKED_UNION_DEF dun_u { |
tass | 152:a3d286bf94e5 | 44 | PEDANTIC_STRUCT_DEF id_ts_s { |
TASS Belgium NV |
131:4758606c9316 | 45 | uint32_t ts_otime; |
TASS Belgium NV |
131:4758606c9316 | 46 | uint32_t ts_rtime; |
TASS Belgium NV |
131:4758606c9316 | 47 | uint32_t ts_ttime; |
TASS Belgium NV |
131:4758606c9316 | 48 | } id_ts; |
tass | 152:a3d286bf94e5 | 49 | PEDANTIC_STRUCT_DEF id_ip_s { |
TASS Belgium NV |
131:4758606c9316 | 50 | uint32_t ip_options; |
TASS Belgium NV |
131:4758606c9316 | 51 | uint32_t ip_data_hi; |
TASS Belgium NV |
131:4758606c9316 | 52 | uint32_t ip_data_lo; |
TASS Belgium NV |
131:4758606c9316 | 53 | } id_ip; |
tass | 152:a3d286bf94e5 | 54 | PEDANTIC_STRUCT_DEF id_ra_s { |
TASS Belgium NV |
131:4758606c9316 | 55 | uint32_t ira_addr; |
TASS Belgium NV |
131:4758606c9316 | 56 | uint32_t ira_pref; |
TASS Belgium NV |
131:4758606c9316 | 57 | } id_ra; |
TASS Belgium NV |
131:4758606c9316 | 58 | uint32_t id_mask; |
TASS Belgium NV |
131:4758606c9316 | 59 | uint8_t id_data[1]; |
TASS Belgium NV |
131:4758606c9316 | 60 | } dun; |
daniele | 3:b4047e8a0123 | 61 | }; |
daniele | 3:b4047e8a0123 | 62 | |
daniele | 3:b4047e8a0123 | 63 | #define PICO_ICMPHDR_DRY_SIZE 4 |
tass | 70:cd218dd180e5 | 64 | #define PICO_ICMPHDR_UN_SIZE 8u |
daniele | 3:b4047e8a0123 | 65 | |
TASS Belgium NV |
131:4758606c9316 | 66 | #define PICO_ICMP_ECHOREPLY 0 |
TASS Belgium NV |
131:4758606c9316 | 67 | #define PICO_ICMP_DEST_UNREACH 3 |
daniele | 3:b4047e8a0123 | 68 | #define PICO_ICMP_SOURCE_QUENCH 4 |
daniele | 3:b4047e8a0123 | 69 | #define PICO_ICMP_REDIRECT 5 |
daniele | 3:b4047e8a0123 | 70 | #define PICO_ICMP_ECHO 8 |
daniele | 3:b4047e8a0123 | 71 | #define PICO_ICMP_TIME_EXCEEDED 11 |
daniele | 3:b4047e8a0123 | 72 | #define PICO_ICMP_PARAMETERPROB 12 |
daniele | 3:b4047e8a0123 | 73 | #define PICO_ICMP_TIMESTAMP 13 |
daniele | 3:b4047e8a0123 | 74 | #define PICO_ICMP_TIMESTAMPREPLY 14 |
daniele | 3:b4047e8a0123 | 75 | #define PICO_ICMP_INFO_REQUEST 15 |
daniele | 3:b4047e8a0123 | 76 | #define PICO_ICMP_INFO_REPLY 16 |
daniele | 3:b4047e8a0123 | 77 | #define PICO_ICMP_ADDRESS 17 |
daniele | 3:b4047e8a0123 | 78 | #define PICO_ICMP_ADDRESSREPLY 18 |
daniele | 3:b4047e8a0123 | 79 | |
daniele | 3:b4047e8a0123 | 80 | |
TASS Belgium NV |
131:4758606c9316 | 81 | #define PICO_ICMP_UNREACH 3 |
TASS Belgium NV |
131:4758606c9316 | 82 | #define PICO_ICMP_SOURCEQUENCH 4 |
TASS Belgium NV |
131:4758606c9316 | 83 | #define PICO_ICMP_ROUTERADVERT 9 |
TASS Belgium NV |
131:4758606c9316 | 84 | #define PICO_ICMP_ROUTERSOLICIT 10 |
TASS Belgium NV |
131:4758606c9316 | 85 | #define PICO_ICMP_TIMXCEED 11 |
TASS Belgium NV |
131:4758606c9316 | 86 | #define PICO_ICMP_PARAMPROB 12 |
TASS Belgium NV |
131:4758606c9316 | 87 | #define PICO_ICMP_TSTAMP 13 |
TASS Belgium NV |
131:4758606c9316 | 88 | #define PICO_ICMP_TSTAMPREPLY 14 |
TASS Belgium NV |
131:4758606c9316 | 89 | #define PICO_ICMP_IREQ 15 |
TASS Belgium NV |
131:4758606c9316 | 90 | #define PICO_ICMP_IREQREPLY 16 |
TASS Belgium NV |
131:4758606c9316 | 91 | #define PICO_ICMP_MASKREQ 17 |
TASS Belgium NV |
131:4758606c9316 | 92 | #define PICO_ICMP_MASKREPLY 18 |
daniele | 3:b4047e8a0123 | 93 | |
daniele | 3:b4047e8a0123 | 94 | #define PICO_ICMP_MAXTYPE 18 |
daniele | 3:b4047e8a0123 | 95 | |
daniele | 3:b4047e8a0123 | 96 | |
TASS Belgium NV |
131:4758606c9316 | 97 | #define PICO_ICMP_UNREACH_NET 0 |
TASS Belgium NV |
131:4758606c9316 | 98 | #define PICO_ICMP_UNREACH_HOST 1 |
TASS Belgium NV |
131:4758606c9316 | 99 | #define PICO_ICMP_UNREACH_PROTOCOL 2 |
TASS Belgium NV |
131:4758606c9316 | 100 | #define PICO_ICMP_UNREACH_PORT 3 |
TASS Belgium NV |
131:4758606c9316 | 101 | #define PICO_ICMP_UNREACH_NEEDFRAG 4 |
TASS Belgium NV |
131:4758606c9316 | 102 | #define PICO_ICMP_UNREACH_SRCFAIL 5 |
TASS Belgium NV |
131:4758606c9316 | 103 | #define PICO_ICMP_UNREACH_NET_UNKNOWN 6 |
TASS Belgium NV |
131:4758606c9316 | 104 | #define PICO_ICMP_UNREACH_HOST_UNKNOWN 7 |
TASS Belgium NV |
131:4758606c9316 | 105 | #define PICO_ICMP_UNREACH_ISOLATED 8 |
TASS Belgium NV |
131:4758606c9316 | 106 | #define PICO_ICMP_UNREACH_NET_PROHIB 9 |
TASS Belgium NV |
131:4758606c9316 | 107 | #define PICO_ICMP_UNREACH_HOST_PROHIB 10 |
TASS Belgium NV |
131:4758606c9316 | 108 | #define PICO_ICMP_UNREACH_TOSNET 11 |
TASS Belgium NV |
131:4758606c9316 | 109 | #define PICO_ICMP_UNREACH_TOSHOST 12 |
TASS Belgium NV |
131:4758606c9316 | 110 | #define PICO_ICMP_UNREACH_FILTER_PROHIB 13 |
TASS Belgium NV |
131:4758606c9316 | 111 | #define PICO_ICMP_UNREACH_HOST_PRECEDENCE 14 |
TASS Belgium NV |
131:4758606c9316 | 112 | #define PICO_ICMP_UNREACH_PRECEDENCE_CUTOFF 15 |
daniele | 3:b4047e8a0123 | 113 | |
daniele | 3:b4047e8a0123 | 114 | |
TASS Belgium NV |
131:4758606c9316 | 115 | #define PICO_ICMP_REDIRECT_NET 0 |
TASS Belgium NV |
131:4758606c9316 | 116 | #define PICO_ICMP_REDIRECT_HOST 1 |
TASS Belgium NV |
131:4758606c9316 | 117 | #define PICO_ICMP_REDIRECT_TOSNET 2 |
TASS Belgium NV |
131:4758606c9316 | 118 | #define PICO_ICMP_REDIRECT_TOSHOST 3 |
daniele | 3:b4047e8a0123 | 119 | |
daniele | 3:b4047e8a0123 | 120 | |
TASS Belgium NV |
131:4758606c9316 | 121 | #define PICO_ICMP_TIMXCEED_INTRANS 0 |
TASS Belgium NV |
131:4758606c9316 | 122 | #define PICO_ICMP_TIMXCEED_REASS 1 |
daniele | 3:b4047e8a0123 | 123 | |
daniele | 3:b4047e8a0123 | 124 | |
TASS Belgium NV |
131:4758606c9316 | 125 | #define PICO_ICMP_PARAMPROB_OPTABSENT 1 |
daniele | 3:b4047e8a0123 | 126 | |
daniele | 3:b4047e8a0123 | 127 | #define PICO_SIZE_ICMP4HDR ((sizeof(struct pico_icmp4_hdr))) |
daniele | 3:b4047e8a0123 | 128 | |
daniele | 3:b4047e8a0123 | 129 | struct pico_icmp4_stats |
daniele | 3:b4047e8a0123 | 130 | { |
TASS Belgium NV |
131:4758606c9316 | 131 | struct pico_ip4 dst; |
TASS Belgium NV |
131:4758606c9316 | 132 | unsigned long size; |
TASS Belgium NV |
131:4758606c9316 | 133 | unsigned long seq; |
TASS Belgium NV |
131:4758606c9316 | 134 | pico_time time; |
TASS Belgium NV |
131:4758606c9316 | 135 | unsigned long ttl; |
TASS Belgium NV |
131:4758606c9316 | 136 | int err; |
daniele | 3:b4047e8a0123 | 137 | }; |
daniele | 3:b4047e8a0123 | 138 | |
daniele | 3:b4047e8a0123 | 139 | int pico_icmp4_port_unreachable(struct pico_frame *f); |
daniele | 3:b4047e8a0123 | 140 | int pico_icmp4_proto_unreachable(struct pico_frame *f); |
daniele | 3:b4047e8a0123 | 141 | int pico_icmp4_dest_unreachable(struct pico_frame *f); |
tass | 152:a3d286bf94e5 | 142 | int pico_icmp4_mtu_exceeded(struct pico_frame *f); |
daniele | 3:b4047e8a0123 | 143 | int pico_icmp4_ttl_expired(struct pico_frame *f); |
tass | 152:a3d286bf94e5 | 144 | int pico_icmp4_frag_expired(struct pico_frame *f); |
tass | 152:a3d286bf94e5 | 145 | int pico_icmp4_ping(char *dst, int count, int interval, int timeout, int size, void (*cb)(struct pico_icmp4_stats *)); |
tass | 152:a3d286bf94e5 | 146 | int pico_icmp4_ping_abort(int id); |
tass | 152:a3d286bf94e5 | 147 | |
tass | 152:a3d286bf94e5 | 148 | #ifdef PICO_SUPPORT_ICMP4 |
daniele | 3:b4047e8a0123 | 149 | int pico_icmp4_packet_filtered(struct pico_frame *f); |
tass | 152:a3d286bf94e5 | 150 | int pico_icmp4_param_problem(struct pico_frame *f, uint8_t code); |
tass | 152:a3d286bf94e5 | 151 | #else |
tass | 152:a3d286bf94e5 | 152 | # define pico_icmp4_packet_filtered(f) (-1) |
tass | 152:a3d286bf94e5 | 153 | # define pico_icmp4_param_problem(f, c) (-1) |
tass | 152:a3d286bf94e5 | 154 | #endif /* PICO_SUPPORT_ICMP4 */ |
daniele | 3:b4047e8a0123 | 155 | |
daniele | 3:b4047e8a0123 | 156 | #define PICO_PING_ERR_REPLIED 0 |
daniele | 3:b4047e8a0123 | 157 | #define PICO_PING_ERR_TIMEOUT 1 |
daniele | 3:b4047e8a0123 | 158 | #define PICO_PING_ERR_UNREACH 2 |
tass | 152:a3d286bf94e5 | 159 | #define PICO_PING_ERR_ABORTED 3 |
daniele | 3:b4047e8a0123 | 160 | #define PICO_PING_ERR_PENDING 0xFFFF |
daniele | 3:b4047e8a0123 | 161 | |
daniele | 3:b4047e8a0123 | 162 | #endif |