Поиск по этому блогу

27.01.2011

Переименование политик и классов

Про переименование политик я читал уже давно и вот решил поэкспериментировать еще и с классами. Попутно будут отслеживаться индексы объектов cbQos, которые будут опрашиваться скриптом по snmp.



Имеется некоторая тестовая политика:
router#sh policy-map NAME1
Policy Map NAME1
Class TEST1
police cir 10000000 bc 312500
conform-action transmit
exceed-action drop
Опрос скриптом показал, что ей индекс не присваивается до тех пор, пока она не будет прописана на интерфейсе:
router(config)#interface GigabitEthernet0/0.100
router(config-subif)#service-policy output NAME1
router(config-subif)#exit
Вывод скрипта:
[root@mg ~/bin]# ./cbqos4.py -c public -d 10.10.10.10
cbQosPolicyIndex.cbQosObjectsIndex Policy Name. Take QosObjectsIndex index as -k argument
1170.1170 NAME1
[root@mg ~/bin]# ./cbqos4.py -c public -d 10.10.10.10 -k 1170
cbQosPolicyIndex.cbQosObjectsIndex Description
1170.9984706 matchStatement named:Match dscp af41 (34)
1170.1170 policymap named:NAME1
1170.9895827 police
1170.7082977 classmap named:class-default match:matchAny
1170.15757298 matchStatement named:Match any
1170.9263201 classmap named:TEST1 match:matchAll
Индекс политики - 1170, а индекс класса - 9263201. Теперь переименование:
router(config)#class-map TEST1
router(config-cmap)#rename TEST2
Вывод скрипта показывает, что изменился индекс класса, а так же изменились индексы, для которых класс являлся родительским:
[root@mg ~/bin]# ./cbqos4.py -c public -d 10.10.10.10 -k 1170
cbQosPolicyIndex.cbQosObjectsIndex Description
1170.1170 policymap named:NAME1
1170.467026 matchStatement named:Match dscp af41 (34)
1170.9263217 classmap named:TEST2 match:matchAll
1170.10313619 police
1170.15757298 matchStatement named:Match any
1170.7082977 classmap named:class-default match:matchAny
Далее переименовывается политика:
router(config)#policy-map NAME1
router(config-pmap)#rename NAME2
Вывод скрипта показывает, что изменений не произошло:
[root@mg ~/bin]# ./cbqos4.py -c public -d 10.10.10.10
cbQosPolicyIndex.cbQosObjectsIndex Policy Name. Take QosObjectsIndex index as -k argument
1170.1170 NAME2
[root@mg ~/bin]# ./cbqos4.py -c public -d 10.10.10.10 -k 1170
cbQosPolicyIndex.cbQosObjectsIndex Description
1170.1170 policymap named:NAME2
1170.467026 matchStatement named:Match dscp af41 (34)
1170.9263217 classmap named:TEST2 match:matchAll
1170.10313619 police
1170.15757298 matchStatement named:Match any
1170.7082977 classmap named:class-default match:matchAny

Отмечу, что переименование происходит легко, но может отразиться на мониторинге, так как переименованный класс меняет свои индекс. А вообще, для мониторинга параметров следует сохранять в nvram не только индексы интерфейсов, но и индексы cbqos:
snmp-server ifindex persist
snmp mib persist cbqos

21.01.2011

Субъективно о MLPPP, MFR

Существуют технологии объединения нескольких каналов Е1 для увеличения суммарной пропускной способности. Задача заключается в создании логического интерфейса на который можно было бы "повесить" QoS политику с классами для приоритезации трафика.

В ходе испытаний выяснились следующие факты:
- логические интерфейсы Multilink (MLPPP) и MFR используют в качестве собственного параметра пропускной способности сумму активных каналов.
router#sh ppp multilink

Multilink1
Bundle name: x
Remote Endpoint Discriminator: [1] x
Local Endpoint Discriminator: [1] x
Bundle up for 06:52:27, total bandwidth 3968, load 123/255
Receive buffer limit 24000 bytes, frag timeout 1000 ms
[skip]
Member links: 2 active, 0 inactive (max not set, min not set)
Se6/0.1/2/7/1:0, since 06:52:28
Se6/0.1/2/7/3:0, since 06:52:28
No inactive multilink interfaces

router#sh frame-relay multilink
Bundle: MFR1, State = up, class = A, fragmentation disabled
BID = MFR1
Bundle links:
Serial3/0:0, HW state = up, link state = Up, LID = Serial3/0:0

router#sh int mu1
Multilink1 is up, line protocol is up
...
MTU 1500 bytes, BW 3968 Kbit/sec, DLY 100000 usec,
reliability 255/255, txload 198/255, rxload 55/255
Encapsulation PPP, LCP Open, multilink Open
Open: IPCP, CDPCP, OSICP, loopback not set
Keepalive set (10 sec)
DTR is pulsed for 2 seconds on reset
Last input 00:00:00, output never, output hang never
Last clearing of "show interface" counters 05:38:05
Input queue: 0/75/186/0 (size/max/drops/flushes); Total output drops: 3861
Queueing strategy: Class-based queueing
Output queue: 0/1000/0 (size/max total/drops)
30 second input rate 863000 bits/sec, 1386 packets/sec
30 second output rate 3083000 bits/sec, 1540 packets/sec
23915860 packets input, 2731244914 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
24033895 packets output, 307154118 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 unknown protocol drops
0 output buffer failures, 0 output buffers swapped out
0 carrier transitions

router#sh int mfr1
MFR1 is up, line protocol is up
Hardware is Multilink Frame Relay bundle interface
MTU 1546 bytes, BW 1984 Kbit/sec, DLY 20000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation FRAME-RELAY, loopback not set
Keepalive set (10 sec)
DTR is pulsed for 2 seconds on reset
LMI enq sent 5, LMI stat recvd 0, LMI upd recvd 0
LMI enq recvd 1649, LMI stat sent 1639, LMI upd sent 0, DCE LMI up
LMI DLCI 1023 LMI type is CISCO frame relay DCE
FR SVC disabled, LAPF state down
Broadcast queue 0/64, broadcasts sent/dropped 265/0, interface broadcasts 0
Last input 00:00:09, output never, output hang never
Last clearing of "show interface" counters 04:34:24
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/120 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
25694 packets input, 5677592 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
21339 packets output, 25506922 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 unknown protocol drops
0 output buffer failures, 0 output buffers swapped out
0 carrier transitions

router#sh int mfr1.100
MFR1.100 is up, line protocol is up
Hardware is Multilink Frame Relay bundle interface
...
MTU 1546 bytes, BW 1984 Kbit/sec, DLY 20000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation FRAME-RELAY
- политика, применяемая к интерфейсу Multilink, должна содержать %%, а не фиксированную полосу. В противном случае, максимальная полоса для применения политики, кроме класса по-умолчанию, где полоса не задается, будет ограничена одним потоком, т.е. 1984кбит/с в данном случае. Пример политики:
router#sh policy-map E1-MLPPP
Policy Map E1-MLPPP
Class VOICE
priority 25 (%)
Class SIGNALING
priority 2 (%)
Class TRANSACTION
bandwidth 30 (%)
Class ROUTING
bandwidth 1 (%)
Class VIDEO
bandwidth 31 (%)
Class class-default
fair-queue
packet-based wred, exponential weight 9

dscp min-threshold max-threshold mark-probablity
----------------------------------------------------------
default (0) - - 1/10

router#sh run int mu1
Building configuration...

Current configuration : 292 bytes
!
interface Multilink1
...
ppp multilink
ppp multilink group 1
ppp multilink fragment disable
service-policy output E1-MLPPP
end
- политика, применяемая в классе для MFR, основывается только на той полосе, которая указана как CIR. Поэтому можно задать полосы для классов как будто имеется два рабочих Е1, вместо реально работающего одного.
router#sh policy-map E1-MFR
Policy Map Serial
Class VOICE
priority 900 (kbps)
Class SIGNALING
bandwidth 80 (kbps)
Class TRANSACTION
bandwidth 100 (kbps)
Class ROUTING
bandwidth 50 (kbps)
Class VIDEO
priority 1300 (kbps)
Class class-default
fair-queue
packet-based wred, exponential weight 9

dscp min-threshold max-threshold mark-probablity
----------------------------------------------------------
default (0) - - 1/10
router#sh run int mfr1
Building configuration...

Current configuration : 103 bytes
!
interface MFR1
mtu 1546
no ip address
frame-relay traffic-shaping
frame-relay intf-type dce
end

router#sh run int mfr1.100
Building configuration...

Current configuration : 143 bytes
!
interface MFR1.100 point-to-point
ip address ...
ip mtu 1500
frame-relay interface-dlci 100
class TEST
end
router#sh run | beg ^map-cl
map-class frame-relay TEST
frame-relay cir 3960000
frame-relay bc 39600
frame-relay be 0
frame-relay mincir 3960000
service-policy output E1-MFR
- MFR спокойно "пережил" изменение MTU на физическом и собственном интерфейсах. MLPPP отказался работать при одинаковой конфигурации с обоих сторон при увеличенном MTU, пока настройки не откатил и не произвел административное выключение/включение интерфейса mu1 на одной из сторон.
- При отсутствии ошибок на каналах, на контроллерах E1, на Serial'ах c обоих сторон появляются с одной стороны на интерфейсе Multilink входящие ошибки, чему объяснения я не нашел. При переводе на MFR ничего подобного не наблюдалось.
router2#sh int mu1
Multilink1 is up, line protocol is up
Hardware is multilink group interface
...
1794 input errors, 0 CRC, 0 frame, 0 overrun, 1794 ignored, 0 abort
- Никакого смысла применять interleaving на каналах Е1 и выше нет. Так как вносимая интерфейсом задержка на таких скоростях пренебрежимо мала.
- задержки существенно меньше на MFR, чем на MLPPP. 40-60мс против 70-100мс

Есть у меня мнение, что ничто не мешает сделать Frame-Relay Switch в итоге. А то как-то попадалось, что некто пытался слепить bridge-группу из ppp и еще какого-то интерфейса.

18.01.2011

DSCP для разных ip-телефонов

Ссылки в заметке ведут на документации по подключению телефонов к оборудованию Cisco.

Cisco IP-Phone и их голосовые маршрутизаторы используют следующие настройки:
Голос: EF (46)
Сигнализация: CS3 (24)
IP-телефоны Nortel используют следующие настройки:
Голос: EF (46)
Сигнализация: CS5 (40)
IP-телефоны Avaya используют следующие настройки:
Голос: EF (46)
Сигнализация: AF31 (26)

Теоретически, можно привести все к единообразию применив протокол LLDP, а именно LLDP-MED, что позволит указать настройки для оборудования на коммутаторе. Вот документация с примером. Хоть Cisco IP-Phone и работают с LLDP, но попытка изменить dscp сигнализации не увенчалась успехом. Благо есть другой способ.

Маркировка для CUCME

Начиная с 12.4(24)T и, соответственно, CME 7.1 стало возможным изменение маркировки пакетов. Вот ссылка на документацию.
Маркировка по-умолчанию:
DSCP for media is ef.
DSCP for service is 0.
DSCP for signaling is cs3.
DSCP for video is af41.
Примеры из документации:
voice register global
mode cme
ip qos dscp af11 media
ip qos dscp cs2 signal
ip qos dscp af43 video
ip qos dscp 25 service

telephony-service
load 7960-7940 P00308000500
max-ephones 100
max-dn 240
ip source-address 10.7.0.1 port 2000
ip qos dscp af11 media
ip qos dscp cs2 signal
ip qos dscp af43 video
ip qos dscp 25 service
Понятно, что смена dscp должна сопровождаться реконфигурацией на коммутаторах, так как auto qos voip выполняет вполне определенные шаблонные команды.



Теперь к практике. Меняем DSCP для сигнализации на AF31
!
voice register global
ip qos dscp af31 signal
!

cme#sh dial-peer voice
...
ip media DSCP = ef, ip media rsvp-pass DSCP = ef
ip media rsvp-fail DSCP = ef, ip signaling DSCP = af31,
ip video rsvp-none DSCP = af41,ip video rsvp-pass DSCP = af41
ip video rsvp-fail DSCP = af41,
...
Для сервиса телефонии используем второй пример:
!
telephony-service
...
ip qos dscp af31 signal
!
cme(config-telephony)#create cnf-files
Пересоздание конфигурационных файлов для ip-телефонов, перезапуск ip-телефонов необходимы для того, чтобы телефон стал использовать данную настройку. В противном случае использовать af31 будет только сам сервис телефонии в одностороннем порядке.

На коммутаторе смотрим статистику до:
dscp: incoming
-------------------------------

0 - 4 : 24350 0 0 0 0
5 - 9 : 0 0 0 0 0
10 - 14 : 0 0 0 0 0
15 - 19 : 0 0 0 0 0
20 - 24 : 0 0 0 0 223
25 - 29 : 0 0 0 0 0
30 - 34 : 0 0 0 0 0
35 - 39 : 0 0 0 0 0
40 - 44 : 0 0 0 0 0
45 - 49 : 0 0 0 0 0
50 - 54 : 0 0 0 0 0
55 - 59 : 0 0 0 0 0
60 - 64 : 0 0 0 0
dscp: outgoing
-------------------------------

0 - 4 : 38626 0 0 0 6
5 - 9 : 0 0 0 0 0
10 - 14 : 0 0 0 0 0
15 - 19 : 0 0 0 0 0
20 - 24 : 0 0 0 0 0
25 - 29 : 0 362 0 0 0
30 - 34 : 0 0 0 0 0
35 - 39 : 0 0 0 0 0
40 - 44 : 0 0 0 0 0
45 - 49 : 0 0 0 0 0
50 - 54 : 0 0 0 0 0
55 - 59 : 0 0 0 0 0
60 - 64 : 0 0 0 0
И после, где видно как телефон использовал cs3 (24) до перезагрузки и начал использовать af31 (26) после перезагрузки:
dscp: incoming
-------------------------------

0 - 4 : 43654 0 0 0 0
5 - 9 : 0 0 0 0 0
10 - 14 : 0 0 0 0 0
15 - 19 : 0 0 0 0 0
20 - 24 : 0 0 0 0 568
25 - 29 : 0 38 0 0 0
30 - 34 : 0 0 0 0 0
35 - 39 : 0 0 0 0 0
40 - 44 : 0 0 0 0 0
45 - 49 : 0 12109 0 0 0
50 - 54 : 0 0 0 0 0
55 - 59 : 0 0 0 0 0
60 - 64 : 0 0 0 0
dscp: outgoing
-------------------------------

0 - 4 : 72906 0 0 0 36
5 - 9 : 0 0 0 0 0
10 - 14 : 1 0 0 0 0
15 - 19 : 0 6 0 0 0
20 - 24 : 0 0 0 0 0
25 - 29 : 0 1021 0 0 0
30 - 34 : 0 0 0 0 0
35 - 39 : 0 0 0 0 0
40 - 44 : 0 0 0 0 0
45 - 49 : 0 12105 0 40 0
50 - 54 : 0 0 0 0 0
55 - 59 : 0 0 0 0 0
60 - 64 : 0 0 0 0
Настройки порта на коммутаторе приведены ниже. Здесь была применена команда auto qos voip trust, которая сделала все необходимые настройки. Заменено mls qos trust cos на mls qos trust dscp:
interface FastEthernet1/0/10
switchport access vlan 100
switchport mode access
switchport voice vlan 110
srr-queue bandwidth share 10 10 60 20
priority-queue out
mls qos trust dscp
auto qos voip trust
spanning-tree portfast
spanning-tree bpduguard enable
В глобальных настройках изменил правила "мутации" для cos, так как сигнализация теперь использует значение 26, а не 24, как было ранее:
mls qos map cos-dscp 0 8 16 26 32 46 48 56

Таблица соответствия dscp,cos (взята отсюда):

DSCP (Decimal)

DSCP

CoS

0

Default


0

8

CS1


1

10

AF11

1


12

AF12

1

14

AF13

1

16

CS2

2

18


AF21

2

20

AF22


2

22

AF23

2


24

CS3

3


26

AF31

3

28

AF32

3

30


AF33

3

32


CS4

4

34

AF41


4

36

AF42

4


38

AF43

4

40

CS5

5

42

5

44

5


46

EF

5

48

CS6

6

56

CS7

7

17.01.2011

Регулярные выражения в командной строке

Часто применяю такие конструкции, например:
hostname# sh run | beg router ospf
hostname# sh ip route | in 10.0.0
Иногда невозможно быстро найти некоторые части конфигурации, так как имеется неизвестное количество пробелов в строке, либо поиск по строке целиком слишком неудобен. Выходом является применение регулярных выражений:
cme#sh run | beg dn(.*)27
ephone-dn 27 dual-line
number 2027
description A.V. Ivanov
name A.V. Ivanov
huntstop channel
...
cme#sh run | beg dial(.*)9
dial-peer voice 9 pots
destination-pattern 9T
progress_ind alert enable 8
direct-inward-dial
port 1/0:15
forward-digits all
...
Можно обрабатывать вывод различных маршрутов:
router#sh ip bgp | in (.*)( +)(.*)( +)0( +)100
*>i10.10.11.0/24 10.11.11.1 0 100 0 i
Чтобы исключить строку ip router isis и перейти сразу к отображению процесса, можно сделать так:
router#sh run | beg ^router isis
router isis
net 49.0000.0024.0000.0001.7206.00
is-type level-2-only
metric-style wide
log-adjacency-changes
...

12.01.2011

Настройка синхронизации

На разных платформах Cisco синхронизация настраивается по-разному. Почитать можно тут.
Для 2800 и 3800 серии, в частности:
network-clock-participate wic 0
network-clock-select 1 e1 0/0/0
Для 7200 серии:
frame-clock-select 1 E1 1/0
Текущий источник синхронизации смотрится командой show network-clocks. Правда, есть небольшое отличие для 7200 серии:
7200#show network-clocks
Priority 1 clock source: not configured
Priority 2 clock source: not configured
Priority 3 clock source: not configured
Priority 4 clock source: not configured
Priority 5 clock source: Local oscillator
Current clock source:Local oscillator, priority:5

7200#show frame-clocks
Priority 1 clock source: E1 1/0 input: Primary UP
Priority 2 clock source: E1 1/1 input: Secondary UP
Priority 3 clock source: not configured input: none
Priority 4 clock source: not configured input: none
Current clock source:E1 1/1, input: Secondary, priority: 2