diff options
author | 2016-11-15 16:27:08 +0200 | |
---|---|---|
committer | 2016-11-21 12:56:28 +0200 | |
commit | bf83f301e4fdbf333240af7f316735e35634c5fd (patch) | |
tree | 667c001d36a1b1a95b0f6da82d9919977543746c /src/common/Network/Packet | |
parent | c39cdf89bee7999ba714eb31e8ec4bc8b5d52a60 (diff) |
client config ARP resolve working. Still missing IPv6 support.
Signed-off-by: Ido Barnea <ibarnea@cisco.com>
Diffstat (limited to 'src/common/Network/Packet')
-rwxr-xr-x | src/common/Network/Packet/MacAddress.h | 125 |
1 files changed, 74 insertions, 51 deletions
diff --git a/src/common/Network/Packet/MacAddress.h b/src/common/Network/Packet/MacAddress.h index 2bc25333..5dc4a9ea 100755 --- a/src/common/Network/Packet/MacAddress.h +++ b/src/common/Network/Packet/MacAddress.h @@ -47,15 +47,15 @@ public: a5); }; - MacAddress(uint8_t macAddr[ETHER_ADDR_LEN]) - { - set(macAddr[0], - macAddr[1], - macAddr[2], - macAddr[3], - macAddr[4], - macAddr[5] ); - }; + MacAddress(uint8_t macAddr[ETHER_ADDR_LEN]) + { + set(macAddr[0], + macAddr[1], + macAddr[2], + macAddr[3], + macAddr[4], + macAddr[5] ); + }; void set(uint8_t a0, uint8_t a1, @@ -81,55 +81,78 @@ public: data[5]=val; } + void set(uint64_t val) { + for (int i = 0; i < 6; i++) { + data[i] = ( val >> ((5 - i) * 8) ) & 0xFF; + } + } + bool isDefaultAddress() const { - static MacAddress defaultMac; - return (*this == defaultMac); + static MacAddress defaultMac; + return (*this == defaultMac); } - bool isInvalidAddress() const - { - static MacAddress allZeros(0,0,0,0,0,0); - static MacAddress defaultMac; - return (*this == allZeros || *this == defaultMac); - } - void setIdentifierAsBogusAddr(uint32_t identifier) - { - *(uint32_t*)data = identifier; - } - - uint32_t getIdentifierFromBogusAddr() - { - return *(uint32_t*)data; - } - - bool operator == (const MacAddress& rhs) const - { - for(int i = 0; i < ETHER_ADDR_LEN; i++) - { - if(data[i] != rhs.data[i]) - return false; - } - - return true; - } - - uint8_t* GetBuffer() - { - return data; - } - - const uint8_t* GetConstBuffer() const - { - return data; - } + bool isInvalidAddress() const + { + static MacAddress allZeros(0,0,0,0,0,0); + static MacAddress defaultMac; + return (*this == allZeros || *this == defaultMac); + } + void setIdentifierAsBogusAddr(uint32_t identifier) + { + *(uint32_t*)data = identifier; + } + + uint32_t getIdentifierFromBogusAddr() + { + return *(uint32_t*)data; + } + + MacAddress& operator+=(const int& val) { + uint64_t tmp = 0; + + for (int i = 0; i < 6; i++) { + tmp <<= 8; + tmp |= data[i]; + } + + tmp += val; + + for (int i = 0; i < 6; i++) { + data[i] = ( tmp >> ((5 - i) * 8) ) & 0xFF; + } + + return *this; + } + + bool operator == (const MacAddress& rhs) const + { + for(int i = 0; i < ETHER_ADDR_LEN; i++) + { + if(data[i] != rhs.data[i]) + return false; + } + + return true; + } + + uint8_t* GetBuffer() + { + return data; + } + + const uint8_t* GetConstBuffer() const + { + return data; + } void dump(FILE *fd) const; - void copyToArray(uint8_t *arrayToFill) const - { + void copyToArray(uint8_t *arrayToFill) const + { ((uint32_t*)arrayToFill)[0] = ((uint32_t*)data)[0];//Copy first 32bit - ((uint16_t*)arrayToFill)[2] = ((uint16_t*)data)[2];//Copy last 16bit - } + ((uint16_t*)arrayToFill)[2] = ((uint16_t*)data)[2];//Copy last 16bit + } public: uint8_t data[ETHER_ADDR_LEN]; |