PAM Programming Manual
Link-Level Programming Examples
PAM Programming Manual—142482
B-32
Receiving an Aggregate SDU
Receiving an Aggregate SDU
The application must provide a procedure for receiving aggregate SDUs from PORTs.
?PAGE ’PROCEDURE: Receive_’
{------------------------------------------------------------------
PROCEDURE: Receive_
------------------------------------------------------------------}
PROCEDURE Receive_ ( buffer_lst_ndx : LONGINT );
BEGIN
buffer_lst[ buffer_lst_ndx ].in_use_flag := True;
buffer_lst[ buffer_lst_ndx ].test_char := test_char;
buffer_lst[ buffer_lst_ndx ].user_data_size_b :=
current_user_data_size_b;
buf_addr := XAddr ( buffer_lst [ buffer_lst_ndx ].buffer );
cc := ReadX ( L2SAP_file_num,
buf_addr,
Max_Req_Size,
{ count read },
buffer_lst_ndx );
IF ( cc <> OK_Condition ) THEN
BEGIN
cc := FileInfo ( L2SAP_file_num, file_error );
WriteLn ( Output, ’Read error: ’, file_error:4 );
AbEnd_;
END;
END;
?PAGE ’PROCEDURE: Check Inbound Aggr SDU’
{------------------------------------------------------------------
PROCEDURE: Check Inbound Aggr SDU
------------------------------------------------------------------}
PROCEDURE Check_Inbound_Aggr_SDU ( ndx: LONGINT );
VAR
SDU_ndx : INTEGER;
frmt_error : INTEGER;
user_data_offset_B : INTEGER;
user_data_size_B : INTEGER;
Aggr_SDU_buf_addr : EXTADDR;
user_data_addr : EXTADDR;
BEGIN
Aggr_SDU_buf_addr := XAddr ( buffer_lst[ ndx ].buffer );
FOR SDU_ndx := 1 TO SDU_cnt DO
BEGIN
frmt_error := ZL2S_Get_SDU_ ( Aggr_SDU_buf_addr,
Port_type,
{ command code },
{ P/F flag },
{ response flag },
{ foreign MAC address addr },
user_data_offset_B,
user_data_size_B );
IF ( frmt_error <> ZL2S_Err_Frmt_Ok ) THEN
BEGIN
WriteLn ( Output, ’Get SDU Error: ’, frmt_error );
AbEnd_;
END;
END;
END;