 // Extend Roadside Units with the ability to receive packets
 extension RoadsideUnit: PacketReceiver {
 	func receive(packet: Packet) {
-		// We should never receive packets sent by ourselves
-		assert(packet.src != id)
+		// We should never receive packets sent by ourselves on layer2
+		assert(packet.l2src != id)
+
+		// Ignore retransmissions of packets originally sent by ourselves
+		guard packet.l3src != id else { return }
 
 		// Ignore packets we've already seen
 		// Note: Packet IDs must not change during retransmissions


// A message packet
struct Packet {
	enum Destination {
		case Unicast(destinationID: UInt)
		case Broadcast(hopLimit: UInt)
		case Geocast(targetArea: AreaType)
	}

	var id: UInt
	var src: UInt
	var dst: Destination

	var created: SimulationTime

	var payload: Payload
	var payloadType: PayloadType
}

// A payload is a simple text field

					city.stats.metrics["beaconsReceived"] = recvBeacons
				}
			}

		case .CoverageMapRequest:
			// TODO: send over the coverage map
			break

		case .CoverageMap:
			// TODO process this coverage map
			// Store the map in a temporary buffer
