<?xml version="1.0" encoding="UTF-8"?>
<!-- VERSION: 1.0-beta -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://xmlsysinfo.sf.net"
  xmlns="http://xmlsysinfo.sf.net"
  elementFormDefault="qualified">

  <!-- TYPES -->

  <xs:complexType name="gen_totfree_type">
    <xs:sequence>
      <xs:element name="total" type="xs:integer" />
      <xs:element name="free" type="xs:integer" />
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="volume_status_type">
    <xs:restriction base="xs:token">
      <xs:enumeration value="online" />
      <xs:enumeration value="offline" />
      <xs:enumeration value="degraded" />
      <xs:enumeration value="building" />
      <xs:enumeration value="scrubbing" />
      <xs:enumeration value="rebuild" />
      <xs:enumeration value="invalid" />
      <xs:enumeration value="unknown" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="disk_status_type">
    <xs:restriction base="xs:token">
      <xs:enumeration value="online" />
      <xs:enumeration value="offline" />
      <xs:enumeration value="failed" />
      <xs:enumeration value="rebuild" />
      <xs:enumeration value="hot_spare" />
      <xs:enumeration value="unused" />
      <xs:enumeration value="scrubbing" />
      <xs:enumeration value="invalid" />
      <xs:enumeration value="unknown" />
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="disk_type">
    <xs:sequence>
      <xs:element name="status" type="disk_status_type" />
      <xs:element name="size" type="xs:integer" />
      <xs:element minOccurs="0" name="enclosure" type="xs:token" />
      <xs:element minOccurs="0" name="vendor" type="xs:normalizedString" />
      <xs:element minOccurs="0" name="serial_no" type="xs:token" />
    </xs:sequence>
    <xs:attribute name="id" use="required" type="xs:integer" />
    <xs:attribute name="bus" use="required" type="xs:integer" />
    <xs:attribute name="target" use="required" type="xs:integer" />
    <xs:attribute name="lun" type="xs:integer" />
  </xs:complexType>

  <xs:simpleType name="sensor_status_type">
    <xs:restriction base="xs:token">
      <xs:enumeration value="unspecified" />
      <xs:enumeration value="OK" />
      <xs:enumeration value="WARNING" />
      <xs:enumeration value="CRITICAL" />
      <xs:enumeration value="unknown" />
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="fs_size_type">
    <xs:sequence>
      <xs:element name="total" type="xs:integer" />
      <xs:element name="free" type="xs:integer" />
      <xs:element name="available" type="xs:integer" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="diskio_type">
   <xs:sequence>
     <xs:element name="read_persec" type="xs:decimal" />
     <xs:element name="write_persec" type="xs:decimal" />
   </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="carp_status_type">
    <xs:restriction base="xs:token">
      <xs:enumeration value="INIT" />
      <xs:enumeration value="MASTER" />
      <xs:enumeration value="BACKUP" />
      <xs:enumeration value="unknown" />
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="netif_pktstats_type">
    <xs:sequence>
      <xs:element name="in" type="xs:integer" />
      <xs:element minOccurs="0" name="in_persec"
                  default="0.0" type="xs:decimal" />
      <xs:element name="out" type="xs:integer" />
      <xs:element minOccurs="0" name="out_persec"
                  default="0.0" type="xs:decimal" />
      <xs:element minOccurs="0" name="dropped"
                  default="0" type="xs:integer" />
      <xs:element minOccurs="0" name="dropped_persec"
                  default="0.0" type="xs:decimal" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="netif_bytestats_type">
    <xs:sequence>
      <xs:element name="in" type="xs:integer" />
      <xs:element minOccurs="0" name="in_persec"
                  default="0.0" type="xs:decimal" />
      <xs:element name="out" type="xs:integer" />
      <xs:element minOccurs="0" name="out_persec"
                  default="0.0" type="xs:decimal" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="pfproto_stats_type">
    <xs:sequence>
      <xs:element name="in_blocked" type="xs:integer" />
      <xs:element minOccurs="0" name="in_blocked_persec"
                  default="0.0" type="xs:decimal" />
      <xs:element name="in_passed" type="xs:integer" />
      <xs:element minOccurs="0" name="in_passed_persec"
                  default="0.0" type="xs:decimal" />
      <xs:element name="out_blocked" type="xs:integer" />
      <xs:element minOccurs="0" name="out_blocked_persec"
                  default="0.0" type="xs:decimal" />
      <xs:element name="out_passed" type="xs:integer" />
      <xs:element minOccurs="0" name="out_passed_persec"
                  default="0.0" type="xs:decimal" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="pf_traffic_type">
    <xs:sequence>
      <xs:element name="packets" type="pfproto_stats_type" />
      <xs:element minOccurs="0" name="bytes" type="pfproto_stats_type" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="flag" />

  <xs:complexType name="proc_info_type">
    <xs:sequence>
      <xs:element name="name" type="xs:normalizedString" />
      <xs:element name="pid" type="xs:integer" />
      <xs:element name="euid">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:integer">
              <xs:attribute name="username" type="xs:normalizedString" />
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="login_user" type="xs:normalizedString" />
      <xs:element name="cpu_percent" type="xs:decimal" />
      <xs:element name="res_size" type="xs:integer" />
      <xs:element minOccurs="0" name="nice" default="0" type="xs:integer" />
      <xs:element minOccurs="0" name="running" type="flag" />
    </xs:sequence>
  </xs:complexType>

  <!-- Root element: -->

  <xs:element name="xmlsysinfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="xsi_config" />
        <xs:element ref="system" />
        <xs:element minOccurs="0" ref="sensors" />
        <xs:element minOccurs="0" ref="storage" />
        <xs:element ref="networking" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- <xsi_config/>: -->

  <xs:element name="xsi_config">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="update_timestamp" type="xs:decimal" />
        <xs:element minOccurs="0" name="defaults" type="flag" />
        <xs:element minOccurs="0" name="compress_output" type="flag" />
        <xs:element minOccurs="0" name="format_output" type="flag" />
        <xs:element minOccurs="0" name="no_names" type="flag" />
        <xs:element minOccurs="0" name="one_client_mode" type="flag" />
        <xs:element minOccurs="0" name="one_shot" type="flag" />
        <xs:element minOccurs="0" name="show_packet_filter" type="flag" />
        <xs:element minOccurs="0" name="show_raid" type="flag" />
        <xs:element minOccurs="0" name="update_interval" type="xs:decimal" />
        <xs:element minOccurs="0" maxOccurs="unbounded"
                    name="listen_addr" type="xs:token" />
        <xs:element minOccurs="0" name="listen_port" type="xs:integer" />
      </xs:sequence>
      <xs:attribute name="schema_version" use="required" type="xs:token" />
      <xs:attribute name="xsi_version" use="required" type="xs:token" />
    </xs:complexType>
  </xs:element>

  <!-- SYSTEM -->

  <xs:element name="system">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="machine" />
        <xs:element minOccurs="0" ref="cpus" />
        <xs:element minOccurs="0" ref="interrupts" />
        <xs:element minOccurs="0" ref="memory" />
        <xs:element ref="os" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="machine">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="arch" type="xs:token" />
        <xs:element minOccurs="0" name="model" type="xs:normalizedString" />
        <xs:element minOccurs="0" name="cpu_freq" type="xs:integer" />
        <xs:element minOccurs="0" name="vendor" type="xs:normalizedString" />
        <xs:element minOccurs="0" name="product" type="xs:normalizedString" />
        <xs:element minOccurs="0" name="version" type="xs:normalizedString" />
        <xs:element minOccurs="0" name="serial_no" type="xs:token" />
        <xs:element minOccurs="0" name="uuid" type="xs:token" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="cpus">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="count" type="xs:integer" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="cpu_load" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="cpu_load_total" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="cpu_load">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="system" type="xs:decimal" />
        <xs:element name="user" type="xs:decimal" />
        <xs:element name="nice" type="xs:decimal" />
        <xs:element name="interrupt" type="xs:decimal" />
        <xs:element name="idle" type="xs:decimal" />
      </xs:sequence>
      <xs:attribute name="num" type="xs:integer" />
    </xs:complexType>
  </xs:element>

  <xs:element name="cpu_load_total">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="system" type="xs:decimal" />
        <xs:element name="user" type="xs:decimal" />
        <xs:element name="nice" type="xs:decimal" />
        <xs:element name="interrupt" type="xs:decimal" />
        <xs:element name="idle" type="xs:decimal" />
      </xs:sequence>
      <xs:attribute name="num" type="xs:integer" />
    </xs:complexType>
  </xs:element>

  <xs:element name="interrupts">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="ints_persec" />
        <xs:element name="ints_persec_total" type="xs:decimal" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="ints_persec">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:decimal">
          <xs:attribute name="source" use="required"
                        type="xs:normalizedString" />
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="memory">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ram" type="gen_totfree_type" />
        <xs:element name="swap" type="gen_totfree_type" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="os">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="type" type="xs:token" />
        <xs:element name="release" type="xs:token" />
        <xs:element minOccurs="0" name="os_status" type="xs:token" />
        <xs:element name="kernel" type="xs:token" />
        <xs:element name="version_string" type="xs:normalizedString" />
        <xs:element minOccurs="0" name="uptime" type="xs:integer" />
        <xs:element minOccurs="0" ref="load_averages" />
        <xs:element minOccurs="0" ref="processes" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="load_averages">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="avg1min" type="xs:decimal" />
        <xs:element name="avg5min" type="xs:decimal" />
        <xs:element name="avg15min" type="xs:decimal" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="processes">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="count" type="xs:integer" />
        <xs:element name="running" type="xs:integer" />
        <xs:element minOccurs="0" name="zombies" default="0" type="xs:integer" />
        <xs:element minOccurs="0" name="top" type="proc_info_type" />
        <xs:element minOccurs="0" name="cpu_top" type="proc_info_type" />
        <xs:element minOccurs="0" name="mem_top" type="proc_info_type" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- SENSORS -->

  <xs:element name="sensors">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="count" type="xs:integer" />
        <xs:element maxOccurs="unbounded" ref="sensor" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="sensor">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="other_type" type="xs:token" />
        <xs:element minOccurs="0" name="status"
                    default="unspecified" type="sensor_status_type" />
        <xs:element minOccurs="0" name="sensor_descr" type="xs:normalizedString" />
        <xs:element minOccurs="0" name="value_unknown" type="flag" />
        <xs:element minOccurs="0" ref="value" />
        <xs:element minOccurs="0" ref="other_value" />
        <xs:element minOccurs="0" ref="indicator" />
        <xs:element minOccurs="0" ref="drive_status" />
        <xs:element minOccurs="0" name="value_age" type="xs:decimal" />
      </xs:sequence>
      <xs:attribute name="id" use="required" type="xs:integer" />
      <xs:attribute name="dev" use="required" type="xs:token" />
      <xs:attribute name="type" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="other" />
            <xs:enumeration value="temperature" />
            <xs:enumeration value="fan_speed" />
            <xs:enumeration value="voltage_dc" />
            <xs:enumeration value="voltage_ac" />
            <xs:enumeration value="resistance" />
            <xs:enumeration value="power" />
            <xs:enumeration value="current" />
            <xs:enumeration value="energy" />
            <xs:enumeration value="charge" />
            <xs:enumeration value="illuminance" />
            <xs:enumeration value="percentage" />
            <xs:enumeration value="indicator" />
            <xs:enumeration value="generic" />
            <xs:enumeration value="timedelta" />
            <xs:enumeration value="drive" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="value">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:decimal">
          <xs:attribute name="unit">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="C" />
                <xs:enumeration value="rpm" />
                <xs:enumeration value="V" />
                <xs:enumeration value="Ohm" />
                <xs:enumeration value="W" />
                <xs:enumeration value="A" />
                <xs:enumeration value="Wh" />
                <xs:enumeration value="Ah" />
                <xs:enumeration value="percent" />
                <xs:enumeration value="lx" />
                <xs:enumeration value="ms" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="other_value">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:decimal">
          <xs:attribute name="unit" type="xs:token" />
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="indicator">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:enumeration value="ON" />
        <xs:enumeration value="OFF" />
        <xs:enumeration value="invalid" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="drive_status">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:enumeration value="empty" />
        <xs:enumeration value="ready" />
        <xs:enumeration value="powering_up" />
        <xs:enumeration value="online" />
        <xs:enumeration value="idle" />
        <xs:enumeration value="active" />
        <xs:enumeration value="rebuilding" />
        <xs:enumeration value="powering_down" />
        <xs:enumeration value="failed" />
        <xs:enumeration value="degraded" />
        <xs:enumeration value="other" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <!-- STORAGE -->

  <xs:element name="storage">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="filesystems" />
        <xs:element minOccurs="0" ref="disks" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="raid" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="filesystems">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="count" type="xs:integer" />
        <xs:element maxOccurs="unbounded" ref="mount" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="mount">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="size" type="fs_size_type" />
        <xs:element name="nodes" type="gen_totfree_type" />
      </xs:sequence>
      <xs:attribute name="type" use="required" type="xs:token" />
      <xs:attribute name="from" use="required" type="xs:token" />
      <xs:attribute name="to" use="required" type="xs:token" />
    </xs:complexType>
  </xs:element>

  <xs:element name="disks">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="count" type="xs:integer" />
        <xs:element maxOccurs="unbounded" ref="disk" />
        <xs:element ref="disk_summary" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="disk">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="transfers" type="diskio_type" />
        <xs:element minOccurs="0" name="bytes" type="diskio_type" />
      </xs:sequence>
      <xs:attribute name="name" use="required" type="xs:token" />
      <xs:attribute name="idle" default="false" type="xs:boolean" />
    </xs:complexType>
  </xs:element>

  <xs:element name="disk_summary">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="transfers" type="diskio_type" />
        <xs:element minOccurs="0" name="bytes" type="diskio_type" />
      </xs:sequence>
      <xs:attribute name="idle" default="false" type="xs:boolean" />
    </xs:complexType>
  </xs:element>

  <xs:element name="raid">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="volume" />
        <xs:element minOccurs="0" maxOccurs="unbounded"
                    name="reserve_disk" type="disk_type" />
      </xs:sequence>
      <xs:attribute name="controller" use="required" type="xs:token" />
    </xs:complexType>
  </xs:element>

  <xs:element name="volume">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="status" type="volume_status_type" />
        <xs:element name="size" type="xs:integer" />
        <xs:element name="level" type="xs:token" />
        <xs:element minOccurs="0" ref="task" />
        <xs:element maxOccurs="unbounded"
                    name="volume_disk" type="disk_type" />
      </xs:sequence>
      <xs:attribute name="dev" use="required" type="xs:token" />
      <xs:attribute name="id" use="required" type="xs:integer" />
    </xs:complexType>
  </xs:element>

  <xs:element name="task">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="progress_percent" type="xs:integer" />
        <xs:element minOccurs="0" name="elapsed_time" type="xs:integer" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- NETWORKING -->

  <xs:element name="networking">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="hostname" type="xs:token" />
        <xs:element minOccurs="0" ref="ip_routes" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="interfaces" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="packet_filter" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="ip_routes">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="default" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="default">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute name="family" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="IPv4" />
                <xs:enumeration value="IPv6" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="interfaces">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="count" type="xs:integer" />
        <xs:element maxOccurs="unbounded" ref="interface" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="interface">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="metric" type="xs:integer" />
        <xs:element minOccurs="0" name="mtu" type="xs:integer" />
        <xs:element minOccurs="0" ref="properties" />
        <xs:element minOccurs="0" name="if_descr" type="xs:normalizedString" />
        <xs:element minOccurs="0" name="media" type="xs:token" />
        <xs:element minOccurs="0" ref="link_state" />
        <xs:element minOccurs="0" ref="duplex" />
        <xs:element minOccurs="0" ref="carp" />
        <xs:element minOccurs="0" ref="addresses" />
        <xs:element minOccurs="0" ref="statistics" />
      </xs:sequence>
      <xs:attribute name="name" use="required" type="xs:token" />
      <xs:attribute name="up" default="true" type="xs:boolean" />
    </xs:complexType>
  </xs:element>

  <xs:element name="properties">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="running" type="flag" />
        <xs:element minOccurs="0" name="promiscuous" type="flag" />
        <xs:element minOccurs="0" name="loopback" type="flag" />
        <xs:element minOccurs="0" ref="point-to-point" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="point-to-point">
    <xs:complexType>
      <xs:attribute name="dest_addr" use="required" type="xs:token" />
    </xs:complexType>
  </xs:element>

  <xs:element name="link_state" default="unknown">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:enumeration value="up" />
        <xs:enumeration value="down" />
        <xs:enumeration value="unknown" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="duplex" default="unknown">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:enumeration value="full" />
        <xs:enumeration value="half" />
        <xs:enumeration value="unknown" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

  <xs:element name="carp">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="carp_status_type">
          <xs:attribute name="carpdev" type="xs:token" />
          <xs:attribute name="vhid" use="required" type="xs:integer" />
          <xs:attribute name="advskew" use="required" type="xs:integer" />
          <xs:attribute name="advbase" use="required" type="xs:integer" />
          <xs:attribute name="preempt" type="xs:boolean" />
          <xs:attribute name="arpbalance" type="xs:boolean" />
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="addresses">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="ll_addr" type="xs:token" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="net_addr" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="net_addr">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute name="family" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="unspecified" />
                <xs:enumeration value="IPv4" />
                <xs:enumeration value="IPv6" />
                <xs:enumeration value="other" />
                <xs:enumeration value="unknown" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="prefixlen" type="xs:integer" />
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="statistics">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="packets" type="netif_pktstats_type" />
        <xs:element minOccurs="0" name="bytes" type="netif_bytestats_type" />
        <xs:element minOccurs="0" name="errors_in"
                    type="xs:integer" default="0" />
        <xs:element minOccurs="0" name="errors_in_persec"
                    type="xs:decimal" default="0" />
        <xs:element minOccurs="0" name="errors_out"
                    type="xs:integer" default="0" />
        <xs:element minOccurs="0" name="errors_out_persec"
                    type="xs:decimal" default="0" />
        <xs:element minOccurs="0" name="collisions"
                    type="xs:integer" default="0" />
        <xs:element minOccurs="0" name="collisions_persec"
                    type="xs:decimal" default="0" />
      </xs:sequence>
      <xs:attribute name="has_traffic" type="xs:boolean" default="true" />
    </xs:complexType>
  </xs:element>

  <xs:element name="packet_filter">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="runtime" type="xs:integer" />
        <xs:element minOccurs="0" name="rule_matches"
                    default="0" type="xs:integer" />
        <xs:element minOccurs="0" name="rule_matches_avg" type="xs:decimal" />
        <xs:element minOccurs="0" name="rule_matches_persec"
                    default="0.0" type="xs:decimal" />
        <xs:element minOccurs="0" ref="states" />
        <xs:element minOccurs="0" ref="filter_summary" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="filtered_if" />
      </xs:sequence>
      <xs:attribute name="type" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="pf" />
            <xs:enumeration value="ipfilter" />
            <xs:enumeration value="netfilter" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="enabled" default="true" type="xs:boolean" />
    </xs:complexType>
  </xs:element>

  <xs:element name="states">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="count" type="xs:integer" />
        <xs:element minOccurs="0" name="limit" type="xs:integer" />
        <xs:element minOccurs="0" name="searches"
                    default="0" type="xs:integer" />
        <xs:element minOccurs="0" name="searches_avg" type="xs:decimal" />
        <xs:element minOccurs="0" name="searches_persec"
                    default="0.0" type="xs:decimal" />
        <xs:element minOccurs="0" name="inserts"
                    default="0" type="xs:integer" />
        <xs:element minOccurs="0" name="inserts_avg" type="xs:decimal" />
        <xs:element minOccurs="0" name="inserts_persec"
                    default="0.0" type="xs:decimal" />
        <xs:element minOccurs="0" name="removals"
                    default="0" type="xs:integer" />
        <xs:element minOccurs="0" name="removals_avg" type="xs:decimal" />
        <xs:element minOccurs="0" name="removals_persec"
                    default="0.0" type="xs:decimal" />
        <xs:element minOccurs="0" name="mismatches"
                    default="0" type="xs:integer" />
        <xs:element minOccurs="0" name="mismatches_avg" type="xs:decimal" />
        <xs:element minOccurs="0" name="mismatches_persec"
                    default="0.0" type="xs:decimal" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="filter_summary">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="ip" type="pf_traffic_type"/>
        <xs:element minOccurs="0" name="ipv4" type="pf_traffic_type" />
        <xs:element minOccurs="0" name="ipv6" type="pf_traffic_type" />
      </xs:sequence>
      <xs:attribute name="has_traffic" type="xs:boolean" default="true" />
    </xs:complexType>
  </xs:element>

  <xs:element name="filtered_if">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="ip" type="pf_traffic_type"/>
        <xs:element minOccurs="0" name="ipv4" type="pf_traffic_type"/>
        <xs:element minOccurs="0" name="ipv6" type="pf_traffic_type"/>
      </xs:sequence>
      <xs:attribute name="name" use="required" type="xs:token" />
      <xs:attribute name="has_traffic" type="xs:boolean" default="true" />
    </xs:complexType>
  </xs:element>

</xs:schema>
