Harald Welte | d12eab9 | 2017-08-02 19:49:47 +0200 | [diff] [blame] | 1 | #pragma once |
| 2 | #include <stdint.h> |
| 3 | #include <netinet/in.h> |
| 4 | |
Harald Welte | a0d281d | 2017-08-02 21:48:16 +0200 | [diff] [blame] | 5 | #include "../gtp/pdp.h" |
| 6 | |
Harald Welte | d12eab9 | 2017-08-02 19:49:47 +0200 | [diff] [blame] | 7 | /* a simple wrapper around an in6_addr to also contain the length of the address, |
| 8 | * thereby implicitly indicating the address family of the address */ |
| 9 | struct in46_addr { |
| 10 | uint8_t len; |
| 11 | union { |
| 12 | struct in_addr v4; |
| 13 | struct in6_addr v6; |
| 14 | }; |
| 15 | }; |
| 16 | |
Harald Welte | 7fc8694 | 2017-08-12 12:55:48 +0200 | [diff] [blame] | 17 | struct in46_prefix { |
| 18 | struct in46_addr addr; |
| 19 | uint8_t prefixlen; |
| 20 | }; |
| 21 | |
Harald Welte | d12eab9 | 2017-08-02 19:49:47 +0200 | [diff] [blame] | 22 | extern int in46a_to_af(const struct in46_addr *in); |
| 23 | extern int in46a_to_sas(struct sockaddr_storage *out, const struct in46_addr *in); |
| 24 | extern const char *in46a_ntop(const struct in46_addr *in, char *dst, socklen_t dst_size); |
Harald Welte | b62983d | 2017-08-12 12:46:17 +0200 | [diff] [blame] | 25 | extern const char *in46a_ntoa(const struct in46_addr *in46); |
Harald Welte | 7fc8694 | 2017-08-12 12:55:48 +0200 | [diff] [blame] | 26 | extern const char *in46p_ntoa(const struct in46_prefix *in46p); |
Harald Welte | d12eab9 | 2017-08-02 19:49:47 +0200 | [diff] [blame] | 27 | extern int in46a_equal(const struct in46_addr *a, const struct in46_addr *b); |
Harald Welte | 365f8fa | 2017-08-08 18:09:36 +0200 | [diff] [blame] | 28 | extern int in46a_prefix_equal(const struct in46_addr *a, const struct in46_addr *b); |
Harald Welte | d12eab9 | 2017-08-02 19:49:47 +0200 | [diff] [blame] | 29 | extern int in46a_within_mask(const struct in46_addr *addr, const struct in46_addr *net, size_t prefixlen); |
Harald Welte | a0d281d | 2017-08-02 21:48:16 +0200 | [diff] [blame] | 30 | |
| 31 | int in46a_to_eua(const struct in46_addr *src, struct ul66_t *eua); |
| 32 | int in46a_from_eua(const struct ul66_t *eua, struct in46_addr *dst); |