<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="configuration">
<xs:complexType>
<xs:sequence>
<xs:element name="capable-switch" type="OFCapableSwitchType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="OFCapableSwitchType">
<xs:sequence>
<xs:element name="resources" type="OFCapableSwitchResourceListType"/>
<xs:element name="logical-switches" type="OFLogicalSwitchListType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OFCapableSwitchResourceListType">
<xs:sequence>
<xs:element name="port" type="OFPortType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OFLogicalSwitchListType">
<xs:sequence>
<xs:element name="switch" type="OFLogicalSwitchType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OFLogicalSwitchType">
<xs:sequence>
<xs:element name="id" type="OFConfigID"/>
<xs:element name="datapath-id" type="OFConfigID"/>
<xs:element name="enabled" type="xs:boolean"/>
<xs:element name="lost-connection-behavior" type="OFLogicalSwitchLostConnnectionBehavior"/>
<xs:element name="resources" type="OFLogicalSwitchResourceListType"/>
<xs:element name="controllers" type="OFControllerListType"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="OFConfigID">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="OFLogicalSwitchLostConnnectionBehavior">
<xs:restriction base="xs:string">
<xs:enumeration value="failSecureMode"/>
<xs:enumeration value="failStandaloneMode"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="OFControllerListType">
<xs:sequence>
<xs:element name="controller" type="OFControllerType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OFControllerType">
<xs:sequence>
<xs:element name="id" type="OFConfigID"/>
<xs:element name="role" type="OFControllerRoleType"/>
<xs:element name="ip-address" type="ip-address"/>
<xs:element name="port" type="xs:integer"/>
<xs:element name="protocol" type="OFControllerProtocolType"/>
<xs:element name="state" type="OFControllerOpenFlowStateType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OFControllerOpenFlowStateType">
<xs:sequence>
<xs:element name="connection-state" type="OFControllerConnectionStateType"/>
<xs:element name="current-version" type="OFOpenFlowVersionType"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="OFOpenFlowVersionType">
<xs:restriction base="xs:string">
<xs:enumeration value="1.2"/>
<xs:enumeration value="1.1"/>
<xs:enumeration value="1.0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OFControllerConnectionStateType">
<xs:restriction base="xs:string">
<xs:enumeration value="up"/>
<xs:enumeration value="down"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OFControllerRoleType">
<xs:restriction base="xs:string">
<xs:enumeration value="master"/>
<xs:enumeration value="slave"/>
<xs:enumeration value="equal"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OFControllerProtocolType">
<xs:restriction base="xs:string">
<xs:enumeration value="tcp"/>
<xs:enumeration value="tls"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="OFLogicalSwitchResourceListType">
<xs:sequence>
<xs:element name="port" type="OFConfigID" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OFPortType">
<xs:sequence>
<xs:element name="resource-id" type="OFConfigID"/>
<xs:element name="configuration" type="OFPortConfigurationType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OFPortConfigurationType">
<xs:sequence>
<xs:element name="admin-state" type="OFPortStateOptionsType"/>
<xs:element name="no-receive" type="xs:boolean"/>
<xs:element name="no-forward" type="xs:boolean"/>
<xs:element name="no-packet-in" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="OFPortStateOptionsType">
<xs:restriction base="xs:string">
<xs:enumeration value="up"/>
<xs:enumeration value="down"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ip-address">
<xs:union>
<xs:simpleType>
<xs:restriction base="ipv4-address">
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="ipv6-address">
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType name="ipv4-address">
<xs:restriction base="xs:string">
<xs:pattern value="(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ipv6-address">
<xs:restriction base="xs:string">
<xs:pattern value="(((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(%[\p{N}\p{L}]+)?)|((([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(%.+)?)"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>