Search in sources :

Example 46 with Match

use of org.projectfloodlight.openflow.protocol.match.Match in project open-kilda by telstra.

the class SwitchManager method buildIntermediateIngressRule.

@Override
public OFFlowMod buildIntermediateIngressRule(DatapathId dpid, int port) throws SwitchNotFoundException {
    IOFSwitch sw = lookupSwitch(dpid);
    OFFactory ofFactory = sw.getOFFactory();
    Match match = buildInPortMatch(port, ofFactory);
    OFInstructionGotoTable goToTable = ofFactory.instructions().gotoTable(TableId.of(PRE_INGRESS_TABLE_ID));
    return prepareFlowModBuilder(ofFactory, Cookie.encodeIngressRulePassThrough(port), INGRESS_CUSTOMER_PORT_RULE_PRIORITY_MULTITABLE, INPUT_TABLE_ID).setMatch(match).setInstructions(ImmutableList.of(goToTable)).build();
}
Also used : IOFSwitch(net.floodlightcontroller.core.IOFSwitch) OFInstructionGotoTable(org.projectfloodlight.openflow.protocol.instruction.OFInstructionGotoTable) OFFactory(org.projectfloodlight.openflow.protocol.OFFactory) Match(org.projectfloodlight.openflow.protocol.match.Match) OFVlanVidMatch(org.projectfloodlight.openflow.types.OFVlanVidMatch)

Example 47 with Match

use of org.projectfloodlight.openflow.protocol.match.Match in project open-kilda by telstra.

the class SwitchManager method buildLldpInputCustomerFlow.

@Override
public OFFlowMod buildLldpInputCustomerFlow(DatapathId dpid, int port) throws SwitchNotFoundException {
    IOFSwitch sw = lookupSwitch(dpid);
    OFFactory ofFactory = sw.getOFFactory();
    Match match = ofFactory.buildMatch().setExact(MatchField.IN_PORT, OFPort.of(port)).setExact(MatchField.ETH_TYPE, EthType.LLDP).build();
    RoutingMetadata metadata = buildMetadata(RoutingMetadata.builder().lldpFlag(true), sw);
    OFInstructionWriteMetadata writeMetadata = ofFactory.instructions().buildWriteMetadata().setMetadata(metadata.getValue()).setMetadataMask(metadata.getMask()).build();
    OFInstructionGotoTable goToTable = ofFactory.instructions().gotoTable(TableId.of(PRE_INGRESS_TABLE_ID));
    return prepareFlowModBuilder(ofFactory, Cookie.encodeLldpInputCustomer(port), LLDP_INPUT_CUSTOMER_PRIORITY, INPUT_TABLE_ID).setMatch(match).setInstructions(ImmutableList.of(goToTable, writeMetadata)).build();
}
Also used : IOFSwitch(net.floodlightcontroller.core.IOFSwitch) OFInstructionGotoTable(org.projectfloodlight.openflow.protocol.instruction.OFInstructionGotoTable) OFFactory(org.projectfloodlight.openflow.protocol.OFFactory) OFInstructionWriteMetadata(org.projectfloodlight.openflow.protocol.instruction.OFInstructionWriteMetadata) RoutingMetadata(org.openkilda.floodlight.utils.metadata.RoutingMetadata) Match(org.projectfloodlight.openflow.protocol.match.Match) OFVlanVidMatch(org.projectfloodlight.openflow.types.OFVlanVidMatch)

Example 48 with Match

use of org.projectfloodlight.openflow.protocol.match.Match in project open-kilda by telstra.

the class SwitchManager method removeIntermediateIngressRule.

@Override
public long removeIntermediateIngressRule(DatapathId dpid, int port) throws SwitchOperationException {
    IOFSwitch sw = lookupSwitch(dpid);
    OFFactory ofFactory = sw.getOFFactory();
    OFFlowDelete.Builder builder = ofFactory.buildFlowDelete();
    long cookie = Cookie.encodeIngressRulePassThrough(port);
    builder.setCookie(U64.of(cookie));
    builder.setCookieMask(U64.NO_MASK);
    Match match = buildInPortMatch(port, ofFactory);
    builder.setMatch(match);
    OFInstructionGotoTable goToTable = ofFactory.instructions().gotoTable(TableId.of(PRE_INGRESS_TABLE_ID));
    builder.setInstructions(ImmutableList.of(goToTable));
    builder.setPriority(INGRESS_CUSTOMER_PORT_RULE_PRIORITY_MULTITABLE);
    removeFlowByOfFlowDelete(dpid, INPUT_TABLE_ID, builder.build());
    return cookie;
}
Also used : IOFSwitch(net.floodlightcontroller.core.IOFSwitch) OFFlowDelete(org.projectfloodlight.openflow.protocol.OFFlowDelete) OFInstructionGotoTable(org.projectfloodlight.openflow.protocol.instruction.OFInstructionGotoTable) OFFactory(org.projectfloodlight.openflow.protocol.OFFactory) Match(org.projectfloodlight.openflow.protocol.match.Match) OFVlanVidMatch(org.projectfloodlight.openflow.types.OFVlanVidMatch)

Example 49 with Match

use of org.projectfloodlight.openflow.protocol.match.Match in project open-kilda by telstra.

the class DropLoopFlowGenerator method generateFlow.

@Override
public SwitchFlowTuple generateFlow(IOFSwitch sw) {
    OFFactory ofFactory = sw.getOFFactory();
    if (ofFactory.getVersion() == OF_12) {
        return SwitchFlowTuple.getEmpty();
    }
    Match.Builder builder = ofFactory.buildMatch();
    builder.setExact(MatchField.ETH_DST, MacAddress.of(verificationBcastPacketDst));
    builder.setExact(MatchField.ETH_SRC, convertDpIdToMac(sw.getId()));
    Match match = builder.build();
    OFFlowMod flowMod = prepareFlowModBuilder(ofFactory, DROP_VERIFICATION_LOOP_RULE_COOKIE, DROP_VERIFICATION_LOOP_RULE_PRIORITY, INPUT_TABLE_ID).setMatch(match).build();
    return SwitchFlowTuple.builder().sw(sw).flow(flowMod).build();
}
Also used : OFFactory(org.projectfloodlight.openflow.protocol.OFFactory) OFFlowMod(org.projectfloodlight.openflow.protocol.OFFlowMod) Match(org.projectfloodlight.openflow.protocol.match.Match)

Example 50 with Match

use of org.projectfloodlight.openflow.protocol.match.Match in project open-kilda by telstra.

the class ArpInputPreDropFlowGenerator method getArpFlowMod.

@Override
public OFFlowMod getArpFlowMod(IOFSwitch sw, OFInstructionMeter meter, List<OFAction> actionList) {
    OFFactory ofFactory = sw.getOFFactory();
    Match match = ofFactory.buildMatch().setExact(MatchField.ETH_TYPE, EthType.ARP).build();
    actionList.add(actionSendToController(sw.getOFFactory()));
    OFInstructionApplyActions actions = ofFactory.instructions().applyActions(actionList).createBuilder().build();
    return prepareFlowModBuilder(ofFactory, getCookie(), ARP_INPUT_PRE_DROP_PRIORITY, INPUT_TABLE_ID).setMatch(match).setInstructions(meter != null ? ImmutableList.of(meter, actions) : ImmutableList.of(actions)).build();
}
Also used : OFInstructionApplyActions(org.projectfloodlight.openflow.protocol.instruction.OFInstructionApplyActions) OFFactory(org.projectfloodlight.openflow.protocol.OFFactory) Match(org.projectfloodlight.openflow.protocol.match.Match)

Aggregations

Match (org.projectfloodlight.openflow.protocol.match.Match)51 OFFactory (org.projectfloodlight.openflow.protocol.OFFactory)28 OFVlanVidMatch (org.projectfloodlight.openflow.types.OFVlanVidMatch)28 OFInstructionApplyActions (org.projectfloodlight.openflow.protocol.instruction.OFInstructionApplyActions)18 OFFlowMod (org.projectfloodlight.openflow.protocol.OFFlowMod)14 OFAction (org.projectfloodlight.openflow.protocol.action.OFAction)11 RoutingMetadata (org.openkilda.floodlight.utils.metadata.RoutingMetadata)10 IOFSwitch (net.floodlightcontroller.core.IOFSwitch)8 OFInstructionGotoTable (org.projectfloodlight.openflow.protocol.instruction.OFInstructionGotoTable)7 ArrayList (java.util.ArrayList)5 SwitchFeature (org.openkilda.model.SwitchFeature)5 OFFlowDelete (org.projectfloodlight.openflow.protocol.OFFlowDelete)5 OFFactoryVer13 (org.projectfloodlight.openflow.protocol.ver13.OFFactoryVer13)5 HashSet (java.util.HashSet)4 Test (org.junit.Test)4 FieldMatch (org.openkilda.rulemanager.match.FieldMatch)4 Builder (org.projectfloodlight.openflow.protocol.match.Match.Builder)4 MacAddress (org.projectfloodlight.openflow.types.MacAddress)3 U64 (org.projectfloodlight.openflow.types.U64)3 Builder (org.projectfloodlight.openflow.protocol.OFFlowMod.Builder)2