Table of Contents
Ryu: ofctl_rest
ryu.app.ofctl_rest fournit des API REST permettant de récupérer les statistiques du commutateur et de mettre à jour les statistiques du commutateur. Cette application vous aide à déboguer votre application et à obtenir diverses statistiques.
Cette application prend en charge OpenFlow version 1.0, 1.2, 1.3, 1.4 et 1.5.
Récupérer les statistiques du commutateur
Récapitulatif des Match fields
| Match field | Description | Exemple |
|---|---|---|
| in_port | Switch input port (int) | {“in_port”: 7} |
| in_phy_port | Switch physical input port (int) | {“in_phy_port”: 5, “in_port”: 3} |
| metadata | Metadata passed between tables (int or string) | {“metadata”: 12345} or {“metadata”: “0x1212/0xffff”} |
| eth_dst | Ethernet destination address (string) | {“eth_dst”: “aa:bb:cc:11:22:33/00:00:00:00:ff:ff”} |
| eth_src | Ethernet source address (string) | {“eth_src”: “aa:bb:cc:11:22:33”} |
| eth_type | Ethernet frame type (int) | {“eth_type”: 2048} |
| vlan_vid | VLAN id (int or string) | See :ref:example-of-vlan-id-match-field |
| vlan_pcp | VLAN priority (int) | {“vlan_pcp”: 3, “vlan_vid”: 3} |
| ip_dscp | IP DSCP (6 bits in ToS field) (int) | {“ip_dscp”: 3, “eth_type”: 2048} |
| ip_ecn | IP ECN (2 bits in ToS field) (int) | {“ip_ecn”: 0, “eth_type”: 34525} |
| ip_proto | IP protocol (int) | {“ip_proto”: 5, “eth_type”: 34525} |
| ipv4_src | IPv4 source address (string) | {“ipv4_src”: “192.168.0.1”, “eth_type”: 2048} |
| ipv4_dst | IPv4 destination address (string) | {“ipv4_dst”: “192.168.10.10/255.255.255.0”, “eth_type”: 2048} |
| tcp_src | TCP source port (int) | {“tcp_src”: 3, “ip_proto”: 6, “eth_type”: 2048} |
| tcp_dst | TCP destination port (int) | {“tcp_dst”: 5, “ip_proto”: 6, “eth_type”: 2048} |
| udp_src | UDP source port (int) | {“udp_src”: 2, “ip_proto”: 17, “eth_type”: 2048} |
| udp_dst | UDP destination port (int) | {“udp_dst”: 6, “ip_proto”: 17, “eth_type”: 2048} |
| sctp_src | SCTP source port (int) | {“sctp_src”: 99, “ip_proto”: 132, “eth_type”: 2048} |
| sctp_dst | SCTP destination port (int) | {“sctp_dst”: 99, “ip_proto”: 132, “eth_type”: 2048} |
| icmpv4_type | ICMP type (int) | {“icmpv4_type”: 5, “ip_proto”: 1, “eth_type”: 2048} |
| icmpv4_code | ICMP code (int) | {“icmpv4_code”: 6, “ip_proto”: 1, “eth_type”: 2048} |
| arp_op | ARP opcode (int) | {“arp_op”: 3, “eth_type”: 2054} |
| arp_spa | ARP source IPv4 address (string) | {“arp_spa”: “192.168.0.11”, “eth_type”: 2054} |
| arp_tpa | ARP target IPv4 address (string) | {“arp_tpa”: “192.168.0.44/24”, “eth_type”: 2054} |
| arp_sha | ARP source hardware address (string) | {“arp_sha”: “aa:bb:cc:11:22:33”, “eth_type”: 2054} |
| arp_tha | ARP target hardware address (string) | {“arp_tha”: “aa:bb:cc:11:22:33/00:00:00:00:ff:ff”, “eth_type”: 2054} |
| ipv6_src | IPv6 source address (string) | {“ipv6_src”: “2001::aaaa:bbbb:cccc:1111”, “eth_type”: 34525} |
| ipv6_dst | IPv6 destination address (string) | {“ipv6_dst”: “2001::ffff:cccc:bbbb:1111/64”, “eth_type”: 34525} |
| ipv6_flabel | IPv6 Flow Label (int) | {“ipv6_flabel”: 2, “eth_type”: 34525} |
| icmpv6_type | ICMPv6 type (int) | {“icmpv6_type”: 3, “ip_proto”: 58, “eth_type”: 34525} |
| icmpv6_code | ICMPv6 code (int) | {“icmpv6_code”: 4, “ip_proto”: 58, “eth_type”: 34525} |
| ipv6_nd_target | Target address for Neighbor Discovery (string) | {“ipv6_nd_target”: “2001::ffff:cccc:bbbb:1111”, “icmpv6_type”: 135, “ip_proto”: 58, “eth_type”: 34525} |
| ipv6_nd_sll | Source link-layer for Neighbor Discovery (string) | {“ipv6_nd_sll”: “aa:bb:cc:11:22:33”, “icmpv6_type”: 135, “ip_proto”: 58, “eth_type”: 34525} |
| ipv6_nd_tll | Target link-layer for Neighbor Discovery (string) | {“ipv6_nd_tll”: “aa:bb:cc:11:22:33”, “icmpv6_type”: 136, “ip_proto”: 58, “eth_type”: 34525} |
| mpls_label | MPLS label (int) | {“mpls_label”: 3, “eth_type”: 34888} |
| mpls_tc | MPLS Traffic Class (int) | {“mpls_tc”: 2, “eth_type”: 34888} |
| mpls_bos | MPLS BoS bit (int) (Openflow1.3+) | {“mpls_bos”: 1, “eth_type”: 34888} |
| pbb_isid | PBB I-SID (int or string) (Openflow1.3+) | {“pbb_isid”: 5, “eth_type”: 35047} or{“pbb_isid”: “0x05/0xff”, “eth_type”: 35047} |
| tunnel_id | Logical Port Metadata (int or string) (Openflow1.3+) | {“tunnel_id”: 7} or {“tunnel_id”: “0x07/0xff”} |
| ipv6_exthdr | IPv6 Extension Header pseudo-field (int or string) (Openflow1.3+) | {“ipv6_exthdr”: 3, “eth_type”: 34525} or {“ipv6_exthdr”: “0x40/0x1F0”, “eth_type”: 34525} |
| pbb_uca | PBB UCA hander field(int) (Openflow1.4+) | {“pbb_uca”: 1, “eth_type”: 35047} |
| tcp_flags | TCP flags(int) (Openflow1.5+) | {“tcp_flags”: 2, “ip_proto”: 6, “eth_type”: 2048} |
| actset_output | Output port from action set metadata(int) (Openflow1.5+) | {“actset_output”: 3} |
| packet_type | Packet type value(int) (Openflow1.5+) | {“packet_type”: [1, 2048]} |
Liste de tous les commutateurs
Obtenir la liste de tous les commutateurs connectés au contrôleur.
Usage:
| Méthode | GET |
| URI | /stats/commutateurs |
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | 1 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/switches
[ 1 , 2 , 3 ]
Statistiques de desc
Obtenir les statistiques de descente du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/desc/<dpid> |
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| mfr_desc | Description du fabricant | “Nicira, Inc.”, |
| hw_desc | Description du matériel | “Open vSwitch”, |
| sw_desc | Description du logiciel | “2.3.90”, |
| serial_num | Numéro de série | “Aucun”, |
| dp_desc | Description lisible par l'homme du chemin de données | “Aucun” |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/desc/1
{
"1" : {
"mfr_desc" : "Nicira, Inc." ,
"hw_desc" : "Open vSwitch" ,
"sw_desc" : "2.3.90" ,
"serial_num" : "None" ,
"dp_desc" : "None"
}
}
Statistiques de flux
Obtenir toutes les statistiques de flux du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GETS |
| URI | /stats/flow/<dpid> |
Corps du message de réponse (OpenFlow1.3 ou antérieur):
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| length | Longueur de cette entrée | 88 |
| id_table | ID de table | 0 |
| duration_sec | Le flux de temps a été vivant en secondes | 2 |
| duration_nsec | Le flux de temps a été vivant en nanosecondes au-delà de duration_sec | 6.76e + 08 |
| priority | Priorité de l'entrée | 11111 |
| idle_timeout | Nombre de secondes d'inactivité avant l'expiration | 0 |
| hard_timeout | Nombre de secondes avant l'expiration | 0 |
| flags | Bitmap des drapeaux OFPFF_ * | 1 |
| cookie | Identifiant émis par le contrôleur opaque | 1 |
| packet_count | Nombre de paquets en flux | 0 |
| byte_count | Nombre d'octets dans le flux | 0 |
| match | Champs à rechercher | {“in_port”: 1} |
| actions | Jeu d'instructions | [“SORTIE: 2”] |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/flow/1
Réponse (OpenFlow1.3 ou version antérieure):
{
"1" : [
{
"length" : 88 ,
"table_id" : 0 ,
"duration_sec" : 2 ,
"duration_nsec" : 6.76e+08 ,
"priority" : 11111 ,
"idle_timeout" : 0 ,
"hard_timeout" : 0 ,
"flags" : 1 ,
"cookie" : 1 ,
"packet_count" : 0 ,
"byte_count" : 0 ,
"match" : {
"in_port" : 1
},
"actions" : [
"OUTPUT:2"
]
}
]
}
Statistiques de flux filtrés par champs
Obtenez les statistiques de flux du commutateur filtrées par les champs OFPFlowStats. Ceci est la version POST de la méthode Obtenir toutes les statistiques de flux .
Usage:
| Méthode | POST |
| URI | /stats/flow/<dpid> |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| id_table | ID de table (int) | 0 | OFPTT_ALL |
| out_port | Exiger des entrées correspondantes pour l'inclure en tant que port de sortie (int) | 2 | OFPP_ANY |
| out_group | Exiger des entrées correspondantes pour l'inclure en tant que groupe de sortie (int) | 1 | OFPG_ANY |
| cookie | Exiger que les entrées correspondantes contiennent cette valeur de cookie (int) | 1 | 0 |
| cookie_mask | Masque utilisé pour restreindre les bits de cookie qui doivent correspondre (int) | 1 | 0 |
| match | Champs à faire correspondre (dict) | {“in_port”: 1} | {} #wildcarded |
| priority | Priorité de l'entrée (int) (voir la note) | 11111 | #wildcarded |
OpenFlow Spec ne permet pas de filtrer les entrées de flux par priorité, mais lorsque le nombre d'entrées de flux est élevé, le filtrage par priorité est pratique pour obtenir des statistiques efficacement. Donc, cette application fournit un champ de priorité pour le filtrage.
Corps du message de réponse
Identique à Obtenir toutes les statistiques de flux
Exemple d'utilisation:
$ curl -X POST -d '{
"table_id": 0,
"out_port": 2,
"cookie": 1,
"cookie_mask": 1,
"match":{
"in_port":1
}
}' http://localhost:8080/stats/flow/1
Réponse (OpenFlow1.3 ou version antérieure):
{
"1" : [
{
"length" : 88 ,
"table_id" : 0 ,
"duration_sec" : 2 ,
"duration_nsec" : 6.76e+08 ,
"priority" : 11111 ,
"idle_timeout" : 0 ,
"hard_timeout" : 0 ,
"flags" : 1 ,
"cookie" : 1 ,
"packet_count" : 0 ,
"byte_count" : 0 ,
"match" : {
"in_port" : 1
},
"actions" : [
"OUTPUT:2"
]
}
]
}
Statistiques de flux globales
Obtenir des statistiques de flux globales du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/aggregflow/<dpid> |
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| packet_count | Nombre de paquets dans les flux | 18 |
| nombre d'octets | Nombre d'octets dans les flux | 756 |
| flow_count | Nombre de flux | 3 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/aggregateflow/1
{
"1" : [
{
"packet_count" : 18 ,
"byte_count" : 756 ,
"flow_count" : 3
}
]
}
Statistiques de flux agrégées filtrées par champs
Obtenir des statistiques de flux globales du commutateur filtrées par les champs OFPAggregateStats. Ceci est la version POST de la méthode Obtenir des statistiques de flux globales .
Usage:
| Méthode | POST |
| URI |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| id_table | ID de table (int) | 0 | OFPTT_ALL |
| out_port | Exiger des entrées correspondantes pour l'inclure en tant que port de sortie (int) | 2 | OFPP_ANY |
| out_group | Exiger des entrées correspondantes pour l'inclure en tant que groupe de sortie (int) | 1 | OFPG_ANY |
| cookie | Exiger que les entrées correspondantes contiennent cette valeur de cookie (int) | 1 | 0 |
| cookie_mask | Masque utilisé pour restreindre les bits de cookie qui doivent correspondre (int) | 1 | 0 |
| match | Champs à faire correspondre (dict) | {“in_port”: 1} | {} #wildcarded |
Corps du message de réponse
Identique à celui des statistiques de flux globales
Exemple d'utilisation:
$ curl -X POST -d '{
"table_id": 0,
"out_port": 2,
"cookie": 1,
"cookie_mask": 1,
"match":{
"in_port":1
}
}' http://localhost:8080/stats/aggregateflow/1
{
"1" : [
{
"packet_count" : 18 ,
"byte_count" : 756 ,
"flow_count" : 3
}
]
}
Statistiques de la table
Obtenir les statistiques de table du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/table/<dpid> |
Corps du message de réponse (OpenFlow1.3):
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| id_table | ID de table | 0 |
| active_count | Nombre d'entrées actives | 0 |
| lookup_count | Nombre de paquets recherchés dans la table | 8 |
| matched_count | Nombre de paquets ayant atteint la table | 0 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/table/1
{
"1" : [
{
"active_count" : 0 ,
"table_id" : 0 ,
"lookup_count" : 8 ,
"matched_count" : 0
},
...
{
"active_count" : 0 ,
"table_id" : 253 ,
"lookup_count" : 0 ,
"matched_count" : 0
}
]
}
Fonctionnalités de la table
Obtenir les caractéristiques de table du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/tablefeatures/<dpid> |
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| id_table | ID de table | 0 |
| name | Nom de la table | “table_0” |
| metadata_match | Les bits de la table de métadonnées peuvent correspondre | 18446744073709552000 |
| metadata_write | Les bits de la table de métadonnées peuvent écrire | 18446744073709552000 |
| config | Bitmap des valeurs OFPTC_ * | 0 |
| max_entries | Nombre maximum d'entrées supportées | 4096 |
| properties | struct ofp_table_feature_prop_header | [{“type”: “INSTRUCTIONS”, “instruction_ids”: […]}, …] |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/tablefeatures/1
{
"1" : [
{
"metadata_write" : 18446744073709552000 ,
"config" : 0 ,
"table_id" : 0 ,
"metadata_match" : 18446744073709552000 ,
"max_entries" : 4096 ,
"properties" : [
{
"type" : "INSTRUCTIONS" ,
"instruction_ids" : [
{
"len" : 4 ,
"type" : 1
},
...
]
},
...
],
"name" : "table_0"
},
{
"metadata_write" : 18446744073709552000 ,
"config" : 0 ,
"table_id" : 1 ,
"metadata_match" : 18446744073709552000 ,
"max_entries" : 4096 ,
"properties" : [
{
"type" : "INSTRUCTIONS" ,
"instruction_ids" : [
{
"len" : 4 ,
"type" : 1
},
...
]
},
...
],
"name" : "table_1"
},
...
]
}
Statistiques des ports
Obtenir les statistiques de ports du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/port/<dpid> [/<port>] |
La spécification du numéro de port est facultative.
Corps du message de réponse (OpenFlow1.3 ou antérieur):
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| port_no | Numéro de port | 1 |
| rx_packets | Nombre de paquets reçus | 9 |
| tx_packets | Nombre de paquets transmis | 6 |
| rx_bytes | Nombre d'octets reçus | 738 |
| tx_bytes | Nombre d'octets transmis | 252 |
| rx_dropped | Nombre de paquets rejetés par RX | 0 |
| tx_dropped | Nombre de paquets rejetés par TX | 0 |
| rx_errors | Nombre d'erreurs de réception | 0 |
| tx_errors | Nombre d'erreurs de transmission | 0 |
| rx_frame_err | Nombre d'erreurs d'alignement de trame | 0 |
| rx_over_err | Nombre de paquets avec saturation RX | 0 |
| rx_crc_err | Nombre d'erreurs CRC | 0 |
| les collisions | Nombre de collisions | 0 |
| durée_sec | Le port de temps a été vivant en secondes | 12 |
| duration_nsec | Le port de temps a été vivant en nanosecondes au-delà de duration_sec | 9.76e + 08 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/port/1
Réponse (OpenFlow1.3 ou version antérieure):
{
"1" : [
{
"port_no" : 1 ,
"rx_packets" : 9 ,
"tx_packets" : 6 ,
"rx_bytes" : 738 ,
"tx_bytes" : 252 ,
"rx_dropped" : 0 ,
"tx_dropped" : 0 ,
"rx_errors" : 0 ,
"tx_errors" : 0 ,
"rx_frame_err" : 0 ,
"rx_over_err" : 0 ,
"rx_crc_err" : 0 ,
"collisions" : 0 ,
"duration_sec" : 12 ,
"duration_nsec" : 9.76e+08
},
{
:
:
}
]
}
Description des ports
Obtenir la description des ports du commutateur spécifié avec l'ID Datapath dans l'URI.
Utilisation (OpenFlow1.4 ou version antérieure):
| Méthode | GET |
| URI | /stats/portdesc/<dpid> |
Corps du message de réponse (OpenFlow1.3 ou antérieur):
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| port_no | Numéro de port | 1 |
| hw_addr | Adresse matérielle Ethernet | “0a: b6: d0: 0c: e1: d7” |
| name | Nom du port | “s1-eth1” |
| config | Bitmap des drapeaux OFPPC_ * | 0 |
| state | Bitmap des drapeaux OFPPS_ * | 0 |
| curr | Caractéristiques actuelles | 2112 |
| advertised | Caractéristiques annoncées par le port | 0 |
| supported | Fonctionnalités prises en charge par le port | 0 |
| peer | Caractéristiques annoncées par les pairs | 0 |
| curr_speed | Débit actuel du port en kbps | 1e + 07 |
| max_speed | Débit maximum de port en kbps | 0 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/portdesc/1
Réponse (OpenFlow1.3 ou version antérieure):
{
"1" : [
{
"port_no" : 1 ,
"hw_addr" : "0a:b6:d0:0c:e1:d7" ,
"name" : "s1-eth1" ,
"config" : 0 ,
"state" : 0 ,
"curr" : 2112 ,
"advertised" : 0 ,
"supported" : 0 ,
"peer" : 0 ,
"curr_speed" : 1 e + 07 ,
"max_speed" : 0
},
{
:
:
}
]
}
Statistiques des files d'attente
Obtenir les statistiques de la file d'attente du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/queue/<dpid> [/<port> [/<queue_id>]] |
La spécification du numéro de port et de l'identifiant de la file d'attente est facultative.
Pour omettre le numéro de port et définir l'ID de la file d'attente, spécifier le mot clé “ALL” pour le numéro de port, par exemple, GET http://localhost: 8080/stats/queue/1/ALL/1
Corps du message de réponse (OpenFlow1.3 ou antérieur):
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| port_no | Numéro de port | 1 |
| queue_id | ID de file d'attente | 0 |
| tx_bytes | Nombre d'octets transmis | 0 |
| tx_packets | Nombre de paquets transmis | 0 |
| tx_errors | Nombre de paquets rejetés en raison d'un dépassement | 0 |
| duration_sec | La file d'attente a été ouverte en quelques secondes | 4294963425 |
| duration_nsec | La file d'attente a été ouverte en nanosecondes au-delà de duration_sec | 3912967296 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/queue/1
Réponse (OpenFlow1.3 ou version antérieure):
{
"1" : [
{
"port_no" : 1 ,
"queue_id" : 0 ,
"tx_bytes" : 0 ,
"tx_packets" : 0 ,
"tx_errors" : 0 ,
"duration_sec" : 4294963425 ,
"duration_nsec" : 3912967296
},
{
"port_no" : 1 ,
"queue_id" : 1 ,
"tx_bytes" : 0 ,
"tx_packets" : 0 ,
"tx_errors" : 0 ,
"duration_sec" : 4294963425 ,
"duration_nsec" : 3912967296
}
]
}
Configuration des files d'attente
Obtenir la configuration des files d'attente du commutateur spécifié avec l'ID Datapath et le port dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/queueconfig/<dpid>/[<port>] |
La spécification du numéro de port est facultative.
Ce message est obsolète dans Openflow1.4. Si OpenFlow 1.4 ou version ultérieure est en cours d'utilisation, veuillez vous reporter à la description Obtenir des files d'attente .
Corps du message de réponse
| Attribut | Description | Exemple | |
|---|---|---|---|
| dpid | ID de Datapath | “1” | |
| port | Port qui a été interrogé | 1 | |
| queues | struct ofp_packet_queue | ||
| – queue_id | ID de la file d'attente spécifique | 2 | |
| – port | Port auquel cette file d'attente est attachée | 0 | |
| – properties | Propriétés de la struct ofp_queue_prop_header | [{“property”: “MIN_RATE”, “rate”: 80}] | |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/queueconfig/1/1
{
"1" : [
{
"port" : 1 ,
"queues" : [
{
"properties" : [
{
"property" : "MIN_RATE" ,
"rate" : 80
}
],
"port" : 0 ,
"queue_id" : 1
},
{
"properties" : [
{
"property" : "MAX_RATE" ,
"rate" : 120
}
],
"port" : 2 ,
"queue_id" : 2
},
{
"properties" : [
{
"property" : "EXPERIMENTER" ,
"data" : [],
"experimenter" : 999
}
],
"port" : 3 ,
"queue_id" : 3
}
]
}
]
}
Description des files d'attente
Obtenir la description des files d'attente du commutateur spécifié avec l'ID, le port et le Queue_id de Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/queuedesc/<dpid> [/<port>/[<queue_id>]] |
La spécification du numéro de port et de l'identifiant de la file d'attente est facultative.
Pour omettre le numéro de port et définir l'ID de la file d'attente, spécifiez le mot clé “ALL” pour le numéro de port, par exemple, GET http://localhost: 8080/stats/queuedesc/1/ALL/1
Ce message n'est disponible que depuis OpenFlow1.4. Pour Openflow1.3 ou une version antérieure, se reporter à la section Obtenir la configuration de files d'attente.
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| len | Longueur en octets de cette file d'attente desc | 88 |
| port_no | Port qui a été interrogé | 1 |
| queue_id | ID de file d'attente | 1 |
| properties | struct ofp_queue_desc_prop_header | [{“longueur”: 8, …}, …] |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/queuedesc/1/1/1
{
"1" : [
{
"len" : 88 ,
"port_no" : 1 ,
"queue_id" : 1 ,
"properties" : [
{
"length" : 8 ,
"rate" : 300 ,
"type" : "MIN_RATE"
},
{
"length" : 8 ,
"rate" : 900 ,
"type" : "MAX_RATE"
},
{
"length" : 16 ,
"exp_type" : 0 ,
"experimenter" : 101 ,
"data" : [ 1 ],
"type" : "EXPERIMENTER"
},
{
:
:
}
]
}
]
}
Statistiques des groupes
Obtenir les statistiques de groupes du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/group/<dpid> [/<group_id>] |
La spécification de l'identifiant de groupe est facultative.
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| length | Longueur de cette entrée | 56 |
| group_id | ID de groupe | 1 |
| ref_count | Nombre de flux ou de groupes qui transmettent directement à ce groupe | 1 |
| packet_count | Nombre de paquets traités par groupe | 0 |
| byte_count | Nombre d'octets traités par groupe | 0 |
| duration_sec | Groupe de temps a été vivant en secondes | 161 |
| duration_nsec | Le groupe de temps a été vivant en nanosecondes au-delà de duration_sec | 3.03e + 08 |
| bucket_stats | struct ofp_bucket_counter | |
| – packet_count | Nombre de paquets traités par compartiment | 0 |
| – byte_count | Nombre d'octets traités par compartiment | 0 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/group/1
{
"1" : [
{
"length" : 56 ,
"group_id" : 1 ,
"ref_count" : 1 ,
"packet_count" : 0 ,
"byte_count" : 0 ,
"duration_sec" : 161 ,
"duration_nsec" : 3.03e+08 ,
"bucket_stats" : [
{
"packet_count" : 0 ,
"byte_count" : 0
}
]
}
]
}
Statistiques de description du groupe
Obtenir les statistiques de description de groupe du commutateur spécifié avec l'ID Datapath dans l'URI.
Utilisation (Openflow1.4 ou antérieure):
| Méthode | GET |
| URI | /stats/groupdesc/<dpid> |
Corps du message de réponse (Openflow1.3 ou antérieur):
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| type | Un des OFPGT_ * | “ALL” |
| group_id | ID de groupe | 1 |
| buckets | struct ofp_bucket | |
| – poids | Poids relatif du compartiment (défini uniquement pour certains groupes) | 0 |
| – watch_port | Port dont l'état détermine si ce compartiment est actif (requis uniquement pour les groupes de basculement rapide) | 4294967295 |
| – watch_group | Groupe dont l'état détermine si ce compartiment est actif (requis uniquement pour les groupes de basculement rapide) | 4294967295 |
| – actions | 0 ou plusieurs actions associées au compartiment | [“OUTPUT: 1”] |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/groupdesc/1
Réponse (Openflow1.3 ou antérieure):
{
"1" : [
{
"type" : "ALL" ,
"group_id" : 1 ,
"buckets" : [
{
"weight" : 0 ,
"watch_port" : 4294967295 ,
"watch_group" : 4294967295 ,
"actions" : [
"OUTPUT:1"
]
}
]
}
]
}
Statistiques des fonctionnalités du groupe
Obtenir les statistiques des fonctionnalités de groupe du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/groupfeatures/<dpid> |
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| types | Bitmap de valeurs (1 « OFPGT_ *) supportées | [] |
| capabilities | Bitmap de la capacité OFPGFC_ * prise en charge | [“SELECT_WEIGHT”, “SELECT_LIVENESS”, “CHAINING”] |
| max_groups | Nombre maximum de groupes pour chaque type | [{“ALL”: 4294967040}, …] |
| actions | Images bitmap prises en charge (1 « OFPAT_ *) | [{“ALL”: [“OUTPUT”, …]}, …] |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/groupfeatures/1
{
"1" : [
{
"types" : [],
"capabilities" : [
"SELECT_WEIGHT" ,
"SELECT_LIVENESS" ,
"CHAINING"
],
"max_groups" : [
{
"ALL" : 4294967040
},
{
"SELECT" : 4294967040
},
{
"INDIRECT" : 4294967040
},
{
"FF" : 4294967040
}
],
"actions" : [
{
"ALL" : [
"OUTPUT" ,
"COPY_TTL_OUT" ,
"COPY_TTL_IN" ,
"SET_MPLS_TTL" ,
"DEC_MPLS_TTL" ,
"PUSH_VLAN" ,
"POP_VLAN" ,
"PUSH_MPLS" ,
"POP_MPLS" ,
"SET_QUEUE" ,
"GROUP" ,
"SET_NW_TTL" ,
"DEC_NW_TTL" ,
"SET_FIELD"
]
},
{
"SELECT" : []
},
{
"INDIRECT" : []
},
{
"FF" : []
}
]
}
]
}
Statistiques des compteurs
Obtenir les statistiques des compteurs du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/meter/<dpid> [/<meter_id>] |
La spécification de l'identifiant du compteur est facultative.
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| meter_id | ID du compteur | 1 |
| len | Longueur en octets de cette statistique | 56 |
| flow_count | Nombre de flux liés au compteur | 0 |
| packet_in_count | Nombre de paquets en entrée | 0 |
| byte_in_count | Nombre d'octets en entrée | 0 |
| duration_sec | Le compteur de temps a été vivant en secondes | 37 |
| duration_nsec | Le compteur de temps a été en vie en nanosecondes au-delà de duration_sec | 988000 |
| band_stats | struct ofp_meter_band_stats | |
| – packet_band_count | Nombre de paquets dans la bande | 0 |
| – byte_band_count | Nombre d'octets dans la bande | 0 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/meter/1
{
"1" : [
{
"meter_id" : 1 ,
"len" : 56 ,
"flow_count" : 0 ,
"packet_in_count" : 0 ,
"byte_in_count" : 0 ,
"duration_sec" : 37 ,
"duration_nsec" : 988000 ,
"band_stats" : [
{
"packet_band_count" : 0 ,
"byte_band_count" : 0
}
]
}
]
}
Statistiques de description du compteur
Obtenir les statistiques de configuration de compteur du commutateur spécifié avec l'ID Datapath dans l'URI.
Mise en garde: Ce message a été renommé dans openflow 1.5. Si Openflow 1.4 ou une version antérieure est en cours d'utilisation, veuillez utiliser la commande Obtenir la description du compteur. Si Openflow 1.5 ou version ultérieure est en cours d'utilisation, veuillez utiliser la commande Obtenir une description de compteur.
Utilisation (Openflow1.4 ou antérieure):
| Méthode | GET |
| URI | /stats/meterconfig/<dpid> [/<meter_id>] |
La spécification de l'identifiant du compteur est facultative.
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| drapeaux | Tous les OFPMC_ * qui s'appliquent | “KBPS” |
| meter_id | ID du compteur | 1 |
| bandes | struct ofp_meter_band_header | |
| – type | Un des OFPMBT_ * | “DROP” |
| – rate | Tarif pour ce groupe | 1000 |
| – burst_size | Taille des éclats | 0 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/meterconfig/1
{
"1" : [
{
"flags" : [
"KBPS"
],
"meter_id" : 1 ,
"bands" : [
{
"type" : "DROP" ,
"rate" : 1000 ,
"burst_size" : 0
}
]
}
]
}
Statistiques des compteurs
Obtenir les caractéristiques des compteurs statistiques du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | GET |
| URI | /stats/metrefeatures/<dpid> |
Corps du message de réponse
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | “1” |
| max_meter | Nombre maximum de mètres | 256 |
| bandes_types | Images bitmap prises en charge (1 « OFPMBT_ *) | [“DROP”] |
| capacités | Images Bitmap de “ofp_meter_flags” | [“KBPS”, “BURST”, “STATS”] |
| max_bands | Bandes maximales par mètres | 16 |
| max_color | Valeur de couleur maximale | 8 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/meterfeatures/1
{
"1" : [
{
"max_meter" : 256 ,
"band_types" : [
"DROP"
],
"capabilities" : [
"KBPS" ,
"BURST" ,
"STATS"
],
"max_bands" : 16 ,
"max_color" : 8
}
]
}
Rôle
Obtenir le rôle actuel du contrôleur auprès du commutateur.
Usage:
| Méthode | GET |
| URI | /stats/role/<dpid> |
Corps du message de réponse (Openflow1.4 ou antérieur):
| Attribut | Description | Exemple |
|---|---|---|
| dpid | ID de Datapath | 1 |
| role | Un des OFPCR_ROLE_ * | “EQUAL” |
| generation_id | Identifiant de génération d'élection maître | 0 |
Exemple d'utilisation:
$ curl -X GET http://localhost:8080/stats/role/1
Réponse (Openflow1.4 ou antérieure):
{
"1" : [
{
"generation_id" : 0 ,
"role" : "EQUAL"
}
]
}
Mettre à jour les statistiques du commutateur
Ajouter une entrée de flux
Ajouter une entrée de flux au commutateur.
Usage:
| Méthode | POST |
| URI | /stats/flowentry/add |
Corps du message de demande (Openflow1.3 ou antérieur):
| Attribut | Description | Exemple | |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| cookie | Identificateur émis par le contrôleur opaque (int) | 1 | 0 |
| cookie_mask | Masque utilisé pour restreindre les bits de cookie (int) | 1 | 0 |
| table_id | ID de table pour mettre le flux dans (int) | 0 | 0 |
| idle_timeout | Durée d'inactivité avant rejet (secondes) (int) | 30 | 0 |
| hard_timeout | Temps maximum avant la mise au rebut (secondes) (int) | 30 | 0 |
| priority | Niveau de priorité d'entrée de flux (int) | 11111 | 0 |
| buffer_id | Paquet mis en mémoire tampon à appliquer à OFP_NO_BUFFER (int) | 1 | OFP_NO_BUFFER |
| flags | Bitmap de OFPFF_ * flags (int) | 1 | 0 |
| match | Champs à faire correspondre (dict) | {“in_port”: 1} | {} #wildcarded |
| actions | Jeu d'instructions (liste de dict) | [{“type”: “OUTPUT”, “port”: 2}] | [] #DROP |
Pour une description de la correspondance et des actions, voir Référence: Description de la correspondance et des actions.
Exemple d'utilisation (Openflow1.3 ou antérieur):
$ curl -X POST -d '{
"dpid": 1,
"cookie": 1,
"cookie_mask": 1,
"table_id": 0,
"idle_timeout": 30,
"hard_timeout": 30,
"priority": 11111,
"flags": 1,
"match":{
"in_port":1
},
"actions":[
{
"type":"OUTPUT",
"port": 2
}
]
}' http://localhost:8080/stats/flowentry/add
$ curl -X POST -d '{
"dpid": 1,
"priority": 22222,
"match":{
"in_port":1
},
"actions":[
{
"type":"GOTO_TABLE",
"table_id": 1
}
]
}' http://localhost:8080/stats/flowentry/add
$ curl -X POST -d '{
"dpid": 1,
"priority": 33333,
"match":{
"in_port":1
},
"actions":[
{
"type":"WRITE_METADATA",
"metadata": 1,
"metadata_mask": 1
}
]
}' http://localhost:8080/stats/flowentry/add
$ curl -X POST -d '{
"dpid": 1,
"priority": 44444,
"match":{
"in_port":1
},
"actions":[
{
"type":"METER",
"meter_id": 1
}
]
}' http://localhost:8080/stats/flowentry/add
Pour confirmer l'enregistrement des entrées de flux, se reporter aux sections Obtenir toutes les statistiques de flux ou Obtenir les statistiques de flux filtrées par champs.
Modifier toutes les entrées de flux correspondantes
Modifier toutes les entrées de flux correspondantes du commutateur.
Usage:
| Méthode | POST |
| URI | /stats/flowentry/modifier |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| cookie | Identificateur émis par un contrôleur Opaque (int) | 1 | 0 |
| cookie_mask | Masque utilisé pour restreindre les bits de cookie (int) | 1 | 0 |
| table_id | ID de table pour mettre le flux dans (int) | 0 | 0 |
| idle_timeout | Durée d'inactivité avant rejet (secondes) (int) | 30 | 0 |
| hard_timeout | Temps maximum avant la mise au rebut (secondes) (int) | 30 | 0 |
| priority | Niveau de priorité d'entrée de flux (int) | 11111 | 0 |
| buffer_id | Paquet mis en mémoire tampon à appliquer à OFP_NO_BUFFER (int) | 1 | OFP_NO_BUFFER |
| flags | Bitmap de OFPFF_ * flags (int) | 1 | 0 |
| match | Champs à faire correspondre (dict) | {“in_port”: 1} | {} #wildcarded |
| actions | Jeu d'instructions (liste de dict) | [{“type”: “OUTPUT”, “port”: 2}] | [] #DROP |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"cookie": 1,
"cookie_mask": 1,
"table_id": 0,
"idle_timeout": 30,
"hard_timeout": 30,
"priority": 11111,
"flags": 1,
"match":{
"in_port":1
},
"actions":[
{
"type":"OUTPUT",
"port": 2
}
]
}' http://localhost:8080/stats/flowentry/modify
Modifier l'entrée de flux strictement
Modifier une entrée de flux correspondant strictement aux caractères génériques et à la priorité
Usage:
| Méthode | POST |
| URI | /stats/flowentry/modify_strict |
Corps du message de demande:
| Attribut | Description | Exemple | |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| cookie | Identificateur émis par le contrôleur opaque (int) | 1 | 0 |
| cookie_mask | Masque utilisé pour restreindre les bits de cookie (int) | 1 | 0 |
| table_id | ID de table pour mettre le flux dans (int) | 0 | 0 |
| idle_timeout | Durée d'inactivité avant rejet (secondes) (int) | 30 | 0 |
| hard_timeout | Temps maximum avant la mise au rebut (secondes) (int) | 30 | 0 |
| priority | Niveau de priorité d'entrée de flux (int) | 11111 | 0 |
| buffer_id | Paquet mis en mémoire tampon à appliquer à OFP_NO_BUFFER (int) | 1 | OFP_NO_BUFFER |
| flags | Bitmap de OFPFF_ * flags (int) | 1 | 0 |
| match | Champs à faire correspondre (dict) | {“in_port”: 1} | {} #wildcarded |
| actions | Jeu d'instructions (liste de dict) | [{“type”: “OUTPUT”, “port”: 2}] | [] #DROP |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"cookie": 1,
"cookie_mask": 1,
"table_id": 0,
"idle_timeout": 30,
"hard_timeout": 30,
"priority": 11111,
"flags": 1,
"match":{
"in_port":1
},
"actions":[
{
"type":"OUTPUT",
"port": 2
}
]
}' http://localhost:8080/stats/flowentry/modify\_strict
Supprimer toutes les entrées de flux correspondantes
Supprimer toutes les entrées de flux correspondantes du commutateur.
Usage:
| Méthode | POST |
| URI | /stats/flowentry/delete |
Corps du message de demande :
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| cookie | Identificateur émis par le contrôleur opaque (int) | 1 | 0 |
| cookie_mask | Masque utilisé pour restreindre les bits de cookie (int) | 1 | 0 |
| table_id | ID de table pour mettre le flux dans (int) | 0 | 0 |
| idle_timeout | Durée d'inactivité avant rejet (secondes) (int) | 30 | 0 |
| hard_timeout | Temps maximum avant la mise au rebut (secondes) (int) | 30 | 0 |
| priority | Niveau de priorité d'entrée de flux (int) | 11111 | 0 |
| buffer_id | Paquet mis en mémoire tampon à appliquer à OFP_NO_BUFFER (int) | 1 | |
| out_port | Port de sortie (int) | 1 | OFPP_ANY |
| out_group | Groupe de sortie (int) | 1 | OFPG_ANY |
| flags | Bitmap de OFPFF_ * flags (int) | 1 | 0 |
| match | Champs à faire correspondre (dict) | {“in_port”: 1} | {} #wildcarded |
| actions | Jeu d'instructions (liste de dict) | [{“type”: “OUTPUT”, “port”: 2}] | [] #DROP |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"cookie": 1,
"cookie_mask": 1,
"table_id": 0,
"idle_timeout": 30,
"hard_timeout": 30,
"priority": 11111,
"flags": 1,
"match":{
"in_port":1
},
"actions":[
{
"type":"OUTPUT",
"port": 2
}
]
}' http://localhost:8080/stats/flowentry/delete
Supprimer l'entrée de flux strictement
Supprimer une entrée de flux correspondant strictement aux caractères génériques et à la priorité.
Usage:
| Méthode | POST |
| URI | /stats/flowentry/delete_strict |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| cookie | Identificateur émis par le contrôleur opaque (int) | 1 | 0 |
| cookie_mask | Masque utilisé pour restreindre les bits de cookie (int) | 1 | 0 |
| table_id | ID de table pour mettre le flux dans (int) | 0 | 0 |
| idle_timeout | Durée d'inactivité avant rejet (secondes) (int) | 30 | 0 |
| hard_timeout | Temps maximum avant la mise au rebut (secondes) (int) | 30 | 0 |
| priority | Niveau de priorité d'entrée de flux (int) | 11111 | 0 |
| buffer_id | Paquet mis en mémoire tampon à appliquer à OFP_NO_BUFFER (int) | 1 | OFP_NO_BUFFER |
| out_port | Port de sortie (int) | 1 | OFPP_ANY |
| out_group | Groupe de sortie (int) | 1 | OFPG_ANY |
| flags | Bitmap de OFPFF_ * flags (int) | 1 | 0 |
| match | Champs à faire correspondre (dict) | {“in_port”: 1} | {} #wildcarded |
| actions | Jeu d'instructions (liste de dict) | [{“type”: “OUTPUT”, “port”: 2}] | [] #DROP |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"cookie": 1,
"cookie_mask": 1,
"table_id": 0,
"idle_timeout": 30,
"hard_timeout": 30,
"priority": 11111,
"flags": 1,
"match":{
"in_port":1
},
"actions":[
{
"type":"OUTPUT",
"port": 2
}
]
}' http://localhost:8080/stats/flowentry/delete\_strict
Supprimer toutes les entrées de flux
Supprimer toutes les entrées de flux du commutateur spécifié avec l'ID Datapath dans l'URI.
Usage:
| Méthode | |
| URI | /stats/flowentry/clear/<dpid> |
Exemple d'utilisation:
$ curl -X DELETE http://localhost:8080/stats/flowentry/clear/1
Ajouter une entrée de groupe
Ajouter une entrée de groupe au commutateur.
Usage:
| Méthode | POST |
| URI | /stats/groupentry/add |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| type | Un des OFPGT_ * (chaîne) | “TOUT” | “TOUT” |
| group_id | ID de groupe (int) | 1 | 0 |
| buckets | struct ofp_bucket | ||
| – weight | Poids relatif du godet (défini uniquement pour certains groupes) | 0 | 0 |
| – watch_port | Port dont l'état détermine si ce compartiment est actif (requis uniquement pour les groupes de basculement rapide) | 4294967295 | OFPP_ANY |
| - watch_group | Groupe dont l'état détermine si ce compartiment est actif (requis uniquement pour les groupes de basculement rapide) | 4294967295 | OFPG_ANY |
| – actions | 0 ou plusieurs actions associées au compartiment (liste de dict) | [{“type”: “OUTPUT”, “port”: 1}] | [] #DROP |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"type": "ALL",
"group_id": 1,
"buckets": [
{
"actions": [
{
"type": "OUTPUT",
"port": 1
}
]
}
]
}' http://localhost:8080/stats/groupentry/add
Pour confirmer votre inscription au groupe, se reporter la rubrique Obtenir les statistiques de description du groupe .
Modifier une entrée de groupe
Modifier une entrée de groupe sur le commutateur.
Usage:
| Méthode | POST |
| URI | /stats/groupentry/modify |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| type | Un des OFPGT_ * (chaîne) | “ALL” | “ALL” |
| group_id | ID de groupe (int) | 1 | |
| buckets | struct ofp_bucket | ||
| – poids | Poids relatif du godet (défini uniquement pour certains groupes) | 0 | 0 |
| – watch_port | Port dont l'état détermine si ce compartiment est actif (requis uniquement pour les groupes de basculement rapide) | 4294967295 | OFPP_ANY |
| – watch_group | Groupe dont l'état détermine si ce compartiment est actif (requis uniquement pour les groupes de basculement rapide) | 4294967295 | OFPG_ANY |
| – actions | 0 ou plusieurs actions associées au compartiment (liste de dict) | [{“type”: “OUTPUT”, “port”: 1}] | [] #DROP |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"type": "ALL",
"group_id": 1,
"buckets": [
{
"actions": [
{
"type": "OUTPUT",
"port": 1
}
]
}
]
}' http://localhost:8080/stats/groupentry/modify
Supprimer une entrée de groupe
Supprimer une entrée de groupe sur le commutateur.
Usage:
| Méthode | POST |
| URI | /stats/groupentry/delete |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| group_id | ID de groupe (int) | 1 | 0 |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"group_id": 1
}' http://localhost:8080/stats/groupentry/delete
Modifier le comportement du port
Modifier le comportement du port physique.
Usage:
| Méthode | POST |
| URI | /stats/portdesc/modify |
Demander le corps du message:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| port_no | Numéro de port (int) | 1 | 0 |
| config | Bitmap de OFPPC_ * flags (int) | 1 | 0 |
| mask | Bitmap des indicateurs OFPPC_ * à modifier (int) | 1 | 0 |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"port_no": 1,
"config": 1,
"mask": 1
}' http://localhost:8080/stats/portdesc/modify
Pour confirmer la description du port, se reporter à la section Obtenir une description des ports.
Ajouter une entrée de compteur
Ajouter une entrée de compteur au commutateur.
Usage:
| Méthode | POST |
| URI | /stats/meterentry/add |
Corps du message de demande :
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| flags | Bitmap of OFPMF_ * flags (liste) | [“KBPS”] | [] #Vide |
| meter_id | ID du compteur (int) | 1 | 0 |
| bands | struct ofp_meter_band_header | ||
| – type | Un parmi OFPMBT_ * (chaîne) | “DROP” | Aucun |
| – taux | Tarif pour ce groupe (int) | 1000 | Aucun |
| – burst_size | Taille des rafales (int) | 100 | Aucun |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"flags": "KBPS",
"meter_id": 1,
"bands": [
{
"type": "DROP",
"rate": 1000
}
]
}' http://localhost:8080/stats/meterentry/add
Pour confirmer l'enregistrement du compteur, se reporter à la rubrique Obtenir les statistiques de configuration du compteur .
Modifier une entrée de compteur
Modifier une entrée de compteur au commutateur.
Usage:
| Méthode | POST |
| URI | /stats/meterentry/modifier |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| flags | Bitmap of OFPMF_ * flags (liste) | [“KBPS”] | [] #Vide |
| meter_id | ID du compteur (int) | 1 | 0 |
| bands | struct ofp_meter_band_header | ||
| – type | Un parmi OFPMBT_ * (chaîne) | “DROP” | Aucun |
| – rate | Taux pour ce groupe (int) | 1000 | Aucun |
| – burst_size | Taille des rafales (int) | 100 | Aucun |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"meter_id": 1,
"flags": "KBPS",
"bands": [
{
"type": "DROP",
"rate": 1000
}
]
}' http://localhost:8080/stats/meterentry/modify
Supprimer une entrée de compteur
Supprimer une entrée de compteur au commutateur.
Usage:
| Méthode | POST |
| URI | /stats/meterentry/delete |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| meter_id | ID du compteur (int) | 1 | 0 |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"meter_id": 1
}' http://localhost:8080/stats/meterentry/delete
Modifier le rôle
modifier le rôle du commutateur.
Usage:
| Méthode | POST |
| URI | /stats/role |
Corps du message de demande:
| Attribut | Description | Exemple | Défaut |
|---|---|---|---|
| dpid | ID Datapath (int) | 1 | (Obligatoire) |
| role | Un des OFPCR_ROLE _ * (chaîne) | “MASTER” | OFPCR_ROLE_EQUAL |
Exemple d'utilisation:
$ curl -X POST -d '{
"dpid": 1,
"role": "MASTER"
}' http://localhost:8080/stats/role
Description de la correspondance et des actions
Description des messages de correspondance sur demande
Liste des champs de correspondance (OpenFlow1.2 ou version ultérieure):
| Champ de correspondance | Description | Exemple |
|---|---|---|
| in_port | Commutateur d'entrée (int) | {“in_port”:7} |
| in_phy_port | Changer le port d'entrée physique (int) | {“in_phy_port”:5, “in_port”:3} |
| métadatas | Métadonnées passées entre les tables (int ou string) | {“métadatas”:12345} ou {“métadonnées”:“0x1212/0xffff”} |
| eth_dst | Adresse de destination Ethernet (chaîne) | {“eth_dst”:“aa:bb:cc:11:22:33/00:00:00:00:ff:ff”} |
| eth_src | Adresse source Ethernet (chaîne) | {“eth_src”:“aa:bb:cc:11:22:33”} |
| eth_type | Type de trame Ethernet (int) | {“eth_type”:2048} |
| vlan_vid | ID de VLAN (int ou chaîne) | |
| vlan_pcp | Priorité VLAN (int) | {“vlan_pcp”:3, “vlan_vid”:3} |
| ip_dscp | IP DSCP (6 bits dans le champ ToS) (int) | {“ip_dscp”:3, “eth_type”:2048} |
| ip_ecn | IP ECN (2 bits dans le champ ToS) (int) | {“ip_ecn”:0, “eth_type”:34525} |
| ip_proto | Protocole IP (int) | {“ip_proto”:5, “eth_type”:34525} |
| ipv4_src | Adresse source IPv4 (chaîne) | {“ipv4_src”:“192.168.0.1”, “eth_type”:2048} |
| ipv4_dst | Adresse de destination IPv4 (chaîne) | {“ipv4_dst”:“192.168.10.10/255.255.255.0”, “eth_type”: 2048} |
| tcp_src | Port source TCP (int) | {“tcp_src”:3, “ip_proto”:6, “eth_type”:2048} |
| tcp_dst | Port de destination TCP (int) | {“tcp_dst”:5, “ip_proto”:6, “eth_type”:2048} |
| udp_src | Port source UDP (int) | {“udp_src”: 2, “ip_proto”:17, “eth_type”:2048} |
| udp_dst | Port de destination UDP (int) | {“udp_dst”:6, “ip_proto”:17, “eth_type”:2048} |
| sctp_src | Port source SCTP (int) | {“sctp_src”:99, “ip_proto”:132, “eth_type”:2048} |
| sctp_dst | Port de destination SCTP (int) | {“sctp_dst”:99, “ip_proto”:132, “eth_type”:2048} |
| icmpv4_type | Type ICMP (int) | {“icmpv4_type”:5, “ip_proto”:1, “eth_type”:2048} |
| icmpv4_code | Code ICMP (int) | {“icmpv4_code”:6, “ip_proto”:1, “eth_type”:2048} |
| arp_op | Opcode ARP (int) | {“arp_op”:3, “eth_type”:2054} |
| arp_spa | Adresse IPv4 source ARP (chaîne) | {“arp_spa”:“192.168.0.11”, “eth_type”:2054} |
| arp_tpa | Adresse IPv4 cible ARP (chaîne) | {“arp_tpa”:“192.168.0.44/24”, “eth_type”:2054} |
| arp_sha | Adresse matérielle source ARP (chaîne) | {“arp_sha”:“aa:bb:cc:11:22:33”, “eth_type”:2054} |
| arp_tha | Adresse matérielle cible ARP (chaîne) | {“arp_tha”:“aa:bb:cc:11:22:33/00:00:00:00:ff:ff”, “eth_type”:2054} |
| ipv6_src | Adresse source IPv6 (chaîne) | {“ipv6_src”: “2001::aaaa:bbbb:cccc:1111”, “eth_type”:34525} |
| ipv6_dst | Adresse de destination IPv6 (chaîne) | {“ipv6_dst”: “2001::ffff:cccc:bbbb: 1111/64”, “eth_type”: 34525} |
| ipv6_flabel | Étiquette de flux IPv6 (int) | {“ipv6_flabel”:2, “eth_type”:34525} |
| icmpv6_type | Type ICMPv6 (int) | {“icmpv6_type”:3, “ip_proto”: 58, “eth_type”:34525} |
| icmpv6_code | Code ICMPv6 (int) | {“icmpv6_code”:4, “ip_proto”: 58, “eth_type”:34525} |
| ipv6_nd_target | Adresse cible pour la découverte du voisin (chaîne) | {“ipv6_nd_target”: “2001 :: ffff: cccc: bbbb: 1111”, “type_icmpv6”:135, “ip_proto”:58, “eth_type”:34525} |
| ipv6_nd_sll | Couche de liaison source pour la découverte de voisin (chaîne) | |
| ipv6_nd_tll | Couche de liaison cible pour la découverte de voisin (chaîne) | {“ipv6_nd_tll”:“aa:bb:cc:11:22:33”, “icmpv6_type”:136, “ip_proto”:58, “eth_type”:34525} |
| mpls_label | Étiquette MPLS (int) | {“mpls_label”:3, “eth_type”:34888} |
| mpls_tc | Classe de trafic MPLS (int) | {“mpls_tc”:2, “eth_type”:34888} |
| mpls_bos | MPLS BoS bit (int) (Openflow1.3 +) | {“mpls_bos”: 1, “eth_type”:34888} |
| pbb_isid | PBB I-SID (int ou string) (Openflow1.3 +) | {“pbb_isid”:5, “eth_type”:35047} ou {“pbb_isid”:“0x05/0xff”, “eth_type”:35047} |
| tunnel_id | Métadonnées de port logique (int ou chaîne) (Openflow1.3 +) | {“tunnel_id”:7} ou {“tunnel_id”:“0x07/0xff”} |
| ipv6_exthdr | Pseudo-champ En-tête d'extension IPv6 (int ou chaîne) (Openflow1.3 +) | {“ipv6_exthdr”: 3, “eth_type”: 34525} ou {“ipv6_exthdr”:“0x40/0x1F0”, “eth_type”:34525} |
| pbb_uca | Champ de gestionnaire PBB UCA (int) (Openflow1.4 +) | {“pbb_uca”:1, “eth_type”:35047} |
| tcp_flags | Drapeaux TCP (int) (Openflow1.5 +) | {“tcp_flags”:2, “ip_proto”:6, “eth_type”:2048} |
| actset_output | Port de sortie des métadonnées du jeu d'actions (int) (Openflow1.5 +) | {“actset_output”:3} |
| type de paquet | Valeur du type de paquet (int) (Openflow1.5 +) | {“packet_type”:[1, 2048]} |
Masques
Certains champs peuvent être décrits avec un masque comme suit.
- Adresse Ethernet:
"aa:bb:cc:11:22:33" "aa:bb:cc:11:22:33/00:00:00:00:ff:ff"
- Adresse IPv4:
"192.168.0.11" "192.168.0.44/24" "192.168.10.10/255.255.255.0"
- Adresse IPv6:
"2001::ffff:cccc:bbbb:1111" "2001::ffff:cccc:bbbb:2222/64" "2001::ffff:cccc:bbbb:2222/ffff:ffff:ffff:ffff::0"
- Métadonnées:
"0x1212121212121212" "0x3434343434343434/0x01010101010101010"
Exemple de champ de correspondance d'ID de VLAN
- Pour faire correspondre uniquement les paquets dont l'étiquette VLAN et l'ID de VLAN sont égaux à la valeur 5:
$ curl -X POST -d '{
"dpid": 1,
"match":{
"dl\_vlan": 5
},
"actions":[
{
"type":"OUTPUT",
"port": 1
}
]
}' http://localhost:8080/stats/flowentry/add
Lorsque le champ “dl_vlan” est décrit comme une valeur décimale, le bit OFPVID_PRESENT (0x1000) est automatiquement appliqué.
- Pour faire correspondre uniquement les paquets sans balise VLAN:
$ curl -X POST -d '{
"dpid": 1,
"match":{
"dl_vlan": "0x0000" # Describe OFPVID_NONE(0x0000)
},
"actions":[
{
"type":"OUTPUT",
"port": 1
}
]
}' http://localhost:8080/stats/flowentry/add
- Pour faire correspondre uniquement les paquets avec une balise VLAN, quelle que soit sa valeur:
$ curl -X POST -d '{
"dpid": 1,
"match":{
"dl_vlan": "0x1000/0x1000" # Describe OFPVID_PRESENT(0x1000/0x1000)
},
"actions":[
{
"type":"OUTPUT",
"port": 1
}
]
}' http://localhost:8080/stats/flowentry/add
- Pour faire correspondre uniquement les paquets dont l'étiquette VLAN et l'ID de VLAN sont égaux à la valeur 5:
$ curl -X POST -d '{
"dpid": 1,
"match":{
"dl_vlan": "0x1005" # Describe sum of VLAN-ID(e.g. 5) | OFPVID_PRESENT(0x1000)
},
"actions":[
{
"type":"OUTPUT",
"port": 1
}
]
}' http://localhost:8080/stats/flowentry/add
Lorsqu'on utilise les descriptions d'OpenFlow1.2 ou version ultérieure, décrire le champ “dl_vlan” en tant que valeur de chaîne hexadécimale, et le bit OFPVID_PRESENT (0x1000) N'EST PAS automatiquement appliqué.
Description des messages Actions sur demande
Liste des actions (OpenFlow1.2 ou ultérieur):
| actions | description | Exemple |
|---|---|---|
| OUTPUT | Paquet de sortie du “port” | {“type”:“OUTPUT”, “port”:3} |
| COPY_TTL_OUT | Copier TTL vers l'extérieur | {“type”:“COPY_TTL_OUT”} |
| COPY_TTL_IN | Copier TTL vers l'intérieur | {“type”:“COPY_TTL_IN”} |
| SET_MPLS_TTL | Définir MPLS TTL avec “mpls_ttl” | {“type”:“SET_MPLS_TTL”, “mpls_ttl”:64} |
| DEC_MPLS_TTL | Décrémenter MPLS TTL | {“type”:“DEC_MPLS_TTL”} |
| PUSH_VLAN | Pousser une nouvelle balise VLAN avec “ethertype” | {“type”:“PUSH_VLAN”, “ethertype”:33024} |
| POP_VLAN | Pop la balise VLAN externe | {“type”:“POP_VLAN”} |
| PUSH_MPLS | Pousser une nouvelle balise MPLS avec “ethertype” | {“type”:“PUSH_MPLS”, “ethertype”:34887} |
| POP_MPLS | Pop la balise MPLS externe avec “ethertype” | {“type”:“POP_MPLS”, “ethertype”:2054} |
| SET_QUEUE | Définir l'ID de la file d'attente à l'aide de “queue_id” lors de la sortie sur un port | {“type”:“SET_QUEUE”, “queue_id”:7} |
| GROUPE | Appliquer le groupe identifié par “group_id” | {“type”:“GROUP”, “id_groupe”:5} |
| SET_NW_TTL | Définir IP TTL avec “nw_ttl” | {“type”:“SET_NW_TTL”, “nw_ttl”:64} |
| DEC_NW_TTL | Décrémenter IP TTL | {“type”:“DEC_NW_TTL”} |
| SET_FIELD | Définir un “champ” à l'aide de “valeur” (l'ensemble des mots-clés disponibles pour “champ” est identique au champ de correspondance) | Voir Exemple d'action set-field |
| PUSH_PBB | Pousser une nouvelle étiquette de service PBB avec “ethertype” (Openflow1.3 +) | {“type”:“PUSH_PBB”, “ethertype”:35047} |
| POP_PBB | Pop le numéro de service externe PBB (Openflow1.3 +) | {“type”:“POP_PBB”} |
| COPY_FIELD | Copier la valeur entre l'en-tête et le registre (Openflow1.5 +) | {“type”:“COPY_FIELD”, “n_bits”:32, “src_offset”:1, “dst_offset”:2, “src_oxm_id”:“eth_src”, “dst_oxm_id”:“eth_dst”} |
| MÈTRE | Appliquer un compteur identifié par “meter_id” (Openflow1.5 +) | {“type”:“METER”, “meter_id”:3} |
| EXPÉRIMENTATEUR | Action extensible pour l'expérimentateur (champ “base64” ou “ascii” sur “type_données”) | {“type”:“EXPERIMENTER”, “expérimentateur”:101, “données”:“AAECAwQFBgc =”, “type_données”:“base64”} |
| GOTO_TABLE | (Instruction) Configurer la table suivante identifiée par “table_id” | {“type”:“GOTO_TABLE”, “table_id”:8} |
| WRITE_METADATA | (Instruction) Configurer le champ de métadonnées en utilisant “métadonnées” et “masque de métadonnées” | {“type”:“WRITE_METADATA”, “métadonnées”:0x3, “métadata_mask”:0x3} |
| MÈTRE | (Instruction) Appliquer un compteur identifié par “meter_id” (obsolète dans Openflow1.5) | {“type”:“METER”, “meter_id”:3} |
| WRITE_ACTIONS | (Instruction) Écrire l'action (les actions) dans le jeu d'actions datapath. | {“type”:“WRITE_ACTIONS”, actions “:{{” type “:” POP_VLAN “,}, {” type “:” OUTPUT “,” port “:2}]} |
| CLEAR_ACTIONS | (Instruction) Efface toutes les actions du jeu d'actions datapath. | {“type”:“CLEAR_ACTIONS”} |
Exemple d'action set-field
Pour définir l'ID de VLAN sur une trame étiquetée non-VLAN:
$ curl -X POST -d '{
"dpid": 1,
"match":{
"dl_type": "0x8000"
},
"actions":[
{
"type": "PUSH_VLAN", # Push a new VLAN tag if a input frame is non-VLAN-tagged
"ethertype": 33024 # Ethertype 0x8100(=33024): IEEE 802.1Q VLAN-tagged frame
},
{
"type": "SET_FIELD",
"field": "vlan_vid", # Set VLAN ID
"value": 4102 # Describe sum of vlan_id(e.g. 6) | OFPVID_PRESENT(0x1000=4096)
},
{
"type": "OUTPUT",
"port": 2
}
]
}' http://localhost:8080/stats/flowentry/add
