Ejemplo n.º 1
0
    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))
Ejemplo n.º 3
0
 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))
Ejemplo n.º 4
0
 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))
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
 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))
Ejemplo n.º 8
0
 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))