Skip to content

Commit

Permalink
Support for >64K VMI and VRF
Browse files Browse the repository at this point in the history
Few data structures in agent were using uint16_t to store VMI and VRF
index. Modified to use uint32_t

Closes-bug: #1453698
Change-Id: Ic10fd3beeaa286675bf49bfd35da4de4415ed9ae
  • Loading branch information
praveenkv committed May 11, 2015
1 parent 152ec6e commit 2b75e9e
Show file tree
Hide file tree
Showing 24 changed files with 67 additions and 66 deletions.
2 changes: 1 addition & 1 deletion src/vnsw/agent/kstate/vrf_assign_kstate.h
Expand Up @@ -15,7 +15,7 @@ class VrfAssignKState: public KState {
};

struct VrfAssignContext {
uint16_t vif_index_;
uint32_t vif_index_;
int marker_;
};

Expand Down
2 changes: 1 addition & 1 deletion src/vnsw/agent/oper/interface.cc
Expand Up @@ -283,7 +283,7 @@ Interface *InterfaceTable::FindInterfaceFromMetadataIp(const Ip4Address &ip) {
return index_table_.At(addr & 0xFFFF);
}

void InterfaceTable::VmPortToMetaDataIp(uint16_t index, uint32_t vrfid,
void InterfaceTable::VmPortToMetaDataIp(uint32_t index, uint32_t vrfid,
Ip4Address *addr) {
uint32_t ip = METADATA_IP_ADDR & 0xFFFF0000;
ip += (index & 0xFFFF);
Expand Down
2 changes: 1 addition & 1 deletion src/vnsw/agent/oper/interface.h
Expand Up @@ -340,7 +340,7 @@ class InterfaceTable : public AgentOperDBTable {
std::string *vm_ip,
std::string *vm_uuid,
std::string *vm_project_uuid);
void VmPortToMetaDataIp(uint16_t ifindex, uint32_t vrfid, Ip4Address *addr);
void VmPortToMetaDataIp(uint32_t ifindex, uint32_t vrfid, Ip4Address *addr);

// Dhcp Snoop Map entries
const Ip4Address GetDhcpSnoopEntry(const std::string &ifname);
Expand Down
12 changes: 6 additions & 6 deletions src/vnsw/agent/pkt/agent_stats.h
Expand Up @@ -30,7 +30,7 @@ class AgentStats {

void Reset();
void incr_xmpp_reconnects(uint8_t idx) {xmpp_reconnect_[idx]++;}
uint16_t xmpp_reconnects(uint8_t idx) const {
uint32_t xmpp_reconnects(uint8_t idx) const {
return xmpp_reconnect_[idx];
}

Expand All @@ -41,7 +41,7 @@ class AgentStats {
uint64_t xmpp_out_msgs(uint8_t idx) const {return xmpp_out_msgs_[idx];}

void incr_sandesh_reconnects() {sandesh_reconnects_++;}
uint16_t sandesh_reconnects() const {return sandesh_reconnects_;}
uint32_t sandesh_reconnects() const {return sandesh_reconnects_;}

void incr_sandesh_in_msgs() {sandesh_in_msgs_++;}
uint64_t sandesh_in_msgs() const {return sandesh_in_msgs_;}
Expand All @@ -50,7 +50,7 @@ class AgentStats {
uint64_t sandesh_out_msgs() const {return sandesh_out_msgs_;}

void incr_sandesh_http_sessions() {sandesh_http_sessions_++;}
uint16_t sandesh_http_sessions() const {return sandesh_http_sessions_;}
uint32_t sandesh_http_sessions() const {return sandesh_http_sessions_;}

void incr_flow_created() {flow_created_++;}
uint64_t flow_created() const {return flow_created_;}
Expand Down Expand Up @@ -103,14 +103,14 @@ class AgentStats {
uint64_t out_bytes() const {return out_bytes_;}
private:
Agent *agent_;
uint16_t xmpp_reconnect_[MAX_XMPP_SERVERS];
uint32_t xmpp_reconnect_[MAX_XMPP_SERVERS];
uint64_t xmpp_in_msgs_[MAX_XMPP_SERVERS];
uint64_t xmpp_out_msgs_[MAX_XMPP_SERVERS];

uint16_t sandesh_reconnects_;
uint32_t sandesh_reconnects_;
uint64_t sandesh_in_msgs_;
uint64_t sandesh_out_msgs_;
uint16_t sandesh_http_sessions_;
uint32_t sandesh_http_sessions_;

// Number of NH created
uint32_t nh_count_;
Expand Down
4 changes: 2 additions & 2 deletions src/vnsw/agent/pkt/flow_table.h
Expand Up @@ -239,7 +239,7 @@ struct FlowData {
uint32_t vrf;
uint32_t mirror_vrf;

uint16_t dest_vrf;
uint32_t dest_vrf;

uint32_t component_nh_idx;

Expand All @@ -250,7 +250,7 @@ struct FlowData {
uint16_t drop_reason;
bool vrf_assign_evaluated;
bool pending_recompute;
uint16_t if_index_info;
uint32_t if_index_info;
TunnelInfo tunnel_info;
// map for references to the routes which were ignored due to more specific
// route this will be used to trigger flow re-compute to use more specific
Expand Down
8 changes: 4 additions & 4 deletions src/vnsw/agent/pkt/pkt_flow_info.h
Expand Up @@ -31,7 +31,7 @@ struct PktControlInfo {
bool vlan_nh_;
uint16_t vlan_tag_;
// The NH-ID field used as key in the flow
uint16_t nh_;
uint32_t nh_;
};

class PktFlowInfo {
Expand Down Expand Up @@ -115,14 +115,14 @@ class PktFlowInfo {
uint32_t nat_sport;
uint32_t nat_dport;
// VRF for matching the NAT flow
uint16_t nat_vrf;
uint32_t nat_vrf;
// Modified VRF for the NAT flow
// After flow processing, packet is assigned this VRF
uint16_t nat_dest_vrf;
uint32_t nat_dest_vrf;

// Modified VRF for the forward flow
// After flow processing, packet is assigned this VRF
uint16_t dest_vrf;
uint32_t dest_vrf;

// Intermediate fields used in creating flows
const AclDBEntry *acl;
Expand Down
2 changes: 1 addition & 1 deletion src/vnsw/agent/pkt/pkt_handler.cc
Expand Up @@ -787,7 +787,7 @@ bool PktHandler::IsGwPacket(const Interface *intf, const IpAddress &dst_ip) {
return false;
}

bool PktHandler::IsValidInterface(uint16_t ifindex, Interface **interface) {
bool PktHandler::IsValidInterface(uint32_t ifindex, Interface **interface) {
Interface *intf = agent_->interface_table()->FindInterface(ifindex);
if (intf == NULL) {
PKT_TRACE(Err, "Invalid interface index <" << ifindex << ">");
Expand Down
10 changes: 5 additions & 5 deletions src/vnsw/agent/pkt/pkt_handler.h
Expand Up @@ -123,24 +123,24 @@ struct AgentHdr {
ifindex(-1), vrf(-1), cmd(-1), cmd_param(-1), cmd_param_1(-1),
nh(-1), flow_index(-1), mtu(0) {}

AgentHdr(uint16_t ifindex_p, uint16_t vrf_p, uint16_t cmd_p) :
AgentHdr(uint32_t ifindex_p, uint32_t vrf_p, uint16_t cmd_p) :
ifindex(ifindex_p), vrf(vrf_p), cmd(cmd_p), cmd_param(-1),
cmd_param_1(-1), nh(-1), flow_index(-1), mtu(0) {}

AgentHdr(uint16_t ifindex_p, uint16_t vrf_p, uint16_t cmd_p,
AgentHdr(uint32_t ifindex_p, uint32_t vrf_p, uint16_t cmd_p,
uint32_t param1, uint32_t param2) :
ifindex(ifindex_p), vrf(vrf_p), cmd(cmd_p), cmd_param(param1),
cmd_param_1(param2), nh(-1), flow_index(-1), mtu(0) {}

~AgentHdr() {}

// Fields from agent_hdr
uint16_t ifindex;
uint32_t ifindex;
uint32_t vrf;
uint16_t cmd;
uint32_t cmd_param;
uint32_t cmd_param_1;
uint16_t nh;
uint32_t nh;
uint32_t flow_index;
uint16_t mtu;
};
Expand Down Expand Up @@ -311,7 +311,7 @@ class PktHandler {

void SetOuterIp(PktInfo *pkt_info, uint8_t *pkt);
bool IsDHCPPacket(PktInfo *pkt_info);
bool IsValidInterface(uint16_t ifindex, Interface **interface);
bool IsValidInterface(uint32_t ifindex, Interface **interface);
bool IsToRDevice(uint32_t vrf_id, const IpAddress &ip);
bool IsManagedTORPacket(Interface *intf, PktInfo *pkt_info,
PktType::Type &pkt_type, uint8_t *pkt);
Expand Down
6 changes: 3 additions & 3 deletions src/vnsw/agent/pkt/proto_handler.cc
Expand Up @@ -22,12 +22,12 @@ uint32_t ProtoHandler::EncapHeaderLen() const {
}

// send packet to the pkt0 interface
void ProtoHandler::Send(uint16_t itf, uint16_t vrf, uint16_t cmd,
void ProtoHandler::Send(uint32_t itf, uint32_t vrf, uint16_t cmd,
PktHandler::PktModuleName mod) {
Send(itf, vrf, cmd, 0, 0, mod);
}

void ProtoHandler::Send(uint16_t itf, uint16_t vrf, uint16_t cmd,
void ProtoHandler::Send(uint32_t itf, uint32_t vrf, uint16_t cmd,
uint32_t param1, uint32_t param2,
PktHandler::PktModuleName mod) {
// If pkt_info_->pkt is non-NULL, pkt is freed in destructor of pkt_info_
Expand Down Expand Up @@ -85,7 +85,7 @@ int ProtoHandler::EthHdr(char *buff, uint16_t len, const Interface *interface,
return EthHdr(buff, len, src, dest, proto, vlan_id);
}

int ProtoHandler::EthHdr(char *buff, uint16_t len, uint16_t ifindex,
int ProtoHandler::EthHdr(char *buff, uint16_t len, uint32_t ifindex,
const MacAddress &src, const MacAddress &dest,
const uint16_t proto) {
const Interface *intf = agent()->interface_table()->FindInterface(ifindex);
Expand Down
21 changes: 11 additions & 10 deletions src/vnsw/agent/pkt/proto_handler.h
Expand Up @@ -33,8 +33,8 @@ class ProtoHandler {

virtual bool Run() = 0;

void Send(uint16_t, uint16_t, uint16_t, PktHandler::PktModuleName);
void Send(uint16_t itf, uint16_t vrf, uint16_t cmd,
void Send(uint32_t itf, uint32_t vrf, uint16_t, PktHandler::PktModuleName);
void Send(uint32_t itf, uint32_t vrf, uint16_t cmd,
uint32_t param1, uint32_t param2, PktHandler::PktModuleName mod);

int EthHdr(const MacAddress &src, const MacAddress &dest,
Expand All @@ -44,22 +44,23 @@ class ProtoHandler {
int EthHdr(char *buff, uint16_t len, const Interface *interface,
const MacAddress &src, const MacAddress &dest,
const uint16_t proto);
int EthHdr(char *buff, uint16_t len, uint16_t ifindex,
int EthHdr(char *buff, uint16_t len, uint32_t ifindex,
const MacAddress &src, const MacAddress &dest,
const uint16_t proto);

void VlanHdr(uint8_t *ptr, uint16_t tci);
void IpHdr(uint16_t, in_addr_t, in_addr_t, uint8_t,
void IpHdr(uint16_t len, in_addr_t src, in_addr_t dest, uint8_t protocol,
uint16_t id, uint8_t ttl);
uint16_t IpHdr(char *, uint16_t, uint16_t, in_addr_t, in_addr_t,
uint8_t, uint16_t id, uint8_t ttl);
uint16_t IpHdr(char *buff, uint16_t buf_len, uint16_t len, in_addr_t src,
in_addr_t dest, uint8_t protocol, uint16_t id, uint8_t ttl);
void Ip6Hdr(ip6_hdr *ip, uint16_t plen, uint8_t next_header,
uint8_t hlim, uint8_t *src, uint8_t *dest);
void UdpHdr(uint16_t, in_addr_t, uint16_t, in_addr_t, uint16_t);
void UdpHdr(uint16_t len, in_addr_t src, uint16_t src_port, in_addr_t dest,
uint16_t dest_port);
void UdpHdr(uint16_t len, const uint8_t *src, uint16_t src_port,
const uint8_t *dest, uint16_t dest_port, uint8_t next_hdr);
uint16_t UdpHdr(udphdr *, uint16_t, uint16_t, in_addr_t, uint16_t,
in_addr_t, uint16_t);
uint16_t UdpHdr(udphdr *udp, uint16_t buf_len, uint16_t len, in_addr_t src,
uint16_t src_port, in_addr_t dest, uint16_t dest_port);
uint16_t IcmpHdr(char *buff, uint16_t buf_len, uint8_t type, uint8_t code,
uint16_t word1, uint16_t word2);
void IcmpChecksum(char *buff, uint16_t buf_len);
Expand All @@ -74,7 +75,7 @@ class ProtoHandler {

Agent *agent() { return agent_; }
uint32_t GetVrfIndex() const { return pkt_info_->GetAgentHdr().vrf; }
uint16_t GetInterfaceIndex() const {
uint32_t GetInterfaceIndex() const {
return pkt_info_->GetAgentHdr().ifindex;
}
uint16_t GetLength() const { return pkt_info_->len; }
Expand Down
14 changes: 7 additions & 7 deletions src/vnsw/agent/pkt/test/test_flowtable.cc
Expand Up @@ -15,23 +15,23 @@ const std::string svn_name("svn");
const std::string dvn_name("dvn");

struct TestFlowKey {
uint16_t vrfid_;
uint32_t vrfid_;
const char *sip_;
const char *dip_;
uint8_t proto_;
uint16_t sport_;
uint16_t dport_;
const std::string *svn_;
const std::string *dvn_;
uint16_t ifindex_;
uint16_t vn_;
uint16_t vm_;
uint32_t ifindex_;
uint32_t vn_;
uint32_t vm_;
uint32_t nh_;

TestFlowKey(uint16_t vrf, const char *sip, const char *dip, uint8_t proto,
TestFlowKey(uint32_t vrf, const char *sip, const char *dip, uint8_t proto,
uint16_t sport, uint16_t dport, const std::string &svn,
const std::string &dvn, uint16_t ifindex, uint16_t vn,
uint16_t vm, uint32_t nh) :
const std::string &dvn, uint32_t ifindex, uint32_t vn,
uint32_t vm, uint32_t nh) :
vrfid_(vrf), sip_(sip), dip_(dip), proto_(proto), sport_(sport),
dport_(dport), svn_(&svn), dvn_(&dvn), ifindex_(ifindex), vn_(vn),
vm_(vm), nh_(nh) {
Expand Down
2 changes: 1 addition & 1 deletion src/vnsw/agent/pkt/test/test_pkt_flow.cc
Expand Up @@ -16,7 +16,7 @@ void RouterIdDepInit(Agent *agent) {
}

struct TestFlowKey {
uint16_t vrfid_;
uint32_t vrfid_;
const char *sip_;
const char *dip_;
uint8_t proto_;
Expand Down
2 changes: 1 addition & 1 deletion src/vnsw/agent/services/arp_handler.cc
Expand Up @@ -312,7 +312,7 @@ uint16_t ArpHandler::ArpHdr(const MacAddress &smac, in_addr_t sip,

void ArpHandler::SendArp(uint16_t op, const MacAddress &smac, in_addr_t sip,
const MacAddress &tmac, in_addr_t tip,
uint16_t itf, uint16_t vrf) {
uint32_t itf, uint32_t vrf) {

if (pkt_info_->packet_buffer() == NULL) {
pkt_info_->AllocPacketBuffer(agent(), PktHandler::ARP, ARP_TX_BUFF_LEN,
Expand Down
6 changes: 3 additions & 3 deletions src/vnsw/agent/services/arp_handler.h
Expand Up @@ -21,16 +21,16 @@ class ArpHandler : public ProtoHandler {
bool Run();
void SendArp(uint16_t op, const MacAddress &smac, in_addr_t sip,
const MacAddress &tmac, in_addr_t tip,
uint16_t itf, uint16_t vrf);
uint32_t itf, uint32_t vrf);
friend void intrusive_ptr_add_ref(const ArpHandler *p);
friend void intrusive_ptr_release(const ArpHandler *p);

private:
bool HandlePacket();
bool HandleMessage();
void EntryDelete(ArpKey &key);
uint16_t ArpHdr(const MacAddress &, in_addr_t, const MacAddress &,
in_addr_t, uint16_t);
uint16_t ArpHdr(const MacAddress &smac, in_addr_t sip,
const MacAddress &tmac, in_addr_t tip, uint16_t op);

ether_arp *arp_;
in_addr_t arp_tpa_;
Expand Down
6 changes: 3 additions & 3 deletions src/vnsw/agent/services/arp_proto.h
Expand Up @@ -94,14 +94,14 @@ class ArpProto : public Proto {
const InterfaceArpMap& interface_arp_map() { return interface_arp_map_; }

Interface *ip_fabric_interface() const { return ip_fabric_interface_; }
uint16_t ip_fabric_interface_index() const {
uint32_t ip_fabric_interface_index() const {
return ip_fabric_interface_index_;
}
const MacAddress &ip_fabric_interface_mac() const {
return ip_fabric_interface_mac_;
}
void set_ip_fabric_interface(Interface *itf) { ip_fabric_interface_ = itf; }
void set_ip_fabric_interface_index(uint16_t ind) {
void set_ip_fabric_interface_index(uint32_t ind) {
ip_fabric_interface_index_ = ind;
}
void set_ip_fabric_interface_mac(const MacAddress &mac) {
Expand Down Expand Up @@ -171,7 +171,7 @@ class ArpProto : public Proto {
ArpCache arp_cache_;
ArpStats arp_stats_;
bool run_with_vrouter_;
uint16_t ip_fabric_interface_index_;
uint32_t ip_fabric_interface_index_;
MacAddress ip_fabric_interface_mac_;
Interface *ip_fabric_interface_;
ArpEntry *gratuitous_arp_entry_;
Expand Down
4 changes: 2 additions & 2 deletions src/vnsw/agent/services/dhcp_handler.cc
Expand Up @@ -1021,9 +1021,9 @@ void DhcpHandler::SendDhcpResponse() {
UpdateStats();

FillDhcpResponse(dest_mac, src_ip, dest_ip, siaddr, yiaddr);
uint16_t interface =
uint32_t interface =
(pkt_info_->agent_hdr.cmd == AgentHdr::TRAP_TOR_CONTROL_PKT) ?
(uint16_t)pkt_info_->agent_hdr.cmd_param : GetInterfaceIndex();
pkt_info_->agent_hdr.cmd_param : GetInterfaceIndex();
uint16_t command =
(pkt_info_->agent_hdr.cmd == AgentHdr::TRAP_TOR_CONTROL_PKT) ?
(uint16_t)AgentHdr::TX_ROUTE : AgentHdr::TX_SWITCH;
Expand Down
6 changes: 3 additions & 3 deletions src/vnsw/agent/services/dhcp_proto.h
Expand Up @@ -67,10 +67,10 @@ class DhcpProto : public Proto {

Interface *ip_fabric_interface() const { return ip_fabric_interface_; }
void set_ip_fabric_interface(Interface *itf) { ip_fabric_interface_ = itf; }
uint16_t ip_fabric_interface_index() const {
uint32_t ip_fabric_interface_index() const {
return ip_fabric_interface_index_;
}
void set_ip_fabric_interface_index(uint16_t ind) {
void set_ip_fabric_interface_index(uint32_t ind) {
ip_fabric_interface_index_ = ind;
}
const MacAddress &ip_fabric_interface_mac() const {
Expand Down Expand Up @@ -102,7 +102,7 @@ class DhcpProto : public Proto {
bool run_with_vrouter_;
bool dhcp_relay_mode_;
Interface *ip_fabric_interface_;
uint16_t ip_fabric_interface_index_;
uint32_t ip_fabric_interface_index_;
MacAddress ip_fabric_interface_mac_;
DBTableBase::ListenerId iid_;
DhcpStats stats_;
Expand Down
4 changes: 2 additions & 2 deletions src/vnsw/agent/services/dhcpv6_handler.cc
Expand Up @@ -636,9 +636,9 @@ void Dhcpv6Handler::SendDhcpResponse() {
FillDhcpResponse(MacAddress(pkt_info_->eth->ether_shost),
config_.dns_addr.to_v6(),
pkt_info_->ip_saddr.to_v6());
uint16_t interface =
uint32_t interface =
(pkt_info_->agent_hdr.cmd == AgentHdr::TRAP_TOR_CONTROL_PKT) ?
(uint16_t)pkt_info_->agent_hdr.cmd_param : GetInterfaceIndex();
pkt_info_->agent_hdr.cmd_param : GetInterfaceIndex();
uint16_t command =
(pkt_info_->agent_hdr.cmd == AgentHdr::TRAP_TOR_CONTROL_PKT) ?
(uint16_t)AgentHdr::TX_ROUTE : AgentHdr::TX_SWITCH;
Expand Down
4 changes: 2 additions & 2 deletions src/vnsw/agent/services/dns_handler.cc
Expand Up @@ -804,9 +804,9 @@ void DnsHandler::SendDnsResponse() {
(agent()->interface_table()->FindActiveEntry(&key));
if (pkt_itf) {
UpdateStats();
uint16_t interface =
uint32_t interface =
(pkt_info_->agent_hdr.cmd == AgentHdr::TRAP_TOR_CONTROL_PKT) ?
(uint16_t)pkt_info_->agent_hdr.cmd_param : GetInterfaceIndex();
pkt_info_->agent_hdr.cmd_param : GetInterfaceIndex();
uint16_t command =
(pkt_info_->agent_hdr.cmd == AgentHdr::TRAP_TOR_CONTROL_PKT) ?
(uint16_t)AgentHdr::TX_ROUTE : AgentHdr::TX_SWITCH;
Expand Down

0 comments on commit 2b75e9e

Please sign in to comment.