Обход ограничения TCAM при использовании Selective QinQ на коммутаторах QSW-8200/QSW-8300
Для снятия ограничения по количеству C-VLAN на коммутаторах серий 8200/8300:
Правила реализации следующие:
1. Посмотреть нужный диапазон VLAN, которые надо заматчить (например, диапазон 2-4000):
QSW-8200-28F-AC-DC#sh acl vlan-division 100 to 3800
Vlan range: 100 to 3800; Total rules: 14 -------------------------------------------------- [ 1]:Value = 100 Mask = 0xffc Range[ 100, 103] [ 2]:Value = 104 Mask = 0xff8 Range[ 104, 111] [ 3]:Value = 112 Mask = 0xff0 Range[ 112, 127] [ 4]:Value = 128 Mask = 0xf80 Range[ 128, 255] [ 5]:Value = 256 Mask = 0xf00 Range[ 256, 511] [ 6]:Value = 512 Mask = 0xe00 Range[ 512,1023] [ 7]:Value = 1024 Mask = 0xc00 Range[1024,2047] [ 8]:Value = 2048 Mask = 0xc00 Range[2048,3071] [ 9]:Value = 3072 Mask = 0xe00 Range[3072,3583] [10]:Value = 3584 Mask = 0xf80 Range[3584,3711] [11]:Value = 3712 Mask = 0xfc0 Range[3712,3775] [12]:Value = 3776 Mask = 0xff0 Range[3776,3791] [13]:Value = 3792 Mask = 0xff8 Range[3792,3799] [14]:Value = 3800 Mask = 0xfff Range[3800,3800]
2. Создать последовательно 14 правил в ACL, используя обратную бинарную маску, записанную в десятичном виде. Например, для того чтобы заматчить диапазон [7] от VLANID 128 до 255, надо посмотреть на маску (0xf80), высчитать обратную (будет 0x7f) и записать в десятичной форме в ACL:
access-list 1101 permit any-source-mac any-destination-mac vlanId 128 127
Создаем правила для диапазон VLAN: 100-3800
access-list 1100 permit any-source-mac any-destination-mac vlanId 100 3 access-list 1100 permit any-source-mac any-destination-mac vlanId 104 7 access-list 1100 permit any-source-mac any-destination-mac vlanId 112 15 access-list 1100 permit any-source-mac any-destination-mac vlanId 128 127 access-list 1100 permit any-source-mac any-destination-mac vlanId 256 255 access-list 1100 permit any-source-mac any-destination-mac vlanId 512 511 access-list 1100 permit any-source-mac any-destination-mac vlanId 1024 1023 access-list 1100 permit any-source-mac any-destination-mac vlanId 2048 1023 access-list 1100 permit any-source-mac any-destination-mac vlanId 3072 511 access-list 1100 permit any-source-mac any-destination-mac vlanId 3584 127 access-list 1100 permit any-source-mac any-destination-mac vlanId 3712 63 access-list 1100 permit any-source-mac any-destination-mac vlanId 3776 15 access-list 1100 permit any-source-mac any-destination-mac vlanId 3792 7 access-list 1100 permit any-source-mac any-destination-mac vlanId 3800
Создаем клас-мап где будем матчить созданный ранее acl
class-map C-VLAN-ACL match access-group 1100 ! ! class-map C-VLAN-ACL match access-group 1100 !
Cмотрим сколько памяти использовано:
KRD-KRA-Kra59-Q8200-test-254.151(config-policymap-add_s-vlan)#show tcam usage TCAM Total: 512 extended (1024 standard) entries on unit: 0 USED: 76 extended entries for l4 function USED: 0 extended entries for IP forwarding FREE: 436 extended entries
Создаем политику где будет навешивать дополнительную метку:
KRD-KRA-Kra59-Q8200-test-254.151(config-policymap-add_s-vlan)# KRD-KRA-Kra59-Q8200-test-254.151(config-policymap-add_s-vlan)#class C-VLAN-ACL KRD-KRA-Kra59-Q8200-test-254.151(config-policymap-add_s-vlan-class-c-vlan-acl)#add s-vid 7 KRD-KRA-Kra59-Q8200-test-254.151(config-policymap-add_s-vlan-class-c-vlan-acl)#exi KRD-KRA-Kra59-Q8200-test-254.151(config-policymap-add_s-vlan)#exit KRD-KRA-Kra59-Q8200-test-254.151(config)#interface eth 1/0/8-10 KRD-KRA-Kra59-Q8200-test-254.151(config-if-port-range)#service-policy input ? WORD Policy map name<1-64>
Назначаем политику на необходимые интерфейсы:
KRD-KRA-Kra59-Q8200-test-254.151(config-if-port-range)#service-policy input ADD_S-VLAN ? <cr> KRD-KRA-Kra59-Q8200-test-254.151(config-if-port-range)#service-policy input ADD_S-VLAN KRD-KRA-Kra59-Q8200-test-254.151(config-if-port-range)#show tcam usage TCAM Total: 512 extended (1024 standard) entries on unit: 0 USED: 91 extended entries for l4 function USED: 0 extended entries for IP forwarding FREE: 421 extended entries KRD-KRA-Kra59-Q8200-test-254.151(config-if-port-range)#
P.S. проще переводить в бинарный вид во время расчёта.
P.P.S.: Еще проще отнимать от значения конца диапазона значение начала диапазона (в десятичном виде сразу):
[ 7]:Value = 128 Mask = 0xf80 Range[ 128, 255] => 255-128=127
К списку