]>
Commit | Line | Data |
---|---|---|
bbc27441 AJ |
1 | /* |
2 | * Copyright (C) 1996-2014 The Squid Software Foundation and contributors | |
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 | ||
ee0927b6 AJ |
9 | #ifndef _SQUID_EUI_EUI48_H |
10 | #define _SQUID_EUI_EUI48_H | |
11 | ||
ee0927b6 AJ |
12 | #if USE_SQUID_EUI |
13 | ||
14 | /* EUI-48 is 6 bytes. */ | |
15 | #define SZ_EUI48_BUF 6 | |
16 | ||
63bd4bf7 A |
17 | namespace Ip |
18 | { | |
19 | class Address; | |
b7ac5457 | 20 | }; |
ee0927b6 | 21 | |
ee0927b6 | 22 | #include <cstring> |
f1e14020 | 23 | |
05320519 A |
24 | namespace Eui |
25 | { | |
a98c2da5 | 26 | |
71ab4315 A |
27 | class Eui48 |
28 | { | |
ee0927b6 AJ |
29 | |
30 | public: | |
68e47c3e AJ |
31 | Eui48() { clear(); } |
32 | Eui48(const Eui48 &t) { memcpy(this, &t, sizeof(Eui48)); } | |
33 | ~Eui48() {} | |
ee0927b6 AJ |
34 | |
35 | const unsigned char *get(void); | |
36 | ||
37 | bool set(const char *src, const int len) { | |
38 | if (len > SZ_EUI48_BUF) return false; | |
39 | if (len < SZ_EUI48_BUF) clear(); | |
40 | memcpy(eui, src, len); | |
41 | return true; | |
68e47c3e | 42 | } |
ee0927b6 | 43 | |
68e47c3e | 44 | void clear() { memset(eui, 0, SZ_EUI48_BUF); } |
ee0927b6 AJ |
45 | |
46 | /** | |
47 | * Decode an ascii representation of an EUI-48 ethernet address. | |
48 | * | |
49 | * \param asc ASCII representation of an ethernet (MAC) address | |
50 | * \param eth Binary representation of the ethernet address | |
51 | * \retval false Conversion to binary failed. Invalid address | |
52 | * \retval true Conversion completed successfully | |
53 | */ | |
54 | bool decode(const char *asc); | |
55 | ||
56 | /** | |
57 | * Encode an ascii representation (asc) of an EUI-48 ethernet address. | |
58 | * | |
59 | * \param buf Buffer to receive ASCII representation of an ethernet (MAC) address | |
60 | * \param len Length of the buffer space available. Must be >= SZ_EUI48_BUF bytes or the encode will fail. | |
61 | * \param eui Binary representation of the ethernet address | |
62 | * \retval false Conversion to ASCII failed. | |
63 | * \retval true Conversion completed successfully. | |
64 | */ | |
65 | bool encode(char *buf, const int len); | |
66 | ||
67 | // lookup an EUI-48 / MAC address via ARP | |
00406b24 | 68 | bool lookup(const Ip::Address &c); |
ee0927b6 AJ |
69 | |
70 | private: | |
71 | unsigned char eui[SZ_EUI48_BUF]; | |
72 | }; | |
73 | ||
e5519212 | 74 | } // namespace Eui |
a98c2da5 | 75 | |
ee0927b6 AJ |
76 | #endif /* USE_SQUID_EUI */ |
77 | #endif /* _SQUID_EUI_EUI48_H */ | |
f53969cc | 78 |