| 155 | | Коммутатор позволяет производить обработку пакетов ethernet на основании списков PCL (Policy Control Lists). Списки PCL состоят из последовательности правил, обрабатываемях коммутатором для каждого принятого пакета (если это разрешено глобальной настройкой и настройками портов). Каждое правило состоит из двух основных элементов: |
| 156 | | - условия; |
| 157 | | - действия. |
| 158 | | |
| 159 | | Для каждого пакета коммутатор выполняет последовательную проверку условий правил PCL. Если условие выполняется, коммутатор выполняет заданное правилом действие и заканчивает поиск. Описанных проходов поиска по списку правил может быть настроено один или два (lookup 0 и lookup 1). |
| 160 | | |
| 161 | | Условия правил могут включать себя как проверку данных пакета (например MAC адрес отправителя и получателя, протокол, IP адрес отправителя, IP адрес получателя, поля DSCP и т.п.), так и метаданных, назначенных принятому пакету коммутатором (например номер порта, номер QoS профиля, VLAN ID и т.п.). Для проверки условий списков PCL коммутатор формирует ключ, состоящий из данных и метаданных пакета, о которых блыо сказано выше. В зависимости от типа принятого пакета (не-IP, ARP, IPv4, IPv6) и настроек коммутатора может быть сформировано шесть различных типов ключа размером 24 или 48 байт. В свою очередь, условия правил PCL состоят из значения и маски, также размером 24 или 28 байт каждые. Проверка условия заключается в накладывании (побитном умножении) маски на ключ поиска и сравнения результата с значением условия правила. Если результат совпал с заданным значением, условие правила считается выполненным, и коммутатор выполняет указанное правилом действие. |
| | 155 | Коммутатор позволяет производить обработку пакетов ethernet на основании списков PCL (Policy Control Lists). Списки PCL состоят из последовательности правил, обрабатываемях коммутатором для каждого принятого пакета (если это разрешено глобальной настройкой и настройками портов). Каждое правило состоит из двух основных элементов - условия и действия. Обработка пакетов правилами PCL может быть отключена глобально, а также (если обработка не отключена шлобально) может быть включена/выключена индивидуально для каждого порта коммутатора. Обработка пакета выполняется в случае, если политики разрешены глобально **и** включены в настройках порта, принявшего пакет. Обработке правилами PCL подлежат только пакеты, которым назначена команда forward, то есть предназначенные для форвардинга обычным образом. Пакеты, зеркалированные в порт анализатора, перенаправленные в порт CPU или передаваемые от CPU в определенный порт коммутатора (например кадры обнаружения петли или кадры RSTP BPDU) правиламт PCL не обрабатываются. |
| | 156 | |
| | 157 | Для каждого принятого пакета коммутатор выполняет последовательную проверку условий правил PCL. Если условие выполняется, коммутатор выполняет заданное правилом действие и заканчивает поиск. Описанных проходов поиска по списку правил может быть настроено один или два (lookup 0 и lookup 1). |
| | 158 | |
| | 159 | Условия правил могут включать себя как проверку данных пакета (например MAC адрес отправителя и получателя, протокол, IP адрес отправителя, IP адрес получателя, поля DSCP и т.п.), так и метаданных, назначенных принятому пакету коммутатором (например номер порта, номер QoS профиля, VLAN ID и т.п.). Для проверки условий списков PCL коммутатор формирует ключ, состоящий из данных и метаданных пакета, о которых блыо сказано выше. В зависимости от типа принятого пакета (не-IP, ARP, IPv4, IPv6) и настроек коммутатора может быть сформировано семь различных типов ключа размером 24 или 48 байт. В свою очередь, условия правил PCL состоят из значения и маски, также размером 24 или 28 байт каждые. Проверка условия заключается в накладывании (побитном умножении) маски на ключ поиска и сравнения результата с значением условия правила. Если результат совпал с заданным значением, условие правила считается выполненным, и коммутатор выполняет указанное правилом действие. Таким образом, условие правила может проверять любое из составляющее ключ полей на равенство заданному значению (если соответствующие полю биты маски установлены в 1), игнорировать значение поля (если соответствующие полю биты маски сброшены в 0) или проверять только часть значения поля (если часть соответствующих битов маски установлена), например равенство префикса адреса IPv6 заданному значению. |
| | 160 | |
| | 161 | Аглоритм выбора типа (формата) ключа показан на следующий диаграмме. |
| | 162 | |
| | 163 | {{{#!plantuml |
| | 164 | @startuml |
| | 165 | |
| | 166 | start |
| | 167 | if (размер ключа?) then (short) |
| | 168 | |
| | 169 | if(тип пакета?) then (не-IP) |
| | 170 | :L2; |
| | 171 | else (IP или ARP) |
| | 172 | if (протокол?) then (IPv4 или ARP) |
| | 173 | if(тип ключа?) then (0) |
| | 174 | :IPv4+L4; |
| | 175 | else (1) |
| | 176 | :L2+IPv4/6 QoS; |
| | 177 | endif |
| | 178 | else (IPv6) |
| | 179 | if(lookup 0?) then (да) |
| | 180 | :L2+IPv4/6 QoS; |
| | 181 | else (нет) |
| | 182 | if(lookup 1 тип ключа?) then (0) |
| | 183 | :L2+IPv4/6 QoS; |
| | 184 | else (1) |
| | 185 | :IPv6 DIP; |
| | 186 | endif |
| | 187 | endif |
| | 188 | endif |
| | 189 | endif |
| | 190 | |
| | 191 | else |
| | 192 | if(тип пакета?) then (IPv6) |
| | 193 | if(тип ключа?) then (0) |
| | 194 | :L2+IPv6; |
| | 195 | else (1) |
| | 196 | :IPv6+L4; |
| | 197 | endif |
| | 198 | else (не-IPv6) |
| | 199 | :L2+IPv4+L4; |
| | 200 | endif |
| | 201 | endif |
| | 202 | kill |
| | 203 | |
| | 204 | @enduml |
| | 205 | }}} |
| | 206 | |
| | 207 | |
| | 208 | Действие правила определяет, какие манипуляции с пакетом будут произведены в случае выполнения условия. Эти действия могут включать: |
| | 209 | - изменение команды (решения о судьбе пакета): forward, hard drop, soft drop, mirrot to CPU, trap to CPU; |
| | 210 | - изменение идентификатора VLAN; |
| | 211 | - перемаркировка QoS (изменение QoS профиля, изменение флагов модификации UP/DSCP, изменение QoS precedence); |
| | 212 | - инкремент счетчика; |
| | 213 | - зеркалировать пакет в порт анализатора; |
| | 214 | - перенаправление пакета в определенный порт, транк или мультикастовую группу; |
| | 215 | - применение полисера. |
| | 216 | |