;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 121.24
;;; Reason:
;;;  The 3com microcode does not check the bits the 3com board sets to indicate that the received packet
;;;  had FCS or framing errors.  Neither does the routine chaos:lambda-get-next-packet.  Thus, if the
;;;  3com receives a bad packet, the chaos code won't know.  The microcode should probably not pass such
;;;  packets up, but it is easy enough to discard them in lambda-get-next-pkt...
;;; Written 6-Feb-87 20:57:02 by pld (Peter L. DeWolf) at site LMI Cambridge
;;; while running on Azathoth from band 3
;;; with Experimental System 121.23, Experimental Lambda-Diag 15.0, Experimental ZMail 70.2, Experimental KERMIT 32.0, Experimental Unix-Interface 10.0, Experimental Local-File 72.0, Experimental FILE-Server 21.0, Experimental Tape 13.0, Experimental Site Data Editor 5.0, microcode 1733, SDU Boot Tape 3.12, SDU ROM 102, the old ones.



; From modified file DJ: L.NETWORK.CHAOS; CHSNCP.LISP#376 at 6-Feb-87 20:57:03
#8R CHAOS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "CHAOS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; CHAOS; CHSNCP  "

(defun lambda-get-next-pkt (&aux int-pkt)
  (cond ((null fake-receive-list)
	 (setq int-pkt (chaos-list-get int-receive-list-pointer))
	 (when (and int-pkt (not (zerop (logand #o250 (int-pkt-csr-2 int-pkt)))))
	   (incf ethernet:*ethernet-fcs-errors*)
	   (setf (int-pkt-thread int-pkt) nil)
	   (free-int-pkt int-pkt)
	   (return-from lambda-get-next-pkt nil)))
	(t
	 (without-interrupts
	   (setq int-pkt fake-receive-list)
	   (setq fake-receive-list (int-pkt-thread fake-receive-list)))))
  (incf pkts-received)
  int-pkt)

))
