Class PolicyBasedIPSecVpnSession

  • All Implemented Interfaces:
    com.vmware.vapi.bindings.StaticStructure, com.vmware.vapi.bindings.Structure, java.io.Serializable

    public final class PolicyBasedIPSecVpnSession
    extends java.lang.Object
    implements java.io.Serializable, com.vmware.vapi.bindings.StaticStructure
    A Policy Based VPN requires to define protect rules that match local and peer subnets. IPSec security associations is negotiated for each pair of local and peer subnet.
    See Also:
    Serialized Form
    • Field Detail

      • _TYPE_IDENTIFIER

        public static final java.lang.String _TYPE_IDENTIFIER
        Identifier denoting this class, when it is used in polymorphic context.

        This value should be assigned to the property which is used to discriminate the actual type used in the polymorphic context.

        See Also:
        Constant Field Values
      • __dynamicStructureFields

        protected com.vmware.vapi.data.StructValue __dynamicStructureFields
    • Constructor Detail

      • PolicyBasedIPSecVpnSession

        public PolicyBasedIPSecVpnSession()
        Default constructor.
      • PolicyBasedIPSecVpnSession

        protected PolicyBasedIPSecVpnSession​(com.vmware.vapi.data.StructValue __dynamicStructureFields)
    • Method Detail

      • getRules

        public java.util.List<IPSecVpnRule> getRules()
        Rules
        Returns:
        The current value of the property.
      • setRules

        public void setRules​(java.util.List<IPSecVpnRule> rules)
        Rules
        Parameters:
        rules - New value for the property.
      • getLinks

        public java.util.List<ResourceLink> getLinks()
        The server will populate this field when returing the resource. Ignored on PUT and POST. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setLinks

        public void setLinks​(java.util.List<ResourceLink> links)
        The server will populate this field when returing the resource. Ignored on PUT and POST. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        links - New value for the property.
      • getSchema

        public java.lang.String getSchema()
        Schema for this resource This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setSchema

        public void setSchema​(java.lang.String schema)
        Schema for this resource This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        schema - New value for the property.
      • getSelf

        public SelfResourceLink getSelf()
        Returns:
        The current value of the property.
      • setSelf

        public void setSelf​(SelfResourceLink self)
        Parameters:
        self - New value for the property.
      • getRevision

        public java.lang.Long getRevision()
        The _revision property describes the current revision of the resource. To prevent clients from overwriting each other's changes, PUT operations must include the current _revision of the resource, which clients should obtain by issuing a GET operation. If the _revision provided in a PUT request is missing or stale, the operation will be rejected. format: int32
        Returns:
        The current value of the property.
      • setRevision

        public void setRevision​(java.lang.Long revision)
        The _revision property describes the current revision of the resource. To prevent clients from overwriting each other's changes, PUT operations must include the current _revision of the resource, which clients should obtain by issuing a GET operation. If the _revision provided in a PUT request is missing or stale, the operation will be rejected. format: int32
        Parameters:
        revision - New value for the property.
      • getCreateTime

        public java.lang.Long getCreateTime()
        Timestamp of resource creation format: int64 This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setCreateTime

        public void setCreateTime​(java.lang.Long createTime)
        Timestamp of resource creation format: int64 This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        createTime - New value for the property.
      • getCreateUser

        public java.lang.String getCreateUser()
        ID of the user who created this resource This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setCreateUser

        public void setCreateUser​(java.lang.String createUser)
        ID of the user who created this resource This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        createUser - New value for the property.
      • getLastModifiedTime

        public java.lang.Long getLastModifiedTime()
        Timestamp of last modification format: int64 This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setLastModifiedTime

        public void setLastModifiedTime​(java.lang.Long lastModifiedTime)
        Timestamp of last modification format: int64 This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        lastModifiedTime - New value for the property.
      • getLastModifiedUser

        public java.lang.String getLastModifiedUser()
        ID of the user who last modified this resource This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setLastModifiedUser

        public void setLastModifiedUser​(java.lang.String lastModifiedUser)
        ID of the user who last modified this resource This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        lastModifiedUser - New value for the property.
      • getProtection

        public java.lang.String getProtection()
        Protection status is one of the following: PROTECTED - the client who retrieved the entity is not allowed to modify it. NOT_PROTECTED - the client who retrieved the entity is allowed to modify it REQUIRE_OVERRIDE - the client who retrieved the entity is a super user and can modify it, but only when providing the request header X-Allow-Overwrite=true. UNKNOWN - the _protection field could not be determined for this entity. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setProtection

        public void setProtection​(java.lang.String protection)
        Protection status is one of the following: PROTECTED - the client who retrieved the entity is not allowed to modify it. NOT_PROTECTED - the client who retrieved the entity is allowed to modify it REQUIRE_OVERRIDE - the client who retrieved the entity is a super user and can modify it, but only when providing the request header X-Allow-Overwrite=true. UNKNOWN - the _protection field could not be determined for this entity. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        protection - New value for the property.
      • getSystemOwned

        public java.lang.Boolean getSystemOwned()
        Indicates system owned resource This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setSystemOwned

        public void setSystemOwned​(java.lang.Boolean systemOwned)
        Indicates system owned resource This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        systemOwned - New value for the property.
      • getDescription

        public java.lang.String getDescription()
        Description of this resource
        Returns:
        The current value of the property.
      • setDescription

        public void setDescription​(java.lang.String description)
        Description of this resource
        Parameters:
        description - New value for the property.
      • getDisplayName

        public java.lang.String getDisplayName()
        Defaults to ID if not set
        Returns:
        The current value of the property.
      • setDisplayName

        public void setDisplayName​(java.lang.String displayName)
        Defaults to ID if not set
        Parameters:
        displayName - New value for the property.
      • getId

        public java.lang.String getId()
        Unique identifier of this resource
        Returns:
        The current value of the property.
      • setId

        public void setId​(java.lang.String id)
        Unique identifier of this resource
        Parameters:
        id - New value for the property.
      • getResourceType

        public java.lang.String getResourceType()
        Possible values are: A Policy Based VPN requires to define protect rules that match local and peer subnets. IPSec security associations is negotiated for each pair of local and peer subnet. A Route Based VPN is more flexible, more powerful and recommended over policy based VPN. IP Tunnel port is created and all traffic routed via tunnel port is protected. Routes can be configured statically or can be learned through BGP. A route based VPN is must for establishing redundant VPN session to remote site. The value of this property is automatically populated to "PolicyBasedIPSecVpnSession".
        Returns:
        The current value of the property.
      • getTags

        public java.util.List<Tag> getTags()
        Opaque identifiers meaningful to the API user
        Returns:
        The current value of the property.
      • setTags

        public void setTags​(java.util.List<Tag> tags)
        Opaque identifiers meaningful to the API user
        Parameters:
        tags - New value for the property.
      • getOriginSiteId

        public java.lang.String getOriginSiteId()
        This is a UUID generated by the system for knowing which site owns an object. This is used in NSX+. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setOriginSiteId

        public void setOriginSiteId​(java.lang.String originSiteId)
        This is a UUID generated by the system for knowing which site owns an object. This is used in NSX+. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        originSiteId - New value for the property.
      • getOwnerId

        public java.lang.String getOwnerId()
        This is a UUID generated by the system for knowing who owns this object. This is used in NSX+. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setOwnerId

        public void setOwnerId​(java.lang.String ownerId)
        This is a UUID generated by the system for knowing who owns this object. This is used in NSX+. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        ownerId - New value for the property.
      • getParentPath

        public java.lang.String getParentPath()
        Path of its parent This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setParentPath

        public void setParentPath​(java.lang.String parentPath)
        Path of its parent This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        parentPath - New value for the property.
      • getPath

        public java.lang.String getPath()
        Absolute path of this object This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setPath

        public void setPath​(java.lang.String path)
        Absolute path of this object This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        path - New value for the property.
      • getRealizationId

        public java.lang.String getRealizationId()
        This is a UUID generated by the system for realizing the entity object. In most cases this should be same as 'unique_id' of the entity. However, in some cases this can be different because of entities have migrated their unique identifier to NSX Policy intent objects later in the timeline and did not use unique_id for realization. Realization id is helpful for users to debug data path to correlate the configuration with corresponding intent. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setRealizationId

        public void setRealizationId​(java.lang.String realizationId)
        This is a UUID generated by the system for realizing the entity object. In most cases this should be same as 'unique_id' of the entity. However, in some cases this can be different because of entities have migrated their unique identifier to NSX Policy intent objects later in the timeline and did not use unique_id for realization. Realization id is helpful for users to debug data path to correlate the configuration with corresponding intent. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        realizationId - New value for the property.
      • getRelativePath

        public java.lang.String getRelativePath()
        Path relative from its parent This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setRelativePath

        public void setRelativePath​(java.lang.String relativePath)
        Path relative from its parent This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        relativePath - New value for the property.
      • getRemotePath

        public java.lang.String getRemotePath()
        This is the path of the object on the local managers when queried on the NSX+ service, and path of the object on NSX+ service when queried from the local managers. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setRemotePath

        public void setRemotePath​(java.lang.String remotePath)
        This is the path of the object on the local managers when queried on the NSX+ service, and path of the object on NSX+ service when queried from the local managers. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        remotePath - New value for the property.
      • getUniqueId

        public java.lang.String getUniqueId()
        This is a UUID generated by the GM/LM to uniquely identify entities in a federated environment. For entities that are stretched across multiple sites, the same ID will be used on all the stretched sites. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setUniqueId

        public void setUniqueId​(java.lang.String uniqueId)
        This is a UUID generated by the GM/LM to uniquely identify entities in a federated environment. For entities that are stretched across multiple sites, the same ID will be used on all the stretched sites. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        uniqueId - New value for the property.
      • getChildren

        public java.util.List<com.vmware.vapi.bindings.Structure> getChildren()
        Subtree for this type within policy tree containing nested elements. Note that this type is applicable to be used in Hierarchical API only.
        Returns:
        The current value of the property. When clients pass a value of this class as a parameter, the property must contain all the properties defined in ChildPolicyConfigResource. When methods return a value of this class as a return value, the property will contain all the properties defined in ChildPolicyConfigResource.
      • setChildren

        public void setChildren​(java.util.List<com.vmware.vapi.bindings.Structure> children)
        Subtree for this type within policy tree containing nested elements. Note that this type is applicable to be used in Hierarchical API only.
        Parameters:
        children - New value for the property. When clients pass a value of this class as a parameter, the property must contain all the properties defined in ChildPolicyConfigResource. When methods return a value of this class as a return value, the property will contain all the properties defined in ChildPolicyConfigResource.
      • getMarkedForDelete

        public java.lang.Boolean getMarkedForDelete()
        Intent objects are not directly deleted from the system when a delete is invoked on them. They are marked for deletion and only when all the realized entities for that intent object gets deleted, the intent object is deleted. Objects that are marked for deletion are not returned in GET call. One can use the search API to get these objects. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setMarkedForDelete

        public void setMarkedForDelete​(java.lang.Boolean markedForDelete)
        Intent objects are not directly deleted from the system when a delete is invoked on them. They are marked for deletion and only when all the realized entities for that intent object gets deleted, the intent object is deleted. Objects that are marked for deletion are not returned in GET call. One can use the search API to get these objects. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        markedForDelete - New value for the property.
      • getOverridden

        public java.lang.Boolean getOverridden()
        Global intent objects cannot be modified by the user. However, certain global intent objects can be overridden locally by use of this property. In such cases, the overridden local values take precedence over the globally defined values for the properties. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Returns:
        The current value of the property.
      • setOverridden

        public void setOverridden​(java.lang.Boolean overridden)
        Global intent objects cannot be modified by the user. However, certain global intent objects can be overridden locally by use of this property. In such cases, the overridden local values take precedence over the globally defined values for the properties. This property may be present in responses from the server, but if it is present in a request to server it will be ignored.
        Parameters:
        overridden - New value for the property.
      • getAuthenticationMode

        public java.lang.String getAuthenticationMode()
        Possible values are: Peer authentication mode. PSK - In this mode a secret key shared between local and peer sites is to be used for authentication. The secret key can be a string with a maximum length of 128 characters. CERTIFICATE - In this mode a certificate defined at the global level is to be used for authentication.
        Returns:
        The current value of the property.
      • setAuthenticationMode

        public void setAuthenticationMode​(java.lang.String authenticationMode)
        Possible values are: Peer authentication mode. PSK - In this mode a secret key shared between local and peer sites is to be used for authentication. The secret key can be a string with a maximum length of 128 characters. CERTIFICATE - In this mode a certificate defined at the global level is to be used for authentication.
        Parameters:
        authenticationMode - New value for the property.
      • getConnectionInitiationMode

        public java.lang.String getConnectionInitiationMode()
        Possible values are: Connection initiation mode used by local endpoint to establish ike connection with peer site. INITIATOR - In this mode local endpoint initiates tunnel setup and will also respond to incoming tunnel setup requests from peer gateway. RESPOND_ONLY - In this mode, local endpoint shall only respond to incoming tunnel setup requests. It shall not initiate the tunnel setup. ON_DEMAND - In this mode local endpoint will initiate tunnel creation once first packet matching the policy rule is received and will also respond to incoming initiation request.
        Returns:
        The current value of the property.
      • setConnectionInitiationMode

        public void setConnectionInitiationMode​(java.lang.String connectionInitiationMode)
        Possible values are: Connection initiation mode used by local endpoint to establish ike connection with peer site. INITIATOR - In this mode local endpoint initiates tunnel setup and will also respond to incoming tunnel setup requests from peer gateway. RESPOND_ONLY - In this mode, local endpoint shall only respond to incoming tunnel setup requests. It shall not initiate the tunnel setup. ON_DEMAND - In this mode local endpoint will initiate tunnel creation once first packet matching the policy rule is received and will also respond to incoming initiation request.
        Parameters:
        connectionInitiationMode - New value for the property.
      • getDpdProfilePath

        public java.lang.String getDpdProfilePath()
        Policy path referencing Dead Peer Detection (DPD) profile. Default is set to system default profile.
        Returns:
        The current value of the property.
      • setDpdProfilePath

        public void setDpdProfilePath​(java.lang.String dpdProfilePath)
        Policy path referencing Dead Peer Detection (DPD) profile. Default is set to system default profile.
        Parameters:
        dpdProfilePath - New value for the property.
      • getEnabled

        public java.lang.Boolean getEnabled()
        Enable/Disable IPSec VPN session.
        Returns:
        The current value of the property.
      • setEnabled

        public void setEnabled​(java.lang.Boolean enabled)
        Enable/Disable IPSec VPN session.
        Parameters:
        enabled - New value for the property.
      • getIkeProfilePath

        public java.lang.String getIkeProfilePath()
        Policy path referencing IKE profile to be used. Default is set according to system default profile.
        Returns:
        The current value of the property.
      • setIkeProfilePath

        public void setIkeProfilePath​(java.lang.String ikeProfilePath)
        Policy path referencing IKE profile to be used. Default is set according to system default profile.
        Parameters:
        ikeProfilePath - New value for the property.
      • getLocalEndpointPath

        public java.lang.String getLocalEndpointPath()
        Policy path referencing Local endpoint. This property is mandatory on LM. It is required on GM only in case of site_overrides property not provided.
        Returns:
        The current value of the property.
      • setLocalEndpointPath

        public void setLocalEndpointPath​(java.lang.String localEndpointPath)
        Policy path referencing Local endpoint. This property is mandatory on LM. It is required on GM only in case of site_overrides property not provided.
        Parameters:
        localEndpointPath - New value for the property.
      • getPeerAddress

        public java.lang.String getPeerAddress()
        Public IPV4 or IPV6 address of the remote device terminating the VPN connection. This property is mandatory on LM. It is required on GM only in case of site_overrides property not provided. Please note that configuring peer_address as IPv6 address is not supported in the deprecated IPSecVpnSession Patch/PUT APIs. format: ip
        Returns:
        The current value of the property.
      • setPeerAddress

        public void setPeerAddress​(java.lang.String peerAddress)
        Public IPV4 or IPV6 address of the remote device terminating the VPN connection. This property is mandatory on LM. It is required on GM only in case of site_overrides property not provided. Please note that configuring peer_address as IPv6 address is not supported in the deprecated IPSecVpnSession Patch/PUT APIs. format: ip
        Parameters:
        peerAddress - New value for the property.
      • getPeerId

        public java.lang.String getPeerId()
        Peer ID to uniquely identify the peer site. The peer ID is the public IP address of the remote device terminating the VPN tunnel. When NAT is configured for the peer, enter the private IP address of the peer. This property is mandatory on LM. It is required on GM only in case of site_overrides property not provided.
        Returns:
        The current value of the property.
      • setPeerId

        public void setPeerId​(java.lang.String peerId)
        Peer ID to uniquely identify the peer site. The peer ID is the public IP address of the remote device terminating the VPN tunnel. When NAT is configured for the peer, enter the private IP address of the peer. This property is mandatory on LM. It is required on GM only in case of site_overrides property not provided.
        Parameters:
        peerId - New value for the property.
      • getPsk

        public java.lang.String getPsk()
        IPSec Pre-shared key. Maximum length of this field is 128 characters.
        Returns:
        The current value of the property.
      • setPsk

        public void setPsk​(java.lang.String psk)
        IPSec Pre-shared key. Maximum length of this field is 128 characters.
        Parameters:
        psk - New value for the property.
      • getSiteOverrides

        public java.util.List<SiteOverride> getSiteOverrides()
        A collection of site specific attributes specificed only on GM
        Returns:
        The current value of the property.
      • setSiteOverrides

        public void setSiteOverrides​(java.util.List<SiteOverride> siteOverrides)
        A collection of site specific attributes specificed only on GM
        Parameters:
        siteOverrides - New value for the property.
      • setTcpMssClamping

        public void setTcpMssClamping​(TcpMaximumSegmentSizeClamping tcpMssClamping)
        Parameters:
        tcpMssClamping - New value for the property.
      • getTunnelProfilePath

        public java.lang.String getTunnelProfilePath()
        Policy path referencing Tunnel profile to be used. Default is set to system default profile.
        Returns:
        The current value of the property.
      • setTunnelProfilePath

        public void setTunnelProfilePath​(java.lang.String tunnelProfilePath)
        Policy path referencing Tunnel profile to be used. Default is set to system default profile.
        Parameters:
        tunnelProfilePath - New value for the property.
      • _getType

        public com.vmware.vapi.bindings.type.StructType _getType()
        Specified by:
        _getType in interface com.vmware.vapi.bindings.StaticStructure
      • _getDataValue

        public com.vmware.vapi.data.StructValue _getDataValue()
        Specified by:
        _getDataValue in interface com.vmware.vapi.bindings.Structure
      • _updateDataValue

        protected void _updateDataValue​(com.vmware.vapi.data.StructValue structValue)
      • _validate

        public void _validate()
        Specified by:
        _validate in interface com.vmware.vapi.bindings.StaticStructure
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • toString

        public java.lang.String toString()
        Specified by:
        toString in interface com.vmware.vapi.bindings.StaticStructure
        Overrides:
        toString in class java.lang.Object
      • _hasTypeNameOf

        public boolean _hasTypeNameOf​(java.lang.Class<? extends com.vmware.vapi.bindings.Structure> clazz)
        Specified by:
        _hasTypeNameOf in interface com.vmware.vapi.bindings.Structure
      • _convertTo

        public <T extends com.vmware.vapi.bindings.Structure> T _convertTo​(java.lang.Class<T> clazz)
        Specified by:
        _convertTo in interface com.vmware.vapi.bindings.Structure
      • _setDynamicField

        public void _setDynamicField​(java.lang.String fieldName,
                                     com.vmware.vapi.data.DataValue fieldValue)
        Specified by:
        _setDynamicField in interface com.vmware.vapi.bindings.StaticStructure
      • _getDynamicField

        public com.vmware.vapi.data.DataValue _getDynamicField​(java.lang.String fieldName)
        Specified by:
        _getDynamicField in interface com.vmware.vapi.bindings.StaticStructure
      • _getDynamicFieldNames

        public java.util.Set<java.lang.String> _getDynamicFieldNames()
        Specified by:
        _getDynamicFieldNames in interface com.vmware.vapi.bindings.StaticStructure
      • _getClassType

        public static com.vmware.vapi.bindings.type.StructType _getClassType()
        WARNING: Internal method, subject to change in future versions.
        Returns:
        StructType instance representing the static bindings type for this Structure.
      • _getCanonicalName

        public java.lang.String _getCanonicalName()
        Specified by:
        _getCanonicalName in interface com.vmware.vapi.bindings.Structure
      • _getCanonicalTypeName

        public static java.lang.String _getCanonicalTypeName()
        Returns the canonical type name. See _getCanonicalName().
        Returns:
        canonical type name
      • _newInstance

        public static PolicyBasedIPSecVpnSession _newInstance​(com.vmware.vapi.data.StructValue structValue)
        WARNING: Internal method, subject to change in future versions.
        Returns new instance of this binding class and injects the provided data value.
        WARNING: The returned object is not fully initialized.
        Parameters:
        structValue - the source of the data contained in the binding object. Could contain more data than fields of this class can describe i.e. newer version of the binding object. Could be null.
        Returns:
        the static bindings StructType
      • _newInstance2

        public static PolicyBasedIPSecVpnSession _newInstance2​(com.vmware.vapi.data.StructValue structValue)
        WARNING: Internal method, subject to change in future versions.
        Serves as a versioning mechanism.