Na potrzeby zbierania danych o realizowanym ruchu moduł udostępnia
funkcję tl_db_add_packet( sk_buff* )
, która zapisuje
informacje o pakiecie przekazanym jako parametr. Obsługiwane są tylko
pakiety protokołu IP, przy czym rozpoznawane i szczególnie traktowane
są protokoły TCP i UDP. W tej chwili jedynym źródłem danych o
ruchu są pliki w katalogu /proc/
.
Na potrzeby zbierania informacji moduł tl_db
dokonuje wstępnej
agregacji, łącząc je w przepływy. Przepływ (ang. flow)
jest zdefiniowany jako strumień danych przesłanych pomiędzy komputerem
w sieci lokalnej (zwanym dalej nadawcą, niezależnie od faktycznego
kierunku nawiązania połączenia) a drugim, poza nią
(odbiorcą). Opisywany jest przez strukturę tl_flow_t
,
zawierającą:
IPPROTO_TCP
, IPPROTO_UDP
i podobne),
Numery portów wykorzystywane są tylko w przypadku protokołów TCP i
UDP, w pozostałych przypadkach tl_db
przyjmuje
.
Informacje te przechowywane są w tablicy haszującej indeksowanej
identyfikatorami przepływów, co pozwala na szybką implementację
funkcji tl_db_add_packet
. Stemple czasowe zapisywane są
z rozdzielczością sekundową jako wartość w momencie
dodawania pakietu do przepływu - czas ten jest względny (liczony od
momentu uruchomienia komputera) i przeliczany jest na rzeczywisty
dopiero przez program pośrednika.
Dostęp do zbieranych tu danych możliwy jest za pośrednictwem zebranych
w tabeli 3.3 plików rejestrowanych przez tl_db
w systemie procfs
.
|
Operacje odczytu z tych dwóch plików przebiegają identycznie, w sposób opisany poniżej; różnica polega jedynie na zmianie formatu wypisywania danych. Oba udostępniają ten sam zestaw informacji:
Wypisywane są tylko przepływy zamknięte, to znaczy takie,
w których upłynęła odpowiednia ilość czasu od momentu otrzymania
pierwszego lub ostatniego pakietu (ustawione obecnie na 60 i 120
sekund). Przepływ wypisany zostaje usunięty z bazy tl_db
.
Jeśli zamkniętych przepływów jest dostatecznie dużo, może okazać się niemożliwe obsłużenie ich wszystkich w pojedynczej operacji odczytu. W takiej sytuacji w pliku pojawia się informacja (wspomniany wyżej znacznik), że powinno się go przeczytać ponownie.