private OFFlowMod createFRESCOFlowMod(IOFSwitch sw, Match match, List<OFAction> actions, int priority){ OFFlowMod.Builder fmb = sw.getOFFactory().buildFlowAdd();; fmb.setIdleTimeout(FlowModUtils.INFINITE_TIMEOUT); fmb.setHardTimeout(FlowModUtils.INFINITE_TIMEOUT); fmb.setBufferId(OFBufferId.NO_BUFFER); fmb.setOutPort(OFPort.ANY); fmb.setCookie(U64.of(0)); fmb.setPriority(U16.t(priority)); fmb.setMatch(match); fmb.setActions(actions); return fmb.build(); }
@Override public OFOxm<?> mapSelector(OFFactory factory, ExtensionSelector extensionSelector) { ExtensionSelectorType type = extensionSelector.type(); if (type.equals(ExtensionSelectorType.ExtensionSelectorTypes.NICIRA_MATCH_NSH_SPI.type())) { NiciraMatchNshSpi niciraNshSpi = (NiciraMatchNshSpi) extensionSelector; return factory.oxms().nsp(U32.of(niciraNshSpi.nshSpi().servicePathId())); } if (type.equals(ExtensionSelectorType.ExtensionSelectorTypes.NICIRA_MATCH_NSH_SI.type())) { NiciraMatchNshSi niciraNshSi = (NiciraMatchNshSi) extensionSelector; return factory.oxms().nsi(U8.of(niciraNshSi.nshSi().serviceIndex())); } if (type.equals(ExtensionSelectorType.ExtensionSelectorTypes.NICIRA_MATCH_ENCAP_ETH_TYPE.type())) { NiciraMatchEncapEthType niciraEncapEthType = (NiciraMatchEncapEthType) extensionSelector; return factory.oxms().encapEthType(U16.of(niciraEncapEthType.encapEthType())); } if (type.equals(ExtensionSelectorType.ExtensionSelectorTypes.NICIRA_MATCH_NSH_CH1.type())) { // TODO } if (type.equals(ExtensionSelectorType.ExtensionSelectorTypes.NICIRA_MATCH_NSH_CH2.type())) { // TODO } if (type.equals(ExtensionSelectorType.ExtensionSelectorTypes.NICIRA_MATCH_NSH_CH3.type())) { // TODO } if (type.equals(ExtensionSelectorType.ExtensionSelectorTypes.NICIRA_MATCH_NSH_CH4.type())) { // TODO } return null; }
@Override public int compare(String o1, String o2) { OFFlowMod f1 = entriesFromStorage.get(dpid).get(o1); OFFlowMod f2 = entriesFromStorage.get(dpid).get(o2); if (f1 == null || f2 == null) // sort active=false flows by key return o1.compareTo(o2); return U16.of(f1.getPriority()).getValue() - U16.of(f2.getPriority()).getValue(); }
/** * Only bits 0-9 of index are used. Bits 10-15 are ignored. * @param index * @param tunnelId * @return */ public static OFGroup createL2DCOFloodOverUnicastTunnels(U16 index, U16 tunnelId) { //8 return OFGroup.of(0 | (index.getRaw() & 0x03ff) | (tunnelId.getRaw() << 12) | (L2OverlaySubType.L2_OVERLAY_FLOOD_OVER_UNICAST_TUNNELS << 10) | (OFDPAGroupType.L2_DATA_CENTER_OVERLAY << 28)); }
/** * Only bits 0-9 of index are used. Bits 10-15 are ignored. * @param index * @param tunnelId * @return */ public static OFGroup createL2DCOFloodOverMulticastTunnels(U16 index, U16 tunnelId) { //8 return OFGroup.of(0 | (index.getRaw() & 0x03ff) | (tunnelId.getRaw() << 12) | (L2OverlaySubType.L2_OVERLAY_FLOOD_OVER_MULTICAST_TUNNELS << 10) | (OFDPAGroupType.L2_DATA_CENTER_OVERLAY << 28)); }
/** * Only bits 0-9 of index are used. Bits 10-15 are ignored. * @param index * @param tunnelId * @return */ public static OFGroup createL2DCOMulticastOverUnicastTunnels(U16 index, U16 tunnelId) { //8 return OFGroup.of(0 | (index.getRaw() & 0x03ff) | (tunnelId.getRaw() << 12) | (L2OverlaySubType.L2_OVERLAY_MULTICAST_OVER_UNICAST_TUNNELS << 10) | (OFDPAGroupType.L2_DATA_CENTER_OVERLAY << 28)); }
/** * Only bits 0-9 of index are used. Bits 10-15 are ignored. * @param index * @param tunnelId * @return */ public static OFGroup createL2DCOMulticastOverMulticastTunnels(U16 index, U16 tunnelId) { //8 return OFGroup.of(0 | (index.getRaw() & 0x03ff) | (tunnelId.getRaw() << 12) | (L2OverlaySubType.L2_OVERLAY_MULTICAST_OVER_MULTICAST_TUNNELS << 10) | (OFDPAGroupType.L2_DATA_CENTER_OVERLAY << 28)); }