ar2c−lp−proxy − serwer proxy dla protokołu AR-2c LP
ar2c−lp−proxy
[opcje]
ar2c−lp−proxy jest wielopołączeniowym serwerem proxy z cache dla protokołu AR-2c LP.
Obecna wersja implementuje wszystkie podstawowe komendy. Wśród podstawowych komend ustawianie czasu jest domyślnie zablokowane.
Domyślnie ar2c−lp−proxy używa standardowego wejścia i standardowego wyjścia do komunikacji.
Opcje:
−−cache−dir=DIRECTORY
Określa katalog używany jako cache na dysku. Katalog musi istnieć.
−−client−nodelay
używa TCP_NODELAY przy połączeniach z klientami,
−−diskcache−compress=LEVEL
Powoduje użycie kompresji w cache na dysku. Wartość LEVEL określa poziom kompresji w zakresie 1 do 9, gdzie większa wartość oznacza wolniejszą kompresję.
−−semi−coherent
Powoduje działanie jako cache w którym średzone jest tylko powstawanie nowych minut w rejestratorze. Usunięte na rejestratorze minuty mogą być cały czas widzane w cache. Jest to domyślny tryb.
−−coherent
Powoduje działanie jako spójny cache. Zmiany na rejestratorze są śledzone i są nanoszone na cache. Dodanie lub usunięcie warstwy wiąże się praktycznie z usunięciem wszystkich danych w cache.
Opcja ta powinna być używana w przypadku, gdy klienci nieświadomie używają tego cache. Dla lokalnego cache - tylko by przyspieszyć przeglądanie Loggerem opcja ta nie jest najlepsza.
Opcja ta wymaga implementacji przez serwer komendy 0xe1, która nie jest wymagana przez protokół Loggera.
−−non−coherent
Powoduje działanie jako niespójny cache. Zmiany na rejestratorze nie koniecznie muszą być widoczne w cache. Jest to cachowanie domyślne.
−−fenable=CECHA
powoduje włączenie jakiejś cechy protokołu Loggera. Zobacz sekcję ROZSZERZENIA PROTOKOŁU.
−−fdisable=CECHA
powoduje wyłącznie jakiejś cechy protokołu Loggera. Zobacz sekcję ROZSZERZENIA PROTOKOŁU.
−−lifetime=LIFETIME
Czas życia elementów w cache na dysku w sekundach.
−−nodelay
używa TCP_NODELAY do połączenia z serwerem.
−−prefetch=LEVEL
włącza wcześniejsze pobieranie danych. LEVEL określa jak szybko mają być pobierane dane (obecnie ogranicza to ilość równoczesnych komend). Wymaga użycia opcji −−coherent.
−−reliable−link
zakłada że połączenie z serwerem jest niezawodne.
−−unreliable−link
zakłada że połączenie z serwerem jest zawodne. Powoduje potwierdzanie danych w cache. Dopiero trzecie żądanie jakiejś minuty może być z cache.
−−sched=SCHED
powoduje użycie schedulera SCHED. Domyślnym jest fifo. Zobacz sekcję SZEREGOWANIE ZADAŃ.
−−sched_opts=OPT
określa opcje schedulera.
−−syslog
używa sysloga jako wyjście z informacjami i błędami.
−3 |
udostępnia 3-bajtową wersję komendy 0xa5. |
|||
−4 |
udostępnia 4-bajtową wersję komendy 0xa5. |
−a, −−acl plik
Powoduje wczytanie pliku z listą kontroli dostępu (ACL). Format jest opisany w punkcie KONTROLA DOSTĘPU.
−b, −−bitrate szybkość
Opcja ta powoduje wybranie docelowej prędkości transmisji na porcie szeregowym. Obecnie opcja ta działa tylko na urządzeniach. Jeżeli podstawowa prędkość transmisji jest różna od tej wartości ar2c−lp−proxy poprosi drugą stronę o zmianę prędkości transmisji na ta wartość oraz dokona wszystkich kluczowych operacji w tej szybkości transmisji.
Szybkość transmisji jest oczywiście w bps.
−−bbitrate szybkość
Ustawia podstawowa szybkość transmisji. Jest ona ustawiana w celu pierwszego połączenia z rejestratorem. Jeżeli nie ustawiono rbitrate to ta wartość jest automatycznie traktowana także jako szybkość na którą należy przełączyć rejestrator po zakończeniu działania.
Szybkość transmisji jest oczywiście w bps.
−−rbitrate szybkość
Ustawia powrotną prędkość transmisji. Jest ona ustawiana po zakończeniu korzystania z rejestratora.
Szybkość transmisji jest oczywiście w bps.
−c, −−ht_size rozmiar
Zmienia rozmiar tablicy używanej do szukania w cache. Domyślnie 31713.
−d, −−device nazwa
Do komunikacji z rejestratorem używa następującego urządzenia. Może być to również socket lub fifo znajdujące się na filesystemie. Może nawet być to zwykły plik.
−e, −−max_entries rozmiar
Zmienia maksymalną ilość wpisów w cache. Domyślnie 32768. Jest to dość duża wartość (prawie 23 dni). Jest ona dostosowana do rejestratorów AR−2c. W przypadku rejestratorów z dużymi minutami wartość ta powinna być zmniejszona (dla minut o rozmiarze 10kB występujących w AR-3c taki cache zajmuje 320MB w pamięci).
−f, −−fifo nazwa
Do komunikacji z rejestratorem używa podwójnego fifo. Podana tu nazwa jest nazwa pliku używanego do komunikacji do rejestratora. Należy użyć także opcji -d by określić skąd mają być dane czytane.
−h, −−help
Pokazuje informacje o wywołaniu.
−l, −−lport port
Zmienia port na którym nasłuchuje ar2c−lp−proxy na ‘port’.
−s, −−host nazwa
Opcja ta ustawia nazwę hosta z którym program ma się połączyć. Do tego celu wykorzystywany jest protokół TCP/IP. Domyślnie jest to localhost.
−m, −−model model
Ustawia model rejestratora. Domyślnie 2.
−n, −−conn_limit ilość
Ostawia limit połączeń. Domyślnie 20.
−p, −−port numer
Opcja ta ustawia numer portu z którym program ma się połączyć. Domyślnie jest to port 2000. Jest to domyślny port zarówno dla AR−3c jak i dla programu RejSerw.
−−pipe |
Tworzy proces zajmujący się odbieraniem danych, który następnie wysyła te dane do socketu (dawniej był to pipe) z którego czyta dopiero program główny. Tryb ten jest workaroundem dla problemów wydajnościowych związanych z używaniem ar2c−lp−proxy na serialu pod Cygwin. |
−q, −−quiet
Zmniejsza gadatliwość.
−r, −−rlimit limit
Zmienia limit ilości żądań równocześnie realizowanych przez jednego klienta. Domyślnie 8. W praktyce ilość realizowanych żądań może być wyższa od tego limitu (maksymalnie o 16 w obecnej implementacji, o 4 żądania minuty więcej). Większa wartość daje wyższą wydajność dla jednego klienta, ale zwiększa opóźnienie. Jeżeli u klientów występują timeouty należy zmniejszyć ten limit.
−−stats_interval wartość
Zmienia wartość określającą do ile sekund mają być wyświetlane statystyki. Wartość 0 wyłącza je.
−−timesync
Włącza synchronizację czasu serwera za pomocą protokołu Loggera. Jeżeli różnica pomiędzy czasem lokalnym, a czasem serwera jest większa jak próg wykonywana jest zmiana czasu serwera. Domyślnie próg wynosi 10 sekund w przypadku, gdy czas lokalny jest większy jak czas serwera lub 30 sekund w przeciwnym przypadku.
−v, −−verbose
Zwiększa gadatliwość.
−V, −−version
Wyświetla wersję ar2c−lp−proxy na standardowe wyjście oraz kończy pracę.
ar2c−lp−proxy potrafi kontrolować dostęp na poziomie adresów IP. Służy do tego plik z listą ładowany za pomocą opcji ‘-a’. Jeżeli opcja ta nie została użyta lub plik jest pusty każdy ma prawo dostępu. Jeżeli plik jest niepusty domyślnym zachowaniem jest odrzucenie połączenia.
W pliku z listą dostępu każda linia traktowany jest traktowana jako osobny wpis o następującej strukturze:
allow/deny ip[/maska]
Maska jest pojedynczą liczbą określającą ilość jedynek na początku w masce. Określenie maski jest opcjonalne (domyślnie 32).
Allow powoduje natychmiastowe dopuszczenie klienta, a deny jego odrzucenie. Lista jest przeglądana kolejno.
Przykładowa lista może wyglądać następująco:
−−−
cut here −−−
deny 192.168.2.100
allow 192.168.2.0/24
allow 192.168.10.1/32
allow 172.16.4.0/16
−−− cut here −−−
ar2c−lp−proxy może służyć do udostępnienia rejestratora AR-2c/AR-2c+/AR-3c połączonego przez łącze szeregowe. Można to zrobić poprzez:
$ ar2c−lp−proxy -d /dev/ttyS0 -b 9600
W przypadku rejestratora AR-3c możemy użyć większej prędkości transmisji:
$ ar2c−lp−proxy -d /dev/ttyS0 -b 115200
W przypadku rejestratora AR-2c pracującego z inną prędkością transmisji należy używać --bbitrate zamiast -b:
$ ar2c−lp−proxy -d /dev/ttyS0 --bbitrate 19200
W przypadku komunikacji z rejestratorem po TCP/IP przeważnie wywołanie wygląda mniej więcej tak:
$ ar2c−lp−proxy -s 192.168.2.100 -p 2000
Protokół Loggera ma bardzo wiele rozszerzeń. ar2c−lp−proxy daje możliwość wyboru, które z nich mają być włączone.
Z powodu tego, że ustawianie czasu jest bardzo niebezpieczne ar2c−lp−proxy daje także możliwość włączenia lub wyłączenie tej funkcji. Domyślnie jest ona wyłączona.
Obsługiwane rozszerzenia:
setdate − ustawienie czasu. Domyślnie wyłączone. lpinfo − rozszerzenie lpinfo. Domyślnie włączone.
Włączać lub wyłączać rozszerzenia można za pomocą opcji −−fenable oraz −−fdisable
Domyślnie ar2c−lp−proxy stosuje domyślną kolejkę libar2clp−cli którą jest fifo.
Kolejna ta w przypadku wielu klientów jest bardzo niesprawiedliwa oraz powoduje duże opóźnienia. Zalecana kolejką jest rr.
Kolejka rr przyjmuje następujące opcje: max_reqs:max_reqs_pc:max_creqs[:idle_limit].
max_reqs określa maksymalna ilość żądań w kolejce. max_reqs_pc określa maksymalną ilość żądań dla pojedynczego klienta. max_creqs określa maksymalną ilość żądań aktualnie wykonywanych. idle_limit określa maksymalną ilość żądań aktualnie wykonywanych przy szeregowaniu żądanie o priorytecie IDLE. Domyślne parametry to 1000:16:1:1.
Rejestratory AR-2c działają dobrze, gdy realizują równocześnie dwie komendy. Jedną aktualnie wykonują, a na poprzednią mogą w tym samym czasie wysyłać odpowiedź.
Rejestratory AR-3c z powodu dostępu przez dużo wydajniejszą sieć wymagają równoczesnej realizacji większej ilości komend.
Na cygwin ar2c−lp−proxy działa bardzo wolno, gdy używa komunikacji po serialu. Opcja --pipe została wprowadzona by poprawić tą sytuację.
W przypadku Windows 98 opcja --pipe nie działa i należy odpalić serwer proxy dwa razy. Jeden korzystający z seriala i drugi korzystający z pierwszego.
ar2c−lp−proxy naprawdę cachuje odpowiedzi! Odpowiedzi na pytania z cache są naprawdę bardzo szybkie. Jeżeli twierdzisz inaczej to używasz zapewne Loggera 4.x (sprawdzane na 4.1-0.11). Zainwestuj w Loggera 3.x i zobacz jak cache działa naprawdę. Jeżeli chcesz tylko ściągać dane powinieneś zainteresować się programem mklaf z pakietu ar2c−lp−utils.
Wydajność na cygwin jest dużo mniejsza jak na GNU/Linux.
ar2c−lp−proxy nie jest odporny na wymianę rejestratora w trakcie pracy. Jak na razie nie jest to traktowane jako jakaś poważna wada.
Krzysztof Mazur
ar2cinfo(1), mklaf(1),