Google
 

Trailing-Edge - PDP-10 Archives - BB-P363B-SM_1985 - t20/nmlt20/nmukni.b36
There is 1 other file named nmukni.b36 in the archive. Click here to see a list.
! UPD ID= 193, SNARK:<6.1.NML>NMUKNI.B36.7,  10-Dec-84 14:53:38 by HALPIN
! Get MONSYM Library file out of default directory, not BLI:
!
! UPD ID= 181, SNARK:<6.1.NML>NMUKNI.B36.6,   7-Dec-84 08:41:37 by HALPIN
! Change all DLX_LOAD and DLX_DUMP references to DLX_LDA.  Now there is
! one Circuit Block for Load/Dump Assistance.
! Fix NMU$KLNI_CLOSE to call CLOSE_KLNI_DEVICE for LOAD/DUMP ASSISTANCE,
! just return $true for DLX_TRIGGER and DLX_LOOP.
!
! UPD ID= 171, SNARK:<6.1.NML>NMUKNI.B36.5,  19-Nov-84 10:17:09 by HALPIN
! Add support for LOAD/DUMP and ENABLE MULTICAST over the KLNI.
!
! UPD ID= 150, SNARK:<6.1.NML>NMUKNI.B36.4,  31-Oct-84 09:50:50 by GUNN
! Allow DLX_TRIGGER in NMU$KLNI_OPEN.
!
! UPD ID= 146, SNARK:<6.1.NML>NMUKNI.B36.3,  30-Oct-84 11:33:36 by GUNN
! Add call to BOOT_REMOTE for DLX_TRIGGER case in NMU$KLNI_WRITE.
!
! UPD ID= 109, SLICE:<6.1.NML>NMUKNI.B36.2,  18-Sep-84 16:24:12 by GUNN
%title 'NMUKNI -- Ethernet KLNI MOP Interface'
module NMUKNI (
               ident = 'X00.01'
               ) =

begin

!
! COPYRIGHT (C) 1984.
! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS  01754
!
! THIS SOFTWARE IS FURNISHED  UNDER A LICENSE FOR USE ONLY ON A SINGLE
! COMPUTER  SYSTEM AND  MAY BE  COPIED ONLY WITH  THE INCLUSION OF THE
! ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE, OR ANY OTHER COPIES  THEREOF
! MAY NOT BE PROVIDED OR  OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON
! EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE
! TERMS.  TITLE TO AND  OWNERSHIP OF THE  SOFTWARE  SHALL AT ALL TIMES
! REMAIN IN DEC.
!
! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
! AND SHOULD  NOT BE CONSTRUED  AS A COMMITMENT  BY DIGITAL  EQUIPMENT
! CORPORATION.
!
! DEC ASSUMES  NO  RESPONSIBILITY  FOR  THE USE OR  RELIABILITY OF ITS
! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
!

!++
!
! Facility:	LSG DECnet Management
!
! Abstract:	This module provides direct line access for
!		NI circuits on KL systems.
!
! Environment:	TOPS-20 version 6.1 or later
!
! Author:	Dale C. Gunn		Creation date:	4-Jun-84
!
! Modified by:
!
!--
!
! Library files
!

library 'NMULIB';                       ! Get all required definitions

library 'MONSYM';			! Monitor symbols

library 'JLNKG';			! JSYS linkage definitions

library 'BLI:TENDEF';                   ! Get MONxxx definitions

!
! Global routines
!

forward routine
    NMU$KLNI_ROUTINES,
    OPEN_KLNI_DEVICE,
    CLOSE_KLNI_DEVICE,
    READ_MOP_LOOP,
    READ_MOP_LOAD_DUMP,
    BOOT_REMOTE,
    WRITE_MOP_LOOP,
%if $TOPS20
%then
    POST_RECEIVE_BUFFER,
%fi
    ENABLE_MULTICAST_ADDRESS,
    WRITE_MOP_LOAD_DUMP;


!
! External references
!

external routine
    NMU$MEMORY_MANAGER,
    NMU$TEXT,
    NMU$PAGE_ALLOCATOR,
    NMU$SCHED_MANAGER;
%global_routine ('NMU$KLNI_OPEN', CD: ref CD_BLOCK, RSP_POINTER) =

!++
! Functional description:
!
!	This routine is called by NMU$DLX_OPEN to open a
!	KLNI circuit in MOP protocol mode.  The link is
!	set up properly depending upon its usage.
!
! Formal parameters:
!
!	.CD			Pointer to circuit data block
!	.RSP_POINTER		Pointer to NICE response buffer
!
! Routine value:
!
!	$true			No errors
!	$false			Error occured
!
!--

begin

    !
    ! Fill in the circuit data block KLNI specific entries
    !

    CD [CD_KLNI_CHAN] = 0;              ! Get channel from circuit id
    CD [CD_KLNI_REQNO] = 0;             ! Reset request number

    !
    ! Check for valid operations (LOAD, DUMP, LOOP, and TRIGGER on KLNI device)
    !

    if (.CD [CD_USAGE] neq DLX_LOOP)
       and
       (.CD [CD_USAGE] neq DLX_TRIGGER)
       and
       (.CD [CD_USAGE] neq DLX_LDA)
    then
	begin
	    $RESPONSE (.RSP_POINTER, NICE$_OPF, 0,
		       'Function not supported on device');
	    return $false;
	end;

    !
    ! Do system specific open of KLNI device
    !

    if not OPEN_KLNI_DEVICE (.CD, .RSP_POINTER)
    then
	return $false;

    $true

end;				! End of NMU$KLNI_OPEN
%global_routine ('NMU$KLNI_CLOSE', CD: ref CD_BLOCK) =

!++
! Functional description:
!
!	This routine is called from NMU$DLX_CLOSE to release
!	a KLNI circuit from network management service.
!
! Formal parameters:
!
!	.CD			Pointer to circuit data block
!
! Routine value:
!
!	$true			Successful
!	$false			Error during close
!
!--

begin

    !
    ! Do system specific KLNI close
    !

    if .CD [CD_USAGE] eql DLX_LDA
    then return CLOSE_KLNI_DEVICE (.CD)
    else return $true;

end;				! End of NMU$KLNI_CLOSE
%global_routine ('NMU$KLNI_READ', CD: ref CD_BLOCK, USAGE, PTR, LEN, RSP_POINTER) =

!++
! Functional description:
!
!	This routine is called from NMU$DLX_READ to read a MOP
!	message from a KLNI circuit.
!
! Formal parameters:
!
!	.CD			Pointer to circuit data block
!	.USAGE			What type of read is supposed to be done
!				    (DLX_DATA for MOP data)
!	.PTR			Pointer to message buffer
!	.LEN			Number of bytes in message buffer to write
!	.RSP_POINTER		Pointer to NICE response buffer
!
! Routine value:
!
!        Number of bytes read on circuit
!
!		or
!
!	-2 for read timeout
!	-1 for any other error
!
!--

begin

    !
    ! Do write based on type of usage
    !

    selectone .CD [CD_USAGE] of
    set

	[DLX_LOOP]:			! MOP loop
            begin
            local
                MOP_COUNT,
                MOP_POINTER,
                MOP_DATA_WORD;

            MOP_COUNT = 0;
            MOP_COUNT = READ_MOP_LOOP (.CD, .PTR, .LEN, .RSP_POINTER);
            MOP_POINTER = .PTR;
            return .MOP_COUNT
            end;

        [DLX_LDA]:
            return READ_MOP_LOAD_DUMP (.CD, .PTR, .LEN, .RSP_POINTER);

	[otherwise]:
	    TASK_ERROR ('NMU$KLNI_READ called with invalid usage');

    tes;

    return -1

end;				! End of NMU$KLNI_READ
%global_routine ('NMU$KLNI_WRITE', CD: ref CD_BLOCK, USAGE, PTR, LEN, RSP_POINTER) =

!++
! Functional description:
!
!	This routine is called from NMU$DLX_WRITE to write a MOP
!	message onto a KLNI circuit.
!
! Formal parameters:
!
!	.CD			Pointer to circuit data block
!	.USAGE			What type of write is supposed to be done
!				    (DLX_DATA for MOP data)
!                                or (DLX_OTHER ?)
!	.PTR			Pointer to message buffer
!	.LEN			Number of bytes in message buffer to write
!	.RSP_POINTER		Pointer to NICE response buffer
!
! Routine value:
!
!	$true			Success
!	$false			Failure during write
!
!--

begin

    !
    ! Do write based on type of usage
    !

    selectone .CD [CD_USAGE] of
    set

	[DLX_LOOP]:			! MOP loop
	    return WRITE_MOP_LOOP (.CD, .PTR, .LEN, .RSP_POINTER);

        [DLX_LDA]:
            return WRITE_MOP_LOAD_DUMP (.CD, .PTR, .LEN, .RSP_POINTER);

	[DLX_TRIGGER]:			! MOP Trigger Boot
	    return BOOT_REMOTE (.CD, .PTR, .LEN, .RSP_POINTER);

	[otherwise]:
	    TASK_ERROR ('NMU$KLNI_WRITE called with invalid usage');

    tes;

    $false

end;				! End of NMU$KLNI_WRITE
%global_routine ('NMU$KLNI_ENABLE_MULTICAST', CD: ref CD_BLOCK, RSP_POINTER) =
!++
! Functional description:
!
!	This routine is called from NMU$DLX_ENABLE_MULTICAST to Enable
!	a Multicast Address on a KLNI circuit.
!
! Formal parameters:
!
!	.CD			Pointer to circuit data block
!	.RSP_POINTER		Pointer to NICE response buffer
!
! Routine value:
!
!	$true			Success
!	$false			Failure
!
!--

begin

return ENABLE_MULTICAST_ADDRESS (.CD, .RSP_POINTER);

end;            ! of NMU$KLNI_ENABLE_MULTICAST
!
! System specific KLNI service routines
!

switches
    list (require);

%if $TOPS20
%then require 'KNIT20';
%else %if $TOPS10
%then %error ('NMUKNI not supported for TOPS-10')
%else %error ('NMUKNI not supported for MCB')
%fi %fi

end					! of module NMUKNI
eludom