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;










