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 52 static uip_ip6addr_t ip64_prefix = {{ 0, 0x64, 0xff, 0x9b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
54 static uip_ip6addr_t ip64_prefix = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0, 0, 0, 0}};
57 static uint8_t ip64_prefix_len = 96;
67 ip64_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);
96 ip64_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);
123 ip64_addr_is_ip64(
const uip_ip6addr_t *ipv6addr)
125 return uip_ipaddr_prefixcmp(ipv6addr, &ip64_prefix, ip64_prefix_len);
129 ip64_addr_set_prefix(
const uip_ip6addr_t *prefix, uint8_t prefix_len)
132 ip64_prefix_len = prefix_len;
Representation of an IP address.
#define uip_ipaddr_copy(dest, src)
Copy an IP address from one place to another.
Header file for the logging system