Free (GPLv2) TCP/IP stack developed by TASS Belgium
Fork of PicoTCP by
include/pico_constants.h@51:18637a3d071f, 2013-08-03 (annotated)
- Committer:
- daniele
- Date:
- Sat Aug 03 08:50:27 2013 +0000
- Revision:
- 51:18637a3d071f
- Parent:
- 10:dd7111d4279f
Branch for CDC-ECM: Work in progress
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
daniele | 10:dd7111d4279f | 1 | /********************************************************************* |
daniele | 10:dd7111d4279f | 2 | PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved. |
daniele | 10:dd7111d4279f | 3 | See LICENSE and COPYING for usage. |
daniele | 10:dd7111d4279f | 4 | |
daniele | 10:dd7111d4279f | 5 | *********************************************************************/ |
daniele | 10:dd7111d4279f | 6 | #ifndef _INCLUDE_PICO_CONST |
daniele | 10:dd7111d4279f | 7 | #define _INCLUDE_PICO_CONST |
daniele | 10:dd7111d4279f | 8 | /* Included from pico_config.h */ |
daniele | 10:dd7111d4279f | 9 | /** Endian-dependant constants **/ |
daniele | 10:dd7111d4279f | 10 | |
daniele | 10:dd7111d4279f | 11 | extern volatile unsigned long pico_tick; |
daniele | 10:dd7111d4279f | 12 | |
daniele | 10:dd7111d4279f | 13 | #ifdef PICO_BIGENDIAN |
daniele | 10:dd7111d4279f | 14 | |
daniele | 10:dd7111d4279f | 15 | # define PICO_IDETH_IPV4 0x0800 |
daniele | 10:dd7111d4279f | 16 | # define PICO_IDETH_ARP 0x0806 |
daniele | 10:dd7111d4279f | 17 | # define PICO_IDETH_IPV6 0x86DD |
daniele | 10:dd7111d4279f | 18 | |
daniele | 10:dd7111d4279f | 19 | # define PICO_ARP_REQUEST 0x0001 |
daniele | 10:dd7111d4279f | 20 | # define PICO_ARP_REPLY 0x0002 |
daniele | 10:dd7111d4279f | 21 | # define PICO_ARP_HTYPE_ETH 0x0001 |
daniele | 10:dd7111d4279f | 22 | |
daniele | 10:dd7111d4279f | 23 | #define short_be(x) (x) |
daniele | 10:dd7111d4279f | 24 | #define long_be(x) (x) |
daniele | 10:dd7111d4279f | 25 | |
daniele | 10:dd7111d4279f | 26 | static inline uint16_t short_from(void *_p) |
daniele | 10:dd7111d4279f | 27 | { |
daniele | 10:dd7111d4279f | 28 | unsigned char *p = (unsigned char *)_p; |
daniele | 10:dd7111d4279f | 29 | uint16_t r, p0, p1; |
daniele | 10:dd7111d4279f | 30 | p0 = p[0]; |
daniele | 10:dd7111d4279f | 31 | p1 = p[1]; |
daniele | 10:dd7111d4279f | 32 | r = (p0 << 8) + p1; |
daniele | 10:dd7111d4279f | 33 | return r; |
daniele | 10:dd7111d4279f | 34 | } |
daniele | 10:dd7111d4279f | 35 | |
daniele | 10:dd7111d4279f | 36 | static inline uint32_t long_from(void *_p) |
daniele | 10:dd7111d4279f | 37 | { |
daniele | 10:dd7111d4279f | 38 | unsigned char *p = (unsigned char *)_p; |
daniele | 10:dd7111d4279f | 39 | uint32_t r, p0, p1, p2, p3; |
daniele | 10:dd7111d4279f | 40 | p0 = p[0]; |
daniele | 10:dd7111d4279f | 41 | p1 = p[1]; |
daniele | 10:dd7111d4279f | 42 | p2 = p[2]; |
daniele | 10:dd7111d4279f | 43 | p3 = p[3]; |
daniele | 10:dd7111d4279f | 44 | r = (p0 << 24) + (p1 << 16) + (p2 << 8) + p3; |
daniele | 10:dd7111d4279f | 45 | return r; |
daniele | 10:dd7111d4279f | 46 | } |
daniele | 10:dd7111d4279f | 47 | |
daniele | 10:dd7111d4279f | 48 | #else |
daniele | 10:dd7111d4279f | 49 | |
daniele | 10:dd7111d4279f | 50 | static inline uint16_t short_from(void *_p) |
daniele | 10:dd7111d4279f | 51 | { |
daniele | 10:dd7111d4279f | 52 | unsigned char *p = (unsigned char *)_p; |
daniele | 10:dd7111d4279f | 53 | uint16_t r, p0, p1; |
daniele | 10:dd7111d4279f | 54 | p0 = p[0]; |
daniele | 10:dd7111d4279f | 55 | p1 = p[1]; |
daniele | 10:dd7111d4279f | 56 | r = (p1 << 8) + p0; |
daniele | 10:dd7111d4279f | 57 | return r; |
daniele | 10:dd7111d4279f | 58 | } |
daniele | 10:dd7111d4279f | 59 | |
daniele | 10:dd7111d4279f | 60 | static inline uint32_t long_from(void *_p) |
daniele | 10:dd7111d4279f | 61 | { |
daniele | 10:dd7111d4279f | 62 | unsigned char *p = (unsigned char *)_p; |
daniele | 10:dd7111d4279f | 63 | uint32_t r, p0, p1, p2, p3; |
daniele | 10:dd7111d4279f | 64 | p0 = p[0]; |
daniele | 10:dd7111d4279f | 65 | p1 = p[1]; |
daniele | 10:dd7111d4279f | 66 | p2 = p[2]; |
daniele | 10:dd7111d4279f | 67 | p3 = p[3]; |
daniele | 10:dd7111d4279f | 68 | r = (p3 << 24) + (p2 << 16) + (p1 << 8) + p0; |
daniele | 10:dd7111d4279f | 69 | return r; |
daniele | 10:dd7111d4279f | 70 | } |
daniele | 10:dd7111d4279f | 71 | |
daniele | 10:dd7111d4279f | 72 | |
daniele | 10:dd7111d4279f | 73 | # define PICO_IDETH_IPV4 0x0008 |
daniele | 10:dd7111d4279f | 74 | # define PICO_IDETH_ARP 0x0608 |
daniele | 10:dd7111d4279f | 75 | # define PICO_IDETH_IPV6 0xDD86 |
daniele | 10:dd7111d4279f | 76 | |
daniele | 10:dd7111d4279f | 77 | # define PICO_ARP_REQUEST 0x0100 |
daniele | 10:dd7111d4279f | 78 | # define PICO_ARP_REPLY 0x0200 |
daniele | 10:dd7111d4279f | 79 | # define PICO_ARP_HTYPE_ETH 0x0100 |
daniele | 10:dd7111d4279f | 80 | |
daniele | 10:dd7111d4279f | 81 | static inline uint16_t short_be(uint16_t le) |
daniele | 10:dd7111d4279f | 82 | { |
daniele | 10:dd7111d4279f | 83 | return ((le & 0xFF) << 8) | ((le >> 8) & 0xFF); |
daniele | 10:dd7111d4279f | 84 | } |
daniele | 10:dd7111d4279f | 85 | |
daniele | 10:dd7111d4279f | 86 | static inline uint32_t long_be(uint32_t le) |
daniele | 10:dd7111d4279f | 87 | { |
daniele | 10:dd7111d4279f | 88 | uint8_t *b = (uint8_t *)≤ |
daniele | 10:dd7111d4279f | 89 | uint32_t be = 0; |
daniele | 10:dd7111d4279f | 90 | uint32_t b0, b1, b2; |
daniele | 10:dd7111d4279f | 91 | b0 = b[0]; |
daniele | 10:dd7111d4279f | 92 | b1 = b[1]; |
daniele | 10:dd7111d4279f | 93 | b2 = b[2]; |
daniele | 10:dd7111d4279f | 94 | be = b[3] + (b2 << 8) + (b1 << 16) + (b0 << 24); |
daniele | 10:dd7111d4279f | 95 | return be; |
daniele | 10:dd7111d4279f | 96 | } |
daniele | 10:dd7111d4279f | 97 | #endif |
daniele | 10:dd7111d4279f | 98 | |
daniele | 10:dd7111d4279f | 99 | |
daniele | 10:dd7111d4279f | 100 | /* Add well-known host numbers here. (bigendian constants only beyond this point) */ |
daniele | 10:dd7111d4279f | 101 | #define PICO_IP4_ANY (0x00000000U) |
daniele | 10:dd7111d4279f | 102 | #define PICO_IP4_BCAST (0xffffffffU) |
daniele | 10:dd7111d4279f | 103 | |
daniele | 10:dd7111d4279f | 104 | /* defined in modules/pico_ipv6.c */ |
daniele | 10:dd7111d4279f | 105 | #ifdef PICO_SUPPORT_IPV6 |
daniele | 10:dd7111d4279f | 106 | extern const uint8_t PICO_IPV6_ANY[PICO_SIZE_IP6]; |
daniele | 10:dd7111d4279f | 107 | #endif |
daniele | 10:dd7111d4279f | 108 | |
daniele | 10:dd7111d4279f | 109 | static inline uint32_t pico_hash(char *name) |
daniele | 10:dd7111d4279f | 110 | { |
daniele | 10:dd7111d4279f | 111 | unsigned long hash = 5381; |
daniele | 10:dd7111d4279f | 112 | int c; |
daniele | 10:dd7111d4279f | 113 | while ((c = *name++)) |
daniele | 10:dd7111d4279f | 114 | hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ |
daniele | 10:dd7111d4279f | 115 | return hash; |
daniele | 10:dd7111d4279f | 116 | } |
daniele | 10:dd7111d4279f | 117 | |
daniele | 10:dd7111d4279f | 118 | /* Debug */ |
daniele | 10:dd7111d4279f | 119 | //#define PICO_SUPPORT_DEBUG_MEMORY |
daniele | 10:dd7111d4279f | 120 | //#define PICO_SUPPORT_DEBUG_TOOLS |
daniele | 10:dd7111d4279f | 121 | #endif |