// Copyright (c) 2009 DMTF.  All rights reserved.
   [Version ( "2.22.0" ), 
    UMLPackagePath ( "CIM::Device::Controller" ), 
    Description ( 
       "A device that is a replacement for physical cables and allows "
       "internal network physical ports in a chassis or rack to be "
       "made accessible from the external network. This may a fixed "
       "internal port to external port relationship, or a configurable "
       "mapping of internal ports to output ports via a cross-point "
       "switching function. The mapping between an internal and "
       "external port is modeled using the InternalPorts and "
       "ExternalPorts array properties. Corresponding array indices of "
       "the InternalPorts and ExternalPorts properties shall contain "
       "the port number of the internal port and external port, "
       "respectively in a mapping pair. Usage of this class is "
       "appropriate when modeling a simple n x n pass through module "
       "where the protocols supported by the module are not the target "
       "of management. Implementations wishing to enable management of "
       "the network function should instrument the appropriate device "
       "and network models. The tie into the device and network models "
       "is accomplished by correlating the port numbers in this class\' "
       "internal and external port arrays with CIM_NetworkPort\'s "
       "PortNumber property. The following is an example of how this "
       "class could be used: \n"
       "For a given instance, the value of NumberOfPorts is 3. This "
       "indicates that there are 3 internal ports and 3 external "
       "ports. Internal port 2 is mapped to external port 3. Internal "
       "ports 1 and 3 are not mapped to an external port. External "
       "ports 1 and 2 are not mapped to internal ports. For this "
       "instance the length of the InternalPorts and ExternalPorts "
       "arrays shall both be one. The first array position in "
       "InternalPortshall contain the value 2. The first array "
       "position in ExternalPorts shall contain the value 3." )]
class CIM_PassThroughModule : CIM_LogicalModule {

      [Description ( 
          "An enumeration of the link technologies that can be "
          "passed- through by this device. When set to 1 (\"Other\"), "
          "the property OtherLinkTechnologies contains string "
          "descriptions of the alternative link types." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
          "10", "11", "12..32767", "32768..65535" }, 
       Values { "Unknown", "Other", "Ethernet", "IB", "FC", "FDDI", 
          "ATM", "Token Ring", "Frame Relay", "Infrared", 
          "BlueTooth", "Wireless LAN", "DMTF Reserved", 
          "Vendor Specified" }, 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { 
          "CIM_PassThroughModule.OtherLinkTechnologies" }]
   uint16 LinkTechnologies[];

      [Description ( 
          "An array of string values describing the supported "
          "technologies when an entry in the LinkTechnologies array "
          "is set to 1, \"Other\"." ), 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { "CIM_PassThroughModule.LinkTechnologies" }]
   string OtherLinkTechnologies[];

      [Description ( 
          "Boolean indicating if the port assignments on this "
          "switch are software programmable or not." )]
   boolean IsProgrammable = false;

      [Description ( 
          "A PassThroughModule is a simple module with 1-1 "
          "correspondence between internal and external ports. This "
          "number represents the number of external ports. By "
          "virtue of there being a 1-1 correspondence of ports, it "
          "also represents the number of internal ports. \n"
          "The ports are numbered 1 through N." )]
   uint16 NumberOfPorts;

      [Description ( 
          "An indexed array containing the internal port numbers. "
          "Corresponding external ports are in the ExternalPorts "
          "array. Only internal ports which are mapped to an "
          "external port shall appear in the array." ), 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { "CIM_PassThroughModule.ExternalPorts", 
          "CIM_NetworkPort.PortNumber" }]
   uint16 InternalPorts[];

      [Description ( 
          "An indexed array containing the external ports. "
          "Corresponding internal ports are in the InternalPorts "
          "array. Only external ports which are mapped to an "
          "internal port shall appear in the array." ), 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { "CIM_PassThroughModule.InternalPorts", 
          "CIM_NetworkPort.PortNumber" }]
   uint16 ExternalPorts[];


      [Description ( 
          "If the switch is software programmable, then this method "
          "is called to assign an internal port to an external "
          "port. \n"
          "If 0 is returned, the requested status of the mapping of "
          "InternalPort and ExternalPort is in effect. That is, an "
          "attempt to unmap two ports that are not mapped to any "
          "other ports or an attempt to map two ports which are "
          "already mapped to each other shall return 0, because the "
          "resultant state of the mapping is equivalent to the "
          "client request. For a mapping operation, if either "
          "target port is already mapped to a different port, the "
          "implementation shall first unmap it. An attempt to unmap "
          "two ports that are not mapped to each other shall fail "
          "with an error of \"Not Mapped\"." ), 
       ValueMap { "0", "1", "2", "3", "4", "5..32767", "32768..65535" }, 
       Values { "Completed with No Error", "Not Supported", 
          "Unknown/Unspecified Error", "Busy", "Not Mapped", 
          "DMTF Reserved", "Vendor Reserved" }]
   uint32 AssignPorts(
         [IN, Description ( 
             "Boolean indicating if the ports are to be unmapped "
             "or mapped. If \"True\", InternalPorts and "
             "ExternalPorts shall be updated to contain a "
             "mapping of InternalPort to ExternalPort. If "
             "\"False\", InternalPorts and ExternalPorts shall "
             "be updated to remove the mapping if one exists." )]
      boolean Mapped, 
         [IN, Description ( 
             "The mapping for this internal port shall be updated."
              )]
      uint16 InternalPort, 
         [IN, Description ( 
             "The mapping for this external port shall be updated."
              )]
      uint16 ExternalPort);

};
