diff options
author | Ido Barnea <ibarnea@cisco.com> | 2016-11-21 12:55:36 +0200 |
---|---|---|
committer | Ido Barnea <ibarnea@cisco.com> | 2016-11-21 12:56:29 +0200 |
commit | 4a2d56b6a04833b78d2d1b6fe50a4a4f54a049ec (patch) | |
tree | b562ec84bf4ba2725042f4d91dbbba07b3016281 /src/utl_ip.h | |
parent | fb823791cf8794dc367640a1f46ea051a0c79ccc (diff) |
Client config ARP support - code review changes
Signed-off-by: Ido Barnea <ibarnea@cisco.com>
Diffstat (limited to 'src/utl_ip.h')
-rw-r--r-- | src/utl_ip.h | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/src/utl_ip.h b/src/utl_ip.h index c5ca9d5b..3a133a15 100644 --- a/src/utl_ip.h +++ b/src/utl_ip.h @@ -71,6 +71,32 @@ inline std::string ip_to_str(uint8_t *ip) { return tmp; } +class CIpVlan { + // to be able to use this in map + friend bool operator<(const CIpVlan& l, const CIpVlan& r) { + if (l.get_ip() == r.get_ip()) { + return l.get_vlan() < r.get_vlan(); + } else { + return l.get_ip() < r.get_ip(); + } + } + + public: + CIpVlan(uint32_t ip, uint16_t vlan) { + m_ip = ip; + m_vlan = vlan; + } + uint16_t get_vlan() const {return m_vlan;} + void set_vlan(uint16_t vlan) {m_vlan = vlan;} + uint16_t get_ip() const {return m_ip;} + void set_ip(uint32_t ip) {m_ip = ip;} + + private: + uint32_t m_ip; + uint16_t m_vlan; +}; + + class COneIPInfo { public: enum { @@ -89,7 +115,7 @@ class COneIPInfo { uint16_t get_port() const {return m_port;} virtual void dump(FILE *fd) const { dump(fd, ""); - } + } virtual void dump(FILE *fd, const char *offset) const; virtual uint8_t ip_ver() const {return 0;} virtual uint32_t get_arp_req_len() const=0; @@ -167,7 +193,7 @@ class COneIPv6Info : public COneIPInfo { COneIPv6Info(uint16_t ip[8], uint16_t vlan, MacAddress mac, uint8_t port) : COneIPInfo(vlan, mac, port) { memcpy(m_ip, ip, sizeof(m_ip)); } - + const uint8_t *get_ipv6() {return (uint8_t *)m_ip;} virtual uint8_t ip_ver() const {return IP6_VER;} virtual uint32_t get_arp_req_len() const {return 100; /* ??? put correct number for ipv6*/} @@ -194,6 +220,10 @@ inline bool operator== (const COneIPv6Info& lhs, const COneIPv6Info& rhs) { inline bool operator!= (const COneIPv6Info& lhs, const COneIPv6Info& rhs){ return !(lhs == rhs); } +typedef std::map<CIpVlan, COneIPv4Info> ip_vlan_to_many_ip_t; +typedef std::map<CIpVlan, COneIPv4Info>::iterator ip_vlan_to_many_ip_iter_t; +typedef std::map<std::pair<uint16_t[8], uint16_t>, COneIPv6Info> ipv6_vlan_to_many_ipv6_t; + class CManyIPInfo { public: CManyIPInfo () { @@ -206,11 +236,11 @@ class CManyIPInfo { const COneIPInfo *get_first(); const COneIPInfo *get_next(); private: - std::map<std::pair<uint32_t, uint16_t>, COneIPv4Info> m_ipv4_resolve; - std::map<std::pair<uint16_t[8], uint16_t>, COneIPv6Info> m_ipv6_resolve; - std::map<std::pair<uint32_t, uint16_t>, COneIPv4Info>::iterator m_ipv4_iter; + ip_vlan_to_many_ip_t m_ipv4_resolve; + ip_vlan_to_many_ip_iter_t m_ipv4_iter; + ipv6_vlan_to_many_ipv6_t m_ipv6_resolve; bool m_iter_initiated; - + }; #endif |