All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.projectfloodlight.openflow.util.MultiplePktInReasonUtil Maven / Gradle / Ivy

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 getOFBsnPktinFlags(OFPacketIn pktIn) {
        if(pktIn.getVersion().compareTo(OFVersion.OF_13) < 0) {
            throw new IllegalArgumentException("multiple pkt in reasons are "
                                               + "only supported by BVS using "
                                               + "openflow version >= 1.3");
        }

        Match match = pktIn.getMatch();
        if(match == null) {
            return ImmutableSet.of();
        }
        OFMetadata metaData = match.get(MatchField.METADATA);
        if(metaData == null) {
            return ImmutableSet.of();
        }
        U64 metaDataValue = metaData.getValue();
        if(metaDataValue == null) {
            return ImmutableSet.of();
        }
        return OFBsnPktinFlagSerializerVer13.ofWireValue(metaDataValue
                                                               .getValue());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy