/** * 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); }
/** * 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); }
private PortDescription buildPortDescription(OFPortStatus status) { OFPortDesc port = status.getDesc(); if (status.getReason() != OFPortReason.DELETE) { return buildPortDescription(port); } else { PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); Port.Type type = port.getCurr().contains(OFPortFeatures.PF_FIBER) ? FIBER : COPPER; SparseAnnotations annotations = makePortAnnotation(port.getName(), port.getHwAddr().toString()); return new DefaultPortDescription(portNo, false, type, portSpeed(port), annotations); } }
/** * 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 PortDescription buildPortDescription(OFPortStatus status) { OFPortDesc port = status.getDesc(); if (status.getReason() != OFPortReason.DELETE) { return buildPortDescription(port); } else { PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber()); Port.Type type = port.getCurr().contains(OFPortFeatures.PF_FIBER) ? FIBER : COPPER; SparseAnnotations annotations = makePortNameAnnotation(port); return new DefaultPortDescription(portNo, false, type, portSpeed(port), annotations); } }
public static Set<OFPortFeatures> readFrom(ChannelBuffer bb) throws OFParseError { try { return ofWireValue(bb.readInt()); } catch (IllegalArgumentException e) { throw new OFParseError(e); } }
public static Set<OFPortFeatures> ofWireValue(int val) { EnumSet<OFPortFeatures> set = EnumSet.noneOf(OFPortFeatures.class); if((val & PF_10MB_HD_VAL) != 0) set.add(OFPortFeatures.PF_10MB_HD); if((val & PF_10MB_FD_VAL) != 0) set.add(OFPortFeatures.PF_10MB_FD); if((val & PF_100MB_HD_VAL) != 0) set.add(OFPortFeatures.PF_100MB_HD); if((val & PF_100MB_FD_VAL) != 0) set.add(OFPortFeatures.PF_100MB_FD); if((val & PF_1GB_HD_VAL) != 0) set.add(OFPortFeatures.PF_1GB_HD); if((val & PF_1GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_1GB_FD); if((val & PF_10GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_10GB_FD); if((val & PF_COPPER_VAL) != 0) set.add(OFPortFeatures.PF_COPPER); if((val & PF_FIBER_VAL) != 0) set.add(OFPortFeatures.PF_FIBER); if((val & PF_AUTONEG_VAL) != 0) set.add(OFPortFeatures.PF_AUTONEG); if((val & PF_PAUSE_VAL) != 0) set.add(OFPortFeatures.PF_PAUSE); if((val & PF_PAUSE_ASYM_VAL) != 0) set.add(OFPortFeatures.PF_PAUSE_ASYM); if((val & PF_40GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_40GB_FD); if((val & PF_100GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_100GB_FD); if((val & PF_1TB_FD_VAL) != 0) set.add(OFPortFeatures.PF_1TB_FD); if((val & PF_OTHER_VAL) != 0) set.add(OFPortFeatures.PF_OTHER); return Collections.unmodifiableSet(set); }
public static Set<OFPortFeatures> ofWireValue(int val) { EnumSet<OFPortFeatures> set = EnumSet.noneOf(OFPortFeatures.class); if((val & PF_10MB_HD_VAL) != 0) set.add(OFPortFeatures.PF_10MB_HD); if((val & PF_10MB_FD_VAL) != 0) set.add(OFPortFeatures.PF_10MB_FD); if((val & PF_100MB_HD_VAL) != 0) set.add(OFPortFeatures.PF_100MB_HD); if((val & PF_100MB_FD_VAL) != 0) set.add(OFPortFeatures.PF_100MB_FD); if((val & PF_1GB_HD_VAL) != 0) set.add(OFPortFeatures.PF_1GB_HD); if((val & PF_1GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_1GB_FD); if((val & PF_10GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_10GB_FD); if((val & PF_COPPER_VAL) != 0) set.add(OFPortFeatures.PF_COPPER); if((val & PF_FIBER_VAL) != 0) set.add(OFPortFeatures.PF_FIBER); if((val & PF_AUTONEG_VAL) != 0) set.add(OFPortFeatures.PF_AUTONEG); if((val & PF_PAUSE_VAL) != 0) set.add(OFPortFeatures.PF_PAUSE); if((val & PF_PAUSE_ASYM_VAL) != 0) set.add(OFPortFeatures.PF_PAUSE_ASYM); if((val & PF_40GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_40GB_FD); if((val & PF_100GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_100GB_FD); if((val & PF_1TB_FD_VAL) != 0) set.add(OFPortFeatures.PF_1TB_FD); if((val & PF_OTHER_VAL) != 0) set.add(OFPortFeatures.PF_OTHER); if((val & PF_BSN_BREAKOUT_CAPABLE_VAL) != 0) set.add(OFPortFeatures.PF_BSN_BREAKOUT_CAPABLE); return Collections.unmodifiableSet(set); }
public static Set<OFPortFeatures> ofWireValue(int val) { EnumSet<OFPortFeatures> set = EnumSet.noneOf(OFPortFeatures.class); if((val & PF_10MB_HD_VAL) != 0) set.add(OFPortFeatures.PF_10MB_HD); if((val & PF_10MB_FD_VAL) != 0) set.add(OFPortFeatures.PF_10MB_FD); if((val & PF_100MB_HD_VAL) != 0) set.add(OFPortFeatures.PF_100MB_HD); if((val & PF_100MB_FD_VAL) != 0) set.add(OFPortFeatures.PF_100MB_FD); if((val & PF_1GB_HD_VAL) != 0) set.add(OFPortFeatures.PF_1GB_HD); if((val & PF_1GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_1GB_FD); if((val & PF_10GB_FD_VAL) != 0) set.add(OFPortFeatures.PF_10GB_FD); if((val & PF_COPPER_VAL) != 0) set.add(OFPortFeatures.PF_COPPER); if((val & PF_FIBER_VAL) != 0) set.add(OFPortFeatures.PF_FIBER); if((val & PF_AUTONEG_VAL) != 0) set.add(OFPortFeatures.PF_AUTONEG); if((val & PF_PAUSE_VAL) != 0) set.add(OFPortFeatures.PF_PAUSE); if((val & PF_PAUSE_ASYM_VAL) != 0) set.add(OFPortFeatures.PF_PAUSE_ASYM); return Collections.unmodifiableSet(set); }
public static Set<OFPortFeatures> readFrom(ByteBuf bb) throws OFParseError { try { return ofWireValue(bb.readInt()); } catch (IllegalArgumentException e) { throw new OFParseError(e); } }
public void serializePorts(Collection<OFPortDesc> portDecs, JsonGenerator jGen) throws IOException, JsonProcessingException { if ( portDecs == null) jGen.writeStringField("ports","null"); else{ jGen.writeFieldName("ports"); jGen.writeStartArray(); for(OFPortDesc port : portDecs){ jGen.writeStartObject(); jGen.writeNumberField("PortNo",port.getPortNo().getPortNumber()); jGen.writeStringField("HwAddr",port.getHwAddr().toString()); jGen.writeStringField("Name",port.getName()); if ( port.getVersion() != OFVersion.OF_10){ jGen.writeNumberField("CurrSpeed",port.getCurrSpeed()); jGen.writeNumberField("MaxSpeed",port.getMaxSpeed()); } jGen.writeFieldName("config"); jGen.writeStartArray(); for(OFPortConfig config : port.getConfig()){ jGen.writeString(config.toString()); } jGen.writeEndArray(); jGen.writeFieldName("state"); jGen.writeStartArray(); for(OFPortState state : port.getState()){ jGen.writeString(state.toString()); } jGen.writeEndArray(); jGen.writeFieldName("curr"); jGen.writeStartArray(); for(OFPortFeatures curr : port.getCurr()){ jGen.writeString(curr.toString()); } jGen.writeEndArray(); jGen.writeFieldName("advertised"); jGen.writeStartArray(); for(OFPortFeatures advertised : port.getAdvertised()){ jGen.writeString(advertised.toString()); } jGen.writeEndArray(); jGen.writeFieldName("supported"); jGen.writeStartArray(); for(OFPortFeatures support : port.getSupported()){ jGen.writeString(support.toString()); } jGen.writeEndArray(); jGen.writeFieldName("peer"); jGen.writeStartArray(); for(OFPortFeatures peer : port.getPeer()){ jGen.writeString(peer.toString()); } jGen.writeEndArray(); jGen.writeEndObject(); } jGen.writeEndArray(); } }
@Test public void testSwitchAdded() throws Exception { LinkDiscoveryManager linkDiscovery = getLinkDiscoveryManager(); linkDiscovery.switchService = getMockSwitchService(); Capture<OFMessage> wc; Set<OFPort> qPorts; OFPortDesc ofpp = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc() .setName("eth4242") .setPortNo(OFPort.of(4242)) .setHwAddr(MacAddress.of("5c:16:c7:00:00:01")) .setCurr(new HashSet<OFPortFeatures>()) // random .build(); IOFSwitch sw1 = createMockSwitch(1L); // Set switch map in floodlightProvider. Map<DatapathId, IOFSwitch> switches = new HashMap<DatapathId, IOFSwitch>(); switches.put(DatapathId.of(1L), sw1); getMockSwitchService().setSwitches(switches); // Create the set of ports List<OFPort> ports = new ArrayList<OFPort>(); for(short p=1; p<=20; ++p) { ports.add(OFPort.of(p)); } // Set the captures. wc = new Capture<OFMessage>(CaptureType.ALL); // Expect switch to return those ports. expect(sw1.getEnabledPortNumbers()).andReturn(ports).anyTimes(); expect(sw1.getPort(OFPort.of(EasyMock.anyInt()))).andReturn(ofpp).anyTimes(); expect(sw1.getOFFactory()).andReturn(OFFactories.getFactory(OFVersion.OF_13)).anyTimes(); expect(sw1.getLatency()).andReturn(U64.ZERO).anyTimes(); expect(sw1.write(capture(wc))).andReturn(true).anyTimes(); replay(sw1); linkDiscovery.switchActivated(sw1.getId()); verify(sw1); qPorts = linkDiscovery.getQuarantinedPorts(sw1.getId()); assertNotNull(qPorts); assertFalse(qPorts.isEmpty()); Thread.sleep(100); qPorts = linkDiscovery.getQuarantinedPorts(sw1.getId()); assertNotNull(qPorts); assertFalse(qPorts.isEmpty()); Thread.sleep(200); qPorts = linkDiscovery.getQuarantinedPorts(sw1.getId()); assertNotNull(qPorts); assertTrue(qPorts.isEmpty()); // Ensure that through every switch port, an LLDP and BDDP // packet was sent out. Total # of packets = # of ports * 2. assertTrue(wc.hasCaptured()); List<OFMessage> msgList = wc.getValues(); assertTrue(msgList.size() == ports.size() * 2); }
/** * Test that notifyPortChanged() results in an IOFSwitchListener * update and that its arguments are passed through to * the listener call */ @Test public void testNotifySwitchPortChanged() throws Exception { DatapathId dpid = DatapathId.of(42); OFPortDesc p1 = factory.buildPortDesc() .setName("Port1") .setPortNo(OFPort.of(1)) .build(); OFFeaturesReply fr1 = factory.buildFeaturesReply() .setXid(0) .setDatapathId(dpid) .setPorts(ImmutableList.<OFPortDesc>of(p1)) .build(); OFPortDesc p2 = factory.buildPortDesc() .setName("Port1") .setPortNo(OFPort.of(1)) .setAdvertised(ImmutableSet.<OFPortFeatures>of(OFPortFeatures.PF_100MB_FD)) .build(); OFFeaturesReply fr2 = factory.buildFeaturesReply() .setXid(0) .setDatapathId(dpid) .setPorts(ImmutableList.<OFPortDesc>of(p2)) .build(); SwitchDescription desc = createSwitchDescription(); // activate switch IOFSwitchBackend sw = doActivateNewSwitch(dpid, desc, fr1); IOFSwitchListener listener = createMock(IOFSwitchListener.class); switchManager.addOFSwitchListener(listener); // setup switch with the new, second features reply (and thus ports) setupSwitchForAddSwitch(sw, dpid, desc, fr2); listener.switchPortChanged(dpid, p2, PortChangeType.OTHER_UPDATE); expectLastCall().once(); replay(listener); replay(sw); switchManager.notifyPortChanged(sw, p2, PortChangeType.OTHER_UPDATE); controller.processUpdateQueueForTesting(); verify(listener); verify(sw); }
public void setUpPorts() { OFPortDesc.Builder pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); // p1a is disabled pdb.setName("port1"); pdb.setPortNo(OFPort.of(1)); Set<OFPortState> portState = new HashSet<OFPortState>(); portState.add(OFPortState.LINK_DOWN); pdb.setState(portState); p1a = pdb.build(); assertFalse("Sanity check portEnabled", !p1a.getState().contains(OFPortState.LINK_DOWN)); // p1b is enabled // p1b has different feature from p1a pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); pdb.setName("port1"); pdb.setPortNo(OFPort.of(1)); Set<OFPortFeatures> portFeatures = new HashSet<OFPortFeatures>(); portFeatures.add(OFPortFeatures.PF_1GB_FD); pdb.setCurr(portFeatures); p1b = pdb.build(); assertTrue("Sanity check portEnabled", !p1b.getState().contains(OFPortState.LIVE)); // p2 is disabled // p2 has mixed case pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); portState = new HashSet<OFPortState>(); Set<OFPortConfig> portConfig = new HashSet<OFPortConfig>(); portFeatures = new HashSet<OFPortFeatures>(); pdb.setName("Port2"); pdb.setPortNo(OFPort.of(2)); portConfig.add(OFPortConfig.PORT_DOWN); pdb.setConfig(portConfig); p2a = pdb.build(); // p2b only differs in PortFeatures pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); portState = new HashSet<OFPortState>(); portConfig = new HashSet<OFPortConfig>(); portFeatures = new HashSet<OFPortFeatures>(); pdb.setName("Port2"); pdb.setPortNo(OFPort.of(2)); portConfig.add(OFPortConfig.PORT_DOWN); pdb.setConfig(portConfig); portFeatures.add(OFPortFeatures.PF_100MB_HD); pdb.setCurr(portFeatures); p2b = pdb.build(); assertFalse("Sanity check portEnabled", p2a.getState().contains(OFPortState.LIVE)); // p3 is enabled // p3 has mixed case pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); pdb.setName("porT3"); pdb.setPortNo(OFPort.of(3)); p3 = pdb.build(); assertTrue("Sanity check portEnabled", !p3.getState().contains(OFPortState.LINK_DOWN)); }
@Test public void testSwitchAdded() throws Exception { LinkDiscoveryManager linkDiscovery = getLinkDiscoveryManager(); linkDiscovery.switchService = getMockSwitchService(); Capture<OFMessage> wc; Set<OFPort> qPorts; OFPortDesc ofpp = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc() .setName("eth4242") .setPortNo(OFPort.of(4242)) .setHwAddr(MacAddress.of("5c:16:c7:00:00:01")) .setCurr(new HashSet<OFPortFeatures>()) // random .build(); IOFSwitch sw1 = createMockSwitch(1L); // Set switch map in floodlightProvider. Map<DatapathId, IOFSwitch> switches = new HashMap<DatapathId, IOFSwitch>(); switches.put(DatapathId.of(1L), sw1); getMockSwitchService().setSwitches(switches); // Create the set of ports List<OFPort> ports = new ArrayList<OFPort>(); for(short p=1; p<=20; ++p) { ports.add(OFPort.of(p)); } // Set the captures. wc = new Capture<OFMessage>(CaptureType.ALL); // Expect switch to return those ports. expect(sw1.getEnabledPortNumbers()).andReturn(ports).anyTimes(); expect(sw1.getPort(OFPort.of(EasyMock.anyInt()))).andReturn(ofpp).anyTimes(); expect(sw1.getOFFactory()).andReturn(OFFactories.getFactory(OFVersion.OF_13)).anyTimes(); sw1.write(capture(wc)); expectLastCall().anyTimes(); replay(sw1); linkDiscovery.switchActivated(sw1.getId()); verify(sw1); qPorts = linkDiscovery.getQuarantinedPorts(sw1.getId()); assertNotNull(qPorts); assertFalse(qPorts.isEmpty()); Thread.sleep(100); qPorts = linkDiscovery.getQuarantinedPorts(sw1.getId()); assertNotNull(qPorts); assertFalse(qPorts.isEmpty()); Thread.sleep(200); qPorts = linkDiscovery.getQuarantinedPorts(sw1.getId()); assertNotNull(qPorts); assertTrue(qPorts.isEmpty()); // Ensure that through every switch port, an LLDP and BDDP // packet was sent out. Total # of packets = # of ports * 2. assertTrue(wc.hasCaptured()); List<OFMessage> msgList = wc.getValues(); assertTrue(msgList.size() == ports.size() * 2); }
@Before public void setUpPorts() { OFPortDesc.Builder pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); // p1a is disabled pdb.setName("port1"); pdb.setPortNo(OFPort.of(1)); Set<OFPortState> portState = new HashSet<OFPortState>(); portState.add(OFPortState.LINK_DOWN); pdb.setState(portState); p1a = pdb.build(); assertFalse("Sanity check portEnabled", !p1a.getState().contains(OFPortState.LINK_DOWN)); // p1b is enabled // p1b has different feature from p1a pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); pdb.setName("port1"); pdb.setPortNo(OFPort.of(1)); Set<OFPortFeatures> portFeatures = new HashSet<OFPortFeatures>(); portFeatures.add(OFPortFeatures.PF_1GB_FD); pdb.setCurr(portFeatures); p1b = pdb.build(); assertTrue("Sanity check portEnabled", !p1b.getState().contains(OFPortState.LIVE)); // p2 is disabled // p2 has mixed case pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); portState = new HashSet<OFPortState>(); Set<OFPortConfig> portConfig = new HashSet<OFPortConfig>(); portFeatures = new HashSet<OFPortFeatures>(); pdb.setName("Port2"); pdb.setPortNo(OFPort.of(2)); portConfig.add(OFPortConfig.PORT_DOWN); pdb.setConfig(portConfig); p2a = pdb.build(); // p2b only differs in PortFeatures pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); portState = new HashSet<OFPortState>(); portConfig = new HashSet<OFPortConfig>(); portFeatures = new HashSet<OFPortFeatures>(); pdb.setName("Port2"); pdb.setPortNo(OFPort.of(2)); portConfig.add(OFPortConfig.PORT_DOWN); pdb.setConfig(portConfig); portFeatures.add(OFPortFeatures.PF_100MB_HD); pdb.setCurr(portFeatures); p2b = pdb.build(); assertFalse("Sanity check portEnabled", p2a.getState().contains(OFPortState.LIVE)); // p3 is enabled // p3 has mixed case pdb = OFFactories.getFactory(OFVersion.OF_13).buildPortDesc(); pdb.setName("porT3"); pdb.setPortNo(OFPort.of(3)); p3 = pdb.build(); assertTrue("Sanity check portEnabled", !p3.getState().contains(OFPortState.LINK_DOWN)); }