/* ** This file is part of Filius, a network construction and simulation software. ** ** Originally created at the University of Siegen, Institute "Didactics of ** Informatics and E-Learning" by a students' project group: ** members (2006-2007): ** André Asschoff, Johannes Bade, Carsten Dittich, Thomas Gerding, ** Nadja Haßler, Ernst Johannes Klebert, Michell Weyer ** supervisors: ** Stefan Freischlad (maintainer until 2009), Peer Stechert ** Project is maintained since 2010 by Christian Eibl <filius@c.fameibl.de> ** and Stefan Freischlad ** Filius is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 2 of the License, or ** (at your option) version 3. ** ** Filius is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See the GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Filius. If not, see <http://www.gnu.org/licenses/>. */ package filius.hardware; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import filius.Main; import filius.rahmenprogramm.Information; public class NetzwerkInterface implements Serializable{ private static final long serialVersionUID = 1L; private String mac; private String ip; private String subnetzMaske; private String gateway; private String dns; private Port anschluss; public NetzwerkInterface() { Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (NetzwerkInterface), constr: NetzwerkInterface()"); setMac(Information.getInformation().holeFreieMACAdresse()); // set initial IP address to the same value for all new devices // QUESTION: Is this actually wanted for educational reasons? // Or is it rather annoying to be enforced to change this address for each device? setIp("192.168.0.10"); setSubnetzMaske("255.255.255.0"); setGateway(""); setDns(""); anschluss = new Port(this); this.initPersistenceAttributes(); } /** This method is used to mark the MAC address as transient property in order to avoid * use of the same MAC address if the same project is opened twice. */ private void initPersistenceAttributes() { BeanInfo info; try { info = Introspector.getBeanInfo(NetzwerkInterface.class); PropertyDescriptor[] propertyDescriptors = info.getPropertyDescriptors(); for (PropertyDescriptor descriptor : propertyDescriptors) { if (descriptor.getName().equals("mac")) { descriptor.setValue("transient", Boolean.TRUE); break; } } } catch (IntrospectionException e) { e.printStackTrace(); } } public Port getPort() { return anschluss; } public void setPort (Port port) { this.anschluss = port; } /** IP-Adresse des DNS-Servers, der zur Aufloesung von Domainnamen * verwendet wird. * * NOTE: die IP-Adresse des DNS-Servers ist kein Parameter des * Netzwerk-Interfaces, wird aber aus Gruenden der Kompatibilitaet hier * verwaltet. Jedes Netzwerk-Interface der gleichen Komponente sollte * hier den gleichen Wert haben! */ public String getDns() { return dns; } /** IP-Adresse des DNS-Servers, der zur Aufloesung von Domainnamen * verwendet wird. * * @deprecated die IP-Adresse des DNS-Servers ist kein Parameter des * Netzwerk-Interfaces, wird aber aus Gruenden der Kompatibilitaet hier * verwaltet. Jedes Netzwerk-Interface der gleichen Komponente sollte * hier den gleichen Wert haben! */ public void setDns(String dns) { this.dns = dns; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getMac() { return mac.toUpperCase(); } public void setMac(String mac) { if (mac != null) { Information.getInformation().macHinzufuegen(mac); this.mac = mac; } } public String getSubnetzMaske() { return subnetzMaske; } public void setSubnetzMaske(String subnetzMaske) { this.subnetzMaske = subnetzMaske; } /** IP-Adresse des Standard-Gateways. Dorthin werden alle Pakete gesendet, * fuer dessen Zieladresse kein anderer Eintrag in der Weiterleitungstabelle * vorhanden ist. * * NOTE: die IP-Adresse des Standard-Gateways ist kein Parameter des * Netzwerk-Interfaces, wird aber aus Gruenden der Kompatibilitaet hier * verwaltet. Jedes Netzwerk-Interface der gleichen Komponente sollte hier * den gleichen Wert haben! */ public String getGateway() { return gateway; } /** IP-Adresse des Standard-Gateways. Dorthin werden alle Pakete gesendet, * fuer dessen Zieladresse kein anderer Eintrag in der Weiterleitungstabelle * vorhanden ist. * * @deprecated die IP-Adresse des Standard-Gateways ist kein Parameter des * Netzwerk-Interfaces, wird aber aus Gruenden der Kompatibilitaet hier * verwaltet. Jedes Netzwerk-Interface der gleichen Komponente sollte hier * den gleichen Wert haben! */ public void setGateway(String gateway) { this.gateway = gateway; } }