RYU OFPMatch 的使用方法
今天搞了我一天的错误,好在现在解决了:
问题介绍:
我想使用下面的代码来设置一条流,匹配从地址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)