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_IPV4
daniele 2:540f6e142d59 9 #define _INCLUDE_PICO_IPV4
daniele 2:540f6e142d59 10 #include "pico_addressing.h"
daniele 2:540f6e142d59 11 #include "pico_protocol.h"
daniele 2:540f6e142d59 12 #include "pico_tree.h"
daniele 2:540f6e142d59 13
daniele 2:540f6e142d59 14 #define PICO_IPV4_INADDR_ANY 0x00000000U
daniele 2:540f6e142d59 15
daniele 2:540f6e142d59 16 #define PICO_SIZE_IP4HDR ((sizeof(struct pico_ipv4_hdr)))
daniele 2:540f6e142d59 17 #define PICO_IPV4_DONTFRAG 0x4000
daniele 2:540f6e142d59 18 #define PICO_IPV4_MOREFRAG 0x2000
daniele 2:540f6e142d59 19 #define PICO_IPV4_FRAG_MASK 0x1FFF
daniele 2:540f6e142d59 20 #define PICO_IPV4_DEFAULT_TTL 64
daniele 2:540f6e142d59 21
daniele 2:540f6e142d59 22 extern struct pico_protocol pico_proto_ipv4;
daniele 2:540f6e142d59 23
daniele 2:540f6e142d59 24 struct __attribute__((packed)) pico_ipv4_hdr {
daniele 2:540f6e142d59 25 uint8_t vhl;
daniele 2:540f6e142d59 26 uint8_t tos;
daniele 2:540f6e142d59 27 uint16_t len;
daniele 2:540f6e142d59 28 uint16_t id;
daniele 2:540f6e142d59 29 uint16_t frag;
daniele 2:540f6e142d59 30 uint8_t ttl;
daniele 2:540f6e142d59 31 uint8_t proto;
daniele 2:540f6e142d59 32 uint16_t crc;
daniele 2:540f6e142d59 33 struct pico_ip4 src;
daniele 2:540f6e142d59 34 struct pico_ip4 dst;
daniele 2:540f6e142d59 35 uint8_t options[0];
daniele 2:540f6e142d59 36 };
daniele 2:540f6e142d59 37
daniele 2:540f6e142d59 38 struct __attribute__((packed)) pico_ipv4_pseudo_hdr
daniele 2:540f6e142d59 39 {
daniele 2:540f6e142d59 40 struct pico_ip4 src;
daniele 2:540f6e142d59 41 struct pico_ip4 dst;
daniele 2:540f6e142d59 42 uint8_t zeros;
daniele 2:540f6e142d59 43 uint8_t proto;
daniele 2:540f6e142d59 44 uint16_t len;
daniele 2:540f6e142d59 45 };
daniele 2:540f6e142d59 46
daniele 2:540f6e142d59 47 /* Interface: link to device */
daniele 2:540f6e142d59 48 struct pico_mcast_list;
daniele 2:540f6e142d59 49
daniele 2:540f6e142d59 50 struct pico_ipv4_link
daniele 2:540f6e142d59 51 {
daniele 2:540f6e142d59 52 struct pico_device *dev;
daniele 2:540f6e142d59 53 struct pico_ip4 address;
daniele 2:540f6e142d59 54 struct pico_ip4 netmask;
daniele 2:540f6e142d59 55 #ifdef PICO_SUPPORT_MCAST
daniele 2:540f6e142d59 56 struct pico_tree *MCASTGroups;
daniele 2:540f6e142d59 57 uint8_t mcast_compatibility;
daniele 2:540f6e142d59 58 uint8_t mcast_last_query_interval;
daniele 2:540f6e142d59 59 #endif
daniele 2:540f6e142d59 60 };
daniele 2:540f6e142d59 61
daniele 2:540f6e142d59 62 #ifdef PICO_SUPPORT_MCAST
daniele 2:540f6e142d59 63 struct pico_mcast_group {
daniele 2:540f6e142d59 64 uint8_t filter_mode;
daniele 2:540f6e142d59 65 uint16_t reference_count;
daniele 2:540f6e142d59 66 struct pico_ip4 mcast_addr;
daniele 2:540f6e142d59 67 struct pico_tree MCASTSources;
daniele 2:540f6e142d59 68 };
daniele 2:540f6e142d59 69 #endif
daniele 2:540f6e142d59 70
daniele 2:540f6e142d59 71 int pico_ipv4_to_string(char *ipbuf, const uint32_t ip);
daniele 2:540f6e142d59 72 int pico_string_to_ipv4(const char *ipstr, uint32_t *ip);
daniele 2:540f6e142d59 73 int pico_ipv4_valid_netmask(uint32_t mask);
daniele 2:540f6e142d59 74 int pico_ipv4_is_unicast(uint32_t address);
daniele 2:540f6e142d59 75 int pico_ipv4_is_multicast(uint32_t address);
daniele 2:540f6e142d59 76 int pico_ipv4_is_broadcast(uint32_t addr);
daniele 2:540f6e142d59 77
daniele 2:540f6e142d59 78 int pico_ipv4_link_add(struct pico_device *dev, struct pico_ip4 address, struct pico_ip4 netmask);
daniele 2:540f6e142d59 79 int pico_ipv4_link_del(struct pico_device *dev, struct pico_ip4 address);
daniele 2:540f6e142d59 80 int pico_ipv4_rebound(struct pico_frame *f);
daniele 2:540f6e142d59 81
daniele 2:540f6e142d59 82 int pico_ipv4_frame_push(struct pico_frame *f, struct pico_ip4 *dst, uint8_t proto);
daniele 2:540f6e142d59 83 struct pico_ipv4_link *pico_ipv4_link_get(struct pico_ip4 *address);
daniele 2:540f6e142d59 84 struct pico_ipv4_link *pico_ipv4_link_by_dev(struct pico_device *dev);
daniele 2:540f6e142d59 85 struct pico_device *pico_ipv4_link_find(struct pico_ip4 *address);
daniele 2:540f6e142d59 86 struct pico_ip4 *pico_ipv4_source_find(struct pico_ip4 *dst);
daniele 2:540f6e142d59 87 int pico_ipv4_route_add(struct pico_ip4 address, struct pico_ip4 netmask, struct pico_ip4 gateway, int metric, struct pico_ipv4_link *link);
daniele 2:540f6e142d59 88 int pico_ipv4_route_del(struct pico_ip4 address, struct pico_ip4 netmask, struct pico_ip4 gateway, int metric, struct pico_ipv4_link *link);
daniele 2:540f6e142d59 89 struct pico_ip4 pico_ipv4_route_get_gateway(struct pico_ip4 *addr);
daniele 2:540f6e142d59 90 void pico_ipv4_unreachable(struct pico_frame *f, int err);
daniele 2:540f6e142d59 91
daniele 2:540f6e142d59 92 int pico_ipv4_mcast_join(struct pico_ip4 *mcast_link, struct pico_ip4 *mcast_group, uint8_t reference_count, uint8_t filter_mode, struct pico_tree *MCASTFilter);
daniele 2:540f6e142d59 93 int pico_ipv4_mcast_leave(struct pico_ip4 *mcast_link, struct pico_ip4 *mcast_group, uint8_t reference_count, uint8_t filter_mode, struct pico_tree *MCASTFilter);
daniele 2:540f6e142d59 94 struct pico_ipv4_link *pico_ipv4_get_default_mcastlink(void);
daniele 2:540f6e142d59 95
daniele 2:540f6e142d59 96 #endif /* _INCLUDE_PICO_IPV4 */