private long portDown(IOFSwitch sw) { long config = 0; switch (sw.getOFFactory().getVersion()) { case OF_10: config = OFPortConfigSerializerVer10.toWireValue(Collections.singleton(OFPortConfig.PORT_DOWN)); break; case OF_11: config = OFPortConfigSerializerVer11.toWireValue(Collections.singleton(OFPortConfig.PORT_DOWN)); break; case OF_12: config = OFPortConfigSerializerVer12.toWireValue(Collections.singleton(OFPortConfig.PORT_DOWN)); break; case OF_13: config = OFPortConfigSerializerVer13.toWireValue(Collections.singleton(OFPortConfig.PORT_DOWN)); break; case OF_14: config = OFPortConfigSerializerVer14.toWireValue(Collections.singleton(OFPortConfig.PORT_DOWN)); break; default: log.error("Bad OFVersion {}", sw.getOFFactory().getVersion().toString()); break; } return config; }
@Override public void portChanged(Dpid dpid, OFPortStatus status) { LinkDiscovery ld = discoverers.get(dpid); if (ld == null) { return; } final OFPortDesc port = status.getDesc(); final boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN) && !port.getConfig().contains(OFPortConfig.PORT_DOWN); if (enabled) { ld.addPort(port); } else { /* * remove port calls linkVanished */ ld.removePort(port); } }
public static int toWireValue(Set<OFPortConfig> set) { int wireValue = 0; for(OFPortConfig e: set) { switch(e) { case PORT_DOWN: wireValue |= PORT_DOWN_VAL; break; case NO_RECV: wireValue |= NO_RECV_VAL; break; case NO_FWD: wireValue |= NO_FWD_VAL; break; case NO_PACKET_IN: wireValue |= NO_PACKET_IN_VAL; break; case BSN_MIRROR_DEST: wireValue |= BSN_MIRROR_DEST_VAL; break; default: throw new IllegalArgumentException("Illegal enum value for type OFPortConfig in version 1.2: " + e); } } return wireValue; }
public static int toWireValue(Set<OFPortConfig> set) { int wireValue = 0; for(OFPortConfig e: set) { switch(e) { case PORT_DOWN: wireValue |= PORT_DOWN_VAL; break; case NO_RECV: wireValue |= NO_RECV_VAL; break; case NO_FWD: wireValue |= NO_FWD_VAL; break; case NO_PACKET_IN: wireValue |= NO_PACKET_IN_VAL; break; case BSN_MIRROR_DEST: wireValue |= BSN_MIRROR_DEST_VAL; break; default: throw new IllegalArgumentException("Illegal enum value for type OFPortConfig in version 1.3: " + e); } } return wireValue; }
public static Set<OFPortConfig> ofWireValue(int val) { EnumSet<OFPortConfig> set = EnumSet.noneOf(OFPortConfig.class); if((val & PORT_DOWN_VAL) != 0) set.add(OFPortConfig.PORT_DOWN); if((val & NO_STP_VAL) != 0) set.add(OFPortConfig.NO_STP); if((val & NO_RECV_VAL) != 0) set.add(OFPortConfig.NO_RECV); if((val & NO_RECV_STP_VAL) != 0) set.add(OFPortConfig.NO_RECV_STP); if((val & NO_FLOOD_VAL) != 0) set.add(OFPortConfig.NO_FLOOD); if((val & NO_FWD_VAL) != 0) set.add(OFPortConfig.NO_FWD); if((val & NO_PACKET_IN_VAL) != 0) set.add(OFPortConfig.NO_PACKET_IN); if((val & BSN_MIRROR_DEST_VAL) != 0) set.add(OFPortConfig.BSN_MIRROR_DEST); return Collections.unmodifiableSet(set); }
public static int toWireValue(Set<OFPortConfig> set) { int wireValue = 0; for(OFPortConfig e: set) { switch(e) { case PORT_DOWN: wireValue |= PORT_DOWN_VAL; break; case NO_RECV: wireValue |= NO_RECV_VAL; break; case NO_FWD: wireValue |= NO_FWD_VAL; break; case NO_PACKET_IN: wireValue |= NO_PACKET_IN_VAL; break; case BSN_MIRROR_DEST: wireValue |= BSN_MIRROR_DEST_VAL; break; default: throw new IllegalArgumentException("Illegal enum value for type OFPortConfig in version 1.1: " + e); } } return wireValue; }
public static int toWireValue(Set<OFPortConfig> set) { int wireValue = 0; for(OFPortConfig e: set) { switch(e) { case PORT_DOWN: wireValue |= PORT_DOWN_VAL; break; case NO_RECV: wireValue |= NO_RECV_VAL; break; case NO_FWD: wireValue |= NO_FWD_VAL; break; case NO_PACKET_IN: wireValue |= NO_PACKET_IN_VAL; break; case BSN_MIRROR_DEST: wireValue |= BSN_MIRROR_DEST_VAL; break; default: throw new IllegalArgumentException("Illegal enum value for type OFPortConfig in version 1.4: " + e); } } return wireValue; }
private OFPortDesc createMockPortWithState(short portNumber, Set<OFPortState> state) { OFPort ofPort = createMock(OFPort.class); expect(ofPort.getShortPortNumber()).andReturn(portNumber).anyTimes(); OFPortDesc ofPortDesc = createMock(OFPortDesc.class); expect(ofPortDesc.getPortNo()).andReturn(ofPort).anyTimes(); expect(ofPortDesc.getHwAddr()).andReturn( MacAddress.of(DEFAULT_MAC_ADDRESS)).anyTimes(); expect(ofPortDesc.getConfig()). andReturn(Collections.<OFPortConfig>emptySet()).anyTimes(); expect(ofPortDesc.getState()).andReturn(state).anyTimes(); replay(ofPort); replay(ofPortDesc); return ofPortDesc; }
private OFPortMod.Builder makePortMod(OpenFlowSwitch sw, PortNumber portNumber, boolean enable) { OFPortMod.Builder pmb = sw.factory().buildPortMod(); OFPort port = OFPort.of((int) portNumber.toLong()); pmb.setPortNo(port); Set<OFPortConfig> portConfig = EnumSet.noneOf(OFPortConfig.class); if (!enable) { portConfig.add(OFPortConfig.PORT_DOWN); } pmb.setConfig(portConfig); Set<OFPortConfig> portMask = EnumSet.noneOf(OFPortConfig.class); portMask.add(OFPortConfig.PORT_DOWN); pmb.setMask(portMask); pmb.setAdvertise(0x0); for (OFPortDesc pd : sw.getPorts()) { if (pd.getPortNo().equals(port)) { pmb.setHwAddr(pd.getHwAddr()); break; } } return pmb; }
/** * Build a portDescription from a given Ethernet port description. * * @param port the port to build from. * @return portDescription for the port. */ private PortDescription buildPortDescription(OFPortDesc port) { if (port.getVersion().wireVersion >= OFVersion.OF_14.getWireVersion()) { return buildPortDescription14(port); } PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN) && !port.getConfig().contains(OFPortConfig.PORT_DOWN); Port.Type type = port.getCurr().contains(OFPortFeatures.PF_FIBER) ? FIBER : COPPER; boolean adminDown = port.getConfig().contains(OFPortConfig.PORT_DOWN); SparseAnnotations annotations = makePortAnnotation(port.getName(), port.getHwAddr().toString(), adminDown).build(); return new DefaultPortDescription(portNo, enabled, type, portSpeed(port), annotations); }
public static int toWireValue(Set<OFPortConfig> set) { int wireValue = 0; for(OFPortConfig e: set) { switch(e) { case PORT_DOWN: wireValue |= PORT_DOWN_VAL; break; case NO_RECV: wireValue |= NO_RECV_VAL; break; case NO_FWD: wireValue |= NO_FWD_VAL; break; case NO_PACKET_IN: wireValue |= NO_PACKET_IN_VAL; break; case BSN_MIRROR_DEST: wireValue |= BSN_MIRROR_DEST_VAL; break; default: throw new IllegalArgumentException("Illegal enum value for type OFPortConfig in version 1.5: " + e); } } return wireValue; }
public void testIsEnabledForFactory(OFFactory factory) { // Default OFPortDesc desc = factory.buildPortDesc() .build(); assertThat(desc.isEnabled(), is(true)); // Partially disabled desc = factory.buildPortDesc() .setConfig(new HashSet<OFPortConfig>(Arrays.asList(OFPortConfig.PORT_DOWN))) .build(); assertThat(desc.isEnabled(), is(false)); // Fully disabled desc = factory.buildPortDesc() .setConfig(new HashSet<OFPortConfig>(Arrays.asList(OFPortConfig.PORT_DOWN))) .setState(new HashSet<OFPortState>(Arrays.asList(OFPortState.LINK_DOWN))) .build(); assertThat(desc.isEnabled(), is(false)); }
private PortDescription buildOduCltPortDescription(OFPortDesc port) { PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN) && !port.getConfig().contains(OFPortConfig.PORT_DOWN); Long portSpeedInMbps = portSpeed(port); CltSignalType sigType = null; switch (portSpeedInMbps.toString()) { case "1000": sigType = CltSignalType.CLT_1GBE; break; case "10000": sigType = CltSignalType.CLT_10GBE; break; case "40000": sigType = CltSignalType.CLT_40GBE; break; case "100000": sigType = CltSignalType.CLT_100GBE; break; default: throw new RuntimeException("Un recognize OduClt speed: " + portSpeedInMbps.toString()); } SparseAnnotations annotations = buildOduCltAnnotation(port); return oduCltPortDescription(portNo, enabled, sigType, annotations); }
/** * Build a portDescription from a given Ethernet port description. * * @param port the port to build from. * @return portDescription for the port. */ private PortDescription buildPortDescription(OFPortDesc port) { PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN) && !port.getConfig().contains(OFPortConfig.PORT_DOWN); Port.Type type = port.getCurr().contains(OFPortFeatures.PF_FIBER) ? FIBER : COPPER; SparseAnnotations annotations = makePortAnnotation(port.getName(), port.getHwAddr().toString()); return new DefaultPortDescription(portNo, enabled, type, portSpeed(port), annotations); }
/** * Build a portDescription from a given a port description describing some * Optical port. * * @param port description property type. * @param port the port to build from. * @return portDescription for the port. */ private PortDescription buildPortDescription(PortDescPropertyType ptype, OFPortOptical port) { checkArgument(port.getDesc().size() >= 1); // Minimally functional fixture. This needs to be fixed as we add better support. PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN) && !port.getConfig().contains(OFPortConfig.PORT_DOWN); SparseAnnotations annotations = makePortAnnotation(port.getName(), port.getHwAddr().toString()); if (port.getVersion() == OFVersion.OF_13 && ptype == PortDescPropertyType.OPTICAL_TRANSPORT) { // At this point, not much is carried in the optical port message. LOG.debug("Optical transport port message {}", port.toString()); } else { // removable once 1.4+ support complete. LOG.debug("Unsupported optical port properties"); } OFPortDescPropOpticalTransport desc = port.getDesc().get(0); switch (desc.getPortSignalType()) { // FIXME: use constants once loxi has full optical extensions case 2: // OMS port // Assume complete optical spectrum and 50 GHz grid // LINC-OE is only supported optical OF device for now return omsPortDescription(portNo, enabled, Spectrum.U_BAND_MIN, Spectrum.O_BAND_MAX, Frequency.ofGHz(50), annotations); case 5: // OCH port OchSignal signal = new OchSignal(GridType.DWDM, ChannelSpacing.CHL_50GHZ, 0, 4); return ochPortDescription(portNo, enabled, OduSignalType.ODU4, true, signal, annotations); default: break; } return new DefaultPortDescription(portNo, enabled, FIBER, 0, annotations); }
/** * Set the internal data structure storing this switch's port * to the ports specified by newPortsByNumber * * CALLER MUST HOLD WRITELOCK * * @param newPortsByNumber * @throws IllegaalStateException if called without holding the * writelock */ private void updatePortsWithNewPortsByNumber( Map<OFPort,OFPortDesc> newPortsByNumber) { if (!lock.writeLock().isHeldByCurrentThread()) { throw new IllegalStateException("Method called without " + "holding writeLock"); } Map<String,OFPortDesc> newPortsByName = new HashMap<String, OFPortDesc>(); List<OFPortDesc> newPortList = new ArrayList<OFPortDesc>(); List<OFPortDesc> newEnabledPortList = new ArrayList<OFPortDesc>(); List<OFPort> newEnabledPortNumbers = new ArrayList<OFPort>(); for(OFPortDesc p: newPortsByNumber.values()) { newPortList.add(p); newPortsByName.put(p.getName().toLowerCase(), p); if (!p.getState().contains(OFPortState.LINK_DOWN) && !p.getConfig().contains(OFPortConfig.PORT_DOWN)) { if (!newEnabledPortList.contains(p)) { newEnabledPortList.add(p); } if (!newEnabledPortNumbers.contains(p.getPortNo())) { newEnabledPortNumbers.add(p.getPortNo()); } } } portsByName = Collections.unmodifiableMap(newPortsByName); portsByNumber = Collections.unmodifiableMap(newPortsByNumber); enabledPortList = Collections.unmodifiableList(newEnabledPortList); enabledPortNumbers = Collections.unmodifiableList(newEnabledPortNumbers); portList = Collections.unmodifiableList(newPortList); }
/** * Set the internal data structure storing this switch's port * to the ports specified by newPortsByNumber * * CALLER MUST HOLD WRITELOCK * * @param newPortsByNumber * @throws IllegaalStateException if called without holding the * writelock */ private void updatePortsWithNewPortsByNumber( Map<OFPort,OFPortDesc> newPortsByNumber) { if (!lock.writeLock().isHeldByCurrentThread()) { throw new IllegalStateException("Method called without " + "holding writeLock"); } Map<String,OFPortDesc> newPortsByName = new HashMap<String, OFPortDesc>(); List<OFPortDesc> newPortList = new ArrayList<OFPortDesc>(); List<OFPortDesc> newEnabledPortList = new ArrayList<OFPortDesc>(); List<OFPort> newEnabledPortNumbers = new ArrayList<OFPort>(); for(OFPortDesc p: newPortsByNumber.values()) { newPortList.add(p); newPortsByName.put(p.getName().toLowerCase(), p); if (!p.getState().contains(OFPortState.LINK_DOWN) && !p.getConfig().contains(OFPortConfig.PORT_DOWN)) { newEnabledPortList.add(p); newEnabledPortNumbers.add(p.getPortNo()); } } portsByName = Collections.unmodifiableMap(newPortsByName); portsByNumber = Collections.unmodifiableMap(newPortsByNumber); enabledPortList = Collections.unmodifiableList(newEnabledPortList); enabledPortNumbers = Collections.unmodifiableList(newEnabledPortNumbers); portList = Collections.unmodifiableList(newPortList); }
/** * Build a portDescription from a given port. * * @param port the port to build from. * @return portDescription for the port. */ private PortDescription buildPortDescription(OFPortDesc port) { PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); boolean enabled = !port.getState().contains(OFPortState.LINK_DOWN) && !port.getConfig().contains(OFPortConfig.PORT_DOWN); Port.Type type = port.getCurr().contains(OFPortFeatures.PF_FIBER) ? FIBER : COPPER; SparseAnnotations annotations = makePortNameAnnotation(port); return new DefaultPortDescription(portNo, enabled, type, portSpeed(port), annotations); }
private static OFPortDesc portDesc(int port, boolean up) { OFPortDesc.Builder builder = OFFactoryVer10.INSTANCE.buildPortDesc(); builder.setPortNo(OFPort.of(port)); if (!up) { builder.setConfig(Collections.singleton(OFPortConfig.PORT_DOWN)); } return builder.build(); }
/** * Set the internal data structure storing this switch's port * to the ports specified by newPortsByNumber * 设置一个内部数据结构来储存这个交换机端口根据新端口号 * CALLER MUST HOLD WRITELOCK * * @param newPortsByNumber * @throws IllegaalStateException if called without holding the * writelock */ private void updatePortsWithNewPortsByNumber( Map<OFPort,OFPortDesc> newPortsByNumber) { if (!lock.writeLock().isHeldByCurrentThread()) { throw new IllegalStateException("Method called without " + "holding writeLock"); } Map<String,OFPortDesc> newPortsByName = new HashMap<String, OFPortDesc>(); List<OFPortDesc> newPortList = new ArrayList<OFPortDesc>(); List<OFPortDesc> newEnabledPortList = new ArrayList<OFPortDesc>(); List<OFPort> newEnabledPortNumbers = new ArrayList<OFPort>(); for(OFPortDesc p: newPortsByNumber.values()) { newPortList.add(p); newPortsByName.put(p.getName().toLowerCase(), p); if (!p.getState().contains(OFPortState.LINK_DOWN) && !p.getConfig().contains(OFPortConfig.PORT_DOWN)) { newEnabledPortList.add(p); newEnabledPortNumbers.add(p.getPortNo()); } } portsByName = Collections.unmodifiableMap(newPortsByName); portsByNumber = Collections.unmodifiableMap(newPortsByNumber); enabledPortList = Collections.unmodifiableList(newEnabledPortList); enabledPortNumbers = Collections.unmodifiableList(newEnabledPortNumbers); portList = Collections.unmodifiableList(newPortList); }
public static Set<OFPortConfig> readFrom(ChannelBuffer bb) throws OFParseError { try { return ofWireValue(bb.readInt()); } catch (IllegalArgumentException e) { throw new OFParseError(e); } }
public static Set<OFPortConfig> ofWireValue(int val) { EnumSet<OFPortConfig> set = EnumSet.noneOf(OFPortConfig.class); if((val & PORT_DOWN_VAL) != 0) set.add(OFPortConfig.PORT_DOWN); if((val & NO_RECV_VAL) != 0) set.add(OFPortConfig.NO_RECV); if((val & NO_FWD_VAL) != 0) set.add(OFPortConfig.NO_FWD); if((val & NO_PACKET_IN_VAL) != 0) set.add(OFPortConfig.NO_PACKET_IN); if((val & BSN_MIRROR_DEST_VAL) != 0) set.add(OFPortConfig.BSN_MIRROR_DEST); return Collections.unmodifiableSet(set); }
public static int toWireValue(Set<OFPortConfig> set) { int wireValue = 0; for(OFPortConfig e: set) { switch(e) { case PORT_DOWN: wireValue |= PORT_DOWN_VAL; break; case NO_STP: wireValue |= NO_STP_VAL; break; case NO_RECV: wireValue |= NO_RECV_VAL; break; case NO_RECV_STP: wireValue |= NO_RECV_STP_VAL; break; case NO_FLOOD: wireValue |= NO_FLOOD_VAL; break; case NO_FWD: wireValue |= NO_FWD_VAL; break; case NO_PACKET_IN: wireValue |= NO_PACKET_IN_VAL; break; case BSN_MIRROR_DEST: wireValue |= BSN_MIRROR_DEST_VAL; break; default: throw new IllegalArgumentException("Illegal enum value for type OFPortConfig in version 1.0: " + e); } } return wireValue; }