blob: 3ee588fa2aef703a2ed2155680f6dfb9d16cc2f4 [file] [log] [blame]
xinwud6a402f2014-04-22 15:43:58 -07001package org.projectfloodlight.openflow.util;
2
3import java.util.Set;
4
xinwu29274d72014-04-22 19:20:19 -07005import com.google.common.collect.ImmutableSet;
6
7import org.projectfloodlight.openflow.types.U64;
xinwud6a402f2014-04-22 15:43:58 -07008import org.projectfloodlight.openflow.protocol.OFBsnPktinFlag;
9import org.projectfloodlight.openflow.protocol.OFPacketIn;
10import org.projectfloodlight.openflow.protocol.OFVersion;
11import org.projectfloodlight.openflow.protocol.match.MatchField;
xinwu29274d72014-04-22 19:20:19 -070012import org.projectfloodlight.openflow.protocol.match.Match;
xinwud6a402f2014-04-22 15:43:58 -070013import org.projectfloodlight.openflow.protocol.ver13.OFBsnPktinFlagSerializerVer13;
14import org.projectfloodlight.openflow.types.OFMetadata;
15
xinwu29274d72014-04-22 19:20:19 -070016
xinwud6a402f2014-04-22 15:43:58 -070017public class MultiplePktInReasonUtil {
18 private MultiplePktInReasonUtil() {}
19
xinwu29274d72014-04-22 19:20:19 -070020 /**
21 * This function is used in BVS T5/6 to decode the multiple packet in
22 * reasons in Match.MetaData field.
23 * */
xinwud6a402f2014-04-22 15:43:58 -070024 public static Set<OFBsnPktinFlag> getOFBsnPktinFlags(OFPacketIn pktIn) {
Vishnu Emmadicf53bb92014-12-06 12:17:13 -080025 if(pktIn.getVersion().compareTo(OFVersion.OF_13) < 0) {
xinwud6a402f2014-04-22 15:43:58 -070026 throw new IllegalArgumentException("multiple pkt in reasons are "
27 + "only supported by BVS using "
Vishnu Emmadicf53bb92014-12-06 12:17:13 -080028 + "openflow version >= 1.3");
xinwud6a402f2014-04-22 15:43:58 -070029 }
xinwu29274d72014-04-22 19:20:19 -070030
31 Match match = pktIn.getMatch();
32 if(match == null) {
33 return ImmutableSet.<OFBsnPktinFlag>of();
34 }
35 OFMetadata metaData = match.get(MatchField.METADATA);
36 if(metaData == null) {
37 return ImmutableSet.<OFBsnPktinFlag>of();
38 }
39 U64 metaDataValue = metaData.getValue();
40 if(metaDataValue == null) {
41 return ImmutableSet.<OFBsnPktinFlag>of();
42 }
43 return OFBsnPktinFlagSerializerVer13.ofWireValue(metaDataValue
44 .getValue());
xinwud6a402f2014-04-22 15:43:58 -070045 }
46}