PAM Programming Manual
Link-Level Programming Examples
PAM Programming Manual—142482
B-30
Building an Aggregate SDU
Building an Aggregate SDU
The application must provide a function for building the aggregate SDU.
?PAGE ’FUNCTION: Build Aggr SDU’
{------------------------------------------------------------------
FUNCTION: Build Aggr SDU
------------------------------------------------------------------}
FUNCTION Build_Aggr_SDU
( VAR Aggr_SDU_buf : FSTRING ) : INTEGER;
VAR
SDU_ndx : INTEGER;
frmt_error : INTEGER;
data_offset_b : INTEGER;
count : INTEGER;
Aggr_SDU_buf_addr : EXTADDR;
foreign_addr_addr : EXTADDR;
SDU_user_data_addr : EXTADDR;
BEGIN
Aggr_SDU_buf_addr := XAddr ( Aggr_SDU_buf );
frmt_error := ZL2S_Frmt_Aggr_SDU_Hdr_
( aggr_SDU_buf_addr, Max_Req_Size );
IF ( frmt_error <> ZL2S_Err_Frmt_Ok ) THEN
BEGIN
WriteLn ( output, ’Aggr SDU Hdr Error: ’, frmt_error );
AbEnd_;
END;
{--------------- In case there are 0 SDUs to build ---------------}
data_offset_b := SizeOf ( ZL2S_DDL_Aggr_SDU_Hdr_Def );
Foreign_addr_addr := XAddr ( Foreign_addr );
FOR SDU_ndx := 1 TO SDU_cnt DO
BEGIN
frmt_error := ZL2S_Frmt_SDU_Hdr_ ( Aggr_SDU_buf_addr,
Port_type,
Command_Code,
P_F_flag,
rsp_flag,
Foreign_addr_addr,
data_offset_B,
current_user_data_size_B );
IF ( frmt_error <> ZL2S_Err_Frmt_Ok ) THEN
BEGIN
WriteLn ( Output, ’SDU Hdr Error: ’, frmt_error );
AbEnd_;
END;
SDU_user_data_addr := XAddr ( Aggr_SDU_buf [ data_offset_b ] );
Init_Buf_ ( SDU_user_data_addr,
current_user_data_size_b, test_char );
END;