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
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 */
Generated on Wed Jul 13 2022 02:20:45 by 1.7.2