-
Ryu_manager Openflow1.0 -> Openflow1.3 변경Security in CPS/Networking 2020. 8. 4. 23:28
SDN Controller 로 Ryu_manager 를 사용중인데 최근 여러가지 이슈들로 인해 Openflow1.3으로 변경하여 실험을 진행해 보았다.
Openflow1.0에선 Version negotiation 이후 스위치에 매칭되는 flow rule이 존재하지 않을 경우 자동으로 Controller 로 패킷을 포워딩하는 기능이 내재되어 있었다. 하지만 Openflow1.3에서는 이를 명시적으로 rule 을 추가해야만 컨트롤러에서 스위치로 부터 패킷을 전달받을 수 있다. 이는 Simple_switch_13.py에 이미 포함되어 있으나 Openflow1.0만을 사용하던 나로써는 당황스러울 수밖에 없었다.
다음은 Simple_switch_13.py에서 해당하는 코드 snippet이다.
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) def switch_features_handler(self, ev): datapath = ev.msg.datapath ofproto = datapath.ofproto parser = datapath.ofproto_parser # install table-miss flow entry # # We specify NO BUFFER to max_len of the output action due to # OVS bug. At this moment, if we specify a lesser number, e.g., # 128, OVS will send Packet-In with invalid buffer_id and # truncated packet data. In that case, we cannot output packets # correctly. The bug has been fixed in OVS v2.1.0. match = parser.OFPMatch() actions = [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER, ofproto.OFPCML_NO_BUFFER)] self.add_flow(datapath, 0, match, actions) def add_flow(self, datapath, priority, match, actions, buffer_id=None): ofproto = datapath.ofproto parser = datapath.ofproto_parser inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)] if buffer_id: mod = parser.OFPFlowMod(datapath=datapath, buffer_id=buffer_id, priority=priority, match=match, instructions=inst) else: mod = parser.OFPFlowMod(datapath=datapath, priority=priority, table_id = 100, match=match, instructions=inst) datapath.send_msg(mod)
이 때 주의할 것은 table_id 항목이다. 샘플 코드에서는 포함되어 있지 않지만 그냥 실행시 다음과 같은 에러를 만나게 된다. 링크도 첨부했지만 table_id 가 설정하지 않을 경우 default 값인 0 으로 설정이 되는데 Controller 로 패킷을 전달해야 하는 경우 HW:100, SW:200 으로 설정해야만 에러가 발생하지 않게 된다. (샘플코드만 믿고 따라하다가 맘고생만 했다.ㅠ.ㅠ)
2020-08-04 23:01:05,657 OFPErrorMsg(type=0x3, code=0x1, data=b'\x04\x0e\x00\x50\x69\x68\x62\xee\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x04\x00\x00\x00\x00\x00\x04\x00\x18\x00\x00\x00\x00') |-- type: OFPET_BAD_INSTRUCTION(3) |-- code: OFPBIC_UNSUP_INST(1) `-- data: version=0x4, msg_type=0xe, msg_len=0x50, xid=0x696862ee `-- msg_type: OFPT_FLOW_MOD(14) 2020-08-04 23:01:05,657 `-- data: version=0x4, msg_type=0xe, msg_len=0x50, xid=0x696862ee `-- msg_type: OFPT_FLOW_MOD(14)
'Security in CPS > Networking' 카테고리의 다른 글
[ryu] HPE arura 2920 using openflow 1.3 (0) 2020.08.06 TCP checksum error (0) 2020.08.06 [Openflow] Physical Port of FeatureResponse (0) 2020.07.31 [Openflow] FeatureRequest and FeatureResponse (0) 2020.07.31 [Network] 데이터 Bandwidth에 영향을 미치는 설정값과 변경 (0) 2020.07.22