##
# = Rocker switch device
##

##
# @RockerSwitch:
#
# Rocker switch information.
#
# @name: switch name
#
# @id: switch ID
#
# @ports: number of front-panel ports
#
# Since: 2.4
##
{ 'struct': 'RockerSwitch',
  'data': { 'name': 'str', 'id': 'uint64', 'ports': 'uint32' } }

##
# @query-rocker:
#
# Return rocker switch information.
#
# Returns: @Rocker information
#
# Since: 2.4
#
# Example:
#
# -> { "execute": "query-rocker", "arguments": { "name": "sw1" } }
# <- { "return": {"name": "sw1", "ports": 2, "id": 1327446905938}}
#
##
{ 'command': 'query-rocker',
  'data': { 'name': 'str' },
  'returns': 'RockerSwitch' }

##
# @RockerPortDuplex:
#
# An eumeration of port duplex states.
#
# @half: half duplex
#
# @full: full duplex
#
# Since: 2.4
##
{ 'enum': 'RockerPortDuplex', 'data': [ 'half', 'full' ] }

##
# @RockerPortAutoneg:
#
# An eumeration of port autoneg states.
#
# @off: autoneg is off
#
# @on: autoneg is on
#
# Since: 2.4
##
{ 'enum': 'RockerPortAutoneg', 'data': [ 'off', 'on' ] }

##
# @RockerPort:
#
# Rocker switch port information.
#
# @name: port name
#
# @enabled: port is enabled for I/O
#
# @link-up: physical link is UP on port
#
# @speed: port link speed in Mbps
#
# @duplex: port link duplex
#
# @autoneg: port link autoneg
#
# Since: 2.4
##
{ 'struct': 'RockerPort',
  'data': { 'name': 'str', 'enabled': 'bool', 'link-up': 'bool',
            'speed': 'uint32', 'duplex': 'RockerPortDuplex',
            'autoneg': 'RockerPortAutoneg' } }

##
# @query-rocker-ports:
#
# Return rocker switch port information.
#
# Returns: a list of @RockerPort information
#
# Since: 2.4
#
# Example:
#
# -> { "execute": "query-rocker-ports", "arguments": { "name": "sw1" } }
# <- { "return": [ {"duplex": "full", "enabled": true, "name": "sw1.1",
#                   "autoneg": "off", "link-up": true, "speed": 10000},
#                  {"duplex": "full", "enabled": true, "name": "sw1.2",
#                   "autoneg": "off", "link-up": true, "speed": 10000}
#    ]}
#
##
{ 'command': 'query-rocker-ports',
  'data': { 'name': 'str' },
  'returns': ['RockerPort'] }

##
# @RockerOfDpaFlowKey:
#
# Rocker switch OF-DPA flow key
#
# @priority: key priority, 0 being lowest priority
#
# @tbl-id: flow table ID
#
# @in-pport: #optional physical input port
#
# @tunnel-id: #optional tunnel ID
#
# @vlan-id: #optional VLAN ID
#
# @eth-type: #optional Ethernet header type
#
# @eth-src: #optional Ethernet header source MAC address
#
# @eth-dst: #optional Ethernet header destination MAC address
#
# @ip-proto: #optional IP Header protocol field
#
# @ip-tos: #optional IP header TOS field
#
# @ip-dst: #optional IP header destination address
#
# Note: fields are marked #optional to indicate that they may or may not
# appear in the flow key depending if they're relevant to the flow key.
#
# Since: 2.4
##
{ 'struct': 'RockerOfDpaFlowKey',
  'data' : { 'priority': 'uint32', 'tbl-id': 'uint32', '*in-pport': 'uint32',
             '*tunnel-id': 'uint32', '*vlan-id': 'uint16',
             '*eth-type': 'uint16', '*eth-src': 'str', '*eth-dst': 'str',
             '*ip-proto': 'uint8', '*ip-tos': 'uint8', '*ip-dst': 'str' } }

##
# @RockerOfDpaFlowMask:
#
# Rocker switch OF-DPA flow mask
#
# @in-pport: #optional physical input port
#
# @tunnel-id: #optional tunnel ID
#
# @vlan-id: #optional VLAN ID
#
# @eth-src: #optional Ethernet header source MAC address
#
# @eth-dst: #optional Ethernet header destination MAC address
#
# @ip-proto: #optional IP Header protocol field
#
# @ip-tos: #optional IP header TOS field
#
# Note: fields are marked #optional to indicate that they may or may not
# appear in the flow mask depending if they're relevant to the flow mask.
#
# Since: 2.4
##
{ 'struct': 'RockerOfDpaFlowMask',
  'data' : { '*in-pport': 'uint32', '*tunnel-id': 'uint32',
             '*vlan-id': 'uint16', '*eth-src': 'str', '*eth-dst': 'str',
             '*ip-proto': 'uint8', '*ip-tos': 'uint8' } }

##
# @RockerOfDpaFlowAction:
#
# Rocker switch OF-DPA flow action
#
# @goto-tbl: #optional next table ID
#
# @group-id: #optional group ID
#
# @tunnel-lport: #optional tunnel logical port ID
#
# @vlan-id: #optional VLAN ID
#
# @new-vlan-id: #optional new VLAN ID
#
# @out-pport: #optional physical output port
#
# Note: fields are marked #optional to indicate that they may or may not
# appear in the flow action depending if they're relevant to the flow action.
#
# Since: 2.4
##
{ 'struct': 'RockerOfDpaFlowAction',
  'data' : { '*goto-tbl': 'uint32', '*group-id': 'uint32',
             '*tunnel-lport': 'uint32', '*vlan-id': 'uint16',
             '*new-vlan-id': 'uint16', '*out-pport': 'uint32' } }

##
# @RockerOfDpaFlow:
#
# Rocker switch OF-DPA flow
#
# @cookie: flow unique cookie ID
#
# @hits: count of matches (hits) on flow
#
# @key: flow key
#
# @mask: flow mask
#
# @action: flow action
#
# Since: 2.4
##
{ 'struct': 'RockerOfDpaFlow',
  'data': { 'cookie': 'uint64', 'hits': 'uint64', 'key': 'RockerOfDpaFlowKey',
            'mask': 'RockerOfDpaFlowMask', 'action': 'RockerOfDpaFlowAction' } }

##
# @query-rocker-of-dpa-flows:
#
# Return rocker OF-DPA flow information.
#
# @name: switch name
#
# @tbl-id: #optional flow table ID.  If tbl-id is not specified, returns
# flow information for all tables.
#
# Returns: rocker OF-DPA flow information
#
# Since: 2.4
#
# Example:
#
# -> { "execute": "query-rocker-of-dpa-flows",
#      "arguments": { "name": "sw1" } }
# <- { "return": [ {"key": {"in-pport": 0, "priority": 1, "tbl-id": 0},
#                   "hits": 138,
#                   "cookie": 0,
#                   "action": {"goto-tbl": 10},
#                   "mask": {"in-pport": 4294901760}
#                  },
#                  {...more...},
#    ]}
#
##
{ 'command': 'query-rocker-of-dpa-flows',
  'data': { 'name': 'str', '*tbl-id': 'uint32' },
  'returns': ['RockerOfDpaFlow'] }

##
# @RockerOfDpaGroup:
#
# Rocker switch OF-DPA group
#
# @id: group unique ID
#
# @type: group type
#
# @vlan-id: #optional VLAN ID
#
# @pport: #optional physical port number
#
# @index: #optional group index, unique with group type
#
# @out-pport: #optional output physical port number
#
# @group-id: #optional next group ID
#
# @set-vlan-id: #optional VLAN ID to set
#
# @pop-vlan: #optional pop VLAN headr from packet
#
# @group-ids: #optional list of next group IDs
#
# @set-eth-src: #optional set source MAC address in Ethernet header
#
# @set-eth-dst: #optional set destination MAC address in Ethernet header
#
# @ttl-check: #optional perform TTL check
#
# Note: fields are marked #optional to indicate that they may or may not
# appear in the group depending if they're relevant to the group type.
#
# Since: 2.4
##
{ 'struct': 'RockerOfDpaGroup',
  'data': { 'id': 'uint32',  'type': 'uint8', '*vlan-id': 'uint16',
            '*pport': 'uint32', '*index': 'uint32', '*out-pport': 'uint32',
            '*group-id': 'uint32', '*set-vlan-id': 'uint16',
            '*pop-vlan': 'uint8', '*group-ids': ['uint32'],
            '*set-eth-src': 'str', '*set-eth-dst': 'str',
            '*ttl-check': 'uint8' } }

##
# @query-rocker-of-dpa-groups:
#
# Return rocker OF-DPA group information.
#
# @name: switch name
#
# @type: #optional group type.  If type is not specified, returns
# group information for all group types.
#
# Returns: rocker OF-DPA group information
#
# Since: 2.4
#
# Example:
#
# -> { "execute": "query-rocker-of-dpa-groups",
#      "arguments": { "name": "sw1" } }
# <- { "return": [ {"type": 0, "out-pport": 2,
#                   "pport": 2, "vlan-id": 3841,
#                   "pop-vlan": 1, "id": 251723778},
#                  {"type": 0, "out-pport": 0,
#                   "pport": 0, "vlan-id": 3841,
#                   "pop-vlan": 1, "id": 251723776},
#                  {"type": 0, "out-pport": 1,
#                   "pport": 1, "vlan-id": 3840,
#                   "pop-vlan": 1, "id": 251658241},
#                  {"type": 0, "out-pport": 0,
#                   "pport": 0, "vlan-id": 3840,
#                   "pop-vlan": 1, "id": 251658240}
#    ]}
#
##
{ 'command': 'query-rocker-of-dpa-groups',
  'data': { 'name': 'str', '*type': 'uint8' },
  'returns': ['RockerOfDpaGroup'] }
