]> git.ipfire.org Git - thirdparty/squid.git/blob - src/eui/Eui48.h
Merge from trunk
[thirdparty/squid.git] / src / eui / Eui48.h
1 #ifndef _SQUID_EUI_EUI48_H
2 #define _SQUID_EUI_EUI48_H
3
4 #include "config.h"
5
6 #if USE_SQUID_EUI
7
8 /* EUI-48 is 6 bytes. */
9 #define SZ_EUI48_BUF 6
10
11 namespace Ip
12 {
13 class Address;
14 };
15
16 #if HAVE_CSTRING
17 #include <cstring>
18 #endif
19
20 /* memcpy and friends */
21 #if HAVE_STRING_H
22 #include <string.h>
23 #endif
24
25 namespace Eui
26 {
27
28 class Eui48
29 {
30
31 public:
32 Eui48() { clear(); };
33 Eui48(const Eui48 &t) { memcpy(this, &t, sizeof(Eui48)); };
34 ~Eui48() {};
35
36 const unsigned char *get(void);
37
38 bool set(const char *src, const int len) {
39 if (len > SZ_EUI48_BUF) return false;
40 if (len < SZ_EUI48_BUF) clear();
41 memcpy(eui, src, len);
42 return true;
43 };
44
45 void clear() { memset(eui, 0, SZ_EUI48_BUF); };
46
47 /**
48 * Decode an ascii representation of an EUI-48 ethernet address.
49 *
50 * \param asc ASCII representation of an ethernet (MAC) address
51 * \param eth Binary representation of the ethernet address
52 * \retval false Conversion to binary failed. Invalid address
53 * \retval true Conversion completed successfully
54 */
55 bool decode(const char *asc);
56
57 /**
58 * Encode an ascii representation (asc) of an EUI-48 ethernet address.
59 *
60 * \param buf Buffer to receive ASCII representation of an ethernet (MAC) address
61 * \param len Length of the buffer space available. Must be >= SZ_EUI48_BUF bytes or the encode will fail.
62 * \param eui Binary representation of the ethernet address
63 * \retval false Conversion to ASCII failed.
64 * \retval true Conversion completed successfully.
65 */
66 bool encode(char *buf, const int len);
67
68 // lookup an EUI-48 / MAC address via ARP
69 bool lookup(const Ip::Address &c);
70
71 private:
72 unsigned char eui[SZ_EUI48_BUF];
73 };
74
75 }; // namespace Eui
76
77 #endif /* USE_SQUID_EUI */
78 #endif /* _SQUID_EUI_EUI48_H */