| package net.floodlightcontroller.learningswitch; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Map.Entry; |
| |
| import net.floodlightcontroller.core.IFloodlightProviderService; |
| import net.floodlightcontroller.core.IOFSwitch; |
| import net.floodlightcontroller.core.types.MacVlanPair; |
| |
| import org.openflow.util.HexString; |
| import org.restlet.data.Status; |
| import org.restlet.resource.Get; |
| import org.restlet.resource.ServerResource; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| public class LearningSwitchTable extends ServerResource { |
| protected static Logger log = LoggerFactory.getLogger(LearningSwitchTable.class); |
| |
| protected Map<String, Object> formatTableEntry(MacVlanPair key, short port) { |
| Map<String, Object> entry = new HashMap<String, Object>(); |
| entry.put("mac", HexString.toHexString(key.mac)); |
| entry.put("vlan", key.vlan); |
| entry.put("port", port); |
| return entry; |
| } |
| |
| protected List<Map<String, Object>> getOneSwitchTable(Map<MacVlanPair, Short> switchMap) { |
| List<Map<String, Object>> switchTable = new ArrayList<Map<String, Object>>(); |
| for (Entry<MacVlanPair, Short> entry : switchMap.entrySet()) { |
| switchTable.add(formatTableEntry(entry.getKey(), entry.getValue())); |
| } |
| return switchTable; |
| } |
| |
| @Get("json") |
| public Map<String, List<Map<String, Object>>> getSwitchTableJson() { |
| ILearningSwitchService lsp = |
| (ILearningSwitchService)getContext().getAttributes(). |
| get(ILearningSwitchService.class.getCanonicalName()); |
| |
| Map<IOFSwitch, Map<MacVlanPair,Short>> table = lsp.getTable(); |
| Map<String, List<Map<String, Object>>> allSwitchTableJson = new HashMap<String, List<Map<String, Object>>>(); |
| |
| String switchId = (String) getRequestAttributes().get("switch"); |
| if (switchId.toLowerCase().equals("all")) { |
| for (IOFSwitch sw : table.keySet()) { |
| allSwitchTableJson.put(HexString.toHexString(sw.getId()), getOneSwitchTable(table.get(sw))); |
| } |
| } else { |
| try { |
| IFloodlightProviderService floodlightProvider = |
| (IFloodlightProviderService)getContext().getAttributes(). |
| get(IFloodlightProviderService.class.getCanonicalName()); |
| long dpid = HexString.toLong(switchId); |
| IOFSwitch sw = floodlightProvider.getSwitches().get(dpid); |
| allSwitchTableJson.put(HexString.toHexString(sw.getId()), getOneSwitchTable(table.get(sw))); |
| } catch (NumberFormatException e) { |
| log.error("Could not decode switch ID = " + switchId); |
| setStatus(Status.CLIENT_ERROR_BAD_REQUEST); |
| } |
| } |
| |
| return allSwitchTableJson; |
| } |
| } |