Ryu / OpenFlow как сопоставить номер in_port с физическим портом - PullRequest
0 голосов
/ 31 марта 2020

Для непосвященных - я задаю вопрос по Python / SDN. Это - это вопрос программирования.

Литературы по этому вопросу мало, и я не видел ее в спецификации . Я построил контроллер Ryu на основе документации и у меня все это работает, но у меня довольно простая проблема:

Как сопоставить числа in_port с фактические номера портов? В моем случае говорится, что у меня in_port из 5. Однако на моем Dell 4112F-ON он фактически подключается к физическому порту 1/1/2. Похоже, что между ними нет никакой корреляции.

Если я хочу контролировать трафик c для каждого порта, как мне узнать, с какого физического порта пришел трафик c?

Редактировать: Я знаю, как преобразовать в адрес MA C, но я не нашел чистого способа программного определения порта # по адресу MA C.

1 Ответ

0 голосов
/ 24 апреля 2020

Я обнаружил, что в Ryu имя физического порта находится внутри структуры данных dpset, которая является частью ryu.controller. В dpset есть атрибут с именем port_state, который представляет собой словарь типа {:}. Вы можете извлечь данные с помощью следующего кода:

    port_list = []

    for port, port_info in simple_switch.dpset.port_state[dpid].items():
        port_list.append(
            {"hw_addr": port_info.hw_addr, "name": port_info.name.decode("utf-8"), "openflow_port": port})

, где simpleswitch в моем случае был экземпляром REST-контроллера Ryu из здесь . Однако вам не нужно отдыхать, чтобы получить данные - это часть данных, поддерживаемых контроллером в dpset.

...