private OFActionOutput buildOutput(Integer port) { OFActionOutput act = sw.factory().actions() .buildOutput() .setPort(OFPort.of(port)) .build(); return act; }
@Override public OFAction mapInstruction(OFFactory factory, ExtensionTreatment extensionTreatment) { ExtensionTreatmentType type = extensionTreatment.type(); if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_VLAN_ID.type())) { VlanId vlanId = ((OfdpaSetVlanVid) extensionTreatment).vlanId(); // NOTE: OFDPA requires isPresent bit set to zero. OFVlanVidMatch match = OFVlanVidMatch.ofRawVid(vlanId.toShort()); return factory.actions().setField(factory.oxms().vlanVid(match)); } throw new UnsupportedOperationException( "Unexpected ExtensionTreatment: " + extensionTreatment.toString()); }
private OFAction buildL2Modification(Instruction i) { L2ModificationInstruction l2m = (L2ModificationInstruction) i; ModEtherInstruction eth; switch (l2m.subtype()) { case ETH_DST: eth = (ModEtherInstruction) l2m; return factory().actions().setDlDst(MacAddress.of(eth.mac().toLong())); case ETH_SRC: eth = (ModEtherInstruction) l2m; return factory().actions().setDlSrc(MacAddress.of(eth.mac().toLong())); case VLAN_ID: ModVlanIdInstruction vlanId = (ModVlanIdInstruction) l2m; return factory().actions().setVlanVid(VlanVid.ofVlan(vlanId.vlanId().toShort())); case VLAN_PCP: ModVlanPcpInstruction vlanPcp = (ModVlanPcpInstruction) l2m; return factory().actions().setVlanPcp(VlanPcp.of(vlanPcp.vlanPcp())); case VLAN_POP: return factory().actions().stripVlan(); case VLAN_PUSH: return null; default: log.warn("Unimplemented action type {}.", l2m.subtype()); break; } return null; }
case OUTPUT: OutputInstruction out = (OutputInstruction) i; OFActionOutput.Builder action = factory().actions().buildOutput() .setPort(OFPort.of((int) out.port().toLong())); if (out.port().equals(PortNumber.CONTROLLER)) { case GROUP: GroupInstruction group = (GroupInstruction) i; OFActionGroup.Builder groupBuilder = factory().actions().buildGroup() .setGroup(OFGroup.of(group.groupId().id())); actions.add(groupBuilder.build()); case QUEUE: SetQueueInstruction queue = (SetQueueInstruction) i; OFActionSetQueue.Builder queueBuilder = factory().actions().buildSetQueue() .setQueueId(queue.queueId()); actions.add(queueBuilder.build());
private OFAction buildL3Modification(Instruction i) { L3ModificationInstruction l3m = (L3ModificationInstruction) i; ModIPInstruction ip; Ip4Address ip4; switch (l3m.subtype()) { case IPV4_SRC: ip = (ModIPInstruction) i; ip4 = ip.ip().getIp4Address(); return factory().actions().setNwSrc(IPv4Address.of(ip4.toInt())); case IPV4_DST: ip = (ModIPInstruction) i; ip4 = ip.ip().getIp4Address(); return factory().actions().setNwDst(IPv4Address.of(ip4.toInt())); default: log.warn("Unimplemented action type {}.", l3m.subtype()); break; } return null; }
Instructions.OutputInstruction out = (Instructions.OutputInstruction) i; OFActionOutput.Builder action = factory.actions().buildOutput() .setPort(OFPort.of((int) out.port().toLong())); if (out.port().equals(PortNumber.CONTROLLER)) { Instructions.GroupInstruction grp = (Instructions.GroupInstruction) i; OFActionGroup.Builder actgrp = factory.actions().buildGroup() .setGroup(OFGroup.of(grp.groupId().id())); actions.add(actgrp.build());
private OFPacketOut packetOut(OpenFlowSwitch sw, byte[] eth, OFPort out) { OFPacketOut.Builder builder = sw.factory().buildPacketOut(); OFAction act = sw.factory().actions() .buildOutput() .setPort(out) .build(); return builder .setBufferId(OFBufferId.NO_BUFFER) .setInPort(OFPort.CONTROLLER) .setActions(Collections.singletonList(act)) .setData(eth) .build(); }
case OUTPUT: OutputInstruction out = (OutputInstruction) i; OFActionOutput.Builder action = factory().actions().buildOutput() .setPort(OFPort.of((int) out.port().toLong())); if (out.port().equals(PortNumber.CONTROLLER)) { log.warn("Required argument 'port' undefined for OFActionEnqueue"); OFActionEnqueue.Builder queueBuilder = factory().actions().buildEnqueue() .setQueueId(queue.queueId()) .setPort(OFPort.ofInt((int) queue.port().toLong()));
private OFAction buildModOchSignalInstruction(ModOchSignalInstruction instruction) { OchSignal signal = instruction.lambda(); byte gridType = OpenFlowValueMapper.lookupGridType(signal.gridType()); byte channelSpacing = OpenFlowValueMapper.lookupChannelSpacing(signal.channelSpacing()); return factory().actions().circuit(factory().oxms().expOchSigId( new CircuitSignalID(gridType, channelSpacing, (short) signal.spacingMultiplier(), (short) signal.slotGranularity()) )); }
private OFAction buildL1Modification(Instruction i) { L1ModificationInstruction l1m = (L1ModificationInstruction) i; OFOxm<?> oxm = null; switch (l1m.subtype()) { case ODU_SIGID: ModOduSignalIdInstruction modOduSignalIdInstruction = (ModOduSignalIdInstruction) l1m; OduSignalId oduSignalId = modOduSignalIdInstruction.oduSignalId(); OduSignalID oduSignalID = new OduSignalID((short) oduSignalId.tributaryPortNumber(), (short) oduSignalId.tributarySlotLength(), oduSignalId.tributarySlotBitmap()); oxm = factory().oxms().expOduSigId(oduSignalID); break; default: log.warn("Unimplemented action type {}.", l1m.subtype()); break; } if (oxm != null) { return factory().actions().buildSetField().setField(oxm).build(); } return null; }
private OFAction buildL0Modification(Instruction i) { L0ModificationInstruction l0m = (L0ModificationInstruction) i; OFOxm<?> oxm = null; switch (l0m.subtype()) { case OCH: try { ModOchSignalInstruction modOchSignalInstruction = (ModOchSignalInstruction) l0m; OchSignal signal = modOchSignalInstruction.lambda(); byte gridType = OpenFlowValueMapper.lookupGridType(signal.gridType()); byte channelSpacing = OpenFlowValueMapper.lookupChannelSpacing(signal.channelSpacing()); oxm = factory().oxms().expOchSigId( new CircuitSignalID(gridType, channelSpacing, (short) signal.spacingMultiplier(), (short) signal.slotGranularity())); } catch (NoMappingFoundException e) { log.warn(e.getMessage()); break; } break; default: log.warn("Unimplemented action type {}.", l0m.subtype()); break; } if (oxm != null) { return factory().actions().buildSetField().setField(oxm).build(); } return null; }
break; case VLAN_POP: return factory.actions().popVlan(); case VLAN_PUSH: L2ModificationInstruction.PushHeaderInstructions pushVlanInstruction = (L2ModificationInstruction.PushHeaderInstructions) l2m; return factory.actions().pushVlan( EthType.of(pushVlanInstruction.ethernetType().toShort())); case MPLS_PUSH: L2ModificationInstruction.PushHeaderInstructions pushHeaderInstructions = (L2ModificationInstruction.PushHeaderInstructions) l2m; return factory.actions().pushMpls(EthType.of(pushHeaderInstructions .ethernetType().toShort())); case MPLS_POP: L2ModificationInstruction.PushHeaderInstructions popHeaderInstructions = (L2ModificationInstruction.PushHeaderInstructions) l2m; return factory.actions().popMpls(EthType.of(popHeaderInstructions .ethernetType().toShort())); case MPLS_LABEL: break; case DEC_MPLS_TTL: return factory.actions().decMplsTtl(); case TUNNEL_ID: L2ModificationInstruction.ModTunnelIdInstruction tunnelId = return factory.actions().buildSetField().setField(oxm).build();
if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_TUNNEL_DST.type())) { NiciraSetTunnelDst tunnelDst = (NiciraSetTunnelDst) extensionTreatment; return factory.actions().setField(factory.oxms().tunnelIpv4Dst( IPv4Address.of(tunnelDst.tunnelDst().toInt()))); return factory.actions().niciraResubmit((int) resubmit.inPort().toLong(), resubmit.table()); return factory.actions().niciraResubmitTable((int) resubmitTable.inPort().toLong(), resubmitTable.table()); return factory.actions().setField(factory.oxms().nsp(U32.of(niciraNshSpi.nshSpi().servicePathId()))); return factory.actions().setField(factory.oxms().nsi(U8.of(niciraNshSi.nshSi().serviceIndex()))); return factory.actions().setField(factory.oxms().nshC1(U32.of(niciraNshch.nshCh().nshContextHeader()))); return factory.actions().setField(factory.oxms().nshC2(U32.of(niciraNshch.nshCh().nshContextHeader()))); return factory.actions().setField(factory.oxms().nshC3(U32.of(niciraNshch.nshCh().nshContextHeader()))); return factory.actions().setField(factory.oxms().nshC4(U32.of(niciraNshch.nshCh().nshContextHeader()))); return factory.actions().setField(factory.oxms().nshMdtype(U8.of(niciraNshMdType.nshMdType()))); return factory.actions().setField(factory.oxms().nshNp(U8.of(niciraNshNp.nshNp()))); return factory.actions().setField(factory.oxms().encapEthSrc(MacAddress.of(niciraEncapEthSrc.encapEthSrc() .toBytes())));
PushHeaderInstructions pushHeaderInstructions = (PushHeaderInstructions) l2m; return factory().actions().pushMpls(EthType.of(pushHeaderInstructions .ethernetType().toShort())); case MPLS_POP: PushHeaderInstructions popHeaderInstructions = (PushHeaderInstructions) l2m; return factory().actions().popMpls(EthType.of(popHeaderInstructions .ethernetType().toShort())); case MPLS_LABEL: break; case DEC_MPLS_TTL: return factory().actions().decMplsTtl(); case VLAN_POP: return factory().actions().popVlan(); case VLAN_PUSH: PushHeaderInstructions pushVlanInstruction = (PushHeaderInstructions) l2m; return factory().actions().pushVlan( EthType.of(pushVlanInstruction.ethernetType().toShort())); case TUNNEL_ID: return factory().actions().buildSetField().setField(oxm).build();
.actions() .buildOutput() .setPort(entry.getOutPort())
break; case DEC_TTL: return factory().actions().decNwTtl(); case TTL_IN: return factory().actions().copyTtlIn(); case TTL_OUT: return factory().actions().copyTtlOut(); default: log.warn("Unimplemented action type {}.", l3m.subtype()); return factory().actions().buildSetField().setField(oxm).build();
private OFAction buildL4Modification(Instruction i) { L4ModificationInstruction l4m = (L4ModificationInstruction) i; ModTransportPortInstruction tp; OFOxm<?> oxm = null; switch (l4m.subtype()) { case TCP_SRC: tp = (ModTransportPortInstruction) l4m; oxm = factory().oxms().tcpSrc(TransportPort.of(tp.port().toInt())); break; case TCP_DST: tp = (ModTransportPortInstruction) l4m; oxm = factory().oxms().tcpDst(TransportPort.of(tp.port().toInt())); break; case UDP_SRC: tp = (ModTransportPortInstruction) l4m; oxm = factory().oxms().udpSrc(TransportPort.of(tp.port().toInt())); break; case UDP_DST: tp = (ModTransportPortInstruction) l4m; oxm = factory().oxms().udpDst(TransportPort.of(tp.port().toInt())); break; default: log.warn("Unimplemented action type {}.", l4m.subtype()); break; } if (oxm != null) { return factory().actions().buildSetField().setField(oxm).build(); } return null; }