diff --git a/api/src/com/cloud/agent/api/to/FirewallRuleTO.java b/api/src/com/cloud/agent/api/to/FirewallRuleTO.java index 37d6ee4fad3..3d17b765dc7 100644 --- a/api/src/com/cloud/agent/api/to/FirewallRuleTO.java +++ b/api/src/com/cloud/agent/api/to/FirewallRuleTO.java @@ -17,23 +17,55 @@ */ package com.cloud.agent.api.to; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRule.State; + +/** + * FirewallRuleTO transfers a port range for an ip to be opened. + * + * There are essentially three states transferred with each state. + * 1. revoked - the rule has been revoked. A rule in this state may be + * sent multiple times to the destination. If the rule is not on + * the destination, the answer to a revoke rule should be successful. + * 2. alreadyAdded - the rule has been successfully added before. Rules + * in this state are sent for completeness and optomization. + * 3. neither - the rule is to be added but it might have been added before. + * If the rule already exists on the destination, the destination should + * reply the rule is successfully applied. + * + * As for the information carried, it is fairly straightforward: + * - srcIp: ip to be open the ports for. + * - srcPortRange: port range to open. + * - protocol: protocol to open for. Usually tcp and udp. + * - id: a unique id if the destination can use it to uniquly identify the rules. + * + */ public class FirewallRuleTO { + long id; String srcIp; String protocol; int[] srcPortRange; boolean revoked; - boolean brandNew; + boolean alreadyAdded; String vlanNetmask; // FIXME: Get rid of this! protected FirewallRuleTO() { } - public FirewallRuleTO(String srcIp, String protocol, int srcPortStart, int srcPortEnd, boolean revoked, boolean brandNew) { + public FirewallRuleTO(long id, String srcIp, String protocol, int srcPortStart, int srcPortEnd, boolean revoked, boolean alreadyAdded) { this.srcIp = srcIp; this.protocol = protocol; this.srcPortRange = new int[] {srcPortStart, srcPortEnd}; this.revoked = revoked; - this.brandNew = brandNew; + this.alreadyAdded = alreadyAdded; + } + + public FirewallRuleTO(FirewallRule rule) { + this(rule.getId(), rule.getSourceIpAddress().addr(), rule.getProtocol(), rule.getSourcePortStart(), rule.getSourcePortEnd(), rule.getState()==State.Revoke, rule.getState()==State.Active); + } + + public long getId() { + return id; } public String getSrcIp() { @@ -56,7 +88,7 @@ public class FirewallRuleTO { return vlanNetmask; } - public boolean isBrandNew() { - return brandNew; + public boolean isAlreadyAdded() { + return alreadyAdded; } } diff --git a/api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java b/api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java index d4ffdf31d01..63a4baa9932 100644 --- a/api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java +++ b/api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java @@ -17,9 +17,14 @@ */ package com.cloud.agent.api.to; -import com.cloud.network.rules.FirewallRule.State; import com.cloud.network.rules.PortForwardingRule; +/** + * PortForwardingRuleTO specifies one port forwarding rule. + * + * See FirewallRuleTO for the stuff. + * + */ public class PortForwardingRuleTO extends FirewallRuleTO { String dstIp; int[] dstPortRange; @@ -29,11 +34,13 @@ public class PortForwardingRuleTO extends FirewallRuleTO { } public PortForwardingRuleTO(PortForwardingRule rule) { - this(rule.getSourceIpAddress().addr(), rule.getSourcePortStart(), rule.getSourcePortEnd(), rule.getDestinationIpAddress().addr(), rule.getDestinationPortStart(), rule.getDestinationPortEnd(), rule.getProtocol(), rule.getState() == State.Revoke, rule.getState() == State.Add); + super(rule); + this.dstIp = rule.getDestinationIpAddress().addr(); + this.dstPortRange = new int[] { rule.getDestinationPortStart(), rule.getDestinationPortEnd() }; } - protected PortForwardingRuleTO(String srcIp, int srcPortStart, int srcPortEnd, String dstIp, int dstPortStart, int dstPortEnd, String protocol, boolean revoked, boolean brandNew) { - super(srcIp, protocol, srcPortStart, srcPortEnd, revoked, brandNew); + protected PortForwardingRuleTO(long id, String srcIp, int srcPortStart, int srcPortEnd, String dstIp, int dstPortStart, int dstPortEnd, String protocol, boolean revoked, boolean brandNew) { + super(id, srcIp, protocol, srcPortStart, srcPortEnd, revoked, brandNew); this.dstIp = dstIp; this.dstPortRange = new int[] { dstPortStart, dstPortEnd }; } diff --git a/api/src/com/cloud/dc/DataCenter.java b/api/src/com/cloud/dc/DataCenter.java index 5feee19828e..f43d20a1da9 100644 --- a/api/src/com/cloud/dc/DataCenter.java +++ b/api/src/com/cloud/dc/DataCenter.java @@ -31,5 +31,7 @@ public interface DataCenter extends Grouping { String getFirewallProvider(); String getDhcpProvider(); String getLoadBalancerProvider(); + String getUserDataProvider(); + String getVpnProvider(); } diff --git a/server/src/com/cloud/dc/DataCenterVO.java b/server/src/com/cloud/dc/DataCenterVO.java index d2866143c52..80bda046b4a 100644 --- a/server/src/com/cloud/dc/DataCenterVO.java +++ b/server/src/com/cloud/dc/DataCenterVO.java @@ -27,6 +27,8 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.TableGenerator; + +import com.cloud.network.service.Providers; @Entity @Table(name="data_center") @@ -83,6 +85,22 @@ public class DataCenterVO implements DataCenter { @Column(name="gateway_provider") private String gatewayProvider = "VirtualRouter"; + @Column(name="vpn_provider") + private String vpnProvider; + + @Column(name="userdata_provider") + private String userDataProvider; + + @Column(name="lb_provider") + private String loadBalancerProvider; + + @Column(name="firewall_provider") + private String firewallProvider; + + @Column(name="mac_address", updatable = false, nullable=false) + @TableGenerator(name="mac_address_sq", table="data_center", pkColumnName="id", valueColumnName="mac_address", allocationSize=1) + private long macAddress = 1; + @Override public String getDnsProvider() { return dnsProvider; @@ -121,23 +139,13 @@ public class DataCenterVO implements DataCenter { @Override public String getFirewallProvider() { - return firewallProvider; + return firewallProvider; } public void setFirewallProvider(String firewallProvider) { this.firewallProvider = firewallProvider; } - @Column(name="lb_provider") - private String loadBalancerProvider = "VirtualRouter"; - - @Column(name="firewall_provider") - private String firewallProvider = "VirtualRouter"; - - @Column(name="mac_address", updatable = false, nullable=false) - @TableGenerator(name="mac_address_sq", table="data_center", pkColumnName="id", valueColumnName="mac_address", allocationSize=1) - private long macAddress = 1; - public DataCenterVO(long id, String name, String description, String dns1, String dns2, String dns3, String dns4, String vnet, String guestCidr, String domain, Long domainId, DataCenterNetworkType zoneType) { this(name, description, dns1, dns2, dns3, dns4, vnet, guestCidr, domain, domainId, zoneType); this.id = id; @@ -155,8 +163,33 @@ public class DataCenterVO implements DataCenter { this.domain = domain; this.domainId = domainId; this.networkType = zoneType; + loadBalancerProvider = Providers.VirtualRouter; + firewallProvider = Providers.VirtualRouter; + dhcpProvider = Providers.VirtualRouter; + dnsProvider = Providers.VirtualRouter; + gatewayProvider = Providers.VirtualRouter; + vpnProvider = Providers.VirtualRouter; + userDataProvider = Providers.VirtualRouter; } + @Override + public String getVpnProvider() { + return vpnProvider; + } + + public void setVpnProvider(String vpnProvider) { + this.vpnProvider = vpnProvider; + } + + @Override + public String getUserDataProvider() { + return userDataProvider; + } + + public void setUserDataProvider(String userDataProvider) { + this.userDataProvider = userDataProvider; + } + @Override public Long getDomainId() { return domainId; diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 1cf70197ab1..f8ae766a75f 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -394,6 +394,7 @@ CREATE TABLE `cloud`.`data_center` ( `dhcp_provider` char(64) NOT NULL DEFAULT 'VirtualRouter', `lb_provider` char(64) NOT NULL DEFAULT 'VirtualRouter', `vpn_provider` char(64) NOT NULL DEFAULT 'VirtualRouter', + `userdata_provider` char(64) NOT NULL DEFAULT 'VirtualRouter', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;