diff --git a/api/src/com/cloud/agent/api/NetworkUsageCommand.java b/api/src/com/cloud/agent/api/NetworkUsageCommand.java index 4121b8a51bb..6c4152af62d 100644 --- a/api/src/com/cloud/agent/api/NetworkUsageCommand.java +++ b/api/src/com/cloud/agent/api/NetworkUsageCommand.java @@ -33,6 +33,7 @@ public class NetworkUsageCommand extends Command { this.domRName = domRName; this.forVpc = forVpc; this.guestNic = guestNic; + this.option = "get"; } public NetworkUsageCommand(String privateIP, String domRName, String option, boolean forVpc) diff --git a/core/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java b/core/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java index e16e1083118..7edc74212c5 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java +++ b/core/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java @@ -160,10 +160,52 @@ public class XenServer56Resource extends CitrixResourceBase { return callHostPlugin(conn, "vmops", "routerProxy", "args", args); } + protected NetworkUsageAnswer VPCNetworkUsage(NetworkUsageCommand cmd) { + try { + Connection conn = getConnection(); + String option = cmd.getOption(); + String guestIp = cmd.getGuestNic().getIp(); + + String args = "vpc_netusage.sh " + cmd.getPrivateIP() + " "; + if (option.equals("get")) { + args += "-g"; + args += " -l " + guestIp; + } else if (option.equals("create")) { + args += "-c"; + } else if (option.equals("reset")) { + args += "-r"; + args += " -l " + guestIp; + } else { + return new NetworkUsageAnswer(cmd, "success", 0L, 0L); + } + + String result = callHostPlugin(conn, "vmops", "routerProxy", "args", args); + if (option.equals("get")) { + long[] stats = new long[2]; + if (result != null) { + String[] splitResult = result.split(":"); + int i = 0; + while (i < splitResult.length - 1) { + stats[0] += (new Long(splitResult[i++])).longValue(); + stats[1] += (new Long(splitResult[i++])).longValue(); + } + return new NetworkUsageAnswer(cmd, "success", stats[0], stats[1]); + } + } + if (result == null || result.isEmpty()) { + throw new Exception(" vpc network usage plugin call failed "); + } + return new NetworkUsageAnswer(cmd, "success", 0L, 0L); + } catch (Exception ex) { + s_logger.warn("Failed to get network usage stats due to ", ex); + return new NetworkUsageAnswer(cmd, ex); + } + } + protected NetworkUsageAnswer execute(NetworkUsageCommand cmd) { - // disable it for VPC - return new NetworkUsageAnswer(cmd, "seccess", 0L, 0L); - /* + if ( cmd.isForVpc() ) { + return VPCNetworkUsage(cmd); + } try { Connection conn = getConnection(); if(cmd.getOption()!=null && cmd.getOption().equals("create") ){ @@ -178,7 +220,6 @@ public class XenServer56Resource extends CitrixResourceBase { s_logger.warn("Failed to get network usage stats due to ", ex); return new NetworkUsageAnswer(cmd, ex); } - */ } @Override diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_netusage.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_netusage.sh index fa0dbc97d0a..54c6b55f5dc 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_netusage.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_netusage.sh @@ -13,6 +13,7 @@ # Automatically generated by addcopyright.py at 04/03/2012 source /root/func.sh +source /opt/cloud/bin/vpc_func.sh lock="biglock" locked=$(getLockFile $lock) @@ -26,21 +27,21 @@ usage() { } create_usage_rules () { - iptables-save|grep "NETWORK_STATS_$gGateway -i $ethDev" > /dev/null + iptables-save|grep "NETWORK_STATS_$guestIp -i $ethDev" > /dev/null if [ $? -gt 0 ] then - iptables -A NETWORK_STATS_$gGateway -i $ethDev -s ! zcidr > /dev/null + iptables -A NETWORK_STATS_$guestIp -i $ethDev -s ! zcidr > /dev/null fi - iptables-save|grep "NETWORK_STATS_$gGateway -o $ethDev" > /dev/null + iptables-save|grep "NETWORK_STATS_$guestIp -o $ethDev" > /dev/null if [ $? -gt 0 ] then - iptables -A NETWORK_STATS_$gGateway -o $ethDev -d ! zcidr > /dev/null + iptables -A NETWORK_STATS_$guestIp -o $ethDev -d ! zcidr > /dev/null fi return $? } get_usage () { - iptables -L NETWORK_STATS_$ethDev -n -v -x | awk '$1 ~ /^[0-9]+$/ { printf "%s:", $2}'; > /dev/null + iptables -t mangle -L NETWORK_STATS_$ethDev -n -v -x | awk '$1 ~ /^[0-9]+$/ { printf "%s:", $2}'; > /dev/null if [ $? -gt 0 ] then printf $? @@ -49,7 +50,7 @@ get_usage () { } reset_usage () { - iptables -Z NETWORK_STATS_$ethDev > /dev/null + iptables -t mangle -Z NETWORK_STATS_$ethDev > /dev/null if [ $? -gt 0 -a $? -ne 2 ] then return 1 @@ -61,11 +62,10 @@ reset_usage () { cflag= gflag= rflag= -iflag= -aflag= -dflag= +lflag= -while getopts 'cgrl:d:z:' OPTION + +while getopts 'cgrl:' OPTION do case $OPTION in c) cflag=1 @@ -75,13 +75,7 @@ do r) rflag=1 ;; l) lflag=1 - gGateway="$OPTARG" - ;; - d) dflag=1 - ethDev="$OPTARG" - ;; - z) zflag=1 - zcidr="$OPTARG" + guestIp="$OPTARG" ;; i) #Do nothing, since it's parameter for host script ;; @@ -96,6 +90,7 @@ then unlock_exit 0 $lock $locked fi +ethDev=$(getEthByIp $guestIp) if [ "$gflag" == "1" ] then get_usage diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 8e0361c9d20..9de38537b66 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -24,6 +24,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager.OnError; +import com.cloud.agent.api.GetDomRVersionCmd; import com.cloud.agent.api.PlugNicAnswer; import com.cloud.agent.api.PlugNicCommand; import com.cloud.agent.api.SetSourceNatAnswer; @@ -31,6 +32,7 @@ import com.cloud.agent.api.SetupGuestNetworkAnswer; import com.cloud.agent.api.SetupGuestNetworkCommand; import com.cloud.agent.api.UnPlugNicAnswer; import com.cloud.agent.api.UnPlugNicCommand; +import com.cloud.agent.api.check.CheckSshCommand; import com.cloud.agent.api.routing.IpAssocVpcCommand; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.routing.SetNetworkACLCommand; @@ -732,6 +734,16 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian cmds.addCommand(cmd); } + protected void finalizeSshAndVersionOnStart(Commands cmds, VirtualMachineProfile profile, DomainRouterVO router, NicProfile controlNic) { + cmds.addCommand("checkSsh", new CheckSshCommand(profile.getInstanceName(), controlNic.getIp4Address(), 3922)); + + // Update router template/scripts version + final GetDomRVersionCmd command = new GetDomRVersionCmd(); + command.setAccessDetail(NetworkElementCommand.ROUTER_IP, controlNic.getIp4Address()); + command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); + cmds.addCommand("getDomRVersion", command); + } + @Override public boolean finalizeCommandsOnStart(Commands cmds, VirtualMachineProfile profile) { DomainRouterVO router = profile.getVirtualMachine(); @@ -748,7 +760,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian return false; } - finalizeSshAndVersionAndNetworkUsageOnStart(cmds, profile, router, controlNic); + finalizeSshAndVersionOnStart(cmds, profile, router, controlNic); //2) FORM PLUG NIC COMMANDS