flycast/core/deps/picotcp/include/pico_addressing.h

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