Search code examples
rpcopenflowopendaylight

OpenDaylight Flow statistics using RPC call


I'm trying to get statistics using the following RPC call and not via the default statistics-manager.

POST / restconf / operations / opendaylight - flow - statistics: get - all - flows - statistics - from - all - flow - tables {
    "input": {
        "node": "/opendaylight-inventory:nodes/opendaylight-inventory:node[opendaylight-inventory:id=\"openflow:1000\"]"
    }
}

However, the response of this request is just transaction-id. While I can see the OpenFlow Flow Stat Request and Flow Stat Reply messages are exchanged between the controller and the switch, the operational datastore seems not to be updated as a result of calling the above RPC. I check the operational datastore using:

GET /restconf/operational/opendaylight-inventory:nodes/node/openflow:1000/table/0

My question is:

  • How can I get the flow statistics sent to the controller by the switch as a result of the above RPC (get-all-flows-statistics-from-all-flow-tables)? And why is the operational datastore is not updated?

Thanks! Michael.


Solution

  • Using Boron, what you're trying to use is deprecated, hence you should use the following:

    1. Install odl-openflowplugin-flow-services
    2. Connect your switch
    3. Send the following request:
        POST /restconf/operations/opendaylight-direct-statistics:get-node-connector-statistics
        Host: localhost:8181
        Content-Type: application/json
        Authorization: Basic YWRtaW46YWRtaW4=
    
        {
            "input": 
            { 
                "node" : "/opendaylight-inventory:nodes/opendaylight-inventory:node[opendaylight-inventory:id=\"openflow:187811733353539\"]" ,
                "store-stats" : false
            } 
        }
    
    1. Set store-stats to true if you want to keep them in the datastore.

    You can also get the stats only for a specified port, but while trying, it appears not to be working well Add this to the above payload:

        "node-connector-id" : "/opendaylight-inventory:nodes/opendaylight-inventory:node[opendaylight-inventory:id=\"openflow:187811733353539\"]/opendaylight-inventory:node-connector[opendaylight-inventory:id='openflow:187811733353539:LOCAL']",
    

    Instead of LOCAL, specify the port you want.

    Hope this helps, Alexis