def test_reply_ttl_invalid_message_with_rate_limit(self): pkt = packet.Packet() pkt.add_protocol(ethernet.ethernet(dst='aa:bb:cc:dd:ee:ff')) pkt.add_protocol(ipv4.ipv4(proto=in_proto.IPPROTO_UDP)) pkt.add_protocol(udp.udp()) pkt.serialize() lswitch = l2.LogicalSwitch( id='lswitch1', topic='topic1', unique_key=9, version=1, ) self.app.db_store.update(lswitch) lrouter = l3.LogicalRouter( id='lrouter1', topic='topic1', version=1, unique_key=22, ports=[ l3.LogicalRouterPort( id='lrouter1-port1', unique_key=55, topic='topic1', mac='aa:bb:cc:dd:ee:ff', network='10.0.0.1/24', lswitch='lswitch1', ), ], ) self.app.db_store.update(lrouter) event = ofp_event.EventOFPMsgBase( msg=ofproto_parser.OFPPacketIn( datapath=mock.Mock(), reason=self.app.ofproto.OFPR_INVALID_TTL, match=ofproto_parser.OFPMatch( metadata=lswitch.unique_key, reg5=lrouter.unique_key, ), data=pkt.data, ) ) with mock.patch("dragonflow.controller.common." "icmp_error_generator.generate") as icmp_error: for _ in range(self.app.conf.router_ttl_invalid_max_rate * 2): self.app.packet_in_handler(event) self.assertEqual(self.app.conf.router_ttl_invalid_max_rate, icmp_error.call_count) icmp_error.assert_called_with(icmp.ICMP_TIME_EXCEEDED, icmp.ICMP_TTL_EXPIRED_CODE, mock.ANY, "10.0.0.1", mock.ANY)
def test_pkt_in_filter_discard(self): datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) e = ethernet.ethernet(mac.BROADCAST_STR, mac.BROADCAST_STR, ether.ETH_TYPE_IP) i = ipv4.ipv4() pkt = (e / i) pkt.serialize() pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, data=buffer(pkt.data)) ev = ofp_event.EventOFPPacketIn(pkt_in) ok_(not self.app.packet_in_handler(ev))
def test_pkt_in_filter_pass(self): datapath = _Datapath() e = ethernet.ethernet(mac.BROADCAST_STR, mac.BROADCAST_STR, ether.ETH_TYPE_8021Q) v = vlan.vlan() i = ipv4.ipv4() pkt = (e / v / i) pkt.serialize() pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, data=buffer(pkt.data)) ev = ofp_event.EventOFPPacketIn(pkt_in) ok_(self.app.packet_in_handler(ev))
def test_pkt_in_filter_pass(self): datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) e = ethernet.ethernet(mac.BROADCAST_STR, mac.BROADCAST_STR, ether.ETH_TYPE_8021Q) v = vlan.vlan() i = ipv4.ipv4() pkt = (e / v / i) pkt.serialize() pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, data=six.binary_type( pkt.data)) ev = ofp_event.EventOFPPacketIn(pkt_in) ok_(self.app.packet_in_handler(ev))
def raise_sbp_packet_in_event(self, msg, vport_no, data): msg.match.set_in_port(vport_no) pkt_in = ofproto_v1_3_parser.OFPPacketIn(self.fake_datapath, buffer_id=msg.buffer_id, total_len=msg.total_len, reason=msg.reason, table_id=msg.table_id, cookie=msg.cookie, match=msg.match, data=data) ev = oxp_event.sbp_to_oxp_msg_to_ev(pkt_in) self.oxp_brick.send_event_to_observers(ev, MAIN_DISPATCHER) return
def test_reply_icmp_unreachable_with_rate_limit(self): pkt = packet.Packet() pkt.add_protocol(ethernet.ethernet(dst='aa:bb:cc:dd:ee:ff')) pkt.add_protocol(ipv4.ipv4(dst='10.0.0.1', proto=in_proto.IPPROTO_UDP)) pkt.add_protocol(udp.udp()) pkt.serialize() lrouter = l3.LogicalRouter( id='lrouter1', topic='topic1', version=1, unique_key=22, ports=[ l3.LogicalRouterPort( id='lrouter1-port1', unique_key=55, topic='topic1', mac='aa:bb:cc:dd:ee:ff', network='10.0.0.1/24', ), ], ) self.app.db_store.update(lrouter) event = ofp_event.EventOFPMsgBase( msg=ofproto_parser.OFPPacketIn( datapath=mock.Mock(), reason=self.app.ofproto.OFPR_PACKET_IN, match=ofproto_parser.OFPMatch( reg7=lrouter.ports[0].unique_key, ), data=pkt.data, ) ) with mock.patch("dragonflow.controller.common." "icmp_error_generator.generate") as icmp_error: for _ in range(self.app.conf.router_port_unreach_max_rate * 2): self.app.packet_in_handler(event) self.assertEqual( self.app.conf.router_port_unreach_max_rate, icmp_error.call_count) icmp_error.assert_called_with(icmp.ICMP_DEST_UNREACH, icmp.ICMP_PORT_UNREACH_CODE, pkt.data, pkt=mock.ANY)
def test_pkt_in_filter_truncated(self): datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) truncated_data = '' pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, data=truncated_data) ev = ofp_event.EventOFPPacketIn(pkt_in) ok_(not self.app.packet_in_handler(ev))
def test_pkt_in_filter_truncated(self): datapath = _Datapath() truncated_data = buffer('') pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, data=truncated_data) ev = ofp_event.EventOFPPacketIn(pkt_in) ok_(not self.app.packet_in_handler(ev))