orm@doc-tcpip.org

Erstellt: Juli 2000 - Letzte Modifikation: Februar 2008

[ Main | Local ]


kdb - Kernel Debugger


AIX Kernel Debugger und das Netzwerk

Aufruf des kdb führt auf eine Kommandozeile. Im Prompt wird eine Zahl angeführt - das ist der Prozessor, dessen Register aktuell ausgelesen werden.

Subkommandos, die etwas mit dem Netz zu tun haben:
tcb ==> Zeigt die inpcb Struktur einer TCP Verbindung
udb ==> Zeigt die inpcb Struktur einer UDP Verbindung 
	-s Summary aller tcb Einträge
	-b  Eine Bucket-Number in der tcb Hash-Tabelle
	oder die Angabe einer effektiven Adresse.

sock ==> Zeigt die Socket Struktur für UDP und TCP.
	-d Send und Receive Buffer werden nicht gezeigt.
	-s Alle Sockets. Mit tcp bzw. udp kann man weiter einschränken.

	tcp bzw. udp Socket-Info für das gewählte Protokoll.
	Oder die Angabe einer effektiven Adresse.

tcpcb ==> Zeigt die tcpcb Struktur.
	-s Summary aller tcpcb Einträge
	oder die Angabe einer effektiven Adresse.

mbuf ==> Informationen zu mbufs
	-p Private mbufs Structur Pool
	-m Folgt der verketteten Liste eines Paketes
	(Angabe einer effektiven Adresse).
	-a Zeigt die verkettete Liste der Pakete in der Queue.
	(Angabe einer effektiven Adresse).
	-d Zeigt nur den Header der mbuf-Struktur.

netm ==> Liest einen Puffer im Kernel aus, in den alle net_malloc
         Aktionen protokolliert werden (mbuf anlegen, beschreiben,
         frei machen etc.). Man muß vorher die no-Option net_malloc_police
         gesetzt haben.
	-a  Zeigt alle Einträge der net_malloc Events bzw.
	nur von der Adresse.
	-i  Zeigt alle Einträge dieser Index-Nummer.
	-e Zeigt alle net_malloc Memoryadressen, die nicht freigegeben wurden.
	-c 
	-t Type Zeigt nur bestimmte Block-Typen der mbuf.
	(mögliche Typen finden sich in net_malloc.h, INITKMEMNAMES)
	-s Size Nur soviele Blocks zeigen.

sockinfo ==> Zeigt die Strukturen aller Arten von Sockets
	 
	Der Typ der Adresse kann sein: socket, inpcb, unpcb, rawcb, ripcb, 
	oder tcpcb. 
	-d Die Send/Receive Puffer nicht zeigen.

ndd ==> Zeigt die Statistiken und Tabellen des Network Device Drivers
	-s Zeigt alle DD Tabellen und gibt die Adresse der Struktur sowie den 
	Adapter.
	-n Interface-Name

nsdbg ==> Zeigt alle ns_alloc und ns_free Events im Kernel. Dazu muß die
	no-Option ndd_event_tracing gesetzt worden sein.
	-i start_index Alle Events ab diesem Punkt.
	-c display_count Alle Events mit diesem Display-Count
	-n nddname Alle Events mit diesem Namen.

netstat ==> Der "normale" netstat

route ==> Zeigt die Routing Structure. Erwartet eine effektive Adresse.
          netstat -nAf inet ==> gibt den Controll-Block des Protokolls
	  (Erste Spalte PCB/ADDR)
          tcpcb  ==> gibt den Internet Control-Block
          (t_inpcb)
          tcb  ==> Socket Info zeigt Routing Socket. Dort
          findet sich die Zieladresse der Route (route_6).
          route  ==> Alle Info zur Route.
Das ganze kann man auch mit dem "route monitor" Kommando online durchführen.

Wie wird soetwas gelesen?
(0)> netstat -Anf inet
Active Internet connections
PCB/ADDR         Proto Recv-Q Send-Q  Local Address      Foreign Address    (state)
F100020000B4DB90 tcp4       0      0  10.225.16.4.22     10.224.64.66.48373 ESTABLISHED

(0)> tcpcb F100020000B4DB90
---- TCP ----(inpcb: @ F100020000B4DA88)----
---- TCPCB ----(@ F100020000B4DB90)----
    seg_next......@F100020000B4DB90  seg_prev......@F100020000B4DB90
    t_softerror... 00000000 t_state....... 00000004 (ESTABLISHED)
    t_timer....... 00000000 (TCPT_REXMT)
    t_timer....... 00000000 (TCPT_PERSIST)
    t_timer....... 00003840 (TCPT_KEEP)
    t_timer....... 00000000 (TCPT_2MSL)
    t_rxtshift.... 00000000 t_rxtcur...... 00000003 t_dupacks..... 00000000
    t_maxseg...... 000005A8 t_force....... 00000000
    t_flags....... 060803E4 (NODELAY|RFC1323|SENT_WS|RCVD_WS|SENT_TS|RCVD_TS|LARGESEND|COPYFLAGS...
...)
    t_oobflags.... 00000000 ()
    t_template....@0000000000000000  t_inpcb.......@F100020000B4DA88
    t_iobc........ 00000000 t_timestamp... D87E2401 snd_una....... C73F0C1F
    snd_nxt....... C73F0C1F snd_up........ C73F0BEF snd_wl1....... 2DF7EF81
    snd_wl2....... C73F0C1F iss........... C73BF36B
    snd_wnd....... 000000000000D148 rcv_wnd....... 000000000000FE88
    rcv_nxt....... 2DF7EFB1 rcv_up........ 2DF7CAF1 irs........... 2DF71D20
    snd_wnd_scale. 00000000 rcv_wnd_scale. 00000000 req_scale_sent 00000000
    req_scale_rcvd 00000000 last_ack_sent. 2DF7EFB1 timestamp_rec. 21C59DF4
    timestamp_age. 00000000 rcv_adv....... 2DF8EE39 snd_max....... C73F0C1F
    snd_cwnd...... 000000000000FFFF        snd_ssthresh.. 000000003FFFC000
    t_idle........ 00000000 t_rtt......... 00000000 t_rtseq....... C73F0BEF
    t_srtt........ 00000007 t_rttvar...... 00000003 t_rttmin...... 00000002
    max_rcvd...... 0000000000000000        max_sndwnd.... 000000000000D148
    t_peermaxseg.. 000005A8 snd_in_pipe... 00000000
    sack_data.....@0000000000000000         snd_recover... 00000000
    snd_high...... C73F0C1F snd_ecn_max... C73F0C1F snd_ecn_clear. C73F0C1F
    t_splice_with.@0000000000000000         t_splice_flags 00000000

Man legt jetzt die Definition der Daten-Struktur tcpcb daneben - die findet man
in /usr/include/netinet/tcp_var.h.

Dort kann man mit ein bisschen suchen herausfinden, wie die Daten dargestellt
werden und wie verschiedene Variablen definiert sind.


Dort sind die Datenfelder "erklärt".

[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]

Copyright 2001-2021 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )