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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers pico_ipv4.h Source File

pico_ipv4.h

00001 /*********************************************************************
00002 PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved.
00003 See LICENSE and COPYING for usage.
00004 
00005 .
00006 
00007 *********************************************************************/
00008 #ifndef _INCLUDE_PICO_IPV4
00009 #define _INCLUDE_PICO_IPV4
00010 #include "pico_addressing.h"
00011 #include "pico_protocol.h"
00012 #include "pico_tree.h"
00013 
00014 #define PICO_IPV4_INADDR_ANY 0x00000000U
00015 
00016 #define PICO_SIZE_IP4HDR ((sizeof(struct pico_ipv4_hdr)))
00017 #define PICO_IPV4_DONTFRAG 0x4000
00018 #define PICO_IPV4_MOREFRAG 0x2000
00019 #define PICO_IPV4_FRAG_MASK 0x1FFF
00020 #define PICO_IPV4_DEFAULT_TTL 64
00021 
00022 extern struct pico_protocol pico_proto_ipv4;
00023 
00024 struct __attribute__((packed)) pico_ipv4_hdr {
00025   uint8_t vhl;
00026   uint8_t tos;
00027   uint16_t len;
00028   uint16_t id;
00029   uint16_t frag;
00030   uint8_t ttl;
00031   uint8_t proto;
00032   uint16_t crc;
00033   struct pico_ip4 src;
00034   struct pico_ip4 dst;
00035   uint8_t options[0];
00036 };
00037 
00038 struct __attribute__((packed)) pico_ipv4_pseudo_hdr
00039 {
00040   struct pico_ip4 src;
00041   struct pico_ip4 dst;
00042   uint8_t zeros;
00043   uint8_t proto;
00044   uint16_t len;
00045 };
00046 
00047 /* Interface: link to device */
00048 struct pico_mcast_list;
00049 
00050 struct pico_ipv4_link
00051 {
00052   struct pico_device *dev;
00053   struct pico_ip4 address;
00054   struct pico_ip4 netmask;
00055 #ifdef PICO_SUPPORT_MCAST
00056   struct pico_tree *MCASTGroups;
00057   uint8_t mcast_compatibility;
00058   uint8_t mcast_last_query_interval;
00059 #endif
00060 };
00061 
00062 #ifdef PICO_SUPPORT_MCAST
00063 struct pico_mcast_group {
00064   uint8_t filter_mode;
00065   uint16_t reference_count;
00066   struct pico_ip4 mcast_addr;
00067   struct pico_tree MCASTSources;
00068 };
00069 #endif
00070 
00071 int pico_ipv4_to_string(char *ipbuf, const uint32_t ip);
00072 int pico_string_to_ipv4(const char *ipstr, uint32_t *ip);
00073 int pico_ipv4_valid_netmask(uint32_t mask);
00074 int pico_ipv4_is_unicast(uint32_t address); 
00075 int pico_ipv4_is_multicast(uint32_t address); 
00076 int pico_ipv4_is_broadcast(uint32_t addr);
00077 
00078 int pico_ipv4_link_add(struct pico_device *dev, struct pico_ip4 address, struct pico_ip4 netmask);
00079 int pico_ipv4_link_del(struct pico_device *dev, struct pico_ip4 address);
00080 int pico_ipv4_rebound(struct pico_frame *f);
00081 
00082 int pico_ipv4_frame_push(struct pico_frame *f, struct pico_ip4 *dst, uint8_t proto);
00083 struct pico_ipv4_link *pico_ipv4_link_get(struct pico_ip4 *address);
00084 struct pico_ipv4_link *pico_ipv4_link_by_dev(struct pico_device *dev);
00085 struct pico_device *pico_ipv4_link_find(struct pico_ip4 *address);
00086 struct pico_ip4 *pico_ipv4_source_find(struct pico_ip4 *dst);
00087 int pico_ipv4_route_add(struct pico_ip4 address, struct pico_ip4 netmask, struct pico_ip4 gateway, int metric, struct pico_ipv4_link *link);
00088 int pico_ipv4_route_del(struct pico_ip4 address, struct pico_ip4 netmask, struct pico_ip4 gateway, int metric, struct pico_ipv4_link *link);
00089 struct pico_ip4 pico_ipv4_route_get_gateway(struct pico_ip4 *addr);
00090 void pico_ipv4_unreachable(struct pico_frame *f, int err);
00091 
00092 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);
00093 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);
00094 struct pico_ipv4_link *pico_ipv4_get_default_mcastlink(void);
00095 
00096 #endif /* _INCLUDE_PICO_IPV4 */