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

Fork of PicoTCP by Daniele Lacamera

Committer:
tass
Date:
Fri May 17 12:09:59 2013 +0000
Revision:
1:cfe8984a32b4
Parent:
libraries/picotcp/modules/pico_ipv4.h@0:d7f2341ab245
Update for smaller SOCKETQ

Who changed what in which revision?

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