;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*-
;;; Patch file for System version 123.26
;;; Reason:
;;;  ip:setup-my-internet-address now calls ip:parse-internet-address on the network
;;;  number and subnet masks from the site file.  Thus, you can specify them in
;;;  human readable dotted-decimal rather than just as site-editor readable bignums.
;;; Written 5-Oct-87 16:09:24 by pld at site LMI Cambridge
;;; while running on Jack Flanders from band 2
;;; with Experimental System 123.25, 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.12, SDU ROM 8.



; From modified file DJ: L.NETWORK.IP-TCP.KERNEL; IP.LISP#269 at 5-Oct-87 16:09:24
#10R INTERNET#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "INTERNET")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; KERNEL; IP  "

(defun setup-my-internet-address ()
  "Reads :network-names site option and sets up *network-list*.
Return two values: a list of our Internet addresses and a list of corresponding Subnet Masks"
  (declare (values address-list subnet-mask-list))
  (let* ((network-addresses (send si:local-host :network-addresses))
	 (internet-addresses (getf network-addresses :internet))
	 (network-names (global:get-site-option :network-names)))
    (setq *network-list* nil)
    (dolist (network network-names)
      (dolist (domain (second network))
	(when (eq (first domain) :internet)
	  (let* ((network-number (parse-internet-address (second domain)))
		 (subnet-mask (if (third domain)
				  (parse-internet-address (third domain))
				(ip-subnet-mask network-number))))
	    (push (cons network-number subnet-mask) *network-list*)))))
    (flet ((find-subnet-mask (address)
	     ;;given address and *network-list*, return subnet-mask
	     (multiple-value-bind (network-number mask)
		 (ip-network-number-and-mask address)
	       (let ((found (assoc network-number *network-list*)))
		 (if found
		     (cdr found)
		   mask)))))
      (values internet-addresses (mapcar #'find-subnet-mask internet-addresses)))))

))
