diff options
author | Stephen Frost <sfrost@snowman.net> | 2017-03-15 11:16:25 -0400 |
---|---|---|
committer | Stephen Frost <sfrost@snowman.net> | 2017-03-15 11:16:25 -0400 |
commit | c7a9fa399d557c6366222e90b35db31e45d25678 (patch) | |
tree | 1c66b20d56331d8ab5160eb75ba37c9e6b8d929e /src/include/utils/inet.h | |
parent | 42bdaebf161841c8e248b197b7319779b8730323 (diff) |
Add support for EUI-64 MAC addresses as macaddr8
This adds in support for EUI-64 MAC addresses by adding a new data type
called 'macaddr8' (using our usual convention of indicating the number
of bytes stored).
This was largely a copy-and-paste from the macaddr data type, with
appropriate adjustments for having 8 bytes instead of 6 and adding
support for converting a provided EUI-48 (6 byte format) to the EUI-64
format. Conversion from EUI-48 to EUI-64 inserts FFFE as the 4th and
5th bytes but does not perform the IPv6 modified EUI-64 action of
flipping the 7th bit, but we add a function to perform that specific
action for the user as it may be commonly done by users who wish to
calculate their IPv6 address based on their network prefix and 48-bit
MAC address.
Author: Haribabu Kommi, with a good bit of rework of macaddr8_in by me.
Reviewed by: Vitaly Burovoy, Kuntal Ghosh
Discussion: https://postgr.es/m/CAJrrPGcUi8ZH+KkK+=TctNQ+EfkeCEHtMU_yo1mvX8hsk_ghNQ@mail.gmail.com
Diffstat (limited to 'src/include/utils/inet.h')
-rw-r--r-- | src/include/utils/inet.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/include/utils/inet.h b/src/include/utils/inet.h index b4d7359f19e..7dc179e2556 100644 --- a/src/include/utils/inet.h +++ b/src/include/utils/inet.h @@ -102,6 +102,21 @@ typedef struct macaddr } macaddr; /* + * This is the internal storage format for MAC8 addresses: + */ +typedef struct macaddr8 +{ + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; + unsigned char e; + unsigned char f; + unsigned char g; + unsigned char h; +} macaddr8; + +/* * fmgr interface macros */ #define DatumGetInetPP(X) ((inet *) PG_DETOAST_DATUM_PACKED(X)) @@ -111,12 +126,19 @@ typedef struct macaddr /* obsolescent variants */ #define DatumGetInetP(X) ((inet *) PG_DETOAST_DATUM(X)) #define PG_GETARG_INET_P(n) DatumGetInetP(PG_GETARG_DATUM(n)) + /* macaddr is a fixed-length pass-by-reference datatype */ #define DatumGetMacaddrP(X) ((macaddr *) DatumGetPointer(X)) #define MacaddrPGetDatum(X) PointerGetDatum(X) #define PG_GETARG_MACADDR_P(n) DatumGetMacaddrP(PG_GETARG_DATUM(n)) #define PG_RETURN_MACADDR_P(x) return MacaddrPGetDatum(x) +/* macaddr8 is a fixed-length pass-by-reference datatype */ +#define DatumGetMacaddr8P(X) ((macaddr8 *) DatumGetPointer(X)) +#define Macaddr8PGetDatum(X) PointerGetDatum(X) +#define PG_GETARG_MACADDR8_P(n) DatumGetMacaddr8P(PG_GETARG_DATUM(n)) +#define PG_RETURN_MACADDR8_P(x) return Macaddr8PGetDatum(x) + /* * Support functions in network.c */ |