CDC/ECM driver for mbed, based on USBDevice by mbed-official. Uses PicoTCP to access Ethernet USB device. License: GPLv2

Dependents:   USBEthernet_TEST

Fork of USB_Ethernet by Daniele Lacamera

Committer:
daniele
Date:
Sat Aug 03 13:16:14 2013 +0000
Revision:
2:540f6e142d59
Moved to single package

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniele 2:540f6e142d59 1 /*********************************************************************
daniele 2:540f6e142d59 2 PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved.
daniele 2:540f6e142d59 3 See LICENSE and COPYING for usage.
daniele 2:540f6e142d59 4
daniele 2:540f6e142d59 5 .
daniele 2:540f6e142d59 6
daniele 2:540f6e142d59 7 *********************************************************************/
daniele 2:540f6e142d59 8 #ifndef _INCLUDE_PICO_ICMP4
daniele 2:540f6e142d59 9 #define _INCLUDE_PICO_ICMP4
daniele 2:540f6e142d59 10 #include "pico_addressing.h"
daniele 2:540f6e142d59 11 #include "pico_protocol.h"
daniele 2:540f6e142d59 12
daniele 2:540f6e142d59 13 extern struct pico_protocol pico_proto_icmp4;
daniele 2:540f6e142d59 14
daniele 2:540f6e142d59 15 struct __attribute__((packed)) pico_icmp4_hdr {
daniele 2:540f6e142d59 16 uint8_t type;
daniele 2:540f6e142d59 17 uint8_t code;
daniele 2:540f6e142d59 18 uint16_t crc;
daniele 2:540f6e142d59 19
daniele 2:540f6e142d59 20 /* hun */
daniele 2:540f6e142d59 21 union {
daniele 2:540f6e142d59 22 uint8_t ih_pptr;
daniele 2:540f6e142d59 23 struct pico_ip4 ih_gwaddr;
daniele 2:540f6e142d59 24 struct {
daniele 2:540f6e142d59 25 uint16_t idseq_id;
daniele 2:540f6e142d59 26 uint16_t idseq_seq;
daniele 2:540f6e142d59 27 } ih_idseq;
daniele 2:540f6e142d59 28 uint32_t ih_void;
daniele 2:540f6e142d59 29 struct {
daniele 2:540f6e142d59 30 uint16_t ipm_void;
daniele 2:540f6e142d59 31 uint16_t ipm_nmtu;
daniele 2:540f6e142d59 32 } ih_pmtu;
daniele 2:540f6e142d59 33 struct {
daniele 2:540f6e142d59 34 uint8_t rta_numgw;
daniele 2:540f6e142d59 35 uint8_t rta_wpa;
daniele 2:540f6e142d59 36 uint16_t rta_lifetime;
daniele 2:540f6e142d59 37 } ih_rta;
daniele 2:540f6e142d59 38 } hun;
daniele 2:540f6e142d59 39
daniele 2:540f6e142d59 40 /* dun */
daniele 2:540f6e142d59 41 union {
daniele 2:540f6e142d59 42 struct {
daniele 2:540f6e142d59 43 uint32_t ts_otime;
daniele 2:540f6e142d59 44 uint32_t ts_rtime;
daniele 2:540f6e142d59 45 uint32_t ts_ttime;
daniele 2:540f6e142d59 46 } id_ts;
daniele 2:540f6e142d59 47 struct {
daniele 2:540f6e142d59 48 uint32_t ip_options;
daniele 2:540f6e142d59 49 uint32_t ip_data_hi;
daniele 2:540f6e142d59 50 uint32_t ip_data_lo;
daniele 2:540f6e142d59 51 } id_ip;
daniele 2:540f6e142d59 52 struct {
daniele 2:540f6e142d59 53 uint32_t ira_addr;
daniele 2:540f6e142d59 54 uint32_t ira_pref;
daniele 2:540f6e142d59 55 } id_ra;
daniele 2:540f6e142d59 56 uint32_t id_mask;
daniele 2:540f6e142d59 57 uint8_t id_data[1];
daniele 2:540f6e142d59 58 } dun;
daniele 2:540f6e142d59 59 };
daniele 2:540f6e142d59 60
daniele 2:540f6e142d59 61 #define PICO_ICMPHDR_DRY_SIZE 4
daniele 2:540f6e142d59 62 #define PICO_ICMPHDR_UN_SIZE 8
daniele 2:540f6e142d59 63
daniele 2:540f6e142d59 64 #define PICO_ICMP_ECHOREPLY 0
daniele 2:540f6e142d59 65 #define PICO_ICMP_DEST_UNREACH 3
daniele 2:540f6e142d59 66 #define PICO_ICMP_SOURCE_QUENCH 4
daniele 2:540f6e142d59 67 #define PICO_ICMP_REDIRECT 5
daniele 2:540f6e142d59 68 #define PICO_ICMP_ECHO 8
daniele 2:540f6e142d59 69 #define PICO_ICMP_TIME_EXCEEDED 11
daniele 2:540f6e142d59 70 #define PICO_ICMP_PARAMETERPROB 12
daniele 2:540f6e142d59 71 #define PICO_ICMP_TIMESTAMP 13
daniele 2:540f6e142d59 72 #define PICO_ICMP_TIMESTAMPREPLY 14
daniele 2:540f6e142d59 73 #define PICO_ICMP_INFO_REQUEST 15
daniele 2:540f6e142d59 74 #define PICO_ICMP_INFO_REPLY 16
daniele 2:540f6e142d59 75 #define PICO_ICMP_ADDRESS 17
daniele 2:540f6e142d59 76 #define PICO_ICMP_ADDRESSREPLY 18
daniele 2:540f6e142d59 77
daniele 2:540f6e142d59 78
daniele 2:540f6e142d59 79 #define PICO_ICMP_UNREACH 3
daniele 2:540f6e142d59 80 #define PICO_ICMP_SOURCEQUENCH 4
daniele 2:540f6e142d59 81 #define PICO_ICMP_ROUTERADVERT 9
daniele 2:540f6e142d59 82 #define PICO_ICMP_ROUTERSOLICIT 10
daniele 2:540f6e142d59 83 #define PICO_ICMP_TIMXCEED 11
daniele 2:540f6e142d59 84 #define PICO_ICMP_PARAMPROB 12
daniele 2:540f6e142d59 85 #define PICO_ICMP_TSTAMP 13
daniele 2:540f6e142d59 86 #define PICO_ICMP_TSTAMPREPLY 14
daniele 2:540f6e142d59 87 #define PICO_ICMP_IREQ 15
daniele 2:540f6e142d59 88 #define PICO_ICMP_IREQREPLY 16
daniele 2:540f6e142d59 89 #define PICO_ICMP_MASKREQ 17
daniele 2:540f6e142d59 90 #define PICO_ICMP_MASKREPLY 18
daniele 2:540f6e142d59 91
daniele 2:540f6e142d59 92 #define PICO_ICMP_MAXTYPE 18
daniele 2:540f6e142d59 93
daniele 2:540f6e142d59 94
daniele 2:540f6e142d59 95 #define PICO_ICMP_UNREACH_NET 0
daniele 2:540f6e142d59 96 #define PICO_ICMP_UNREACH_HOST 1
daniele 2:540f6e142d59 97 #define PICO_ICMP_UNREACH_PROTOCOL 2
daniele 2:540f6e142d59 98 #define PICO_ICMP_UNREACH_PORT 3
daniele 2:540f6e142d59 99 #define PICO_ICMP_UNREACH_NEEDFRAG 4
daniele 2:540f6e142d59 100 #define PICO_ICMP_UNREACH_SRCFAIL 5
daniele 2:540f6e142d59 101 #define PICO_ICMP_UNREACH_NET_UNKNOWN 6
daniele 2:540f6e142d59 102 #define PICO_ICMP_UNREACH_HOST_UNKNOWN 7
daniele 2:540f6e142d59 103 #define PICO_ICMP_UNREACH_ISOLATED 8
daniele 2:540f6e142d59 104 #define PICO_ICMP_UNREACH_NET_PROHIB 9
daniele 2:540f6e142d59 105 #define PICO_ICMP_UNREACH_HOST_PROHIB 10
daniele 2:540f6e142d59 106 #define PICO_ICMP_UNREACH_TOSNET 11
daniele 2:540f6e142d59 107 #define PICO_ICMP_UNREACH_TOSHOST 12
daniele 2:540f6e142d59 108 #define PICO_ICMP_UNREACH_FILTER_PROHIB 13
daniele 2:540f6e142d59 109 #define PICO_ICMP_UNREACH_HOST_PRECEDENCE 14
daniele 2:540f6e142d59 110 #define PICO_ICMP_UNREACH_PRECEDENCE_CUTOFF 15
daniele 2:540f6e142d59 111
daniele 2:540f6e142d59 112
daniele 2:540f6e142d59 113 #define PICO_ICMP_REDIRECT_NET 0
daniele 2:540f6e142d59 114 #define PICO_ICMP_REDIRECT_HOST 1
daniele 2:540f6e142d59 115 #define PICO_ICMP_REDIRECT_TOSNET 2
daniele 2:540f6e142d59 116 #define PICO_ICMP_REDIRECT_TOSHOST 3
daniele 2:540f6e142d59 117
daniele 2:540f6e142d59 118
daniele 2:540f6e142d59 119 #define PICO_ICMP_TIMXCEED_INTRANS 0
daniele 2:540f6e142d59 120 #define PICO_ICMP_TIMXCEED_REASS 1
daniele 2:540f6e142d59 121
daniele 2:540f6e142d59 122
daniele 2:540f6e142d59 123 #define PICO_ICMP_PARAMPROB_OPTABSENT 1
daniele 2:540f6e142d59 124
daniele 2:540f6e142d59 125 #define PICO_SIZE_ICMP4HDR ((sizeof(struct pico_icmp4_hdr)))
daniele 2:540f6e142d59 126
daniele 2:540f6e142d59 127 struct pico_icmp4_stats
daniele 2:540f6e142d59 128 {
daniele 2:540f6e142d59 129 struct pico_ip4 dst;
daniele 2:540f6e142d59 130 unsigned long size;
daniele 2:540f6e142d59 131 unsigned long seq;
daniele 2:540f6e142d59 132 unsigned long time;
daniele 2:540f6e142d59 133 unsigned long ttl;
daniele 2:540f6e142d59 134 int err;
daniele 2:540f6e142d59 135 };
daniele 2:540f6e142d59 136
daniele 2:540f6e142d59 137 int pico_icmp4_port_unreachable(struct pico_frame *f);
daniele 2:540f6e142d59 138 int pico_icmp4_proto_unreachable(struct pico_frame *f);
daniele 2:540f6e142d59 139 int pico_icmp4_dest_unreachable(struct pico_frame *f);
daniele 2:540f6e142d59 140 int pico_icmp4_ttl_expired(struct pico_frame *f);
daniele 2:540f6e142d59 141 int pico_icmp4_packet_filtered(struct pico_frame *f);
daniele 2:540f6e142d59 142
daniele 2:540f6e142d59 143 int pico_icmp4_ping(char *dst, int count, int interval, int timeout, int size, void (*cb)(struct pico_icmp4_stats *));
daniele 2:540f6e142d59 144 #define PICO_PING_ERR_REPLIED 0
daniele 2:540f6e142d59 145 #define PICO_PING_ERR_TIMEOUT 1
daniele 2:540f6e142d59 146 #define PICO_PING_ERR_UNREACH 2
daniele 2:540f6e142d59 147 #define PICO_PING_ERR_PENDING 0xFFFF
daniele 2:540f6e142d59 148
daniele 2:540f6e142d59 149 #endif