home *** CD-ROM | disk | FTP | other *** search
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --new_ncommu_.ada
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- -----------------------------------------------------------------------
- --
- -- DoD Protocols NA-00002-200 80-01037-100(-)
- -- E-Systems, Inc. August 07, 1985
- --
- -- NEW_NCOMMU_.ADA Author : Jim Baldo
- --
- -----------------------------------------------------------------------
- with STARLET; use STARLET;
- with IP_GLOBALS; use IP_GLOBALS;
- with BUFFER_DATA; use BUFFER_DATA;
- with T_TCP_GLOBALS_DATA_STRUCTURES; use T_TCP_GLOBALS_DATA_STRUCTURES;
-
- package WITH_ULP_COMMUNICATE is
-
- ---------------------------------------------------------------
- --This implementation is for use with DEC/Ada compiler. --
- ---------------------------------------------------------------
-
- -------------------------------------------------------------------------------
- --This package contains all the data abstractions and operations necessary --
- --to support the User/TCP interface and TCP/lower-level interface. --
- --The enumerated type ACTION represents the type of request primitive --
- --that is sent by the upper layer or lower layer protocols. --
- -------------------------------------------------------------------------------
-
- type STATUS_TYPE is ( CONNECTION_OPEN, CONNECTION_CLOSED, OPENING, CLOSING);
- type SECURITIES is array(1..9) of SIXTEEN_BITS ;
- type STATE_TYPE is ( CLOSED, SYN_SENT, SYN_RECEIVED, ESTABLISHED, LISTEN,
- FIN_WAIT_1, CLOSE_WAIT, FIN_WAIT_2, CLOSING, TIME_WAIT,
- LAST_ACK); -- same as in TCPGLB
-
- type STATUS_RECORD is
- record
- SOURCE_PORT : SIXTEEN_BITS ;
- SOURCE_ADDRESS : THIRTYTWO_BITS ;
- DESTINATION_PORT : SIXTEEN_BITS ;
- DESTINATION_ADDRESS : THIRTYTWO_BITS ;
- CONNECTION_STATE : STATE_TYPE;
- STATUS : STATUS_TYPE;
- LOCAL_RCV_WINDOW : SIXTEEN_BITS ;
- REMOTE_RCV_WINDOW : SIXTEEN_BITS ;
- OCTETS_ON_RETRANSMIT_QUEUE : SIXTEEN_BITS ;
- DATA_WAITING_FOR_ULP : SIXTEEN_BITS ;
- URGENT_STATE : BOOLEAN;
- PRECEDENCE : SIXTEEN_BITS ;
- SECURITY : SECURITIES;
- ULP_TIMEOUT : SIXTEEN_BITS ;
- end record;
-
- subtype LCN_TYPE is TCB_PTR;
-
- type LCN_PTR_TYPE is
- record
- LCN_PTR : LCN_TYPE := null;
- CHANNEL_PTR : CHANNEL_TYPE ;
- CHANNEL_NAME : STRING(1..30) ;
- end record;
-
- -------------------------------------------------------------------------------
- -- THE MESSAGE NUMBERS FOR THE USER AND THEIR MEANING FOLLOW --
- -- -1 : NO USER ACTION --
- -- --
- -- 2: CONNECTION ILLEGAL --
- -- 3: CONNECTION DOES NOT EXIST --
- -- 4: FOREIGN SOCKET UNSPECIFIED --
- -- 5: INSUFFICIENT RESOURCES --
- -- 6: CONNECTION CLOSING --
- -- 7: URGENT DATA --
- -- 8: OK ON ABORT --
- -- 9: PRECEDENCE NOT ALLOWED --
- -- 10: BUFFER FOR USER --
- -- 11: SECURITY/COMPARTMENT ILLEGAL --
- -- 12: CONNECTION EXISTS --
- -- 14: RETURN LCN --
- -- 15: TCB POINTER AND STATE --
- -- 16: CONNECTION RESET --
- -- 17: CONNECTION REFUSED --
- -- 18: OK ON CLOSE --
- -- 19: PUSHED BUFFER FOR USER --
- -- 20: OUT OF BUFFERS --
- -- 21: COULDN'T DO RESET --
- -- 22: IP OVERLOADED. --
- -- 23: CONNECTION IS NOW OPEN. --
- -------------------------------------------------------------------------------
-
- type USER_MESSAGE(MESSAGE_NUMBER : SIXTEEN_BITS := 0) is
- record
- LOCAL_CONNECTION_NAME : LCN_PTR_TYPE;
- case MESSAGE_NUMBER is
- when 10 | 19 =>
- DATA_BUFFER : PACKED_BUFFER_PTR;
- when 15 =>
- -- STATUS PARAMETERS
- STATUS_PARAMS : STATUS_RECORD;
- when others => null;
- end case;
- end record;
-
- type ACTION is (OPEN,SEND,RECEIVE,ABOR_T,CLOSE,STATUS,DATA_FROM_IP,
- TIMER_TIMEOUT, ERROR_MESSAGE, TIMEOUT_IN_RETRANS_QUEUE,
- TIMEOUT_IN_TIME_WAIT, NO_TCP_ACTION);
-
- subtype SECURITY_OPTION_ARRAY is SIXTEEN_BITS range 1..9;
-
- type SECURITY_OPTION_TYPE is array( SECURITY_OPTION_ARRAY ) of SIXTEEN_BITS ;
- -- EACH ELEMENT CONTAINS AN
- -- OCTET OF SECURITY DATA.
- type TCP_OPTION_TYPE is array(1..50) of SIXTEEN_BITS ;
-
- type ACKPASS is (PASSIVE, ACTIVE);
-
- type TIMER_PARAMS is
- record
- MESSAGE_NUMBER : SIXTEEN_BITS ;
- end record;
-
- type TIME_WAIT_PARAMS is
- record
- LOCAL_CONNECTION_NAME : LCN_PTR_TYPE;
- end record;
-
- type OPEN_PARAMS is
- record
- LOCAL_PORT, FOREIGN_PORT : SIXTEEN_BITS ;
- FOREIGN_NET_HOST : THIRTYTWO_BITS ;
- ACTIVE_PASSIVE : ACKPASS;
- BUFFER_SIZE, TIMEOUT : SIXTEEN_BITS ;
- LOCAL_CONNECTION_NAME : LCN_PTR_TYPE;
- SECURITY, PRECEDENCE : SIXTEEN_BITS ;
- OPTIONS : TCP_OPTION_TYPE;
- end record;
-
- type STATUS_PARAMS is
- record
- LOCAL_CONNECTION_NAME : LCN_PTR_TYPE;
- end record;
-
- type ERROR_PARAMS is
- record
- ERROR_INDICATOR : SIXTEEN_BITS ; -- THIS MAY CHANGE.
- end record;
-
- type RETRANS_PARAMS is
- record
- QUEUE_NUM : SIXTEEN_BITS ;
- end record;
-
- type SEG_ARRIVE_PARAMS is
- record
- BUFPTR : PACKED_BUFFER_PTR;
- BYTE_COUNT : SIXTEEN_BITS ;
- SOURCE_ADDRESS, DESTINATION_ADDRESS : THIRTYTWO_BITS ;
- PROTOCOL : SIXTEEN_BITS ;
- TOS : SIXTEEN_BITS ;
- SECURITY : SECURITY_OPTION_TYPE;
- end record;
-
- type SEND_PARAMS is
- record
- LOCAL_CONNECTION_NAME : LCN_PTR_TYPE;
- BUFPTR : PACKED_BUFFER_PTR;
- BYTE_COUNT, PUSH_FLAG, URG_FLAG, TIMEOUT : SIXTEEN_BITS ;
- end record;
-
- type RECEIVE_PARAMS is
- record
- LOCAL_CONNECTION_NAME : LCN_PTR_TYPE;
- BUFPTR : PACKED_BUFFER_PTR;
- BYTE_COUNT : SIXTEEN_BITS ;
- end record;
-
- type ABORT_CLOSE_PARAMS is
- record
- LOCAL_CONNECTION_NAME : LCN_PTR_TYPE;
- end record;
-
- --TCP responds to message which are associated with a type of event. The
- --data abstraction of MESSAGE creates the appropiate message for the given
- --event.
- type MESSAGE(EVENT : ACTION := OPEN) is
- record
- case EVENT is
- when ABOR_T | CLOSE
- => ABORT_CLOSE_PARAMETERS : ABORT_CLOSE_PARAMS;
-
- when DATA_FROM_IP
- => DATA_FROM_IP_PARAMETERS : SEG_ARRIVE_PARAMS;
-
- when RECEIVE
- => RECEIVE_PARAMETERS : RECEIVE_PARAMS;
-
- when SEND => SEND_PARAMETERS : SEND_PARAMS;
-
- when OPEN => OPEN_PARAMETERS : OPEN_PARAMS;
-
- when STATUS
- => STATUS_PARAMETERS : STATUS_PARAMS;
-
- when TIMEOUT_IN_TIME_WAIT
- => TIME_WAIT_PARAMETERS : TIME_WAIT_PARAMS;
-
- when TIMEOUT_IN_RETRANS_QUEUE
- => RETRANS_PARAMETERS : RETRANS_PARAMS;
-
- when ERROR_MESSAGE
- => ERROR_PARAMETERS : ERROR_PARAMS;
-
- when TIMER_TIMEOUT
- => TIMER_PARAMETERS : TIMER_PARAMS;
-
- when NO_TCP_ACTION => NULL;
- end case;
- end record;
-
- procedure WAIT_FOR_TCP_MESSAGE(USER_MESS : in out USER_MESSAGE);
-
- --This procedure obtains a message in a queue for the ULP from TCP.
-
- procedure MESSAGE_FOR_TCP( TCP_MESSAGE : in out MESSAGE;
- REQUEST_OK : out BOOLEAN ) ;
-
- --This procedure is used by ULP to put a message for TCP.
-
- end WITH_ULP_COMMUNICATE;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --new_ncommu.ada
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- -----------------------------------------------------------------------
- --
- -- DoD Protocols NA-00002-200 80-01038-100(-)
- -- E-Systems, Inc. August 07, 1985
- --
- -- NEW_NCOMMU.ADA Author : Jim Baldo
- --
- -----------------------------------------------------------------------
- with CONDITION_HANDLING ; use CONDITION_HANDLING ;
- with UNCHECKED_CONVERSION ;
- with TEXT_IO ; use TEXT_IO;
- with TASKING_SERVICES ; use TASKING_SERVICES ;
- with SYSTEM ; use SYSTEM ;
-
- package body WITH_ULP_COMMUNICATE is
-
- package CONVERT_INT_16_TO_STRING is new INTEGER_IO( SIXTEEN_BITS ) ;
- package CONVERT_INT_32_TO_STRING is new INTEGER_IO( THIRTYTWO_BITS ) ;
-
- MBX_STATUS : COND_VALUE_TYPE ;
- TO_TCP_CHANNEL : CHANNEL_TYPE ;
- XMESSAGE : MESSAGE;
-
- type XUSER_MESSAGE_TYPE is record
- THE_USER_MESSAGE : USER_MESSAGE ;
- THE_BUFFER : PACKED_BUFFER ;
- THE_STATUS_PARAMS : STATUS_RECORD ;
- end record ;
-
- type XMESSAGE_TYPE is record
- THE_TCP_MESSAGE : MESSAGE ;
- THE_BUFFER : PACKED_BUFFER ;
- end record ;
-
-
-
- function PHYSICAL_ADDRESS is new
- UNCHECKED_CONVERSION ( ADDRESS, UNSIGNED_LONGWORD ) ;
-
- procedure WAIT_FOR_TCP_MESSAGE(USER_MESS : in out USER_MESSAGE) is
-
-
- XUSER_MESSAGE : XUSER_MESSAGE_TYPE ;
- BUFFER : PACKED_BUFFER_PTR ;
-
- begin
- TASK_QIOW ( STATUS => MBX_STATUS ,
- CHAN => USER_MESS.LOCAL_CONNECTION_NAME.CHANNEL_PTR ,
- FUNC => IO_READVBLK ,
- P1 => PHYSICAL_ADDRESS ( XUSER_MESSAGE'ADDRESS ) ,
- P2 => UNSIGNED_LONGWORD (XUSER_MESSAGE'SIZE/8 ) ) ;
- USER_MESS := XUSER_MESSAGE.THE_USER_MESSAGE ;
- case USER_MESS.MESSAGE_NUMBER is
- when 10 | 19 =>
- BUFFGET( BUFFER, 1);
- USER_MESS.DATA_BUFFER := BUFFER ;
- USER_MESS.DATA_BUFFER.ALL := XUSER_MESSAGE.THE_BUFFER ;
- when 15 =>
- USER_MESS.STATUS_PARAMS := XUSER_MESSAGE.THE_STATUS_PARAMS ;
- when 8 | 16 | 18 | 24 => --connection closed: aborted; reset;
- --connection timeout; delete mailbox
- DELMBX( STATUS => MBX_STATUS ,
- CHAN => USER_MESS.LOCAL_CONNECTION_NAME.CHANNEL_PTR ) ;
- when others =>
- null ;
- end case ;
- end WAIT_FOR_TCP_MESSAGE;
-
- procedure MESSAGE_FOR_TCP( TCP_MESSAGE : in out MESSAGE;
- REQUEST_OK : out BOOLEAN) is
-
- CHANNEL : CHANNEL_TYPE ;
- FOREIGN_NET_HOST : STRING(1..5) ;
- FOREIGN_PORT : STRING(1..5) ;
- LOCAL_NET_HOST : STRING(1..5) ;
- LOCAL_PORT : STRING(1..5) ;
- CHANNEL_NAME : STRING(1..30) ;
- XTCP_MESSAGE : XMESSAGE_TYPE ;
-
- begin
- if TCP_MESSAGE.EVENT = OPEN then
- -- Create a mailbox
- CHANNEL_NAME := " " ;
- FOREIGN_NET_HOST := " " ;
- FOREIGN_PORT := " " ;
- LOCAL_NET_HOST := " " ;
- LOCAL_PORT := " " ;
- CONVERT_INT_32_TO_STRING.PUT ( FOREIGN_NET_HOST ,
- TCP_MESSAGE.OPEN_PARAMETERS.
- FOREIGN_NET_HOST ) ;
- CONVERT_INT_16_TO_STRING.PUT ( FOREIGN_PORT ,
- TCP_MESSAGE.OPEN_PARAMETERS.
- FOREIGN_PORT ) ;
- CONVERT_INT_32_TO_STRING.PUT ( LOCAL_NET_HOST ,
- WHOIAM ) ;
- CONVERT_INT_16_TO_STRING.PUT ( LOCAL_PORT ,
- TCP_MESSAGE.OPEN_PARAMETERS.
- LOCAL_PORT ) ;
- CHANNEL_NAME(1..3) := "MBX";
- CHANNEL_NAME(4..8) := FOREIGN_NET_HOST ;
- CHANNEL_NAME(9..13) := FOREIGN_PORT ;
- CHANNEL_NAME(14..18) := LOCAL_NET_HOST ;
- CHANNEL_NAME(19..23) := LOCAL_PORT ;
- CREMBX( STATUS => MBX_STATUS ,
- PRMFLG => true , -- permanent
- CHAN => CHANNEL ,
- MAXMSG => XUSER_MESSAGE_TYPE'SIZE/8, --size of message
- BUFQUO => 10 * XUSER_MESSAGE_TYPE'SIZE/8, --size of queue
- LOGNAM => CHANNEL_NAME ) ;
- if NOT SUCCESS(MBX_STATUS) then
- PUT_LINE("Could not create tcp channel") ;
- else
- TCP_MESSAGE.OPEN_PARAMETERS.LOCAL_CONNECTION_NAME.CHANNEL_PTR :=
- CHANNEL ;
- TCP_MESSAGE.OPEN_PARAMETERS.LOCAL_CONNECTION_NAME.CHANNEL_NAME :=
- CHANNEL_NAME;
- XTCP_MESSAGE.THE_TCP_MESSAGE := TCP_MESSAGE ;
- TASK_QIOW ( STATUS => MBX_STATUS,
- CHAN => TO_TCP_CHANNEL ,
- FUNC => IO_WRITEVBLK + IO_M_NOW,
- P1 => PHYSICAL_ADDRESS (XTCP_MESSAGE'ADDRESS),
- P2 => UNSIGNED_LONGWORD (XTCP_MESSAGE'SIZE/8 ) );
- end if;
- else
- XTCP_MESSAGE.THE_TCP_MESSAGE := TCP_MESSAGE ;
- if TCP_MESSAGE.EVENT = SEND then
- XTCP_MESSAGE.THE_BUFFER := TCP_MESSAGE.SEND_PARAMETERS.BUFPTR.ALL ;
- BUFFREE( TCP_MESSAGE.SEND_PARAMETERS.BUFPTR, 0);
- elsif TCP_MESSAGE.EVENT = RECEIVE then
- BUFFREE( TCP_MESSAGE.RECEIVE_PARAMETERS.BUFPTR, 1);
- end if ;
- TASK_QIOW ( STATUS => MBX_STATUS,
- CHAN => TO_TCP_CHANNEL ,
- FUNC => IO_WRITEVBLK + IO_M_NOW,
- P1 => PHYSICAL_ADDRESS (XTCP_MESSAGE'ADDRESS),
- P2 => UNSIGNED_LONGWORD (XTCP_MESSAGE'SIZE/8 ) );
-
-
- end if ;
- REQUEST_OK := SUCCESS (MBX_STATUS) ;
- EXCEPTION
- WHEN OTHERS =>
- PUT_LINE("EXCEPTION IN MESSAGE_FOR_TCP") ;
- end MESSAGE_FOR_TCP;
-
-
- begin
- CREMBX( STATUS => MBX_STATUS ,
- PRMFLG => true , -- permanent
- CHAN => TO_TCP_CHANNEL,
- MAXMSG => XMESSAGE'SIZE, --size of message
- BUFQUO => 10 * XMESSAGE'SIZE , --size of queue
- LOGNAM => "TO_TCP_CHANNEL") ; -- fixed name
- if NOT SUCCESS(MBX_STATUS) then
- PUT_LINE("Could not assign tcp channel") ;
- end if ;
- END WITH_ULP_COMMUNICATE;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --tcp_standalone.ada
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- -----------------------------------------------------------------------
- --
- -- DoD Protocols NA-00001-200 80-01022-100(-)
- -- E-Systems, Inc. August 07, 1985
- --
- -- TCP_STANDALONE.ADA Author : Jim Baldo
- --
- -----------------------------------------------------------------------
- with BUFFER_DATA;
- with ip_tcp;
- with SUBNET_CALLS; use SUBNET_CALLS;
- with TCP_Q_TASK;
- with GET_MESSAGES_FROM_ULP;
- with SEND_IP_TASK;
- with IP_FROM_SUBNET_TASK;
- with TCP_CONTROLLER_TASK;
-
- procedure TCP_STANDALONE is
-
- begin
- START_SUBNET_DRIVER ;
- -- null;
- end TCP_STANDALONE ;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --DELETE_MAILBOXES.ADA
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with SYSTEM ; use SYSTEM ;
- with TASKING_SERVICES; use TASKING_SERVICES;
- with STARLET; use STARLET;
- with CONDITION_HANDLING; use CONDITION_HANDLING;
- with TEXT_IO; use TEXT_IO;
-
- procedure DELETE_MAILBOXES_FOR_TESTER is
-
- -- This procedure is used to delete permanent mailboxes created by
- -- test programs.
-
- MAILBOX_NAMES_CHANNEL : CHANNEL_TYPE;
- TO_TCP_CHANNEL : CHANNEL_TYPE;
- RETURN_STATUS : COND_VALUE_TYPE;
- MAILBOX_NAME : STRING(1..7) ;
- TEMP_MAILBOX_NAME : STRING(1..4);
- LENGTH : NATURAL ;
-
- begin
- loop
- MAILBOX_NAME := "MBA " ;
- TEMP_MAILBOX_NAME := " ";
- PUT("Enter Mailbox Number := ") ;
- GET_LINE(TEMP_MAILBOX_NAME, LENGTH) ;
- if TEMP_MAILBOX_NAME(1) = '0' then
- exit ;
- end if ;
- for I in 1..4 loop
- if TEMP_MAILBOX_NAME(I) /= ' ' then
- MAILBOX_NAME(3 + I) := TEMP_MAILBOX_NAME(I);
- else
- MAILBOX_NAME(3 + I) := ':';
- exit;
- end if;
- end loop;
- ASSIGN( STATUS => RETURN_STATUS,
- CHAN => TO_TCP_CHANNEL,
- DEVNAM => MAILBOX_NAME);
-
- if SUCCESS ( RETURN_STATUS ) then
- PUT_LINE ( "Successful assign TO MAILBOX " ) ;
- else
- PUT_LINE ( "Unsuccessful assign TO_MAILBOX " ) ;
- end if ;
-
- DELMBX( STATUS => RETURN_STATUS,
- CHAN => TO_TCP_CHANNEL );
-
- if SUCCESS ( RETURN_STATUS ) then
- PUT_LINE ( "Successful delete TO_MAILBOX " ) ;
- else
- PUT_LINE ( "Unsuccessful delete TO_MAILBOX " ) ;
- end if ;
- end loop ;
-
- end DELETE_MAILBOXES_FOR_TESTER ;
-