Shuva,

The config DS doesnt have any sort of match when programmatically adding a flow. I put that in my previous email, here it is again:

        "flow-node-inventory:table": [

          {

            "id": 2,

            "flow": [

              {

                "id": "2",

                "cookie_mask": 20,

                "table_id": 2,

                "priority": 5,

                "strict": false,

                "flags": "",

                "flow-name": "MatchAny",

                "idle-timeout": 0,

                "hard-timeout": 0,

                "cookie": 20,

                "barrier": false,

                "instructions": {

                  "instruction": [

                    {

                      "order": 0,

                      "go-to-table": {

                        "table_id": 3

                      }

                    }

                  ]

                }

              }

            ]

          }


Thanks,

Brady


On 04/07/16 18:07, Shuva Jyoti Kar wrote:

Brady, one small thing I wanted to verify - when you programmatically add a flow , does the config DS reflect the empty match ?

This would help us to locate the problem.

Thanks

Shuva

*From:*Brady Allen Johnson
*Sent:* Monday, July 04, 2016 9:12 PM
*To:* Shuva Jyoti Kar; [email protected]; Abhijit Kumbhare; Anil Vishnoi
*Subject:* Re: [openflowplugin-dev] Problems writing MatchAny flows

Shuva,

I just verified that I can do a very similar MatchAny flow via RestConf and it gets written to the switch:

$ curl -i -H "Content-Type: application/json" --data '{ "flow": [ { "id": "1000", "table_id": 0, "strict": false, "match": {}, "instructions": { "instruction": [ { "order": 0, "go-to-table": { "table_id": 10 } } ] } } ] }' -X PUT --user admin:admin http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:236095091025485/table/0/flow/1000


Here's the flow in the switch:

$ sudo ovs-ofctl -O OpenFlow13 dump-flows br-int table=0
OFPST_FLOW reply (OF1.3) (xid=0x2):
cookie=0x0, duration=142.350s, table=0, n_packets=0, n_bytes=0, actions=goto_table:10


But, when I do this programmatically, I get the nasty exception:
(More exception details in original email)

java.lang.NullPointerException: Match value must not be null
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:226)[65:com.google.guava:18.0.0] at org.opendaylight.openflowplugin.impl.registry.flow.FlowRegistryKeyFactory$FlowRegistryKeyDto.<init>(FlowRegistryKeyFactory.java:43)[286:org.opendaylight.openflowplugin.impl:0.3.0.SNAPSHOT] at org.opendaylight.openflowplugin.impl.registry.flow.FlowRegistryKeyFactory.create(FlowRegistryKeyFactory.java:29)[286:org.opendaylight.openflowplugin.impl:0.3.0.SNAPSHOT]


So, there seems to be a bug in the OpenFlowPlugin code when creating flows programmatically. Now that I know that its still possible in Boron to create MatchAny flows like always, I'll look into finding where the bug is.

Notice, Im using OVS 2.5.90.

Regards,

Brady

On 04/07/16 17:03, Shuva Jyoti Kar wrote:

    Brady,

    This is the details

    *Operation: PUT *

    *URL:
    
http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/1/flow/2*

    **

    *BODY:*

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>

    <flow xmlns="urn:opendaylight:flow:inventory">

    <hard-timeout>0</hard-timeout>

    <idle-timeout>0</idle-timeout>

    <priority>2</priority>

    <flow-name>flow5</flow-name>

    <match>

        </match>

        <id>2</id>

    <table_id>1</table_id>

    <instructions>

    <instruction>

    <order>0</order>

    <apply-actions>

    <action>

    <output-action>

    <output-node-connector>1</output-node-connector>

    </output-action>

    <order>0</order>

    </action>

    </apply-actions>

    </instruction>

    </instructions>

    </flow>

    *On ovs2.4:*

    mininet> sh ovs-ofctl -O Openflow13 dump-flows s1

    OFPST_FLOW reply (OF1.3) (xid=0x2):

    cookie=0x0, duration=3.008s, table=1, n_packets=0, n_bytes=0,
    priority=2 actions=output:1

    *CONFIG DATASTORE:*

    **

    *GET on
    
http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/1/flow/2*

    **

    *<flow xmlns="urn:opendaylight:flow:inventory">*

    *<id>2</id>*

    *<priority>2</priority>*

    *<table_id>1</table_id>*

    *<hard-timeout>0</hard-timeout>*

    *<match></match>*

    *<flow-name>flow5</flow-name>*

    *<instructions>*

    *<instruction>*

    *<order>0</order>*

    *<apply-actions>*

    *<action>*

    *<order>0</order>*

    *<output-action>*

    *<output-node-connector>1</output-node-connector>*

    *</output-action>*

    *</action>*

    *</apply-actions>*

    *</instruction>*

    *</instructions>*

    *<idle-timeout>0</idle-timeout>*

    *</flow>*

    Thanks

    Shuva

    *From:*Brady Allen Johnson
    *Sent:* Monday, July 04, 2016 3:34 PM
    *To:* Shuva Jyoti Kar; [email protected]
    <mailto:[email protected]>; Abhijit
    Kumbhare; Anil Vishnoi
    *Subject:* Re: [openflowplugin-dev] Problems writing MatchAny flows


    Shuva,

    Thanks for the info.

    Can you send me the curl/URL you used, please. I just tried this
    with SFC master from today, and still get the same problem.

    Here is what is in the configuration data store, you can see that
    there is no match. Seems like now when the match is empty, it
    doesnt get written to config.

            "flow-node-inventory:table": [

              {

                "id": 2,

                "flow": [

                  {

                    "id": "2",

                    "cookie_mask": 20,

                    "table_id": 2,

                    "priority": 5,

                    "strict": false,

                    "flags": "",

                    "flow-name": "MatchAny",

                    "idle-timeout": 0,

                    "hard-timeout": 0,

                    "cookie": 20,

                    "barrier": false,

                    "instructions": {

                      "instruction": [

                        {

                          "order": 0,

                          "go-to-table": {

                            "table_id": 3

                          }

                        }

                      ]

                    }

                  }

                ]

              },



    Thanks,

    Brady


    On 04/07/16 09:28, Shuva Jyoti Kar wrote:

        Hi Brady,

        I do see this error only while adding a flow without any
        match(<match>..</match>) . But with empty match
        fields(<match></match>) I donot see this error and I do see
        the flow getting provisioned on the switch.

        I am using Restconf for pushing the flows.

        Thanks

        Shuva

        *From:*[email protected]
        <mailto:[email protected]>
        [mailto:[email protected]] *On
        Behalf Of *Brady Allen Johnson
        *Sent:* Friday, July 01, 2016 8:14 PM
        *To:* [email protected]
        <mailto:[email protected]>; Abhijit
        Kumbhare; Anil Vishnoi
        *Subject:* [openflowplugin-dev] Problems writing MatchAny flows


        Hello,

        Im getting an Exception when writing a MatchAny flow in Boron.
        The MatchAny flow has different names, but Im referring to an
        empty match.

        Here is the code Ive always used to create the Match:

                MatchBuilder matchBuilder = new MatchBuilder();
                return matchBuilder.build();

        The exception I get is below. Has the way of creating MatchAny
        flows changed recently??

        Thanks,

        Brady


        2016-07-01 16:34:05,567 | ERROR | on-dispatcher-67 |
        DataTreeChangeListenerActor      | 187 -
        org.opendaylight.controller.sal-distributed-datastore -
        1.4.0.SNAPSHOT | Error notifying listener
        
org.opendaylight.controller.md.sal.binding.impl.BindingClusteredDOMDataTreeChangeListenerAdapter@1f10a709
        
<mailto:org.opendaylight.controller.md.sal.binding.impl.BindingClusteredDOMDataTreeChangeListenerAdapter@1f10a709>
        java.lang.NullPointerException: Match value must not be null
            at
        
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:226)[65:com.google.guava:18.0.0]
            at
        
org.opendaylight.openflowplugin.impl.registry.flow.FlowRegistryKeyFactory$FlowRegistryKeyDto.<init>(FlowRegistryKeyFactory.java:43)[286:org.opendaylight.openflowplugin.impl:0.3.0.SNAPSHOT]
            at
        
org.opendaylight.openflowplugin.impl.registry.flow.FlowRegistryKeyFactory.create(FlowRegistryKeyFactory.java:29)[286:org.opendaylight.openflowplugin.impl:0.3.0.SNAPSHOT]
            at
        
org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl.addFlow(SalFlowServiceImpl.java:86)[286:org.opendaylight.openflowplugin.impl:0.3.0.SNAPSHOT]
            at
        
org.opendaylight.yangtools.yang.binding.util.RpcMethodInvokerWithInput.invokeOn(RpcMethodInvokerWithInput.java:30)[73:org.opendaylight.mdsal.yang-binding:0.9.0.SNAPSHOT]
            at
        
org.opendaylight.yangtools.yang.binding.util.AbstractMappedRpcInvoker.invokeRpc(AbstractMappedRpcInvoker.java:52)[73:org.opendaylight.mdsal.yang-binding:0.9.0.SNAPSHOT]
            at
        
org.opendaylight.controller.md.sal.binding.impl.BindingDOMRpcImplementationAdapter.invoke(BindingDOMRpcImplementationAdapter.java:85)[158:org.opendaylight.controller.sal-binding-broker-impl:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.md.sal.binding.impl.BindingDOMRpcImplementationAdapter.invokeRpc(BindingDOMRpcImplementationAdapter.java:72)[158:org.opendaylight.controller.sal-binding-broker-impl:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.md.sal.dom.broker.impl.RoutedDOMRpcRoutingTableEntry.invokeRpc(RoutedDOMRpcRoutingTableEntry.java:59)[156:org.opendaylight.controller.sal-broker-impl:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRoutingTable.invokeRpc(DOMRpcRoutingTable.java:186)[156:org.opendaylight.controller.sal-broker-impl:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter.invokeRpc(DOMRpcRouter.java:131)[156:org.opendaylight.controller.sal-broker-impl:1.4.0.SNAPSHOT]
            at
        Proxye0ec0900_6b74_429b_9f12_0a7613d48bda.invokeRpc(Unknown
        Source)[:]
            at
        Proxybc49a3aa_9bb1_4cc7_a246_6274d4eebb3c.invokeRpc(Unknown
        Source)[:]
            at
        
org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.invoke0(RpcServiceAdapter.java:65)[158:org.opendaylight.controller.sal-binding-broker-impl:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.access$000(RpcServiceAdapter.java:43)[158:org.opendaylight.controller.sal-binding-broker-impl:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter$RpcInvocationStrategy.invoke(RpcServiceAdapter.java:159)[158:org.opendaylight.controller.sal-binding-broker-impl:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.invoke(RpcServiceAdapter.java:96)[158:org.opendaylight.controller.sal-binding-broker-impl:1.4.0.SNAPSHOT]
            at com.sun.proxy.$Proxy110.addFlow(Unknown
        
Source)[274:org.opendaylight.openflowplugin.model.flow-service:0.3.0.SNAPSHOT]
            at
        
org.opendaylight.openflowplugin.applications.frm.impl.FlowForwarder.add(FlowForwarder.java:197)[278:org.opendaylight.openflowplugin.applications.forwardingrules-manager:0.3.0.SNAPSHOT]
            at
        
org.opendaylight.openflowplugin.applications.frm.impl.FlowForwarder.add(FlowForwarder.java:61)[278:org.opendaylight.openflowplugin.applications.forwardingrules-manager:0.3.0.SNAPSHOT]
            at
        
org.opendaylight.openflowplugin.applications.frm.impl.AbstractListeningCommiter.onDataTreeChanged(AbstractListeningCommiter.java:64)[278:org.opendaylight.openflowplugin.applications.forwardingrules-manager:0.3.0.SNAPSHOT]
            at
        
org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataTreeChangeListenerAdapter.onDataTreeChanged(BindingDOMDataTreeChangeListenerAdapter.java:41)[158:org.opendaylight.controller.sal-binding-broker-impl:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.dataChanged(DataTreeChangeListenerActor.java:55)[187:org.opendaylight.controller.sal-distributed-datastore:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.handleReceive(DataTreeChangeListenerActor.java:37)[187:org.opendaylight.controller.sal-distributed-datastore:1.4.0.SNAPSHOT]
            at
        
org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:25)[182:org.opendaylight.controller.sal-clustering-commons:1.4.0.SNAPSHOT]
            at
        
akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)[170:com.typesafe.akka.actor:2.4.7]
            at
        
akka.actor.Actor$class.aroundReceive(Actor.scala:484)[170:com.typesafe.akka.actor:2.4.7]
            at
        
akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)[170:com.typesafe.akka.actor:2.4.7]
            at
        
akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)[170:com.typesafe.akka.actor:2.4.7]
            at
        
akka.actor.ActorCell.invoke(ActorCell.scala:495)[170:com.typesafe.akka.actor:2.4.7]
            at
        
akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)[170:com.typesafe.akka.actor:2.4.7]
            at
        
akka.dispatch.Mailbox.run(Mailbox.scala:224)[170:com.typesafe.akka.actor:2.4.7]
            at
        
akka.dispatch.Mailbox.exec(Mailbox.scala:234)[170:com.typesafe.akka.actor:2.4.7]
            at
        
scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[166:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
            at
        
scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[166:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
            at
        
scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[166:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
            at
        
scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[166:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
        2016-07-01 16:34:05,574 | ERROR | on-dispatcher-67 |
        SalFlowServiceImpl               | 286 -
        org.opendaylight.openflowplugin.impl - 0.3.0.SNAPSHOT | flow
        add failed for id=16, errors=Device reported error type
        BADMATCH code BADFIELD
        2016-07-01 16:34:05,577 | ERROR | on-dispatcher-67 |
        SalFlowServiceImpl               | 286 -
        org.opendaylight.openflowplugin.impl - 0.3.0.SNAPSHOT | flow
        add failed for id=18, errors=Device reported error type
        BADMATCH code BADFIELD
        2016-07-01 16:34:05,581 | ERROR | on-dispatcher-67 |
        SalFlowServiceImpl               | 286 -
        org.opendaylight.openflowplugin.impl - 0.3.0.SNAPSHOT | flow
        add failed for id=17, errors=Device reported error type
        BADMATCH code BADFIELD
        2016-07-01 16:34:05,585 | ERROR | on-dispatcher-67 |
        SalFlowServiceImpl               | 286 -
        org.opendaylight.openflowplugin.impl - 0.3.0.SNAPSHOT | flow
        add failed for id=19, errors=Device reported error type
        BADMATCH code BADFIELD
        2016-07-01 16:34:05,592 | ERROR | on-dispatcher-67 |
        SalFlowServiceImpl               | 286 -
        org.opendaylight.openflowplugin.impl - 0.3.0.SNAPSHOT | flow
        add failed for id=13, errors=Device reported error type
        BADMATCH code BADFIELD





_______________________________________________
openflowplugin-dev mailing list
[email protected]
https://lists.opendaylight.org/mailman/listinfo/openflowplugin-dev

Reply via email to