description: >
    This defines an ethernet interface.
    An object implementing this interface must implement
    xyz.openbmc_project.State.OperationalStatus.

properties:
    - name: InterfaceName
      type: string
      description: >
          Name of the ethernet interface.
    - name: Speed
      type: uint32
      description: >
          Current speed of the ethernet interface, in Mbps.
    - name: AutoNeg
      type: boolean
      description: >
          This indicates if the speed and duplex are automatically negotiated
          and configured on this ethernet interface.
    - name: MTU
      type: size
      default: 0
      description: >
          This indicates the size in bytes of largest protocol data unit,
          which can be passed in an Ethernet frame on the interface.
    - name: DomainName
      type: array[string]
      description: >
          Domain names of the ethernet interface.
    - name: DHCPEnabled
      type: enum[self.DHCPConf]
      description: >
          Address mode of the ethernet interface.
    - name: Nameservers
      type: array[string]
      description: >
          DNS servers that are currently in use on this interface.
      errors:
          - xyz::openbmc_project.Common.Error.NotAllowed
    - name: StaticNameServers
      type: array[string]
      description: >
          A statically defined set of DNS server IP addresses to be used when
          DHCP provisioning is not enabled for name server configuration. As
          an implementation option this may also be used in addition to DHCP
          provided addresses, or in cases where the DHCP server provides no DNS
          assigments.
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument
    - name: NTPServers
      type: array[string]
      description: >
          This property describes the NTP Servers on the interface.
          Implementation of this Dbus-interface is required to implement this property.
          This property supports read/write operation.
          Configure the NTP servers on the system during write operation.
    - name: LinkLocalAutoConf
      type: enum[self.LinkLocalConf]
      description: >
          This indicates link local auto configuration on this ethernet
          interface and configured on this ethernet interface.
    - name: IPv6AcceptRA
      type: boolean
      description: >
          Boolean for accepting router advertisements in IPv6. This control is
          being deprecated in favor of the DHCPConf enumerations
          below. Removal of this entry is deferred.
    - name: NICEnabled
      type: boolean
      description: >
          Boolean for to enabling or disabling the ethernet port
    - name: LinkUp
      type: boolean
      flags:
          - const
      description: >
          This property reports the link status for the NIC. The read-only
          boolean value is TRUE when the network cable is inserted, or there
          is a carrier signal. It is FALSE when the cable is unplugged, or the
          carrier signal is missing.
    - name: DefaultGateway
      type: string
      description: >
          Default IPv4 gateway of the ethernet interface.
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument
    - name: DefaultGateway6
      type: string
      description: >
          Default IPv6 gateway of the ethernet interface.
          For supported address formats refer RFC 2373.
          Refer below man page for both v4 and v6 address format details
          https://man7.org/linux/man-pages/man3/inet_pton.3.html
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument

enumerations:
    - name: LinkLocalConf
      description: >
          Possible link local auto configuration values.
      values:
          - name: fallback
          - name: both
          - name: v4
          - name: v6
          - name: none

    - name: DHCPConf
      description: >
          High level definitions of available DHCP states.
          These definitions do not have a 1:1 correlation to the
          systemd.network configuration file contents.
          both: Enable IPv4 DHCP and IPv6 Stateful DHCP
          v4v6stateless: Enable IPv4 DHCP and IPv6 SLAAC
          v6: Enable IPv6 Stateful DHCP
          v6stateless: Enable IPv6 SLAAC
          v4: Enable IPv4 DHCP
          none: Disable DHCP for IPv4 and IPv6
      values:
          - name: both
          - name: v4v6stateless
          - name: v6
          - name: v6stateless
          - name: v4
          - name: none
