2016-12-07 13 views
2

Ryu를 사용하여 패키지 삭제를 위해 플로우 항목을 보내려면 어떻게해야합니까? 이 actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)] Ryu 컨트롤러 드롭 패킷

  • 은 다음 항목 자체가 : dp.send_msg(out)
  • : out = ofp_parser.OFPPacketOut(datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,actions=actions)
  • 스위치에 메시지를 보냅니다
    1. 내가 작업을 정의 : 나는 흐름 항목을 패키지를 보내는 방법을 튜토리얼에서 배운

    이 코드가 홍수 대신 패키지를 떨어 뜨리기 위해 문서를 찾으려고하는데 성공하지 못했습니다. 첫 번째 단계에서는 동작을 변경해야하고 두 번째 단계에서는 fp_parser.OFPPacketOut을 변경해야한다고 생각합니다. Ryu에 대해 더 많은 경험이 필요하고 올바른 방향으로 나를 가리 키기 위해 스스로 개발해야합니다. 고맙습니다.

  • +0

    나는 류에게 처음이다. 나는 또한 같은 문제를 만났다. 코드를 공유 할 수 있습니까? 정말 고마워! – Charlie

    답변

    0

    OpenFlow에서 패킷의 기본 처리는 패킷을 삭제하는 것입니다. 따라서 패킷을 삭제하려는 플로 규칙이있는 경우 CLEAR_ACTIONS에 명령을 내린 다음 다른 명령을 사용하지 않아야합니다. 즉, 처리 할 명령이 없기 때문에 다른 테이블이 처리되지 않습니다 (go to) 다른 테이블과 그것에 대한 조치가 없습니다.

    흐름 우선 순위에 유의하십시오. 패킷과 일치하는 둘 이상의 흐름 규칙이있는 경우 우선 순위가 가장 높은 흐름 규칙이 적용됩니다. 따라서 "드롭 패킷"은 우선 순위가 높은 흐름 규칙 뒤에 숨겨 질 수 있습니다.

    다음 코드는 우선 순위가 높은 패킷이 일치하지 않는다고 가정하고 주어진 EtherType과 일치하는 모든 트래픽을 삭제합니다. 이 함수는 두 인스턴스 변수, 즉 데이터 경로, proto파서에 종속됩니다.

    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 
    
    +0

    앨런, 나를 위해 작동하지 않았다, 다음과 같은 오류가 발생합니다 파일 "/home/ubuntu/ryu/ryu/app/experiment.py", 줄 94, _packet_in_handler dropout = parser.OFPInstructionActions (type = ofproto.OFPIT_CLEAR_ACTIONS) TypeError : __init __()에 'type'값이 예상치 못한 키워드가 있습니다. – HSC

    +0

    많은 변형을 시도했지만 여전히 작동하도록 코드를 가져올 수 없습니다. 나는 단순한 switch_13.py ryu를 사용하여 if 조건을 사용하여 00 : 00 : 00 : 00 : 02라고 말하는 mininet의 특별한 mac 주소에서 패키지를 가져 오는 제안을 테스트합니다. 만약 사용자가 "return"코드 대신에 그것이 작동한다고 제안했지만 매번 packetin 메시지를받는다면 나는 그것을 피하고자합니다. – HSC

    +0

    @HSC 내가 방금 한 편집을보고 도움이되는지 확인하십시오. – AlanObject