diff --git a/core/src/com/cloud/vm/DomainRouterVO.java b/core/src/com/cloud/vm/DomainRouterVO.java
index d6e0153672b..b34bf0d15f7 100755
--- a/core/src/com/cloud/vm/DomainRouterVO.java
+++ b/core/src/com/cloud/vm/DomainRouterVO.java
@@ -36,6 +36,9 @@ import com.cloud.network.router.VirtualRouter;
@PrimaryKeyJoinColumn(name="id")
@DiscriminatorValue(value="DomainRouter")
public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
+ @Column(name="element_id")
+ private long elementId;
+
@Column(name="public_ip_address")
private String publicIpAddress;
@@ -79,6 +82,7 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
public DomainRouterVO(long id,
long serviceOfferingId,
+ long elementId,
String name,
long templateId,
HypervisorType hypervisorType,
@@ -90,9 +94,9 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
int priority,
boolean isPriorityBumpUp,
RedundantState redundantState,
- boolean haEnabled,
- boolean stopPending) {
+ boolean haEnabled, boolean stopPending) {
super(id, serviceOfferingId, name, name, Type.DomainRouter, templateId, hypervisorType, guestOSId, domainId, accountId, haEnabled);
+ this.elementId = elementId;
this.networkId = networkId;
this.isRedundantRouter = isRedundantRouter;
this.priority = priority;
@@ -103,6 +107,7 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
public DomainRouterVO(long id,
long serviceOfferingId,
+ long elementId,
String name,
long templateId,
HypervisorType hypervisorType,
@@ -115,9 +120,9 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
boolean isPriorityBumpUp,
RedundantState redundantState,
boolean haEnabled,
- boolean stopPending,
- VirtualMachine.Type vmType) {
+ boolean stopPending, VirtualMachine.Type vmType) {
super(id, serviceOfferingId, name, name, vmType, templateId, hypervisorType, guestOSId, domainId, accountId, haEnabled);
+ this.elementId = elementId;
this.networkId = networkId;
this.isRedundantRouter = isRedundantRouter;
this.priority = priority;
@@ -126,6 +131,10 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
this.stopPending = stopPending;
}
+ public long getElementId() {
+ return elementId;
+ }
+
public void setPublicIpAddress(String publicIpAddress) {
this.publicIpAddress = publicIpAddress;
}
diff --git a/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java b/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java
new file mode 100644
index 00000000000..648ddae1a9f
--- /dev/null
+++ b/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+package com.cloud.network.dao;
+
+import java.util.List;
+
+import com.cloud.network.element.VirtualRouterElementsVO;
+import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType;
+import com.cloud.utils.db.GenericDao;
+
+public interface VirtualRouterElementsDao extends GenericDao {
+ public List findByNspIdAndType(long nspId, VirtualRouterElementsType type);
+ public VirtualRouterElementsVO findByUUID(String uuid);
+}
diff --git a/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java b/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java
new file mode 100644
index 00000000000..93972ef4830
--- /dev/null
+++ b/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved.
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+package com.cloud.network.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.network.element.VirtualRouterElementsVO;
+import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+
+@Local(value=VirtualRouterElementsDao.class) @DB(txn=false)
+public class VirtualRouterElementsDaoImpl extends GenericDaoBase implements VirtualRouterElementsDao {
+ final SearchBuilder AllFieldsSearch;
+
+ public VirtualRouterElementsDaoImpl() {
+ super();
+ AllFieldsSearch = createSearchBuilder();
+ AllFieldsSearch.and("nsp_id", AllFieldsSearch.entity().getNspId(), SearchCriteria.Op.EQ);
+ AllFieldsSearch.and("uuid", AllFieldsSearch.entity().getUUID(), SearchCriteria.Op.EQ);
+ AllFieldsSearch.and("type", AllFieldsSearch.entity().getType(), SearchCriteria.Op.EQ);
+ AllFieldsSearch.done();
+ }
+
+ @Override
+ public List findByNspIdAndType(long nspId, VirtualRouterElementsType type) {
+ SearchCriteria sc = AllFieldsSearch.create();
+ sc.setParameters("nsp_id", nspId);
+ sc.setParameters("type", type);
+ return listBy(sc);
+ }
+
+ @Override
+ public VirtualRouterElementsVO findByUUID(String uuid) {
+ SearchCriteria sc = AllFieldsSearch.create();
+ sc.setParameters("uuid", uuid);
+ return findOneBy(sc);
+ }
+}
diff --git a/server/src/com/cloud/network/element/VirtualRouterElements.java b/server/src/com/cloud/network/element/VirtualRouterElements.java
new file mode 100644
index 00000000000..3cb21796808
--- /dev/null
+++ b/server/src/com/cloud/network/element/VirtualRouterElements.java
@@ -0,0 +1,28 @@
+/**
+ * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package com.cloud.network.element;
+
+public interface VirtualRouterElements {
+ public enum VirtualRouterElementsType {
+ DhcpElement,
+ VirtualRouterElement,
+ RedundantVirtualRouterElement,
+ }
+ public VirtualRouterElementsType getType();
+}
diff --git a/server/src/com/cloud/network/element/VirtualRouterElementsVO.java b/server/src/com/cloud/network/element/VirtualRouterElementsVO.java
new file mode 100644
index 00000000000..c2720748de5
--- /dev/null
+++ b/server/src/com/cloud/network/element/VirtualRouterElementsVO.java
@@ -0,0 +1,230 @@
+/**
+ * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+package com.cloud.network.element;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import com.cloud.utils.db.GenericDao;
+
+@Entity
+@Table(name=("virtual_router_elements"))
+public class VirtualRouterElementsVO implements VirtualRouterElements {
+ @Id
+ @GeneratedValue(strategy=GenerationType.IDENTITY)
+ @Column(name="id")
+ long id;
+
+ @Column(name="type")
+ @Enumerated(EnumType.STRING)
+ private VirtualRouterElementsType type;
+
+ @Column(name="ready")
+ private boolean isReady;
+
+ @Column(name="nsp_id")
+ private long nspId;
+
+ @Column(name="uuid")
+ private String uuid;
+
+ @Column(name="dhcp_provided")
+ private boolean isDhcpProvided;
+
+ @Column(name="dns_provided")
+ private boolean isDnsProvided;
+
+ @Column(name="gateway_provided")
+ private boolean isGatewayProvided;
+
+ @Column(name="firewall_provided")
+ private boolean isFirewallProvided;
+
+ @Column(name="source_nat_provided")
+ private boolean isSourceNatProvided;
+
+ @Column(name="load_balance_provided")
+ private boolean isLoadBalanceProvided;
+
+ @Column(name="vpn_provided")
+ private boolean isVpnProvided;
+
+ @Column(name="dhcp_range")
+ private String dhcpRange;
+
+ @Column(name="default_domain_name")
+ private String defaultDomainName;
+
+ @Column(name="dns1")
+ private String dns1;
+
+ @Column(name="dns2")
+ private String dns2;
+
+ @Column(name="internal_dns1")
+ private String internalDns1;
+
+ @Column(name="internal_dns2")
+ private String internalDns2;
+
+ @Column(name="gateway_ip")
+ private String gatewayIp;
+
+ @Column(name=GenericDao.REMOVED_COLUMN)
+ Date removed;
+
+ public VirtualRouterElementsVO(long nspId, String uuid, boolean isReady, VirtualRouterElementsType type, boolean isDhcpProvided, boolean isDnsProvided,
+ boolean isGatewayProvided, boolean isFirewallProvided, boolean isSourceNatProvided, boolean isLoadBalanceProvided, boolean isVpnProvided) {
+ this.nspId = nspId;
+ this.uuid = uuid;
+ this.isReady = isReady;
+ this.type = type;
+ this.isDhcpProvided = isDhcpProvided;
+ this.isDnsProvided = isDnsProvided;
+ this.isGatewayProvided = isGatewayProvided;
+ this.isFirewallProvided = isFirewallProvided;
+ this.isSourceNatProvided = isSourceNatProvided;
+ this.isLoadBalanceProvided = isLoadBalanceProvided;
+ this.isVpnProvided = isVpnProvided;
+ }
+
+ public long getNspId() {
+ return nspId;
+ }
+
+ public String getUUID() {
+ return uuid;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public String getDhcpRange() {
+ return dhcpRange;
+ }
+
+ public void setDhcpRange(String dhcpRange) {
+ this.dhcpRange = dhcpRange;
+ }
+
+ public String getDefaultDomainName() {
+ return defaultDomainName;
+ }
+
+ public void setDefaultDomainName(String defaultDomainName) {
+ this.defaultDomainName = defaultDomainName;
+ }
+
+ public String getDns1() {
+ return dns1;
+ }
+
+ public void setDns1(String dns1) {
+ this.dns1 = dns1;
+ }
+
+ public String getDns2() {
+ return dns2;
+ }
+
+ public void setDns2(String dns2) {
+ this.dns2 = dns2;
+ }
+
+ public String getInternalDns1() {
+ return internalDns1;
+ }
+
+ public void setInternalDns1(String internalDns1) {
+ this.internalDns1 = internalDns1;
+ }
+
+ public String getInternalDns2() {
+ return internalDns2;
+ }
+
+ public void setInternalDns2(String internalDns2) {
+ this.internalDns2 = internalDns2;
+ }
+
+ public boolean isDhcpProvided() {
+ return isDhcpProvided;
+ }
+
+ public boolean isDnsProvided() {
+ return isDnsProvided;
+ }
+
+ public boolean isGatewayProvided() {
+ return isGatewayProvided;
+ }
+
+ public boolean isFirewallProvided() {
+ return isFirewallProvided;
+ }
+
+ public boolean isSourceNatProvided() {
+ return isSourceNatProvided;
+ }
+
+ public boolean isLoadBalanceProvided() {
+ return isLoadBalanceProvided;
+ }
+
+ public boolean isVpnProvided() {
+ return isVpnProvided;
+ }
+
+ @Override
+ public VirtualRouterElementsType getType() {
+ return this.type;
+ }
+
+ public String getGatewayIp() {
+ return gatewayIp;
+ }
+
+ public void setGatewayIp(String gatewayIp) {
+ this.gatewayIp = gatewayIp;
+ }
+
+ public Date getRemoved() {
+ return removed;
+ }
+
+ public void setRemoved(Date removed) {
+ this.removed = removed;
+ }
+
+ public void setReady(boolean isReady) {
+ this.isReady = isReady;
+ }
+
+ public boolean isReady() {
+ return isReady;
+ }
+}
diff --git a/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
index 790bf05bd24..0fefd4de425 100644
--- a/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
+++ b/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
@@ -497,8 +497,8 @@ public class ElasticLoadBalancerManagerImpl implements
VMTemplateVO template = _templateDao.findSystemVMTemplate(dcId);
- elbVm = new DomainRouterVO(id, _elasticLbVmOffering.getId(), VirtualMachineName.getSystemVmName(id, _instance, _elbVmNamePrefix), template.getId(), template.getHypervisorType(), template.getGuestOSId(),
- owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, _elasticLbVmOffering.getOfferHA(), false, VirtualMachine.Type.ElasticLoadBalancerVm);
+ elbVm = new DomainRouterVO(id, _elasticLbVmOffering.getId(), 0, VirtualMachineName.getSystemVmName(id, _instance, _elbVmNamePrefix), template.getId(), template.getHypervisorType(),
+ template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, _elasticLbVmOffering.getOfferHA(), false, VirtualMachine.Type.ElasticLoadBalancerVm);
elbVm.setRole(Role.LB);
elbVm = _itMgr.allocate(elbVm, template, _elasticLbVmOffering, networks, plan, null, owner);
//TODO: create usage stats
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 8ed21ce4e43..f278ed10ac1 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1090,8 +1090,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
if (routers.size() >= 5) {
s_logger.error("Too much redundant routers!");
}
- router = new DomainRouterVO(id, _offering.getId(), VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(), template.getGuestOSId(),
- owner.getDomainId(), owner.getId(), guestNetwork.getId(), isRedundant, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false);
+ router = new DomainRouterVO(id, _offering.getId(), 0, VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(),
+ template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), isRedundant, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false);
router = _itMgr.allocate(router, template, _offering, networks, plan, null, owner);
// Creating stats entry for router
UserStatisticsVO stats = _userStatsDao.findBy(owner.getId(), dcId, router.getNetworkId(), null, router.getId(), router.getType().toString());
@@ -1275,8 +1275,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
/* Before starting router, already know the hypervisor type */
VMTemplateVO template = _templateDao.findRoutingTemplate(dest.getCluster().getHypervisorType());
- router = new DomainRouterVO(id, _offering.getId(), VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(), template.getGuestOSId(),
- owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false);
+ router = new DomainRouterVO(id, _offering.getId(), 0, VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(),
+ template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false);
router.setRole(Role.DHCP_USERDATA);
router = _itMgr.allocate(router, template, _offering, networks, plan, null, owner);
routers.add(router);
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index f76d564741c..ad6f682b1f1 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -118,6 +118,7 @@ DROP TABLE IF EXISTS `cloud`.`network_tags`;
DROP TABLE IF EXISTS `cloud`.`op_host_transfer`;
DROP TABLE IF EXISTS `cloud`.`projects`;
DROP TABLE IF EXISTS `cloud`.`physical_network`;
+DROP TABLE IF EXISTS `cloud`.`virtual_router_elements`;
CREATE TABLE `cloud`.`version` (
`id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
@@ -929,6 +930,7 @@ CREATE TABLE `cloud`.`user_vm_details` (
CREATE TABLE `cloud`.`domain_router` (
`id` bigint unsigned UNIQUE NOT NULL COMMENT 'Primary Key',
+ `element_id` bigint unsigned NOT NULL COMMENT 'correlated virtual router element ID',
`public_mac_address` varchar(17) COMMENT 'mac address of the public facing network card',
`public_ip_address` char(40) COMMENT 'public ip address used for source net',
`public_netmask` varchar(15) COMMENT 'netmask used for the domR',
@@ -945,6 +947,7 @@ CREATE TABLE `cloud`.`domain_router` (
`scripts_version` varchar(100) COMMENT 'scripts version',
PRIMARY KEY (`id`),
CONSTRAINT `fk_domain_router__id` FOREIGN KEY `fk_domain_router__id` (`id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE
+ #CONSTRAINT `fk_domain_router__element_id` FOREIGN KEY `fk_domain_router__element_id` (`element_id`) REFERENCES `virtual_router_elements`(`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8 COMMENT = 'information about the domR instance';
CREATE TABLE `cloud`.`upload` (
@@ -1724,6 +1727,32 @@ CREATE TABLE `cloud`.`elastic_lb_vm_map` (
CONSTRAINT `fk_elastic_lb_vm_map__lb_id` FOREIGN KEY `fk_elastic_lb_vm_map__lb_id` (`lb_id`) REFERENCES `load_balancing_rules` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `cloud`.`virtual_router_elements` (
+ `id` bigint unsigned NOT NULL auto_increment,
+ `nsp_id` bigint unsigned NOT NULL,
+ `uuid` varchar(255) UNIQUE,
+ `ready` int(1) NOT NULL,
+ `type` varchar(255) NOT NULL,
+ `dhcp_provided` int(1) NOT NULL,
+ `dns_provided` int(1) NOT NULL,
+ `gateway_provided` int(1) NOT NULL,
+ `firewall_provided` int(1) NOT NULL,
+ `source_nat_provided` int(1) NOT NULL,
+ `load_balance_provided` int(1) NOT NULL,
+ `vpn_provided` int(1) NOT NULL,
+ `service_offering_id` bigint unsigned NOT NULL,
+ `dhcp_range` varchar(255),
+ `default_domain_name` varchar(255),
+ `dns1` varchar(255),
+ `dns2` varchar(255),
+ `internal_dns1` varchar(255),
+ `internal_dns2` varchar(255),
+ `gateway_ip` varchar(255),
+ `removed` datetime COMMENT 'date removed if not null',
+ PRIMARY KEY (`id`),
+ CONSTRAINT `fk_virtual_router_elements__service_offering_id` FOREIGN KEY `fk_virtual_router_elements__service_offering_id` (`service_offering_id`) REFERENCES `service_offering`(`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
CREATE TABLE `ntwk_offering_service_map` (
`id` bigint unsigned NOT NULL auto_increment,