iptables auf der 5140

@pepi: Die attachments hast du aber gesehen, oder? Ich helf dir sonst auch gern, entpack dir eins und poste es hier, wenn du da irgendein Problem mit hast.
 
In Java greift man über eine Instanz einer Klasse auf Methoden, Membervariablen etc.
Das macht man in C auch so. Die Frage ist, was passiert, wenn verschiedene Teile eines Programms verschiedene Deklarationen für die gleiche Klasse haben.

Es hat hiermit zwar direkt nichts zu tun, aber vielleicht hilft es Dir, das Problem zu verstehen.
 
@ralf: ich würd aufgeben, das zu vergleichen. In Java kann so etwas nicht einfach passieren, es sei denn, es ist gewollt.
 
@Ralf
Casting oder besser gleich gegen ein Interface entwickeln. Oder meinst Du Methoden überschreiben?

Vielleicht meinst Du aber auch den static Modifizierer. So gilt hier eine Klassenvariable für jede Instanz der Klasse und befindet sich an einer festen Speicherposition.

@Silent
Ja, die Attachments habe ich gesehen, konnte aber nichts über diese skb_buffer_alloc Funktion finden. Laut Oli soll ja gerade diese Funktion Gegenstand des Problems sein bzw. ein segfault verursachen.
 
Ich spreche nicht davon, was man besser machen kann, um das Problem zu vermeiden, ich habe versucht, zu erklären, was das Problem ist. Ich meine auch nicht den static Modifizierer. Ich weiß nicht, ob das gleiche Problem in Java auftreten würde oder nicht.

Ich hatte bereits oben geschrieben, daß die Funktion nicht exakt skb_buffer_alloc heißt, weil der einzige Treffer dazu dieser Thread ist. Wahrscheinlich heißt die Funktion ähnlich, aber nicht exakt so.

Nimm es mir nicht übel, aber ich glaube nicht, daß die Fehlermeldung Dich weiter bringt. Wenn Du schon C als Programmiersprache nicht richtig kennst, ist das keine gute Voraussetzung, um ein Problem im Kernel zu lösen. Die einzige einfache Lösung ist ein Neu-Kompilieren von kdslmod.

Wenn Du wirklich Interesse hast, kann ich das Problem auch noch etwas ausführlicher beschreiben.

@Silent-Tears, pepi8080
Auch in C kann das nicht einfach passieren, es sei denn etwas paßt nicht zusammen, ob Absichtlich oder wie in diesem Fall weil man den einen Teil nicht anpassen kann.
 
Wenn es Dir nicht all zu viel Umstände bereitet, wäre schon super wenn Du das Problem etwas ausführlicher beschreiben könntest.
 
Stell Dir mal vor, Du hast zwei Dateien:
Code:
// Datei 1
class Test {
  int i;
};

Test *
new_Test (int val)
{
  t = new Test;
  t->i = val;
  return t;
}

// Datei 2
#include <stdio.h>

class Test {
  int x;
  int i;
};

Test *new_Test (int val);

int
main ()
{
  Test *t = new_Test (100);
  printf ("%d\n", t->i);
}
Wenn ich keinen Fehler darin habe, sollte das gültiges C++ sein. Es wäre übrigens nett, wenn Du das in Java umändern könntest und sehen, welches Ergebnis kommt.

Jedenfalls wird hier hier Funktion new_Test in der ersten Datei aufgerufen, Diese schreibt einen Wert an das Element i, das an der ersten Position steht. Die Funktion main in der zweiten Datei ruft diese Funktion auf und greift nachher auf den Wert von i zu. Nach der Klassen-Deklaration in der zweiten Datei steht i aber an der zweiten Position. Der Wert, der mit printf ausgegeben wird, ist also undefiniert.

Soweit noch alles verständlich? Das ist im Wesentlichen das Problem, das wir haben.
 
Ich muss zugeben, mich verwirren zwei Dinge:
1. Was macht die zweite Test Klasse in der 2. Datei?
2. Was hat es mit dieser Position auf sich? Wenn du auf i mit t->i zugreifst, dann sollte es doch egal sein, dass dort noch ein weitere Klassenvariabel definiert ist.

In Java sieht das Ganze etwas anders aus und ich bin mir nicht sicher, ob man dein Code ohne weiteres in Java umändern kann.
Java hat u. a. folgende Eigenschaften:
- Es gibt keine Funktionen, nur Methoden.
- Der Klassenname ist auch der Dateiname.
- Es kann keine zwei oder mehrere gleichnamigen Klassen in einem Package geben.
- Es kann nur eine Klasse pro Datei geben. Ausnahmen bilden hier Klassen in Klassen, die gehören aber nicht zum guten Stil.
- Es gibt keine Mehrfachvererbung.
- Es gibt kein Pointer.


Folgendes Beispiel würde einen ähnlichen Fehler verursachen, wobei hier x das Problem ist und nicht i.

Code:
/* Datei 1 [Test.java] */
package de.ippf.beispiel;

public class Test {
    public int i;
}

/* Datei 2 [Test02.java]*/
package de.ippf.beispiel;

public class Test02 extends Test {
    public int x;
}

/* Datei 3 [Main.java]*/
package de.ippf.beispiel;

public class Main {

    public static void main(String[] args) {
        Test t = new Test02();
        t.i = 100; // funktioniert, i ist definiert
        System.out.println(t.i); // gibt 100 aus
        t.x = 200; // funktioniert nicht, x ist nicht definiert
        System.out.println(t.x); // Fehler, x ist nicht definiert

        /* und so klappt es mit beiden */
        Test02 t02 = new Test02();
        t02.i = 100;
        t02.x = 200;
        System.out.println(t02.i + " und " + t02.x); // Ausgabe: 100 und 200
    }

}
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.