anchor.diff:                                dest-ip
                                 (address-network-broadcast interface-address prefix-length)))))
                    (not (multicast-address-p dest-ip)))
  -        (format t "Discarding IPv4 packet addressed to someone else. ~A~%" dest-ip)
  +        (when *print-discarded-packets*
  +          (format t "Discarding IPv4 packet addressed to someone else. ~A~%" dest-ip))
  +        (incf *discarded-packet-count*)
           (return-from mezzano.network.ethernet:ethernet-receive))
         (ipv4-receive protocol packet
                       dest-ip source-ip
  
positive.code: (defmethod ipv4-receive (protocol packet dest-ip source-ip start end)
    nil)
  
  (defmethod mezzano.network.ethernet:ethernet-receive
      ((ethertype (eql mezzano.network.ethernet:+ethertype-ipv4+))
       interface packet start end)
    (let ((actual-length (- end start)))
      (when (< actual-length 20)
        ;; Runt packet with an incomplete header.
        (format t "Discarding runt IPv4 packet (~D bytes).~%" actual-length)
        (return-from mezzano.network.ethernet:ethernet-receive))
      (let* ((version-and-ihl (aref packet (+ start +ipv4-header-version-and-ihl+)))
             (version (ldb (byte +ipv4-header-version-size+ +ipv4-header-version-position+)
  
negative.code:            (dest-ip (make-ipv4-address (ub32ref/be packet (+ start +ipv4-header-destination-ip+)))))
        (declare (ignore ttl))
        (when (not (eql version 4))
          (when *print-discarded-packets*
            (format t "Discarding IPv4 packet with bad version ~D.~%" version))
          (incf *discarded-packet-count*)
          (return-from mezzano.network.ethernet:ethernet-receive))
        (when (< header-length 20)
          (when *print-discarded-packets*
            (format t "Discarding IPv4 packet with too-short header-length ~D.~%" header-length))
          (incf *discarded-packet-count*)
          (return-from mezzano.network.ethernet:ethernet-receive))
        (when (> header-length actual-length)
          (when *print-discarded-packets*
            (format t "Discarding IPv4 packet with too-long header-length ~D (max ~D).~%" header-length actual-length))
          (incf *discarded-packet-count*)
          (return-from mezzano.network.ethernet:ethernet-receive))
        (when (> header-length total-length)
          (when *print-discarded-packets*
            (format t "Discarding IPv4 packet with too-short total-length ~D (smaller than header-length ~D).~%" total-length header-length))
          (incf *discarded-packet-count*)
          (return-from mezzano.network.ethernet:ethernet-receive))
        (when (> total-length actual-length)
          (when *print-discarded-packets*
            (format t "Discarding IPv4 packet with too-long total-length ~D (max ~D).~%" total-length actual-length))
          (incf *discarded-packet-count*)
          (return-from mezzano.network.ethernet:ethernet-receive))
        (when (logbitp +ipv4-header-flag-reserved+ frag-control)
          (when *print-discarded-packets*
            (format t "Discarding IPv4 packet with reserved flag set.~%"))
          (incf *discarded-packet-count*)
          (return-from mezzano.network.ethernet:ethernet-receive))
        (when (not (eql (compute-ip-checksum packet start (+ start header-length)) 0))
          (when *print-discarded-packets*
            (format t "Discarding IPv4 packet with bad header checksum.~%"))
          (incf *discarded-packet-count*)
          (return-from mezzano.network.ethernet:ethernet-receive))
        ;; TODO: Fragmentation support.
        (when (or (not (eql frag-offset 0))
                  (logbitp +ipv4-header-flag-more-fragments+ frag-control))
          (when t ;*print-discarded-packets*
            (format t "Discarding fragmented IPv4 packet (not supported). ~X~%" frag-control))
          (incf *discarded-packet-count*)
          (return-from mezzano.network.ethernet:ethernet-receive))
        ;; Is it address to one of our interfaces?
        ;; If not, forward or reject it.
  