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];
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