# Lista zmian

## [NiceShaper 1.0 04.07.2013r.]

W odróżnieniu od wersji 0.6 która nigdy nie uzyskała oficjalnie statusu stabilnej, linia 1.0 doczekała się tylko jednego Release Candidate a na dodatek lista poprawek jest niezwykle skromna. Zatem - zapraszam do pobierania!

Usunięte problemy:

- Wyeliminowanie zbędnych komunikatów "RTNETLINK error: No such file or directory", występujących w trakcie wyłączania NiceShapera, gdy dwie lub więcej sekcji współdzieli interfejs.

## [NiceShaper 1.0rc1 06.06.2013r.]

Pierwsze wydanie Release Candidate, brak tu tak znaczących zmian jak w czterech ostatnich wydaniach, celem jest uzyskanie stabilnej wersji 1.0.

Usunięte problemy:

- By zapobiec ścinaniu ruchu przy starcie, wprowadzony został mechanizm dwuetapowej inicjalizacji kolejki domyślnej w htb. W pierwszym kroku kolejka ta otrzymuje przepustowość równą sumie prędkości sekcji na interfejsie. Właściwa wartość iface fallback-rate nadawana jest gdy każda z sekcji przeładuje się przynajmniej jednokrotnie.
- Wprowadzenie poprawnego mnożnika dla jednostek w układzie SI, wzorem iproute kb/s to 1000 a nie 1024 bity na sekundę, analogicznie dla pozostałych przedrostków.
- Poprawka problemu zmniejszania wartości ceil klasy typu wrapper jeśli wartość ta jest większa od przepustowości sekcji.
- Poprawka problemu nieuruchamiania się pliku binarnego skompilowanego dla architektury 64 bitowej. Poprawkę wprowadzono pół-oficjalnie do wydania 1.0pre4 w dwa dni po publikacji.
- Usunięcie ostrzeżeń kompilacji "warning: comparison between signed and unsigned integer expressions".

Statystyki:

- Uporządkowanie kodu odpowiedzialnego za funkcjonalności odczytywania statystyk w trakcie działania NiceShapera oraz automatyczne zrzucanie ich do pliku.
- Zabezpieczenie dostępu do statystyk za pomocą hasła losowanego przy każdym uruchomieniu NiceShapera. Nie wymaga ustawienia i posługiwania się hasłem jeśli niceshaper stats uruchamiany jest na tej samej maszynie na której działa NiceShaper.
- Wprowadzenie parametru stats password oraz uruchomieniowego stats --password dla zabezpieczenia zdalnego odczytywania statystyk.
- Wprowadzenie parametru stats rewrite umożliwiającego ustalenie częstotliwości automatycznego zrzucania statystyk do pliku. Jak się okazuje pojawiały się głosy że domyślne 30 sekund to zbyt rzadkie odświeżanie tego pliku.

Inne:

- Drobne poprawki w dokumentacji.

## [NiceShaper 1.0pre4 01.05.2013r.]

To już ostatnie wydanie pre-release, więc i ostatnie zawierające tak fundamentalne zmiany. Kolejne aż do stabilnego 1.0, będą wydaniami rc zawierającymi wyłącznie poprawki i drobne ulepszenia. Tym razem najważniejszą zmianą jest, usunięcie z kontrolowanych interfejsów nadrzędnej dla wszystkich innych, kolejki HTB o przepustowości 1Gb/s. Co niestety w połączeniu z wydaje się błędnym zaniżaniem burst dla klas o przepustowości przewyższającej 100Mb/s, przez algorytmy iproute, powodowało problemy z wysyceniem dużych łącz. Nową architekturę najlepiej obrazuje dodany do dokumentacji diagram HTB. W skrócie na każdym kontrolowanym interfejsie pojawiają się niezależne kolejki nadrzędne, dla każdej z występujących na nim sekcji, kolejka domyślna o bardzo niskiej przepustowości dla niezakwalifikowanego do klas ruchu oraz kolejka dla klas typu do-not-shape oraz wrapper. Z tym że ta ostatnia, tylko jeśli jest potrzebna. Więcej informacji we wspomnianym diagramie oraz w opisie nowej dyrektywy sekcji globalnej - iface.

Usunięte problemy:

- w niektórych przypadkach inicjalizacja za pomocą iptables-save|iptables-restore kończyła się niepowodzeniem. Usunięto ten problem i dodatkowo wprowadzono dokładniejsze informowanie o błędach, jeśli wystąpią na tym etapie.

Dodane opcje:

- dodanie dyrektywy iface-<iface> {speed|do-not-shape-method|fallback-rate}.
- wprowadzenie parametrów sekcji: section {htb-burst|htb-cburst}.
- wprowadzenie parametrów klas: htb {burst|cburst}.

Dokumentacja:

- dodanie do dokumentacji diagramu htb.png.
- uaktualnienie tutoriala.
- uaktualnienia w opisach instalacji plików edytorów.

Pozostałe zmiany:

- uaktualnienie i rozwinięcie podświetlania składni plików konfiguracyjnych w Vimie oraz w małym stopniu w Midnight Commanderze.
- dodanie do pakietu tar.bz2 skryptów startowych dla Debiana i CentOS, dostarczanych już wczesniej z pakietami binarnymi dla tych dystrybucji. Skrypty te mają szansę zadziałać również w innych podobnych dystrybucjach.

## [NiceShaper 1.0pre3 26.02.2013r.]

Wprowadzono inicjalizacje reguł iptables za pomocą poleceń iptables-save oraz iptables-restore. Dzięki tej zmianie włączenie NiceShapera trwa ułamek sekundy, co szczególnie odczuwalne jest przy dużej liczbie klas.

## [NiceShaper 1.0pre2 9.02.2013r.]

W tej wersji najważniejszą nowa funkcjonalnością są wyzwalacze (triggery).
Wyzwalacze są mechanizmem umożliwiającym automatyczną zmianę wartości niektórych parametrów klasy po zaistnieniu określonych zdarzeń. Na początek zaimplementowane zostały 2 wyzwalacze - alter oraz quota.
Wyzwalacz alter pozwala na zmianę parametrów o określonych porach dnia, umożliwia np. zwiększenie przydzielonego pasma w porze nocnej.
Wyzwalacz quota kontroluje ilość pobranych danych i generuje reakcje w oparciu o 3 liczniki: dzienny, tygodniowy oraz miesięczny.
Na potrzeby wyzwalacza quota wymagane jest utworzenie katalogu /var/lib/niceshaper, jest on niezbedny do przechowywania wartości liczników pomiędzy uruchomieniami NiceShapera. Po wszelkie szczegóły odsyłam do dokumentacji.

Usunięte problemy:

- proces kontrolujący sekcje zawieszał się gdy przeładowanie sekcji trwało dłużej od wartości parametru reload. Najczęściej problem pojawiał się w trakcie inicjalizacji sekcji, zawierających dużą liczbę klas.
- ze względu na pojawiającego się konflikty w dostępie do iptables, NiceShaper rozpoczyna swoją pracę dopiero po skończonej inicjalizacji przez wszystkie sekcje.
- usunięto poważny problem nieoddawania pasma gdy przydzielone klasie pasmo, ścięte zostało do wartości równej wartości parametru low.
- w wersji 1.0pre1 plik statystyk nie był wypełniany statystykami klas.
- usunięto problem kompilacji przez GCC w wersji 4.7, oraz kilka warningów.

Pozostałe zmiany:

- teraz plik statystyk odświeżany jest nie częściej niż co 30 sekund, zbyt częste odświeżanie pliku generowało zbędne obciążenie operacjami dyskowymi.
- rozszerzono w dokumentacji opis markowania pakietów.

## [NiceShaper 1.0pre1 31.05.2012r.]

Najważniejsza wprowadzona zmiana to zastąpienie uruchomień komendy tc bezpośrednią komunikacją z kernelem. Komunikacja odbywa się za pomocą mechanizmu netlink. Dzięki temu zabiegowi czas trwania i obciążenie generowane przez przeliczanie i rekonfigurowanie regułek HTB, to ułamki dotychczasowych wartości.
Co najważniejsze wraz ze wzrostem liczby klas zysk jest coraz większy, nakład czasu procesora wraz ze wzrostem liczby operacji która jest pochodną liczby klas nie zwielokrotnia się.
Niestety nie dotyczy to esfq który ze względu na zamieszanie z patchami jest problematyczny w obsłudze tą metodą.
Sam nie używam esfq więc chętnie przyjmę spójny opis całego zamieszania który pomoże mi w opracowaniu satysfakcjonującego rozwiązania.
W przypadku problemów do tradycyjnego wywoływania komendy tc można wrócić za pomocą dyrektywy sekcji globalnej fallback iproute.

Zmiany w konfiguracji:

- domyślne położenie konfiguracji przeniesiono do katalogu /etc/niceshaper, a pliki konfiguracyjne mają teraz rozszerzenie .conf.
- dyrektywa include obsługuje ścieżki absolutne, oraz relatywne do katalogu konfiguracyjnego confdir.
- z rożnych powodów a szczególnie obsługi hosta lokalnego wraca dyrektywa mode {download|upload}, opcjonalnie iptables hook pozwala nadpisać uchwyt w iptables nie wpływając na inne ustanowione przez mode parametry.
- iptables [hook|append-hook|insert-hook] to teraz: iptables hook {PREROUTING|POSTROUTING} oraz iptables hook-mode {insert|append}.
- usunięto dyrektywę iface sekcji, teraz wystarczające są standardowe filtry dyrektywy match.
- uporządkowano kwestie dyrektyw i parametrów przyjmujących wartości tak/nie. Obowiązują tylko yes oraz no. true to teraz yes, false i none to teraz no.
- sekcje wzorem klas nie muszą być zamykane. Kończą się one wraz z rozpoczęciem kolejnej sekcji lub zakończeniem pliku konfiguracyjnego.
- NiceShaper był zbyt liberalny odnośnie akceptowanych zapisów jednostek przepustowości, zostało to uporządkowane. jednostyki przepustowości uzyte w konfiguracji są konwertowane na jednolitą notację lub całkowicie odrzucane.
- typ klasy ustalany jest za pomocą dyrektywy type {standard-class|do-not-shape|virtual|wrapper}.

Statystyki:

- kolejna przyjemna funkcjonalność. Niceshaper stats komunikuje się z uruchomionym procesem niceshapera za pomocą protokołu TCP/IP. Dzięki temu możliwa jest obsługa parametrów wskazywanych w linii poleceń oraz zdalne odczytywanie statystyk. Już nie trzeba przekonfigurowywać i restartować NiceShapera żeby chociażby zmienić jednostkę wyświetlanych statystyk. Domyślnie NiceShaper nasłuchuje wyłącznie na localhoscie, dyrektywa stats listen zmienia to zachowanie i umożliwia zdalne odczytywanie statystyk.
Uwaga!! Kod jest w bardzo świeżej wersji, w przyszłości zostanie zaimplementowane szyfrowanie transmisji oraz autoryzacja hasłem. W tej chwili trzeba mieć na uwadze że uruchomienie zdalnych statystyk może prowadzić do ich przechwycenia.
- dodano wartosci section shape do statystyk.
- dodano do statystyk kolumnę prev-ceil, gdyż para ceil i prev-utilize było myląca.

Pozostałe zmiany:

- uporządkowano od strony dokumentacji (przepisano cały rozdział) oraz kodu zagadnienie kontroli transferów własnych routera. Dyrektywy from localhost i to localhost zostały usunięte na rzecz from-local i to-local.
- poprawiono proces deamonizacji.
- procesy NiceShapera ładnie przedstawiają się na liście procesów komendy ps:)
- uporządkowano sprawę pliku użytkowników (users). Dodano możliwość użycia pliku użytkowników zamiast pliku klas.
- kolejka root inicjowana na interfejsach ma 1000mbit. Wcześniejsze 100mbit ograniczało transfery lokalne na interfejsach gigabitowych.

## [NiceShaper 0.6rc8 08.04.2011r.]

- usunięto wprowadzony w wersji 0.6rc7 błąd skutkujący zgłaszaniem interfejsów imq jako niepoprawnych.
- usunięto błąd kompilacji występujący w pewnych wersjach gcc, przy braku włączonego pliku nagłówkowego .

## [NiceShaper 0.6rc7 16.11.2010r.]

- poprawki umożliwiające kompilacje pod gcc w wersji 4.4.
- zastąpienie funkcji validDev ulepszoną wersją.
Sprawdzanie poprawności podanych interfejsów sieciowych odbywa się na podstawie ich stanu w systemie, w momencie uruchamiania. - poprawiono działanie klasy typu virtual.

## [NiceShaper 0.6rc6 10.08.2008r.]

- poprawki umożliwiające kompilacje pod gcc w wersji 4.3.
- rozszerzenie szerokosci kolumny statystyk.
- usuniecie obsługi przestarzalych dyrektyw, support oraz iptables return.
- przywrócenie działania uproszczonej wersji dyrektywy iface.
- akceptowany jest interfejs ppp+.

## [NiceShaper 0.6rc5 07.06.2008r.]

Jako że zbliża się czas na wydanie stabilnego następcy NiceShapera 0.6, głównym obiektem prac nad tą wersją była jakość kodu, przełożyło się to na zwiększenie stabilności, skuteczności podziału łącza, oraz zmniejszenie obciążenia generowanego przez program. Ilość łatek składajacych sie na to wydanie była największą z dotychczasowych wersji testowych.

Tak więc, zmiany bezpośrednio zauważalne dla użytkowania programu przedstawiającą się następująco:

Usunięte problemy:

- przy klasach z wieloma filtrami używających markowania tylko pierwszy filtr był wprowadzany do tc.
- nowa dyrektywa log. Obsługuje sysloga, wskazany plik logów oraz ekran terminala (tylko w czasie inicjalizacji).
- poprawiony problem z odczytem iptables return.
- niepoprawnie czytane były znaczniki markowania pakietów, podawane w formie szesnastkowej 0xNUMER.
- po dłuższym czasie działania, pojawiało się opóźnienie w statystykach.
- jeśli w sekcji było kilka aliasów tego samego interfejsu były one źle odczytywane, co skutkowało niepotrzebnymi komunikatami błędów zgłaszanymi przez program tc przy starcie.
- usunięto problem z pojawianiem się bardzo wysokich rate zaraz po starcie programu oraz w momencie włączania klas.
- usunieto kilka drobnych potencjalnych wycieków pamięci.
- usunieto ryzyka niepoprawnej inicjalizacji klasy przy nikłym ruchu na łączu.
- oczyszczenie i usprawnienie kodu komunikacji miedzyprocesowej.
- oparcie żądania przekazania statystyk o sygnały systemowe, zamiast o plik flagi, którego obecność była sprawdzana co pewien interwał czasowy co jest niedopuszczalne. Było to rozwiązanie wprowadzone jako chwilowe a zostało na dłużej. Poza usunieciem niepotrzebnych operacji dyskowych poprawka ta mocno zwiększyła responsywność statystyk.

Pozostałe zmiany:

- kontrola konfiguracji jest teraz bardzo restrykcyjna.
- dyrektywy oznaczone w poprzednich wydaniach rc jako przestarzałe, zostały usunięte z programu.
- dyrektywa support mark-on nazywa się teraz mark-on-ifaces.
- wykrycie uszkodzenia łańcuchów iptables NiceShapera, skutkuje natychmiastowym wyłączeniem się programu.
- sprawdzane jest wskazanie protokołu oraz czy klasa podlega markowaniu pakietów jeśli filtr tego wymaga.
- dodano obsługę filtra length.
- dodano obsługę negacji filtrów sport/dport/srcip/dstip.
- jako zakończenie każdej z sekcji wystarczy znacznik: "".
- wprowadzono możliwość komentowania całych bloków plików konfiguracyjnych, tak jak to ma miejsce w większości języków programowania (np./* */ w C/C++), przez znaczniki <# komentarz #>.
- dodano dyrektywe iptables target w miejsce iptables-return - możliwość określenia celu filtra na ACCEPT, RETURN lub nawet DROP. (DROP może być przydatne chociażby jako szybka i prosta blokada zalegających z opłatami klientów, szczególnie wygodna dla konfiguracji generowanych automatycznie). - w statystykach pojawia się przybliżona suma wykorzystania pasma przez całą sekcje, możliwe jest także konfigurowanie statystyk poprzez nową dyrektywe stats classes {all|active|working|false} sum {top|bottom|false}.
- domyślne pliki konfiguracyjne maja teraz końcówkę .ns, dodałem niedopracowany jeszcze niceshaper.syntax dla mc, pomoc w jego rozbudowie mile widziana.
- powróciła dyrektywa strict znana z poprzedniej stabilnej wersji NiceShapera.