今天搞了我一天的錯誤,好在現在解決了:
問題介紹:
我想使用下面的代碼來設置一條流,匹配從地址10.0.0.1到10.0.04的流量
datapath = switch.dp ofproto = datapath.ofproto parser = datapath.ofproto_parser match = parser.OFPMatch( ipv4_src = ('10.0.0.1'), ipv4_dst = ('10.0.0.2') ) actions = [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER, ofproto.OFPCML_NO_BUFFER)] nst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)] mod = parser.OFPFlowMod(datapath=datapath,cookie=COOKIE_ADMIN_RULE, priority=ADMIN_PRIORITY+1,match=match, instructions=inst) datapath.send_msg(mod)
但是,使用了之后,沒有辦法添加到OVS上。
然后下面的網頁給我找到了解決方法:
https://sourceforge.net/p/ryu/mailman/message/35091288/
這里面雖然問題不是我的問題,但是我看了很多個帖子,很多設置流的,都沒有設置IP地址的。有設置的,都設置了很多其他的屬性,包括了包的類型什么的。所以,我想這可能是我的錯誤原因。然后,添加之后,確實可以了。而且,學習了一種優美一點的寫法
from ryu.lib.packet import ether_types from ryu.lib.packet import in_proto as inet kwargs = dict(in_port=1, eth_type=ether_types.ETH_TYPE_IP, ipv4_src='10.0.0.1', ipv4_dst='10.0.0.2', ip_proto=inet.IPPROTO_UDP, udp_dst=5555) match1 = parser.OFPMatch(**kwargs) kwargs['in_port'] = 2 match2 = parser.OFPMatch(**kwargs)