<xs:schema 
	targetNamespace="http://schemas.microsoft.com/bestpractices/models/ServerManager/DHCP/DHCPServer/2008/12"
	xmlns:tns="http://schemas.microsoft.com/bestpractices/models/ServerManager/DHCP/DHCPServer/2008/12"
    elementFormDefault="qualified"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="DHCPSERVER" type="tns:DHCPService"/>
    
    <xs:complexType name="DHCPService" >
        <xs:sequence>
            <xs:element name="DHCP" type="tns:DHCP" />
        </xs:sequence>
    </xs:complexType> 
    
    <xs:complexType name="DHCP">
        <xs:sequence> 
            <xs:element name="DhcpServerStatus" type="xs:integer" />
            <xs:element name="DhcpDatabaseStatus" type="xs:int" minOccurs="0" />              
	    <xs:element name="DhcpRegistryPathHasPerm" type="xs:boolean" />
            <xs:element name="ServerConfiguration" type="tns:ServerConfiguration" minOccurs="0" /> 
 	    <xs:element name="DhcpError" type="xs:int" />
	    <xs:element name="DhcpErrorText" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
   
    <xs:complexType name="ServerConfiguration">
        <xs:sequence>
            <xs:element name="DhcpServerPID" type="xs:integer" minOccurs="0" />   
            <xs:element name="Bindings" type="tns:Binding" minOccurs="0" />
            <xs:element name="V4ScopeExists" type="xs:boolean" minOccurs="0" />
	    <xs:element name="V6ScopeExists" type="xs:boolean" minOccurs="0" />     
	    <xs:element name="V6OptionExists" type="xs:boolean" minOccurs="0" />                 
	    <xs:element name="DhcpDatabasePath" type="tns:PathInfo" minOccurs="0" />
	    <xs:element name="DhcpDatabaseBackupPath" type="tns:PathInfo" minOccurs="0" />
	    <xs:element name="DhcpAuditlogPath" type="tns:PathInfo" minOccurs="0" />	     
            <xs:element name="AuditLog" type="xs:boolean" minOccurs="0" />           
            <xs:element name="DhcpDomainJoined" type="xs:boolean" minOccurs="0" />              
            <xs:element name="DhcpServerADAuthorization" type="xs:boolean" minOccurs="0" />
            <xs:element name="RogueDetectionEnabled"  type="xs:boolean" minOccurs="0" />    
            <xs:element name="RogueDetection" type="tns:RogueDetection" minOccurs="0" maxOccurs="unbounded" />  
            <xs:element name="OpenedPorts" type="tns:OpenedPorts" minOccurs="0" maxOccurs="unbounded"/>  
	    <xs:element name="ScopesWithoutIpRange" type="xs:string" minOccurs="0" />           
	    <xs:element name="ScopesDeactivated" type="tns:ScopeList" minOccurs="0" maxOccurs = "unbounded" />  
	    <xs:element name="ServerIPV4Excl" type="xs:string" minOccurs="0" />  
	    <xs:element name="ServerIPV6Excl" type="xs:string" minOccurs="0" />  
            <xs:element name="DnsV4DynamicUpdate" type="xs:string" minOccurs="0" />
	    <xs:element name="DnsV6DynamicUpdate" type="xs:string" minOccurs="0" />
	    <xs:element name="IAS" type="tns:IAS" minOccurs="0" />      
            <xs:element name="AllowList" type="tns:AllowList" minOccurs="0" />
	    <xs:element name="ConflictReservations" type="tns:ConflictReservations"  minOccurs="0" />  
            <xs:element name="DuplicateAddressDetection" type="xs:integer" minOccurs="0" />     
            <xs:element name="DhcpSecurityGroups" type="xs:boolean" minOccurs="0" />  
            <xs:element name="DnsServerOption" type="tns:ScopeOptionList" minOccurs="0" maxOccurs="unbounded" />   
            <xs:element name="InvalidDnsIPV4Servers" type="xs:string" minOccurs="0" maxOccurs = "unbounded" />         
	    <xs:element name="InvalidDnsIPV6Servers" type="xs:string" minOccurs="0" maxOccurs = "unbounded" />         
            <xs:element name="DnsDomainOption" type="tns:ScopeOptionList" minOccurs="0" maxOccurs = "unbounded" />  
   	    <xs:element name="ForwardZonesV4Configured" type="xs:string" minOccurs="0" />
	    <xs:element name="SecureDynamicV4Updates" type="xs:string" minOccurs="0" />
	    <xs:element name="ForwardZonesV6Configured" type="xs:string" minOccurs="0" />
	    <xs:element name="SecureDynamicV6Updates" type="xs:string" minOccurs="0" />
 	    <xs:element name="DnsUpdateProxySecuredV4" type="xs:string" minOccurs="0" />
 	    <xs:element name="DnsUpdateProxySecuredV6" type="xs:string" minOccurs="0" />
	    <xs:element name="DnsCredentials" type="xs:boolean" minOccurs="0" />
 	    <xs:element name="DefaultGateway" type="tns:ScopeList" minOccurs="0" maxOccurs = "unbounded" />     
        </xs:sequence>
    </xs:complexType>    

    <xs:complexType name="PathInfo" >  
        <xs:sequence>
 	    <xs:element name="Path" type="xs:string" minOccurs="0"/>
            <xs:element name="HasPermissions" type="xs:boolean" /> 
   	</xs:sequence>
    </xs:complexType>              

    <xs:complexType name="Binding" >  
        <xs:sequence>
            <xs:element name="V4Binding" type="xs:boolean" />
            <xs:element name="V6Binding" type="xs:boolean" /> 
   	</xs:sequence>
    </xs:complexType>              

    <xs:complexType name="AllowList" >   
        <xs:sequence>			
	    <xs:element name="Status" type="xs:boolean" />
	    <xs:element name="List" type="xs:boolean" />            
   	</xs:sequence>
    </xs:complexType>   

    <xs:complexType name="IAS" >  
        <xs:sequence>
            <xs:element name="NAPState" type="xs:boolean" />
            <xs:element name="NPSState" type="xs:boolean" /> 
   	</xs:sequence>
    </xs:complexType>              

    <xs:complexType  name="ScopeOptionList">      
        <xs:sequence>			
            <xs:element name="Protocol" type="xs:string" />         
 	    <xs:element name="OptionId" type="xs:int" minOccurs="0" />         
	    <xs:element name="Scopes" type="xs:string" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType  name="ScopeList">      
        <xs:sequence>			
            <xs:element name="Protocol" type="xs:string" />         
	    <xs:element name="Scopes" type="xs:string" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

   <xs:complexType  name="RogueDetection">      
        <xs:sequence>			
            <xs:element name="Number" type="xs:integer" />
            <xs:element name="Protocol" type="xs:string" />         
            <xs:element name="OpenedPort" type="tns:OpenedPort" minOccurs="0" maxOccurs="unbounded" />     
        </xs:sequence>
    </xs:complexType>  
  
    <xs:complexType  name="OpenedPorts" >      
        <xs:sequence>	
            <xs:element name="Number" type="xs:integer" />
            <xs:element name="Protocol" type="xs:string" />          
            <xs:element name="OpenedPort" type="tns:OpenedPort" minOccurs= "0" maxOccurs="unbounded" />                  
   	</xs:sequence>
    </xs:complexType>   
    
    <xs:complexType  name="OpenedPort" >      
        <xs:sequence>	    
            <xs:element name="Port" type="xs:integer" />
            <xs:element name="PID" type="xs:integer" /> 
            <xs:element name="Interface" type="xs:string" /> 
   	</xs:sequence>
    </xs:complexType>                       
	
    <xs:complexType name="ConflictReservations" >   
        <xs:sequence>			
	    <xs:element name="Status" type="xs:boolean" />
	    <xs:element name="Reservations" type="xs:string" minOccurs="0"  />            
   	</xs:sequence>
    </xs:complexType>  
</xs:schema>