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 | |