12 #include "rofl/common/croflexception.h"
13 #include "rofl/common/cmemory.h"
14 #include "rofl/common/logging.h"
51 const caddress& addr) { *
this = addr; };
127 uint8_t* buf,
size_t buflen);
134 uint8_t* buf,
size_t buflen);
142 operator<< (std::ostream& os,
const caddress& addr) {
145 os << dynamic_cast<const rofl::cmemory&>( addr );
166 if (buflen < ETH_ADDR_LEN)
167 throw eAddressInval(
"caddress_ll::caddress_ll() buflen too short");
175 const std::string& addr) :
209 caddress::operator= (addr);
218 const caddress_ll& addr)
const {
return caddress::operator< (addr); };
225 const caddress_ll& addr)
const {
return caddress::operator> (addr); };
234 addr_ll[0] = (*this)[0] & addr[0];
235 addr_ll[1] = (*this)[1] & addr[1];
236 addr_ll[2] = (*this)[2] & addr[2];
237 addr_ll[3] = (*this)[3] & addr[3];
238 addr_ll[4] = (*this)[4] & addr[4];
239 addr_ll[5] = (*this)[5] & addr[5];
248 const caddress_ll& addr)
const {
return caddress::operator== (addr); };
255 const caddress_ll& addr)
const {
return caddress::operator!= (addr); };
295 set_mac(uint64_t mac);
301 str()
const {
return addr2str(); };
310 const std::string& addr);
321 operator<< (std::ostream& os,
const caddress_ll& addr) {
322 os <<
rofl::indent(0) <<
"<caddress_ll " << addr.addr2str() <<
" >" << std::endl;
325 os << dynamic_cast<const caddress&>( addr );
332 static const size_t ETH_ADDR_LEN = 6;
370 caddress::operator= (addr);
379 const caddress_in& addr)
const {
return caddress::operator< (addr); };
386 const caddress_in& addr)
const {
return caddress::operator> (addr); };
393 const caddress_in& addr)
const {
return caddress::operator== (addr); };
400 const caddress_in& addr)
const {
return caddress::operator!= (addr); };
405 operator<< (std::ostream& os,
const caddress_in& addr) {
408 os << dynamic_cast<const caddress&>( addr );
428 const std::string& addr) :
437 struct sockaddr_in* sin, socklen_t salen) :
439 if (salen <
sizeof(
struct sockaddr_in)) {
440 throw eAddressInval(
"caddress_in4::caddress_in4() invalid struct sockaddr_in");
442 set_addr_nbo(sin->sin_addr.s_addr);
465 caddress_in::operator= (addr);
474 const caddress_in4& addr)
const {
return caddress_in::operator< (addr); };
481 const caddress_in4& addr)
const {
return caddress_in::operator> (addr); };
490 for (
unsigned int i = 0; i < INET4_ADDR_LEN; i++) {
491 addr_in4[i] = (*this)[i] & addr[i];
501 const caddress_in4& addr)
const {
return caddress_in::operator== (addr); };
508 const caddress_in4& addr)
const {
return caddress_in::operator!= (addr); };
516 get_addr_nbo()
const {
517 uint8_t* ptr =
somem();
518 return *((uint32_t*)ptr);
525 set_addr_nbo(uint32_t addr) {
526 uint8_t* ptr =
somem();
527 *((uint32_t*)ptr) = addr;
535 get_addr_hbo()
const {
536 uint8_t* ptr =
somem();
537 return be32toh(*((uint32_t*)ptr));
544 set_addr_hbo(uint32_t addr) {
545 uint8_t* ptr =
somem();
546 *((uint32_t*)ptr) = htobe32(addr);
553 str()
const {
return addr2str(); };
562 const std::string& addr);
573 operator<< (std::ostream& os,
const caddress_in4& addr) {
574 os <<
rofl::indent(0) <<
"<caddress_in4 " << addr.addr2str() <<
" >" << std::endl;
577 os << dynamic_cast<const caddress&>( addr );
584 static const size_t INET4_ADDR_LEN = 4;
602 const std::string& addr) :
611 struct sockaddr_in6* sin6, socklen_t salen) :
613 if (salen <
sizeof(
struct sockaddr_in6)) {
614 throw eAddressInval(
"caddress_in6::caddress_in6() invalid struct sockaddr_in6");
616 memcpy(
somem(), sin6->sin6_addr.s6_addr, INET6_ADDR_LEN);
639 caddress_in::operator= (addr);
648 const caddress_in6& addr)
const {
return caddress_in::operator< (addr); };
655 const caddress_in6& addr)
const {
return caddress_in::operator> (addr); };
664 for (
unsigned int i = 0; i < INET6_ADDR_LEN; i++) {
665 addr_in6[i] = (*this)[i] & addr[i];
675 const caddress_in6& addr)
const {
return caddress_in::operator== (addr); };
682 const caddress_in6& addr)
const {
return caddress_in::operator!= (addr); };
688 str()
const {
return addr2str(); };
697 const std::string& addr);
708 operator<< (std::ostream& os,
const caddress_in6& addr) {
709 os <<
rofl::indent(0) <<
"<caddress_in6 " << addr.addr2str() <<
" >" << std::endl;
712 os << dynamic_cast<const caddress&>( addr );
719 static const size_t INET6_ADDR_LEN = 16;
virtual void pack(uint8_t *buf, size_t buflen)
Copies content of this cmemory instance to specified buffer.
Definition: caddress.cc:20
Definition: caddress.h:152
Definition: caddress.h:23
bool is_multicast() const
Check for multicast bit in hardware address.
Definition: caddress.cc:74
bool is_broadcast() const
Check for broadcast hardware address.
Definition: caddress.cc:84
uint64_t get_mac() const
Return the MAC address as a uint64_t value. The MAC address will be transformed to host byte order an...
Definition: caddress.cc:104
Definition: caddress.h:589
Definition: caddress.h:30
Definition: caddress.h:18
Definition: csockaddr.h:38
bool is_null() const
Check for null hardware address.
Definition: caddress.cc:94
Definition: caddress.h:340
bool operator!=(cmemory const &m) const
Comparison operator (unequal).
Definition: cmemory.cc:232
uint8_t * somem() const
Returns pointer to start of allocated memory area.
Definition: cmemory.cc:101
virtual void unpack(uint8_t *buf, size_t buflen)
Copies content of specified buffer into this cmemory instance .
Definition: caddress.cc:31
bool operator==(cmemory const &m) const
Comparison operator.
Definition: cmemory.cc:219
bool operator<(cmemory const &m) const
Less than operator.
Definition: cmemory.cc:129
virtual uint8_t * resize(size_t len)
Resizes allocated memory area by calling C-function realloc().
Definition: cmemory.cc:253
Definition: caddress.h:415
C++ abstraction for malloc'ed memory areas.
Definition: cmemory.h:44
bool operator>(cmemory const &m) const
Less than operator.
Definition: cmemory.cc:152
cmemory & operator=(cmemory const &m)
Assignment operator.
Definition: cmemory.cc:85
Definition: croflexception.h:27
virtual void unpack(uint8_t *buf, size_t buflen)
Copies content of specified buffer into this cmemory instance .
Definition: cmemory.cc:304