在 Pox 中通过 cookie 匹配删除流?

网络工程 sdn 开放流
2022-02-22 16:57:17

是否可以使用 OpenFlow 的 Pox 控制器删除与某个 cookie 编号匹配的流?我试过类似的东西:

def delete_flow(dpid,cookie):
   msg = of.ofp_flow_mod()
   msg.match=of.ofp_match()

   msg.match.cookie=cookie
   msg.match.cookie_mask=0xffffffff

   msg.command=of.OFPFC_DELETE
   msg.flags = of.OFPFF_SEND_FLOW_REM    

   sw = switches[dpid]
   if sw.connection is None: return
   sw.connection.send(msg)
   log.info("Flow %i deleted from sw %i" %(cookie,dpid))

但看起来所有流量都从所有交换机中删除。

1个回答

不。

根据OpenFlow 1.0 规范(由于您使用的是 POX,我可以假设这是您正在使用的版本。)cookie 字段仅用于识别通过流统计检索或过期的流。

cookie 字段是由控制器设置的不透明数据值。它不用于任何匹配功能,因此不需要驻留在硬件中。

如果您想使用 cookie 删除或修改您需要使用 OpenFlow 1.1 或更高版本。来自OF 1.1 规范

如果 cookie_mask 字段包含非 0 值,修改和删除命令也可以通过 cookie 值过滤。此约束是流 mod 的 cookie 字段中的 cookie_mask 指定的位必须与流的 cookie 值相等. 换句话说,(flow.cookie & flow mod.cookie 掩码) == (flow mod.cookie & flow mod.cookie 掩码)。