cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ke4...@apache.org
Subject [47/50] git commit: CS-9919: Support for Nexus Swiches (Cisco Vswitches)
Date Sun, 27 May 2012 22:30:44 GMT
CS-9919: Support for Nexus Swiches (Cisco Vswitches)

Description:

	Adding apis to create service policies and
	associate them with a port profile.


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/ec19facd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/ec19facd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/ec19facd

Branch: refs/heads/master
Commit: ec19facd3094de7ad9bcd7de7fb8419f9adb95f0
Parents: aa1f26c
Author: Devdeep Singh <devdeep.singh@citrix.com>
Authored: Thu May 10 19:17:16 2012 +0530
Committer: Vijayendra Bhamidipati <vijayendra.bhamidipati@citrix.com>
Committed: Fri May 25 17:36:42 2012 -0700

----------------------------------------------------------------------
 .../cloud/utils/cisco/n1kv/vsm/NetconfHelper.java  |   56 +++-
 .../com/cloud/utils/cisco/n1kv/vsm/VsmCommand.java |  231 ++++++++++++++-
 .../hypervisor/vmware/mo/HypervisorHostHelper.java |    2 +-
 3 files changed, 281 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ec19facd/utils/src/com/cloud/utils/cisco/n1kv/vsm/NetconfHelper.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/cisco/n1kv/vsm/NetconfHelper.java b/utils/src/com/cloud/utils/cisco/n1kv/vsm/NetconfHelper.java
index 5ef036d..cc5b287 100644
--- a/utils/src/com/cloud/utils/cisco/n1kv/vsm/NetconfHelper.java
+++ b/utils/src/com/cloud/utils/cisco/n1kv/vsm/NetconfHelper.java
@@ -60,17 +60,17 @@ public class NetconfHelper {
                 + "        </xml>" + "      </show>" + "    </nc:filter>"
+ "  </nc:get>"
                 + "</nc:rpc>" + SSH_NETCONF_TERMINATOR;
         send(status);
-        // parse the rpc reply and the return success or failure.
+        // parse the rpc reply.
         parseReply(receive());
     }
 
     public void addPortProfile(String name, PortProfileType type, BindingType binding,
-            SwitchPortMode mode, int vlanid, int networkRate) throws CloudRuntimeException
{
-        String command = VsmCommand.getAddPortProfile(name, type, binding, mode, vlanid,
networkRate);
+            SwitchPortMode mode, int vlanid) throws CloudRuntimeException {
+        String command = VsmCommand.getAddPortProfile(name, type, binding, mode, vlanid);
         if (command != null) {
             command = command.concat(SSH_NETCONF_TERMINATOR);
             send(command);
-            // parse the rpc reply and the return success or failure.
+            // parse the rpc reply.
             parseReply(receive());
         } else {
             throw new CloudRuntimeException("Error generating rpc request for adding port
profile.");
@@ -83,7 +83,7 @@ public class NetconfHelper {
         if (command != null) {
             command = command.concat(SSH_NETCONF_TERMINATOR);
             send(command);
-            // parse the rpc reply and the return success or failure.
+            // parse the rpc reply.
             parseReply(receive());
         } else {
             throw new CloudRuntimeException("Error generating rpc request for updating port
profile.");
@@ -95,13 +95,57 @@ public class NetconfHelper {
         if (command != null) {
             command = command.concat(SSH_NETCONF_TERMINATOR);
             send(command);
-            // parse the rpc reply and the return success or failure.
+            // parse the rpc reply.
             parseReply(receive());
         } else {
             throw new CloudRuntimeException("Error generating rpc request for deleting port
profile.");
         }
     }
 
+    public void addPolicyMap(String name, int averageRate, int maxRate, int burstRate)
+            throws CloudRuntimeException {
+        String command = VsmCommand.getPolicyMap(name, averageRate, maxRate, burstRate);
+        if (command != null) {
+            command = command.concat(SSH_NETCONF_TERMINATOR);
+            send(command);
+            // parse the rpc reply.
+            parseReply(receive());
+        } else {
+            throw new CloudRuntimeException("Error generating rpc request for adding/updating
policy map.");
+        }
+    }
+
+    public void deletePolicyMap(String name) throws CloudRuntimeException {
+        String command = VsmCommand.getDeletePolicyMap(name);
+        if (command != null) {
+            command = command.concat(SSH_NETCONF_TERMINATOR);
+            send(command);
+            // parse the rpc reply.
+            parseReply(receive());
+        } else {
+            throw new CloudRuntimeException("Error generating rpc request for deleting policy
map.");
+        }
+    }
+
+    public void updatePolicyMap(String name, int averageRate, int maxRate, int burstRate)
+            throws CloudRuntimeException {
+        // Add and update of policy map work in the exact same way.
+        addPolicyMap(name, averageRate, maxRate, burstRate);
+    }
+
+    public void attachServicePolicy(String policyMap, String portProfile)
+            throws CloudRuntimeException {
+        String command = VsmCommand.getAttachServicePolicy(policyMap, portProfile);
+        if (command != null) {
+            command = command.concat(SSH_NETCONF_TERMINATOR);
+            send(command);
+            // parse the rpc reply.
+            parseReply(receive());
+        } else {
+            throw new CloudRuntimeException("Error generating rpc request for adding policy
map.");
+        }
+    }
+
     private void exchangeHello() {
         String ack = receive();
         String hello = VsmCommand.getHello() + SSH_NETCONF_TERMINATOR;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ec19facd/utils/src/com/cloud/utils/cisco/n1kv/vsm/VsmCommand.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/cisco/n1kv/vsm/VsmCommand.java b/utils/src/com/cloud/utils/cisco/n1kv/vsm/VsmCommand.java
index be9362a..2b2a73c 100644
--- a/utils/src/com/cloud/utils/cisco/n1kv/vsm/VsmCommand.java
+++ b/utils/src/com/cloud/utils/cisco/n1kv/vsm/VsmCommand.java
@@ -23,6 +23,8 @@ public class VsmCommand {
     private static final String s_ciscons = "http://www.cisco.com/nxos:1.0:ppm";
     private static final String s_configuremode = "__XML__MODE__exec_configure";
     private static final String s_portprofmode = "__XML__MODE_port-prof";
+    private static final String s_policymapmode = "__XML__MODE_policy-map";
+    private static final String s_classtypemode = "__XML__MODE_policy-map_class_type";
     private static final String s_paramvalue = "__XML__PARAM_value";
 
     public enum PortProfileType {
@@ -53,7 +55,7 @@ public class VsmCommand {
     }
 
     public static String getAddPortProfile(String name, PortProfileType type,
-            BindingType binding, SwitchPortMode mode, int vlanid, int networkRate) {
+            BindingType binding, SwitchPortMode mode, int vlanid) {
         try {
             // Create the document and root element.
             DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
@@ -153,6 +155,105 @@ public class VsmCommand {
         }
     }
 
+    public static String getPolicyMap(String name, int averageRate, int maxRate, int burstRate)
{
+        try {
+            // Create the document and root element.
+            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+            DOMImplementation domImpl = docBuilder.getDOMImplementation();
+            Document doc = createDocument(domImpl);
+
+            // Edit configuration command.
+            Element editConfig = doc.createElement("nf:edit-config");
+            doc.getDocumentElement().appendChild(editConfig);
+
+            // Command to get into exec configure mode.
+            Element target = doc.createElement("nf:target");
+            Element running = doc.createElement("nf:running");
+            target.appendChild(running);
+            editConfig.appendChild(target);
+
+            // Command to create the port profile with the desired configuration.
+            Element config = doc.createElement("nf:config");
+            config.appendChild(policyMapDetails(doc, name, averageRate, maxRate, burstRate));
+            editConfig.appendChild(config);
+
+            return serialize(domImpl, doc);
+        } catch (ParserConfigurationException e) {
+            s_logger.error("Error while creating delete message : " + e.getMessage());
+            return null;
+        } catch (DOMException e) {
+            s_logger.error("Error while creating delete message : " + e.getMessage());
+            return null;
+        }
+    }
+
+    public static String getDeletePolicyMap(String name) {
+        try {
+            // Create the document and root element.
+            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+            DOMImplementation domImpl = docBuilder.getDOMImplementation();
+            Document doc = createDocument(domImpl);
+
+            // Edit configuration command.
+            Element editConfig = doc.createElement("nf:edit-config");
+            doc.getDocumentElement().appendChild(editConfig);
+
+            // Command to get into exec configure mode.
+            Element target = doc.createElement("nf:target");
+            Element running = doc.createElement("nf:running");
+            target.appendChild(running);
+            editConfig.appendChild(target);
+
+            // Command to create the port profile with the desired configuration.
+            Element config = doc.createElement("nf:config");
+            config.appendChild(deletePolicyMapDetails(doc, name));
+            editConfig.appendChild(config);
+
+            return serialize(domImpl, doc);
+        } catch (ParserConfigurationException e) {
+            s_logger.error("Error while creating delete message : " + e.getMessage());
+            return null;
+        } catch (DOMException e) {
+            s_logger.error("Error while creating delete message : " + e.getMessage());
+            return null;
+        }
+    }
+
+    public static String getAttachServicePolicy(String policyMap, String portProfile) {
+        try {
+            // Create the document and root element.
+            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+            DOMImplementation domImpl = docBuilder.getDOMImplementation();
+            Document doc = createDocument(domImpl);
+
+            // Edit configuration command.
+            Element editConfig = doc.createElement("nf:edit-config");
+            doc.getDocumentElement().appendChild(editConfig);
+
+            // Command to get into exec configure mode.
+            Element target = doc.createElement("nf:target");
+            Element running = doc.createElement("nf:running");
+            target.appendChild(running);
+            editConfig.appendChild(target);
+
+            // Command to create the port profile with the desired configuration.
+            Element config = doc.createElement("nf:config");
+            config.appendChild(attachServiceDetails(doc, policyMap, portProfile));
+            editConfig.appendChild(config);
+
+            return serialize(domImpl, doc);
+        } catch (ParserConfigurationException e) {
+            s_logger.error("Error while creating delete message : " + e.getMessage());
+            return null;
+        } catch (DOMException e) {
+            s_logger.error("Error while creating delete message : " + e.getMessage());
+            return null;
+        }
+    }
+
     public static String getHello() {
         try {
             DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
@@ -333,6 +434,119 @@ public class VsmCommand {
         return configure;
     }
 
+    private static Element policyMapDetails(Document doc, String name,
+            int averageRate, int maxRate, int burstRate) {
+        Element configure = doc.createElementNS(s_ciscons, "nxos:configure");
+        Element modeConfigure = doc.createElement("nxos:" + s_configuremode);
+        configure.appendChild(modeConfigure);
+
+        // Policy map details
+        Element policyMap = doc.createElement("policy-map");
+        modeConfigure.appendChild(policyMap);
+
+        Element policyDetails = doc.createElement("name");
+        policyMap.appendChild(policyDetails);
+
+        // Name of the policy to create/update.
+        Element value = doc.createElement(s_paramvalue);
+        value.setAttribute("isKey", "true");
+        value.setTextContent(name);
+        policyDetails.appendChild(value);
+
+        Element policyMapMode = doc.createElement(s_policymapmode);
+        policyDetails.appendChild(policyMapMode);
+
+        // Create the default class to match all trafic.
+        Element classRoot = doc.createElement("class");
+        Element classDefault = doc.createElement("class-default");
+        policyMapMode.appendChild(classRoot);
+        classRoot.appendChild(classDefault);
+
+        Element classMode = doc.createElement(s_classtypemode);
+        classDefault.appendChild(classMode);
+
+        // Set the average, max and burst rate.
+        // TODO: Add handling for max and burst.
+        Element police = doc.createElement("police");
+        classMode.appendChild(police);
+
+        // Set the committed information rate and its value in mbps.
+        Element cir = doc.createElement("cir");
+        police.appendChild(cir);
+        Element cirValue = doc.createElement(s_paramvalue);
+        Element mbps = doc.createElement("mbps");
+        cirValue.setTextContent(Integer.toString(averageRate));
+        cir.appendChild(cirValue);
+        cir.appendChild(mbps);
+
+        // Persist the configuration across reboots.
+        modeConfigure.appendChild(persistConfiguration(doc));
+
+        return configure;
+    }
+
+    private static Element deletePolicyMapDetails(Document doc, String name) {
+        Element configure = doc.createElementNS(s_ciscons, "nxos:configure");
+        Element modeConfigure = doc.createElement("nxos:" + s_configuremode);
+        configure.appendChild(modeConfigure);
+
+        // Delete Policy map details
+        Element deletePolicyMap = doc.createElement("no");
+        Element policyMap = doc.createElement("policy-map");
+        deletePolicyMap.appendChild(policyMap);
+        modeConfigure.appendChild(deletePolicyMap);
+
+        Element policyDetails = doc.createElement("name");
+        policyMap.appendChild(policyDetails);
+
+        // Name of the policy to create/update.
+        Element value = doc.createElement(s_paramvalue);
+        value.setAttribute("isKey", "true");
+        value.setTextContent(name);
+        policyDetails.appendChild(value);
+
+        // Persist the configuration across reboots.
+        modeConfigure.appendChild(persistConfiguration(doc));
+
+        return configure;
+    }
+
+    private static Element attachServiceDetails(Document doc, String policyMap, String portProfile)
{
+        // In mode, exec_configure.
+        Element configure = doc.createElementNS(s_ciscons, "nxos:configure");
+        Element modeConfigure = doc.createElement("nxos:" + s_configuremode);
+        configure.appendChild(modeConfigure);
+
+        // Port profile name and type configuration.
+        Element profile = doc.createElement("port-profile");
+        modeConfigure.appendChild(profile);
+
+        // Port profile type.
+        Element portDetails = doc.createElement("name");
+        profile.appendChild(portDetails);
+
+        // Name of the profile to update.
+        Element value = doc.createElement(s_paramvalue);
+        value.setAttribute("isKey", "true");
+        value.setTextContent(portProfile);
+        portDetails.appendChild(value);
+
+        // element for port prof mode.
+        Element portProfMode = doc.createElement(s_portprofmode);
+        portDetails.appendChild(portProfMode);
+
+        // Associate the policy for input.
+        portProfMode.appendChild(getServicePolicyCmd(doc, policyMap, "input"));
+
+        // Associate the policy for output.
+        portProfMode.appendChild(getServicePolicyCmd(doc, policyMap, "output"));
+
+        // Persist the configuration across reboots.
+        modeConfigure.appendChild(persistConfiguration(doc));
+
+        return configure;
+    }
+
     private static Element persistConfiguration(Document doc) {
         Element copy = doc.createElement("copy");
         Element running = doc.createElement("running-config");
@@ -458,6 +672,21 @@ public class VsmCommand {
         return switchport;
     }
 
+    private static Element getServicePolicyCmd(Document doc, String policyMap, String type)
{
+        Element service = doc.createElement("service-policy");
+        Element input = doc.createElement(type);
+        service.appendChild(input);
+
+        Element name = doc.createElement("name");
+        input.appendChild(name);
+
+        Element policyValue = doc.createElement(s_paramvalue);
+        policyValue.setTextContent(policyMap);
+        name.appendChild(policyValue);
+
+        return service;
+    }
+
     private static Document createDocument(DOMImplementation dom) {
         Document doc = dom.createDocument(s_namespace, "nf:rpc", null);
         doc.getDocumentElement().setAttribute( "message-id", "101" );

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ec19facd/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
index f44ed1c..a5d90cf 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
@@ -179,7 +179,7 @@ public class HypervisorHostHelper {
 		}
 		
 		try {
-			netconfClient.addPortProfile(networkName, PortProfileType.vethernet, BindingType.portbindingstatic,
SwitchPortMode.access, vid, networkRateMbps);
+			netconfClient.addPortProfile(networkName, PortProfileType.vethernet, BindingType.portbindingstatic,
SwitchPortMode.access, vid);
 		} catch(CloudRuntimeException e) {
 			msg = "Failed to add vethernet port profile " + networkName + " with parameters " + params.toString();
 			s_logger.error(msg);


Mime
View raw message