Free (GPLv2) TCP/IP stack developed by TASS Belgium
Fork of PicoTCP by
modules/pico_icmp4.h@3:b4047e8a0123, 2013-05-24 (annotated)
- Committer:
- daniele
- Date:
- Fri May 24 15:25:25 2013 +0000
- Revision:
- 3:b4047e8a0123
Updated from main repo + fixed Mutexes;
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 |
daniele | 3:b4047e8a0123 | 62 | #define PICO_ICMPHDR_UN_SIZE 8 |
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; |
daniele | 3:b4047e8a0123 | 132 | unsigned long 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 |