// Copyright (c) 2005 DMTF.  All rights reserved.
   [Version ( "2.6.0" ), 
    UMLPackagePath ( "CIM::Network::Filtering" ), 
    Description ( 
       "IPHeadersFilter contains the most commonly required properties "
       "for performing filtering on IP, TCP or UDP headers. Properties "
       "not present in an instance of the IPHeadersFilter are treated "
       "as \'all values\'." )]
class CIM_IPHeadersFilter : CIM_FilterEntryBase {

      [Description ( 
          "HdrIPVersion identifies the version of the IP addresses "
          "for IP header filters. It is also used to determine the "
          "sizes of the OctetStrings in the six properties "
          "HdrSrcAddress, HdrSrcAddressEndOfRange, HdrSrcMask, "
          "HdrDestAddress, HdrDestAddressEndOfRange and "
          "HdrDestMask, as follows: \n"
          "ipv4(4): OctetString(SIZE (4)) \n"
          "ipv6(6): OctetString(SIZE (16|20)), \n"
          "depending on whether a scope identifier is present. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider IP version in selecting "
          "matching packets, i.e., IP version matches for all "
          "values. In this case, the HdrSrcAddress, "
          "HdrSrcAddressEndOfRange, HdrSrcMask, HdrDestAddress, "
          "HdrDestAddressEndOfRange and HdrDestMask must also be "
          "not present." ), 
       ValueMap { "4", "6" }, 
       Values { "IPv4", "IPv6" }, 
       ModelCorrespondence { "CIM_IPHeadersFilter.HdrSrcAddress", 
          "CIM_IPHeadersFilter.HdrSrcAddressEndOfRange", 
          "CIM_IPHeadersFilter.HdrSrcMask", 
          "CIM_IPHeadersFilter.HdrDestAddress", 
          "CIM_IPHeadersFilter.HdrDestAddressEndOfRange", 
          "CIM_IPHeadersFilter.HdrDestMask" }]
   uint8 HdrIPVersion;

      [Description ( 
          "HdrSrcAddress is an OctetString, of a size determined by "
          "the value of the HdrIPVersion property, representing a "
          "source IP address. When there is no "
          "HdrSrcAddressEndOfRange value, this value is compared to "
          "the source address in the IP header, subject to the mask "
          "represented in the HdrSrcMask property. (Note that the "
          "mask is ANDed with the address.) When there is a "
          "HdrSrcAddressEndOfRange value, this value is the start "
          "of the specified range (i.e., the HdrSrcAddress is lower "
          "than the HdrSrcAddressEndOfRange) that is compared to "
          "the source address in the IP header and matches on any "
          "value in the range. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrSrcAddress in selecting "
          "matching packets, i.e., HdrSrcAddress matches for all "
          "values." ), 
       OctetString, ModelCorrespondence { 
          "CIM_IPHeadersFilter.HdrIPVersion" }]
   uint8 HdrSrcAddress[];

      [Description ( 
          "HdrSrcAddressEndOfRange is an OctetString, of a size "
          "determined by the value of the HdrIPVersion property, "
          "representing the end of a range of source IP addresses "
          "(inclusive), where the start of the range is the "
          "HdrSrcAddress property value. \n"
          "\n"
          "If a value for HdrSrcAddress is not provided, then this "
          "property also MUST NOT be provided. If a value for this "
          "property is provided, then HdrSrcMask MUST NOT be "
          "provided." ), 
       OctetString, ModelCorrespondence { 
          "CIM_IPHeadersFilter.HdrIPVersion" }]
   uint8 HdrSrcAddressEndOfRange[];

      [Description ( 
          "HdrSrcMask is an OctetString, of a size determined by "
          "the value of the HdrIPVersion property, representing a "
          "mask to be used in comparing the source address in the "
          "IP header with the value represented in the "
          "HdrSrcAddress property. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrSrcMask in selecting "
          "matching packets, i.e., the value of the HdrSrcAddress "
          "or the source address range must match the source "
          "address in the packet exactly. If a value for this "
          "property is provided, then HdrSrcAddressEndOfRange MUST "
          "NOT be provided." ), 
       OctetString, ModelCorrespondence { 
          "CIM_IPHeadersFilter.HdrIPVersion" }]
   uint8 HdrSrcMask[];

      [Description ( 
          "HdrDestAddress is an OctetString, of a size determined "
          "by the value of the HdrIPVersion property, representing "
          "a destination IP address. When there is no "
          "HdrDestAddressEndOfRange value, this value is compared "
          "to the destination address in the IP header, subject to "
          "the mask represented in the HdrDestMask property. (Note "
          "that the mask is ANDed with the address.) When there is "
          "a HdrDestAddressEndOfRange value, this value is the "
          "start of the specified range (i.e., the HdrDestAddress "
          "is lower than the HdrDestAddressEndOfRange) that is "
          "compared to the source address in the IP header and "
          "matches on any value in the range. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrDestAddress in selecting "
          "matching packets, i.e., HdrDestAddress matches for all "
          "values." ), 
       OctetString, ModelCorrespondence { 
          "CIM_IPHeadersFilter.HdrIPVersion" }]
   uint8 HdrDestAddress[];

      [Description ( 
          "HdrDestAddressEndOfRange is an OctetString, of a size "
          "determined by the value of the HdrIPVersion property, "
          "representing the end of a range of destination IP "
          "addresses (inclusive), where the start of the range is "
          "the HdrDestAddress property value. \n"
          "\n"
          "If a value for HdrDestAddress is not provided, then this "
          "property also MUST NOT be provided. If a value for this "
          "property is provided, then HdrDestMask MUST NOT be "
          "provided." ), 
       OctetString, ModelCorrespondence { 
          "CIM_IPHeadersFilter.HdrIPVersion" }]
   uint8 HdrDestAddressEndOfRange[];

      [Description ( 
          "HdrDestMask is an OctetString, of a size determined by "
          "the value of the HdrIPVersion property, representing a "
          "mask to be used in comparing the destination address in "
          "the IP header with the value represented in the "
          "HdrDestAddress property. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrDestMask in selecting "
          "matching packets, i.e., the value of the HdrDestAddress "
          "or the destination address range must match the "
          "destination address in the packet exactly. If a value "
          "for this property is provided, then "
          "HdrDestAddressEndOfRange MUST NOT be provided." ), 
       OctetString, ModelCorrespondence { 
          "CIM_IPHeadersFilter.HdrIPVersion" }]
   uint8 HdrDestMask[];

      [Description ( 
          "HdrProtocolID is an 8-bit unsigned integer, representing "
          "an IP protocol type. This value is compared to the "
          "Protocol field in the IP header. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrProtocolID in selecting "
          "matching packets, i.e., HdrProtocolID matches for all "
          "values." )]
   uint8 HdrProtocolID;

      [Description ( 
          "HdrSrcPortStart represents the lower end of a range of "
          "UDP or TCP source ports. The upper end of the range is "
          "represented by the HdrSrcPortEnd property. The value of "
          "HdrSrcPortStart MUST be no greater than the value of "
          "HdrSrcPortEnd. \n"
          "\n"
          "A source port filter is evaluated by testing whether the "
          "source port identified in the IP header falls within the "
          "range of values between HdrSrcPortStart and "
          "HdrSrcPortEnd, INCLUDING these two end points. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrSrcPortStart in selecting "
          "matching packets, i.e., there is no lower bound in "
          "matching source port values." )]
   uint16 HdrSrcPortStart;

      [Description ( 
          "HdrSrcPortEnd represents the upper end of a range of UDP "
          "or TCP source ports. The lower end of the range is "
          "represented by the HdrSrcPortStart property. The value "
          "of HdrSrcPortEnd MUST be no less than the value of "
          "HdrSrcPortStart. A single port is indicated by equal "
          "values for HdrSrcPortStart and HdrSrcPortEnd. \n"
          "\n"
          "A source port filter is evaluated by testing whether the "
          "source port identified in the IP header falls within the "
          "range of values between HdrSrcPortStart and "
          "HdrSrcPortEnd, INCLUDING these two end points. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrSrcPortEnd in selecting "
          "matching packets, i.e., there is no upper bound in "
          "matching source port values." )]
   uint16 HdrSrcPortEnd;

      [Description ( 
          "HdrDestPortStart represents the lower end of a range of "
          "UDP or TCP destination ports. The upper end of the range "
          "is represented by the HdrDestPortEnd property. The value "
          "of HdrDestPortStart MUST be no greater than the value of "
          "HdrDestPortEnd. A single port is indicated by equal "
          "values for HdrDestPortStart and HdrDestPortEnd. \n"
          "\n"
          "A destination port filter is evaluated by testing "
          "whether the destination port identified in the IP header "
          "falls within the range of values between "
          "HdrDestPortStart and HdrDestPortEnd, INCLUDING these two "
          "end points. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrDestPortStart in selecting "
          "matching packets, i.e., there is no lower bound in "
          "matching destination port values." )]
   uint16 HdrDestPortStart;

      [Description ( 
          "HdrDestPortEnd represents the upper end of a range of "
          "UDP or TCP destination ports. The lower end of the range "
          "is represented by the HdrDestPortStart property. The "
          "value of HdrDestPortEnd MUST be no less than the value "
          "of HdrDestPortStart. A single port is indicated by equal "
          "values for HdrDestPortStart and HdrDestPortEnd. \n"
          "\n"
          "A destination port filter is evaluated by testing "
          "whether the destination port identified in the IP header "
          "falls within the range of values between "
          "HdrDestPortStart and HdrDestPortEnd, INCLUDING these two "
          "end points. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrDestPortEnd in selecting "
          "matching packets, i.e., there is no upper bound in "
          "matching destination port values." )]
   uint16 HdrDestPortEnd;

      [Description ( 
          "HdrDSCP is defined as a set of discrete DiffServ code "
          "points, with no inherent structure. There is no "
          "semantically significant relationship between different "
          "HdrDSCPs. Consequently, there is no provision for "
          "specifying a range of HdrDSCPs. \n"
          "\n"
          "Since, in IPv4, the HdrDSCP field may contain bits to be "
          "interpreted as the TOS IP Precedence, this property is "
          "also used to filter on IP Precedence. Similarly, the "
          "IPv6 Traffic Class field is also filtered using the "
          "value(s) in this property. \n"
          "\n"
          "HdrDSCP is defined as an array, to provide the ability "
          "to specify several discrete DSCPs in a single instance "
          "of IPHeadersFilter, that would be OR\'ed together to "
          "define the filter criteria. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrDSCP in selecting matching "
          "packets, i.e., HdrDSCP matches for all values." ), 
       MaxValue ( 63 )]
   uint8 HdrDSCP[];

      [Description ( 
          "The 20-bit Flow Label field in the IPv6 header may be "
          "used by a source to label sequences of packets for which "
          "it requests special handling by the IPv6 devices, such "
          "as non-default quality of service or \'real-time\' "
          "service. In the filter, this 20-bit string is encoded in "
          "a 24-bit octetstring by right-adjusting the value and "
          "padding on the left with b\'0000\'. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "filter does not consider HdrFlowLabel in selecting "
          "matching packets, i.e., HdrFlowLabel matches for all "
          "values." ), 
       OctetString]
   uint8 HdrFlowLabel[];


};
