Free (GPLv2) TCP/IP stack developed by TASS Belgium

Fork of PicoTCP by Daniele Lacamera

Committer:
daniele
Date:
Fri May 24 15:25:25 2013 +0000
Revision:
3:b4047e8a0123
Updated from main repo + fixed Mutexes;

Who changed what in which revision?

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