Pass additional fields from OF lib to apps 45/4245/1
authorSrikar Rajamani <srikar.rajamani@ericsson.com>
Wed, 15 Jan 2014 02:51:51 +0000 (08:21 +0530)
committerSrikar Rajamani <srikar.rajamani@ericsson.com>
Wed, 15 Jan 2014 02:59:37 +0000 (08:29 +0530)
Added a null check
Signed-off-by: Srikar Rajamani <srikar.rajamani@ericsson.com>
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/PacketInTranslator.java

index b7d5f7a00bd6f955b13f95df101e1467b51c2cd5..e69f5ca6afd35584fbdc0d7748e340e9f528b59a 100644 (file)
@@ -7,6 +7,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.opendaylight.openflowplugin.openflow.md.core.IMDMessageTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.SwitchConnectionDistinguisher;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchConvertorImpl;
 import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
@@ -17,6 +18,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.Cookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceivedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketInReason;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.NoMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.InvalidTtl;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.SendToController;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -82,12 +87,33 @@ public class PacketInTranslator implements IMDMessageTranslator<OfHeader, List<D
                }else{
                    LOG.info("Receive packet_in from {} on port {}", dpid, port);
                }
+               org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match match = 
+                          (org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)
+                          MatchConvertorImpl.fromOFMatchToSALMatch(message.getMatch(),dpid);
+               pktInBuilder.setMatch((org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received.Match)match);
+               pktInBuilder.setPacketInReason(getPacketInReason(message.getReason()));
+               pktInBuilder.setTableId(new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId(message.getTableId().getValue().shortValue()));
                pktInBuilder.setIngress(InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(dpid,port));
                PacketReceived pktInEvent = pktInBuilder.build();
                list.add(pktInEvent);
-                return list;
+               return list;
            } 
         } 
         return Collections.emptyList();
     }
+    
+    private Class <?extends PacketInReason> getPacketInReason(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason reason) {
+    
+       if (reason.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason.OFPRNOMATCH)) {
+               return NoMatch.class;
+       }
+       else if (reason.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason.OFPRINVALIDTTL)) {
+               return InvalidTtl.class;
+       }
+       else if (reason.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason.OFPRACTION)) {
+               return SendToController.class;
+       }
+    
+       return PacketInReason.class;
+    }
 }