description: >
    This defines network bonding parameters.

# TODO Fix it through https://github.com/openbmc/openbmc/issues/1438
# creatable: true

properties:
    - name: InterfaceName
      type: string
      description: >
          Name of the interface.
    - name: BondedInterfaces
      type: array[string]
      description: >
          Interfaces which needs to be bonded.
    - name: Mode
      type: enum[self.BondingMode]
      description: >
          Network interface bonding modes.
      default: RoundRobin
    - name: TransmitHashPolicy
      type: enum[self.HashPolicy]
      description:
          Selects the transmit hash policy to use for slave selection in
          balance-xor, 802.3ad, and tlb modes.
      default: Layer2

enumerations:
    - name: BondingMode
      description: >
          Possible bonding mode types.
      values:
          - name: RoundRobin
            description: >
                It is the default mode,in this mode system transmits packets in
                sequential order from the first available slave through the last.
          - name: ActiveBackup
            description: >
                In this mode, only one slave in the bond is active.
                The other one will become active, only when the active slave fails.
          - name: XOR
            description: >
                Transmit based on selectable hashing algorithm.
                The default policy is a simple source+destination MAC address algorithm.
          - name: Broadcast
            description: >
                Transmits everything on all slave interfaces.
          - name: Dynamic
            description: >
                IEEE 802.3ad Dynamic link aggregation.
          - name: TLB
            description: >
                The outgoing traffic is distributed according to the current load on each slave.
          - name: ALB
            description: >
                Incoming/outgoing traffic is distributed according to the current load on each slave.

    - name: HashPolicy
      description: >
          Possible policy types.
      values:
          - name: Layer2
            description: >
                This policy uses XOR of hardware MAC addresses and packet type ID
                field to generate the hash.
          - name: Layer2Plus3
            description: >
                This policy uses a combination of layer2 and layer3
                protocol information to generate the hash.
          - name: Layer3Plus4
            description: >
                This policy uses upper layer protocol information,
                when available, to generate the hash.
          - name: Encap2Plus3
            description: >
                This policy uses the same formula as layer2+3 but it
                relies on skb_flow_dissect to obtain the header fields
                which might result in the use of inner headers if an
                encapsulation protocol is used.
          - name: Encap3Plus4
            description: >
                This policy uses the same formula as layer3+4 but it
                relies on skb_flow_dissect to obtain the header fields
                which might result in the use of inner headers if an
                encapsulation protocol is used.