[Javanetsim-cvs] javaNetSim/core CommandProcessor.java, 1.27, 1.28 MultilayerSwitch.java, 1.1, 1.2
Status: Beta
Brought to you by:
darkkey
From: QweR <qw...@us...> - 2008-10-19 21:40:27
|
Update of /cvsroot/javanetsim/javaNetSim/core In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv17182/core Modified Files: CommandProcessor.java MultilayerSwitch.java Simulation.java Log Message: vlan command was added Index: CommandProcessor.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/CommandProcessor.java,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** CommandProcessor.java 19 Oct 2008 17:43:22 -0000 1.27 --- CommandProcessor.java 19 Oct 2008 21:40:19 -0000 1.28 *************** *** 29,32 **** --- 29,33 ---- import java.util.Hashtable; import java.util.Iterator; + import java.util.TreeSet; import java.util.Vector; import java.util.regex.Matcher; *************** *** 55,58 **** --- 56,60 ---- private copy_startup_running_CommandClass copy_startup_running_Command = new copy_startup_running_CommandClass(); private erase_startup_config_CommandClass erase_startup_config_Command = new erase_startup_config_CommandClass(); + private erase_vlan_CommandClass erase_vlan_Command = new erase_vlan_CommandClass(); private help_CommandClass help_Command = new help_CommandClass(); private hostname_CommandClass hostname_Command = new hostname_CommandClass(); *************** *** 77,80 **** --- 79,85 ---- private interface__ssid_CommandClass interface__ssid_Command = new interface__ssid_CommandClass(); private interface__station_role_CommandClass interface__station_role_Command = new interface__station_role_CommandClass(); + private interface__switchport_access_vlan_CommandClass interface__switchport_access_vlan_Command = new interface__switchport_access_vlan_CommandClass(); + private interface__switchport_mode_access_CommandClass interface__switchport_mode_access_Command = new interface__switchport_mode_access_CommandClass(); + private interface__switchport_mode_trunk_CommandClass interface__switchport_mode_trunk_Command = new interface__switchport_mode_trunk_CommandClass(); private ip_access_list_standart_CommandClass ip_access_list_standart_Command = new ip_access_list_standart_CommandClass(); private ip_access_list_extended_CommandClass ip_access_list_extended_Command = new ip_access_list_extended_CommandClass(); *************** *** 124,127 **** --- 129,133 ---- private show_udp_statistics_CommandClass show_udp_statistics_Command = new show_udp_statistics_CommandClass(); private show_version_CommandClass show_version_Command = new show_version_CommandClass(); + private show_vlan_CommandClass show_vlan_Command = new show_vlan_CommandClass(); private snmp_server_community_CommandClass snmp_server_community_Command = new snmp_server_community_CommandClass(); private snmp_server_port_CommandClass snmp_server_port_Command = new snmp_server_port_CommandClass(); *************** *** 129,132 **** --- 135,139 ---- private telnet_server_CommandClass telnet_server_Command = new telnet_server_CommandClass(); private username_CommandClass username_Command = new username_CommandClass(); + private vlan_CommandClass vlan_Command = new vlan_CommandClass(); private write_memory_CommandClass write_memory_Command = new write_memory_CommandClass(); private write_terminal_CommandClass write_terminal_Command = new write_terminal_CommandClass(); *************** *** 150,153 **** --- 157,161 ---- commands.addDescription("erase","Erase a filesystem"); commands.add("erase startup-config", erase_startup_config_Command, "Erase a startup-config"); + commands.add("erase vlan.dat", erase_vlan_Command, "Erase a vlan configuration file"); commands.add("help", help_Command, "Description of the interactive help system"); commands.add("hostname", hostname_Command, "Set system's name"); *************** *** 178,182 **** commands.add("interface * ssid", interface__ssid_Command, "Set SSID"); commands.add("interface * station-role", interface__station_role_Command, "Specify station role"); ! commands.addDescription("ip","Global IP configuration subcommands"); commands.addDescription("ip access-list","Named access-list; Add an access list entry"); --- 186,195 ---- commands.add("interface * ssid", interface__ssid_Command, "Set SSID"); commands.add("interface * station-role", interface__station_role_Command, "Specify station role"); ! commands.addDescription("interface * switchport access","Configure a port access"); ! commands.add("interface * switchport access vlan", interface__switchport_access_vlan_Command, "Configure a port as a static-access port"); ! commands.addDescription("interface * switchport mode","Configure the VLAN membership mode of a port"); ! commands.add("interface * switchport mode access", interface__switchport_mode_access_Command, "Set the port to access mode"); ! commands.add("interface * switchport mode trunk", interface__switchport_mode_trunk_Command, "Set the port to trunk unconditionally"); ! commands.addDescription("ip","Global IP configuration subcommands"); commands.addDescription("ip access-list","Named access-list; Add an access list entry"); *************** *** 185,189 **** commands.addDescription("ip dhcp","Configure DHCP server"); commands.addDescription("ip dhcp pool","Configure DHCP address pools"); ! commands.addDescription("ip dhcp pool *","Configure DHCP address pools"); commands.add("ip dhcp pool * hardware-address", ip_dhcp_pool__hardware_address_Command, "Client hardware address"); commands.add("ip dhcp pool * network", ip_dhcp_pool__network_Command, "Network number and mask"); --- 198,202 ---- commands.addDescription("ip dhcp","Configure DHCP server"); commands.addDescription("ip dhcp pool","Configure DHCP address pools"); ! commands.addDescription("ip dhcp pool *","Pool name"); commands.add("ip dhcp pool * hardware-address", ip_dhcp_pool__hardware_address_Command, "Client hardware address"); commands.add("ip dhcp pool * network", ip_dhcp_pool__network_Command, "Network number and mask"); *************** *** 247,250 **** --- 260,264 ---- commands.add("show udp statistics", show_udp_statistics_Command, "UDP statistics"); commands.add("show version", show_version_Command, "System hardware and software status"); + commands.add("show vlan", show_vlan_Command, "Display the parameters for all configured VLANs"); commands.addDescription("snmp-server","Modify SNMP engine parameters"); *************** *** 255,258 **** --- 269,273 ---- commands.add("no telnet-server", telnet_server_Command, "Disable TELNET server"); commands.add("username", username_Command, "Add User"); + commands.add("vlan", vlan_Command, "Create VLAN"); commands.addDescription("write","Write running configuration to memory or terminal"); commands.add("write memory", write_memory_Command, "Write to memory"); *************** *** 421,424 **** --- 436,461 ---- } }; + class erase_vlan_CommandClass extends CommandInterface{ + public erase_vlan_CommandClass(){ + modes = new Modes(CommandInterface.STD_CONF_MODE, CommandInterface.NETWORK_LAYER, CommandInterface.CALL_ONLY); + call_params = "<cr>"; + } + public String call(Vector<String> params){ + String out = ""; + if(device instanceof MultilayerSwitch){ + MultilayerSwitch msdev = (MultilayerSwitch) device; + if(params.size()==0){ + msdev.clearVlan(); + } + else{ + out += "error: invalid parameters\n"; + } + } + else{ + out += "This instruction not supported by device\n"; + } + return out; + } + }; class help_CommandClass extends CommandInterface{ public help_CommandClass(){ *************** *** 1232,1242 **** out += "Invalid interface name\n"; } catch (CommunicationException ex) { //ex.printStackTrace(); } catch (LowLinkException ex) { //ex.printStackTrace(); } catch (TransportLayerException ex) { //ex.printStackTrace(); } catch (InvalidNetworkLayerDeviceException ex) { ! out += "internal error: Invalid network layer device\n"; //ex.printStackTrace(); } --- 1269,1282 ---- out += "Invalid interface name\n"; } catch (CommunicationException ex) { + out += "communication error\n"; //ex.printStackTrace(); } catch (LowLinkException ex) { + out += "low link error\n"; //ex.printStackTrace(); } catch (TransportLayerException ex) { + out += "transport error\n"; //ex.printStackTrace(); } catch (InvalidNetworkLayerDeviceException ex) { ! out += "network error\n"; //ex.printStackTrace(); } *************** *** 1484,1487 **** --- 1524,1644 ---- } }; + class interface__switchport_access_vlan_CommandClass extends CommandInterface{ + public interface__switchport_access_vlan_CommandClass(){ + modes = new Modes(CommandInterface.STD_CONF_MODE, CommandInterface.NETWORK_LAYER, CommandInterface.NO_CALL); + call_params = "<vlanid>"; + no_call_params = "<cr>"; + } + public String call(Vector<String> params){ + return parse(params, true); + } + public String no_call(Vector<String> params){ + return parse(params, false); + } + private String parse(Vector<String> params, boolean add){ + String out = ""; + if(device instanceof MultilayerSwitch){ + MultilayerSwitch msdev = (MultilayerSwitch) device; + if((params.size()==2 && add) || (params.size()==1 && !add)){ + try{ + NetworkInterface ni = device.getNetworkInterface(params.get(0)); + if(ni instanceof EthernetNetworkInterface){ + EthernetNetworkInterface eni = (EthernetNetworkInterface) ni; + if(add){ + try{ + int vlanid = Integer.parseInt(params.get(1)); + eni.vlan = vlanid; + } + catch(NumberFormatException e){ + out += "error: invalid vlan number\n"; + } + } + else{ + eni.vlan = 1; + } + } + else{ + out += "error: only ethernet interfaces is allowed\n"; + } + } catch (InvalidNetworkInterfaceNameException ex) { + out += "error: invalid inferface\n"; + } + } + else{ + out += "error: invalid parameters\n"; + } + } + else{ + out += "This instruction not supported by device\n"; + } + return out; + } + }; + class interface__switchport_mode_access_CommandClass extends CommandInterface{ + public interface__switchport_mode_access_CommandClass(){ + modes = new Modes(CommandInterface.STD_CONF_MODE, CommandInterface.NETWORK_LAYER, CommandInterface.CALL_ONLY); + call_params = "<cr>"; + } + public String call(Vector<String> params){ + String out = ""; + if(device instanceof MultilayerSwitch){ + MultilayerSwitch msdev = (MultilayerSwitch) device; + if(params.size()==1){ + try{ + NetworkInterface ni = device.getNetworkInterface(params.get(0)); + if(ni instanceof EthernetNetworkInterface){ + EthernetNetworkInterface eni = (EthernetNetworkInterface) ni; + eni.mode = EthernetNetworkInterface.MODE_ACCESS; + } + else{ + out += "error: only ethernet interfaces is allowed\n"; + } + } catch (InvalidNetworkInterfaceNameException ex) { + out += "error: invalid inferface\n"; + } + } + else{ + out += "error: invalid parameters\n"; + } + } + else{ + out += "This instruction not supported by device\n"; + } + return out; + } + }; + class interface__switchport_mode_trunk_CommandClass extends CommandInterface{ + public interface__switchport_mode_trunk_CommandClass(){ + modes = new Modes(CommandInterface.STD_CONF_MODE, CommandInterface.NETWORK_LAYER, CommandInterface.CALL_ONLY); + call_params = "<cr>"; + } + public String call(Vector<String> params){ + String out = ""; + if(device instanceof MultilayerSwitch){ + MultilayerSwitch msdev = (MultilayerSwitch) device; + if(params.size()==1){ + try{ + NetworkInterface ni = device.getNetworkInterface(params.get(0)); + if(ni instanceof EthernetNetworkInterface){ + EthernetNetworkInterface eni = (EthernetNetworkInterface) ni; + eni.mode = EthernetNetworkInterface.MODE_TRUNK; + } + else{ + out += "error: only ethernet interfaces is allowed\n"; + } + } catch (InvalidNetworkInterfaceNameException ex) { + out += "error: invalid inferface\n"; + } + } + else{ + out += "error: invalid parameters\n"; + } + } + else{ + out += "This instruction not supported by device\n"; + } + return out; + } + }; class ip_access_list_standart_CommandClass extends CommandInterface{ public ip_access_list_standart_CommandClass(){ *************** *** 1548,1552 **** } //device.getConfig().add("ip access-list "+iacl+" "+permit_deny+" "+hosts); ! if((IPV4Address.validateDecIP(ip) || ip.compareTo("0.0.0.0")==0) && IPV4Address.validateDecSubnetMask(mask, ip)){ if(add){ device.getACL().addACL(iacl, iline, action, ip, mask, log); --- 1705,1709 ---- } //device.getConfig().add("ip access-list "+iacl+" "+permit_deny+" "+hosts); ! if((IPV4Address.validateDecIP(ip) || ip.compareTo("0.0.0.0")==0) && IPV4Address.validateDecSubnetMask(mask)){ if(add){ device.getACL().addACL(iacl, iline, action, ip, mask, log); *************** *** 1707,1712 **** if(port >= 0){ ! if((IPV4Address.validateDecIP(ip1) || ip1.compareTo("0.0.0.0")==0) && IPV4Address.validateDecSubnetMask(mask1, ip1) && ! (IPV4Address.validateDecIP(ip2) || ip2.compareTo("0.0.0.0")==0) && IPV4Address.validateDecSubnetMask(mask2, ip2)){ if(port==0 || (protocol == AccessListEngine.access_list.TCP || protocol == AccessListEngine.access_list.UDP)){ if(add){ --- 1864,1869 ---- if(port >= 0){ ! if((IPV4Address.validateDecIP(ip1) || ip1.compareTo("0.0.0.0")==0) && IPV4Address.validateDecSubnetMask(mask1) && ! (IPV4Address.validateDecIP(ip2) || ip2.compareTo("0.0.0.0")==0) && IPV4Address.validateDecSubnetMask(mask2)){ if(port==0 || (protocol == AccessListEngine.access_list.TCP || protocol == AccessListEngine.access_list.UDP)){ if(add){ *************** *** 1835,1839 **** String poolname = params.get(0); String mac = params.get(1); ! if(mac.matches("([0-9A-F]{2}:){5}[0-9A-F]{2}")){ if(!dhcpd.pools.containsKey(poolname)){ dhcpd.pools.put(poolname, dhcpd.new_pool()); --- 1992,1996 ---- String poolname = params.get(0); String mac = params.get(1); ! if(EthernetNetworkInterface.isMacAddress(mac)){ if(!dhcpd.pools.containsKey(poolname)){ dhcpd.pools.put(poolname, dhcpd.new_pool()); *************** *** 1903,1907 **** String ip = params.get(1); String mask = params.get(2); ! if(IPV4Address.validateDecIP(ip) && IPV4Address.validateDecIP(mask)){ if(!dhcpd.pools.containsKey(poolname)){ dhcpd.pools.put(poolname, dhcpd.new_pool()); --- 2060,2064 ---- String ip = params.get(1); String mask = params.get(2); ! if(IPV4Address.validateDecSubnetMask(ip) && IPV4Address.validateDecSubnetMask(mask)){ if(!dhcpd.pools.containsKey(poolname)){ dhcpd.pools.put(poolname, dhcpd.new_pool()); *************** *** 1910,1918 **** pool.IP = ip; pool.Genmask = mask; ! try { ! dhcpd.Close(); ! dhcpd.Listen(); ! } catch (TransportLayerException ex) { ! out += "error: dhcp server has not started to listen"; } } --- 2067,2084 ---- pool.IP = ip; pool.Genmask = mask; ! if(dhcpd.running){ ! try { ! dhcpd.Close(); ! dhcpd.Listen(); ! } catch (TransportLayerException ex) { ! out += "error: dhcp server has not started to listen"; ! } ! } ! else{ ! try { ! dhcpd.Listen(); ! } catch (TransportLayerException ex) { ! out += "error: dhcp server has not started to listen"; ! } } } *************** *** 1943,1949 **** if(dhcpd.pools.containsKey(poolname)){ dhcpd.pools.remove(poolname); ! if(dhcpd.pools.isEmpty()){ try { dhcpd.Close(); } catch (TransportLayerException ex) { out += "error: dhcp server has not started to listen"; --- 2109,2123 ---- if(dhcpd.pools.containsKey(poolname)){ dhcpd.pools.remove(poolname); ! if(dhcpd.running){ try { dhcpd.Close(); + if(!dhcpd.pools.isEmpty()) dhcpd.Listen(); + } catch (TransportLayerException ex) { + out += "error: dhcp server has not started to listen"; + } + } + else{ + try { + if(!dhcpd.pools.isEmpty()) dhcpd.Listen(); } catch (TransportLayerException ex) { out += "error: dhcp server has not started to listen"; *************** *** 3230,3233 **** --- 3404,3413 ---- String mask = device.getSubnetMask((String)ins[i]); out += " Internet address " + (ip==null || ip.equals("")?"Not set":ip) + "/" + (mask==null || mask.equals("")?"Not set":mask) + "\n"; + if(ni instanceof EthernetNetworkInterface){ + EthernetNetworkInterface eni = (EthernetNetworkInterface)ni; + if(eni.vlan > 1){ + out += " VLAN ID: "+eni.vlan+"\n"; + } + } if(ni instanceof WiFiPort){ WiFiPort wfi = (WiFiPort) ni; *************** *** 3616,3619 **** --- 3796,3865 ---- } }; + class show_vlan_CommandClass extends CommandInterface{ + public show_vlan_CommandClass(){ + modes = new Modes(CommandInterface.STD_CONF_MODE, CommandInterface.NETWORK_LAYER, CommandInterface.CALL_ONLY); + call_params = "<cr>"; + } + public String call(Vector<String> params){ + String out = ""; + if(device instanceof MultilayerSwitch){ + MultilayerSwitch msdev = (MultilayerSwitch) device; + if(params.size()==0){ + Hashtable<Integer, Vector<String>> vlanport = new Hashtable<Integer, Vector<String>>(); + TreeSet<Integer> vlans = new TreeSet<Integer>(); + vlans.add(1); + Enumeration<Integer> keys = msdev.getVlans(); + while(keys.hasMoreElements()){ + vlans.add(keys.nextElement()); + } + String[] ints = (String[]) device.getAllInterfaces(); + for(int i=0; i<ints.length; i++){ + try{ + NetworkInterface ni = device.getNetworkInterface(ints[i]); + if(ni instanceof EthernetNetworkInterface){ + EthernetNetworkInterface eni = (EthernetNetworkInterface) ni; + int vlanid = eni.vlan; + if(vlanport.containsKey(vlanid)){ + vlanport.get(vlanid).add(ints[i]); + } + else{ + Vector<String> ports = new Vector<String>(1); + ports.add(ints[i]); + vlanport.put(vlanid, ports); + if(!vlans.contains(vlanid)){ + vlans.add(vlanid); + } + } + } + } catch (InvalidNetworkInterfaceNameException ex) {} + } + Iterator<Integer> vlansi = vlans.iterator(); + while(vlansi.hasNext()){ + int vlanid = vlansi.next(); + String vlanname = msdev.getVlanName(vlanid); + if(vlanname==null) vlanname = "-vlan not exists-"; + String ports = ""; + if(vlanport.containsKey(vlanid)){ + Vector<String> ps = vlanport.get(vlanid); + for(int i=0; i<ps.size(); i++){ + ports += (i==0?"":",")+ps.get(i); + } + } + else{ + ports = "no ports found"; + } + out += vlanid+"\t"+String.format("%25s", vlanname)+"\t"+ports+"\n"; + } + } + else{ + out += "error: invalid parameters\n"; + } + } + else{ + out += "This instruction not supported by device\n"; + } + return out; + } + }; class snmp_server_community_CommandClass extends CommandInterface{ public snmp_server_community_CommandClass(){ *************** *** 3876,3879 **** --- 4122,4174 ---- } }; + + class vlan_CommandClass extends CommandInterface{ + public vlan_CommandClass(){ + modes = new Modes(CommandInterface.STD_CONF_MODE, CommandInterface.NETWORK_LAYER, CommandInterface.NO_CALL); + call_params = "<vlanid> [<name>]"; + no_call_params = "<vlanid> [<name>]"; + } + public String call(Vector<String> params){ + return parse(params, true); + } + public String no_call(Vector<String> params){ + return parse(params, false); + } + private String parse(Vector<String> params, boolean add){ + String out = ""; + if(device instanceof MultilayerSwitch){ + MultilayerSwitch msdev = (MultilayerSwitch) device; + if(params.size()==2 || params.size()==3){ + try{ + int vlanid = Integer.parseInt(params.get(1)); + String name = ""; + if(params.size()==3) name = params.get(2); + if(add){ + msdev.addVlan(vlanid, name); + } + else{ + if(name.equals("")){ + msdev.removeVlan(vlanid); + } + else if(msdev.getVlanName(vlanid).equals(name)){ + msdev.removeVlan(vlanid); + } + } + } + catch(NumberFormatException e){ + out += "error: invalid vlan number\n"; + } + + } + else{ + out += "error: invalid parameters\n"; + } + } + else{ + out += "This instruction not supported by device\n"; + } + return out; + } + }; class write_memory_CommandClass extends CommandInterface{ public write_memory_CommandClass(){ Index: MultilayerSwitch.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/MultilayerSwitch.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** MultilayerSwitch.java 17 Oct 2008 18:59:14 -0000 1.1 --- MultilayerSwitch.java 19 Oct 2008 21:40:19 -0000 1.2 *************** *** 26,38 **** } ! public void addVlan(Integer v, String name){ Vlans.put(v, name); } ! public void removeVlan(Integer v){ Vlans.remove(v); } ! public void setVlanName(Integer v, String name){ Vlans.remove(v); Vlans.put(v, name); --- 26,52 ---- } ! public void addVlan(int v, String name){ Vlans.put(v, name); } ! public void removeVlan(int v){ Vlans.remove(v); } ! public void clearVlan(){ ! Vlans.clear(); ! } ! ! public String getVlanName(int v){ ! if(Vlans.containsKey(v)){ ! return Vlans.get(v); ! } ! else if(v == 1){ ! return "default"; ! } ! return null; ! } ! ! public void setVlanName(int v, String name){ Vlans.remove(v); Vlans.put(v, name); Index: Simulation.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/Simulation.java,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** Simulation.java 6 Oct 2008 13:20:39 -0000 1.32 --- Simulation.java 19 Oct 2008 21:40:19 -0000 1.33 *************** *** 1291,1296 **** * @return */ ! public static boolean validateDecSubnetMask(String inDecIPAddress, String inDecSubnetMask){ ! return IPV4Address.validateDecSubnetMask(inDecSubnetMask,inDecIPAddress); } --- 1291,1296 ---- * @return */ ! public static boolean validateDecSubnetMask(String inDecSubnetMask){ ! return IPV4Address.validateDecSubnetMask(inDecSubnetMask); } |