diff options
author | 2016-12-06 15:29:55 +0200 | |
---|---|---|
committer | 2016-12-06 15:31:28 +0200 | |
commit | 0074ceeed2aa9ecafbbd8a71dc42d4bee1b34ffb (patch) | |
tree | 005a24d1465b0fc18825770367e39ea94ede15b9 /src/common/Network/Packet | |
parent | cf72305f2f5632f977d2596db4c912100b438e1f (diff) |
RX features phase 2 - ARP and ICMP self response
Signed-off-by: imarom <imarom@cisco.com>
Diffstat (limited to 'src/common/Network/Packet')
-rw-r--r-- | src/common/Network/Packet/Arp.h | 43 | ||||
-rwxr-xr-x | src/common/Network/Packet/EthernetHeader.h | 6 | ||||
-rw-r--r-- | src/common/Network/Packet/IcmpHeader.h | 5 | ||||
-rwxr-xr-x | src/common/Network/Packet/MacAddress.h | 5 |
4 files changed, 55 insertions, 4 deletions
diff --git a/src/common/Network/Packet/Arp.h b/src/common/Network/Packet/Arp.h index a16605bd..e23ff139 100644 --- a/src/common/Network/Packet/Arp.h +++ b/src/common/Network/Packet/Arp.h @@ -20,8 +20,7 @@ limitations under the License. #pragma pack(push, 1) class ArpHdr { public: - enum arp_hdr_enum_e { - ARP_HDR_HRD_ETHER = 1, + enum arp_hdr_op_e { ARP_HDR_OP_REQUEST = 1, /* request to resolve address */ ARP_HDR_OP_REPLY = 2, /* response to previous request */ ARP_HDR_OP_REVREQUEST = 3, /* request proto addr given hardware */ @@ -30,6 +29,46 @@ class ArpHdr { ARP_HDR_OP_INVREPLY = 6, /* response identifying peer */ }; + enum arp_hdr_hrd_e { + ARP_HDR_HRD_ETHER = 1, + }; + + enum arp_hdr_proto_e { + ARP_HDR_PROTO_IPV4 = 0x800, + }; + + void setOp(uint16_t op) { + m_arp_op = PKT_HTONS(op); + } + + uint16_t getOp() const { + return PKT_NTOHS(m_arp_op); + } + + uint16_t getHrdType() const { + return PKT_NTOHS(m_arp_hrd); + } + + uint16_t getProtocolType() const { + return PKT_NTOHS(m_arp_pro); + } + + uint32_t getSip() const { + return PKT_NTOHL(m_arp_sip); + } + + void setSip(uint32_t sip) { + m_arp_sip = PKT_HTONL(sip); + } + + uint32_t getTip() const { + return PKT_NTOHL(m_arp_tip); + } + + void setTip(uint32_t tip) { + m_arp_tip = PKT_HTONL(tip); + } + public: uint16_t m_arp_hrd; /* format of hardware address */ uint16_t m_arp_pro; /* format of protocol address */ diff --git a/src/common/Network/Packet/EthernetHeader.h b/src/common/Network/Packet/EthernetHeader.h index c9dcdbe2..002d6c25 100755 --- a/src/common/Network/Packet/EthernetHeader.h +++ b/src/common/Network/Packet/EthernetHeader.h @@ -62,8 +62,10 @@ public: inline EthernetHeader(uint8_t* packet); inline uint8_t* getPointer (){return (uint8_t*)this;} - static inline uint32_t getSize (){return (uint32_t)sizeof(EthernetHeader);} - + inline uint32_t getSize () { + return ( (getNextProtocol() == Protocol::VLAN) ? 18 : 14); + } + // Get dest MAC pointer MacAddress *getDestMacP() { return &myDestination; } diff --git a/src/common/Network/Packet/IcmpHeader.h b/src/common/Network/Packet/IcmpHeader.h index 99d89329..4bc102e3 100644 --- a/src/common/Network/Packet/IcmpHeader.h +++ b/src/common/Network/Packet/IcmpHeader.h @@ -24,6 +24,11 @@ class ICMPHeader { public: + enum { + TYPE_ECHO_REPLY = 0, + TYPE_ECHO_REQUEST = 8, + }; + ICMPHeader() { setCode(0); diff --git a/src/common/Network/Packet/MacAddress.h b/src/common/Network/Packet/MacAddress.h index 5dc4a9ea..9bd3eae1 100755 --- a/src/common/Network/Packet/MacAddress.h +++ b/src/common/Network/Packet/MacAddress.h @@ -137,6 +137,11 @@ public: return true; } + MacAddress& operator = (const uint8_t *rhs) { + memcpy(data, rhs, ETHER_ADDR_LEN); + return (*this); + } + uint8_t* GetBuffer() { return data; |