/dev/isdninfo und ioctl()

Post Reply
Message
Author
wolfgang

/dev/isdninfo und ioctl()

#1 Post by wolfgang »

Hallo!

Ich möchte ermitteln, wieviele Daten über ISDN übertragen werden (und diese Information je einem der Einträge zuordnen, die man durch das Lesen von /dev/isdninfo erhält). Laut isdninfo(4) kann diese Information mit der ioctl(2)-Funktion IIOCGETCPS ermittelt werden:

"IIOCGETCPS - Get transfer statistics. Returns the number of bytes transferred so far for all virtual channels. The third parameter should be a pointer to an array of unsigned long of size ISDN_MAX_CHANNELS * 2. This array is filled with the byte counter values upon return."

Wie habe ich aber nun die Werte in dieser Tabelle zu interpretieren? Ist das erste Element die Anzahl der gesendeten Bytes und das zweite Element die Anzahl der empfangenen Bytes (oder umgekehrt?)? Sowas scheint naheliegend, da die ersten beiden Elemente des Arrays sich pro Sekunde um 88 erhöhen, wenn ich einen Ping laufen lasse und sonst ihren Wert nicht ändern.

Auf der anderen Seite würde mich das verwundern, weil das normale Lesen aus /dev/isdninfo Zeilen mit je 32 Einträgen liefert, aber ISDN_MAX_CHANNELS ist 64, also ist das verwendete Array 128 Elemente lang (hingegen ist ISDN_MAX_DRIVERS 32).

Oder ist die Dokumentation falsch und das Array müsste in Wirklichkeit "ISDN_MAX_DRIVERS * 2" (also ISDN_MAX_CHANNELS) lang sein?

Das Programm "imon" (ein ISDN-Monitor, der allerdings nicht viele Infos ausgibt) zeigt übrigens 64 Einträge an, wobei der zweite zwar als Treiber den Bezeichner "HiSax" hat, aber dieser Eintrag ist stets "Offline".

Hat jemand eine Idee, wie ich die Informationen aus dem Array den Einträgen aus /dev/isdninfo zuordnen muss?

Grüße von Wolfgang

Post Reply