JSON-RPC-OpenFlow¶
Notations¶
In addition to the standard JSON data types, several special types are defined to improve the expressiveness of parameters in a RPC call. The following table shows the detail of each type.
hex¶
a hex number given as a JSON string. The "0x" prefix is optional here.
Example
"hex":"0xabcd1234"
hybrid¶
could be either a hex or a string. Must be given as a JSON string. Example
"hybrid":"0xabcd1234"
"hybrid":"max"
enum¶
a JSON string whose value can just be in a limit range. The range will be defined in an array with each possible value and its meaning, and the name of the array will be given in upper case. Example
"enum":"in_port"
where the range is given in
"OFPP": [
{
"enum_value": "max",
"enum_meaning": "max port the switch can support"
},
{
"enum_value": "in_port",
"enum_meaning": "send the packet out the inpurt port. This reserved port must be explicitly used in order to send back out of the input port"
},
{
"enum_value": "table",
"enum_meaning": "submit the packet to the first flow table. Can used only in packet out message"
}
...
]
bitmap¶
a JSON array that consists of enum values Example
"bitmap":[
"port_down",
"no_fwd",
"no_packet_in"
]
where the range is given in
"OFPPC": [
{
"enum_value": "port_down",
"enum_meaning": "port is administratively down"
},
{
"enum_value": "no_recv",
"enum_meaning": "drop all packets received by port"
},
{
"enum_value": "no_fwd",
"enum_meaning": "drop packets forwarded to port"
},
{
"enum_value": "no_packet_in",
"enum_meaning": "do not send packet-in message for port "
}
...
]
bytearray¶
a JSON array that consists of decimal numbers, with each number between 0, 255, or a hex byte string with the first byte being the first element of the array. Notice that by using hex representation, one byte consists of two hex digits. Example
The following two fields represent the same byte array:
"bytearray":[1,2,3,4,5,6]
"bytearray":"0x010203040506"
Data Structures¶
ofp_match¶
an array consists of ofp_oxm objects
Example
[
{
"match_class": "openflow_basic",
"field": "ipv4_src",
"mask": "255.255.255.0",
"value": "192.168.1.1"
},
{
"match_class": "openflow_basic",
"field": "tcp_src",
"value": "5566"
}
]
ofp_oxm¶
ofp_oxm
| name | description | JSON type | restriction |
|---|---|---|---|
| match_class | oxm matching class | enum | one of OFPXMC enumeration |
| field | match field | enum | one of OFPXMT_OFB enumeration |
| value | match value | string | Unless specified, this value should be given in conventional form according to its type(e.g. TCP/UDP/SCTP ports should be given in decimal but as string |
| mask | match mask | string | the same length as value |
OFPXMC
| value | description |
|---|---|
| nxm0 | backward compatibility with NXM |
| nxm1 | backward compatibility with NXM |
| openflow_basic | basic class for OpenFlow |
| experimenter | experimenter class |
OFPXMT_OFB
| value | description |
|---|---|
| in_port | switch input port |
| in_phy_port | switch physical input port |
| metadata | metadata passed between tables |
| eth_dst | ethernet destination address |
| eth_src | ethernet source address |
| eth_type | ethernet frame type |
| vlan_id | VLAN id |
| vlan_pcp | VLAN priority |
| ip_dscp | IP DSCP(6 bits in ToS field) |
| ip_ecn | IP ECN(2 bits in ToS field) |
| ip_proto | IP protocol |
| ipv4_src | IPv4 source address |
| ipv4_dst | IPv4 destination address |
| tcp_src | tcp source port |
| tcp_dst | tcp destination port |
| udp_src | udp source port |
| udp_dst | udp destination port |
| sctp_src | sctp source port |
| sctp_dst | sctp destination port |
| icmpv4_type | ICMP type |
| icmpv4_code | ICMP code |
| arp_op | ARP opcode |
| arp_spa | ARP source IPv4 address |
| arp_tpa | ARP target IPv4 address |
| arp_sha | ARP source hardware address |
| arp_tha | ARP target hardware address |
| ipv6_src | IPv6 source address |
| ipv6_dst | IPv6 destination address |
| ipv6_flabel | IPv6 flow label |
| icmpv6_type | ICMP type |
| icmpv6_code | ICMP code |
| ipv6_nd_target | target address for ND |
| ipv6_nd_sll | source link-layer for ND |
| ipv6_nd_tll | target link-layer for ND |
| mpls_label | MPLS lable |
| mpls_tc | MPLS TC |
| mpls_bos | MPLS BoS bit |
| pbb_isid | PBB I-SID |
| tunnel_id | logical port metadata |
| ipv6_exthdr | IPv6 extension header pseudo-field |
| pbb_uca | PBB UCA header fields |
Example
{
"match_class": "openflow_basic",
"field": "ipv4_src",
"mask": "255.255.255.0",
"value": "192.168.1.1"
}
ofp_instructions¶
consists of several objects which represent different kinds of instructions. Notice that each instruction can appear only once in an instruction list.
goto_table
| name | description | JSON type | restriction |
|---|---|---|---|
| table_id | set next table in the lookup pipeline | number | a number between [0, 255] |
write_metadata
| name | description | JSON type | restriction |
|---|---|---|---|
| metadata | metadata value to write | hex | a 64-bit hex number |
| metadata_mask | metadata write bitmask | hex | a 64-bit hex number |
meter
| name | description | JSON type | restriction |
|---|---|---|---|
| meter_id | meter instance | hybrid | a 32-bit hex number between [0,0xffff0000] or one of OFPM enumeration |
experimenter
| name | description | JSON type | restriction |
|---|---|---|---|
| exp_id | experimenter id | hex | a 32-bit hex number |
| exp_data | experimenter-defined additional data | bytearray | a byte array |
apply_actions
| name | description | JSON type | restriction |
|---|---|---|---|
| ofp_actions | actions to apply | object | the same form as ofp_actions object |
write_actions
| name | description | JSON type | restriction |
|---|---|---|---|
| ofp_actions | actions to write | object | the same form as ofp_actions object |
clear_actions
null
OFPM
| value | description |
|---|---|
| max | last usable meter |
| slowpath | meter for slow datapath |
| controller | meter for controller connection |
| all | represents all meters for stat requests commands |
Example
"ofp_instructions": {
"write_actions": {
"output": {
"port_no": "0x0f"
}
},
"meter":{
"meter_id":"0x01020304"
}
}
ofp_actions¶
consists of several objects which represent different kinds of actions. Notice that each action can appear only once in an action list.
output
| name | description | JSON type | restriction |
|---|---|---|---|
| port_no | output port | hybrid | a 32-bit number between [0, 0xffffff00] or one of OFPP enumeration |
| max_len | max length to send to controller | hybrid | a 16-bit hex number between [0, 0xffe5] or one of OFPCML enumeration |
group
| name | description | JSON type | restriction |
|---|---|---|---|
| group_id | group id | hybrid | a 32-bit hex number between [0, 0xffffff00] or one of OFPG enumeration |
set_queue
| name | description | JSON type | restriction |
|---|---|---|---|
| queue_id | queue id for the packet | hex | a 32-bit hex number |
set_mpls_ttl
| name | description | JSON type | restriction |
|---|---|---|---|
| mpls_ttl | the MPLS TTL to set | number | a number between [0, 255] |
set_nw_ttl
| name | description | JSON type | restriction |
|---|---|---|---|
| nw_ttl | the NW TTL to set | number | a number between [0, 255] |
push_vlan
| name | description | JSON type | restriction |
|---|---|---|---|
| ethertype | the Ethertype of the new tag | hex | a 16-bit hex number |
push_pbb
| name | description | JSON type | restriction |
|---|---|---|---|
| ethertype | the Ethertype of the new tag | hex | a 16-bit hex number |
push_mpls
| name | description | JSON type | restriction |
|---|---|---|---|
| ethertype | the Ethertype of the new tag | hex | a 16-bit hex number |
pop_mpls
| name | description | JSON type | restriction |
|---|---|---|---|
| ethertype | the Ethertype of the MPLS payload | hex | a 16-bit hex number |
set_field
| name | description | JSON type | restriction |
|---|---|---|---|
| ofp_oxm | the field to set described by a single oxm | object | a single object having the same form as ofp_oxm object |
experimenter
| name | description | JSON type | restriction |
|---|---|---|---|
| exp_id | experimenter id | hex | a 32-bit hex number |
| exp_data | experimenter-defined additional data | bytearray | a byte array |
copy_ttl_out
null
copy_ttl_in
null
dec_mpls_ttl
null
dec_nw_ttl
null
pop_pbb
null
pop_vlan
null
OFPCML
| value | description |
|---|---|
| max | maximun max_len value which can be used to request a specific byte length |
| no_buffer | indicates that no buffering should be applied and the whole packet is to be sent to the controller |
OFPG
| value | description |
|---|---|
| max | last usable group |
| all | represents all groups for group delete commands |
| any | wildcard group used only for flow stats requests. selects all flows regardless of group (including flows with no group) |
Example
"ofp_instructions": {
"write_actions": [
{
"set_field": {
"ofp_oxm": {
"match_class": "openflow_basic",
"field": "ipv4_src",
"value": "11.0.0.1"
}
}
},
{
"set_field": {
"ofp_oxm": {
"match_class": "openflow_basic",
"field": "ipv4_dst",
"value": "11.0.0.2"
}
}
},
{
"output": {
"port_no": "0x02"
}
}
]
}
Switch Management¶
list.channels¶
list datapath id of switches connecting to this controller Params
null
Result
a JSON array consists of dpids(64-bit hex number given as string)
Example
-->
{
"id": 1,
"jsonrpc": "2.0",
"method": "list.channels",
"params": null
}
<--
{
"id": 1,
"jsonrpc": "2.0",
"result": [
"0xaabb000102030405",
"0xccdd000102030405",
"0x1234567890abcdef"
]
}
Controller-to-Switch Messaging¶
ofc.send.get_config¶
get switch configuration
Params
| name | description | JSON type | note | required |
|---|---|---|---|---|
| dpid | switch datapath id | hex | 64-bit hex number given as string | true |
Result
a JSON object containing switch configuration information
| name | description | JSON type | restriction |
|---|---|---|---|
| flags | set of configuration flags | bitmap | possible values enumerated in OFPC_FRAG |
| miss_send_len | max bytes of packet that datapath should send to the controller. | hybrid | a 16-bit hex number between [0, 0xffe5] or one of OFPCML enumeration |
Example
-->
{
"id": 1,
"jsonrpc": "2.0",
"method": "ofc.send.get_config",
"params": {
"dpid": "0xaabb000102030405"
}
}
<--
{
"id": 1,
"jsonrpc": "2.0",
"result": {
"flags": [
"normal",
"reasm"
],
"miss_send_len": "no_buffer"
}
}
OFPCML
| value | description |
|---|---|
| max | max byte length |
| no_buffer | indicates that no buffering should be applied and the whole packet is to be sent to the controller |
OFPC_FRAG
| value | description |
|---|---|
| normal | no special handling for fragments |
| drop | drop fragments |
| reasm | reassemble |
ofc.send.flow_mod¶
send a flow_mod message
Params
| name | description | JSON type | note | required |
|---|---|---|---|---|
| dpid | switch datapath id | hex | 64-bit hex number given as string | true |
| ofp_flow_mod | the flow_mod message | object | the same as described in ofp_flow_mod object | true |
Result
| name | description | JSON type | restriction |
|---|---|---|---|
| msg_id | a unique ID identifying this request | hex | global unique to the controller |
"ofp_flow_mod"::
a JSON object representing a flow_mod message
| name | description | JSON type | note | required |
|---|---|---|---|---|
| table_id | table id to be modified | hybrid | a 8-bit hex number between [0, 0xfe] or "all" for all tables | true |
| command | command to apply | enum | one of OFPFC enumeration | true |
| idle_timeout | idle time before discarding (seconds) | number | false | |
| hard_timeout | max time before discarding (seconds) | number | false | |
| priority | priority level of flow entry | number | false | |
| cookie | require matching entries to contain this cookie value | hex | a 64-bit hex number | false |
| cookie_mask | cookie mask | hex | a 64-bit hex number | false |
| buffer_id | buffered packet to apply to. Not meaningful for delete commands | hybrid | a 32-bit hex number or "no_buffer" | false |
| out_port | for delete commands, require matching entries to include this as an output port | hybrid | a 32-bit hex number as described in ofp_port object, or "any" which indicates no restriction | false |
| out_group | for delete commands, require matching entries to include this as an output group | hybrid | a 32-bit hex number, or "any" which indicates no restriction | false |
| flags | flow entry configuration flags | bitmap | possible values enumerated in OFPFF | false |
| importance | eviction precedence | number | a number between [0, 2^ 16 ] | false |
| ofp_match | matching rules | array | consists of ofp_oxm objects | false |
| ofp_instructions | instructions to apply when matched | object | the same as object | false |
OFPFF
| value | description |
|---|---|
| send_flow_rem | send flow removed message when flow expires or is deleted |
| check_overlap | check for overlapping entries first |
| reset_counts | reset flow packet and byte counts |
| no_pkt_counts | don't keep track of packet count |
| no_byt_counts | don't keep track of byte count |
OFPFC
| value | description |
|---|---|
| add | new flow |
| modify | modify all matching flows |
| modify_strict | modify entry strictly matching wildcards and priority |
| delete | delete all matching flows |
| delete_strict | delete entry strictly matching wildcars and priority |
Example
-->
{
"id": 1,
"jsonrpc": "2.0",
"method": "ofc.send.flow_mod",
"params": {
"dpid": "0xaabb000102030405",
"ofp_flow_mod": {
"command": "add",
"flags": [
"reset_counts",
"send_flow_rem"
],
"idle_timeout": 14,
"ofp_instructions": {
"apply_actions": {
"output": {
"port_no": "0x0f"
}
}
},
"ofp_match": [
{
"match_class": "openflow_basic",
"field": "ipv4_src",
"mask": "255.255.255.0",
"value": "192.168.1.1"
}
],
"priority": 18,
"table_id": "0x0f"
}
}
}
<--
{
"id": 1,
"jsonrpc": "2.0",
"result": {
"msg_id": "0x01020304"
}
}
ofc.send.barrier¶
send barrier message, used to ensure message dependencies have been met or wants to receive notifications for completed operations. The switch will continue to execute new commands only if all the messages before the barrier have been processed
Params
| name | description | JSON type | note | required |
|---|---|---|---|---|
| "dpid" | switch datapath id | string | 64-bit hex number given as string | true |
Result
a JSON String. "Barrier Reply" on success.
Example
-->
{
"id": 1,
"jsonrpc": "2.0",
"method": "ofc.send.barrier",
"params": {
"dpid": "0xaabb000102030405"
}
}
<--
{
"id": 1,
"jsonrpc": "2.0",
"result": "Barrier Reply"
}
ofc.send.role_request¶
used to query or change the role of controller
Params
| name | description | JSON type | note | required |
|---|---|---|---|---|
| dpid | switch datapath id | hex | 64-bit hex number given as string | true |
| role | new role that the controller wants to assume | enum | one of OFPCR enumeration | true |
Result
| name | description | JSON type | restriction |
|---|---|---|---|
| role | new role that accepted by switch. if the request is no_change, then the original role will be returned | enum | one of OFPCR enumeration. This field exists only if the new role is accepted by switch. |
OFPCR
| value | description |
|---|---|
| nochange | don't change current role |
| equal | default role, full access |
| master | full access, at most one master |
| slave | read-only access |
Example
-->
{
"id": 1,
"jsonrpc": "2.0",
"method": "ofc.send.role_request",
"params": {
"dpid": "0xaabb000102030405",
"role": "no_change"
}
}
<--
{
"id": 1,
"jsonrpc": "2.0",
"result": {
"role": "equal"
}
}
ofc.send.multipart.flow¶
get statistic information about individual flow entries
Params
| name | description | JSON type | note | required |
|---|---|---|---|---|
| dpid | switch datapath id | hex | 64-bit hex number given as string | true |
| ofp_multipart_flow | a multipart_flow message | object | format described in | true |
Result
a JSON object consists of ofp_flow_stats object, whose format is introduced below
Properties of "ofp_multipart_flow" object
| name | description | JSON type | note | required |
|---|---|---|---|---|
| table_id | table id | hybrid | a 8-bit hex number between [0, 0xfe] or "all" for all tables | true |
| out_port | Require matching entries to include this as an output port. | hybrid | a 32-bit hex number as described in ofp_port object, or "any" which indicates no restriction | false |
| out_group | Require matching entries to include this as an output group | hybrid | a 32-bit hex number, or "any" which indicates no restriction | false |
| cookie | Require matching entries to contain this cookie value | hex | a 64-bit hex number | false |
| cookie_mask | Require matching entries to contain this cookie value | hex | a 64-bit hex number,mask used to restrict the cookie bits that must match. | false |
| ofp_match | matching rules | array | consists of ofp_oxm objects | false |
Properties of "ofp_flow_stats" object
| name | description | JSON type | note |
|---|---|---|---|
| table_id | table id the flow came from | hybrid | a 8-bit hex number between [0, 0xfe] or "all" for all tables |
| packet_count | number of packet in flow | number | |
| byte_count | number of byte in flow | number | |
| idle_timeout | idle time before discarding (seconds) | number | |
| hard_timeout | max time before discarding (seconds) | number | |
| duration_sec | time flow has been alive in seconds | number | |
| duration_nsec | time flow has been alive in nanoseconds beyond duration_sec | number | |
| priority | priority level of flow entry | number | |
| flags | flow entry configuration flags | bitmap | possible values enumerated in OFPFF |
| cookie | require matching entries to contain this cookie value | hex | a 64-bit hex number |
| importance | eviction precedence | number | a number between [0, 2^ 16 ] |
| ofp_match | matching rules | array | consists of ofp_oxm objects |
| ofp_instructions | instructions to apply when matched | object | the same as ofp_instructions object |
OFPFF
| value | description |
|---|---|
| send_flow_rem | send flow removed message when flow expires or is deleted |
| check_overlap | check for overlapping entries first |
| reset_counts | reset flow packet and byte counts |
| no_pkt_counts | don't keep track of packet count |
| no_byt_counts | don't keep track of byte count |
Example
-->
{
"id": 1,
"jsonrpc": "2.0",
"method": "ofc.send.multipart.flow",
"params": {
"dpid": "0xaabb000102030405",
"ofp_multipart_flow": {
"ofp_match": [
{
"match_class": "openflow_basic",
"field": "ipv4_src",
"mask": "255.255.255.0",
"value": "192.168.1.1"
}
],
"table_id": "0x0f"
}
}
}
<--
{
"id": 1,
"jsonrpc": "2.0",
"result": [
{
"table_id": "0xe0",
"packet_count": 29348,
"byte_count": 7039684,
"idle_timeout": 3,
"hard_timeout": 15,
"duration_sec": 10,
"duration_nsec": 56,
"priority": 19,
"importance": 28,
"cookie": "0x1234567890abcdef",
"flags": [
"check_overlap",
"send_flow_rem"
],
"ofp_match": [
{
"match_class": "openflow_basic",
"field": "ipv4_src",
"mask": "255.255.255.0",
"value": "192.168.1.1"
},
{
"match_class": "openflow_basic",
"field": "tcp_src",
"value": "5566"
}
],
"ofp_instructions": {
"apply_actions": {
"output": {
"port_no": "0x0f"
}
}
}
},
{
"table_id": "0xe0",
"packet_count": 29348,
"byte_count": 7039684,
"idle_timeout": 7,
"hard_timeout": 9,
"duration_sec": 2,
"duration_nsec": 99,
"priority": 37,
"importance": 89,
"cookie": "0x000000000000000f",
"flags": [],
"ofp_match": [
{
"match_class": "openflow_basic",
"field": "ipv4_src",
"mask": "255.255.255.0",
"value": "192.168.1.1"
}
],
"ofp_instructions": {
"goto_table": {
"table_id": "0x0f"
}
}
}
]
}
ofc.send.multipart.port_stats¶
get aggregate statistic information about ports
Params
| name | description | JSON type | note | required |
|---|---|---|---|---|
| dpid | switch datapath id | hex | 64-bit hex number given as string | true |
| port_no | port that this queue attaching to, should refer to a valid physical port | hybrid | a 32-bit number between [0, 0xffffff00) or "all" for all ports | true |
Result
| name | description | JSON type | note |
|---|---|---|---|
| port_no | port that this queue attaching to, should refer to a valid physical port | hybrid | a 32-bit number between [0, 0xffffff00) or "any" for all ports |
| tx_packets | number of transmitted packets | number | |
| rx_packets | number of received packets | number | |
| tx_bytes | number of transmitted bytes | number | |
| rx_bytes | number of received bytes | number | |
| tx_dropped | number of dropped packets | number | |
| rx_dropped | number of dropped packets | number | |
| tx_errors | Number of transmit errors. | number | a super-set of more specific transmit errors and should be greater than or equal to the sum of all tx_*_err values (none currently defined.) |
| rx_errors | Number of receive errors. | number | a super-set of more specific receive errors and should be greater than or equal to the sum of all rx_*_err values (none currently defined.) |
| duration_sec | time port has been alive in seconds | number | |
| duration_nsec | time port has been alive in nanoseconds beyond duration_sec | number | |
| properties | property list of port type specific statistics | array | consists of ofp_port_stats_prop objects |
Properties of ofp_port_stats_prop object
| name | description | JSON type | note |
|---|---|---|---|
| type | port type | enum | one of OFPPSPT enumeration |
| rx_frame_err | number of frame alignment errors | number | only valid for type OFPPSPT_ETHERNET |
| rx_crc_err | number of CRC errors | number | only valid for type OFPPSPT_ETHERNET |
| rx_over_err | number of packets with RX overrun | number | only valid for type OFPPSPT_ETHERNET |
| collisions | number of collisions | number | only valid for type OFPPSPT_ETHERNET |
| flags | features enabled by the port | bitmap | possible values enumerated in OFPOSF |
|---|---|---|---|
| tx_freq_lmda | current TX frequency/Wavelength | number | only valid for type OFPPSPT_OPTICAL |
| tx_offset | TX offset | number | only valid for type OFPPSPT_OPTICAL |
| tx_grid_span | TX grid spacing | number | only valid for type OFPPSPT_OPTICAL |
| rx_freq_lmda | current RX frequency/Wavelength | number | only valid for type OFPPSPT_OPTICAL |
| rx_offset | RX offset | number | only valid for type OFPPSPT_OPTICAL |
| rx_grid_span | RX grid spacing | number | only valid for type OFPPSPT_OPTICAL |
| tx_pwr | current TX power | number | only valid for type OFPPSPT_OPTICAL |
| rx_pwr | current RX power | number | only valid for type OFPPSPT_OPTICAL |
| tx_grid_span | TX grid spacing | number | only valid for type OFPPSPT_OPTICAL |
| bias_current | TX Bias current | number | only valid for type OFPPSPT_OPTICAL |
| temperature | TX laser temperature | number | only valid for type OFPPSPT_OPTICAL |
| exp_id | id of the Experimenter | hex | a 32-bit hex number, only valid for type OFPPSPT_EXPERIMENTER |
|---|---|---|---|
| exp_type | experimenter defined type | hex | a 32-bit hex number, only valid for type OFPPSPT_EXPERIMENTER |
| exp_data | experiment data | bytearray | only valid for type OFPPSPT_EXPERIMENTER |
OFPPSPT
| value | description |
|---|---|
| ethernet | ethernet property |
| optical | optical property |
| experimenter | experimenter property |
OFPOSF
| value | description |
|---|---|
| rx_tune | receiver tune info valid |
| tx_tune | transmit tune info valid |
| tx_pwr | TX power is valid |
| rx_pwr | RX power is valid |
| tx_bias | transmit bias is valid |
| tx_temp | TX temp is valid |
Example
-->
{
"id": 1,
"jsonrpc": "2.0",
"method": "ofc.send.multipart.port_stats",
"params": {
"dpid": "0xaabb000102030405",
"port_no": "0xe0"
}
}
<--
{
"id": 1,
"jsonrpc": "2.0",
"result": [
{
"port_no": "0xe0",
"tx_packets": 28290,
"rx_packets": 29348,
"tx_bytes": 7039684,
"rx_bytes": 7200243,
"tx_dropped": 609,
"rx_dropped": 534,
"tx_errors": 97,
"rx_errors": 80,
"duration_sec": 2,
"duration_nsec": 56,
"properties": [
{
"type": "OFPPSPT_ETHERNET",
"rx_frame_err": 8,
"rx_crc_err": 15,
"rx_over_err": 57,
"collisions": 18
}
]
}
]
}
ofc.send.multipart.port_description¶
get a description of all the ports in the system that support OpenFlow
Params
| name | description | JSON type | note | required |
|---|---|---|---|---|
| dpid | switch datapath id | hex | 64-bit hex number given as string | true |
Result
| name | description | JSON type | note |
|---|---|---|---|
| port_no | port that this queue attaching to, should refer to a valid physical port | hybrid | a 32-bit number between [0, 0xffffff00) or "any" for all ports |
| hw_addr | Hardware address of the interface | number | |
| name | Name of the interface | number | |
| config | Bitmap of OFPPC_* flags | number | |
| state | Bitmap of OFPPS_* flags | number | |
| properties | property list of port type specific statistics | array | consists of ofp_port_desc_prop objects |
Properties of ofp_port_desc_prop object
| name | description | JSON type | note |
|---|---|---|---|
| type | port type | enum | |
| curr | number of frame alignment errors | number | |
| advertised | Features being advertised by the port | number | |
| supported | Features supported by the port | number | |
| peer | Features advertised by peer | number | |
| curr_speed | Current port bitrate in kbps | number | |
| max_speed | Max port bitrate in kbps | number |
Example
-->
{
"jsonrpc": "2.0",
"method": "ofc.send.multipart.port_description",
"params": {
"dpid": "0x0000000000000001"
},
"id": 1
}
<--
{
"jsonrpc": "2.0",
"result": [
{
"port_no": "1",
"hw_addr": "ea:68:7d:44:9:75",
"name": "s1-eth1",
"config": [],
"state": [],
"properties": [
{
"type": "ETHERNET",
"curr": [],
"advertised": [],
"supported": [],
"peer": [],
"curr_speed": 0,
"max_speed": 102400
}
]
},
{
"port_no": "2",
"hw_addr": "22:9d:cb:f9:97:cd",
"name": "s1-eth2",
"config": [],
"state": [],
"properties": [
{
"type": "ETHERNET",
"curr": [],
"advertised": [],
"supported": [],
"peer": [],
"curr_speed": 0,
"max_speed": 102400
}
]
}
],
"id": 1
}