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@101:37763e3777a7, 2013-10-18 (annotated)
- Committer:
- tass
- Date:
- Fri Oct 18 09:41:50 2013 +0000
- Revision:
- 101:37763e3777a7
- Parent:
- 73:dfb737147f6e
- Child:
- 128:ae39e6e81531
merge with mainline Issue #39
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
daniele | 3:b4047e8a0123 | 1 | /********************************************************************* |
daniele | 3:b4047e8a0123 | 2 | PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved. |
daniele | 3:b4047e8a0123 | 3 | See LICENSE and COPYING for usage. |
daniele | 3:b4047e8a0123 | 4 | |
daniele | 3:b4047e8a0123 | 5 | . |
daniele | 3:b4047e8a0123 | 6 | |
daniele | 3:b4047e8a0123 | 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 { |
daniele | 3:b4047e8a0123 | 16 | uint8_t type; |
daniele | 3:b4047e8a0123 | 17 | uint8_t code; |
daniele | 3:b4047e8a0123 | 18 | uint16_t crc; |
daniele | 3:b4047e8a0123 | 19 | |
daniele | 3:b4047e8a0123 | 20 | /* hun */ |
daniele | 3:b4047e8a0123 | 21 | union { |
daniele | 3:b4047e8a0123 | 22 | uint8_t ih_pptr; |
daniele | 3:b4047e8a0123 | 23 | struct pico_ip4 ih_gwaddr; |
daniele | 3:b4047e8a0123 | 24 | struct { |
daniele | 3:b4047e8a0123 | 25 | uint16_t idseq_id; |
daniele | 3:b4047e8a0123 | 26 | uint16_t idseq_seq; |
daniele | 3:b4047e8a0123 | 27 | } ih_idseq; |
daniele | 3:b4047e8a0123 | 28 | uint32_t ih_void; |
daniele | 3:b4047e8a0123 | 29 | struct { |
daniele | 3:b4047e8a0123 | 30 | uint16_t ipm_void; |
daniele | 3:b4047e8a0123 | 31 | uint16_t ipm_nmtu; |
daniele | 3:b4047e8a0123 | 32 | } ih_pmtu; |
daniele | 3:b4047e8a0123 | 33 | struct { |
daniele | 3:b4047e8a0123 | 34 | uint8_t rta_numgw; |
daniele | 3:b4047e8a0123 | 35 | uint8_t rta_wpa; |
daniele | 3:b4047e8a0123 | 36 | uint16_t rta_lifetime; |
daniele | 3:b4047e8a0123 | 37 | } ih_rta; |
daniele | 3:b4047e8a0123 | 38 | } hun; |
daniele | 3:b4047e8a0123 | 39 | |
daniele | 3:b4047e8a0123 | 40 | /* dun */ |
daniele | 3:b4047e8a0123 | 41 | union { |
daniele | 3:b4047e8a0123 | 42 | struct { |
daniele | 3:b4047e8a0123 | 43 | uint32_t ts_otime; |
daniele | 3:b4047e8a0123 | 44 | uint32_t ts_rtime; |
daniele | 3:b4047e8a0123 | 45 | uint32_t ts_ttime; |
daniele | 3:b4047e8a0123 | 46 | } id_ts; |
daniele | 3:b4047e8a0123 | 47 | struct { |
daniele | 3:b4047e8a0123 | 48 | uint32_t ip_options; |
daniele | 3:b4047e8a0123 | 49 | uint32_t ip_data_hi; |
daniele | 3:b4047e8a0123 | 50 | uint32_t ip_data_lo; |
daniele | 3:b4047e8a0123 | 51 | } id_ip; |
daniele | 3:b4047e8a0123 | 52 | struct { |
daniele | 3:b4047e8a0123 | 53 | uint32_t ira_addr; |
daniele | 3:b4047e8a0123 | 54 | uint32_t ira_pref; |
daniele | 3:b4047e8a0123 | 55 | } id_ra; |
daniele | 3:b4047e8a0123 | 56 | uint32_t id_mask; |
daniele | 3:b4047e8a0123 | 57 | uint8_t id_data[1]; |
daniele | 3:b4047e8a0123 | 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 | |
daniele | 3:b4047e8a0123 | 64 | #define PICO_ICMP_ECHOREPLY 0 |
daniele | 3:b4047e8a0123 | 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 | |
daniele | 3:b4047e8a0123 | 79 | #define PICO_ICMP_UNREACH 3 |
daniele | 3:b4047e8a0123 | 80 | #define PICO_ICMP_SOURCEQUENCH 4 |
daniele | 3:b4047e8a0123 | 81 | #define PICO_ICMP_ROUTERADVERT 9 |
daniele | 3:b4047e8a0123 | 82 | #define PICO_ICMP_ROUTERSOLICIT 10 |
daniele | 3:b4047e8a0123 | 83 | #define PICO_ICMP_TIMXCEED 11 |
daniele | 3:b4047e8a0123 | 84 | #define PICO_ICMP_PARAMPROB 12 |
daniele | 3:b4047e8a0123 | 85 | #define PICO_ICMP_TSTAMP 13 |
daniele | 3:b4047e8a0123 | 86 | #define PICO_ICMP_TSTAMPREPLY 14 |
daniele | 3:b4047e8a0123 | 87 | #define PICO_ICMP_IREQ 15 |
daniele | 3:b4047e8a0123 | 88 | #define PICO_ICMP_IREQREPLY 16 |
daniele | 3:b4047e8a0123 | 89 | #define PICO_ICMP_MASKREQ 17 |
daniele | 3:b4047e8a0123 | 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 | |
daniele | 3:b4047e8a0123 | 95 | #define PICO_ICMP_UNREACH_NET 0 |
daniele | 3:b4047e8a0123 | 96 | #define PICO_ICMP_UNREACH_HOST 1 |
daniele | 3:b4047e8a0123 | 97 | #define PICO_ICMP_UNREACH_PROTOCOL 2 |
daniele | 3:b4047e8a0123 | 98 | #define PICO_ICMP_UNREACH_PORT 3 |
daniele | 3:b4047e8a0123 | 99 | #define PICO_ICMP_UNREACH_NEEDFRAG 4 |
daniele | 3:b4047e8a0123 | 100 | #define PICO_ICMP_UNREACH_SRCFAIL 5 |
daniele | 3:b4047e8a0123 | 101 | #define PICO_ICMP_UNREACH_NET_UNKNOWN 6 |
daniele | 3:b4047e8a0123 | 102 | #define PICO_ICMP_UNREACH_HOST_UNKNOWN 7 |
daniele | 3:b4047e8a0123 | 103 | #define PICO_ICMP_UNREACH_ISOLATED 8 |
daniele | 3:b4047e8a0123 | 104 | #define PICO_ICMP_UNREACH_NET_PROHIB 9 |
daniele | 3:b4047e8a0123 | 105 | #define PICO_ICMP_UNREACH_HOST_PROHIB 10 |
daniele | 3:b4047e8a0123 | 106 | #define PICO_ICMP_UNREACH_TOSNET 11 |
daniele | 3:b4047e8a0123 | 107 | #define PICO_ICMP_UNREACH_TOSHOST 12 |
daniele | 3:b4047e8a0123 | 108 | #define PICO_ICMP_UNREACH_FILTER_PROHIB 13 |
daniele | 3:b4047e8a0123 | 109 | #define PICO_ICMP_UNREACH_HOST_PRECEDENCE 14 |
daniele | 3:b4047e8a0123 | 110 | #define PICO_ICMP_UNREACH_PRECEDENCE_CUTOFF 15 |
daniele | 3:b4047e8a0123 | 111 | |
daniele | 3:b4047e8a0123 | 112 | |
daniele | 3:b4047e8a0123 | 113 | #define PICO_ICMP_REDIRECT_NET 0 |
daniele | 3:b4047e8a0123 | 114 | #define PICO_ICMP_REDIRECT_HOST 1 |
daniele | 3:b4047e8a0123 | 115 | #define PICO_ICMP_REDIRECT_TOSNET 2 |
daniele | 3:b4047e8a0123 | 116 | #define PICO_ICMP_REDIRECT_TOSHOST 3 |
daniele | 3:b4047e8a0123 | 117 | |
daniele | 3:b4047e8a0123 | 118 | |
daniele | 3:b4047e8a0123 | 119 | #define PICO_ICMP_TIMXCEED_INTRANS 0 |
daniele | 3:b4047e8a0123 | 120 | #define PICO_ICMP_TIMXCEED_REASS 1 |
daniele | 3:b4047e8a0123 | 121 | |
daniele | 3:b4047e8a0123 | 122 | |
daniele | 3:b4047e8a0123 | 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 | { |
daniele | 3:b4047e8a0123 | 129 | struct pico_ip4 dst; |
daniele | 3:b4047e8a0123 | 130 | unsigned long size; |
daniele | 3:b4047e8a0123 | 131 | unsigned long seq; |
tass | 73:dfb737147f6e | 132 | uint32_t time; |
daniele | 3:b4047e8a0123 | 133 | unsigned long ttl; |
daniele | 3:b4047e8a0123 | 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 |