32#include "ipv6/ip64-addr.h"
39#define LOG_MODULE "IPv6"
40#define LOG_LEVEL LOG_LEVEL_NONE
47#ifndef IP64_NAT64_USE_WELL_KNOWN_PREFIX
48#define IP64_NAT64_USE_WELL_KNOWN_PREFIX 1
51#if IP64_NAT64_USE_WELL_KNOWN_PREFIX
52static uip_ip6addr_t ip64_prefix = {{ 0, 0x64, 0xff, 0x9b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
54static uip_ip6addr_t ip64_prefix = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0, 0, 0, 0}};
57static uint8_t ip64_prefix_len = 96;
67ip64_addr_copy6(uip_ip6addr_t *dest,
const uip_ip6addr_t *src)
69 memcpy(dest, src,
sizeof(uip_ip6addr_t));
74 uip_ip6addr_t *ipv6addr)
81 ipv6addr->u8[12] = ipv4addr->u8[0];
82 ipv6addr->u8[13] = ipv4addr->u8[1];
83 ipv6addr->u8[14] = ipv4addr->u8[2];
84 ipv6addr->u8[15] = ipv4addr->u8[3];
85 LOG_DBG(
"ip64_addr_4to6: IPv6-encoded IPv4 address %d.%d.%d.%d => ",
86 ipv4addr->u8[0], ipv4addr->u8[1],
87 ipv4addr->u8[2], ipv4addr->u8[3]);
88 LOG_DBG_6ADDR(ipv6addr);
96ip64_addr_6to4(
const uip_ip6addr_t *ipv6addr,
103 if(ip64_addr_is_ip64(ipv6addr)) {
104 ipv4addr->u8[0] = ipv6addr->u8[12];
105 ipv4addr->u8[1] = ipv6addr->u8[13];
106 ipv4addr->u8[2] = ipv6addr->u8[14];
107 ipv4addr->u8[3] = ipv6addr->u8[15];
109 LOG_DBG(
"ip64_addr_6to4: IPv6-encoded IPv4 address %d.%d.%d.%d <=",
110 ipv4addr->u8[0], ipv4addr->u8[1],
111 ipv4addr->u8[2], ipv4addr->u8[3]);
112 LOG_DBG_6ADDR(ipv6addr);
123ip64_addr_is_ip64(
const uip_ip6addr_t *ipv6addr)
125 return uip_ipaddr_prefixcmp(ipv6addr, &ip64_prefix, ip64_prefix_len);
129ip64_addr_set_prefix(
const uip_ip6addr_t *prefix, uint8_t prefix_len)
132 ip64_prefix_len = prefix_len;
#define uip_ipaddr_copy(dest, src)
Copy an IP address from one place to another.
Header file for the logging system.
Representation of an IP address.