Внешнее управление таблицами OpenFlow коммутаторов
Программа «dpctl» используется для внесения изменений, просмотра и мониторинга таблиц OpenFlow. Основные команды показаны в таблице 6.
Таблица 6 - Команды dpctl
Команда |
Описание |
1 |
2 |
show |
Показывает информацию о коммутаторе. Синтаксис команды «dpctl show tcp: адрес шорт», где «адрес» - это адрес коммутатора (127.0.0.1 в mininet), а «порт» - управляющий TCP порт коммутатора (6634 в mininet) |
status |
Показывает статистику по таблицам, портам и коммутатору в общем. Синтаксис аналогичен команде «show», но после команды можно использовать название статистики для фильтрации вывода |
dump-desc |
Показывает суммарную информацию о аппаратном обеспечении и прошивке коммутатора. Синтаксис аналогичен команде «show» |
1 |
2 |
dump-flows |
Показывает все записи в таблицах потоков на коммутаторе. Синтаксис аналогичен команде «show», после команды можно ставить условия фильтрации по номеру потока, например «(Х=11,12,13)» |
dump-ports |
Показывает все интерфейсы на коммутаторе. Синтаксис аналогичен команде «show» |
dump-queue |
Показывает все программные очереди пакетов на коммутаторе. Синтаксис аналогичен команде «show» |
dump-tables |
Показывает статистику по таблицам OpenFlow. Синтаксис аналогичен команде «show» |
add-flow |
Добавляет запись в таблицу потоков. Синтаксис команды: «dpctl add-flow tcp: адрес: порт in_port=nopTl,actions=output:nopT2», где in_port=nopTl - это условие применения записи к потоку, поле output:порт2 - это реакция записи на поток, в данном случае перенаправить поток на другой порт коммутатора (порт2) если поток пришел из указанного интерфейса (порт1) |
add-flows |
Добавляет запись в таблицу потоков. Синтаксис команды: «dpctl add-flow 1ср:адрес:порт файл», где «файл» - это файл с записями потоков |
1 |
2 |
add-queue |
Добавляет программную очередь коммутатора. Синтаксис команды: «dpctl add-queue tcp:адрес:порт интерфейс номерочереди скорость», где «интерфейс» - это порт коммутатора, «номерочереди» - уникальный идентификатор очереди, «скорость» - минимальная гарантированная пропускная способность в Кб/с |
mod-flows |
Изменяет реакцию на совпадение с полем сравнения потока. Синтаксис команды «dpctl mod-flows 1ср:адрес:порт списокусловий новоедействие», где «список условий» - полное перечисление поле сравнения потока как было указано при создании записи командой «add-flow», «новое_действие» - любое стандартное действие, которое будет заменено в таблице потоков. Если список условий указан в общем, то будут изменены все потоки, для которых это поле будет хотя бы частично совпадать с полем сравнения |
mod-queue |
Позволяет изменять минимальную гарантированную пропускную способность конкретной очереди. Синтаксис команды «dpctl mod-queue tcp:адрес:порт интерфейс номер очереди скорость», где параметры аналогичны команде «add-queue» |
1 |
2 |
mod-port |
Синтаксис команды «dpctl mod-ports tcp: адрес: порт номерпорта команда», где номер порта - число, команда - одно из значений «up», «down», «flood», «noflood». |
del-flows |
Удаляет поток или группу потоков. Синтаксис команды «dpctl del-flows tcp:адрес:порт маска», где «маска» - условие или часть условия поля сравнения потока, при совпадении с которой поток удаляется |
del-queue |
Удаляет очередь. Синтаксис команды «dpctl del-queue 1ср:адрес:порт интерфейс номер очереди», где параметры аналогичны команде «add-queue» |
monitor |
Выводит на экран пакеты, пришедшие на коммутатор |
execute |
Выполняет произвольную команду в ОС коммутатора. Синтаксис «dpctl execute tcp: адрес шорт команда», где «команда» - произвольная строка в кавычках |
ping |
Показывает время отклика коммутатора. Синтаксис аналогичен команде «show» |
benchmark |
Измеряет производительность коммутатора или контроллера. Синтаксис «dpctl benchmark 1ср:адрес:порт размерпакета количество», где «размерпакета» - размер пакета, посылаемого для проверки производительности, а «количество» - это количество таких пакетов. Результат возвращается в виде суммарного времени выполнения посылки всех команд и пакетов, а также в вид средней производительности |
Список полей для создания списка условий применения конкретной записи о потоке к пакету при добавлении и изменении записей (действия «add-flow», «add- flows», «mod-flows», «del-flow») приведен в таблице 7.
Таблица 7 - Поля для фильтрации записей OpenFlow
Поле проверки |
Описание |
1 |
2 |
in_port |
Входящий порт коммутатора |
Meta |
Произвольные метаданные |
eth_dst |
МАС-адрес получателя |
eth_type |
Тип фрейма |
eth_src |
МАС-адрес отправителя |
vlan_vid |
Номер VLAN сети |
vlan_pcp |
Приоритет VLAN сети |
ip_dscp |
Поле DSCP для QoS |
ip_ecn |
Поле IP ECN для сообщениях о перегрузке сети |
ip_proto |
Тип подпротокола IP |
ip_src |
IP адрес источника |
ip_dst |
IP адрес получателя |
tcp_src |
TCP порт источника |
tcp_dst |
TCP порт получателя |
udp_src |
UDP порт источника |
udp_dst |
UDP порт получателя |
sctp_src |
SCTP порт источника |
1 |
2 |
sctp_dst |
SCTP порт получателя |
icmp_code |
Тип ICMP пакета |
icmp_type |
Код ICMP пакета |
arp_op |
Тип ARP пакета |
arp_spa |
Адрес IP источника ARP пакета |
arp_tpa |
Адрес IP получателя ARP пакета |
arp_sha |
Адрес MAC источника ARP пакета |
arp_tha |
Адрес MAC получателя ARP пакета |
ipv6_src |
IPv6 адрес источника |
ipv6_dst |
IPv6 адрес получателя |
ipv6_flabel |
IPv6 метка потока |
icmpv6_code |
Тип пакета ICMPv6 |
icmpv6_type |
Код пакета ICMPv6 |
Список сравнений не ограничивается только приведенными полями, каждый производитель вправе добавлять собственные поля для сравнения. Однако список действий над потоками стандартен и представлен в таблице 8, хотя производители коммутаторов OpenFlow вправе дополнять его.
Таблица 8 - Список действий над потоком
Действие |
Описание |
1 |
2 |
output |
Перенаправить поток в другой порт коммутатора. Требует указания номера порта (например «output: 10») |
mpls_ttl |
Установить значение MPLS TTL |
mpls_dec |
Уменьшить на единицу значение MPLS TTL |
push_vlan |
Инкапсулировать пакет в VLAN с указанным номером |
pop_vlan |
Декапсулировать пакет из VLAN |
push_mpls |
Инкапсулировать пакет в MPLS пакет с указанным тегом |
pop_mpls |
Декапсулировать пакет из MPLS |
queue |
Ассоциировать пакет с указанной очередью |
group |
Группировать запись в группу записей |
nw_ttl |
Установить указанное значение поля IP TTL |
nw_dec |
Уменьшить на единицу значение поля IP TTL |
set_field |
Установить произвольное значение поля пакета |
Все действия могут выполняться последовательно, если их указано несколько, например действие «queue: 1,output: 10» означает ассоциацию с первой очередью и перенаправление в десятый порт.