;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*- ;;; Patch file for System version 123.16 ;;; Reason: ;;; User interface for network configuration: ;;; - (chaos:reset), (which is no longer the function to call when you've snarfed the Ethernet) ;;; now suggests that you might want to call (net:configure) ;;; - (net:configure) now notifies you if your processor has no internet address (which can screw ;;; up other processors on your backplane that DO have internet addresses, if you own the ;;; Ethernet ;;; Written 21-Sep-87 12:01:25 by pld at site LMI Cambridge ;;; while running on Death from band 2 ;;; with Experimental System 123.15, Experimental Local-File 73.0, Experimental FILE-Server 22.0, Experimental Unix-Interface 11.0, Experimental Tape 18.0, Experimental KERMIT 34.0, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, microcode 1754, SDU Boot Tape 3.13, SDU ROM 102. ; From modified file DJ: L.NETWORK.CHAOS; CHSNCP.LISP#387 at 21-Sep-87 12:01:53 #10R CHAOS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "CHAOS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; CHAOS; CHSNCP  " (defun reset (&optional enable-p) "Turn off and reinitialize the chaosnet software. This may unwedge it if it is not working properly. This will cause all of your currently open connections to lose. You must call CHAOS:ENABLE to turn the chaosnet ncp on again before you can use the chaosnet; but many user-level functions that use the net will do that for you. Calling this function with ENABLE-P of T will have the same effect." (disable) (without-interrupts (setq background-requests nil) ;Get rid of requests for connections flushing (setq retransmission-needed t) (do ((cl conn-list (cdr cl))) ((null cl)) (free-all-read-pkts (car cl)) (free-all-received-pkts (car cl)) (free-all-send-pkts (car cl)) (setf (state (car cl)) 'inactive-state)) (do ((i 1 (1+ i))) ((= i maximum-index)) (aset nil index-conn i)) (setq distinguished-port-conn-table nil) (setq conn-list nil) (or (and (fixp index-conn-free-pointer) (> maximum-index index-conn-free-pointer -1)) (setq index-conn-free-pointer 1)) ;; The initialization is needed because if the LISP Machine has an open connection, ;; it gets reloaded, and the connection is established on the same index before the ;; other end has gone into INCXMT state, then the RFC will look like a duplicate. ;; Though this may sound like a rare event, it is exactly what happens with the ;; file job connection!! (do ((index 0 (1+ index))) ((>= index maximum-index)) (aset (+ (zl:time) index) uniquizer-table index)) ;; Should actually try and free up these (setq pending-listens nil) (setq pending-rfc-pkts nil) (setq *brd-pkts-in* 0 *brd-pkts-out* 0 *brd-history* nil *brd-replies-in* 0 *receive-broadcast-packets-p* nil)) (when enable-p (enable)) (format nil "Reset and ~:[dis~;en~]abled -- perhaps you need to do (NET:CONFIGURE)" enable)) )) ; From modified file DJ: L.NETWORK.KERNEL; CONFIGURE.LISP#80 at 21-Sep-87 12:01:58 #10R NETWORK#: (COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "NETWORK"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERNEL; CONFIGURE  " (defun configure () ;; If we are in the cold load, do a mini-configuration (when si:*in-cold-load-p* (cold-load-configure) (return-from configure t)) ;; Clear out current network configuration (deconfigure) ;;Put the network clock function onto the clock list (without-interrupts (pushnew 'net:network-clock sys:clock-function-list)) ;; Start the device drivers (setup-loopback "LOOPBACK") (select-processor (:lambda (si:set-processor-owning-ethernet :find :3com) (cond ((eq ethernet:*3com-owner* si:*my-op*) (ethernet:setup-3com "ONE") (si:set-processor-owning-ethernet :give-up :excelan)) (t (si:set-processor-owning-ethernet :find :excelan) (if (eq ethernet:*excelan-owner* si:*my-op*) (ethernet:setup-excelan "ONE")))) (si:setup-share-interface "SHARE")) (:explorer (ethernet:setup-explorer-ethernet "ONE")) (:cadr (chaos:setup-cadr-network "ONE"))) ;; Start the protocol modules (when (eq si:*my-op* si:*ethernet-hardware-controller*) (arp:setup-arp)) (chaos:setup-chaos) (let ((ip-address-p (ip:setup-ip))) (cond (ip-address-p (icmp:setup-icmp) (udp:setup-udp) (tcp:setup-tcp)) (t (tv:notify nil "This processor has no Internet Address"))) (select-processor (:lambda ;;KLUDGE: share interface must be set up before chaos, as chaos enables itself on share device -- ;;but share interface sets %processor-conf-chaos-address, so must reset it after chaos ;;has set its address (send si:share-interface :reset) ;; for all of our other processors, set up ARP translation for share interface (setq *processor-forwarding-alist* nil) (dolist (op si:*other-processors*) (push (cons op nil) *processor-forwarding-alist*) (dolist (domain '(:chaos :internet)) (let ((address (find-network-address-for-other-processor op domain))) (when address (add-address-info address domain si:share-interface op)))))) ((:cadr :explorer))) (dolist (x (ni-address-alist *loopback-interface*)) ;;For all protocols enabled on the loopback interface, set up address translations (when (second x) (add-address-info (second x) (first x) *loopback-interface* nil))) (when ip-address-p ;;Start the TCP/UDP server process and enable network services (tcp-application:initialize-tcp-server-process) (tcp-application:enable-all-network-services) (tcp-application:initialize-udp-rwho-server-process))) ;;Start the network receiver process (start-receiver) (setup-network-gauges) ;If Fancy-Landscape enabled, populate screen with gauges t) ))