searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

port status消息触发条件

2023-10-20 08:49:28
15
0

1. port status消息类型

注,本节为port status消息中一些字段会包含的类型,供参考 reason类型

    enum ofp_port_reason {
        OFPPR_ADD,              /* The port was added. */
        OFPPR_DELETE,           /* The port was removed. */
        OFPPR_MODIFY,           /* Some attribute of the port has changed. */
    
    #define OFPPR_BITS ((1u << OFPPR_ADD) |         \
                        (1u << OFPPR_DELETE) |      \
                        (1u << OFPPR_MODIFY))
    
        OFPPR_N_REASONS         /* Denotes number of reasons. */
    };

port config类型

enum ofputil_port_config {
    /* OpenFlow 1.0 and 1.1 share these values for these port config bits. */
    OFPUTIL_PC_PORT_DOWN    = 1 << 0, /* Port is administratively down. */
    OFPUTIL_PC_NO_RECV      = 1 << 2, /* Drop all packets received by port. */
    OFPUTIL_PC_NO_FWD       = 1 << 5, /* Drop packets forwarded to port. */
    OFPUTIL_PC_NO_PACKET_IN = 1 << 6, /* No send packet-in msgs for port. */
    /* OpenFlow 1.0 only. */
    OFPUTIL_PC_NO_STP       = 1 << 1, /* No 802.1D spanning tree for port. */
    OFPUTIL_PC_NO_RECV_STP  = 1 << 3, /* Drop received 802.1D STP packets. */
    OFPUTIL_PC_NO_FLOOD     = 1 << 4, /* Do not include port when flooding. */
    /* There are no OpenFlow 1.1-only bits. */
};

port state类型

    enum ofputil_port_state {
        /* OpenFlow 1.0 and 1.1 share this values for these port state bits. */
        OFPUTIL_PS_LINK_DOWN   = 1 << 0, /* No physical link present. */
        /* OpenFlow 1.1 only. */
        OFPUTIL_PS_BLOCKED     = 1 << 1, /* Port is blocked */
        OFPUTIL_PS_LIVE        = 1 << 2, /* Live for Fast Failover Group. */
        /* OpenFlow 1.0 only. */
        OFPUTIL_PS_STP_LISTEN  = 0 << 8, /* Not learning or relaying frames. */
        OFPUTIL_PS_STP_LEARN   = 1 << 8, /* Learning but not relaying frames. */
        OFPUTIL_PS_STP_FORWARD = 2 << 8, /* Learning and relaying frames. */
        OFPUTIL_PS_STP_BLOCK   = 3 << 8, /* Not part of spanning tree. */
        OFPUTIL_PS_STP_MASK    = 3 << 8  /* Bit mask for OFPPS10_STP_* values. */
    };

2. reason类型为OFPPR_ADD

注,本节为add类型消息的触发条件整理,前面的函数名是按代码流程归类的触发过程

ofport_install

  1. 创建bridge时,添加桥同名的internal类型port,config为OFPUTIL_PC_PORT_DOWN,state为OFPUTIL_PS_LINK_DOWN;dpdk模式的此时会有一些速率之类的链接信息。
  2. 修改bridge的type,会在上报add;内容同新建bridge时相同。(但不会上报del旧port)
  3. 修改bridge datapath类型。
  4. 新配置或修改interface类型,state为OFPUTIL_PS_LINK_DOWN。(注意,单独配置port时,不触发port status)
  5. 修改port名字(代码中的流程,本地配置无法构造)
  6. 创建bond类型的port时,会上报bond中首条interface名的add。state为OFPUTIL_PS_LINK_DOWN。后续配置该interface的type时,会触发一条del,然后以重新触发add。bond类型的port不会单独上报bond名的port status。

3. reason类型为OFPPR_DELETE

ofport_remove

  1. 删除已配置了interface type的port。
  2. 修改interface修改type,先上报此状态。之后由于配置新类型还会触发add。
  3. 修改bridge的type,会上报删除同名port。
  4. ovs轮询port状态,发现有datapath层面的port删除(代码中的流程,不清楚场景怎么构造)
  5. 注意,直接删除整个bridge时不单独上报port status。

4. reason类型为OFPPR_MODIFY

ofproto_port_set_state

  1. STP或RSTP协议触发的state状态变化,上报此状态。state主要是前缀为OFPUTIL_PS_STP的几种。

update_port

  1. vhostuserclient对应虚机start,上报此状态。state报为OFPUTIL_PS_LIVE。(虚机中shutdown对应虚拟网卡不影响本状态)
  2. vhostuserclient对应虚机destroy,触发上报两次modify。第一次state报为OFPUTIL_PS_STP_LISTEN,第二次报OFPUTIL_PS_STP_LISTEN。
  3. dpdk类型interface对应网卡网线接通时,上报此状态。state报OFPUTIL_PS_LIVE。(如果是配置后第一次接通则会先上报add,随后上报本条)

update_port_config

  1. 修改配置,旧port名存在(代码中流程,未找到配置构造方法)
  2. 创建bridge时,在发送add后会再触发一次modify,config为OFPUTIL_PC_PORT_DOWN,state为OFPUTIL_PS_LINK_DOWN,mac地址做了重新配置。
  3. 修改bridge的type时,处理同创建bridge一致。
  4. ofctl配置或控制器下发up down no_recv no_recv_stp no_flood no_forward no_packet_in等配置时,会触发配置修改上报,
  5. 删除bridge中最后一个有效port,触发一次modify,上报bridge同名port;config为OFPUTIL_PC_PORT_DOWN,status为OFPUTIL_PS_LINK_DOWN。
0条评论
0 / 1000
леон
2文章数
0粉丝数
леон
2 文章 | 0 粉丝
леон
2文章数
0粉丝数
леон
2 文章 | 0 粉丝
原创

port status消息触发条件

2023-10-20 08:49:28
15
0

1. port status消息类型

注,本节为port status消息中一些字段会包含的类型,供参考 reason类型

    enum ofp_port_reason {
        OFPPR_ADD,              /* The port was added. */
        OFPPR_DELETE,           /* The port was removed. */
        OFPPR_MODIFY,           /* Some attribute of the port has changed. */
    
    #define OFPPR_BITS ((1u << OFPPR_ADD) |         \
                        (1u << OFPPR_DELETE) |      \
                        (1u << OFPPR_MODIFY))
    
        OFPPR_N_REASONS         /* Denotes number of reasons. */
    };

port config类型

enum ofputil_port_config {
    /* OpenFlow 1.0 and 1.1 share these values for these port config bits. */
    OFPUTIL_PC_PORT_DOWN    = 1 << 0, /* Port is administratively down. */
    OFPUTIL_PC_NO_RECV      = 1 << 2, /* Drop all packets received by port. */
    OFPUTIL_PC_NO_FWD       = 1 << 5, /* Drop packets forwarded to port. */
    OFPUTIL_PC_NO_PACKET_IN = 1 << 6, /* No send packet-in msgs for port. */
    /* OpenFlow 1.0 only. */
    OFPUTIL_PC_NO_STP       = 1 << 1, /* No 802.1D spanning tree for port. */
    OFPUTIL_PC_NO_RECV_STP  = 1 << 3, /* Drop received 802.1D STP packets. */
    OFPUTIL_PC_NO_FLOOD     = 1 << 4, /* Do not include port when flooding. */
    /* There are no OpenFlow 1.1-only bits. */
};

port state类型

    enum ofputil_port_state {
        /* OpenFlow 1.0 and 1.1 share this values for these port state bits. */
        OFPUTIL_PS_LINK_DOWN   = 1 << 0, /* No physical link present. */
        /* OpenFlow 1.1 only. */
        OFPUTIL_PS_BLOCKED     = 1 << 1, /* Port is blocked */
        OFPUTIL_PS_LIVE        = 1 << 2, /* Live for Fast Failover Group. */
        /* OpenFlow 1.0 only. */
        OFPUTIL_PS_STP_LISTEN  = 0 << 8, /* Not learning or relaying frames. */
        OFPUTIL_PS_STP_LEARN   = 1 << 8, /* Learning but not relaying frames. */
        OFPUTIL_PS_STP_FORWARD = 2 << 8, /* Learning and relaying frames. */
        OFPUTIL_PS_STP_BLOCK   = 3 << 8, /* Not part of spanning tree. */
        OFPUTIL_PS_STP_MASK    = 3 << 8  /* Bit mask for OFPPS10_STP_* values. */
    };

2. reason类型为OFPPR_ADD

注,本节为add类型消息的触发条件整理,前面的函数名是按代码流程归类的触发过程

ofport_install

  1. 创建bridge时,添加桥同名的internal类型port,config为OFPUTIL_PC_PORT_DOWN,state为OFPUTIL_PS_LINK_DOWN;dpdk模式的此时会有一些速率之类的链接信息。
  2. 修改bridge的type,会在上报add;内容同新建bridge时相同。(但不会上报del旧port)
  3. 修改bridge datapath类型。
  4. 新配置或修改interface类型,state为OFPUTIL_PS_LINK_DOWN。(注意,单独配置port时,不触发port status)
  5. 修改port名字(代码中的流程,本地配置无法构造)
  6. 创建bond类型的port时,会上报bond中首条interface名的add。state为OFPUTIL_PS_LINK_DOWN。后续配置该interface的type时,会触发一条del,然后以重新触发add。bond类型的port不会单独上报bond名的port status。

3. reason类型为OFPPR_DELETE

ofport_remove

  1. 删除已配置了interface type的port。
  2. 修改interface修改type,先上报此状态。之后由于配置新类型还会触发add。
  3. 修改bridge的type,会上报删除同名port。
  4. ovs轮询port状态,发现有datapath层面的port删除(代码中的流程,不清楚场景怎么构造)
  5. 注意,直接删除整个bridge时不单独上报port status。

4. reason类型为OFPPR_MODIFY

ofproto_port_set_state

  1. STP或RSTP协议触发的state状态变化,上报此状态。state主要是前缀为OFPUTIL_PS_STP的几种。

update_port

  1. vhostuserclient对应虚机start,上报此状态。state报为OFPUTIL_PS_LIVE。(虚机中shutdown对应虚拟网卡不影响本状态)
  2. vhostuserclient对应虚机destroy,触发上报两次modify。第一次state报为OFPUTIL_PS_STP_LISTEN,第二次报OFPUTIL_PS_STP_LISTEN。
  3. dpdk类型interface对应网卡网线接通时,上报此状态。state报OFPUTIL_PS_LIVE。(如果是配置后第一次接通则会先上报add,随后上报本条)

update_port_config

  1. 修改配置,旧port名存在(代码中流程,未找到配置构造方法)
  2. 创建bridge时,在发送add后会再触发一次modify,config为OFPUTIL_PC_PORT_DOWN,state为OFPUTIL_PS_LINK_DOWN,mac地址做了重新配置。
  3. 修改bridge的type时,处理同创建bridge一致。
  4. ofctl配置或控制器下发up down no_recv no_recv_stp no_flood no_forward no_packet_in等配置时,会触发配置修改上报,
  5. 删除bridge中最后一个有效port,触发一次modify,上报bridge同名port;config为OFPUTIL_PC_PORT_DOWN,status为OFPUTIL_PS_LINK_DOWN。
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0