Содержание

Настройка on-stick и LAG/LACP

Настройка on-stick

[FastDPI 12+]

On-stick позволяют экономить на физическом оборудовании. FastDPI обычно работает с мостами, замыкая два физических порта (девайса). Для on-stick девайса физический порт один, на котором fastDPI сам создает виртуальные порты — со стороны абонентов (subs) и интернета (inet).

Каждый оn-stick порт описывается особым образом: сначала описывается базовый физический порт с помощью dpdk_device, затем описываются виртуальные порты, основанные на базовом.
Описание базовых девайсов:

dpdk_device=port1:pci:04:00.0
dpdk_device=port2:pci:04:00.1

Описание on-stick на основе девайсов port:

onstick_device {
    base=port1
    filter=<выражение фильтра со стороны subs>
    subs=subs1
    inet=inet1
}
onstick_device {
    base=port2
    filter=<выражение фильтра со стороны subs>
    subs=subs2
    inet=inet2
}

где:
base — базовый девайс
filter — логическое выражение для определения направления пакета (фильтр). Если это выражение возвращает true, значит, пакет со стороны subs, иначе — со стороны inet
subs — имя девайса со стороны subs
inet — имя девайса со стороны inet

Задаем мосты.

Базовые девайсы типа port НЕ МОГУТ входить ни в какие мосты
in_dev=subs1:subs2
out_dev=inet1:inet2

Везде, где требуется указание девайса, следует использовать виртуальные девайсы (в данном примере - subs1, subs2 и inet1, inet2). Базовые on-stick девайсы port1 и port2 указываются только при описании on-stick девайса и нигде более.

В описании on-stick порта наиболее важная часть — это выражение filter для определения направления пакета (subs → inet или inet → subs). Направление пакета — важный атрибут пакета в fastDPI, от которого зависит обработка. filter задает логическое выражение над L2-свойствами пакета. Если это выражение возвращает true — пакет со стороны subs (абонентов), иначе — со стороны inet (uplink, интернета).

Основой выражения filter являются термы, которые с помощью логических операторов & (И) и | (ИЛИ), скобок ( и ), а также отрицания ! объединяются в логическое выражение. Оператор & более приоритетен, чем |; по аналогии с арифметическими выражениями, можно считать, что & — это умножение, а | — это сложение, — именно исходя из этого нужно расставлять скобки.

Термы задают элементарные выражения над L2-свойствами пакета. Существуют следующие термы (регистр важен):

Примеры (напомним, что filter задает выражение для стороны subs):

Формальное описание грамматики выражения filter:

filter ::= and | and ‘|’ filter
and    ::= mult | mult ‘&’ and
mult   ::= ‘!’ mult | term |(‘ filter ‘)’
term   ::= vlan | qinq | pppoe | smac | dmac
 
vlan   ::= ‘vlan’ | ‘vlan’ ‘(‘ список_int ‘)’
qinq   ::= ‘qinq’
pppoe  ::= ‘pppoe’
smac   ::= ‘smac’ ‘(‘ mac_address ‘)’
dmac   ::= ‘dmac’ ‘(‘ mac_address ‘)’
mac_address ::= xx:xx:xx:xx:xx:xx

Агрегация портов LAG/LACP

Агрегация портов средствами СКАТ поддерживается для режимов in-line и on-stick.

Настройка LACP

lacp=0

Допустимые значения параметра lacp:

При агрегации происходит трассировка балансировки трафика.

Настройка LAG

В LAG могут входить либо обычные порты, либо on-stick, смешение недопустимо. LAG на on-stick организуется на базовом (физическом) порту. LAG реализуется в fastDPI на логическом уровне: никакого единого bond-девайса нет, внутри fastDPI работа ведется с портами, как и раньше.

Максимальное число портов в LAG — 12.

Возможны 3 разных конфигурации:

Требования к девайсам, входящим в LAG:

В настоящее время конфигурирование LAG производится в fastdpi.conf без возможности применения на лету, то есть требуется рестарт fastDPI при изменении конфигурации LAG.

Описание LAG:
Для каждого LAG требуется отдельная секция lag. В LAG могут входить только физические интерфейсы, смешение физических и логических интерфейсов недопустимо.

lag {
    name=
 
    device=
    device=
 
    system_id=
    priority=
    short_timeout=
}

где:
name — необязательное имя LAG, используется для вывода в лог
device — перечисляются все физические интерфейсы, входящие в LAG. LAG должен содержать как минимум 2 девайса
system_id — MAC-адрес - system_id данного LAG. Если не задано - используется arp_mac
priority — system priority для данного LAG, число в диапазоне 1 - 65535, по умолчанию 32768
short_timeout — короткий (off) или длинный (on) таймаут LACP

Применение балансировки к исходящему трафику LAG

Тип применяемого алгоритма балансировки задается параметром lag.balance_algo.
Допустимые значения:

Дополнительные параметры конфигурации хеша в секции lag: hash_seed, hash_offset, hash_bits
Сколько значащих бит берем из 64-битного хеша при балансировке. Алгоритм балансировки в общем случае выглядит так:

В описании LAG должны быть указаны только базовые девайсы для on-stick. Смешение on-stick и обычных девайсов в одном LAG не допускается.
При агрегации происходит трассировка балансировки трафика.

Пример конфигурации on-stick + LACP для двух физических интерфейсов

В данном сценарии абонентский трафик в VLAN 101, 102 и QinQ
dpdk_device=port1:pci:86:00.0
dpdk_device=port2:pci:86:00.1
 
lag {
    name=LACP
    device=86:00.1
    device=86:00.0
    lacp=1
    system_id=6c:b3:11:60:fa:66
    priority=32768
    balance_algo=0
}
 
onstick_device {
    base=port1
    filter=vlan(101,102) | qinq
    subs=subs1
    inet=inet1
}
 
onstick_device {
    base=port2
    filter=vlan(101,102) | qinq
    subs=subs2
    inet=inet2
}
 
in_dev=subs1:subs2
out_dev=inet1:inet2