ARCHIWUM

POWRÓT DO STRONY FREESCO


Dynamiczny skrypt sterujący ograniczaniem przepływu danych

 z wykorzystaniem Traffic Shaper

Na co to komu:

Niestety opisany w poprzednim opracowaniu program tshaper jest dość toporny w używaniu i mało "inteligentny", jeżeli tak można powiedzieć. Wszelkich ograniczeń pasma musimy dokonywać ręcznie. Postanowiłem zatem popełnić skrypt powłoki który dynamicznie, w zależności od kilku czynników, włączy i rozłoży dławienie przepustowości łącza na użytkowników przesadzających z download'em. Oczywiście nie dotyczy to tylko programów p2p, ale całościowego wykorzystania pasma. Wady tego skryptu zawierają się generalnie w wadach samego shaper'a. Czyli ograniczanie ruchu wychodzącego, co wiąże się także z ograniczeniem prędkości ściągania plików na serwerze (samba), czy poczty, blokowanie pingów, utracone pakiety itp. W dokumentacji także mowa o maksymalnej i minimalnej przepustowości. Maksymalna to 256 kbit, jednak przekroczenie tej wartości nie powoduje żadnych komplikacji, po prostu shaper nie przepuści więcej jeżeli ktoś się w nim znajdzie ( a jeśli przepuści będzie to nieco "poszarpane"). Nie badałem tematu minimalnej przepustowości. W działaniu jest w tej chwili jedyne takie rozwiązanie. Jest jeszcze ograniczenie związane ze zliczaniem ruchu, w tej chwili i w obecnie przedstawionej tu wersji, skrypt ten jest w konflikcie z programami MRTG i LAS. Nie możliwe jest skuteczne stosowanie wszystkich tych rzeczy na raz. Należy dokonać więc wyboru, albo kombinujemy z tym skryptem, albo używamy statystyk. Wiem że ten problem da się rozwiązać i pewnie prędzej czy później zostaną pogodzone te rzeczy, jednak w tej chwili skupiam swą uwagę na doskonaleniu skryptu. Także używanie go w sieciach z wieloma interfejsami lokalnymi na serwerze wymaga znacznego rozbudowania rozwiązania. Jednak dla podstawowej konfiguracji większości systemów FreeSCO opartych na SDI i kilku komputerach na jednej sieciówce to rozwiązanie praktycznie nie wymaga żadnej głębszej konfiguracji. Sama budowa i wykorzystane rozwiązania też pozostawiają wiele do życzenia, ale tłumaczy mnie fakt że przeszedłem przyspieszony kurs skryptów shell'owych (jakieś dwa tygodnie) i nie jestem w tym ekspertem. Jeżeli ktoś widzi to inaczej, i będzie miał ochotę się podzielić tym ze mną i innymi to ZAPRASZAM do współpracy. Sam w miarę zdobywania wiedzy będę się starał poprawiać co nieco i usprawniać to rozwiązanie. Nazwałem je "justice"

Potrzebne materiały:

Instalacja pakietu:

Jeżeli stosować będziemy justice musimy usunąć paczkę z MRTG i/lub paczkę LAS. Paczkę instalujemy poprzez wydanie komendy 

installpkg http://radar.freesco.pl/plik/justice/justice

Przy pomyślnym zakończeniu ściągania i rozpakowywania paczki, zostaniemy zapytani Czy chcesz skonfigurowac teraz adresy komputery ktore justice bedzie bral pod uwage ? Odpowiadając Y, w dalszej kolejności będziemy poproszeni o podanie adresów IP kompów w sieci lokalnej, które będziemy brać pod uwagę przy liczeniu ruchu i ewentualnym ograniczaniu pasma. Adresy IP należy podawać w prostej formie (np. 192.168.0.5), i po każdym adresie potwierdzać <enter>. Jeżeli podamy już wszystkie, aby zakończyć wystarczy wcisnąć <enter> bez wpisu. Z tych IPków stworzony zostanie plik justice.hst, którym posługiwał się będzie sam skrypt główny jak i skrypt startowy. Jeżeli etap tworzenia listy adresów zostanie pominięty, do działania justice będzie trzeba ręcznie takowy plik stworzyć. No ale zakładamy że instalacja i tworzenie justice.hst zakończyło się pomyślnie. Jeżeli jesteś posiadaczem łącza w świat z TPSA o magicznej nazwie SDI to do uruchomienia wystarczy wpisać 

rc_justice start

Lub zresetować router/serwer. Skrypt jest w tej wersji gotowy do działania dla SDI. W przypadku posiadania NEO+ lub DSL, czy też innego łącza stałego wykorzystującego FreeSCO w trybie "ethernet router", będziemy musieli ustawić parametr spdinet, w skrypcie startowym rc_justice który znajdziemy w /mnt/router/rc/rcuser. Domyślnie jest on zadeklarowany na prędkość 128000, i jeżeli wasze łącze jest szybsze to tutaj należy określić jego prędkość do podziału. W przypadku SDI rc_justice sam dobierze prędkość. Takie same działanie trzeba będzie jeszcze pojąć w pliku justice który po instalacji znajdować się będzie w /mnt/router/packages/justice. Tym razem zmienna będzie się nazywać speed i domyślnie ustawiona jest na prędkość SDI czyli 115200. Oprócz tego, do podstawowej konfiguracji należy zastanowienie się nad zmiennymi maxtran  i maxsuma. Do czego one służą przeczytać można niżej, w akapicie filozofii działania. Jeżeli mamy mniej więcej wszystko zainstalowane i wstępnie skonfigurowane, po instalacji i uruchomieniu (lub restarcie) możemy wstukać na konsoli: 

ifconfig

Co powinno pokazać nam nowe interfejsy sieciowe od shaper0 do shapern gdzie n jest liczbą komputerów zadeklarowanych w justice.hst (o jeden mniejszą jako że liczymy od zera...). Innym dowodem na działanie justice  jest plik j.log, który zostanie utworzony automagicznie w katalogu /mnt/router/packages/justice w momencie odpalenia justice. Testowanie u mnie czynię poprzez włączenie download'u jakiegoś większego pliku przy aktywnej liczbie kilku użytkowników sieci, i po minucie patrząc na wykres np. programu DUmeter widzę obniżenie średniej prędkości ściągania. Zaglądam sobie teraz do pliku j.log i ładnie pisze o zablokowaniu mojego komputera ze względu na przekroczony transfer. Co do samego skryptu, to często zdarzają się tzw literówki. Aby przetestować skrypt pod tym kątem uruchamiamy go po prostu z konsoli (nie w tle jak poleceniem fork). W razie popełnienia jakiegoś błędu zostaniemy poinformowani przez powłokę gdzie (linijka) został znaleziony błąd składni.

Filozofia działania (krótka piłka):

Zakładam że mamy za sobą opracowanie dotyczące samego tshaper'a i wiemy z grubsza jak działa. Aby wyłuskać osoby (komputery) które blokują nam sieć ściągając duże pliki, lub wiele małych, będziemy zliczać ruch wychodzący z serwera do konkretnych hostów. Reguły liczenia ustawi nam rc_justice na podstawie justice.hst. Będą one później zerowane co minutę w samym skrypcie sterującym. Dlaczego wychodzący z serwera ? Taka jest specyfika urządzeń shaper, których będziemy używać do ograniczania pasma dla zapychaczy. A suwerenność justice w zliczaniu ruchu jest głównym powodem konfliktu z programami MRTG czy LAS. W rc_justice ładują się też do systemu moduły shaper'a, które następnie są podczepiane pod interfejs sieci lokalnej oraz włączane przez ifconfig. Główny skrypt zarządzania ograniczaniem działa na podstawie kilku ważnych kryteriów. Najważniejszy, to ograniczanie pasma dla adresów IP do których popłynęło więcej danych niż ilość określona zmienną maxtran. Co minutę skrypt porównuje ilości danych przekazanych z serwera do adresów określonych w justice.hst, ze zmienną maxtran i w przypadku jej przekroczenia, dany host zostaje skierowany przez interfejs dławiący shaper. Prędkość tegoż interfejsu jest wyliczana co minutę na podstawie aktywności komputerów w sieci. Jeżeli ilość danych do któregoś z komputerów przekroczy 1000, user taki zostanie zaliczony do aktywnych i prędkość shaper'a zostanie wyliczona dzieląc zmienną speed na ilość aktywnych hostów. To pozwala regulować ograniczanie pod kątem ilości komputerów korzystających w danej chwili z internetu. Aby nie dopuścić do sytuacji kiedy kilka komputerów naraz generuje w sumie duży ruch i zapycha łącze innym, ale osobno żaden nie przekracza maxtran, została wprowadzona dodatkowa zmienna maxsuma. Jest ona granicą maksymalnego sumarycznego transferu wszystkich hostów. I jeżeli zostanie przekroczona, to zmienną maxtran obniżymy (poprzez podzielenie sumy danych z danego cyklu przez liczbę aktywnych kompów) do takiego poziomu że każdy będzie miał matematycznie wyliczone pasmo do ściągania. To byłby mechanizm blokowania, ale teraz trzeba czasem kogoś przywrócić do "normalności". Do tego służy też zmienna, tyle że wyliczana automatycznie w skrypcie, poprzez podzielenie maxtran przez trzy. Nazywa się to  mintran, i jest minimalną wartością transferu potrzebnego do odblokowania danego hosta (czyli realizacji ruchu internetowego bez ograniczeń). W przypadku aktywności tylko jednego komputera przyjmuje wartość maxtran. Czyli w momencie kiedy zostanie jeden tylko użytkownik internetu, podciągamy tak wartość mintran aby nawet po przyblokowaniu danego kompa natychmiast (w tym samym cyklu, minucie) został on odblokowany. Z teorii wynika zatem że znacznie trudniej się wydostać z blokady do normalnego pasma niż się do shaper'a dostać. Samo kierowanie ruchu przez interfejscy "wąskiego gardła" jest realizowane poprzez manipulację tablicą routingu. Warto po eksperymentować dla swoich potrzeb różnych ustawień zmiennych maxtran i maxsuma. Przedstawiłem z grubsza główne czynniki odpowiedzialne za włączanie i wyłączanie blokowania oraz regulację prędkości. Jeżeli ktoś chce się zagłębić w szczegóły to poniżej "rozpracowałem" justice na elementy pierwsze.

Szczegóły (rozkład na łopatki):

Omawianie dokładnej budowy skryptów justice zaczynamy od pliku startowego rc_justice

#!/bin/sh  
. /etc/system.cfg  
. /etc/live.cfg  
. /etc/chat.pwd  
   
spdinet=128000 W przypadku posiadania innego łącza ze światem niż SDI, zmienną $spdinet ustawiamy na maksymalną teoretyczną prędkość naszego łącza. 
   
if [ "$ROUTER" = dialup ]; then I jeżeli mamy łącze dial-up to...
lokalip=$IPADDR0 Zmienna $lokalip ustawiona jest na adres pierwszego interfejsu ethernetowego, wyciąganą z system.cfg
lokalif=$INTNAME0 A $lokalif czyli nazwa interfejsu sieci lokalnej na nazwę eth0
else W przeciwnym wypadku... (Czyli jeżeli mamy np. neostradę czy iDSL)
lokalip=$IPADDR1 Adres IP ustawiany na adres drugiej karty sieciowej
lokalif=$INTNAME1 I nazwa ustwiona jest na eth1, jako że pierwsza karta zajmuje sie połączeniem z dostawcą internetowym.
fi  
   
if [ "$ISPNAME" = sdi ]; then Jeżeli natomiast korzystamy z SDI
spdinet=115200 Prędkość ustalamy na prędkość SDI
lokalip=$IPADDR0 Adres IP sieci lokalnej to adres pierwszej karty sieciowej
lokalif=$INTNAME0 Oraz nazwę interfejsu na eth0
fi    
   
if [ "$1" = firewall ]; then Firewall ? to świetnie, ale dla nas to nieważne
exit; fi
   
if [ "$1" = stop -o "$1" = restart ]; then W przypadku gdy ktoś zechce zrestartować lub zatrzymać skrypt
killall justice na początek "mordujemy" proces
   
for nkomp in `cat /mnt/router/packages/justice/justice.hst`; do I w pętli odczytującej IP hostów z pliku justice.hst
route del $nkomp Usuwamy z tablicy routingu wszelkie możliwe wpisy dotyczące indywidualnie naszych IP. Jak trasa indywidualna do danego hosta z pliku justice.hst nie jest ustawiona to wyawali błąd. Ale tylko na ekranie serwera :-) poza tym będzie wszystko OK. Usuwanie trasowania dokonujemy na wszelki wypadek, gdyby cuś się wysypało.
done  
ipfwadm -A -f Kasujemy nasze reguły zliczania ruchu
   
$DONE; [ "$1" = stop ] && exit; fi Jeżeli stop to wypad, jeżeli inaczej, to dalej. To koniec sekcji zatrzymywania, poniżej sekcja startowania
    
ln -s /mnt/router/packages/justice/shapecfg /bin/shapecfg Tworzymy dowiązania symboliczne do plików wykonywalnych w naszym katalogu
ln -s /mnt/router/packages/justice/insmod /bin/insmod
ln -s /mnt/router/packages/justice/justice /bin/justice
   
ipfwadm -A -f Kasujemy reguły zliczania ruchu
   
l=0 Zerowanie zmiennej do zliczania
for nkomp in `cat /mnt/router/packages/justice/justice.hst`; do Pętla odczytu adresów IP hostów z pliku justice.hst i...
insmod -fs -o shaper$l /mnt/router/packages/justice/shaper.o Ładujemy tyle modułów shaper'a  ile jest IPków w justice.hst
shapecfg attach shaper$l $lokalif Podpinamy nasze shaper'y pod interfejs sieci lokalnej 
shapecfg speed shaper$l $spdinet I ustalamy ich prędkość
ifconfig shaper$l $lokalip up Oraz podnosimy je, czyli mówimy kernelowi że tu oto ma nowe interfejsy sieciowe, z adresem naszej sieci lokalnej 
ipfwadm -A both -a -S 0/0 -D $nkomp Czas na skonfigurowanie reguł zliczania ruchu, wg naszych potrzeb
l=$(expr $l + 1) Dodajemy jeden do naszej zmiennej 
done Koniec pętli, odczytany zostanie następny adres IP z justice.hst
   
fork /mnt/router/packages/justice/justice W tle będzie sobie działał nasz skrypt sterowania ruchem
   
$DONE Konczita

To to powyższe pozwala nam na instalacje odpowiednich interfejsów i uruchomienie skryptu, oraz liczenie ruchu do hostów przy starcie serwera. Przedstawiam poniżej poniżej plik justice który jest WYKONYWALNYM skryptem powłoki i w nim funkcjonuje moja koncepcja sterowania ruchem sieciowym przez shaper'y z oceną wykorzystania łącza. Zakładam że jesteś po kawie, pozwoli Ci to na dogłębną analizę :-)

#!/bin/sh  
#  
ipfwadm -A -z Zerowanie liczników 
   
while :; do Nieskończona pętla
C=`/bin/date +%H%M` Ustawienie zmiennej $C jak bieżący czas w godzinach i minutach
   
speed=115200 Zmienna $speed ustawiona na maksymalną prędkość łącza (teoretyczną).
maxtran=470000 Za pomocą zmiennej  $maxtran sterujemy załączaniem ograniczeń dla hostów. Jeżeli jakiś komputer przekroczy indywidualnie tą barierę transferu, to w zależności od ilości użytkowników (więcej niż jeden) zostanie skierowany przez interfejsy dławiące o prędkości też sterowanej ilością użytkowników w danym momencie. Oczywiście możemy sobie ją ustawić na wartość przez siebie wybraną, to zaproponowane 470000 jest moim ustawieniem, dla mnie optymalnym. Warto poeksperymentować z $maxtran aby uzyskać to czego się oczekuje od skryptu
maxsuma=550000 W momencie  gdy zliczony sumaryczny transfer przekroczy zadeklarowaną w tym miejscu wielkość zostanie uruchomiona procedura zmiany wartości zmiennej $maxtran, oczywiście też w zależności od aktywności innych użytkowników w danej chwili
    
suma=0 Ustawianie i zerowanie zmiennych aby uniknąć błędów
ilosc=0
licznik=0
komp=koniec
    
for i in `ipfwadm -A -lnx | cat`; do Tutaj zaczynamy pierwszą pętlę odczytu ilości danych zliczonych przez ipfwadm -A -lnx 
licznik=$(expr $licznik + 1)   
if [ "$licznik" -gt 11 ]; then   
case $licznik in   
12)  
bytes=$i Na 12 pozycji ilość bajtów
;;   
15|16)  
komp=$i Na 15 i 16 Adresy IP komputerów dla których poprzednia wartość $i była ilością bajtów
;;  
17) Na 17 koniec linii
licznik=$(expr $licznik - 7) I cofamy się o 7 pozycji
if [ "$komp" != koniec ]; then Jeżeli zmienna $komp jest różna od wartości $koniec która zakończy dany cykl odczytu to...
   
for nkomp in `cat /mnt/router/packages/justice/justice.hst`; do Teraz z kolei odczytujemy w pętli adresy z pliku justice.hst
if [ "$komp" = "$nkomp" ]; then I jeżeli odczytany adres z ipfwadm -A -lnx jest taki sam jak adres z justice.hst to...
if [ "$bytes" -gt 1000 ]; then Liczymy ilość danych dla odczytanego IP i jeżeli przekroczy ona 1000 (to wartość do ustalenia indywidualnego) to dany host jest uważany za aktywnego w sieci, co powoduje zwiększenie o 1 zmiennej $ilosc która posłuży nam dalej do innych niecnych celów...
ilosc=$(expr "$ilosc" + 1)
fi
suma=$(expr "$suma" + "$bytes") A suma transferów zwiększy się o transfer danego kompa
fi   
done Koniec pętli odczytu z justice.hst
fi  
komp=koniec  
;;  
esac Kończymy z case
fi  
done I kończymy też z pętlą odczytu z ipfwadm -A -lnx 
   
if [ "$ilosc" -gt 0 ]; then Gdy ilość aktywnych komputerów w sieci większa jest od zera... Dzielimy prędkość maksymalną łącza na liczbę użytkowników 
speed=$(expr $speed / $ilosc)
fi
   
if [ "$suma" -gt $maxsuma ]; then Jeżeli suma transferów jest większa od zmiennej $maxsuma...
maxtran=$(expr $suma / $ilosc) Wtedy dzielimy $maxtran na liczbę użytkowników, co zabezpiecza nas przed sytuacją że dwaj użytkownicy ciągną duże pliki, ale żaden indywidualnie nie przekroczy wartości $maxtran. Jeżeli sumaryczny transfer będzie wysoki to maksymalny transfer graniczny zostanie obniżony do granicy wartości przypadającej na jednego użytkownika obliczonej z sumy transferów... UFF
fi  
   
if [ "$ilosc" -le 1 ]; then A jeżeli w sieci jest jeden lub mniej użytkowników
mintran=$maxtran Zmienna $mintran, która jest minimalną wartością transferu potrzebnego do odblokowania danego hosta (czyli realizacji ruchu internetowego bez ograniczeń), przyjmuje wartość $maxtran. Czyli w momencie kiedy zostanie jeden tylko użytkownik internetu, podciągamy tak wartość $mintran aby nawet po przyblokowaniu danego kompa natychmiast (w tym samym cyklu, minucie) został on odblokowany. 
else W przeciwnym wypadku...czylki użytkowników więcej jest...
mintran=$(expr $maxtran / 3) $mintran odblokowywujący jest maksymalnym transferem dzielonym przez 3
fi  
   
licznik=0 Zmienna licznik musi zostać wyzerowana gdyż ma w tej chwili wartość z poprzedniej pętli
for i in `ipfwadm -A -lnx | cat`; do Zaczynamy drugą pętlę odczytu ilości danych zliczonych przez ipfwadm -A -lnx 
licznik=$(expr $licznik + 1) Tak jak poprzedniej pętli, odczytujemy wartości ilości danych i adres IP komputera który ściągnął tyle...
if [ "$licznik" -gt 11 ]; then
case $licznik in
12)
bytes=$i
;;
15|16)
komp=$i
;;
17)
licznik=$(expr $licznik - 7)
if [ "$komp" != koniec ]; then
 
l=0 Zerowanie zmiennej zliczającej
for nkomp in `cat /mnt/router/packages/justice/justice.hst`; do Pętla odczytu IP z pliku justice.hst
if [ "$komp" = "$nkomp" ]; then I jeżeli adresy są takie same to..
shapecfg speed shaper$l $speed Ustawiamy prędkość shaper'a przypisanego dla danego hosta na wartość ustalonej powyżej zmiennej $speed
if [ "$ilosc" -gt 1 -a "$bytes" -gt "$maxtran" ]; then W momencie gdy ilość aktywnych użytkowników jest większa niż jeden i zidentyfikowany użytkownik ma transfer wyższy niż $maxtran... oj będzie się działo...
   
echo $C" Przyblokowany Host $nkomp z powodu przekroczenia transferu, transfer $bytes" >>/mnt/router/packages/justice/j.log Wypisujemy do pliku j.log informację wraz z godziną o wrzuceniu danego komputera (nie fizycznie oczywiście) do kociołka. UWAGA NA ZŁAMANĄ LINIĘ W OPISIE
echo " ilosc hostow w tym momencie "$ilosc >>/mnt/router/packages/justice/j.log  Informacje, niejako dodatkowe
echo " suma bajtow "$suma >>/mnt/router/packages/justice/j.log
echo " transfer graniczny max "$maxtran >>/mnt/router/packages/justice/j.log
echo " transfer graniczny min "$mintran >>/mnt/router/packages/justice/j.log
echo " predkosc shaper'a "$speed >>/mnt/router/packages/justice/j.log
echo " " >>/mnt/router/packages/justice/j.log Pusta linijka w j.log
route add $nkomp dev shaper$l Oraz najważniejsze, Czyli kierujemy delikwenta drogą przez mękę...czyli shaper'a dla niego przypisanego
fi  
   
if [ "$bytes" -lt "$mintran" ]; then Natomiast kiedy ilość danych dla danego hosta jest mniejsza od $mintran odblokowywującej
for okomp in `route -n | cat`; do Przeszukujemy w pętli tablicę routingu, aby sprawdzić czy dachy host był skierowany przez shaper'a
if [ "$okomp" = "$nkomp" ]; then Jeżeli był trasowany przez interfejs dławiący..
echo $C" Odblokowany Host $nkomp $bytes" >>/mnt/router/packages/justice/j.log Info o odblokowaniu do logu
echo " ilosc hostow w tym momencie "$ilosc >>/mnt/router/packages/justice/j.log
echo " suma bajtow "$suma >>/mnt/router/packages/justice/j.log
echo " transfer graniczny max "$maxtran >>/mnt/router/packages/justice/j.log
echo " transfer graniczny min "$mintran >>/mnt/router/packages/justice/j.log
echo " predkosc shaper'a "$speed >>/mnt/router/packages/justice/j.log
echo " " >>/mnt/router/packages/justice/j.log
route del $nkomp I przyłączamy delikwenta do "ruchu bez granic"
fi  
done Koniec pętli szperania w tablicy routingu
fi  
   
fi  
l=$(expr $l + 1)  
done to by było na tyle w tym cyklu blokowania, ograniczania i ogólnie męczenia userów. (Sprawdzanie w pliku justice.hst)
   
fi  
komp=koniec  
;;  
esac Kończymy z case
fi  
done I z drugą pętlą odczytu z ipfwadm -A -lnx też koniec
   
ipfwadm -A -z Zerowanie wskaźników po każdym cyklu...
if [ "$C" = 0005 ]; then
mv -f /mnt/router/packages/justice/j.2 /mnt/router/packages/justice/j.3
mv -f /mnt/router/packages/justice/j.1 /mnt/router/packages/justice/j.2
mv -f /mnt/router/packages/justice/j.log /mnt/router/packages/justice/j.1
fi
Działania rotacji logów justice 
sleep 60 2>>/mnt/router/packages/justice/j.log; I usypiamy proces na minutkę
   
done Koniec pętli nieskończonej

 

Pamiętać należy że w stosunku do samego shaper'a pliki znajdują się w innym miejscu (katalogu). Rozwiązanie doskonale się sprawuje w mojej sieci (SDI i 6 kompów). Ale raczej na sieci powyżej 6 czy 7 komputerów trzeba by dokonać jakiś zmian. Jakich, trudno powiedzieć, jeżeli ktoś chciałby sprawdzić to proszę. Bardziej zawansowani użytkownicy na pewno będą w stanie dostosować skrypt do własnych oczekiwań. Prosiłbym też o UWAGI i OCENY powyższego opracowania problemu. Nawet te krytyczne. Jeżeli ktoś chciałby pomóc, lub podsunąć jakieś rozwiązanie to zapraszam. Zadowolony byłbym także gdyby ktoś posiadający więcej wiedzy ode Mnie usprawnił by owe mechanizmy i przedstawił szerokiemu ogółowi swoje pomysły. POTRZEBA MATKĄ POMYSŁÓW i ROZWIĄZAŃ

UWAGI 

Szary tekst tylko to komentarz ! 

Z uwagi na problemy z kompatybilnością (znak końca linii) nie zaleca się tworzyć plików wykonywalnych w Linuxie pod Windows'em !

Sam shaper w pewnej sytuacji (nieprawidłowa konfiguracja) może spowodować wieszanie się różnych procesów, a nawet samego systemu. Moduł może przy pewnym zbiegu czynników powoduje błędy pamięci. Podczas testowania u siebie, taką sytuację zaobserwowałem !!!

plikologia:

insmod shaper.o shapecfg README.credits README.shaper justice rc_justice justice.hst oraz justice.sh justice.tgz

PODZIĘKOWANIA dla grupy dyskusyjnej  trzepak.freesco, KIPA, MATYZCIECH, JEREMIAN za testy i uwagi



--

 © 2002 - 2003 Robert R "RaaDaaR" - Kopiowanie witryny w całości lub części bez pozwolenia autora zabronione