/** * Tabelle zur Abfrage der Weiterleitungstabelle nach einem passenden Eintrag fuer eine * Ziel-IP-Adresse * * @param zielIP die Ziel-IP-Adresse * @return das Ergebnis als String-Array bestehend aus der IP-Adresse des naechsten Gateways und * der fuer den Versand zu verwendenden Schnittstelle */ public String[] holeWeiterleitungsZiele(String zielIP) { Main.debug.println( "INVOKED (" + this.hashCode() + ") " + getClass() + " (Weiterleitungstabelle), holeWeiterleitungsZiele(" + zielIP + ")"); String[] routeString = null; ListIterator it = holeTabelle().listIterator(); while (it.hasNext() && routeString == null) { String[] tmpString = (String[]) it.next(); if (!tmpString[1].equals("0.0.0.0")) { if (VermittlungsProtokoll.gleichesRechnernetz(zielIP, tmpString[0], tmpString[1])) { routeString = new String[] {tmpString[2], tmpString[3]}; } } else { // no explicit match found --> standard gateway will be used String[] tempy = {tmpString[2], tmpString[3]}; Main.debug.println( "DEBUG (" + this.hashCode() + ") " + getClass() + " (Weiterleitungstabelle), holeWeiterleitungsZiele: using standard gateway: " + tempy); routeString = tempy; } } if (routeString == null) { Main.debug.println( "ERROR (" + this.hashCode() + "), holeWeiterleitungsZiele: routeString is still 'null' at return point! (is there a standard gateway for this device?)"); } return routeString; }
/** * Methode fuer den Zugriff auf die Weiterleitungstabelle bestehend aus automatisch erzeugten und * manuellen Eintraegen */ public LinkedList<String[]> holeTabelle() { Main.debug.println( "INVOKED (" + this.hashCode() + ") " + getClass() + " (Weiterleitungstabelle), holeTabelle()"); InternetKnoten knoten; NetzwerkInterface nic = null; String gateway; ListIterator it; LinkedList<String[]> tabelle; String[] tmp = new String[4]; tabelle = new LinkedList<String[]>(manuelleTabelle); manuelleEintraege = new LinkedList<Boolean>(); for (int i = 0; i < tabelle.size(); i++) manuelleEintraege.add(new Boolean(true)); if (firmware != null) { // Eintrag fuer 'localhost' tmp = new String[4]; tmp[0] = "127.0.0.0"; tmp[1] = "255.0.0.0"; tmp[2] = "127.0.0.1"; tmp[3] = "127.0.0.1"; tabelle.addFirst(tmp); manuelleEintraege.addFirst(new Boolean(false)); knoten = (InternetKnoten) firmware.getKnoten(); // Eintrag fuer eigenes Rechnernetz it = knoten.getNetzwerkInterfaces().listIterator(); while (it.hasNext()) { nic = (NetzwerkInterface) it.next(); tmp = new String[4]; // tmp[0] = nic.getIp(); tmp[0] = berechneNetzkennung(nic.getIp(), nic.getSubnetzMaske()); tmp[1] = nic.getSubnetzMaske(); tmp[2] = nic.getIp(); tmp[3] = nic.getIp(); tabelle.addFirst(tmp); manuelleEintraege.addFirst(new Boolean(false)); } // Eintrag fuer eigene IP-Adresse it = knoten.getNetzwerkInterfaces().listIterator(); while (it.hasNext()) { nic = (NetzwerkInterface) it.next(); tmp = new String[4]; tmp[0] = nic.getIp(); tmp[1] = "255.255.255.255"; tmp[2] = "127.0.0.1"; tmp[3] = "127.0.0.1"; tabelle.addFirst(tmp); manuelleEintraege.addFirst(new Boolean(false)); } // Eintrag fuer Standardgateway, wenn es konfiguriert wurde gateway = firmware.getStandardGateway(); if (gateway != null && !gateway.trim().equals("")) { gateway = gateway.trim(); it = knoten.getNetzwerkInterfaces().listIterator(); tmp = null; while (it.hasNext()) { nic = (NetzwerkInterface) it.next(); if (nic != null && VermittlungsProtokoll.gleichesRechnernetz( gateway, nic.getIp(), nic.getSubnetzMaske())) { tmp = new String[4]; tmp[0] = "0.0.0.0"; tmp[1] = "0.0.0.0"; tmp[2] = gateway; tmp[3] = nic.getIp(); } } if (tmp == null) { tmp = new String[4]; tmp[0] = "0.0.0.0"; tmp[1] = "0.0.0.0"; tmp[2] = gateway; tmp[3] = firmware.holeIPAdresse(); } tabelle.addLast(tmp); manuelleEintraege.addLast(new Boolean(false)); } } return tabelle; }