libsua/sualibrary/sua/sua_syntax.h

465 lines
11 KiB
C++

/***************************************************************************
sua_syntax.h - description
-------------------
begin : Tue Jan 8 2002
copyright : (C) 2002 by Lode Coene
email : lode.coene@siemens.atea.be
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
/*
* $Id: sua_syntax.h,v 1.3 2003/08/26 11:43:57 p82609 Exp $
*
* SUA implementation according to SUA draft issue 5.
*
* Author(s): Gery Verwimp
*
* Copyright (C) 2001 by Siemens Atea, Herentals, Belgium.
*
* Realized in co-operation between Siemens Atea and
* Siemens AG, Munich, Germany.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Contact: gery.verwimp@siemens.atea.be
* lode.coene@siemens.atea.be
*
* The alternative comment
* inspiration : Kathleen
* "Computers/networks must be female, because if they were male, "
* "they would be perfectably predictable and computers/networks are "
* "never predictable. If you do not believe this, just ask any women."
*
* Purpose: This header-file defines the SUA syntax class for SUA
* primitives and messages, including the en/decoding routines.
*/
#ifndef SUA_SYNTAX_H
#define SUA_SYNTAX_H
#include "sua.h"
#include <string>
/********************************/
/* 0. SUA message header syntax */
/********************************/
enum Sua_version {
Sua_unknown,
Sua_version1
};
enum Sua_msg_class {
sua_mngt,
sua_reserved1,
sua_ssnm,
sua_aspsm,
sua_asptm,
sua_reserved5,
sua_reserved6,
sua_cl,
sua_co,
sua_rkm,
sua_max
};
enum Sua_mngt_msg_type {
mngt_error,
mngt_notify,
mngt_max
};
enum Sua_ssnm_msg_type {
ssnm_reserved0,
ssnm_duna,
ssnm_dava,
ssnm_daud,
ssnm_scon,
ssnm_dupu,
ssnm_drst,
ssnm_max
};
enum Sua_aspsm_msg_type {
aspsm_reserved0,
aspsm_up,
aspsm_down,
aspsm_beat,
aspsm_up_ack,
aspsm_down_ack,
aspsm_beat_ack,
aspsm_max
};
enum Sua_asptm_msg_type {
asptm_reserved0,
asptm_act,
asptm_inact,
asptm_act_ack,
asptm_inact_ack,
asptm_max
};
enum Sua_cl_msg_type {
cl_reserved0,
cl_data_transfer, /* unitdata */
cl_data_response, /* unitdata service */
cl_max
};
enum Sua_co_msg_type {
co_reserved0,
co_core, /* connection request */
co_coak, /* connection confirm */
co_coref, /* connection refused */
co_relre, /* release request */
co_relco, /* release confirm */
co_resco, /* reset confirm */
co_resre, /* reset request */
co_data, /* data transfer, expedited data */
co_data_ack, /* (expedited) data acknowledge */
co_err, /* PDU error */
co_it, /* inactivity test */
co_max
};
enum Sua_rkm_msg_type {
rkm_reserved0,
rkm_reg_req, /* registration request */
rkm_reg_resp, /* registration response */
rkm_dereg_req, /* deregistration request */
rkm_dereg_resp, /* deregistration response */
rkm_max
};
union Sua_msg_type {
Sua_mngt_msg_type mngt;
Sua_ssnm_msg_type ssnm;
Sua_aspsm_msg_type aspsm;
Sua_asptm_msg_type asptm;
Sua_cl_msg_type cl;
Sua_co_msg_type co;
Sua_rkm_msg_type rkm;
};
/***********************************/
/* 1. SUA management message modes */
/***********************************/
enum Sua_traffic_mode_type {
tmt_unknown,
tmt_override,
tmt_loadshare,
tmt_broadcast,
tmt_max
};
enum Sua_error_code_type {
ect_unknown,
ect_invalid_version,
ect_invalid_interface_id,
ect_unsupported_msg_class,
ect_unsupported_msg_type,
ect_unsupported_traffic_handling_mode,
ect_unexpected_msg,
ect_protocol_error,
ect_unsupported_interface_id_type, /* not used in SUA */
ect_invalid_stream_id,
ect_unassigned_TEI, /* not used in SUA */
ect_unrecognized_SAPI, /* not used in SUA */
ect_invalid_TEI_SAPI_comb, /* not used in SUA */
ect_refused_mngt_blocking,
ect_ASP_id_required,
ect_invalid_ASP_id,
ect_invalid_routing_context,
ect_invalid_parameter_value,
ect_parameter_field_error,
ect_unexpected_parameter,
ect_destination_status_unknown,
ect_invalid_network_appearance,
ect_missing_parameter,
ect_routing_key_change_refused,
ect_invalid_loadsharing_label,
ect_max
};
typedef struct {
uint8_t status_type;
uint8_t status_ID;
} Sua_status_struct;
/* ASP capabilities */
enum Sua_interworking_type {
iw_none, /* no interworking with SS7 */
iw_asp, /* IP endpoint ASP */
iw_sg, /* Signalling Gateway */
iw_relay, /* IP relay point */
iw_max
};
typedef struct {
boolean cl0_supp;
boolean cl1_supp;
boolean cl2_supp;
boolean cl3_supp;
uint8_t interworking;
} Sua_asp_cap_struct;
/*********************************/
/* 2. SUA protocol message modes */
/*********************************/
enum Sua_protocol_class {
prot_class_0,
prot_class_1,
prot_class_2,
prot_class_3,
prot_max
};
typedef struct {
Sua_protocol_class pcl;
boolean return_option;
} Sua_protocol_class_struct;
/* The SUA address parameter contains following fields :
- routing indicator : see below
- address indicator : for SS7 interworking, defines inclusion of SSN, PC or GT in SS7 address
- address parameters : combination of GT, hostname, IPaddress, SSN, PC
*/
enum Sua_rout_ind {
ri_reserved0,
ri_route_GT,
ri_route_PC_SSN,
ri_route_hostname,
ri_route_IP_SSN,
ri_max
};
typedef struct {
uint8_t translation_type;
uint8_t num_plan;
uint8_t nat_addr;
uint8_t nr_of_digits;
uint8_t digits[24];
} SCCP_GT_struct;
enum Sua_ip_addr_type {
ip_reserved0,
ip_v4,
ip_v6,
ip_max
};
union Ip_address {
sockaddr_in ipv4;
sockaddr_in6 ipv6;
};
typedef struct {
Sua_rout_ind rout_ind;
/* Flags for address indicator */
boolean ssn_incl;
boolean gt_incl;
boolean pc_incl;
/* Indication of elements present */
boolean pc_pres;
boolean ip_addr_pres;
boolean gt_pres;
boolean hostname_pres;
/* An SSN must always be present on the primitive interface, even if unknown (=0) */
uint8_t ssn;
int pc;
Sua_ip_addr_type ip_addr_type;
Ip_address ip_addr;
SCCP_GT_struct gt;
string hostname;
} Sua_address_struct;
/* The SCCP Cause parameter can contain the following :
- return cause (in CLDR messages)
- refusal cause (in COREF messages)
- release cause (in RELRE messages)
- reset cause (in RESRE messages)
- error cause (in COERR messages)
*/
enum SCCP_cause_type {
ctp_reserved0,
ctp_return_cause,
ctp_refusal_cause,
ctp_release_cause,
ctp_reset_cause,
ctp_error_cause,
ctp_max
};
typedef struct {
SCCP_cause_type cause_type;
uint16_t cause_value;
} SCCP_cause_struct;
/* The sequence number parameter contains :
- the sent and received seq numbers (0..127) for protocol class 3
- the more data indicator for protocol classes 2 and 3
*/
typedef struct {
uint8_t sent_seq_nr;
uint8_t rcvd_seq_nr;
boolean more_data;
} Sua_seq_nr_struct;
/* The segmentation parameter contains :
- first segment indication
- number of remaining segments (0..15)
- segmentation reference (0..2~24-1)
*/
typedef struct {
boolean first;
uint8_t remain;
uint32_t segm_ref;
} Sua_segm_struct;
/* The label parameter contains :
- start of the label bits (0..31)
- end of the label bits (0..31)
- label value (0..2~16-1)
*/
typedef struct {
uint8_t start;
uint8_t end;
uint16_t label_value;
} Sua_label_struct;
/* the affected Pointcode contains:
- number of aff_pc in msg(max 10 )
- pointcodes (0..n-1)
*/
typedef struct {
uint8_t num_aff_pc;
uint32_t pc[10];
} Sua_affected_pc_struct;
typedef struct {
boolean aff_pc_pres;
boolean SSN_pres;
boolean SMI_pres;
boolean cong_lvl_pres;
Sua_affected_pc_struct aff_pc;
uint8_t SSN;
uint32_t SMI;
uint8_t cong_lvl;
} Sua_ssnm_struct;
/* And now, we present to you the SUA container, mother of all interfaces */
typedef struct {
/* 0. Mandatory header */
Sua_version hdr_version;
Sua_msg_class hdr_msg_class;
Sua_msg_type hdr_msg_type;
/* 1. Common parameter part presence */
boolean data_pres;
boolean info_pres;
boolean rout_con_pres;
boolean diag_info_pres;
boolean hb_data_pres;
boolean traf_mode_pres;
boolean err_code_pres;
boolean status_pres;
boolean ASP_id_pres;
/* 1. Common parameter part */
string data_string;
string info_string;
uint32_t rout_con;
string diag_info;
string hb_data;
Sua_traffic_mode_type traf_mode;
Sua_error_code_type err_code;
Sua_status_struct status;
Sua_ssnm_struct ssnm_parm;
uint32_t ASP_id;
/* 2. SUA specific parameter part presence */
boolean netw_app_pres;
boolean hop_count_pres;
boolean source_addr_pres;
boolean dest_addr_pres;
boolean source_ref_pres;
boolean dest_ref_pres;
boolean SCCP_cause_pres;
boolean seq_nr_pres;
boolean rec_seq_nr_pres;
boolean asp_cap_pres;
boolean credit_pres;
boolean importance_pres;
boolean prot_class_pres;
boolean seq_control_pres;
boolean segm_pres;
boolean TID_label_pres;
boolean DRN_label_pres;
/* 2. SUA specific parameter part */
uint32_t netw_app;
Sua_address_struct source_addr;
Sua_address_struct dest_addr;
uint32_t source_ref;
uint32_t dest_ref;
SCCP_cause_struct SCCP_cause;
Sua_seq_nr_struct seq_nr;
Sua_asp_cap_struct asp_cap;
Sua_protocol_class_struct prot_class;
uint8_t hop_count;
uint8_t rec_seq_nr;
uint8_t credit;
uint8_t importance;
uint32_t seq_control;
Sua_segm_struct segm;
Sua_label_struct TID_label;
Sua_label_struct DRN_label;
} Sua_primitive_struct;
typedef struct {
int msg_index; // position in transfer syntax
boolean no_error;
string error_text; // error text, specifying details
} Sua_syntax_error_struct;
class Sua_container {
public:
Sua_primitive_struct sua_prim;
string sua_msg;
void sua_init ();
Sua_syntax_error_struct sua_encode ();
Sua_syntax_error_struct sua_decode ();
};
#endif // SUA_SYNTAX_H