;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*- ;;; Patch file for System version 123.204 ;;; Reason: ;;; A few problems with (ip:initialize-route-table): ;;; - If called when we are not currently enabled for IP, but we do have an IP ;;; address (e.g. when just loaded proper site files), used to get an error ;;; in (ip:add-gateway) because we had no "default-interface" ;;; - The Share interface ended up being our *default-interface* even when we ;;; controlled the Ethernet. ;;; Written 8-Feb-88 17:21:45 by pld at site Gigamos Cambridge ;;; while running on Jack Flanders from band 2 ;;; with Experimental System 123.203, Experimental Local-File 73.3, Experimental FILE-Server 22.1, Experimental Unix-Interface 11.0, Experimental KERMIT 34.3, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, Experimental Tape 21.1, microcode 1754, SDU Boot Tape 3.12, SDU ROM 8. ; From modified file DJ: L.NETWORK.IP-TCP.KERNEL; IP.LISP#284 at 8-Feb-88 17:21:46 #10R INTERNET#: (COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "INTERNET"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; KERNEL; IP  " (defun initialize-route-table (default-internet-address) (when default-internet-address (setq *default-gateway* nil) (setq *default-interface* nil) (when (consp default-internet-address) ;;If given a list of addresses, assume the first is the default (setq default-internet-address (first default-internet-address))) (let ((r (global:get-site-option :default-internet-routing)) (default-interface nil)) (setq *route-table* nil) ;;Add entries for directly connected networks (setq *default-network-numbers* nil) (dolist (ni *network-interfaces*) (let ((my-address (second (assoc :internet (net:ni-address-alist ni) :test #'eq)))) (when my-address ;If we have an Internet address on this network... (let* ((ip-on-ni (assoc :internet (net:ni-network-alist ni) :test #'eq)) (my-network (second ip-on-ni)) (mask (third ip-on-ni))) (when my-network ;If this directly connects us to another network (when (= my-address default-internet-address) ;If this interface has my default address... (setq default-interface ni)) ;make it my default interface (let ((network-number (logand mask my-network))) (push (cons network-number mask) *default-network-numbers*) (add-gateway network-number my-address ni))))))) ;;Add entries for gateways listed in site files (when default-interface ;If we are not currently enabled for IP, nothing to do... (cond ((null r)) ((atom r) (let ((parsed-address (parse-internet-address r))) (if parsed-address (add-gateway 0 parsed-address default-interface) (tv:careful-notify nil t "Bad Internet Address in :default-internet-routing site option: ~S" r)))) ((listp r) (dolist (elem r) (let ((parsed-network (parse-internet-address (first elem))) (parsed-gateway (parse-internet-address (second elem)))) (if (and parsed-network parsed-gateway) (add-gateway parsed-network parsed-gateway default-interface) (tv:careful-notify nil t "Bad entry in :default-internet-routing site option: ~S" elem))))) (t nil)))) (let ((op-address nil)) (cond ((null si:*ethernet-hardware-controller*)) ;No network interface? Too bad... ((eq si:*ethernet-hardware-controller* si:*my-op*)) ;We talk directly to ethernet? Good... ((setq op-address (net:find-network-address-for-other-processor si:*ethernet-hardware-controller* :internet)) (add-gateway 0 op-address si:share-interface)) (t (tv:careful-notify nil t "The si:*ethernet-hardware-controller* has no Internet Address")))))) ))