代码之家  ›  专栏  ›  技术社区  ›  HSC

Ryu控制器丢弃数据包

  •  3
  • HSC  · 技术社区  · 8 年前

    1. 我定义了行动: actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
    2. 则条目本身: out = ofp_parser.OFPPacketOut(datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,actions=actions)
    3. 向交换机发送消息: dp.send_msg(out)

    我正试图找到文档,让这段代码删除包,而不是淹没,但没有成功。我想我必须改变第一步的行动 fp_parser.OFPPacketOut 在第二步。我需要一个对Ryu更有经验的人,并发展自己,为我指出正确的方向。非常感谢。

    1 回复  |  直到 8 年前
        1
  •  1
  •   AlanObject    8 年前

    记住记住你的流程优先级。如果有多个流规则与数据包匹配,则具有最高优先级的流规则将生效。因此,您的“丢弃数据包”可能隐藏在更高优先级的流规则后面。

    下面是我的一些代码,假设没有更高优先级的数据包匹配,它将丢弃与给定以太网类型匹配的所有流量。函数依赖于两个实例变量,即 数据通路 , 原型 解析器 .

    def dropEthType(self,
                    match_eth_type = 0x0800):
        parser = self.parser
        proto = self.proto
        match = parser.OFPMatch(eth_type = match_eth_type)
        instruction = [
            parser.OFPInstructionActions(proto.OFPIT_CLEAR_ACTIONS, [])
            ]
        msg = parser.OFPFlowMod(self.datapath,
                                table_id = OFDPA_FLOW_TABLE_ID_ACL_POLICY,
                                priority = 1,
                                command = proto.OFPFC_ADD,
                                match = match,
                                instructions = instruction
                                )
        self._log("dropEthType : %s" % str(msg))
        reply = api.send_msg(self.ryuapp, msg)
        if reply:
            raise Exception