128 lines
3.1 KiB
C
128 lines
3.1 KiB
C
![]() |
/*********************************************************************
|
||
|
PicoTCP. Copyright (c) 2012-2017 Altran Intelligent Systems. Some rights reserved.
|
||
|
See COPYING, LICENSE.GPLv2 and LICENSE.GPLv3 for usage.
|
||
|
|
||
|
*********************************************************************/
|
||
|
#ifndef INCLUDE_PICO_ADDRESSING
|
||
|
#define INCLUDE_PICO_ADDRESSING
|
||
|
|
||
|
#include "pico_config.h"
|
||
|
#include "pico_constants.h"
|
||
|
|
||
|
PACKED_STRUCT_DEF pico_ip4
|
||
|
{
|
||
|
uint32_t addr;
|
||
|
};
|
||
|
|
||
|
PACKED_STRUCT_DEF pico_ip6
|
||
|
{
|
||
|
uint8_t addr[16];
|
||
|
};
|
||
|
|
||
|
union pico_address
|
||
|
{
|
||
|
struct pico_ip4 ip4;
|
||
|
struct pico_ip6 ip6;
|
||
|
};
|
||
|
|
||
|
/******************************************************************************
|
||
|
* Ethernet Address Definitions
|
||
|
******************************************************************************/
|
||
|
|
||
|
PACKED_STRUCT_DEF pico_eth
|
||
|
{
|
||
|
uint8_t addr[6];
|
||
|
uint8_t padding[2];
|
||
|
};
|
||
|
|
||
|
extern const uint8_t PICO_ETHADDR_ALL[];
|
||
|
|
||
|
/******************************************************************************
|
||
|
* Generic 6LoWPAN Address Definitions
|
||
|
******************************************************************************/
|
||
|
|
||
|
/* 6lowpan supports 16-bit short addresses */
|
||
|
PACKED_STRUCT_DEF pico_6lowpan_short
|
||
|
{
|
||
|
uint16_t addr;
|
||
|
};
|
||
|
|
||
|
/* And also EUI-64 addresses */
|
||
|
PACKED_STRUCT_DEF pico_6lowpan_ext
|
||
|
{
|
||
|
uint8_t addr[8];
|
||
|
};
|
||
|
|
||
|
/* Address memory as either a short 16-bit address or a 64-bit address */
|
||
|
union pico_6lowpan_u
|
||
|
{
|
||
|
uint8_t data[8];
|
||
|
struct pico_6lowpan_short _short;
|
||
|
struct pico_6lowpan_ext _ext;
|
||
|
};
|
||
|
|
||
|
/* Info data structure to pass to pico_device_init by the device driver */
|
||
|
struct pico_6lowpan_info
|
||
|
{
|
||
|
struct pico_6lowpan_short addr_short;
|
||
|
struct pico_6lowpan_ext addr_ext;
|
||
|
struct pico_6lowpan_short pan_id;
|
||
|
};
|
||
|
|
||
|
/* Different addressing modes for IEEE802.15.4 addresses */
|
||
|
#define AM_6LOWPAN_NONE (0u)
|
||
|
#define AM_6LOWPAN_RES (1u)
|
||
|
#define AM_6LOWPAN_SHORT (2u)
|
||
|
#define AM_6LOWPAN_EXT (3u)
|
||
|
#define SIZE_6LOWPAN_SHORT (2u)
|
||
|
#define SIZE_6LOWPAN_EXT (8u)
|
||
|
#define SIZE_6LOWPAN(m) (((m) == 2) ? (2) : (((m) == 3) ? (8) : (0)))
|
||
|
|
||
|
/******************************************************************************
|
||
|
* Generic 6LoWPAN Address Definitions
|
||
|
******************************************************************************/
|
||
|
|
||
|
/* Storage data structure for IEEE802.15.4 addresses */
|
||
|
struct pico_802154
|
||
|
{
|
||
|
union pico_6lowpan_u addr;
|
||
|
uint8_t mode;
|
||
|
};
|
||
|
|
||
|
/******************************************************************************
|
||
|
* Link Layer addresses
|
||
|
******************************************************************************/
|
||
|
|
||
|
#define IID_16(iid) (0 == (iid)[2] && 0xff == (iid)[3] && 0xfe == (iid)[4] && 0 == (iid)[5])
|
||
|
|
||
|
enum pico_ll_mode
|
||
|
{
|
||
|
LL_MODE_ETHERNET = 0,
|
||
|
#ifdef PICO_SUPPORT_802154
|
||
|
LL_MODE_IEEE802154,
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
union pico_ll_addr
|
||
|
{
|
||
|
struct pico_eth eth;
|
||
|
struct pico_802154 pan;
|
||
|
};
|
||
|
|
||
|
PACKED_STRUCT_DEF pico_trans
|
||
|
{
|
||
|
uint16_t sport;
|
||
|
uint16_t dport;
|
||
|
};
|
||
|
|
||
|
/* Here are some protocols. */
|
||
|
#define PICO_PROTO_IPV4 0
|
||
|
#define PICO_PROTO_ICMP4 1
|
||
|
#define PICO_PROTO_IGMP 2
|
||
|
#define PICO_PROTO_TCP 6
|
||
|
#define PICO_PROTO_UDP 17
|
||
|
#define PICO_PROTO_IPV6 41
|
||
|
#define PICO_PROTO_ICMP6 58
|
||
|
|
||
|
#endif
|