Skip to content

Commit

Permalink
Adding Agent support for Address Aliasing
Browse files Browse the repository at this point in the history
Intial support for address Aliasing

Closes-Bug: 1572502
Change-Id: Iae7f0f34fcf61ea098fb1e5d6f396f6a42fcc5e7
  • Loading branch information
Prabhjot Singh Sethi committed Jun 24, 2016
1 parent a7b6913 commit 1145b75
Show file tree
Hide file tree
Showing 17 changed files with 1,095 additions and 13 deletions.
12 changes: 12 additions & 0 deletions src/ifmap/ifmap_graph_walker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -347,12 +347,14 @@ void IFMapGraphWalker::AddNodesToWhitelist() {
traversal_white_list_->include_vertex.insert("instance-ip");
traversal_white_list_->include_vertex.insert("virtual-network");
traversal_white_list_->include_vertex.insert("floating-ip");
traversal_white_list_->include_vertex.insert("alias-ip");
traversal_white_list_->include_vertex.insert("customer-attachment");
traversal_white_list_->include_vertex.insert(
"virtual-machine-interface-routing-instance");
traversal_white_list_->include_vertex.insert("physical-interface");
traversal_white_list_->include_vertex.insert("domain");
traversal_white_list_->include_vertex.insert("floating-ip-pool");
traversal_white_list_->include_vertex.insert("alias-ip-pool");
traversal_white_list_->include_vertex.insert("logical-interface");
traversal_white_list_->include_vertex.insert(
"virtual-network-network-ipam");
Expand Down Expand Up @@ -405,6 +407,8 @@ void IFMapGraphWalker::AddLinksToWhitelist() {
"source=virtual-machine-interface,target=security-group");
traversal_white_list_->include_edge.insert(
"source=virtual-machine-interface,target=floating-ip");
traversal_white_list_->include_edge.insert(
"source=virtual-machine-interface,target=alias-ip");
traversal_white_list_->include_edge.insert(
"source=virtual-machine-interface,target=customer-attachment");
traversal_white_list_->include_edge.insert(
Expand All @@ -425,6 +429,8 @@ void IFMapGraphWalker::AddLinksToWhitelist() {
"source=service-template,target=domain");
traversal_white_list_->include_edge.insert(
"source=virtual-network,target=floating-ip-pool");
traversal_white_list_->include_edge.insert(
"source=virtual-network,target=alias-ip-pool");
traversal_white_list_->include_edge.insert(
"source=virtual-network,target=virtual-network-network-ipam");
traversal_white_list_->include_edge.insert(
Expand All @@ -448,6 +454,8 @@ void IFMapGraphWalker::AddLinksToWhitelist() {
// IFMapGraphTraversalFilterCalculator
traversal_white_list_->include_edge.insert(
"source=floating-ip,target=floating-ip-pool");
traversal_white_list_->include_edge.insert(
"source=alias-ip,target=alias-ip-pool");
traversal_white_list_->include_edge.insert(
"source=virtual-machine-interface-routing-instance,target=routing-instance");
// VDNS needs dns/dhcp info from IPAM and FQN from Domain.
Expand All @@ -457,6 +465,10 @@ void IFMapGraphWalker::AddLinksToWhitelist() {
// getting the pool from. EG: public-network (might not have any VMs)
traversal_white_list_->include_edge.insert(
"source=floating-ip-pool,target=virtual-network");
// Need this to get from alias-ip-pool to the virtual-network we are
// getting the pool from. since alias ip network might not have any VMs
traversal_white_list_->include_edge.insert(
"source=alias-ip-pool,target=virtual-network");
traversal_white_list_->include_edge.insert(
"source=virtual-machine-interface,target=service-health-check");
traversal_white_list_->include_edge.insert(
Expand Down
8 changes: 8 additions & 0 deletions src/vnsw/agent/cfg/cfg_init.cc
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,18 @@ void AgentConfig::RegisterDBClients(DB *db) {
(IFMapTable::FindTable(agent_->db(), "floating-ip")));
assert(cfg_floatingip_table_);

cfg_aliasip_table_ = (static_cast<IFMapAgentTable *>
(IFMapTable::FindTable(agent_->db(), "alias-ip")));
assert(cfg_aliasip_table_);

cfg_floatingip_pool_table_ = (static_cast<IFMapAgentTable *>
(IFMapTable::FindTable(agent_->db(), "floating-ip-pool")));
assert(cfg_floatingip_pool_table_);

cfg_aliasip_pool_table_ = (static_cast<IFMapAgentTable *>
(IFMapTable::FindTable(agent_->db(), "alias-ip-pool")));
assert(cfg_aliasip_pool_table_);

cfg_network_ipam_table_ = (static_cast<IFMapAgentTable *>
(IFMapTable::FindTable(agent_->db(), "network-ipam")));
assert(cfg_network_ipam_table_);
Expand Down
8 changes: 8 additions & 0 deletions src/vnsw/agent/cfg/cfg_init.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,15 @@ class AgentConfig {
IFMapAgentTable *cfg_floatingip_table() const {
return cfg_floatingip_table_;
}
IFMapAgentTable *cfg_aliasip_table() const {
return cfg_aliasip_table_;
}
IFMapAgentTable *cfg_floatingip_pool_table() const {
return cfg_floatingip_pool_table_;
}
IFMapAgentTable *cfg_aliasip_pool_table() const {
return cfg_aliasip_pool_table_;
}
IFMapAgentTable *cfg_network_ipam_table() const {
return cfg_network_ipam_table_;
}
Expand Down Expand Up @@ -136,7 +142,9 @@ class AgentConfig {
IFMapAgentTable *cfg_vrf_table_;
IFMapAgentTable *cfg_instanceip_table_;
IFMapAgentTable *cfg_floatingip_table_;
IFMapAgentTable *cfg_aliasip_table_;
IFMapAgentTable *cfg_floatingip_pool_table_;
IFMapAgentTable *cfg_aliasip_pool_table_;
IFMapAgentTable *cfg_network_ipam_table_;
IFMapAgentTable *cfg_vn_network_ipam_table_;
IFMapAgentTable *cfg_vm_port_vrf_table_;
Expand Down
10 changes: 10 additions & 0 deletions src/vnsw/agent/oper/agent.sandesh
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,15 @@ struct FloatingIpSandeshList {
4: string fixed_ip;
}

/**
* Sandesh definition for alias ip entry in oper db
*/
struct AliasIpSandeshList {
1: string ip_addr;
2: string vrf_name (link="VrfListReq"); // VRF name
3: string installed;
}

/**
* Sandesh defenition for static route entry in oper db
*/
Expand Down Expand Up @@ -152,6 +161,7 @@ struct ItfSandeshData {
54: optional string metadata_ip_active;
55: optional string service_health_check_ip;
56: optional string qos_config; //QOS config uuid
57: list<AliasIpSandeshList> alias_ip_list;// Alias IP List
}

/**
Expand Down
9 changes: 9 additions & 0 deletions src/vnsw/agent/oper/ifmap_dependency_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ IFMapDependencyManager::~IFMapDependencyManager() {
void IFMapDependencyManager::Initialize(Agent *agent) {
static const char *ifmap_types[] = {
"access-control-list",
"alias-ip",
"alias-ip-pool",
"bgp-as-a-service",
"bgp-router",
"floating-ip",
Expand Down Expand Up @@ -622,6 +624,13 @@ void IFMapDependencyManager::InitializeDependencyRules(Agent *agent) {
AddDependencyPath("virtual-machine-interface",
MakePath("virtual-machine-interface-security-group",
"security-group", true));
AddDependencyPath("virtual-machine-interface",
MakePath("alias-ip-virtual-machine-interface",
"alias-ip", true,
"alias-ip-pool-alias-ip",
"alias-ip-pool", false,
"virtual-network-alias-ip-pool",
"virtual-network", true));
AddDependencyPath("virtual-machine-interface",
MakePath("floating-ip-virtual-machine-interface",
"floating-ip", true,
Expand Down
24 changes: 24 additions & 0 deletions src/vnsw/agent/oper/interface.cc
Original file line number Diff line number Diff line change
Expand Up @@ -885,6 +885,30 @@ void Interface::SetItfSandeshData(ItfSandeshData &data) const {
it++;
}
data.set_fip_list(fip_list);

std::vector<AliasIpSandeshList> aip_list;
VmInterface::AliasIpSet::const_iterator a_it =
vintf->alias_ip_list().list_.begin();
while (a_it != vintf->alias_ip_list().list_.end()) {
const VmInterface::AliasIp &ip = *a_it;
AliasIpSandeshList entry;
entry.set_ip_addr(ip.alias_ip_.to_string());
if (ip.vrf_.get()) {
entry.set_vrf_name(ip.vrf_.get()->GetName());
} else {
entry.set_vrf_name("--ERROR--");
}

if (ip.installed_) {
entry.set_installed("Y");
} else {
entry.set_installed("N");
}
aip_list.push_back(entry);
a_it++;
}
data.set_alias_ip_list(aip_list);

data.set_logical_interface_uuid(to_string(vintf->logical_interface()));

// Add Service VLAN list
Expand Down

0 comments on commit 1145b75

Please sign in to comment.