Jump to content

vlan qos


Тодор Лазаров
 Share

Recommended Posts

Въпроса ми е принципен.

Имам debian router /вярно това е микротик форум, но много от посещаващите използват linux box за роутер/, та схемата ми е.

debian

|

eth0 ---vlan 2 .... vlan20

каде е по правилно да се извърши трафик контрола върху eth0 или на самите vlan-i /реципрочно eth0.2 ... eth0.20/

т.е опашките да са на eth0.2 ... eth0.20 или върху главния интерфейс eth0

Link to comment
Share on other sites

според мен трябва на vlan-ите. по-нататък може да решиш да правиш разлика в/у трафика на влан1-20 a ако направиш на eth0 някакъв шейп то май ще се отрази на всички влани

не знам дали мисля правилно и не искам да си сигурен в мението ми :) така мисля аз и така бих го направил пък не знам дали е правилно

Теория - това е когато знаете всичко, но нищо не работи

Практика - това е когато всичко работи, но не знаете защо

При нас съчетаваме теорията с практиката - НИЩО не работи и нямаме понятие защо!!!

Link to comment
Share on other sites

На eth0 е по-правилно за да е 90-100M max-limit (ceil)-а, за да имаш 100% queue контрол. Само дали е възможно и как ще маркираш трафика който да вкарваш в "опашките" - е Linux въпрос на който не мога да отговоря... Щото трябва да маркираш поотделно пакетите които влизат във всеки VLAN, или може и по VLAN таг, то зависи каква е целта!

Link to comment
Share on other sites

+ IMQ с PREROUTING и POSTROUTING иначе незнам какво ще правиш. И това няма нищо общо с qos, а си те интересува чисто шейпене.

А почне ли един път после сънуваш шейпъри и конфигурации от по N*+ лева.

Link to comment
Share on other sites

t.e. в mangle-to да маркирам пакетите на изходящия за тях vlan-x

а tc да го пусна на главния интерфейс

tc qdisc del  dev eth0 root

tc qdisc add dev eth0 root handle 1: htb

tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbit

tc class add dev eth0 parent 1:1 classid 1:101 htb rate $speed_rate ceil $speed_ceil prio 2

tc qdisc add dev eth0 parent 1:101 handle 101 sfq

tc filter add  dev eth0 parent 1:0 prio 2 protocol ip handle 101 fw flowid 1:101

iptables -t mangle -A POSTROUTING -o vlan-x -d $ip -j MARK --set-mark 1:101

между другото доста изчерпателна картинка как минава трафика

PacketFlow.png

Иначе ми е интерeсна идеята с IMQ-/да се прави queue на входящия интерфейс там където влиза НЕТ-а/ но това не е ли само за up трафика.

Link to comment
Share on other sites

За queue на входящия - Доколкото разбирам е така - там за upload-а ще стане.

rate-а =1000Mbit е по-реалистично да се сетне след тестване на линка. Например теста ще покаже 890Mbit и rate-а трябва да е 889Mbit. Например udp тест в двете посоки като се гледа колко се приема и се счита за максимума възможен да се прекара през интерфейса.

Ако имаш някакъв по-сериозен switch може да прекараш трафика през него и да конфигурираш VLAN-ите и разпределянето на скоростите там, това ще ти остави повече ресурси на тази машина.

Иначе моята логика е такава:

Пример

Имаме (почти) 1000Mbit ceil rate

-- VLAN1 гарантирани 200М максимум - 1000 приоритет 1

-- VLAN2 гарантирани 250М максимум - 1000 приоритет 2

-- VLAN3 гарантирани 150М максимум - 1000 приоритет 3

-- VLAN4 гарантирани 100М максимум - 1000 приоритет 4

-- VLAN5 гарантирани 300М максимум - 1000 приоритет 5

Може да опиташ най-лесния подход за конфигурация и в последствие да опиташ да проследиш качеството на услугата и на разпределянето на скоростта.

Лично аз бих работил с RouterOS за да ми е по-лесно.

А в Lniux форуми нищо не ти пречи да постнеш проблема :)

Link to comment
Share on other sites

Така както си го описал не е много ясна постановката.Колко физически интерфеиса имаш ?.

Шеипнга трябва да се прави на вътрешния интерфеис (lan) за download-a и на външния (wan) за upload-a,ако искаш да предлагаш КАЧЕСТВЕНА услуга.

В случая при теб ако приема, че eth0 e вътрешния интерфейс и на него са ти вдигнати вланите правиш шеипа на самите вланите.

Иначе правилно се се ориентирал към дебиана,леко върви,страхотен network throughput и много инфо за него.

Use since

OpenBSD 3.x

FreeBSD 4.x

Centos 5.x Debian 3.x Ubuntu 7.x

Аз съм фен на OpenWRT.

 

Горчивината от лошото качество остава дълго след като е преминало удоволствието от ниската цена.

_____________________________

___|____|____|____|____|____|__

_|____|____|____|____|____|____

___|____|_ Удряй _|____|____|__

_|____|___ главата ___|____|____

___|____|_ си тук!! |____|____|__

_|____|____|____|____|____|____

___|____|____|____|____|____|__

Link to comment
Share on other sites

Благодаря на всички

от това което разбраш:

1. rate го слагам колко държи интерфейса, като за всеки vlan си слагам определен клас/networkpro/

2. трафик контрола го правя върху vlan-te там където влизат клиентите

3. бягам да взимам ipacct ;)

Link to comment
Share on other sites

Благодаря на всички

от това което разбраш:

1. rate го слагам колко държи интерфейса, като за всеки vlan си слагам определен клас/networkpro/

2. трафик контрола го правя върху vlan-te там където влизат клиентите

3. бягам да взимам ipacct ;)

1. какво ще шейшваш не снана ясно,клиентите във вланите или скоростта на самите влани както си попитал (vlan qos)

2. така шеипаш адреси/киленти които са в този влан

3. ipacct e билинг(система за управление),шейпа ще ти го прави дебиана имаш го

Use since

OpenBSD 3.x

FreeBSD 4.x

Centos 5.x Debian 3.x Ubuntu 7.x

Аз съм фен на OpenWRT.

 

Горчивината от лошото качество остава дълго след като е преминало удоволствието от ниската цена.

_____________________________

___|____|____|____|____|____|__

_|____|____|____|____|____|____

___|____|_ Удряй _|____|____|__

_|____|___ главата ___|____|____

___|____|_ си тук!! |____|____|__

_|____|____|____|____|____|____

___|____|____|____|____|____|__

Link to comment
Share on other sites

Вероятноста да направиш грешка е много голяма.

Първо:

Навлизаш в ниво съвсем разилично от типа краен клинт.

Втора:

Опитните свинчета плащат

Трето:

Има много начини да се постигне един резултат. Ако се държи да спечелиш 1000-2000 лева повече може би интернет доставката не е точно бизнеса, който ти допада. Всъщност шапчка свалям на всеки печлещ..

Link to comment
Share on other sites

Парите ги дава друг фирмата не е моя собственост аз съм администратор ...

Относно shepar-a ще ограничавам клиентите който влизат в тези vlan-и

А че билинга е сладка работа ... това няма спор. Затова е и платен, всяко удовоствие се заплаща.

Link to comment
Share on other sites

3. ipacct e билинг(система за управление),шейпа ще ти го прави дебиана имаш го

Как така само билинг(система за управление)? Според мен е перфектен шейпър...

Wireless is more temperamental & variable than a woman’s mood! ;)
"no matter how hard you try, you just can NOT please everyone"

"където глупостта е образец-там разума е безумие.."Гьоте

Link to comment
Share on other sites

Билинга е система която пускайки пари и правила ги преобразува в shepar и iptables.

Та човека с няколко клика да направи сумати команди, и да не пише синтаксис от рода

Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }

      tc [-force] -batch file

where  OBJECT := { qdisc | class | filter | action | monitor }

      OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] | -b[atch] [file] }

разбира се най общо казано ...

Link to comment
Share on other sites

Всичко е толкова просто.Защо никой не харесва простите неща !

ifconfig_dc0="inet xx.xx.xx.xxx netmask 255.255.255.248"

ifconfig_dc0_alias0="inet xx.xx.xx.xxx netmask 255.255.255.248"

ifconfig_em0="inet 172.16.21.124 netmask 255.255.255.0"

cloned_interfaces="vlan11 vlan22 vlan23 vlan25 vlan26 vlan27 vlan28 vlan29 vlan30 vlan31 vlan32 vlan33 vlan34 vlan35 vlan36 vlan37 vlan38 vlan39 vlan40 vlan41 vlan42 vlan43 vlan44 vlan45 vlan46 vlan47 vlan48 vlan49 vlan50 vlan100"

ifconfig_vlan11="inet 172.16.24.124 netmask 255.255.255.0 vlan 11 vlandev em0"

ifconfig_vlan22="inet 172.16.22.124 netmask 255.255.255.0 vlan 22 vlandev em0"

ifconfig_vlan23="inet 172.16.23.124 netmask 255.255.255.0 vlan 23 vlandev em0"

ifconfig_vlan25="inet 172.16.25.124 netmask 255.255.255.0 vlan 25 vlandev em0"

ifconfig_vlan26="inet 172.16.26.124 netmask 255.255.255.0 vlan 26 vlandev em0"

ifconfig_vlan27="inet 172.16.27.124 netmask 255.255.255.0 vlan 27 vlandev em0"

ifconfig_vlan28="inet 172.16.28.124 netmask 255.255.255.0 vlan 28 vlandev em0"

ifconfig_vlan29="inet 172.16.29.124 netmask 255.255.255.0 vlan 29 vlandev em0"

ifconfig_vlan30="inet 172.16.30.124 netmask 255.255.255.0 vlan 30 vlandev em0"

ifconfig_vlan31="inet 172.16.31.124 netmask 255.255.255.0 vlan 31 vlandev em0"

ifconfig_vlan32="inet 172.16.32.124 netmask 255.255.255.0 vlan 32 vlandev em0"

ifconfig_vlan33="inet 172.16.33.124 netmask 255.255.255.0 vlan 33 vlandev em0"

ifconfig_vlan34="inet 172.16.34.124 netmask 255.255.255.0 vlan 34 vlandev em0"

ifconfig_vlan35="inet 172.16.35.124 netmask 255.255.255.0 vlan 35 vlandev em0"

ifconfig_vlan36="inet 172.16.36.124 netmask 255.255.255.0 vlan 36 vlandev em0"

ifconfig_vlan37="inet 172.16.37.124 netmask 255.255.255.0 vlan 37 vlandev em0"

ifconfig_vlan38="inet 172.16.38.124 netmask 255.255.255.0 vlan 38 vlandev em0"

ifconfig_vlan39="inet 172.16.39.124 netmask 255.255.255.0 vlan 39 vlandev em0"

ifconfig_vlan40="inet 172.16.40.124 netmask 255.255.255.0 vlan 40 vlandev em0"

ifconfig_vlan41="inet 172.16.41.124 netmask 255.255.255.0 vlan 41 vlandev em0"

ifconfig_vlan42="inet 172.16.42.124 netmask 255.255.255.0 vlan 42 vlandev em0"

ifconfig_vlan43="inet 172.16.43.124 netmask 255.255.255.0 vlan 43 vlandev em0"

ifconfig_vlan44="inet 172.16.44.124 netmask 255.255.255.0 vlan 44 vlandev em0"

ifconfig_vlan45="inet 172.16.45.124 netmask 255.255.255.0 vlan 45 vlandev em0"

ifconfig_vlan46="inet 172.16.46.124 netmask 255.255.255.0 vlan 46 vlandev em0"

ifconfig_vlan47="inet 172.16.47.124 netmask 255.255.255.0 vlan 47 vlandev em0"

ifconfig_vlan48="inet 172.16.48.124 netmask 255.255.255.0 vlan 48 vlandev em0"

ifconfig_vlan49="inet 172.16.49.124 netmask 255.255.255.0 vlan 49 vlandev em0"

ifconfig_vlan50="inet 172.16.50.124 netmask 255.255.255.0 vlan 50 vlandev em0"

ifconfig_vlan100="inet 172.16.100.124 netmask 255.255.255.0 vlan 100 vlandev em0"

............

ipfw='/sbin/ipfw -q'

net22='172.16.22.0/24'

net23='172.16.23.0/24'

net24='172.16.24.0/24'

net25='172.16.25.0/24'

net26='172.16.26.0/24'

net27='172.16.27.0/24'

net29='172.16.29.0/24'

net28='172.16.28.0/24'

net30='172.16.30.0/24'

net31='172.16.31.0/24'

net32='172.16.32.0/24'

net33='172.16.33.0/24'

net34='172.16.34.0/24'

net35='172.16.35.0/24'

net36='172.16.36.0/24'

net37='172.16.37.0/24'

net38='172.16.38.0/24'

net39='172.16.39.0/24'

net40='172.16.40.0/24'

net41='172.16.41.0/24'

net42='172.16.42.0/24'

net43='172.16.43.0/24'

net44='172.16.44.0/24'

net45='172.16.45.0/24'

net46='172.16.46.0/24'

net47='172.16.47.0/24'

net48='172.16.48.0/24'

net49='172.16.49.0/24'

net50='172.16.50.0/24'

net100='172.16.100.0/24'

${ipfw} -f table 5 flush

${ipfw} table 5 add ${net22}

${ipfw} table 5 add ${net23}

${ipfw} table 5 add ${net24}

${ipfw} table 5 add ${net25}

${ipfw} table 5 add ${net26}

${ipfw} table 5 add ${net27}

${ipfw} table 5 add ${net28}

${ipfw} table 5 add ${net29}

${ipfw} table 5 add ${net30}

${ipfw} table 5 add ${net31}

${ipfw} table 5 add ${net32}

${ipfw} table 5 add ${net33}

${ipfw} table 5 add ${net34}

${ipfw} table 5 add ${net35}

${ipfw} table 5 add ${net36}

${ipfw} table 5 add ${net37}

${ipfw} table 5 add ${net38}

${ipfw} table 5 add ${net39}

${ipfw} table 5 add ${net40}

${ipfw} table 5 add ${net41}

${ipfw} table 5 add ${net42}

${ipfw} table 5 add ${net43}

${ipfw} table 5 add ${net44}

${ipfw} table 5 add ${net45}

${ipfw} table 5 add ${net46}

${ipfw} table 5 add ${net47}

${ipfw} table 5 add ${net48}

${ipfw} table 5 add ${net49}

${ipfw} table 5 add ${net50}

${ipfw} table 5 add ${net100}

ifout='dc0'    

iflocal23='vlan23'

iflocal26='vlan26'

iflocal22='vlan22'

iflocal24='vlan11'

iflocal25='vlan25'

iflocal27='vlan27'

iflocal28='vlan28'

iflocal29='vlan29'

iflocal30='vlan30'

iflocal31='vlan31'

iflocal32='vlan32'

iflocal33='vlan33'

iflocal34='vlan34'

iflocal35='vlan35'

iflocal36='vlan36'

iflocal37='vlan37'

iflocal38='vlan38'

iflocal39='vlan39'

iflocal40='vlan40'

iflocal41='vlan41'

iflocal42='vlan42'

iflocal43='vlan43'

iflocal44='vlan44'

iflocal45='vlan45'

iflocal46='vlan46'

iflocal47='vlan47'

iflocal48='vlan48'

iflocal49='vlan49'

iflocal50='vlan50'

iflocal100='vlan100'

${ipfw} -f flush

${ipfw} -f pipe flush

${ipfw} pipe 1 config bw 3Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 2 config bw 3Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 3 config bw 3Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 4 config bw 3Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 5 config bw 3Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 6 config bw 3Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 7 config bw 3Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 8 config bw 3Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 9 config bw 7Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 10 config bw 7Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 11 config bw 3Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 12 config bw 3Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 13 config bw 64Kbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 14 config bw 64Kbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 15 config bw 128Kbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 16 config bw 64Kbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 17 config bw 256Kbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 18 config bw 256Kbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 19 config bw 3000Kbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 20 config bw 3000Kbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 21 config bw 512Kbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 22 config bw 256Kbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 23 config bw 7Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 24 config bw 7Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 25 config bw 7Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 26 config bw 7Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 27 config bw 7Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 28 config bw 7Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 29 config bw 7Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 30 config bw 7Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} pipe 31 config bw 3Mbit/s mask dst-ip 0XFFFFFFFF

${ipfw} pipe 32 config bw 3Mbit/s mask src-ip 0XFFFFFFFF

${ipfw} add 20 check-state

${ipfw} add 25 allow ip from any to any via lo0

${ipfw} add 30 allow ip from me to any keep-state

${ipfw} add 35 allow all from any to any 2350

${ipfw} add 40 allow ip from "table(5)" to "table(5)"

${ipfw} add 50 allow ip from any to me 6666,6667,6668,6669,6670

${ipfw} add 200 deny ip from "table(5)" to any 25,110,143

${ipfw} add 220 deny ip from not ${net22} to any via ${iflocal22} in

${ipfw} add 220 deny ip from not ${net23} to any via ${iflocal23} in

${ipfw} add 220 deny ip from not ${net24} to any via ${iflocal24} in

${ipfw} add 220 deny ip from not ${net25} to any via ${iflocal25} in

${ipfw} add 220 deny ip from not ${net26} to any via ${iflocal26} in

${ipfw} add 220 deny ip from not ${net27} to any via ${iflocal27} in

${ipfw} add 220 deny ip from not ${net28} to any via ${iflocal28} in

${ipfw} add 220 deny ip from not ${net29} to any via ${iflocal29} in

${ipfw} add 220 deny ip from not ${net30} to any via ${iflocal30} in

${ipfw} add 220 deny ip from not ${net31} to any via ${iflocal31} in

${ipfw} add 220 deny ip from not ${net32} to any via ${iflocal32} in

${ipfw} add 220 deny ip from not ${net33} to any via ${iflocal33} in

${ipfw} add 220 deny ip from not ${net34} to any via ${iflocal34} in

${ipfw} add 220 deny ip from not ${net35} to any via ${iflocal35} in

${ipfw} add 220 deny ip from not ${net36} to any via ${iflocal36} in

${ipfw} add 220 deny ip from not ${net37} to any via ${iflocal37} in

${ipfw} add 220 deny ip from not ${net38} to any via ${iflocal38} in

${ipfw} add 220 deny ip from not ${net39} to any via ${iflocal39} in

${ipfw} add 220 deny ip from not ${net40} to any via ${iflocal40} in

${ipfw} add 220 deny ip from not ${net41} to any via ${iflocal41} in

${ipfw} add 220 deny ip from not ${net42} to any via ${iflocal42} in

${ipfw} add 220 deny ip from not ${net43} to any via ${iflocal43} in

${ipfw} add 220 deny ip from not ${net44} to any via ${iflocal44} in

${ipfw} add 220 deny ip from not ${net45} to any via ${iflocal45} in

${ipfw} add 220 deny ip from not ${net46} to any via ${iflocal46} in

${ipfw} add 220 deny ip from not ${net47} to any via ${iflocal47} in

${ipfw} add 220 deny ip from not ${net48} to any via ${iflocal48} in

${ipfw} add 220 deny ip from not ${net49} to any via ${iflocal49} in

${ipfw} add 220 deny ip from not ${net50} to any via ${iflocal50} in

${ipfw} add 220 deny ip from not ${net100} to any via ${iflocal100} in

Use since

OpenBSD 3.x

FreeBSD 4.x

Centos 5.x Debian 3.x Ubuntu 7.x

Аз съм фен на OpenWRT.

 

Горчивината от лошото качество остава дълго след като е преминало удоволствието от ниската цена.

_____________________________

___|____|____|____|____|____|__

_|____|____|____|____|____|____

___|____|_ Удряй _|____|____|__

_|____|___ главата ___|____|____

___|____|_ си тук!! |____|____|__

_|____|____|____|____|____|____

___|____|____|____|____|____|__

Link to comment
Share on other sites

ето и моя script:

#!/bin/bash

client_file='client.txt'

ip_file='ip.txt'

iptables -t mangle -F

iptables -t nat -F

out_int='eth1'

out_ip='213.91.178.2'

echo "Master interfaces - start"

tc qdisc del dev eth0 root

tc qdisc add dev eth0 root handle 1: htb default 1001

tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbit

flowid=100

while read line_client; do

   #Read client name

   client_name=$(echo $line_client | awk -F : '{print $1}')

   speed=$(echo $line_client | awk -F : '{print $2}')

   device=$(echo $line_client | awk -F : '{print $3}')

   block=$(echo $line_client | awk -F : '{print $4}')

   if [ $block != "down" ]; then

       flowid=`expr $flowid + 1`

       echo "User:$client_name - Traffic QOS speed:$speed interface:$device"

       tc class add dev $device parent 1:1 classid 1:$flowid htb rate $speed ceil $speed burst 25k prio 2

       tc qdisc add dev $device parent 1:$flowid handle $flowid sfq perturb 10

       tc filter add dev $device parent 1:0 prio 2 protocol ip handle $flowid fw flowid 1:$flowid

       iptables -t nat -F $client_name

       iptables -t nat -X $client_name

       iptables -t nat -N $client_name

       #Read ip,speed,nat

       while read line_ip; do

           if [ $client_name = $(echo $line_ip | awk -F : '{print $1}') ]; then

               ip=$(echo $line_ip | awk -F : '{print $2}')

               nat=$(echo $line_ip | awk -F : '{print $4}')

               echo "  Match $ip"

               if [ $ip != "" ]; then

                   #tc filter add dev $device protocol ip parent 1:0 prio 1 u32 match ip dst $ip flowid 1:$flowid

                   iptables -t mangle -A POSTROUTING -d $ip -j MARK --set-mark $flowid

               fi

               if [ $nat = "nat" ]; then

                   #iptables -t nat -A POSTROUTING -s $ip -o $out_int -j SNAT --to $out_ip

                   iptables -t nat -A $client_name -s $ip -j SNAT --to $out_ip

               fi

           fi

       done < $ip_file

       iptables -A POSTROUTING -t nat -o $out_int -j $client_name

   else

       echo "User:$client_name block"

   fi

done < $client_file

iptables -A POSTROUTING -t nat -o $out_int -j SNAT --to $out_ip

client.txt

-------------------------------------------

devin-iliq:512Kbit:eth0:up

devin-gorsko:512Kbit:eth0:down

....

-------------------------------------------

ip.txt

-------------------------------------------

devin-iliq:192.168.214.7:512Kbit:nat

devin-iliq:192.168.214.8:512Kbit:nat

....

-------------------------------------------

нищо осебено но облекчава ..

не съм спец на bash но ми върши работа.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.