CDC/ECM driver for mbed, based on USBDevice by mbed-official. Uses PicoTCP to access Ethernet USB device. License: GPLv2
Fork of USB_Ethernet by
modules/pico_ipv4.h@2:540f6e142d59, 2013-08-03 (annotated)
- Committer:
- daniele
- Date:
- Sat Aug 03 13:16:14 2013 +0000
- Revision:
- 2:540f6e142d59
Moved to single package
Who changed what in which revision?
User | Revision | Line number | New 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 */ |