Mininet OpenvSwitch多控制器配置

问题描述

根据OpenFlow规范,OpenFlow交换机可以连接到具有不同角色的多个控制器。

我现在正在用OpenvSwitch实现小型网络拓扑。我想知道如何在Mininet中指定控制器对OpenvSwitch的作用?

解决方法

角色由控制器确定,请参阅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的错误消息。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...