Конфигурация с несколькими контроллерами Mininet OpenvSwitch

#sdn #mininet #openflow #openvswitch

#sdn #мининет #openflow #openvswitch

Вопрос:

Согласно спецификации OpenFlow, коммутатор OpenFlow может быть подключен к нескольким контроллерам с разной ролью.

Сейчас я внедряю топологию mininet с OpenvSwitch. Я хотел бы знать, как указать роль контроллеров для OpenvSwitch в Mininet?

Ответ №1:

Роль определяется контроллером, см. Раздел A 3.9. В спецификации Openflow 1.3:

A.3.9 Сообщение о запросе роли Когда контроллер хочет изменить свою роль, он использует сообщение OFPT_ROLE_REQUEST со следующей структурой:

 OpenFlow Switch Specification Version 1.3.0
/* Role request and reply message. */
struct ofp_role_request {
    struct ofp_header header; /* Type OFPT_ROLE_REQUEST/OFPT_ROLE_REPLY. */
    uint32_t role; /* One of NX_ROLE_*. */
    uint8_t pad[4]; /* Align to 64 bits. */
    uint64_t generation_id; /* Master Election Generation Id */
};
OFP_ASSERT(sizeof(struct ofp_role_request) == 24);
  

Роль поля — это новая роль, которую контроллер хочет принять, и может иметь следующие значения:

 /* Controller roles. */
enum ofp_controller_role {
    OFPCR_ROLE_NOCHANGE = 0, /* Don’t change current role. */
    OFPCR_ROLE_EQUAL = 1, /* Default role, full access. */
    OFPCR_ROLE_MASTER = 2, /* Full access, at most one master. */
    OFPCR_ROLE_SLAVE = 3, /* Read-only access. */
};
  

Если значение роли равно OFPCR_ROLE_MASTER, все остальные контроллеры, роль которых была OFPCR_ROLE_MASTER, изменяются на OFPCR_ROLE_SLAVE. Если значение роли равно OFPCR_ROLE_NOCHANGE, текущая роль контроллера не изменяется ; это позволяет контроллеру запрашивать свою текущую роль без ее изменения.

После получения сообщения OFPT_ROLE_REQUEST коммутатор должен вернуть сообщение OFPT_ROLE_REPLY. Структура этого сообщения точно такая же, как у сообщения OFPT_ROLE_REQUEST, а роль поля — это текущая роль контроллера.

Кроме того, если значением роли в сообщении является OFPCR_ROLE_MASTER или OFPCR_ROLE_SLAVE, коммутатор должен проверить generation_id для проверки устаревших сообщений. Если проверка завершается неудачно, коммутатор должен отменить запрос роли и вернуть сообщение об ошибке с типом OFPET_ROLE_REQUEST_FAILED и кодом OFPRRFC_STALE.