]> git.ipfire.org Git - thirdparty/squid.git/blame - src/eui/Eui64.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / eui / Eui64.h
CommitLineData
bbc27441 1/*
bde978a6 2 * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
bbc27441
AJ
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
a98c2da5
AJ
9#ifndef _SQUID_EUI_EUI64_H
10#define _SQUID_EUI_EUI64_H
11
a98c2da5
AJ
12#if USE_SQUID_EUI
13
63bd4bf7
A
14namespace Ip
15{
16class Address;
e5519212 17}
a98c2da5 18
a98c2da5 19#include <cstring>
a98c2da5
AJ
20#if HAVE_SYS_EUI64_H
21#include <sys/eui64.h>
22#endif
23
05320519
A
24namespace Eui
25{
a98c2da5
AJ
26
27/* EUI-64 is 8 bytes. */
28#if defined(EUI64_LEN)
29#define SZ_EUI64_BUF EUI64_LEN
30#else
31#define SZ_EUI64_BUF 8
32#endif
33
05320519
A
34class Eui64
35{
a98c2da5
AJ
36
37public:
68e47c3e
AJ
38 Eui64() { clear(); }
39 Eui64(const Eui64 &t) { memcpy(this, &t, sizeof(Eui64)); }
40 ~Eui64() {}
a98c2da5
AJ
41
42 const unsigned char *get(void);
43
44 bool set(const char *src, const int len) {
45 if (len > SZ_EUI64_BUF) return false;
46 if (len < SZ_EUI64_BUF) clear();
47 memcpy(eui, src, len);
48 return true;
68e47c3e 49 }
a98c2da5 50
68e47c3e 51 void clear() { memset(eui, 0, SZ_EUI64_BUF); }
a98c2da5
AJ
52
53 /**
54 * Decode an ascii representation of an EUI-64 address.
55 *
56 * \param asc ASCII representation of an EUI-64 address
57 * \param eth Binary representation of the EUI_64 address
58 * \retval false Conversion to binary failed. Invalid address
59 * \retval true Conversion completed successfully
60 */
61 bool decode(const char *asc);
62
63 /**
64 * Encode an ascii representation (asc) of an EUI-64 address.
65 *
66 * \param buf Buffer to receive ASCII representation of an EUI-64 address
67 * \param len Length of the buffer space available. Must be >= SZ_EUI64_BUF bytes or the encode will fail.
68 * \param eui Binary representation of the EUI-64 address
69 * \retval false Conversion to ASCII failed.
70 * \retval true Conversion completed successfully.
71 */
736a7789 72 bool encode(char *buf, const int len) const;
a98c2da5
AJ
73
74 // lookup an EUI-64 address via IPv6 SLAAC or NDP
00406b24 75 bool lookup(const Ip::Address &c);
a98c2da5
AJ
76
77 // lookup an EUI-64 address via IPv6 NDP
00406b24 78 bool lookupNdp(const Ip::Address &c);
a98c2da5
AJ
79
80 // lookup an EUI-64 address via decoding the IPv6 address SLAAC data
00406b24 81 bool lookupSlaac(const Ip::Address &c);
a98c2da5
AJ
82
83private:
84 unsigned char eui[SZ_EUI64_BUF];
85};
86
e5519212 87} // namespace Eui
a98c2da5
AJ
88
89#endif /* USE_SQUID_EUI */
90#endif /* _SQUID_EUI_EUI64_H */
f53969cc 91