blob: a919f62e178bb57f12f09528bd6529e499e5796f [file] [log] [blame]
package org.projectfloodlight.openflow.util;
import java.util.Set;
import com.google.common.collect.ImmutableSet;
import org.projectfloodlight.openflow.types.U64;
import org.projectfloodlight.openflow.protocol.OFBsnPktinFlag;
import org.projectfloodlight.openflow.protocol.OFPacketIn;
import org.projectfloodlight.openflow.protocol.OFVersion;
import org.projectfloodlight.openflow.protocol.match.MatchField;
import org.projectfloodlight.openflow.protocol.match.Match;
import org.projectfloodlight.openflow.protocol.ver13.OFBsnPktinFlagSerializerVer13;
import org.projectfloodlight.openflow.types.OFMetadata;
public class MultiplePktInReasonUtil {
private MultiplePktInReasonUtil() {}
/**
* This function is used in BVS T5/6 to decode the multiple packet in
* reasons in Match.MetaData field.
* */
public static Set<OFBsnPktinFlag> getOFBsnPktinFlags(OFPacketIn pktIn) {
if(pktIn.getVersion() != OFVersion.OF_13) {
throw new IllegalArgumentException("multiple pkt in reasons are "
+ "only supported by BVS using "
+ "openflow 1.3");
}
Match match = pktIn.getMatch();
if(match == null) {
return ImmutableSet.<OFBsnPktinFlag>of();
}
OFMetadata metaData = match.get(MatchField.METADATA);
if(metaData == null) {
return ImmutableSet.<OFBsnPktinFlag>of();
}
U64 metaDataValue = metaData.getValue();
if(metaDataValue == null) {
return ImmutableSet.<OFBsnPktinFlag>of();
}
return OFBsnPktinFlagSerializerVer13.ofWireValue(metaDataValue
.getValue());
}
}