HP OpenCall SS7 Application Developer`s Guide

Transcription

HP OpenCall SS7 Application Developer`s Guide
HP OpenCall SS7 Platform
Application Developer’s Guide
For Release 3.2 on HP-UX IA-64
First Edition
Manufacturing Part Number: 5971-2583
E1203
Notice
The information contained in this document is subject to change without
notice.
Hewlett-Packard makes no warranty of any kind with regard to this
material, including, but not limited to, the implied warranties of
merchantability and fitness for a particular purpose. Hewlett-Packard
shall not be liable for any errors contained herein, or for incidental or
consequential damages in connection with the furnishing, performance
or use of this material.
© 2003 Copyright Hewlett-Packard Development Company, L.P.
Reproduction, adaptation or translation without prior written
permission is prohibited, except as allowed under the copyright laws.
Printing History
First Edition
For Release 3.2 on HP-UX IA-64, December 2003
Trademarks
The following are trademarks or registered trademarks of
Hewlett-Packard:
HP-UX
Hewlett-Packard Company
OpenCall Business Unit
38053 GRENOBLE Cedex 9
France
ii
Preface
1. Introduction to HP OpenCall SS7 APIs
HP OpenCall SS7 Developer’s Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Development Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Loopback Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Categories of API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Permission to Access HP OpenCall SS7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stack and Management APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 Stack APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP3/M3UA API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAP API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAP Application Message Dispatcher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUP API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 Management APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PIC/AG (Plug-In Container/Application Guardian) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alias Point Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Local Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Virtual Point Codes (VPCs) and Virtual Users (VUs) . . . . . . . . . . . . . . . . . . . . . . . . . .
Virtual Point Codes (VPC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Virtual Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OAM API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
VPC Tutorials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compatibility with Earlier Releases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Levels of Compatibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Libraries Available . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP, ISUP, and OA&M APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP and TCAP APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
....................................................................
42
42
43
44
44
44
45
46
46
46
47
47
47
47
48
49
50
50
52
52
53
53
53
53
54
54
54
55
55
56
56
iii
2. General System Guidelines
Development Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Designing for System Predictability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Designing for System Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Optimizing OS Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
General Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Techniques for Performance Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
System Test and Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Platform and User Application Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Storing User Applications on an HP OpenCall SS7 Platform . . . . . . . . . . . . . . . . . . . .
Directory Structures Reserved for HP OpenCall SS7. . . . . . . . . . . . . . . . . . . . . . . . .
Owner and Access Rights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
58
58
59
59
60
61
62
63
63
63
3. General API Guidelines
Accessing the SS7 Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Interaction of Multiple APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Designing for Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP-UX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using HP OpenCall SS7 Libraries with Kernel Threads . . . . . . . . . . . . . . . . . . . . . .
Using HP OpenCall SS7 with 64-bit HP-UX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SS7 Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating SS7 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling SS7 Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling Phases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pre-select Phase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Post-select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Signaling Information via an API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving Signaling Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending Signaling Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing SS7 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rescheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IPC Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tuning IPC Buffers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IPC Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iv
66
68
69
69
69
70
71
71
72
72
72
73
74
74
75
75
75
76
76
77
78
79
Inbound Path. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Outbound Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Visibility of a Switchover at Each Level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAP API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP3, ISUP, and TUP APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
On Top of an MTP3 Level 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
On Top of an M3UA Level 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Examining Error Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
80
81
81
81
82
82
82
83
4. Using the Level 3 (MTP3/M3UA) API
General Description of the Level 3 (MTP3/M3UA) API . . . . . . . . . . . . . . . . . . . . . . . .
MTP Level 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP Level 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP Level 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP3 User Adaptation (M3UA) Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stream Control Transport Protocol (SCTP) Layer . . . . . . . . . . . . . . . . . . . . . . . . . . .
Features of MTP3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Multiple Application Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Network Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Traffic Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Link Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Route Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Combining Linksets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How to Use the MTP3 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating MTP3 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling MTP3 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP3 Primitives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving MSUs (Message Signaling Units) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending MSUs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing MTP3 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compiling and Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating MTP3 Stack Connections with SS7_xifcreate() . . . . . . . . . . . . . . . . . . . . . . .
Scheduling MTP3 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SS7_ifselectmask() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
86
86
86
87
87
89
89
89
89
90
90
90
90
91
91
91
91
92
92
92
92
93
95
95
v
select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
SS7_ifcnxhandler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
MTP3 Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Receiving MSUs with MTPL3_recv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Sending MSUs Using MTPL3_send . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Message Size Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
MTP-Based Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
M3UA-Based Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
M3UA-Based Platform Using MTP-as-Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
MTPL3_send Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Closing MTP3 Stack Connections with SS7_ifclose(). . . . . . . . . . . . . . . . . . . . . . . . . . 104
Tuning MTP3 IPC Buffers with SS7_ifctrl() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
MTP3 API Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Sending MSUs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Receiving MSUs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
DPC Unavailable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
DPC Available . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
DPC Congestion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
DPC Uncongested . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Local MTP3 Unavailable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Local MTP3 Restart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
MTP3/M3UA Tutorial Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
MtpClient.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
MtpServer.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5. Using the SCCP API
General Description of SCCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Subsystem Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Features of the SCCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connectionless Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Multiple Application Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Return Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Addressing Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Signaling Point Status Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Segmentation/Reassembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vi
116
116
116
118
118
118
118
119
119
119
Subsystem Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Subsystem Status Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Restart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Replicated Subsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connection Oriented Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connection ID Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connection Forwarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Failures and Connection Preservation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Common Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Addressing Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Multiple Application Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Overview of How to Use the SCCP API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating SCCP Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling SCCP Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving SCCP Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending SCCP Primitives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing SCCP Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the SCCP API Shared Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating SCCP Stack Connections Using SS7_xifcreate() . . . . . . . . . . . . . . . . . . . . .
Scheduling SCCP Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SS7_ifselectmask() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SS7_ifcnxhandler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Recommendation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Local Alias PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Global Title Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving SCCP Primitives Using SCCP_recv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending SCCP Primitives Using SCCP_send() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing SCCP Stack Connections Using SS7_ifclose(). . . . . . . . . . . . . . . . . . . . . . . . .
Controlling IPC Using SS7_ifctrl() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
119
119
120
120
120
121
121
121
122
125
126
126
126
130
130
130
130
130
131
131
131
131
132
134
134
134
135
137
138
140
140
149
150
153
154
155
vii
Forwarding a Connection Using SCCP_ctrl() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Addressing and Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Addressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Incoming Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Outgoing Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Types of Traffic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Elements of SCCP Addressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Main Fields in SCCP Called and Calling Party Addresses . . . . . . . . . . . . . .
Global Title Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Outgoing Routing Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Routing Without GT Translation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Routing with Local GT Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Incoming Routing Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Routing Without GT Translation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Routing with Local GT Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Return Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Signaling Point Status Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Signaling Point Prohibited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Signaling Point Allowed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Signaling Point Congested . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Subsystem Status Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Local Subsystem Out of Service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Local Subsystem In Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Subsystem Status Test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Replicated Subsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Available Backup Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unavailable Backup Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
No Peer Point Code Configured . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Tutorial Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SccpClient.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SccpServer.c. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
156
157
157
158
159
160
164
165
166
168
171
172
173
177
177
178
180
180
182
182
184
184
185
186
188
188
190
191
192
192
193
6. Using the TCAP API
Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Chapter Organization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
API Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
viii
Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compiling and Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
General Description of TCAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Component Sublayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction Sublayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
No Component Layer Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Types of TCAP Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dialogue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAP Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Addressing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The HP OpenCall SS7 TCAP API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hybrid Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reverse Hybrid Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dialogue Portion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Non-disruptive Service Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Direct Access to the Transaction Sublayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SS7 Stack Switchover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Simultaneous Access by Multiple TCAP Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Take-over of TCAP Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using ITU-T White Book TCAP for ITU-T Blue Book
TCAP Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Called and Calling Party Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How to Use the TCAP API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating TCAP Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling TCAP Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
If TC-user, Use Invoke and Dialogue ids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
If TR-user, then... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the Component Sublayer, for TC-users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the TCAP Component Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Allocate, Fill, Allocate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Storing the Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
197
197
198
198
198
200
201
201
202
202
202
203
203
204
204
205
206
206
207
207
208
210
212
214
215
216
216
216
216
216
217
217
217
217
217
ix
Create a Dialogue Primitive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending Components and the Dialogue Primitive . . . . . . . . . . . . . . . . . . . . . . . . . .
Releasing Buffers and Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving TCAP Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing TCAP Stack Connections for TC-users and TR-users . . . . . . . . . . . . . . . . .
Creating TCAP Stack Connections Using TCX_open() . . . . . . . . . . . . . . . . . . . . . . . .
Example: Creating a TC-user Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling TCAP Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_select_mask() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_cnx_handler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example: Scheduling a TCAP Stack Connection . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the Component Sublayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Invoke ID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dialogue ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Invocation and Dialogue Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating a Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Storing the Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the TCAP Component Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tcx_component. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tc_component_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Component Type Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Allocating Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Allocating Components to a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_alloc_component. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_alloc_buffer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example: Allocating One Component and One Buffer . . . . . . . . . . . . . . . . . . . . . . .
Example: Filling the Buffer with User Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Passing a Component to the Component Sublayer
Using TCX_put_component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Advanced Component Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Releasing Buffers and Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_free_components (). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_flush_components (). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_free_buffer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dialogue Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
x
218
218
218
219
219
220
221
224
224
224
225
225
227
227
227
227
230
230
232
232
233
234
236
236
236
237
237
239
240
240
241
241
242
242
243
tcx_primitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Primitive Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Service Quality Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Primitive Structure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dialogue_portion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example: Creating a Dialogue Primitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX Primitive Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending Components via the Component
Sublayer Using TCX_send() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example: Using TCX_send () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving Components from the Component
Sublayer Using TCX_recv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example: Receiving Components Using TCX_recv () . . . . . . . . . . . . . . . . . . . . . . . .
Extracting Components Using TCX_get_component(). . . . . . . . . . . . . . . . . . . . . . . . .
Using the Transaction Sublayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Component Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending User Data via the Transaction
Sublayer Using TLX_send(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving User Data from the Transaction
Sublayer Using TLX-recv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing TCAP Stack Connections Using TCX_close() . . . . . . . . . . . . . . . . . . . . . . . . .
Example: Closing a TC-user Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Component Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Retrieving Component Buffers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Memory Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Invoke IDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Wait-for-reject Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dialogue Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example of a TC Dialogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Setting Dialogue ID Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Simultaneous Dialogues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
API Memory Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tuning TCAP IPC Buffers Using TCX_control() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_control(): Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
243
244
246
248
251
252
253
254
254
257
258
260
261
261
261
262
263
264
264
265
265
265
265
265
266
266
267
267
268
269
270
270
xi
TCX_control(): Return Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAP Tutorial Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TcapClient.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TcapServer.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Building IN Message Sets Over the HP OpenCall SS7 TCAP API. . . . . . . . . . . . . . .
272
274
275
275
276
277
7. Using the TCAP Application Message Dispatcher
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Enabling and Disabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Default Dispatching Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Customer-Supplied Dispatching Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dispatching Outgoing Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ITU and ANSI Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dispatching Incoming TC-BEGIN and TC-UNI Messages. . . . . . . . . . . . . . . . . .
Dispatching Incoming TC-CONTINUE and TC-END Messages . . . . . . . . . . . . .
Distributing Incoming Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Identifying Application Instances (TCAP Users) . . . . . . . . . . . . . . . . . . . . . . . . .
Applications Must Connect Using TCX_open() . . . . . . . . . . . . . . . . . . . . . . . . . . .
Shared Library Technical Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Header File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
When the Library Functions are Called . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAProuter_init() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAProuter_application_activate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAProuter_application_deactivate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAProuter_incoming_message() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAProuter_shutdown(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Some Approaches to Dispatching Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Partitioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
At Application Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Roles of the Customer-Supplied Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Load Balancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
At Application Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Roles of the Customer-Supplied Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Round Robin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
At Application Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xii
280
280
281
281
282
282
283
283
283
284
284
285
285
285
286
286
286
286
286
287
287
288
288
288
288
288
289
289
Roles of Customer-Supplied Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Uneven Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
At Application Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Roles of Customer-Supplied Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dispatching on INAP Service Key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
At Application Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Roles of Customer-Supplied Library Functions. . . . . . . . . . . . . . . . . . . . . . . . . . .
Dispatching Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Calls to Functions in the Customer-Supplied Library . . . . . . . . . . . . . . . . . . . . . . . . .
Tracing and Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NETTL Mechanism. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Principles of Stack Traces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trace Function Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Activating the Trace Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
When to Use the Trace Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Guidelines for Developing the Customer-Supplied Shared Library . . . . . . . . . . . . . .
Designing for Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Designing for Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Designing for Shared Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Designing for High Availability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Designing in Accordance with Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Header File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
File Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Synopsis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tcx_application_info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tcx_primitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAP Application Message Dispatcher Tutorial Programs . . . . . . . . . . . . . . . . . . . .
C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
289
290
290
290
290
291
291
292
294
297
297
297
297
298
298
299
299
299
301
301
302
303
303
303
304
304
304
305
306
306
306
8. PIC/AG - Introduction
Some Basic Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Purposes of the HP OpenCall PIC Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Ensuring HA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
xiii
Communicating with Another Plug-In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Possible Plug-In Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Components of the PIC Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What is Supplied in the PIC Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
What the User Must Develop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Role of Each Component. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Benefits of the PIC Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Summary of PIC Framework Features. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
User Plug-In Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programming Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compiling and Linking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Multiple Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Multiple Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Multi PCA_Clients Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Levels of Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Between User Plug-Ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Execution API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Loading and Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HA API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Features. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HA States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HA Model (on HP OpenCall SS7). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transient States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connection Establishment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Enabling/Disabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Switchover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Switchback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Registry API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xiv
311
311
312
312
313
313
313
314
315
315
316
316
317
317
318
319
320
320
321
321
321
322
322
322
322
325
325
325
325
326
328
329
329
329
330
331
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PCA (Plug-In Communication API) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Communication Setup and Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TimerLib API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PIC Pool of Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Changing the User Plug-In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Starting/Stopping the User Plug-In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the Platform Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Command Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Product Environment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hardware Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Other Equipment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Usability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PCA Message Contents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plug-In Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
High Availability Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How the PIC Manages Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How the Plug-In Should Manage Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plug-In Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
331
331
332
333
333
334
334
335
335
337
338
338
338
339
339
339
340
340
340
341
341
342
342
342
343
9. PIC/AG - Using the PCA API
High Availability (HA) and the PCA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HA Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connection Enabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Default States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PCA Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plug-In Server and Client Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Server Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Server Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
346
346
347
347
348
348
352
353
353
xv
Server Opening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Server Closing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Server IPC Parameterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Client Connection Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Client Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Client Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Client Opening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Client Closing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Client IPC Parameterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Server Connection Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Customizing Plug-In Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ACTIVE State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BROKEN State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
REJECTED State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ZOMBIE State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Deletion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aborting a Session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing Broken Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Automatic Closing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Object Deletion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Locking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Server Session Dispatching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Server Session Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Client Session Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Reject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Parameterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Types and Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Meaning of errorCode and errorText Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Types of PCA Payload. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PCA_Message Internal Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xvi
354
355
355
355
357
357
359
359
359
360
361
361
362
362
364
364
364
364
365
366
366
366
367
367
367
368
369
369
370
370
371
373
373
375
376
376
Buffer Allocator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Principles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Principles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Profiling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
378
380
380
380
381
382
382
382
382
383
10. PIC/AG - Using the PIC APIs
Structure of PIC APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plug-In Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
User Plugin Object Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Typical Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Errors During Object Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
User Plug-In Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
User Plug-In Shutdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plug-In Scheduling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plug-In Body Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Asynchronous Tasks (TimerLib) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plug-In HA Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Features. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
State Completion Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example of an HA Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The Plug-In Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
386
389
389
389
390
390
390
391
391
394
395
395
395
396
397
11. Using the OA&M API
SS7 OA&M Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OA&M APIs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OA&M Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Obtaining Notification about OA&M Entity State Changes . . . . . . . . . . . . . . . . . .
Issuing OA&M Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating MTP and SCCP OA&M Connections using SS7_xifcreate. . . . . . . . . . . . . .
Scheduling MTP and SCCP OA&M Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
400
402
402
402
403
404
405
xvii
SS7_ifselectmask() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SS7_ifcnxhandler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending MTP2 OA&M Requests using MTP2X_oamcmd() . . . . . . . . . . . . . . . . . . . . .
Receiving MTP2 OA&M Notifications using MTP2X_oamrecv() . . . . . . . . . . . . . . . .
MTP3 Entities and Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP3 Entity Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description of MTP3 Entities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rules for Creating and Manipulating MTP3 Entities . . . . . . . . . . . . . . . . . . . . . . .
Addressing MTP3 Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Possible States of MTP3 Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending MTP3 OA&M Requests using MTPL3_oamcmd() . . . . . . . . . . . . . . . . . . . . .
Response to Expect from an MTPL3 OA&M Request . . . . . . . . . . . . . . . . . . . . . . .
Collecting MTP3 OA&M Statistics Using MTPL3_oamstat() . . . . . . . . . . . . . . . . . . .
Report Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Response to Expect When You Collect MTP3 OA&M Statistics . . . . . . . . . . . . . . .
Receiving MTP3 OA&M Command and Statistic Notifications
Using MTPL3_oamrecv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Response to Expect When You Use the MTPL3_oamrecv() Command . . . . . . . . . .
SCCP OA&M Entities and Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Entity Structure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description of SCCP Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rules for Creating and Manipulating SCCP Entities. . . . . . . . . . . . . . . . . . . . . . . .
Addressing SCCP Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Possible States of SCCP Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending SCCP OA&M Requests Using SCCP_oamcmd() . . . . . . . . . . . . . . . . . . . . . .
Response to Expect When You Send an SCCP OA&M Request. . . . . . . . . . . . . . . .
Collecting SCCP OA&M Statistics Using SCCP_oamstat() . . . . . . . . . . . . . . . . . . . .
Report Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Response to Expect When You Collect SCCP OA&M Statistics. . . . . . . . . . . . . . . .
Receiving SCCP OA&M Command and Statistic Notifications
Using SCCP_oamrecv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Response to Expect When You Use the SCCP_oamrecv() Command. . . . . . . . . . . .
Closing MTP and SCCP OA&M Connections Using SS7_close() . . . . . . . . . . . . . . . .
Using TCAP OA&M Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xviii
405
405
405
406
408
409
410
410
411
412
413
414
416
416
417
417
419
420
420
422
422
423
424
424
426
427
427
428
428
430
431
431
433
434
Opening a TCAP OA&M Connection Using TCX_open(). . . . . . . . . . . . . . . . . . . . . . .
Scheduling TCAP OA&M Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_select_mask() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_cnx_handler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Requesting TCAP Statistics Using TCX_control() . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collecting TCAP Statistics Using TCX_recv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing a TCAP OA&M Connection Using TCX_close() . . . . . . . . . . . . . . . . . . . . . . .
435
436
436
436
436
438
440
442
12. Using the ISUP API
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Software Versions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Software Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generic Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Version-Specific Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Object Orientation Guidelines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Object Lifespan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Archive and Shared Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SS7 Stack Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
State-machine Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Bypass Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP CIC-Based Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Default Platform Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inconsistent Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Application Instance Group. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
AIG configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Message Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Incoming Message Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Circuit Owners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TDi Routing Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Messages from a Non-Assigned Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Management Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Application Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
444
445
446
446
447
448
448
448
448
449
450
451
451
451
452
452
452
453
454
456
456
456
456
456
457
458
xix
Application Disconnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dynamic Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Loopback Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Flow Control and Congestion Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
On-line Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
API Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IsupMgr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IsupProbe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IsupSMProbe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IsupBPProbe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Outline of the Basic Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
General Application Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Initializing the IsupMgr object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Loading the Configuration File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating and Opening a Probe Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating a Probe Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Opening a Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Primary and Secondary Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Switching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Restrictions Related to Switching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling Probe Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pre-select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Masks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Timeout Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
selectMask(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Post-select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
handler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
doWork(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the Activity Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Criteria for Choosing to Implement the Activity Object. . . . . . . . . . . . . . . . . . . . . .
If you do not use the Activity Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
If you Implement the Activity Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How to use the Activity Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Redefining the Activity Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xx
458
459
459
459
459
460
461
462
462
462
463
463
464
464
465
465
466
466
466
468
474
474
474
474
475
475
476
476
476
476
477
477
477
477
478
478
recvActivity() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
sendPossible() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cnxStatus(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Messages via Probe Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing and Destroying a Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Destroy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
oamReceive() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reload Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Notifications Sent About Events in the ISUP Library . . . . . . . . . . . . . . . . . . . . .
oamStatus() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Return Status Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Dynamic Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
reload(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dump() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Tutorial Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using State-machine Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Bypass Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Makefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
479
479
479
481
482
482
482
484
484
484
484
489
491
494
494
496
497
497
498
499
13. Exchanging ISUP Messages
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Primitives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 ISUP Primitives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Acknowledgment Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Attempt To Use Non-Supported Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
State Machine Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Bypass Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Additional Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP Related Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 ISUP Supported Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Class for Customized Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Standard Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
502
503
504
504
505
506
523
524
528
529
529
530
530
531
xxi
Encoder/Decoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tracing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Loading a Set of Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Identifying a Set of Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Messages Supported . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Complete List of Messages and Message Sets Supported . . . . . . . . . . . . . . . . . . . .
Partial Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Accessors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Specific Accessors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Accessor Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Accessing Data Part of an IsupMsg Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IsupMsg::getPDU() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IsupMsg::setPDU() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Assigning Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Queued Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Casting Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Queued Indications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Automated Call Release. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuring for Automated Call Release. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Return Status Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Supported Parameters List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
532
532
533
533
534
535
535
535
536
536
536
537
537
538
539
541
543
544
544
545
546
548
549
550
14. Managing HP OpenCall SS7 ISUP
Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing Race Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing Memory Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing Object Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Parameter Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Additional Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Return Status Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Handling IPC Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modifying IPC Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xxii
552
553
554
555
555
555
555
556
557
558
IPC Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inbound Path. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Waiting Indications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Network Back-pressure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Outbound Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Remaining Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Application Back-pressure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing Circuit States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Provided Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How HP OpenCall SS7 ISUP Tracks Circuit State Values . . . . . . . . . . . . . . . . . . .
Developing a Circuit Update Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Propagating States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Synchronizing States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Activating the Standby Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Recovering States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
559
560
560
560
560
560
561
562
562
563
564
564
565
566
567
15. Introduction to ISUP Procedures
Supported Finite State Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Interaction Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inbound and Outbound Circuits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP3 Interaction Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Local MPT-3 Status Indications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPC States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
State Transitions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Remote DPC Status Indications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DPC States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
State Transitions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generic Primitive Processing (State-machine Probe) . . . . . . . . . . . . . . . . . . . . . . . . .
Generic Primitive Processing (Bypass Probe) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generic ISUP Message Handling (State-machine Probe) . . . . . . . . . . . . . . . . . . . . . .
Generic ISUP Message Handling (Bypass Probe) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generic ISUP Circuit Group Message Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ANSI Based HP OpenCall SS7 ISUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ITU-T Based HP OpenCall SS7 ISUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CFN and UCIC Message Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CFN Sending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
570
573
573
574
574
574
575
578
578
578
581
583
585
586
588
589
590
591
591
xxiii
CFN Receipt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
UCIC Sending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
UCIC Receipt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
User Defined ISUP Message Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Segmentation - ITU-T 93, 97, ETSI-V2 Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Segmentation for Outgoing Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reassembly of Incoming Messages - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . .
Reassembly of Incoming Messages -Failure Case 1 . . . . . . . . . . . . . . . . . . . . . . . . .
Reassembly of Incoming Messages - Failure Case 2. . . . . . . . . . . . . . . . . . . . . . . . .
Reassembly of Incoming Messages - Interacting with
Continuity Check. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Handling Unrecognized Messages ITU97 Mode for ITU-T Based HP OpenCall SS7 ISUP . . . . . . . . . . . . . . . . . . . . . . . .
591
591
591
592
593
593
594
594
595
596
597
16. ISUP Call Control - Procedures Common to ANSI and ITU-T
Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Conventions Used in Diagrams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Setup Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SETUP Request Locally Refused by HP OpenCall SS7 ISUP . . . . . . . . . . . . . . . . .
SETUP Request - Dual Seizure Case 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SETUP Request - Dual Seizure Case 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SETUP Request - Failure to Receive ACM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Incoming Call Setup with Immediate Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Successful Call Setup for Incoming Side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Setup Including ACM Message Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Setup Without ACM Message. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Normal Call Release - Outgoing Release. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Normal Call Release - Incoming Release. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Release Collision - Case 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Release Collision - Case 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Incoming Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 ISUP Initiated Reset - Successful Procedure . . . . . . . . . . . . . . .
Reset from Network - Successful Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reset from Application - Successful Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xxiv
600
601
602
602
603
604
605
606
606
606
607
608
608
608
609
610
611
613
613
614
615
Circuit Group Reset from Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Failure Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Double Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Information Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Solicited Information Exchange - Success . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Solicited Information Exchange - Failure Case 1 . . . . . . . . . . . . . . . . . . . . . . . . . . .
Solicited Information Exchange - Failure Case 2 . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unsolicited Information Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Information Exchange - Failure Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Suspend/Resume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Suspend/Resume - T6 Expiry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Forward Transfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Forward Transfer Message - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pass Along Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pass Along Request - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pass Along Request - Error Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check Request with IAM or CCR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check on this Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Successful Continuity Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Failed Continuity Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check on the Previous Circuit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Facility Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
616
616
617
618
620
620
621
622
623
623
625
625
627
627
628
628
629
630
630
630
630
633
634
17. ISUP Call Control - Procedures Specific to ANSI
Call Setup Without ACM Reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Abnormal Call Release - Case 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Abnormal Call Release - Case 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 ISUP Initiated Reset - Failure to Receive RLC . . . . . . . . . . . . .
Circuit Group Reset from User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Reservation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Reservation from Network. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Reservation from Network - T_CRA Expiry . . . . . . . . . . . . . . . . . . . . . . . . .
636
637
637
639
641
641
643
643
644
644
645
xxv
Suspend/Resume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Suspend/Resume - Outgoing Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Suspend/Resume - Incoming Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exit Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exit Message - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check Request with IAM or CCR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check on this Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Successful Continuity Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Recheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Recheck - TCCR Expiry at Outgoing Side . . . . . . . . . . . . . . . . . . . . .
Continuity Recheck - T24 Expiry at Outgoing Side . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check Request with CRM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check on this Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Successful Continuity Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Failed Continuity Check and Recheck Procedure . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check on the Previous Circuit/
Not Required on this Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
646
646
646
648
648
649
649
649
652
656
658
661
661
662
663
664
18. ISUP Call Control - Procedures Specific to ITU-T
Successful Call Setup for Outgoing Side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Setup Including ACM Reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of the CON Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of the CON Message for Outgoing Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of the CON Message for Incoming Calls. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of the SAM Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of the SAM Message for Outgoing Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of the SAM Message for Incoming Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Abnormal Call Release - Case 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Abnormal Call Release - Case 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 ISUP Initiated Reset - Failure to Receive RLC . . . . . . . . . . . . .
Circuit Group Reset from USER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Suspend/Resume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Suspend/Resume - Incoming Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xxvi
666
666
667
667
667
668
669
669
670
670
671
673
673
675
675
676
676
Suspend/Resume - Outgoing Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Suspend/Resume - T2 Expiry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check Request with IAM or CCR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check on this Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Successful Continuity Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Recheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Recheck - T24 Expiry at Outgoing Side . . . . . . . . . . . . . . . . . . . . . . .
Facility Request, Facility Accepted, Facility Reject Messages. . . . . . . . . . . . . . . . . . .
Facility Exchange - Success . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Facility Exchange - Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
677
678
680
680
680
684
688
693
693
694
19. ISUP Circuit Maintenance - Procedures Specific to ANSI
Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Blocking/Unblocking from a Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Blocking from a Network - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Blocking from User - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Unblocking from a Network - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Unblocking from User - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Unblocking from a Network on Reception of an IAM . . . . . . . . . . . . . . . . .
Circuit Blocking during Setup Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Blocking/Unblocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking from Network Immediate Release - Normal Case 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking from Network - No Release Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking (Immediate Release or Not) from User Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Unblocking from NetworkNormal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Unblocking (Immediate or Not) from User Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking (Without Immediate Release)
During Call Setup Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Query from the Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Query from User (Application) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
696
697
697
697
698
698
699
699
701
701
702
704
705
706
706
708
708
709
719
xxvii
Circuit Validation from Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Circuit Validation from User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
Circuit Validation from User - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
Circuit Validation from User - Test Failed - Two T_CVT Timeouts . . . . . . . . . . . 721
Circuit Validation from User - Test Failed -CVR Received Before Second T_CVT
Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
20. ISUP Circuit Maintenance - Procedures Specific to ITU-T
Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Blocking/Unblocking from a Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Blocking from a Network - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Blocking from User - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Unblocking from Network - Normal Case. . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Unblocking from User - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Unblocking from a Network on Reception of an IAM . . . . . . . . . . . . . . . . .
Circuit Blocking during Setup Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Blocking/Unblocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking (Maintenance Oriented) from Network Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking (Hardware Oriented) from Network Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking (Maintenance Oriented) from User Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking (Hardware Oriented) from User Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Unblocking (Maintenance Oriented) from Network Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Unblocking (Hardware Oriented) from Network Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Unblocking (Maintenance Oriented) from User Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Unblocking (Hardware Oriented) from User Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking (Maintenance Oriented)
During Call Setup Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Group Blocking (Hardware Oriented)
During Call Setup Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xxviii
724
725
725
726
727
727
728
729
730
730
732
733
734
735
736
737
738
739
740
Circuit Group Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Query from the Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Query from Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Failure to Receive CQR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
741
741
742
742
742
A. ISUP Library Values
ANSI-based HP OpenCall SS7 ISUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
ITU-T - based HP OpenCall SS7 ISUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
B. TUP Addendum
How to Use This Addendum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Functionality Identical to HP OpenCall SS7 ISUP . . . . . . . . . . . . . . . . . . . . . . . . .
Functionality Not Identical to HP OpenCall SS7 ISUP . . . . . . . . . . . . . . . . . . . . . .
Flavors Supported by HP OpenCall SS7 TUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Software Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Software Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Conventions Used in Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Application Development Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Designing for System Predictability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Optimizing OS Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Techniques for Performance Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
System Test and Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Object Orientation Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Archive and Shared Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SS7 Stack Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
API Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Outline of the Basic Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Initializing the IsupMgr Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creating and Opening a Probe Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling Probe Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
758
758
758
759
761
761
761
761
762
763
763
763
763
763
763
764
765
765
765
765
765
765
765
765
766
xxix
Using the Activity Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Messages via Probe Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing and Destroying a Probe Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
oamReceive() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Return Status Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Dynamic Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 TUP Primitives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
State Machine Mode Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Bypass Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP Related Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Additional Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 TUP Message Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Encoding/Decoding TUP Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Accessors for TUP Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUP User Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUP Message Class Naming Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUP Message Module Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUP Message Description (API). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rounding a Parameter Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Automated Call Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ACR State Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Return Status Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing HP OpenCall SS7 TUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing Race Conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing Memory Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing Object Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Handling IPC Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Congestion and Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IPC Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Automatic Congestion Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xxx
766
766
766
766
766
767
767
768
768
768
768
768
779
779
779
783
783
784
785
786
787
787
789
798
799
801
801
802
802
802
802
802
802
803
803
803
Managing Circuit States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Available Circuit States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Developing a Circuit Update Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduction to TUP Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Supported Finite State Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Interaction Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MTP3 Interaction Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Remote DPC Status Indications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generic Primitive Processing (State Machine Probe). . . . . . . . . . . . . . . . . . . . . . . .
Generic Primitive Processing (Bypass Probe) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generic TUP Message Handling (State Machine Probe) . . . . . . . . . . . . . . . . . . . . .
Generic TUP Message Handling (Bypass Probe) . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generic TUP Circuit Group Message Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Setup Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Setup Request Locally Refused by HP OpenCall SS7 TUP . . . . . . . . . . . . . . . .
Setup Request - Dual Seizure Case 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Setup Request - Dual Seizure Case 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Setup - Failure to Receive ACM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Setup Request - Failure to Receive ANN (or ANC) . . . . . . . . . . . . . . . . . . . . . . .
Setup Request - Unsuccessful Backward Setup Message . . . . . . . . . . . . . . . . . .
Incoming Call Setup with Immediate Release . . . . . . . . . . . . . . . . . . . . . . . . . . .
Successful Call Setup for Outgoing Side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Successful Call Setup for Incoming Side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of SAM and SAO Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Information Exchange. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of GRQ and GSM Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check Request with IAM or CCR . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Re-answer Procedures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Release. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Normal Call Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Abnormal Call Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Blocking/Unblocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
805
805
809
810
810
812
812
812
812
812
812
812
813
816
816
816
817
819
820
821
822
824
824
825
826
828
830
834
847
852
852
857
860
867
875
875
xxxi
Circuit Blocking From Network - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Blocking From User - Normal Case. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Unblocking From Network - Normal Case . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Unblocking From User - Normal Case . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Unblocking From Network - On Reception of IAM . . . . . . . . . . . . . . . . .
Circuit Blocking During the Setup Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Blocking/Unblocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Blocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Unblocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Blocking/Unblocking - Acknowledgment . . . . . . . . . . . . . . . . . . . .
Miscellaneous Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of MPM Message (CTUP Only). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of MAL Message (CTUP Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use of FOT Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUP Tutorial Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using State-machine Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Bypass Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUP Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xxxii
875
876
876
877
877
877
879
880
889
895
897
897
898
898
899
899
899
900
Preface
This guide contains guidelines for developing applications for
HP OpenCall SS7 platforms. It accompanies HP OpenCall SS7 3.2.
About This Guide
Purpose
The purpose of this guide is to describe how to develop applications to
run on top of the HP OpenCall SS7 software. Refer to this guide for:
•
General guidelines for developing applications and using the APIs
supplied with the HP OpenCall SS7 software.
•
Using the following APIs:
— Level 3 (MTP3/M3UA) API
— SCCP API
— TCAP API
— OA&M API
— ISUP API
— TUP API
•
Examples of code that use the HP OpenCall SS7 APIs.
•
Using the TCAP Application Message Dispatcher.
•
Using the Application Guardian to develop user plug-in (shared
library)s.
•
Guidelines for developing applications and using the API supplied
with the HP OpenCall SS7 ISUPand HP OpenCall SS7 TUP
software.
•
Opening, closing, and using connections to the ISUP/TUP library.
•
Creating, manipulating, and exchanging standard ANSI and ITU-T
messages.
•
ISUP/TUP FSMs, interaction with the MTP layer, and segmentation
mechanisms.
xxxiii
•
ISUP/TUP call setup and call teardown procedures.
•
ISUP/TUP circuit maintenance processes.
•
Examples of code that use the HP OpenCall SS7 ISUP API objects
and methods.
Contents and Structure
The contents and structure of this guide are as follows:
Chapter
Contents
Chapter 1, “Introduction to
HP OpenCall SS7 APIs.”
Introduces the APIs provided by HP OpenCall SS7. A
general description of the HP OpenCall SS7 stack
versions is also included.
Chapter 2, “General System
Guidelines.”
Gives guidelines to help you develop applications to run
on top of the HP OpenCall SS7 platform. Following these
guidelines will ensure that the applications will
inter-operate correctly and efficiently with the
individual sub-systems of the HP OpenCall SS7
platform.
Chapter 3, “General API
Guidelines.”
Introduces the general concepts and mechanisms that
must be used when developing applications. These
guidelines are applicable to each HP OpenCall SS7 API,
and must be read in association with the following API
chapters.
Chapter 4, “Using the Level 3
(MTP3/M3UA) API.”
Describes the Level 3 API and the functions that
applications can use to exchange signaling information
with the SS7 stack. The guidelines in this chapter will
ensure that the application correctly uses the Level 3
API. The same Level 3 API is used whether the Level 3
protocol is MTP3 (SS7) or M3UA (SIGTRAN).
Chapter 5, “Using the SCCP
API.”
Describes the SCCP API and the functions that the
application can use to exchange signalling information
with the SS7 stack. The guidelines in this chapter will
ensure that the application correctly communicates with
the SCCP API.
xxxiv
Chapter
Contents
Chapter 6, “Using the TCAP
API.”
Describes the TCAP API and the functions that the
application can use to establish and maintain TCAP
dialogues with a remote TCAP user.
Chapter 7, “Using the TCAP
Application Message
Dispatcher.”
Describes the TCAP Application Message Dispatcher.
Chapter 8, “PIC/AG Introduction.”
Introduces the Application Guardian (Plug-In
Container/Application Guardian).
Chapter 9, “PIC/AG - Using the
PCA API.”
Describes how to use the PCA API of the Application
Guardian.
Chapter 10, “PIC/AG - Using
the PIC APIs.”
Describes how to use the PIC APIs of the Application
Guardian.
Chapter 11, “Using the OA&M
API.”
Describes the Operation, Administration & Maintenance
(OA&M) functions that the application can use to
manage the MTP2, MTP3, SCCP and TCAP processes in
the SS7 Stack.
Chapter 12, “Using the ISUP
API.”
Describes how to open, close and use an SS7 stack
connection via the HP OpenCall SS7 ISUP API.
Chapter 13, “Exchanging ISUP
Messages.”
Describes how to create, manipulate and exchange
standard ANSI and ITU-T messages. It also describes
the various primitives provided for IsupSMProbe and
IsupBPProbe objects.
Chapter 14, “Managing
HP OpenCall SS7 ISUP.”
Provides management guidelines for use in developing
the application.
Chapter 15, “Introduction to
ISUP Procedures.”
Presents information about ISUP procedures, including
FSMs, interaction with the MTP layer and segmentation
mechanisms.
Chapter 16, “ISUP Call Control
- Procedures Common to ANSI
and ITU-T.”
Describes how HP OpenCall SS7 ISUP behaves when
controlling call setup and call teardown procedures that
are common to ANSI and ITU-T.
xxxv
Chapter
Contents
Chapter 17, “ISUP Call Control
- Procedures Specific to ANSI.”
Describes how HP OpenCall SS7 ISUP behaves when
controlling call setup and call teardown procedures that
are specific to ANSI.
Chapter 18, “ISUP Call Control
- Procedures Specific to ITU-T.”
Describes how HP OpenCall SS7 ISUP behaves when
controlling call setup and call teardown procedures that
are specific to ITU-T.
Chapter 19, “ISUP Circuit
Maintenance - Procedures
Specific to ANSI.”
Describes circuit maintenance processes that are specific
to ANSI.
Chapter 20, “ISUP Circuit
Maintenance - Procedures
Specific to ITU-T.”
Describes circuit maintenance processes that are specific
to ITU-T.
Appendix A, “ISUP Library
Values.”
Lists the AdditionalInfo values that can be returned by
the ISUP Library in certain ANSI and ITU-T -based
scenarios.
Appendix B, “TUP Addendum.”
Describes HP OpenCall SS7 TUP. It describes the
differences between HP OpenCall SS7 TUP and
HP OpenCall SS7 ISUP.
xxxvi
Associated Documentation
The following documents are on the HP OpenCall SS7 CD-ROM:
Table 1
Documents on the HP OpenCall SS7 CD-ROM
Title
Contents
HP OpenCall SS7 Application
Developer’s Guide
Describes the HP OpenCall SS7 APIs. In particular, it
describes how to design and develop user applications to
run on ISUP or TUP.
HP OpenCall SS7 Conformance
and Compliance Statements
Outlines platform conformance and compliance to
telecommunications network protocols.
HP OpenCall SS7 Glossary
Defines terms used in the documentation set.
HP OpenCall SS7 Operations
Guide
Describes how to install and configure the platform and
SS7 network, how to start, stop and monitor the
platform, and how to use the platform management
tools. The guide also includes SS7 hardware (TSC and
TSU) installation and maintenance procedures, as well
as platform expansion procedures.
The guide contains information on the SS7 Monitor,
configuration files and the SNMP traps generated by the
platform.
HP OpenCall SS7
Troubleshooting Guide
Describes how to troubleshoot an HP OpenCall SS7
platform.
HP OpenCall SS7 TSU and
TSC Starter Sheet
Describes the safety regulations and conformance to
international standards for TSUs and TSCs.
HP OpenCall SS7 Welcome
Guide
Describes the main features of the platform.
HP OpenCall SS7 Software
Installation QuickStart Guide
This is the booklet that accompanies the
HP OpenCall SS7 3.2 CD-ROM. It contains a procedure
for installing HP OpenCall SS7 version 3.2 from scratch.
The procedure in this booklet applies if the platform has
never had HP OpenCall SS7 installed. If the platform
already has a version of HP OpenCall SS7 installed, you
should use the software installation procedure described
in the HP OpenCall SS7 Operations Guide.
xxxvii
The following document is available but are not on the HP OpenCall SS7
CD-ROM:
Table 2
Other Documents
Title
HP OpenCall SS7 Release Notes
xxxviii
Contents
This document contains release-specific
information. In particular, it gives details of the
HP OpenCall SS7 packages, the servers
supported, the OS versions supported and the
associated patches (if any).
We Welcome Your Comments
Your feedback on these manuals is very important to us.
You can contact us by e-mail at the following address:
[email protected]
You can also mail your comments to:
Hewlett-Packard Company,
OpenCall Business Unit,
38053 GRENOBLE Cedex 9,
France
xxxix
xl
1
Introduction to
HP OpenCall SS7 APIs
This chapter describes the APIs provided by HP OpenCall SS7. It also
includes a general description of the HP OpenCall SS7 stack versions.
Chapter 1
41
Introduction to HP OpenCall SS7 APIs
HP OpenCall SS7 Developer’s Environment
HP OpenCall SS7 Developer’s Environment
The HP OpenCall SS7 software is available as a runtime environment or
as a developer’s environment. The HP OpenCall SS7 developer’s
environment allows the development and testing of applications on top of
the SS7 stack. These applications can be deployed on the
HP OpenCall SS7 environment software while remaining independent of
the platform configuration.
Development Software
In the development environment, the SS7 Stack and management
libraries are accessible via the HP OpenCall SS7 Application
Programming Interfaces (APIs), thus allowing the development of C/C++
applications. The APIs provide a transparent interface, shielding
applications from the underlying network procedures and the platform
architecture.
Figure 1-1
42
Development Platform
Chapter 1
Introduction to HP OpenCall SS7 APIs
HP OpenCall SS7 Developer’s Environment
Loopback Testing
Once an application has been developed, it can be tested on the
development platform using loopback testing. The advantage of loopback
testing is that SS7 network access connections are not necessary.
However, for applications that use the lower MTP levels, a limited
number of network access links must be used.
NOTE
Chapter 1
ISUP loopback can only be used when CIC-based distribution is disabled.
43
Introduction to HP OpenCall SS7 APIs
HP OpenCall SS7 APIs
HP OpenCall SS7 APIs
Application Programming Interfaces (APIs) provide applications with
access to the HP OpenCall SS7 platform libraries and the SS7 network.
These APIs support the management and protocol services required to
achieve SS7 connectivity.
Categories of API
The HP OpenCall SS7 APIs can be divided into three main categories:
•
SS7 APIs
Each protocol level is accessible via its dedicated API, such as the
MTP-3/M3UA, SCCP, ISUP, TUP and TCAP APIs. In the case of
TCAP, the stack’s default round robin algorithm (for load sharing
when there are several users connected on the same SSN) can be
replaced by a user algorithm using the TCAP Application Message
Dispatcher.
•
SS7 Management APIs
Operations, Administration and Maintenance (OA&M) services of
MTP, SCCP and TCAP are accessible via their respective OA&M
APIs.
•
Application Guardian API
By using the Application Guardian, user applications can benefit
from the High Availability facilities of HP OpenCall SS7.
An application can use a single API (either an SS7 Stack or an SS7
Management API) or simultaneously use multiple APIs.
Permission to Access HP OpenCall SS7
Only members of the group ocadmin. can access the HP OpenCall SS7
APIs. To allow access, you do not need to change a user’s account, you
just add the user to the list of members of the group ocadmin.
For a developer, who does not need to operate the platform, membership
can be defined as secondary. For an operator, who needs to operate the
platform, the user’s primary group must be ocadmin.
See also the group(4) and password(4) man pages.
44
Chapter 1
Introduction to HP OpenCall SS7 APIs
Stack and Management APIs
Stack and Management APIs
Figure 1-2
HP OpenCall SS7 Stack and Management APIs
User application
TCAP
API
ISUP
& TUP
APIs
SCCP
API
MTP3/
M3UA
API
AG API
OA & M
APIs
TCAP
SCCP
Chapter 1
MTP level 3
M3UA
MTP level 2
SCTP
MTP level 1
IP
45
Introduction to HP OpenCall SS7 APIs
HP OpenCall SS7 Stack APIs
HP OpenCall SS7 Stack APIs
The Stack APIs provide access to the SS7 protocol stack. These APIs
allow an application to request services from the appropriate protocol
layer (MTP Level 3, SCCP or TCAP).
MTP3/M3UA API
MTP3/M3UA Level 3 services are accessible through this API. Using the
provided functions, an application written in C can exchange MSUs with
a peer application. Applications can utilize the functions provided by this
API to request services such as:
•
Message Handling,
•
Network Management,
•
Link Management (MTP3 only).
See Chapter 4, Using the Level 3 (MTP3/M3UA) API,, for a full
description.
SCCP API
The SCCP library enhances the transport services of MTP Level 3, and
combined with the MTP library forms the Network Service Part (NSP)
which is equivalent to Layer 3 of the Open Systems Interconnection
(OSI) reference model.
Applications written in C can utilize the functions provided by this API
to request SCCP services such as:
•
Message Handling
•
Global Title Translation
•
Routing
•
Addressing
•
Signaling Point Management and Subsystem Management
•
Segmentation/Reassembly
See Chapter 5, Using the SCCP API,, for a full description.
46
Chapter 1
Introduction to HP OpenCall SS7 APIs
HP OpenCall SS7 Stack APIs
TCAP API
The TCAP API allows an application written in C to access either the
component or the transaction sublayer. This enables non-standard TCAP
components to use the HP OpenCall SS7 transaction sublayer.
This API provides functions to request the services of the TCAP library
such as:
•
Exchange of TCAP components,
•
Multiple User Access,
•
Component Management,
•
Transaction/Dialog Management.
For a description, see Chapter 6, Using the TCAP API,.
TCAP Application Message Dispatcher
If several users are connected with the same SSN on the same stack, you
can supply your own algorithm to replace the round-robin algorithm
used by default. You do this using the TCAP Application Message
Dispatcher.
The TCAP Application Message Dispatcher has its own API. This API is
described in Chapter 7, Using the TCAP Application Message
Dispatcher,.
ISUP API
HP OpenCall SS7 ISUP enables ISUP call control applications to run
over SS7 networks. It relies on MTP Level 3 functionality to transfer its
messages through the SS7 network to the destination point code.
For a description, see Chapter 12, Using the ISUP API, and subsequent
chapters.
TUP API
HP OpenCall SS7 TUP enables TUP call control applications to run over
SS7 networks. It relies on MTP Level 3 functionality to transfer its
messages through the SS7 network to the destination point code.
For a description, see Appendix B, “TUP Addendum.”
Chapter 1
47
Introduction to HP OpenCall SS7 APIs
HP OpenCall SS7 Management APIs
HP OpenCall SS7 Management APIs
The management API is the OA&M (Operations, Administration and
Maintenance API.
This API provides functions for the development and deployment of SS7
Stack and platform management applications. The OA&M APIs are
provided for each SS7 Stack level (MTP, SCCP and TCAP). They allow
applications to access and use the SS7 management functions such as
node configuration, control and surveillance.
See Chapter 11, Using the OA&M API, for a full description.
48
Chapter 1
Introduction to HP OpenCall SS7 APIs
PIC/AG (Plug-In Container/Application Guardian)
PIC/AG (Plug-In Container/Application
Guardian)
By using the PIC/AG feature, user applications can benefit from the
High Availability facilities of the HP OpenCall SS7 product. The
application concerned becomes a user plug-in (shared library). For an
introduction to the PIC/AG, see the HP OpenCall SS7 Welcome Guide.
The PIC/AG has its own APIs.
These APIs are described in Appendix 9, “PIC/AG - Using the PCA
API,”and Chapter 10, “PIC/AG - Using the PIC APIs.”
Chapter 1
49
Introduction to HP OpenCall SS7 APIs
Alias Point Code
Alias Point Code
The Alias Point Code feature allows the HP OpenCall SS7 product itself
to be part of one or more aliases as defined by the Bellcore standard
GR-82-CORE Issue 1, June 1994.
Such an alias is known as a local alias.
Local Alias
You can define one or more aliases, whose constituents are
HP OpenCall SS7 nodes.
An HP OpenCall SS7 node can belong to at most 4 aliases. Therefore, an
HP OpenCall SS7 node can have a maximum of 4 aliases.
Each node of the network can then access the HP OpenCall SS7 node
either by using its LPC or by using one of its aliases. The goal is to allow
a remote node to reach an HP OpenCall SS7 node other than by using its
LPC.
The local alias is visible only up to the MTP3 level. The applications
above MTP3 are not aware of its existence and just see the LPC.
Figure 1-3 on page 51 shows an example of how an incoming message for
an alias is handled.
The diagram shows a pair of HP OpenCall SS7 nodes (A and B) with an
alias c defined for them.
Step 1. The remote node D sends a message with DPC = c.
Step 2. The STP E selects one of the constituents of the alias (let us say A).
Step 3. E routes the message to A.
Step 4. The message enters the MTP3 level of A with DPC = c.
Step 5. The message exits the MTP3 level of A with DPC = a.
Step 6. The application on A receives the message DPC = a.
The existence of the alias has no effect on outgoing messages from A.
Such messages are sent with OPC = a. The alias c does not appear in
such messages.
50
Chapter 1
Introduction to HP OpenCall SS7 APIs
Alias Point Code
Figure 1-3
Chapter 1
Example of an Incoming Message for a Local Alias
51
Introduction to HP OpenCall SS7 APIs
Virtual Point Codes (VPCs) and Virtual Users (VUs)
Virtual Point Codes (VPCs) and Virtual Users
(VUs)
NOTE
The VPC and VU features are available only if the signaling network is
SS7. These features are not available if the signaling network is IP
(using SIGTRAN).
These features provide the following functionalities:
•
On a single node, an SS7 stack can have multiple non-physical point
codes (called VPCs).
•
A user application, called a Virtual User (VU), can receive and send
traffic through VPCs, and manage the VPC behavior.
•
A user application can bridge a non-SS7 network with an SS7
network.
Two objects are associated with these features:
•
a VPC object that must be configured as a new point code.
•
a VU object that must be configured as a new local user application.
Virtual Point Codes (VPC)
A VPC is a non-physical point code. The configuration of a VPC consists
in the dynamic configuration of a point code. A maximum of 16 VPCs is
allowed on each HP OpenCall SS7 stack.
Like an Alias Point Code, a VPC is associated with the LPC.
In the case of an incoming MSU containing an Alias Point Code, the alias
is replaced by the LPC (in the MTP routing label) before being given to
the user. In the case of an incoming MSU containing a VPC, the DPC of
the MTP Routing Label remains set to the VPC.
An outgoing MSU with the OPC set to a VPC is sent to the network
without any substitution of the OPC.
Management and monitoring are not available on VPCs.
52
Chapter 1
Introduction to HP OpenCall SS7 APIs
Virtual Point Codes (VPCs) and Virtual Users (VUs)
Virtual Users
A VU is a user that can be connected to a VPC. The configuration of a VU
consists of the dynamic configuration of a SubSystem Number (SSN)
associated with a VPC. Thus a VU is identified by two values: VPC and
SSN.
A maximum of 16 VUs is allowed on each HP OpenCall SS7 stack.
Because a VU application behaves like a local user application, all the
SCCP functionalities, including monitoring, are available for a VU.
OAM API
The OAM API allows configuration of Virtual Point Codes (VPCs)
through the command MTPL3_oamcmd() using the virtual_pc
MtpOamObject object.
The OAM API allows configuration and monitoring of VUs using the
following commands SCCP_oamcmd(), SCCP_oamrecv() and
SCCP_oamstat() through the SO_VIRTUAL_USER SccpOamObject object.
SCCP API
The SCCP API allows connection to a Virtual User (VU) using the
ss7_xifcreate() function and the cnx_info variable which has a
specific add_info field.
VPC Tutorials
The OAM and SCCP specific VPC tutorials show how to use the data
structures and the functions of the OAM and SCCP APIs.
To use the OAM tutorials, execute the cc_oam makefile. This creates an
executable file OAM. Execute this file without arguments to see how to use
the program.
To use the SCCP VPC tutorials, execute the cc_sccp_vpc makefile. This
creates two executables: SccpClientVpc and SccpServerVpc. Execute
these programs without any arguments to see the available options. Do
not forget to set the mode option (primary or secondary) to connect the
tutorial to a Virtual User.
The files cc_sccp_vpc, SccpClientVpc.c and SccpServerVpc.c are
located in the /opt/OC/tutorial directory.
Chapter 1
53
Introduction to HP OpenCall SS7 APIs
Compatibility with Earlier Releases
Compatibility with Earlier Releases
Levels of Compatibility
Table 1-1, “Meaning of the Different Possible Levels of Compatibility,”
defines the different possible levels or elements of compatibility for an
application developed for HP OpenCall SS7 2.x and 3.1.
Table 1-1
Meaning of the Different Possible Levels of Compatibility
Level or Element
of Compatibility
Meaning
Binary
The application works with the two releases without compilation and
linking. Only an application restart is required.
Source
The source code is compatible.
It is not mandatory to modify the source code of the application.
It is mandatory to recompile and re-link the application with the
libraries of the newer release.
Makefile/Build
The makefile and other build commands are still valid in the newer
release.
Binary compatibility with earlier releases of HP OpenCall SS7 is
provided for some HP OpenCall SS7 APIs.
For a list of the HP OpenCall SS7 APIs and releases for which binary
compatibility is provided, see the HP OpenCall SS7 Release Notes.
Environment Variables
In cases where binary compatibility is provided, you must also set the
values of the following environment variables:
export HP_AIN_CONFIG_FILE=/etc/opt/OC/platform/global.conf
export HP_AIN_DEBUG_CONFIG=/etc/opt/OC/supportability/debug.conf
54
Chapter 1
Introduction to HP OpenCall SS7 APIs
Compatibility with Earlier Releases
Libraries Available
Table 1-2
API Library
API Libraries Available
32-bit
64-bit
Archive
Shared
Posix
Thread
TCAP
Yes
Yes
No
Yes
Yes
ISUP
Yes
No
No
Yes
Yes
SCCP
Yes
Yes
No
Yes
Yes
MTP3 / M3UA
Yes
Yes
No
Yes
Yes
OA&M
Yes
Yes
No
Yes
Yes
MTP, ISUP, and OA&M APIs
Table 1-3, “Compatibility Table for MTP, ISUP, and OA&M APIs,” shows
the actual compatibility levels for these APIs.
Table 1-3
Compatibility Table for MTP, ISUP, and OA&M APIs
Compatibility Element
Applications Compiled
with 2.x Libraries
Applications Compiled
with 3.x Libraries
Source
Yes
Yes
Makefile / build
No*
No*
Re-link (archive)
NA**
NA**
Binary (archive)
No
No
* Different linker command lines.
** No archive library.
Chapter 1
55
Introduction to HP OpenCall SS7 APIs
Compatibility with Earlier Releases
SCCP and TCAP APIs
Table 1-3, “Compatibility Table for MTP, ISUP, and OA&M APIs,” shows
the actual compatibility levels for the MTP and TCAP APIs.
Table 1-4
Compatibility Table for SCCP and TCAP APIs
Compatibility Element
Applications Compiled
with 2.x Libraries
Applications Compiled
with 3.x Libraries
Source
Yes
Yes
Makefile / build
No*
No*
Re-link (archive)
NA**
NA**
Binary (archive)
No***
No***
* Different linker command lines.
** No archive library.
*** PA binary emulation on IPF is not supported, only native executable.
56
Chapter 1
2
General System Guidelines
This chapter gives guidelines to help you develop applications to run on
top of the HP OpenCall SS7 platform. Following these guidelines will
ensure that applications will inter-operate correctly and efficiently with
the individual sub-systems of the HP OpenCall SS7 platform.
Chapter 2
57
General System Guidelines
Development Guidelines
Development Guidelines
Application must integrate with the HP OpenCall SS7 components, so
that they run seamlessly as one homogenous unit. Therefore, all test and
validation procedures should be applied to the platform as a whole, and
not solely to the application.
Designing for System Predictability
The platform as a whole should behave in a predictable fashion under all
possible operating conditions. It must respond to requests from the SS7
network within pre-defined and predictable time limits that are within
the range of 0.5 second to 1 second. Operating within this range allows
the operating system to behave predictability even though it is not a real
time operating system.
Designing for System Performance
Telecommunications application performance can be defined as “the
optimal use of computing resources to produce the call control and
signalling transactions for which the application has been designed”. The
best way of measuring performance is against the quantification of
resource usage (CPU usage, main memory, I/O, network) required to
process each unit of work; for example, transactions.
58
Chapter 2
General System Guidelines
Optimizing OS Performance
Optimizing OS Performance
The main causes of poor performance leading to unpredictable system
response are due to access contention of memory and CPU resources.
General Guidelines
You can use the real time features of the OS scheduler to manage system
performance, but you should use this with caution as many processes in
the HP OpenCall SS7 platform need easy access to processing resources
(see “Platform and User Application Scheduling” on page 62).
A better way to ensure predictable and optimized performance is to avoid
resource access contention by following these guidelines:
Chapter 2
•
Always keep total CPU usage below 85% and keep spare CPU
resources to minimize any CPU resource access contention.
•
Do not try to increase the priority of an application process with the
nice, rtprio or rtsched commands, as these commands are not
supported.
•
Make sure you have sufficient physical memory for all
HP OpenCall SS7 and application processes, and ensure that your
system has been sized appropriately (buffer sizes, kernel parameters,
etc.). For details, refer to the installation procedure in the
HP OpenCall SS7 Operations Guide.
•
Design and implement proactive overload handling mechanisms that
will avoid the platform limiting the throughput due to it delaying the
scheduling processes (that is, 100% CPU usage).
•
Minimize the number of processes involved in the performance path.
•
Beware of the effect of buffered I/Os. See the product Release Notes.
•
Avoid swapping end monitor swap usage.
•
Avoid dynamic memory allocation in application processes. Even
when all the memory leaks are eliminated, the fragmentation effect
can cause the process memory consumption to increase with time.
•
When using a FE/BE topology it is preferable to use high speed LANs
such as FDDI or 100BASE-T.
59
General System Guidelines
Techniques for Performance Optimization
Techniques for Performance Optimization
The hints below are provided to assist you in obtaining optimum
performance for HP OpenCall SS7 platform applications. The list will
help you identify key areas for optimization.
60
•
Minimize the number of process switches that you have implied in
the performance path.
•
Minimize the number of system calls in your code, especially the use
of select().
•
Pay particular attention to the Inter-Process Communication (IPC)
part of application as this is always the most critical in terms of
system performance.
•
Allocate all dynamic objects into a free pool at startup and use them
from there, as required.
Chapter 2
General System Guidelines
System Test and Validation
System Test and Validation
Follow the procedures below during the testing and validation of
applications, to ensure that they will operate correctly with the
HP OpenCall SS7 platform.
Load the HP OpenCall SS7 platform with the operational and logging
configuration that you are going to use. At the maximum traffic load,
check the following:
•
The CPU usage must always be less than 85%.
For a multiprocessor platform, the CPU usage of the processor
running HP OpenCall SS7 must be less than 85%.
•
The HP OpenCall SS7 platform must respond to STLM messages in
less than 40 ms. This can be measured using an SS7 tester such as
an HP 37900 analyzer.
•
Ensure that the HP OpenCall SS7 platform mechanism is
functioning correctly:
— No erroneous switchovers due to heartbeat losses should be
detected,
— The FTC must have sufficient CPU to function correctly,
See the section below on “Platform and User Application
Scheduling”.
•
Chapter 2
No swapping should occur on the system.
61
General System Guidelines
Platform and User Application Scheduling
Platform and User Application Scheduling
On the HP OpenCall SS7 system it is important that:
NOTE
•
the application scheduling be done in only one main loop
•
all HA processes have a fair share of the CPU time available
It is especially important that HA processes (such as the SS7 stack) have
enough processing power and have CPU access in real-time when they
need it. This is because a system of heartbeats is used to detect failure; a
process that is not scheduled cannot send heartbeats, and so will be
detected as dead by the system.
These constraints are also normally true for application processes, which
must process SS7 messages in a timely fashion. The HP OpenCall SS7
Stack API also generates heartbeats to monitor connections. The stack
API clears the connection from its end if the heartbeats are not received.
If the connection closes it is up to the application to close the connection
on the application end. To keep the connection open, regularly call the
API.
The HP OpenCall SS7 processes are configured with a priority level
which ensures the correct operation of the platform. These preset default
values should not be changed.
Although the SS7_Stack process is given a high priority (20), it is
self-regulating. SS7_Stack monitors its connection with an application in
order not to overflow it, and if it sees that an application cannot process
its buffer it will relinquish some of its share of CPU.
62
Chapter 2
General System Guidelines
Storing User Applications on an HP OpenCall SS7 Platform
Storing User Applications on an
HP OpenCall SS7 Platform
Directory Structures Reserved for HP OpenCall SS7
The following directory structures are reserved for HP OpenCall SS7:
•
/etc/opt/OC/
•
/opt/OC/
•
/var/opt/OC
•
/var/tmp/OC
HP recommends that only HP OpenCall SS7 files be stored in these
directory structures.
No user applications or files, other than configuration files, should be
stored in these directories and their sub-directories. Using these
directories for other files could cause configuration problems or incorrect
behavior of user applications.
In particular, no binaries should be placed in either the /opt/OC/lbin or
in the /opt/OC/bin sub-directories.
Owner and Access Rights
Do not modify the access rights or owner of files and sub-directories in
these reserved structures.
Chapter 2
63
General System Guidelines
Storing User Applications on an HP OpenCall SS7 Platform
64
Chapter 2
3
General API Guidelines
This chapter introduces the general concepts and mechanisms that must
be used when developing applications. These guidelines are applicable to
each HP OpenCall SS7 API, and must be read in association with the
following API chapters.
Chapter 3
65
General API Guidelines
Accessing the SS7 Stack
Accessing the SS7 Stack
The aim of an API is to provide applications with SS7 network access
while shielding the architecture of the platform. This abstract view of the
platform allows an application to use the SS7 and management functions
without being dependent on the platform configuration.
An application can access the HP OpenCall SS7 stack locally (if it runs
on the FE server) or remotely (if it runs on the BE server). In both 1-host
and 2-host development platforms, applications and APIs co-exist on the
same computer as the SS7 stack.
Figure 3-1
Local SS7 Stack Access - Architecture
In distributed platforms the user applications run on a back-end (BE)
computer and the SS7 platform runs on the front-end (FE) computer.
Applications on the BEs access the SS7 network via the
HP OpenCall SS7 stack(s) located at the FE(s).
66
Chapter 3
General API Guidelines
Accessing the SS7 Stack
Figure 3-2
Chapter 3
Remote HP OpenCall SS7 Stack Access: Distributed Platform
67
General API Guidelines
Accessing the SS7 Stack
Remote SS7 access enables all computers to be sized to the needs of the
applications. It also eases application maintenance, since bringing down
one BE for an application upgrade does not affect network service for the
remaining applications. Applications that run on development platforms
also run without code modification on distributed platforms.
Interaction of Multiple APIs
An application can interface with a single API or use multiple APIs. Any
API combination is possible, but the guidelines on scheduling must be
observed. See “Scheduling SS7 Connections” on page 72.
68
Chapter 3
General API Guidelines
Designing for Threads
Designing for Threads
HP-UX
The HP OpenCall SS7 APIs over HP-UX are Posix.1c Thread-Restricted
level B. This means that the interface is not thread-safe, but that it can
be used by any single “dedicated” thread of a multi-threaded application.
Every other HP-UX API that is Thread-Restricted Level B must be called
from the application thread where HP OpenCall SS7 APIs are called.
HP OpenCall SS7 APIs are not cancel-safe or async-cancel safe. See the
HP-UX user manuals for more information about Posix.1c threads.
Using HP OpenCall SS7 Libraries with Kernel
Threads
To use the HP OpenCall SS7 APIs with kernel threads, you must change
the value of the stacksize parameter to hexadecimal 0x100000. You must
do this before creating any threads.
You can change the value of the stacksize parameter using Pthread
library functions as shown in the following example:
/* Change the stack size of the OpenCall kernel thread */
pthread_attr_init(&thread_attr);
stacksize= 0x100000;
pthread_attr_setstacksize(&thread_attr,stacksize);
printf("StackSize (new) = 0x%x %d \n", stacksize, stacksize);
For more details, see the HP-UX reference documentation.
Chapter 3
69
General API Guidelines
Using HP OpenCall SS7 with 64-bit HP-UX
Using HP OpenCall SS7 with 64-bit HP-UX
A list of libraries for developing C or C++ applications on 64-bit HP-UX is
provided in the Release Notes.
For more information on developing and compiling 64-bit applications,
refer to the cc and aCC man pages
The extended TCAP API, described in Chapter 6, Using the TCAP API, is
the only TCAP API supported with 64-bit HP-UX.
Stack connections for MTP and SCCP must always be created using the
SS7_xifcreate() command when using 64-bit HP-UX. The command
SS7_ifcreate() is not supported with 64-bit HP-UX.
70
Chapter 3
General API Guidelines
SS7 Connections
SS7 Connections
Whether the application is remote or local to the HP OpenCall SS7
Stack, it communicates with the SS7 stack via connections. These
connections represent service access points.
Creating SS7 Stack Connections
Before you can exchange data with the SS7 network, the application
must request a connection to be created between the application and an
HP OpenCall SS7 stack. This connection should be tested by the
application. In case of a receive failure, the application must close the
connection to release all associated resources. After the connection is
closed, the application can reconnect.
NOTE
Unclosed connections can consume a significant amount of API
resources. It is important for the application to close failed connections.
className
In an HA configuration, a connection automatically connects the
application to the active SS7 stack known using the generic stack name,
className. In the case of stack failure, traffic is redirected from the
failed stack to the standby stack.
Connection
Identifier
When an HP OpenCall SS7 API has created a connection between the
application and an SS7 stack, a connection identifier is returned. This
identifier must be used by the application for all subsequent operations
regarding this connection.
Chapter 3
71
General API Guidelines
Scheduling SS7 Connections
Scheduling SS7 Connections
Communication is achieved by the asynchronous services offered by an
API. When the application requests an API to exchange signaling
information via a connection, control is returned to the application until
the API returns a response to the request.
Application scheduling must only be done in one application main loop,
with only one select call in the loop. Each select call loop should take a
maximum of 500 milliseconds to process.
Scheduling Phases
These asynchronous services of the API are based on the
HP OpenCall SS7 scheduling mechanism. This mechanism is based on
select(), a system call which allows I/O multiplexing. It contains three
phases:
•
Pre-select
•
select()
•
Post-select
These phases must be taken as a block. Keep them together when
writing the application.
Pre-select Phase
This first phase is used to set up necessary values according to API
requirements before the select() call, using SS7_ifselectmask() for
MTP, SCCP and OA&M API calls, and TCX_select_mask() for TCAP
API calls.
Sockets
The HP OpenCall SS7 APIs depend on inter-process communication
(IPC) to communicate with the SS7 stack processes.
HP OpenCall SS7 uses the Berkeley socket mechanism to exchange
signaling information between the application and the HP OpenCall SS7
stack.
The API uses file descriptors to access these sockets.
72
Chapter 3
General API Guidelines
Scheduling SS7 Connections
Masks
Because file descriptors can also be used by the application, you must
provide the API with three file descriptor masks known as the read,
write and exception bit masks. Reset all the masks before they are used
by the application.
These bit masks can be set to include the file descriptors used by the
application. Using a preselect function, the SS7 API sets the read, write
and exception masks to include the file descriptors managed by the API.
The resulting masks are passed to select().
Timeout Value
select() also uses a shared timeout value. This value is the maximum
length of time that a process is allowed to block during a select() if
there is no I/0 activity.
In the pre-select phase the application must determine a timeout value
and submit it to the preselect function. The API assesses its own
requirements and may decrease this value to a minimal value such as
500 ms. Because of this make sure to initialize the select() timeout just
before the call.
Function
The pre-select function is mandatory and only modifies the timeout value
and bits set by the API in the file descriptor masks, leaving those file
descriptors managed by the application untouched.
select()
This second phase is the basis of the scheduling mechanism.
select() examines the file descriptors specified in the read, write and
exception bit masks. When select() is successful, it modifies and
returns these bit masks. The respective masks indicate if there is
information waiting to be sent (written) or received (read).
See the select() man page for details.
Chapter 3
73
General API Guidelines
Scheduling SS7 Connections
Post-select
This third phase analyzes the results of select(), and triggers the
necessary processing of the file descriptor bit masks. The API also
processes the pending requests to receive and send information via the
active connections (file descriptors).
During this phase the application can process the bits used by the file
descriptors.
Function
The post-select function manages any information waiting to be
exchanged and the internal HA mechanisms. It notifies the application
about all the active connections.
Scheduling Loop
For HP OpenCall SS7 to maintain the multiple IPC connections to the
HP OpenCall SS7 stack(s), the application must be structured around
the three scheduling phases.
You must do this by using an endless select() loop:
while(1){
// pre-select
// select()
// post-select
}
You must always include these three phases, even if you do not want to
receive information from a connection. Certain internal API mechanisms
require I/O processing without interaction with the application.
Scheduling
Multiple APIs
When you are using multiple APIs in the application, you must only have
one scheduling loop:
while(1){
// pre-select for each API you use
// select()
// post-select for each API you use
}
You must set up the pre-select phase for each API involved. Only a single
select() can appear in the application. When select() has
successfully returned, you must complete the post-scheduling phase for
each API involved.
74
Chapter 3
General API Guidelines
Exchanging Signaling Information via an API
Exchanging Signaling Information via an API
Through its service access points, HP OpenCall SS7 processes the
requests received from an API to exchange signaling information with a
peer application. The application is expected to send and receive
signaling information via opened and scheduled stack connections using
the respective functions provided by the SS7 stack APIs.
Receiving Signaling Information
Only when the three scheduling phases are completed can the
application request an API to receive signaling information on its behalf.
This is necessary because the active stack connections and internal
timers must be serviced.
The receive functions provided by HP OpenCall SS7 are non-blocking,
and must be repeatedly called until there is no more information to be
received for the particular connection.
A receive function returns a primitive, its associated signaling data or
message and the number of messages waiting to be received. For
example, if the application wants to receive the information from MTP3,
you must ensure that the application calls the receive function provided
by the MTP3 API.
Sending Signaling Information
Once scheduling is completed, the application can request the API to
send signaling information on its behalf. Each of the HP OpenCall SS7
send functions are non-blocking.
All messages and primitives are sent with respect to a connection.
Chapter 3
75
General API Guidelines
Closing SS7 Stack Connections
Closing SS7 Stack Connections
Close a connection only when you are certain that it will no longer be
used. Repeated creation and destruction of connections place a high
overhead on the API mechanism. Closing a connection does not stop the
application, it only closes a specific service access point between the
application and the SS7 stack. The close functions supported by the
MTP3, SCCP and TCAP APIs also close all entities that were used by the
connection.
Rescheduling
After a connection has been closed, you must reschedule the API and its
connections. This ensures that all the previous calls for the connection
are executed. After this, any further message exchange and OA&M
function calls for that connection are rejected.
76
Chapter 3
General API Guidelines
IPC Buffers
IPC Buffers
IPC buffers are used by the HP OpenCall SS7 APIs to communicate with
the HP OpenCall SS7 Stack.
All the messages that you send or receive from a connection are stored in
these internal buffers. You can decide whether messages are buffered
before being sent, or if they are automatically flushed to the stack each
time the application calls a send() function.
By default, HP OpenCall SS7 is set to non-buffering mode, flushing the
internal buffers each time a send() is called.
Figure 3-3
IPC Buffers
NOTE
When an IPC send buffer is full, it is automatically flushed.
Chapter 3
77
General API Guidelines
IPC Buffers
Tuning IPC Buffers
Changing the size of the IPC buffers can optimize the performance of a
stack connection because it concatenates the messages contained in the
buffer and so reduces the number of IPC calls between processes.
You must consider the requirements of the application because
increasing throughput will also increase latency.
Buffering Modes
The HP OpenCall SS7 APIs support two modes of buffering:
•
Non-buffering mode
In this default mode, the send buffer is automatically flushed each
time the API is requested to send messages on behalf of the
application
•
Buffering mode
This buffering mode allows the application to manually flush the
send buffer. Flushing of the buffer can be dependent on whether the
send buffer is full or the transit time of the oldest message in the
buffer has exceeded the maximum transit time.
Transit Time
The application can set the maximum time for which messages can be
stored in the API buffer before they are sent. This is known as transit
time. Each SS7 stack API allows the application to set the transit time
for connections with low and high traffic.
Buffer Sizes
Internal buffer size is defined by the variable FT_BSize in the file
global.conf. The default value is 64 Kbytes. This value cannot be
changed while the stack is running.
IPC buffers can be increased from the default value of 8 Kb. The
application can only increase their size to the maximum of 64 Kbytes.
These buffers can be sized dynamically by the application by using either
SS7_ifctrl() for the MTP, SCCP and OA&M APIs or TCX_control()
for the TCAP API.
For details about the specific IPC functions, see the following API
chapters.
78
Chapter 3
General API Guidelines
IPC Flow Control
IPC Flow Control
Using back-pressure, HP OpenCall SS7 provides both inbound and
outbound flow control. Inbound flow control is necessary when the
application cannot receive all the pending indications in the inbound
queue. Outbound flow control becomes necessary when the requests are
blocked at the API.
Figure 3-4
Chapter 3
Back-pressure
79
General API Guidelines
IPC Flow Control
Inbound Path
The application receives single indications from an HP OpenCall SS7
API, even if multiple indications have been generated after the
occurrence of a protocol event. A protocol event is a primitive received
from the application or from the stack, or simply a timeout.
Indications waiting to be received by the application are maintained by
the HP OpenCall SS7 APIs in an inbound queue.
Waiting
Indications
As described in “Receiving Signaling Information” on page 75, the
number of messages waiting to be received are returned to the
application. The application must receive all these waiting indications.
TCP Network
Back-pressure
If the application does not receive all the pending indications,
HP OpenCall SS7 will force back pressure on the LAN and as a
consequence on the stack. When a certain period of time elapses, the SS7
stack will delete all the new messages that were not received by the
application.
Outbound Path
When a protocol event occurs, HP OpenCall SS7 may generate one or
more SS7 messages destined for the network. These messages are placed
in the outbound queue. Once all HP OpenCall SS7 processing is
completed, the queued messages are sent to the network.
Remaining
Messages
If HP OpenCall SS7 has successfully sent all the queued messages, the
outbound queue is empty. Otherwise it contains messages that it could
not send.
Application
Back-pressure
The number of remaining messages is used by HP OpenCall SS7 to
accept or reject the service primitives issued by the application. The
application is notified by the API of this situation.
80
Chapter 3
General API Guidelines
Visibility of a Switchover at Each Level
Visibility of a Switchover at Each Level
This section describes the visibility of a switchover to an application at
each stack level.
Note that the platform can be configured either in Parallel Engine mode
(Active/Active) or in compatible mode (Active/Hot-Standby) and this may
have an effect on the behavior during a switchover.
TCAP API
Failure of one of the active SS7 stacks is transparent to the application
since the remaining active stacks handle the new incoming and outgoing
messages.
This behavior is independent of whether the platform is in Parallel
Engine mode (Active/Active) or compatible mode (Active/Hot-Standby). It
is also independent of whether the level 3 is MTP3 or M3UA.
If one of the active SS7 Stacks handling the traffic fails, all the TCAP
transactions currently being handled by this stack are aborted, and the
TCAP users are notified through a TC_P_ABORT primitive for each
transaction lost. The TCAP user must reset its local timers and
state-machines.
SCCP API
If the application calls the API during a switchover it receives an
API_BUSY message.
The application should continue to process normally (by calling the
post-select handler function).
This behavior is independent of whether the platform is in Parallel
Engine mode (Active/Active) or compatible mode (Active/Hot-Standby). It
is also independent of whether the level 3 is MTP3 or M3UA.
Chapter 3
81
General API Guidelines
Visibility of a Switchover at Each Level
MTP3, ISUP, and TUP APIs
On Top of an MTP3 Level 3
If the application calls the API during a switchover it receives an
API_BUSY message.
The application should continue to process normally (by calling the
post-select handler function).
This behavior is independent of whether the platform is in Parallel
Engine mode (Active/Active) or compatible mode (Active/Hot-Standby).
For ISUP and TUP, if one of the active SS7 Stacks handling the traffic
fails, all the call setups being handled by this stack are aborted.
On Top of an M3UA Level 3
Failure of one of the active SS7 stacks is transparent to the user since
the remaining active stacks handle the new incoming and outgoing
messages.
This behavior is independent of whether the platform is in Parallel
Engine mode (Active/Active) or compatible mode (Active/Hot-Standby).
82
Chapter 3
General API Guidelines
Examining Error Codes
Examining Error Codes
All the functions provided by the HP OpenCall SS7 APIs return a value.
The application must check this returned value.
In the following chapters, the return values for the supported
HP OpenCall SS7 functions are described in detail.
Chapter 3
83
General API Guidelines
Examining Error Codes
84
Chapter 3
4
Using the Level 3 (MTP3/M3UA)
API
This chapter describes the Level 3 (MTP3/M3UA) API.
Chapter 4
85
Using the Level 3 (MTP3/M3UA) API
General Description of the Level 3 (MTP3/M3UA) API
General Description of the Level 3
(MTP3/M3UA) API
This API provides the functions that the application can use to exchange
signaling information with the SS7 stack.
The guidelines given in this chapter will ensure that the application
correctly uses the services of the Level 3 (MTP3/M3UA) API.
The same API is used for both MTP3 and M3UA. Consequently, the API
behavior is the same whether the level 3 layer is MTP3 or M3UA.
In this guide, this Level 3 API is referred to as the MTP3 API.
As the basis of SS7, MTP provides its applications (such as SCCP, TUP
and ISUP) with reliable transfer of messages between signaling points,
and error correction and detection. MTP provides all the functions of
layers one, two and three in the OSI model. These functions can be
categorized according to MTP levels.
MTP Level 1
This level supports the physical transfer of signaling information over
the SS7 network.
MTP Level 2
Level 2 provides the functions and procedures for the error detection and
correction of signaling information between two signaling points. This
level is maintained at the signaling link level.
MTP Level 3
This level provides signaling functions to SS7 Level 4. These functions
include signaling message handling and signaling network management.
86
Chapter 4
Using the Level 3 (MTP3/M3UA) API
General Description of the Level 3 (MTP3/M3UA) API
MTP3 User Adaptation (M3UA) Layer
HP OpenCall SS7 uses the services of M3UA on top of SCTP to exchange
signaling messages over IP networks (a SIGTRAN platform). The
connection to the IP network is provided by LAN cards accommodated in
the host server(s) of the platform. No special signaling hardware is
required.
HP OpenCall SS7 uses M3UA to transfer MTP3 signaling information
between the upper layers of the protocol stack (SCCP, ISUP, and TUP)
and remote network entities via SCTP services. Since M3UA and MTP3
provide identical interfaces (Service Access Points) to the upper stack
layers, it is transparent to these upper layers whether M3UA or MTP3 is
being used.
Stream Control Transport Protocol (SCTP) Layer
SCTP interacts directly with the Internet Protocol (IP) to connect
entities in an IP network, in the same way as TCP. SCTP also provides
the following facilities:
Chapter 4
•
Multi-homing which provides the high availability of IP connectivity.
An SCTP end-point supports multiple IP addresses, allowing an
alternative address to be used if the main one becomes unavailable.
This improves the tolerance of an SCTP connection to network faults.
•
Multi-streaming which allows an SCTP connection that contains
several independent parallel streams. A failure in one stream does
not affect message delivery in the other streams.
•
Order-of-arrival option for the delivery of individual user messages
within the streams.
•
Acknowledged, error-free, non-duplicated transfers of user data.
•
Data fragmentation to conform with MTU size.
•
Optional bundling of multiple user messages into a single SCTP
packet.
•
Cookie mechanism during initialization to protect against security
attacks.
87
Using the Level 3 (MTP3/M3UA) API
General Description of the Level 3 (MTP3/M3UA) API
Figure 4-1
MTP Levels and Functions
User application
TCAP
API
ISUP
& TUP
APIs
SCCP
API
MTP3/
M3UA
API
AG API
OA & M
APIs
TCAP
SCCP
MTP level 3
M3UA
Signaling Network Functions
Signaling Message Handling
SCTP
Signaling Network
Management
IP
MTP level 2
MTP level 1
88
Chapter 4
Using the Level 3 (MTP3/M3UA) API
Features of MTP3
Features of MTP3
HP OpenCall SS7 MTP3 provides the standard MTP protocol with the
following functionality.
Message Handling
The processing of MTP3 transfer requests and indications is handled as
described in ITU-T Q.703 and ANSI T1.111.1. The functions that support
this Message Signaling Unit (MSU) processing include:
•
MSU discrimination functions
•
MSU distribution functions
•
MSU routing functions
Multiple Application Connections
MTP3 can accept multiple connections on the same user part (ISUP,
SCCP or others). You can therefore build software redundancy into the
system. One connection is active and handles the traffic, the other
connection(s) are secondary and do not handle traffic. You can only have
one primary connection per connection identifier, whereas you may have
several secondary connections. You can set it so that the standby
connections take over the primary connection. See the cnx_info
parameter of the call “Creating MTP3 Stack Connections with
SS7_xifcreate()” on page 93 for more information.
Network Management
The HP OpenCall SS7 signaling network management provides
procedures and functions required to maintain signaling services, and to
restore normal signaling conditions in the event of disruption in the
signaling network, either in signaling links or at signaling points.
These management functions include:
Chapter 4
•
Route management
•
Loadsharing using the SLS value of an MSU
89
Using the Level 3 (MTP3/M3UA) API
Features of MTP3
Traffic Management
In the case of congestion, HP OpenCall SS7 MTP3 uses signaling traffic
management functions to divert traffic from signaling links or routes, or
to reduce the amount of traffic on signaling links.
Traffic management functions include:
•
Link availability and unavailability
•
Route availability and unavailability
•
signaling point availability
Link Management
Locally connected signaling links are controlled by the signaling link
management functions. These functions provide the possibility to
establish and maintain a certain predetermined capability of a linkset.
Thus, in the event of signaling link failures, the signaling link
management function controls the actions aimed at restoring the
capability of the linkset.
Link management functions include:
•
Link activation and deactivation
•
Link restoration
Route Management
The signaling route management functions ensure a reliable exchange of
information about the availability of signaling routes.
Combining Linksets
The HP OpenCall SS7 software can use combined linksets to share the
traffic load if failures occur (according to ANSI T1-111-4 1998). A
combined linkset is a set of linksets constituting routes of the same
priority leading to a given destination. When there are one or more
alternative signaling links available in the combined linkset to which the
unavailable link belongs, the signaling traffic is transferred within the
combined linkset.
90
Chapter 4
Using the Level 3 (MTP3/M3UA) API
How to Use the MTP3 API
How to Use the MTP3 API
Several steps are required when using the HP OpenCall SS7 MTP3
layer: open, schedule, receive, send, and close. This is briefly described
below and then the relevant sections for each action are referenced.
Creating MTP3 Stack Connections
First you must create an MTP3 stack connection using the
SS7_xifcreate() call. For new applications, and to be able to use
functionality such as segmentation and reassembly, use
SS7_xifcreate() and all other calls that include the “_x” in their name.
See “Creating MTP3 Stack Connections with SS7_xifcreate()” on
page 93.
Scheduling MTP3 Stack Connections
Secondly, you must schedule all the connections using the
HP OpenCall SS7 scheduling mechanism and the following function
calls:
•
SS7_ifselectmask()
•
select()
•
SS7_ifcnxhandler()
“Scheduling MTP3 Stack Connections” on page 95.
MTP3 Primitives
Once you have opened and scheduled the MTP3 connection, you must
use primitives and their respective parameters to communicate.
See “MTP3 Primitives” on page 98 for a list and explanation of all MTP3
primitives.
Chapter 4
91
Using the Level 3 (MTP3/M3UA) API
How to Use the MTP3 API
Receiving MSUs (Message Signaling Units)
The scheduling mechanism returns the number of stack connections
(num_cnxId) for which there are MSUs (message signaling units) waiting
to be received. An array containing the active connection identifiers is
also returned. These messages are stored by the MTP3 API in the receive
buffer, and must be received by the application using MTPL3_recv().
See “Receiving MSUs with MTPL3_recv()” on page 100.
Sending MSUs
MTPL3_send() sends MSUs to a remote destination.
See “Sending MSUs Using MTPL3_send” on page 102.
Closing MTP3 Stack Connections
Only close an MTP3 stack connection when you are certain that the
connection will not be used. Repeated opening and closing of a stack
connection places a high overhead on the MTP3 API mechanism.
See “Closing MTP3 Stack Connections with SS7_ifclose()” on page 104.
Compiling and Linking
The MTP3 API is available as a shared library. To know the compile and
link directives to use, refer to the MTP3/M3UA API tutorial (see
“MTP3/M3UA Tutorial Programs” on page 112).
92
Chapter 4
Using the Level 3 (MTP3/M3UA) API
Creating MTP3 Stack Connections with SS7_xifcreate()
Creating MTP3 Stack Connections with
SS7_xifcreate()
The MTP3 API creates stack connections on behalf of the application. Via
these stack connections, the application can request the services of MTP3
provided by HP OpenCall SS7. If successful, SS7_xifcreate() returns a
connection identifier (cnxId), which must be used in all subsequent API
calls concerning the connection.
NOTE
The correct function to call is SS7_xifcreate(). If the application uses
SS7_ifcreate(), you should replace it with SS7_xifcreate(). Only
SS7_xifcreate() supports 64-bit HP-UX and threads.
To enable multiple connections, you will also have to set some of the
following parameters using SAM:
Table 4-1
Multiple Connection Configuration
If you...
...then set the
parameter...
...to...
do not want this functionality
autoSwitch
NO (default)
want the secondary connection to become active if the
primary fails
want the primary connection to be closed when the
secondary connection becomes active
YES
closeOnEnable
want the primary connection to become standby when
the secondary connection becomes active
want to close the existing primary connection when a
new primary connection is created
want to make the existing primary connection
secondary when a new primary connection is created
Chapter 4
YES
NO (default)
closeOnCreate
YES
NO (default)
93
Using the Level 3 (MTP3/M3UA) API
Creating MTP3 Stack Connections with SS7_xifcreate()
NOTE
The parameters closeOnEnable, closeOnCreate, and autoSwitch can
be set for each layer and apply to the API that connects to that layer. For
example, setting closeOnCreate in SCCP means that applications
connecting directly to SCCP will be subject to closeOnCreate, while
applications connecting to MTP3/M3UA or TCAP will not be affected.
Only the values of the highest configured layer can be modified. This
means that when SCCP + TCAP have been configured, only the values
for TCAP can be modified, and those for MTP/M3UA and SCCP MUST
NOT be modified. If only SCCP has been configured as the upper layer,
the values for MTP/M3UA MUST NOT be modified.
NOTE
When a connection becomes secondary, MTPL3_recv() returns -1 with
ss7errno set to EAPIDISABLE even if the connection is closed afterwards.
For details about syntax, parameters, and return values, see the
SS7_xifcreate() man page.
Example 4-1
Creating an MTP3 Stack Connection
#include <failures.h>
#include <ss7_if.h>
int return_val;
int cnxId;
ss7_service_parms sceParms;
sceParms.SI = tup_user; // e.g., TUP, but can be any user
return_val = SS7_xifcreate (“SS7_Stack1”, ss7_mtp, &sceparms, &cnxId);
if (return_val ==-1){
/* enter error routines */
}
94
Chapter 4
Using the Level 3 (MTP3/M3UA) API
Scheduling MTP3 Stack Connections
Scheduling MTP3 Stack Connections
As described in “Scheduling SS7 Connections” on page 72 of Chapter 3,
you must schedule all the connections using the HP OpenCall SS7
scheduling mechanism. Scheduling the MTP3 stack connections is
achieved by:
•
SS7_ifselectmask()
•
select()
•
SS7_ifcnxhandler()
SS7_ifselectmask()
This pre-select function is used for all MTP3 stack connections. It takes
the file descriptor masks created by the application, and sets these
masks to include the file descriptors used by the API to manage the
MTP3 stack connections. The application must call this function before
calling select().
For details about syntax, parameters, and return values, see the
SS7_ifselectmask() man page.
select()
The select() function is used for all HP OpenCall SS7 scheduling. It
modifies the read, write and exception masks created by
SS7_ifselectmask() if the file descriptors change.
Chapter 4
95
Using the Level 3 (MTP3/M3UA) API
Scheduling MTP3 Stack Connections
SS7_ifcnxhandler()
The application must call this post-select function. SS7_ifcnxhandler()
requests the API to process the masks returned by select() and
manage the internal mechanisms. An array of stack connection
identifiers is used to identify the stack connections that have messages
waiting to be received by the application.
Activity on the connection is flagged when one of the following events
occurs.
•
A message is received by the SS7 stack.
•
A closed connection is found (a send or receive call returns an error).
The application should call the close function to deallocate API
resources.
•
A connection goes from busy state (API_BUSY) to normal state. The
application can resume processing (send and receive calls no longer
return an error).
For details about syntax, parameters, and return values, see the
SS7_ifcnxhandler() man page.
Example 4-2
Scheduling MTP3 Stack Connections
int
nfound;
/* select result */
int
num_cnx;
int
numFd;
int
cnx_active[MAX_FD];
fd_set
readMask;
/* mask for select */
fd_set
writeMask;
/* mask for select */
fd_set
exceptionMask /*mask for select*/
struct timeval
tmout, * time = &tmout;
ss7_service_parms sceparms;
sceparms . SI = SI_VALUE;
/* service parameters */
/* Zero select bit masks before entering loop */
FD_ZERO(&readMask);
FD_ZERO(&writeMask);
FD_ZERO(&exceptionMask);
/* compute the mask for select operation on service
* descriptor, set the timeout value to 200 micoseconds,
* and wait for messages from the connection
*/
tmout.tv_sec = 0;
tmout.tv_usec = 200;
96
Chapter 4
Using the Level 3 (MTP3/M3UA) API
Scheduling MTP3 Stack Connections
/* Must set this each time round loop as selectmask call may change the
/* pointer time = &tmout;
/* Note: As we have no other fd’s open, the initial max fd (1st param)
* is 0. Also, we don’t use the exeception mask, so we pass 0.
* Note too that last param is a struct timeval **.
*/
numFd = SS7_ifselectmask(0, &readMask, &writeMask, &exceptionMask, &time);
nfound = select(numFd, (int *)&readMask, (int *)&writeMask, &exceptionMask, time);
/* Note: ALWAYS call the cnxhandler function after select(2),
* even if select returns an error (-1). This is to allow the API
* lib to clear any socket errors.
*/
num_cnx = MAX_FD;
/* initial size of cnx_active array */
SS7_ifcnxhandler(nfound, &readMask, &writeMask, &exceptionMask, &num_cnx, cnx_active);
/* check if the select was triggered by
the port of the scedesc file descriptor,
* and receive messages
*/
if( (num_cnx > 0) && ( cnx_active[0] == cnxId) )
// call receive function;
Chapter 4
97
Using the Level 3 (MTP3/M3UA) API
MTP3 Primitives
MTP3 Primitives
A dialog between different layers is performed by primitives, which are
abstract elementary functions used to exchange information. There are
two categories of MTP3 primitives:
Request:
mtp_transfer_req
To send messages.
Indication:
mtp_transfer_ind
To receive messages.
mtp_status_ind
To inform the application
about the status of the local or
remote MTP3.
mtp_pause_ind
To inform the application that
a particular destination is
temporarily unavailable.
mtp_resume_ind
To inform the application that
a particular destination is
available again.
Thus, the application exchanges messages and status information with
MTP3.
98
Chapter 4
Using the Level 3 (MTP3/M3UA) API
MTP3 Primitives
Figure 4-2
Chapter 4
MTP3 Primitives
99
Using the Level 3 (MTP3/M3UA) API
Receiving MSUs with MTPL3_recv()
Receiving MSUs with MTPL3_recv()
The HP OpenCall SS7 MTP3 scheduling mechanism returns the number
of stack connections for which messages have been received (num_cnxId),
and provides an array of their connection ids (cnx_active). These
messages are stored by the API in the receive buffer, and must be
received by the application using MTPL3_recv().
For details about syntax, parameters, and return values, see the
MTPL3_recv() man page.
Example 4-3
Receiving Messages from the MTP3 API
int
dpc;
/* destination point code */
inunsigned char
sio;
/* Service Information Octet */
int
sls;
/* signaling link selection */
int
datalen;
/* data length */
int
cnxId;
mtp_primit
primitive;
/* MTP primitive indication */
char
data [100];
char
username [50];
/* user name found in directory*/
int
result;
/* receive all messages available on IPC port */
while(MTPL3_recv(cnxId, NULL, &opc, &dpc, &sls, &sio, &primitive, &datalen, data)
> 0)
{
switch (primitive) {
case mtp_transfer_ind:
/* extract phone number and search username in directory
* send back the user name */
break;
case mtp_status_ind:
{
mtp_status_cause cause;
memcpy (&cause, data, sizeof(mtp_status_cause));
switch (cause) {
case dpc_congested:
printf (“DPC congestion %d\n”, dpc);
break;
case dpc_uncongested:
printf (“DPC congestion end %d\n”, dpc);
break;
case mtp_available:
printf (“MTP available\n”);
100
Chapter 4
Using the Level 3 (MTP3/M3UA) API
Receiving MSUs with MTPL3_recv()
break;
case mtp_unavailable:
printf (“MTP failed\n”);
break;
case mtp_restarting:
printf (“MTP restarting\n”);
break;
case mtp_congested:
printf (“MTP congested\n”);
break;
case upu_unavailable:
printf (“MTP upu unavailable\n”);
break;
default:
printf (“Unknown mtp_status indication %d\n”, cause);
break;
}
}
break;
case mtp_pause_ind:
printf (“MTP_PAUSE on %d\n”, dpc);
break;
case mtp_resume_ind:
printf (“MTP_RESUME on %d\n”,dpc);
break;
default:
printf(“Unknown MTP primitive %d\n”,primitive);
break;
}
Chapter 4
101
Using the Level 3 (MTP3/M3UA) API
Sending MSUs Using MTPL3_send
Sending MSUs Using MTPL3_send
To send MSUs using the MTP3 API, the application must provide the
SIO (Service Indicator Octet) and the SIF (signaling Information Field)
for the MSU. You can use MTPL3_send() to send MSUs via stack
connections (cnxIds) when they have been scheduled and the IPC send
buffer is not full.
Message Size Limits
MTP-Based Platform
In the case of an MTP-based platform, if the application sends messages
to MTP3 that are greater than 268 Bytes for ITU-T and 265 Bytes for
ANSI, the HP OpenCall SS7 stack will log an error and discard the
message.
M3UA-Based Platform
In the case of an M3UA-based platform, the message size limit is 4096
bytes for all flavors.
M3UA-Based Platform Using MTP-as-Backup
In the case of an M3UA-based platform using MTP-as-backup, the
message size limits are the same as those for an MTP-based platform.
MTPL3_send Command
For details about syntax, parameters, and return values, see the
MTPL3_send() man page.
Example 4-4
Sending MSUs via MTP3 API
fd_set writeMask, readMask, exceptionMask;
/* mask for select */
int
numFd,nFound;
int
cnxId, num_cnx, cnx_active[MAX_FD];
struct timeval
timeout = {1,0};
struct timeval
*timeptr, ctime;
int
phone_number;
char
* phoneNumberPtr;
int
SIO=0xa3
/*message priority=2, NI=2 MTP
user part=SCCP*/
102
Chapter 4
Using the Level 3 (MTP3/M3UA) API
Sending MSUs Using MTPL3_send
while (server_available && (pending_requests < MAX_PENDING_REQUESTS))
{
phone_number = (rand () % 10) + PHONEOFFSET;
phoneNumberPtr = (char *)&phone_number;
printf (“Client ask for phone number id = %d\n”,phone_number);
FD_ZERO(&writeMask);
FD_ZERO(&readMask);
FD_ZERO(&exceptionMask)
while ( MTPL3_send(cnxId, NULL, -1, DPC, rand()%16, SIO, 0,
mtp_transfer_req, 4, phoneNumberPtr) == -1)
{
if ((ss7errno == EAPISENDFULL) || (ss7errno == EAPIBUSY)) {
/* LAN congestion: wait and retry later */
/* A real application would go back to the main loop */
/* and keep scheduling the whole application not just */
/* the SS7 connections. In this example, we stay in
*/
/* a local loop until the SS7 connection to MTP is */
/* un-flowcontrolled */
gettimeofday(&ctime,0);
printf(“In the local loop - Time: sec(%d),usec(%d) \n”,
ctime.tv_sec, ctime.tv_usec);
timeptr = &timeout;
numFd = SS7_ifselectmask(0, &readMask, &writeMask, &exceptionMask, &timeptr);
select(numFd,(int *)&readMask, (int *)&writeMask,
(int*)&exceptionMask;
NULL,timeptr);
/* When exiting the select either the timer pointed by */
/* the pointer timeptr has expired,
*/
/* or data is received on the SS7 connection to MTP, */
/* or the SS7 connection to MTP is un-flowcontrolled */
SS7_ifcnxhandler(nFound, &readMask, &writeMask,
&exceptionMask, &num_cnx,
cnx_active);
}
else
EXIT ((“mtpsend failed error number %d\n”, ss7errno));
}
}
Chapter 4
103
Using the Level 3 (MTP3/M3UA) API
Closing MTP3 Stack Connections with SS7_ifclose()
Closing MTP3 Stack Connections with
SS7_ifclose()
You must only close an MTP3 connection when you are certain that the
connection will not be used. Repeated opening and closing of a stack
connection places a high overhead on the MTP3 API mechanism.
An MTP3 service is terminated when the application closes a stack
connection using SS7_ifclose(). All the entities used by the connection
are also closed, and any calls to MTPL3_send() or MTPL3_recv() are
refused.
For details about syntax, parameters, and return values, see the
SS7_ifclose() man page.
104
Chapter 4
Using the Level 3 (MTP3/M3UA) API
Tuning MTP3 IPC Buffers with SS7_ifctrl()
Tuning MTP3 IPC Buffers with SS7_ifctrl()
As described in “Tuning IPC Buffers”, the application may need to alter
the default values of the IPC send and receive buffers. The application
can use SS7_ifctrl() to customize these IPC buffer attributes for each
stack connection.
For details about syntax, parameters, and return values, see the
SS7_ifctrl() man page.
Chapter 4
105
Using the Level 3 (MTP3/M3UA) API
MTP3 API Behavior
MTP3 API Behavior
The following sections illustrate how in certain situations the MTP3 API
and library react with respect to the application.
Sending MSUs
When the application issues an mtp_transfer_request primitive, the
message handling functions of MTP3 ensure that the MSU is delivered
to the correct User Part or peer application. These functions are based on
the routing label (DPC, OPC and SLS) contained in the MSU, and the
loadsharing and route management mechanisms of HP OpenCall SS7.
Figure 4-3
106
Sending an MSU
Chapter 4
Using the Level 3 (MTP3/M3UA) API
MTP3 API Behavior
Receiving MSUs
The MTP3 message handling functions ensure that any signaling
messages received from the signaling network are delivered to the
correct User Part or application.
When a message arrives, the message discrimination functions are
activated to determine if the received message is for this
HP OpenCall SS7 Platform. That is, if the DPC encoded in the routing
label is the LPC, one of its local aliases, or one of its VPCs, it accepts the
message. If a local alias is encoded in the DPC field of the routing label of
an incoming MSU, MTP replaces it with the LPC before notifying the
upper layer. Then the message distribution functions examine the SI to
deliver it to the destined User Part (application).
An mtp_transfer_ind primitive is issued to inform the application that
an MSU destined for the application has been received.
Figure 4-4
Chapter 4
Receiving an MSU
107
Using the Level 3 (MTP3/M3UA) API
MTP3 API Behavior
DPC Unavailable
When a DPC becomes unavailable because of a network event, the API
informs the application that the affected DPC is unavailable via the
mtp_pause_ind primitive.
Figure 4-5
Receiving an mtp_pause_ind Primitive
If the application attempts to send an MSU to the affected DPC, it will
result in the error code EAPIILLVALUE.
108
Chapter 4
Using the Level 3 (MTP3/M3UA) API
MTP3 API Behavior
DPC Available
When a DPC becomes available because of a network event, the API
informs the application that the previously unavailable DPC is available
via the mtp_resume_ind primitive.
Figure 4-6
Receiving an mtp_resume_ind Primitive
At this point the application can continue sending MSUs to the DPC.
Chapter 4
109
Using the Level 3 (MTP3/M3UA) API
MTP3 API Behavior
DPC Congestion
When a DPC is congested, the API informs the application that the
affected DPC is congested via the mtp_status[dpc_congested]
primitive.
Figure 4-7
Receiving mtp_status_ind[dpc_congested] Primitive
DPC Uncongested
When the affected DPC is uncongested, the application is notified by an
mtp_status_ind[dpc_uncongested] primitive, allowing the application
to continue sending MSUs to the DPC.
Figure 4-8
110
Receiving mtp_status_ind[dpc_uncongested] Primitive
Chapter 4
Using the Level 3 (MTP3/M3UA) API
MTP3 API Behavior
Local MTP3 Unavailable
When all the local signaling links from the HP OpenCall SS7 platform
are unavailable due to failure, blocking, inhibiting, or deactivation of
MTP3, the application cannot use the services of MTP3.
In this situation the MTP3 API issues an
mtp_status[mtp_unavailable] primitive to the application. If the
application attempts to send MSUs to any DPC, the API will respond
with the error EAPIILLVALUE.
Local MTP3 Restart
When the local MTP3 is unavailable due to global signaling link
unavailability, the signaling network functions initiates the restart
procedure. The API informs the application about the restart with an
mtp_status[mtp_restart] primitive.
MTP3 starts activating its signaling links.
ANSI and ITU-T
Modes
If any DPCs become unavailable or available during the restart
procedure, the application is notified with the mtp_pause and
mtp_resume primitives.
The mtp_status[available] primitive is issued to the application when
this procedure is finished, and the signaling links are available again.
TTC Mode
In TTC mode, the behavior during the restart procedure is different from
ANSI and ITU-T modes. DPCs that become available during the restart
procedure are not notified explicitly through the mtp_pause and
mtp_resume primitives. Instead, notification is done implicitly through
the subsequent mtp_status[available] primitive.
All requests from the application to send MSUs during the restart
procedure are refused with the error EAPIBUSY.
Chapter 4
111
Using the Level 3 (MTP3/M3UA) API
MTP3/M3UA Tutorial Programs
MTP3/M3UA Tutorial Programs
Two tutorials (that is, example programs) named MtpClient and
MtpServer are provided with HP OpenCall SS7.
The source code of these tutorials is in the /opt/OC/tutorials/SS7
directory.
CAUTION
If you want to change a makefile or a tutorial supplied with
HP OpenCall SS7, you must first copy it to your own working directory.
You must not change the sources supplied with the HP OpenCall SS7
product in the directories in which they are delivered.
Before compiling, you must configure some parameters according to your
configuration. In particular, you have to use:
#define SIO
to define your service information octet according the values configured
in your network.
Then, you must compile the two programs using the command cc_mtp.
This compiles both programs at the same time.
Finally, you must run both programs at the same time on two separate
SS7 stacks.
MtpClient.c
The client process emulates a database request generator. It generates a
random phone number and sends an SS7 message. This process then
receives an SS7 message containing a phone number resolved with a
user name from the server process MtpServer.
This program also manages the primary/secondary connection feature:
112
•
primary connection (-m primary) that handles traffic.
•
secondary connection (-m secondary) that does not handle traffic.
This can be switched to primary using a kill -s SIGUSR1
processId command. The primary connection is then deactivated
and becomes secondary.
Chapter 4
Using the Level 3 (MTP3/M3UA) API
MTP3/M3UA Tutorial Programs
MtpServer.c
This program is the server process. It receives requests for phone
number resolution from the client MtpClient, and finds in its directory
list a user name associated with the phone number. Then an SS7
message is returned to the client with a phone number and its associated
user name.
To run this program, you must provide an SS7 classname.
This program also manages the primary/secondary connection feature:
Chapter 4
•
primary connection (-m primary) that handles traffic
•
secondary connection (-m secondary) that does not handle traffic.
This can be switched to primary using a kill -s SIGUSR1
processId command. The primary connection is then deactivated
and becomes secondary.
113
Using the Level 3 (MTP3/M3UA) API
MTP3/M3UA Tutorial Programs
114
Chapter 4
5
Using the SCCP API
This chapter describes the SCCP API and the functions that the
application can use to exchange signaling information with the SS7
stack. The guidelines given in this chapter will ensure that the
application correctly communicates with the SCCP API.
Chapter 5
115
Using the SCCP API
General Description of SCCP
General Description of SCCP
With MTP, SCCP provides its users or subsystems with the SS7 Network
Service Part (NSP) which is equivalent to OSI layers 1 to 3. The SCCP
services include end-to-end routing.
SCCP Routing
SCCP provides a routing function which allows signaling messages to be
routed to a signaling point based on a Global Title. This involves a
translation function which allows the Global Title to be translated into a
signaling point code and a subsystem number.
Preferred/Next
Preferred and
Primary/
Secondary
HP OpenCall SS7 complies to the ANSI standard for the Preferred/Next
Preferred functionality, as described in GR-82-CORE, Issue 1, June 1994,
Revision 3, December 1995, paragraph 4.3.3.1 in the SCCP Management
Procedures. This functionality is also closely related to the
Primary/Secondary functionality as described in ITU-T 96. It allows a
priority table on global title translations. If the DPC on a translation is
no longer preferred (for example, is not responding), the global title will
be translated to the next preferred DPC. See the section on configuring
SCCP in the HP OpenCall SS7 Operations Guide for more information.
SCCP Subsystem Management
SCCP also provides a management function to control the availability of
the subsystems, and broadcasts this information to other nodes in the
network that need to know the status of the subsystem.
116
Chapter 5
Using the SCCP API
General Description of SCCP
Figure 5-1
SCCP in the SS7 Stack
User application
TCAP
API
ISUP
& TUP
APIs
SCCP
API
MTP3/
M3UA
API
AG API
OA & M
APIs
TCAP
SCCP
End-to-end Routing
Functions
Chapter 5
MTP level 3
M3UA
MTP level 2
SCTP
MTP level 1
IP
117
Using the SCCP API
Features of the SCCP
Features of the SCCP
The SS7 Stack provides the services of SCCP to applications or
subsystems requiring enhanced transport services. The
HP OpenCall SS7 SCCP supports both connectionless services and
connection oriented services, as described below (note that these services
have some features in common, described in “Common Features” on
page 126).
Connectionless Services
HP OpenCall SS7 provides the capabilities that are necessary to transfer
user-to-user information blocks (Network Service Data Unit - NSDU)
without using logical signaling connections. These NSDUs can be
transferred either non-sequentially or sequentially.
•
Class 0 - Non-sequential data transfer.
•
Class 1 - Sequential data transfer.
The following features are supported for connectionless services.
Multiple Application Connections
SCCP can accept multiple connections on the same SSN. One connection
is active and handles the traffic. One or several secondary standby
connections can be made that can be set to take over the active
connection. A standby connection cannot accept traffic until it becomes
primary. You can only have one primary connection per connection
identifier. It describes the parameters you must set to use this
functionality.
Return Option
This feature determines how messages that encounter transport
problems are handled. With this option the message can be discarded, or
returned to the originating subsystem if the Calling Party Address is
provided in the message. For a segmented message, only the first
segment is returned.
118
Chapter 5
Using the SCCP API
Features of the SCCP
SCCP Addressing Components
The HP OpenCall SS7 SCCP routing functions are based on the
information provided in the Called Party Address parameter. There are
four basic components of an SCCP address:
•
Global Title
•
DPC
•
SSN
•
Routing Indicator, either using Global Title or SSN.
Signaling Point Status Management
The SCCP informs the attached subsystems of the state of a remote
signaling point, such as
•
DPC unavailable
•
DPC available
Segmentation/Reassembly
HP OpenCall SS7 supports segmentation/reassembly, as defined in
ITU-T White Book 93, section Q.14 and in ANSI 96. This functionality is
enabled by using the “_x” function calls and associated primitives.
Subsystem Management
The SCCP updates the status of the subsystems based on failure,
withdrawal and recovery. These states are identified as:
•
User Out of Service
•
User In Service
Subsystem Status Test
The SCCP initiates an audit procedure to verify the status of a
prohibited subsystem.
Chapter 5
119
Using the SCCP API
Features of the SCCP
SCCP Restart
On restart SCCP needs information about the accessibility of signaling
points and their subsystems. Thus, SCCP supports restart procedures
initiated by the local MTP, SCCP or subsystems. See the files
sys.<className>.mtp and sys.<className>.sccp and the
HP OpenCall SS7 Operations Guide for more details.
Replicated Subsystems
HP OpenCall SS7 supports replicated subsystems, but not the
management of replicated subsystems. Replicated subsystem numbers
(SSNs) perform the same function as the original SSNs. If the original
SSN cannot handle the calls, it negotiates to have calls sent to the
replicated system. HP OpenCall SS7 allows you to create your own
replicated system, with the following constraints:
•
The backup subsystem must be a distant PC, for example a Peer
Point Code.
•
The replicated subsystem must have the same SSN as the original
subsystem.
Message Priority
You can assign priority to outgoing messages. If the MTP level 3 becomes
congested, it will discard the messages with the lowest priority and keep
those with the highest priority. This is set in the SCCP parameter
importance.
Messages with priority 0 will be discarded at SCCP level if there is
remote SP congestion. If the return option is set, a UDTS with the cause
of network congestion is returned to the initiator of the message. For
other priorities (1 or 2) the messages are given to MTP3 which is
responsible for discarding them according to the level of congestion.
The same rule applies to messages coming from the network that must
be relayed by SCCP after a translation.
NOTE
120
SCCP management messages (SSA, SSP, SST, SOR, SOG) have a default
priority of 0. This value can be changed via the SetMgtMsgPriority
parameter in the sys.<className>.sccp configuration file.
Chapter 5
Using the SCCP API
Features of the SCCP
SCCP Relay
The HP OpenCall SS7 SCCP API can fully ensure the SCCP relay
functions by using one of the non-standard SCCP primitives
sccp_xnotice_req or sccp_notice_req. These primitives allow the
application to generate the necessary XUDTS or UDTS on the network.
Connection Oriented Services
HP OpenCall SS7 provides the mechanism to establish a user-to-user
connection for the transfer of information blocks (Network Service Data
Unit - NSDU) from the SCCP layer of one SS7 stack to another. In this
case, NSDUs are transferred sequentially. HP OpenCall SS7 supports
Class 2 only, providing basic connection and disconnection services.
The following features are supported for connection oriented services.
Connection ID Management
The identification of SCCP connections is managed at two levels; at the
application level and at the SCCP layer of the SS7 stack.
When an SCCP connection is requested, the requesting application
associates a unique Local Reference Number, userLRN, with the
requested connection. This is a parameter of the connection request
primitive sccp_nconnect_req, but is only a reference for use by the
application.
The SCCP layer of the local SS7 stack then allocates its own Local
Reference Number to the connection, as does the SCCP layer of the
destination SS7 stack. This latter identifier becomes the real reference
for the connection, sccpLRN, that is used in network exchanges.
The destination application also allocates its own userLRN to the
connection but, again, this is only for local use by the application (it is a
parameter of the primitive sccp_nconnect_resp).
The detailed mechanism of connection ID management when a
connection is requested is illustrated in Figure 5-2 below.
Chapter 5
121
Using the SCCP API
Features of the SCCP
Figure 5-2
Connection ID Management
Connection Forwarding
An application that handles connection oriented Class 2 services can
have one or all of its established connections forwarded to another
application that is bound to the same SSN. The destination application
will then deal with incoming and/or outgoing traffic associated with the
forwarded connection(s). The original application will no longer be able
to send or receive data on the forwarded connection(s).
Forwarded connections are requested using the function SCCP_ctrl().
The destination application must be specified, and whether one or all
connections are to be forwarded. If only a single connection is to be
forwarded, this connection must be identified by its sccpLRN identifier.
The forward, all or single, is started by notifying the destination
application by a sccp_connect_fwd_ind primitive, and is finished when
the original application receives the sccp_connect_fwd_conf primitive.
The mechanism of setting up connection forwarding is illustrated in
Figure 5-3 below.
122
Chapter 5
Using the SCCP API
Features of the SCCP
While forwarding all connections, a new forward request on all
connections will be refused, and the error message SC_fwd_not_ready is
returned by the SCCP_ctr() function. However, a single connection
forward can be performed, even if a forward on all connections is ongoing.
If a switchover occurs while forwarding all connections, the forward will
continue on the new active SCCP stack.
For more details of using the SCCP_ctrl() function, refer to “Forwarding
a Connection Using SCCP_ctrl()” on page 156.
Chapter 5
123
Using the SCCP API
Features of the SCCP
Figure 5-3
Connection Forwarding Set-up
DEFAULT: Application 1 handles all traffic on connection (sccpLRN=1)
AppId=1
SSN=10
AppId=2
SSN=10
3
sc c p _c o nne c t_ind
(sccpLRN=1) 2
sc c p _c o nne c t_re s
p
(sccpLRN=1)
SAP=1
SAP=2
SSN=10
SLRN=1
SCCP Layer
4
1
CR CC
CONNECTION TRANSFER: Traffic on connection (sccpLRN=1)
transferred to Application 2
AppId=1
SSN=10
AppId=2
SSN=10
sc c p _c o nne c t_fwd _c o nf
(appId=2, sccpLRN=1)
4
sc c p _c trl_c o nne c tio n_fwd _re
q
1
(appId=2, sccpLRN=1)
3
sc c p _c o nne c t_fwd _ind
(appId=2, sccpLRN=1)
SAP=1
sc c p _d a ta _ind
6 (sccpLRN=1)
SAP=2
SSN=10
2
SCCP Layer
SLRN=1
SLRN=1
5
DT1
124
Chapter 5
Using the SCCP API
Features of the SCCP
Failures and Connection Preservation
There are two types of failure that can lead to connection problems failure of the SCCP layer of the SS7 stack and failure of an SCCP
application.
SCCP Layer
Failure
Failure of the SCCP protocol layer of the SS7 stack causes the
connections handled by this stack to be passed to the standby stack. This
assures the preservation of connections in the following states:
•
established connections
•
connections awaiting confirmation from the remote or upper
application before being established.
However, such a switchover will result in the loss of messages in the
internal buffers between the SCCP API and the SCCP protocol layer,
resulting in the loss of messages concerned with requests for connections
and disconnections, as well as data. Therefore connections may fail to be
properly established or released. However, built-in inactivity control and
timeouts ensure that orphan connections are released by the local or
remote SCCP layer.
SCCP Application
Failure
Provided that a (primary) SCCP application has a corresponding
secondary back-up application, the failure of the primary application will
cause all established connections handled by this application to pass to
the secondary. The latter application will subsequently have to deal with
data and disconnection notifications for connections that it does not
know, and will therefore have to re-build the contexts associated with
these connections.
If an application has no secondary back-up, failure of this application
will result in the SCCP protocol layer releasing all associated
connections.
Protocol Caveats
The SCCP class 2 protocol, as defined by ITU and ANSI, is not robust in
cases where SCCP notifies the upper application of a connection request
received from MTP3. If this incoming connection request is never
confirmed or refused by the upper application, the connection remains
blocked forever. HP OpenCall SCCP starts the TconnEst timer to cope
with this situation. If the TconnEst timer is elapsed before confirmation
is sent by upper application, the connection is locally released and the
upper application will receive a sccp_disconnect_ind primitive.
Chapter 5
125
Using the SCCP API
Features of the SCCP
Common Features
The following features are common to connectionless services and
connection-oriented services.
SCCP Addressing Components
The HP OpenCall SS7 SCCP routing functions are based on the
information provided in the Called Party Address parameter. There are
four basic components of an SCCP address:
•
Global Title
•
DPC
•
SSN
•
Routing Indicator, either using Global Title or SSN.
Multiple Application Connections
SCCP can accept multiple connections on the same SSN. One connection
is active and handles the traffic. A secondary standby connection can be
made that can be set to take over the active connection. A standby
connection cannot accept traffic until it becomes primary. You can only
have one primary connection per connection identifier. It describes the
parameters you must set to use this functionality.
Primary and
Secondary Pairs
The number of primary/secondary pairs supported depends on the SCCP
class and on whether an application identifier, applicationId, is
specified when the Service Access Point (SAP) is opened using the
function SS7_xifcreate().
If the applicationId field is not filled in (the default), only one
primary/secondary pair is allowed per SSN. If this field is filled in, the
allowed number of primary/secondary pairs depends on the SCCP class,
as follows:
•
Class 0, Class 2 and MGT class - up to 8 primary/secondary pairs
•
Class 1 - only 1 primary/secondary pair
Note that a separate, dedicated connection can be opened for SCCP MGT
(management) traffic.
126
Chapter 5
Using the SCCP API
Features of the SCCP
Traffic Filtering
NOTE
In the case of multiple primary/secondary pairs, a filtering system can be
implemented to allow a particular connection/application to be dedicated
to handling traffic of a particular class. For connection oriented traffic,
the filtering allows some applications to be dedicated to incoming traffic
and others to be dedicated to outgoing traffic. An application can be
registered for any of the following types of traffic:
•
Connectionless Class 0 traffic
•
Connectionless Class 1 traffic
•
Connection oriented Class 2 incoming traffic
•
Connection oriented Class 2 outgoing traffic
•
Management traffic only
At least one application per SSN must have the management filter set,
so that the SSN is in service and can send/receive traffic.
A filter is selected through the function SS7_xifcreate() when opening
a Service Access Point (SAP). If no filter is specified (the default), the
application is registered for Class 0, Class 1 and management traffic.
For an illustration of SCCP traffic filtering, refer to Figure 5-4 below.
Chapter 5
127
Using the SCCP API
Features of the SCCP
Figure 5-4
128
SCCP Traffic Filtering
Chapter 5
Using the SCCP API
Features of the SCCP
Distribution of
Traffic
If more than one primary/secondary pair is registered to receive Class 0
or Class2 SCCP traffic, the traffic is distributed among these
applications on a round-robin basis. Note that to qualify for distributed
traffic, an application must have filled in the applicationId field in the
SS7_xifcreate() function when opening a Service Access Point (SAP).
If several applications have been registered to handle SCCP
management traffic, all of these applications will receive all incoming
management messages.
Chapter 5
129
Using the SCCP API
Overview of How to Use the SCCP API
Overview of How to Use the SCCP API
Several steps are required when using the HP OpenCall SS7 SCCP
layer: open, schedule, receive, send, and close. This is briefly described
below and then the relevant sections for each action are referenced.
Creating SCCP Stack Connections
First you must create an SCCP stack connection using the
SS7_xifcreate() function. At this stage, you also specify the SCCP
traffic filtering that you require, through this function (see “Multiple
Application Connections” on page 126). See “Creating SCCP Stack
Connections Using SS7_xifcreate()” on page 132.
Scheduling SCCP Stack Connections
Secondly, you must schedule all the connections using the
HP OpenCall SS7 scheduling mechanism and the following function
calls:
•
SS7_ifselectmask()
•
select()
•
SS7_ifcnxhandler()
See “Scheduling SCCP Stack Connections” on page 134.
SCCP Primitives
Once you have opened and scheduled the SCCP connection, you can use
primitives and their respective parameters to communicate. Primitives
consist of commands and their respective responses associated with the
services requested of SCCP. See “SCCP Primitives” on page 137.
SCCP Parameters
Each SCCP primitive has associated SCCP parameters that include the
necessary information to complete the function corresponding to the
primitive. See “SCCP Parameters” on page 140.
130
Chapter 5
Using the SCCP API
Overview of How to Use the SCCP API
Receiving SCCP Primitives
The scheduling mechanism returns the number of stack connections
(num_cnxId) for which there are SCCP primitives waiting to be received.
An array containing the active connection identifiers is also returned.
These primitives are stored by the SCCP API in the receive buffer, and
must be received by the application using SCCP_recv(). See “Receiving
SCCP Primitives Using SCCP_recv()” on page 150.
Sending SCCP Primitives
HP OpenCall SS7 provides the application with SCCP_send() to send
data to a remote destination. This function supports both Class 0 and
Class 1 of the SCCP connectionless services, and Class 2 of the SCCP
connection oriented services. See “Sending SCCP Primitives Using
SCCP_send()” on page 153.
Closing SCCP Stack Connections
Only close an SCCP stack connection when you are certain that the
connection will not be used again. Repeated opening and closing of a
stack connection places a high overhead on the SCCP API mechanism.
See “Closing SCCP Stack Connections Using SS7_ifclose()” on page 154.
Using the SCCP API Shared Library
The SCCP API is available as a shared library.
To know the compile and link directives to use, refer to the SCCP API
tutorial (see “SCCP Tutorial Programs” on page 192).
Chapter 5
131
Using the SCCP API
Creating SCCP Stack Connections Using SS7_xifcreate()
Creating SCCP Stack Connections Using
SS7_xifcreate()
The SCCP API creates stack connections for the application. The
application requests the services of SCCP using these connections.
NOTE
SS7_xifcreate() is the correct function to use. If the application uses
SS7_ifcreate(), you should replace it with SS7_xifcreate().
With the introduction of SS7_xifcreate() additional primitives replace
existing primitives, for example sccp_xunitdata_req ()now replaces
sccp_unitdata_req(). Use _x primitives with _x calls.
To enable multiple connections, you will also have to set parameters in
the configuration file sys.<className>.api:
Table 5-1
Multiple Connection Configuration
If you...
...then set the
parameter...
do not want this functionality
autoSwitch
want the secondary connection to become active if
the primary fails
want the primary connection to be closed when
the secondary connection becomes active
want to make the existing primary connection
secondary when a new primary connection is
created
132
NO
(default)
YES
closeOnEnable
want the primary connection to become standby
when the secondary connection becomes active
want to close the existing primary connection
when a new primary connection is created
...to...
YES
NO
(default)
closeOnCreate
YES
NO
(default)
Chapter 5
Using the SCCP API
Creating SCCP Stack Connections Using SS7_xifcreate()
When creating connections using SS7_xifcreate(), you can also specify
the SCCP traffic filtering that you require (see “Multiple Application
Connections” on page 126). This is done through the
ss7_service_parms structure and the following (cumulative) modes can
be specified.
Table 5-2
SCCP Traffic Filtering Modes
Mode
Description
SCCP_CLASS0_ONLY
Connection only handles
connectionless Class 0 traffic.
SCCP_CLASS1_ONLY
Connection only handles
connectionless Class 1 traffic.
SCCP_CLASS2_INC_ONLY
Connection only handles connection
oriented Class 2 incoming traffic.
SCCP_CLASS2_OUT_ONLY
Connection only handles connection
oriented Class 2 outgoing traffic.
SCCP_MGT_ONLY
Connection only handles SCCP
management traffic.
For more details of this function, see the SS7_xifcreate() man page.
Example 5-1
Creating an SCCP Stack Connection
ss7_service_parms
sceparms;
OCTET
client_ssn = 101;
int
cnxId;
sceparms.ssn = client_ssn;
sceparms.mode = SCCP_ITU_WHITE;
/* service parameters */
/* open the SCCP service */
if (SS7_xifcreate (“Stack_1”,ss7_sccp,NULL,&sceparms,&cnxId,NULL) == -1)
/* error handling */
Chapter 5
133
Using the SCCP API
Scheduling SCCP Stack Connections
Scheduling SCCP Stack Connections
As described in Chapter 3, “General API Guidelines,” you must schedule
all the stack connections using the HP OpenCall SS7 scheduling
mechanism. Scheduling the SCCP stack connections is achieved by
using:
•
SS7_ifselectmask()
•
select()
•
SS7_ifcnxhandler()
SS7_ifselectmask()
This pre-select function is used for all SCCP stack connections. It takes
the file descriptor masks created by the application, and sets these
masks to include the file descriptors used by the API to manage the
SCCP stack connections. The application must call this function before
calling select().
For details about syntax, parameters, and return values, see the
SS7_ifselectmask() man page.
select()
The select() function is used for all HP OpenCall SS7 scheduling. It
modifies the read, write and exception masks created by
SS7_ifselectmask().
134
Chapter 5
Using the SCCP API
Scheduling SCCP Stack Connections
SS7_ifcnxhandler()
The application must call this function after using select(), regardless
of the result of the select() command. SS7_ifcnxhandler() requests
the API to process the masks returned by select() and manage the
internal mechanisms.
An array of stack connection identifiers is used to identify the stack
connections that have messages waiting to be received by the
application.
Activity on the connection is flagged when:
•
a message is received by the SS7 stack
•
a closed connection is found (a send or receive call returns an error).
The application should call the close function to deallocate API
resources.
•
a connection goes from busy state (API_BUSY) to normal state. The
application can resume processing (send and receive calls no longer
return an error).
For details about syntax, parameters, and return values, see the
SS7_ifcnxhandler() man page.
Example 5-2
Scheduling SCCP Stack Connections
ss7_service_parms
sceparms;
/* service parameters */
int
i, result;
fd_set
readMask, writeMask, exceptionMask; /* masks for select */
int
nfound;
/* select result */
struct timeval
tmout, * time = &tmout;
int
numFd;
int
num_cnx, cnx_active[MAX_FD];
sceparms.ssn = client_ssn;
sceparms.mode = SCCP_ITU_WHITEBOOK
/* open the SCCP service */
/* Zero select bit masks before entering loop */
FD_ZERO(&readMask);
FD_ZERO(&writeMask);
FD_ZERO (&exceptionMask)
for (;;)
/* endless select loop
{
tmout.tv_sec = 1;
tmout.tv_usec = 1;
Chapter 5
135
Using the SCCP API
Scheduling SCCP Stack Connections
/* Must set this each time round loop as selectmask call
* may change the pointer
*/
time = &tmout;
pending_requests = 0;
// send a request
/* Note: As we have no other fd’s open, the initial max fd
* is 0. Also, we don’t use the exeception mask, so we pass 0.
* Note too that last param is a struct timeval **.
*/
numFd = SS7_ifselectmask(0, &readMask, &writeMask, &exceptionMask, &time);
nfound = select(numFd,(int *)&readMask, (int *)&writeMask,
&exceptionMask, time);
/* Note: We ALWAYS call the cnxhandler function after select(2),
* even if select returns an error (-1). This is to allow the API
* lib to clear any socket errors.
*/
num_cnx = MAX_FD;
/* initial size of cnx_active array */
SS7_ifcnxhandler(nfound, &readMask, &writeMask, &exceptionMask,
&num_cnx, cnx_active);
/* check if the select was triggered by
* the port of the scedesc file descriptor,and receive messages
*/
if ( (num_cnx > 0) && ( cnx_active[0] == cnxId) )
// receive waiting indications
}
136
Chapter 5
Using the SCCP API
SCCP Primitives
SCCP Primitives
Primitives consist of commands and their respective responses
associated with the services requested of SCCP. As shown in Figure 5-5,
SCCP Primitives, there are four categories.
Figure 5-5
SCCP Primitives
The SCCP API is an abstract interface providing applications with stack
connections which are used to exchange the following service primitives.
Chapter 5
137
Using the SCCP API
SCCP Primitives
Recommendation
Use of the _x primitives is preferred because they take advantage of the
segmentation/reassembly functionality.
Table 5-3
SCCP Service Primitives (Connectionless Services)
Type
Primitive Name
Associated Structure
Service
Request
sccp_xunitdata_req
sccp_xunitdata_parms
To request SCCP to transport data.
sccp_state_req
sccp_state_parms
To request the status of a subsystem
number.
sccp_xnotice_req
sccp_xnotice_parms
Indicates that a unitdata message
cannot be delivered (GT translation
has failed).
sccp_coord_req
sccp_coord_parms
To request permission for a subsystem
to go out of service.
Response
sccp_coord_resp
sccp_coord_parms
To inform SCCP that the withdrawal
of a subsystem has been accepted.
Indication
sccp_xunitdata_ind
sccp_xunitdata_parms
To inform an SCCP user that signaling
data has been delivered.
sccp_state_ind
sccp_state_parms
To inform an SCCP user of the status
of a signaling point.
sccp_pcstate_ind
sccp_pcstate_parms
To return the status of a signaling
point.
sccp_xnotice_ind
sccp_xnotice_parms
To indicate that a message issued from
the SCCP user was not delivered.
sccp_coord_ind
sccp_coord_parms
To inform an SCCP user that a
Subsystem out of Service Request
message has been received.
sccp_coord_conf
sccp_coord_parms
To confirm that the Subsystem out of
Service Request message was
accepted.
Confirmation
For more details, see the SCCP_recv(3) man page.
138
Chapter 5
Using the SCCP API
SCCP Primitives
Table 5-4
SCCP Service Primitives (Connection Oriented Services)
Type
Primitive Name
Associated Structure
Service
Request
sccp_connect_req
sccp_connect_parms
To request a connection to a
remote SCCP user.
sccp_disconnect_req
sccp_disconnect_parms
To request the release of a
connection to a remote SCCP
user.
sccp_data_req
sccp_data_parms
To request data to be sent to a
remote SCCP user.
Response
sccp_connect_resp
sccp_connect_parms
To accept a connection request
from a remote SCCP user.
Indication
sccp_connect_ind
sccp_connect_parms
To indicate that a connection
request has been received from
a remote SCCP user.
sccp_disconnect_ind
sccp_disconnect_parms
To indicate that a request for
the release of a connection has
been received from a remote
SCCP user.
sccp_data_ind
sccp_data_parms
To indicate that a request for
the transfer of data (to the local
user) has been received from a
remote SCCP user.
Confirmation
sccp_connect_conf
sccp_connect_parms
To confirm that a connection
request has been accepted by
the remote SCCP user.
Forward*
sccp_connect_fwd_ind
sccp_connect_fwd_ack_parms
To indicate that a forwarding
request has been received from
another application.
sccp_connect_fwd_conf
sccp_connect_fwd_ack_parms
To confirm that a forwarding
request has been accepted by
the SCCP layer.
*Service primitives (not protocol primitives) that can only be received (and not sent)
Chapter 5
139
Using the SCCP API
SCCP Parameters
SCCP Parameters
Each SCCP primitive has associated SCCP parameters that include the
necessary information to complete the function corresponding to the
primitive.
Local Alias PC
The SCCP level automatically changes the PointCode field of the
calledAddress parameter from a local alias used by the network and
received by the platform into the LPC. This makes use of local aliases
completely transparent to the higher levels such as TCAP. Therefore you
should never use a local alias within a local application.
Table 5-5
SCCP Parameters and Values
SCCP
Parameter
Structure
Element
Type
Value
affectedDPC
-
-
BITS32
-
affectedSSN
-
-
OCTET
-
associatedPC
-
-
BITS32
-
140
Chapter 5
Using the SCCP API
SCCP Parameters
Table 5-5
SCCP Parameters and Values (Continued)
SCCP
Parameter
Structure
Element
Type
Value
callingAddres
s
SC_ADDRES
S
pointCod
ePresent
SC_PC_USAGE
SC_no,
SC_SCCPUse,
SC_MTPUse
pointCod
e
BITS32
-
ssnPrese
nt
ubool
-
ssn
OCTET
-
gt
-
pointer to a SC_GLOBAL_TITLEstructure or
NULL (no global title)
calledAddress
SC_GLOBAL
_ TITLE
Chapter 5
Following fields only used when gt contains a pointer
routeOnG
t
ubool
-
gtIndica
tor
SC_GT_INDICATO
R
SC_noGlobalTitle
SC_gtType1
SC_gtType2
SC_gtType3
SC_gtType4
translat
ion
SC_TRANSLATION
_TYPE
SC_unused
SC_internetwork_1
SC_networkSpecific_1
numberin
g
SC_NUMBERING_P
LAN
SC_unknownNumbering
SC_isdn
SC_userdata
SC_telex
SC_maritimeMobile
SC_landMobile
SC_isdnMobile
encoding
SC_ENCODING_SC
HEME
SC_unknownEncode
SC_bcdOdd
SC_bcdEven
nature
SC_ADDRESS_NAT
URE
SC_subscriberNo
SC_nationalNo
SC_internationalNo
digits
char*
-
141
Using the SCCP API
SCCP Parameters
Table 5-5
SCCP Parameters and Values (Continued)
SCCP
Parameter
Structure
Element
Type
Value
coordStatus
-
-
SC_CONFIRM_STA
TUS
SC_granted_withdrawal
SC_denied_withdrawal
SC_no_peer
hopCounter
-
-
unsigned char
Range: 1-15
Defaults to 15 if set outside range.
importance
-
-
InSequence
int
This sets the priority level of the message,
(whether it will be discarded at MTP if there
is congestion). Values range from 0-2, with 0
being the lowest level of importance. If the
value of importance in SCCP_send() is out of
range (0 to 2), the value is reset to 0.
ubool
Set to 0.
multInd
-
-
SC_SMI
multIndUnknown
multIndSolitary
multIndDuplicated
returnOption
-
-
ubool
-
returnReason
-
-
SC_RETURN_REAS
ON
SC_noTranslationNature
SC_noTranslationSpecific
SC_subsystemCongestion
SC_subsystemFailure
SC_unequippedUser
SC_networkFailure
SC_networkCongestion
SC_unqualified
SC_errorInMsgTransport
SC_errorInLocalprocessing
SC_noDestReassembly
SC_sccpFailure
SC_hopCounterViolation
SC_segNotSupported
SC_segFailure
SC_invalidISNIrouting
SC_unauthorizedMsg
SC_msgIncompatibility
SC_noISNIconsRouting
SC_redundantISNIconsRouting
SC_noISNIidentification
SC_noError
unsigned int
24-bit
sccpLRN
142
Chapter 5
Using the SCCP API
SCCP Parameters
Table 5-5
SCCP Parameters and Values (Continued)
SCCP
Parameter
Structure
Element
Type
Value
SegmOption
-
-
ubool
For future use. Should be set to 0, but no
error message is returned
sequenceContr
ol
-
-
int
-
serviceClass
SC_SERVIC
E_ CLASS
-
spStatus
-
-
SC_SP_STATUS
SC_inaccessible
SC_congestedSC_accessible
SC_restartingSC_congested
SC_cnx_error
XUDTOption
-
-
ubool
See Table Note 1
XUDTSOption
-
-
ubool
See Table Note 2
Table 5-6
SCCP_CLASS_0 = 0
SCCP_CLASS_1
SCCP_CLASS_2
SCCP Parameters and Values
SCCP
Parameter
Structure
Element
Type
Value
affectedDPC
-
-
BITS32
-
affectedSSN
-
-
OCTET
-
associatedPC
-
-
BITS32
-
Chapter 5
143
Using the SCCP API
SCCP Parameters
Table 5-6
SCCP Parameters and Values (Continued)
SCCP
Parameter
Structure
Element
Type
Value
callingAddres
s
SC_ADDRES
S
pointCod
ePresent
SC_PC_USAGE
SC_no,
SC_SCCPUse,
SC_MTPUse
pointCod
e
BITS32
-
ssnPrese
nt
ubool
-
ssn
OCTET
-
gt
-
pointer to a SC_GLOBAL_TITLEstructure or
NULL (no global title)
calledAddress
SC_GLOBAL
_ TITLE
144
Following fields only used when gt contains a pointer
routeOnG
t
ubool
-
gtIndica
tor
SC_GT_INDICATO
R
SC_noGlobalTitle
SC_gtType1
SC_gtType2
SC_gtType3
SC_gtType4
translat
ion
SC_TRANSLATION
_TYPE
SC_unused
SC_internetwork_1
SC_networkSpecific_1
numberin
g
SC_NUMBERING_P
LAN
SC_unknownNumbering
SC_isdn
SC_userdata
SC_telex
SC_maritimeMobile
SC_landMobile
SC_isdnMobile
encoding
SC_ENCODING_SC
HEME
SC_unknownEncode
SC_bcdOdd
SC_bcdEven
nature
SC_ADDRESS_NAT
URE
SC_subscriberNo
SC_nationalNo
SC_internationalNo
digits
char*
-
Chapter 5
Using the SCCP API
SCCP Parameters
Table 5-6
SCCP Parameters and Values (Continued)
SCCP
Parameter
Structure
Element
Type
Value
coordStatus
-
-
SC_CONFIRM_STA
TUS
SC_granted_withdrawal
SC_denied_withdrawal
SC_no_peer
hopCounter
-
-
unsigned char
Range: 1-15
Defaults to 15 if set outside range.
importance
-
-
InSequence
multInd
originator
Chapter 5
-
-
int
This sets the priority level of the message,
(whether it will be discarded at MTP if there
is congestion). Values range from 0-2, with 0
being the lowest level of importance. If the
value of importance in SCCP_send() is out of
range (0 to 2), the value is reset to 0.
ubool
Set to 0.
SC_SMI
multIndUnknown
multIndSolitary
multIndDuplicated
SC_ORIGINATOR
SC_network_service_provider
SC_network_service_user
SC_undefined
145
Using the SCCP API
SCCP Parameters
Table 5-6
SCCP
Parameter
SCCP Parameters and Values (Continued)
Structure
Element
reason
returnOption
146
-
-
Type
Value
SC_RELEASE_REA
SON
SC_disconnection_non_transient_nature
SC_disconnection_transient_nature
SC_disconnection_invalid_state
SC_disconnection_release_in_progress
SC_disconnection_normal_condition
SC_disconnection_abnormal_condition
SC_disconnection_end_user_congestion
SC_disconnection_end_user_failure
SC_disconnection_sccp_user_originated
SC_disconnection_access_congestion
SC_disconnection_access_failure
SC_disconnection_subsystem_congestion
SC_disconnection_subsystem_failure
SC_disconnection_network_congestion
SC_disconnection_network_failure
SC_disconnection_undefined
SC_refusal_dest_unknown
SC_refusal_dest_inacc_non_transient
SC_refusal_dest_inacc_transient
SC_refusal_qos_unavail_non_transient
SC_refusal_qos_unavail_transient
SC_refusal_reason_unspecified_non_tra
nsient
SC_refusal_reason_unspecified_transie
nt
SC_refusal_local_error
SC_refusal_invalid_state
SC_refusal_no_translation
SC_refusal_in_restart_phase
SC_refusal_non_transient
SC_refusal_transient
SC_refusal_NSDU_incompatible_info
SC_refusal_end_user_originated
SC_refusal_end_user_congestion
SC_refusal_end_user_failure
SC_refusal_sccp_user_originated
SC_refusal_access_congestion
SC_refusal_access_failure
SC_refusal_subsystem_congestion
SC_refusal_subsystem_failure
SC_refusal_hop_counter_violation
SC_reason_undefined
ubool
-
Chapter 5
Using the SCCP API
SCCP Parameters
Table 5-6
SCCP Parameters and Values (Continued)
SCCP
Parameter
Structure
Element
Type
Value
returnReason
-
-
SC_RETURN_REAS
ON
SC_noTranslationNature
SC_noTranslationSpecific
SC_subsystemCongestion
SC_subsystemFailure
SC_unequippedUser
SC_networkFailure
SC_networkCongestion
SC_unqualified
SC_errorInMsgTransport
SC_errorInLocalprocessing
SC_noDestReassembly
SC_sccpFailure
SC_hopCounterViolation
SC_segNotSupported
SC_segFailure
SC_invalidISNIrouting
SC_unauthorizedMsg
SC_msgIncompatibility
SC_noISNIconsRouting
SC_redundantISNIconsRouting
SC_noISNIidentification
SC_noError
unsigned int
24-bit
sccpLRN
SegmOption
-
-
ubool
For future use. Should be set to 0, but no
error message is returned
sequenceContr
ol
-
-
int
-
serviceClass
SC_SERVIC
E_ CLASS
-
spStatus
-
-
SC_SP_STATUS
SC_inaccessible
SC_congestedSC_accessible
SC_restartingSC_congested
SC_cnx_error
XUDTOption
-
-
ubool
See Table Note 1
XUDTSOption
-
-
ubool
See Table Note 2
unsigned int
24-bit
userLRN
Chapter 5
SCCP_CLASS_0 = 0
SCCP_CLASS_1
SCCP_CLASS_2
147
Using the SCCP API
SCCP Parameters
Table 5-6
SCCP Parameters and Values (Continued)
SCCP
Parameter
Structure
Element
Type
Value
userStatus
-
-
SC_USER_STATUS
SC_UIS
SC_UOS
See also the SCCP_recv(3) man page.
Table Note 1
In xunitdata_req:
FALSE: XUDT sent only when segmentation is needed (UDT otherwise).
TRUE: force use of XUDT rather than UDT.
In xunitdata_ind:
FALSE: UDT received.
TRUE: XUDT received.
Table Note 2
In xnotice_req:
FALSE: Use UDTS message type.
TRUE: Use XUDTS message type.
In xnotice_ind:
FALSE: UDTS received.
TRUE: XUDTS received.
148
Chapter 5
Using the SCCP API
SCCP Parameters
Global Title Types
The HP OpenCall SS7 SCCP supports all Global Title types as defined in
Q.713 §3.4.1. The application identifies the GT type by setting the
gtIndicator.
Table 5-7
Global Title Type
SC_GT_Indicator
ITU-T
ANSI
SC_gtType1
nature of address
translation type,
numbering plan,
encode-scheme
SC_gtType2
translation type
translation type
SC_gtType3
translation type,
not used
numbering plan,
encode-scheme
SC_gtType4
nature of address,
not used
translation type,
numbering plan,
encode-scheme
You must ensure that gt element of SC_ADDRESS contains a pointer to
SC_GT_TITLE.
Chapter 5
149
Using the SCCP API
Receiving SCCP Primitives Using SCCP_recv()
Receiving SCCP Primitives Using
SCCP_recv()
The scheduling mechanism returns the number of stack connections
(num_cnxId) for which there are SCCP primitives waiting to be received.
An array containing the active connection identifiers is also returned.
These primitives are stored by the SCCP API in the receive buffer, and
must be received by the application using SCCP_recv().
For details about syntax, parameters, and return values, see the
SCCP_recv() man page.
Example 5-3
Receiving SCCP Primitives
/* process incoming data from SS7 */
void receive_request()
{
BITS32
dpc;
/* destination point code
*/
long
data[WB_MAX_USERDATA/sizeof(long)];
sccp_primitive
primitive;
/* SCCP primitive */
sccp_xunitdata_parms
* udt_parms_ptr;
sccp_xnotice_parms
* not_parms_ptr;
sccp_state_parms
* state_parms_ptr;
sccp_pcstate_parms
* pcstate_parms_ptr;
SC_USER_STATUS
userstat;
SC_SP_STATUS
pcstat;
OCTET
ssn;
int
result;
while ((result=SCCP_recv (cnxId,NULL, &primitive, (char *)data)) > 0)
{
switch (primitive) {
case sccp_xunitdata_ind:
udt_parms_ptr = (sccp_xunitdata_parms *) data;
printf (“Phone number %d, user name is %s\n”,
*(int *)udt_parms_ptr->data,(udt_parms_ptr->data+4));
pending_requests--;
nb_requests_processed--;
break;
case sccp_xnotice_ind:
not_parms_ptr = (sccp_xnotice_parms *) data;
150
Chapter 5
Using the SCCP API
Receiving SCCP Primitives Using SCCP_recv()
dpc = not_parms_ptr->calledAddress.pointCode;
ssn = not_parms_ptr->calledAddress.SSN;
printf ( “sccp_xnotice_ind return reason = %d dpc %u ssn %d\n”,
not_parms_ptr->returnReason, dpc, ssn );
break;
case sccp_pcstate_ind:
pcstate_parms_ptr = (sccp_pcstate_parms *) data;
pcstat = pcstate_parms_ptr->spStatus;
dpc = pcstate_parms_ptr->affectedDPC;
switch(pcstat) {
case SC_congested:
printf (“SCCP congestion %d\n”, dpc);
break;
case SC_uncongested:
printf (“SCCP congestion end %d\n”, dpc);
break;
case
SC_accessible:
pending_requests=0;
server_available=1;
printf (“SCCP available %d\n”, dpc);
break;
case SC_inaccessible:
printf (“SCCP unavailable %d\n”, dpc);
/*
server_available=0; */
break;
case SC_restarting:
printf (“SCCP restarting %d\n”, dpc);
break;
case SC_cnx_error:
printf (“Error on SCCP connection\n”);
exit(1);
break;
default:
printf (“Unknown sccp_pcstate indication %d\n”, pcstat);
}
break;
case sccp_state_ind:
Chapter 5
151
Using the SCCP API
Receiving SCCP Primitives Using SCCP_recv()
state_parms_ptr = (sccp_state_parms *) data;
userstat = state_parms_ptr->userStatus;
dpc = state_parms_ptr->associatedPC;
ssn = state_parms_ptr->affectedSSN;
if ( (dpc == server_pc) && (ssn == server_ssn) )
switch(userstat) {
case SC_UIS:
server_available = 1;
printf (“Server in service\n”);
break;
case SC_UOS:
pending_requests = 0;
server_available = 0;
printf (“Server out of service\n”);
break;
default:
printf (“Unknown sccp_state indication %d\n”, userstat);
}
break;
default:
printf(“Received unknown sort of primitive %d\n,primitive”);
exit(0);
}
}
/*Error Handling*/
if (result == -1)
print((“Error in sccprecv = %d\n”, ss7errno));
}
152
Chapter 5
Using the SCCP API
Sending SCCP Primitives Using SCCP_send()
Sending SCCP Primitives Using SCCP_send()
HP OpenCall SS7 provides the application with SCCP_send(), a
non-blocking function to send data to a remote destination. The data is
delivered differently for connectionless services or connection oriented
services, as described below.
NOTE
For details about syntax, parameters, and return values, see the
SCCP_send() man page.
Connectionless
Services
The function supports both Class 0 and Class 1 of the SCCP
connectionless services.
When used for in-sequence message transfer, the serviceClass parameter
must be set to SCCP_CLASS_1. The sequenceControl parameter
contains the sequence number selected by the application. This sequence
number is used to generate the signaling Link Selection field (SLS routing label) used to send the message. The same sequenceControl
value always generates the same SLS field.
Connection
Oriented Sevices
Chapter 5
The function supports Class 2 of the SCCP connection oriented services.
For connection oriented services, the protocol assures that all messages
on a connection use the same SLS and are delivered in sequence.
153
Using the SCCP API
Closing SCCP Stack Connections Using SS7_ifclose()
Closing SCCP Stack Connections Using
SS7_ifclose()
Only close an SCCP stack connection when you are certain that the
connection will not be used. Repeated opening and closing of a stack
connection places a high overhead on the SCCP API mechanism.
An SCCP service is terminated when the application closes a stack
connection using SS7_ifclose(). All the entities used by the connection
are also closed, and any calls to SCCP_send() or SCCP_recv() are
refused.
You must reschedule the stack connections after you have called
SS7_ifclose(), this ensures that all messages are flushed from the
send IPC buffers.
For details about syntax, parameters, and return values, see the
SS7_ifclose() man page.
154
Chapter 5
Using the SCCP API
Controlling IPC Using SS7_ifctrl()
Controlling IPC Using SS7_ifctrl()
As described in “Tuning IPC Buffers”, the application may need to alter
the default values of the IPC send and receive buffers. The application
can use SS7_ifctrl() to customize these IPC buffer attributes for each
stack connection.
This function modifies the IPC buffers attached to a particular stack
connection (cnxId) according to the selected IPC command.
For details about syntax, parameters, and return values, see the
SS7_ifctrl() man page.
Chapter 5
155
Using the SCCP API
Forwarding a Connection Using SCCP_ctrl()
Forwarding a Connection Using SCCP_ctrl()
As described in “Connection Forwarding” on page 122, an application
that handles connection oriented Class 2 services can have one or all of
its established connections forwarded to another application that is
bound to the same SSN.
NOTE
Only established connections or connections waiting for confirmation can
be forwarded in this way.
An application can use the function SCCP_ctrl()to request to have
either one or all of its connections forwarded. Through this function, the
application must provide the following information:
•
The service type - SCCP_CTRL_CONNECTION_FWD.
•
The value of sccpLRN:
— If only one connection is to be forwarded, sccpLRN must be set to
the connection identifier.
— If all connections are to be forwarded, sccpLRN must be set to
ALL_SLRN.
•
The application identifier of the destination application, provided
through the destApplicationId field.
Once a forwarding request has been accepted, the requesting application
will receive a sccp_connect_fwd_conf primitive.
156
Chapter 5
Using the SCCP API
SCCP Addressing and Routing
SCCP Addressing and Routing
SCCP Addressing
NOTE
For connection oriented services, an SCCP address is only required while
a connection is being established.
From the SCCP API there is no direct access to the MTP label
information. Some MTP addressing label information is accessible from
the SCCP address.
•
For incoming messages that will be delivered to the user, the Called
and Calling party address will be completed with the PC in the MTP
label if:
((no point code present) and (no GT present) and ((GT present) and
(Route on PC)))
•
The Called and Calling party address will always contain a point
code before delivery to the local user.
The indicator of the point code presence (SC_PC_USAGE) will be set to:
Chapter 5
SC_PC_USAGE setting
Meaning
SC_no
Never; the Called and Calling party
addresses will always contain the point code
information
SC_SccpUse
When the point code was originally present
in the SCCP addressing labels, or a local
translation took place. Note that in this case
the SCCP user does not have access to the
MTP routing label information, even though
this information might be different from
information which is present in the SCCP
addressing labels.
157
Using the SCCP API
SCCP Addressing and Routing
SC_PC_USAGE setting
Meaning
SC_MtpUse
When there is no other point code given
(explicitly, in the SCCP part or implicitly,
through ‘Route on GT’)
•
For outgoing messages it is the responsibility of the application to fill
in the relevant fields. SC_PC_USAGE may take two values:
•
SC_no if no PC information is added by the application
In this case routing indicator must be set to RtGT and the
translation must take place locally
•
SC_SccpUse if the application provides a point code
In this case the routing indicator can be set to:
— RtGT
and the translation will be done remotely because PC != LPC
— RtPC
and message distributed to a local subsystem if PC = LPC or
message sent to a remote is PC != LPC
Incoming Messages
For incoming messages that will be delivered to the user Called and
Calling party address will be completed with the PC in the MTP label if:
•
((no point code present) and
•
(no GT present) or ((GT present) and (Route on PC)))
In this case the indicator of the point code presence is set to: SC_MtpUse.
The Called and Calling party address will ALWAYS contain a point code
before delivery to the local user.
158
Chapter 5
Using the SCCP API
SCCP Addressing and Routing
Outgoing Messages
For outgoing messages it is the responsibility of the application to fill in
the relevant fields. SC_PC_USAGE may take two values:
•
SC_no if no PC information is added by the application
In this case the routing indicator must be set to RtGT and the
translation must take place locally.
•
SC_SccpUse if the application provides a point code
In this case the routing indicator can be set to:
— RtGT
and the translation will be done remotely because PC != LPC
— RtPC
and message distributed to a local subsystem if PC = LPC or
message sent to a remote is PC != LPC
NOTE
Chapter 5
For connection oriented services, if an address is used with no PC, no
SSN and no GT, the address will be absent from the SCCP message.
159
Using the SCCP API
SCCP Addressing and Routing
Types of Traffic
There are four types of traffic: loopback, outbound, inbound, and relay.
The different parts of the traffic flow within each type of traffic are
described in more detail in the message transfer flowcharts later in this
chapter.
Inbound
Inbound traffic goes from the MTP layer to the SCCP layer.
Figure 5-6
Inbound Traffic
The numbers in the above diagram refer to the message transfer
flowcharts later in this chapter:
3 refers to Figure 5-13 on page 174.
4 refers to Figure 5-14 on page 175.
5 refers to Figure 5-15 on page 176.
Outbound
160
Outbound traffic goes from the application to the SCCP layer that has
addressing capabilities, such as Global title translation, and then to the
MTP layer.
Chapter 5
Using the SCCP API
SCCP Addressing and Routing
Figure 5-7
Outbound Traffic
The numbers in the above diagram refer to the message transfer
flowcharts later in this chapter:
1 refers to Figure 5-11 on page 169.
2 refers to Figure 5-12 on page 170.
Chapter 5
161
Using the SCCP API
SCCP Addressing and Routing
Loopback
Loopback traffic goes from the application to the SCCP layer to a local
application on the same system.
Figure 5-8
Loopback Traffic
The numbers in the above diagram refer to the message transfer
flowcharts later in this chapter:
1 refers to Figure 5-11 on page 169.
5 refers to Figure 5-15 on page 176.
Relay
162
Relay traffic is inbound traffic that goes to the SCCP layer, a translation
of addresses is performed, and then the traffic goes back to the MTP
layer.
Chapter 5
Using the SCCP API
SCCP Addressing and Routing
Figure 5-9
Relay Traffic
The numbers in the above diagram refer to the message transfer
flowcharts later in this chapter:
2 refers to Figure 5-12 on page 170.
3 refers to Figure 5-13 on page 174.
Chapter 5
163
Using the SCCP API
SCCP Addressing and Routing
Elements of SCCP Addressing
SCCP addressing includes four separate elements:
•
Destination Point Code (DPC)
This element is recognized by MTP, and is used to determine if the
SCCP message has arrived at its destination or if it must be routed
via MTP to another Point Code.
•
Global Title (GT)
This address element is not recognized by the SS7 network, and
must be translated into a DPC or a DPC and SSN.
•
Subsystem Number
This element identifies the sub-system (SCCP management or
BSSAP user) that can be accessed via the SCCP.
•
Routing Indicator
This indicates whether routing is based on the SSN or on a GT.
164
Chapter 5
Using the SCCP API
SCCP Addressing and Routing
The Main Fields in SCCP Called and Calling Party Addresses
The table below describes the main fields in the SCCP routing addresses.
Table 5-8
The SCCP Addressing Fields and Possible Values
Field Name
Can be set to:
PointCodePresent
SC_no
(no point code)
PointCode
a DPC value
SsnPresent
Boolean value
SSN
an SSN value
SC_SccpUse
(use for
routing)
SC_MtpUse
(use for routing, but
code address at MTP
level only, not at SCCP
level).
gt pointer to the structure
routeOnGt
nature
translation type
numbering plan
... (other fields)
Chapter 5
Boolean value
NAI value
TT value
NP value
...
165
Using the SCCP API
SCCP Addressing and Routing
Global Title Translation
HP OpenCall SS7 SCCP contains a Global Title Table which uses the
Numbering Plan (NP), Translation Type (TT) and Nature of Address
Indicator (NAI) elements of the Global Title to perform its translation.
Global Titles that do not have all these elements are assumed to contain
the value 0.
HP OpenCall SS7 does not support the translation of one Global Title to
another Global Title.
The result of a Global Title Translation is either:
•
a DPC
This corresponds to an incomplete translation. The GT continues to
be used for routing (routOnGt remains set to yes).
•
a DPC and SSN
This corresponds to a complete translation. The GT is no longer used
for routing (routOnGt is set to no). However, if the DPC found during
the GT translation is the LPC, then routOnGt remains set to yes.
166
Chapter 5
Using the SCCP API
SCCP Addressing and Routing
Figure 5-10
Chapter 5
Global Title Translation
167
Using the SCCP API
Outgoing Routing Control
Outgoing Routing Control
When the application requests the SCCP API to send an
sccp_xunitdata_req or sccp_connect_req primitive and associated
parameters (using sccp_send()), you must also provide a
calledPartyAddress parameter.
The HP OpenCall SS7 SCCP outbound routing mechanism depends on
the gt element of the calledPartyAddress, which indicates whether
routing is based on the GT or on DPC and SSN. The contents of the
callingPartyAddress is left untouched by the routing mechanism.
168
Chapter 5
Using the SCCP API
Outgoing Routing Control
Figure 5-11
Chapter 5
Message Transfer 1: TCAP or SCCP Application to SCCP Local
Bus
169
Using the SCCP API
Outgoing Routing Control
Figure 5-12
170
Message Transfer 2: Remote Entity to MTP Layer
Chapter 5
Using the SCCP API
Outgoing Routing Control
Routing Without GT Translation
HP OpenCall SS7 does not perform a GT translation when the
application provides a point code. This point code is either a local point
code (LPC) or a remote point code (DPC).
In a calledPartyAddress, the point code can also be combined with an
SSN value or a GT value. Once the application sets the
pointCodePresent field of the calledPartyAddress parameter of an
sccp_xunitdata_req or sccp_connect_req primitive, SCCP checks the
pointCode value.
SSN
If the pointCode field of the calledPartyAddress contains the LPC (the
point code of the HP OpenCall SS7 platform), the primitive must be
forwarded to a local SSN user. The contents of the calledPartyAddress
are left untouched.
DPC and SSN
If the pointCode value of the calledPartyAddress contains a DPC, this
indicates that the sccp_xunitdata_req or sccp_connect_req primitive
must be sent to a remote SCCP user (SSN). The DPC is used by the
MTP3 to send a Connection Request (CR), Unit Data (UDT) or extended
Unit Data (XUDT) message to this remote point code.
The contents of the calledPartyAddress is not modified by the SCCP
routing control mechanism.
DPC and GT
Chapter 5
If the gt and the pointCode fields are both present in the
calledPartyAddress, GT translation does not occur. MTP routing of the
UDT message is determined by the DPC value contained in the
pointCode field. Translation is then performed by the DPC SCCP
translation tables.
171
Using the SCCP API
Outgoing Routing Control
Routing with Local GT Translation
When there is no pointCode value in the calledPartyAddress
parameter, then the HP OpenCall SS7 SCCP performs a local translation
on the value contained in the calledPartyAddress field.
The local GT translation can produce a local SSN address, a DPC or both.
GT = LPC and SSN If the calledPartyAddress parameter contains only a gt value, this
value is translated by the local translation tables to an LPC and an SSN
value. Because the translation returns an LPC, the
sccp_xunitdata_req or sccp_connect_req primitive is forwarded to a
local SCCP user (SSN2).
GT= PC
The local translation of a GT value can also produce a point code (PC1)
only. Because the point code is not an LPC, UDT containing the
calledPartyAddress (as defined in the sccp_xunitdata_req primitive)
is routed by MTP3 with the DPC set to PC1.
The gt value is translated to a pointCode (PC1). Therefore a UDT
message containing the calledPartyAddress is sent to PC1 via MTP.
GT = PC and SSN
Even if the calledPartyAddress parameter contains an SSN value
(SSN1), a GT translation must be performed on the gt value to
determine if the primitive is destined for a local SCCP user or if it must
routed through MTP to a remote SCCP user.
The gt value is translated into a point code (PC1) and a new SSN value
(SSN2). The values contained in the calledPartyAddress are modified:
the new SSN replaces the SSN value, and the routing indicator is set to
false (routing on Point Code) indicating that PC1 is the final DPC and
that SSN2 is a local user of PC1.
172
Chapter 5
Using the SCCP API
Incoming Routing Control
Incoming Routing Control
When HP OpenCall SS7 SCCP receives an mtp_transfer_ind from
MTP3, the calledPartyAddress parameter of the received SCCP
message is checked. The SCCP inbound routing mechanism is activated
by the contents of the calledPartyAddress parameter.
Chapter 5
173
Using the SCCP API
Incoming Routing Control
Figure 5-13
174
Message Transfer 3: MTP layer to SCCP Local Bus
Chapter 5
Using the SCCP API
Incoming Routing Control
Figure 5-14
Chapter 5
Message Transfer 4: Local User Entity to SCCP Interface
175
Using the SCCP API
Incoming Routing Control
Figure 5-15
176
Message Transfer 5: SCCP to TCAP or an Application on SCCP
API
Chapter 5
Using the SCCP API
Incoming Routing Control
Routing Without GT Translation
GT translation is not performed if the routing indicator in the incoming
calledPartyAddress is set to routing on PC (routOnGt=FALSE). This
indicates that the SCCP message received from the network is destined
for a local SSN, and retransmission is not necessary.
The SSN can be combined with a PC value in the received
calledPartyAddress.
SSN only
When the received calledPartyAddress only contains an SSN value
(SSN1), SCCP routes an sccp_xunitdata_ind or sccp_connect_req
primitive to the local SCCP user.
Before the primitive is passed to the application, the pointCodePresent
is set to SC_MtpUse indicating that the point code values of
calledPartyAddess and callingPartyAddress are retrieved from the
MTP routing label.
DPC and SSN
If the received calledPartyAddress contains both an LPC and an SSN,
then the sccp_xunitdata_ind or sccp_connect_ind passed to the
SCCP user (SSN1) with the pointCodePresent is set to SC_SccpUse.
This indicates to the application that the point code values were
previously present in the SCCP addressing labels.
Routing with Local GT Translation
Local GT translation is necessary when the incoming
calledPartyAddress only contains a GT value (gt). The local
translation of a gt produces either a local point code or a DPC and/or an
SSN.
Local PC and/or
SSN
The sccp_xunitdata_ind or sccp_connect_ind primitive is destined
for a local SCCP user if the GT translation of the received
calledPartyAddress returns only an SSN. Before the primitive is
passed to the SCCP user, the calledPartyAddress is modified.
DPC and/or SSN
Local GT translation can also result in the relay of the SCCP message. In
this case, the result of the local GT translation is used to determine the
outbound route of the SCCP message (the MTP3 label).
Chapter 5
177
Using the SCCP API
Return Option
Return Option
The HP OpenCall SS7 SCCP provides a return on error procedure if the
SCCP routing is unable to transfer a UDT or an XUDT message.
The message is returned undelivered to the originating SCCP user using
the sccp_xnotice_ind primitive if a signaling point or subsystem is
inaccessible or undefined in the SCCP routing information.
A message can only be returned if the callingPartyAddress parameter
contains the address of the originating SCCP user. The reason for the
message return is provided in the returnReason parameter of the
sccp_xnotice_ind. Table 5-6, “SCCP Parameters and Values,” lists the
possible values of this parameter.
To use the return option of the HP OpenCall SS7 SCCP, the application
must set the returnoption and callingPartyAddress parameters for
each sccp_xunitdata_req primitive sent by the application.
178
Chapter 5
Using the SCCP API
Return Option
Figure 5-16
Chapter 5
Returning an Undelivered Message
179
Using the SCCP API
Signaling Point Status Management
Signaling Point Status Management
Signaling point status management updates the status information
provided by MTP3 management primitives. This allows alternative
routing to backup signaling points and/or backup subsystems.
HP OpenCall SS7 does not provide alternative GT translations if a
remote PC is unavailable.
Signaling Point Prohibited
When an mtp_pause_ind primitive is received from MTP3,
HP OpenCall SS7 SCCP updates its status information to indicate that a
DPC is prohibited and that its backup signaling points must be used. All
the subsystems associated with DPC1 are also prohibited.
The application is notified of this situation by an sccp_state_ind
primitive. This primitive indicates to the application that a particular
SSN (SSN2) is out of service (UOS), and if there is a backup subsystem for
SSN2.
An sccp_pcstate_ind primitive indicating the status of the affected
DPC is also passed to the application.
180
Chapter 5
Using the SCCP API
Signaling Point Status Management
Figure 5-17
Chapter 5
Signaling Point Prohibited
181
Using the SCCP API
Signaling Point Status Management
Signaling Point Allowed
HP OpenCall SS7 SCCP receives an mtp_resume_ind primitive from
MTP3 if a DPC becomes accessible again.
As shown in the figure below, the application is notified by an
sccp_pcstate_ind primitive.
Figure 5-18
Signaling Point Allowed
Signaling Point Congested
SCCP updates the congestion status of the identified signaling point
when the HP OpenCall SS7 SCCP receives an mtp_status_ind
primitive from MTP3. The application is notified of the congestion
situation by an sccp_pcstate_ind primitive, as shown in the figure
below.
182
Chapter 5
Using the SCCP API
Signaling Point Status Management
Figure 5-19
Chapter 5
Signaling Point Congestion
183
Using the SCCP API
Subsystem Status Management
Subsystem Status Management
The status of subsystems is based on their failure, withdrawal and
recovery. A subsystem is said to be in service (UIS) or out of service (UOS).
Local Subsystem Out of Service
When a local subsystem goes out of service, SCCP is notified by an
sccp_state_req primitive from the subsystem. HP OpenCall SS7 SCCP
then modified its signaling information by marking the specific
subsystem as prohibited.
Other local subsystems are notified with the sccp_state_ind primitive.
Remote subsystems attached to a remote SCCP are notified with
Subsystem-Prohibited (SSP) messages.
Figure 5-20
184
Local Subsystem Out Service
Chapter 5
Using the SCCP API
Subsystem Status Management
Local Subsystem In Service
When a local subsystem returns to service, SCCP is notified by an
sccp_state_req primitive from the subsystem. HP OpenCall SS7 SCCP
then modifies status information by marking the specific subsystem as
allowed.
Other local subsystems are notified with sccp_state_ind primitive.
Remote subsystems attached to remote SCCP are notified with
Subsystem-Allowed (SSA) messages.
Figure 5-21
Chapter 5
Local Subsystem In Service
185
Using the SCCP API
Subsystem Status Test
Subsystem Status Test
This test procedure verifies the status of a subsystem when it is marked
as prohibited. It is initiated when an mtp_resume_ind primitive or an
SSP message is received. The subsystem status test is stopped if an
mtp_pause_ind or a Subsystem-Allowed (SSA) message is received.
The test procedure is performed in fixed time intervals for all subsystems
marked as prohibited. A Subsystem State Test (SST) message is sent
from the local SCCP to the SCCP of the failed subsystem. On receipt of
an SST, the state of the subsystem concerned is checked. If the
subsystem is in service an SSA message is returned.
186
Chapter 5
Using the SCCP API
Subsystem Status Test
Figure 5-22
Chapter 5
Subsystem Status Test
187
Using the SCCP API
Replicated Subsystems
Replicated Subsystems
The HP OpenCall SS7 SCCP supports the coordinated withdrawal of
local and peer subsystems.
Available Backup Subsystem
To smoothly withdraw a subsystem, the application must pass an
sccp_coord_req primitive from the specific SSN to the
HP OpenCall SS7 SCCP.
A Subsystem Out of Service Request (SOR) message is sent to the
backup subsystem. If the backup subsystem is available, a Subsystem
Out of Service Grant (SOG) message is returned, thus canceling the
T(Coord. chg.) timer.
SSP messages are broadcast, and T(ignore SST) timer is started. All SST
messages are ignored until T(ignore SST) expires or the requesting
subsystem indicates via an sccp_state_req primitive that it is out of
service.
An sccp_coord_conf primitive notifies the application that withdrawal
has been granted and that the requested subsystem is out of service.
188
Chapter 5
Using the SCCP API
Replicated Subsystems
Figure 5-23
Chapter 5
Successful Withdrawal of a Replicated Subsystem
189
Using the SCCP API
Replicated Subsystems
Unavailable Backup Subsystem
If a backup subsystem is not available, then an SOG is not returned by
the backup subsystem. An sccp_coord_conf primitive is passed to the
application to inform it that a subsystems request for withdrawal has
been denied (SC_denied_withdrawal).
Figure 5-24
190
Refused Withdrawal of a Replicated Subsystem
Chapter 5
Using the SCCP API
Replicated Subsystems
No Peer Point Code Configured
When there is no backup subsystem for a requesting subsystem, the
sccp_coord_req is handled locally as a graceful withdrawal.
SSP messages are broadcast, and all Subsystem Status Test (SST)
messages are ignored until the T(Ignore SST) timer expires or the
requesting subsystem indicates via a sccp_state_req primitive that it
is out of service.
A sccp_coord_conf primitive notifies the application that no backup
system is configured for its subsystem and the requested subsystem is
out of service.
Figure 5-25
Chapter 5
Graceful Withdrawal of a Replicated Subsystem
191
Using the SCCP API
SCCP Tutorial Programs
SCCP Tutorial Programs
Two tutorials (that is, example programs) named SccpClient and
SccpServer are provided with HP OpenCall SS7.
The source code is in the /opt/OC/tutorials/SS7 directory.
CAUTION
If you want to change a makefile or a tutorial supplied with
HP OpenCall SS7, you must first copy it to your own working directory.
You must not change the sources supplied with the HP OpenCall SS7
product in the directories in which they are delivered.
First, you must compile the two programs using the command cc_sccp.
This compiles both programs at the same time.
Then, you can run the programs on the client and server. When you run
them, you must provide the following parameters on the command line,
according to the configuration.
•
server and client point code
•
server and client sub system number
The programs SccpClient and SccpServer must run at the same time
on two separate SS7 stacks.
The names of the executables are SccpClient_32_xxx and
SccpServer_32_xxx (where xxx=WAA, ABB, WBB or AAA).
To run SccpClient on the client using SSN 10, enter:
SccpClient_32_AAA SS7_Stack_36 36 35 -o10 -r10
To run SccpServer on the server using SSN 10, enter:
SccpServer_32_AAA SS7_Stack_35 35 -o10
SccpClient.c
The client process emulates a database request generator. It generates a
random phone number and sends an SS7 message. This process then
receives an SS7 message containing a phone number resolved with a
user name from the server process SccpServer.
192
Chapter 5
Using the SCCP API
SCCP Tutorial Programs
SccpServer.c
This program is the server process. It receives requests for phone
number resolution from the client SccpClient, and finds in its directory
list a user name associated with the phone number. Then an SS7
message is returned to the client with a phone number and its associated
user name.
To run this program, you must provide an SS7 classname.
Chapter 5
193
Using the SCCP API
SCCP Tutorial Programs
194
Chapter 5
6
Using the TCAP API
This chapter describes the TCAP API and the functions that the
application can use to establish and maintain TCAP dialogues with a
remote TCAP user.
Chapter 6
195
Using the TCAP API
Overview
Overview
Chapter Organization
This chapter is organized in the following way:
•
General Description of TCAP
•
Features of the HP OpenCall SS7 TCAP
•
How to use the TCAP API
— Creating and scheduling TCAP stack connections
— Component Sublayer
— Transaction Sublayer
— Closing TCAP stack connections
•
Management guidelines
API Functions
Since release 3.1 of HP OpenCall SS7, the API function calls for previous
releases that use the TC_function (or TL_function) call syntax are
obsolete. Whenever a TCX_function (or TLX_function) exists, you must
use it instead of the equivalent TC_function (or TL_function). For
example, you must use TCX_open() instead of TC_open(), and
TLX_send() instead of TL_send(), etc.
These functions are listed in Table 6-1, “Obsolete API Functions.”
Table 6-1
Obsolete API Functions
Obsolete Function
(Not Supported in Release
3.2)
196
Function To Be Used
TC_close()
TCX_close()
TC_open()
TCX_open()
TC_recv()
TCX_recv()
Chapter 6
Using the TCAP API
Overview
Table 6-1
Obsolete API Functions (Continued)
Obsolete Function
(Not Supported in Release
3.2)
Function To Be Used
TC_select_mask()
TCX_select_mask()
TC_send()
TCX_send()
TL_recv()
TLX_recv()
TL_send()
TLX_send()
Migration
To migrate to the recommended functions, modify the application to take
the following into account.
•
Include the TCAP_ext.h include file
•
Replace the TC_ function calls by the TCX_ versions listed in
Table 6-1, “Obsolete API Functions.”
•
Use TCX_alloc_buffer() to determine message length.
•
Use TCX_alloc_component() to allocate components instead of
TC_control().
•
Select flag ANSI or ITU-T.
Compiling and Linking
The TCAP API is available as a shared library.
To know the compile and link directives to use, refer to the TCAP API
tutorial (see “TCAP Tutorial Programs” on page 275).
Chapter 6
197
Using the TCAP API
General Description of TCAP
General Description of TCAP
TCAP provides functions for the exchange of non-circuit related
information between remote entities and distributed applications. To
perform these objectives TCAP contains two sublayers: the component
sublayer and the transaction sublayer.
Component Sublayer
The component sublayer receives information from an application
containing the primitives and parameters necessary to invoke an
operation or request the services from another entity.
Transaction Sublayer
The transaction sublayer provides the information necessary for SCCP to
route the component information to its destination.
198
Chapter 6
Using the TCAP API
General Description of TCAP
Figure 6-1
Sublayers of TCAP
User application
TCAP
API
ISUP
& TUP
APIs
SCCP
API
MTP3/
M3UA
API
AG API
OA & M
APIs
TCAP
Component
Sublayer
Transaction
Sublayer
AMD shared
Sublayer
SCCP
Chapter 6
MTP level 3
M3UA
MTP level 2
SCTP
MTP level 1
IP
199
Using the TCAP API
General Description of TCAP
No Component Layer Option
The HP OpenCall SS7 platform provides a bypass to the TCAP
component-layer. User applications can use their preferred ASN1
compiler, and use only the TCAP transaction layer.
The TCAP layer then acts as a simple transport mechanism for a Local
or Remote API.
200
Chapter 6
Using the TCAP API
Types of TCAP Users
Types of TCAP Users
TCAP applications can interface the transaction sublayer either
indirectly, via the component sublayer as a TC-user, or directly via the
transaction sublayer as a TR-user.
Figure 6-2
TCAP Terms
Component
A component consists either of a request to perform an operation, or a
reply. Components are passed between an application and the component
sublayer. Several components may be transmitted in a single TCAP
message to a peer application.
Chapter 6
201
Using the TCAP API
Types of TCAP Users
Dialogue
The successive exchange of components between two TC-users is known
as a dialogue. The component sublayer provides dialogue facilities
allowing several dialogues to run concurrently between two remote
TC-users.
A dialogue can also be used for the transfer and negotiation of the
application context, and the transparent exchange of user information
between two remote ITU-T White Book TC-users.
Transaction
The setup of an end-to-end connection by the transaction sublayer on
behalf of the TR-users is known as a transaction. The transaction
sublayer provides the capability to exchange user data between
TR-users. It also allows the exchange transaction messages between peer
TR-layer entities by means of the Network Service Part (NSP).
TCAP Messages
The TCAP message format consists of three parts:
•
Transaction portion
The transaction portion contains protocol control information for the
transaction sublayer.
•
Dialogue portion (optional)
The dialogue portion is concerned with the application context and
optionally, user information. This portion is only present in ITU-T
White Book TCAP messages.
•
Component portion
The component portion contains information about individual
operations and their responses to operators.
202
Chapter 6
Using the TCAP API
Types of TCAP Users
Figure 6-3
TCAP Message Structure
Message Length
The TCAP and SCCP message length is expandable to 2,000 bytes if the
extended TCAP API or SCCP API is used.
Addressing
In an SS7 environment using a connectionless network service, TCAP
uses SCCP addressing.
Chapter 6
203
Using the TCAP API
The HP OpenCall SS7 TCAP API
The HP OpenCall SS7 TCAP API
The available TCAP versions include:
•
ANSI 90
•
ITU-T Blue Book (1988)
•
ITU-T White Book (1992)
The HP OpenCall SS7 TCAP API provides:
•
The TCAP API enables you to build messages of up to 2000 bytes in
length. You must allocate the buffer and component structure. This
functionality is available in ANSI and ITU-T.
•
Component handling and function calls. TCX_ function calls provide
better control of processes. Many commands handled by invoking the
TCX_control() function are now function calls in their own right,
although TCX_control() calls will still work.
•
TCAP connection takeover without loss of traffic. The application can
have 2 connections to TCAP in an active/standby configuration. They
can be set so that if the active connection fails, the standby
connection will take the traffic. This provides the possibility of
software redundancy, having one application ready to take over the
traffic if the active application connection fails.
Hybrid Stacks
HP OpenCall SS7 ITU-T White Book TCAP connects with ANSI SCCP,
thus providing ANSI and ITU-T application access to the SS7 network.
Connections for applications using the SCCP ITU-T White Book will be
refused, as shown in Figure 6-4, “Hybrid stack: Application Connection.”
204
Chapter 6
Using the TCAP API
The HP OpenCall SS7 TCAP API
Figure 6-4
Hybrid stack: Application Connection
General
Restriction - Use
of Global Title
The only restriction imposed on ITU-T White Book TCAP applications
using a hybrid stack is the use of the Global Title. Only types 1 and 2 of
the Global Title are supported, types 3 and 4 are not recognized by ANSI
SCCP.
Reverse Hybrid Stacks
HP OpenCall SS7 also provides TCAP ANSI that can connect to ITU-T
SCCP Blue Book (ABB). It is called the Reverse Hybrid Stack.
Connections for applications using the SCCP ANSI will be refused, as
shown in Figure 6-5, “Reverse Hybrid Stack: Application Connection.”
Chapter 6
205
Using the TCAP API
The HP OpenCall SS7 TCAP API
Figure 6-5
Reverse Hybrid Stack: Application Connection
Dialogue Portion
A TCAP application can negotiate the Application Context or
transparently transfer user data by using the Dialogue Portion as
described in ITU-T White Book TCAP.
ITU-T Blue Book TCAP applications are also supported by the White
Book TCAP if the Dialogue Portion is not included in any dialogue
handling primitives.
Non-disruptive Service Update
Access to TCAP can be outgoing only, thus allowing a TCAP user to
initiate transactions without accepting incoming transactions.
With this feature, a TCAP user can terminate its access to TCAP and
update its service, without any transactions with a remote TCAP user
being aborted or lost.
206
Chapter 6
Using the TCAP API
The HP OpenCall SS7 TCAP API
Direct Access to the Transaction Sublayer
The TCAP API allows a TCAP user to access the transaction sublayer
either indirectly, by using the component sublayer mechanisms, or
directly, bypassing the component sublayer.
With direct access to the transaction sublayer, the TCAP user can use an
ASN.1 compiler to encode and decode non-standard components,
operations and parameters.
Message Priority
You can set the priority of the outgoing messages. If the MTP level 3
becomes congested, it will discard the messages with the lowest priority
and keep those with the highest priority. This is set in the TCAP
parameter tcx_importance. See “SCCP Service Quality Structure” on
page 246.
Messages with priority 0 will be discarded at SCCP level if there is
remote SP congestion. If the return option is set, a UDTS with the cause
of network congestion is returned to the initiator of the message. For
other priorities (1 or 2) the messages are given to MTP3 which is
responsible for discarding them according to the level of congestion.
The same rule applies to messages coming from the network that must
be relayed by SCCP after a translation.
NOTE
SCCP management messages (SSA, SSP, SST, SOR, SOG) have a default
priority of 0. This value can be changed via the SetMgtMsgPriority
parameter. Use SAM menu options Actions | View/Modify | Signalling
Protocols | SCCP.
Receive
Mechanism,
Buffering and Test
Message
To improve throughput the TCAP API stores incoming messages from
the SS7 stack in a buffer. A more_messages parameter is set during the
TCX_recv() call to indicate the number of TCAP messages that are still
waiting to be received. These messages are received by the user one by
one with a TCX_recv() call. Because of this:
•
Chapter 6
The select() call (used in conjunction with TCX_select_mask) will
trigger only once for several TCAP messages grouped in the same
packet.
207
Using the TCAP API
The HP OpenCall SS7 TCAP API
•
One TCX_recv() gives one message to the user, but several may have
been received from the socket.
The timeout returned by TCX_select_mask(), and used in select(),
forces the user to call TCX_cnx_handler() periodically to serve TCAP
connections.
The size of the TCX_recv() buffer can be configured with a
TCX_control() command.
SS7 Stack Switchover
A 2-host cluster contains two host servers and provides highly available
SS7 connectivity and functionality (using redundant software and
hardware components). 2-host HP OpenCall SS7 platforms achieve
continuous software availability by replicating and synchronizing an SS7
Stack on each of the two hosts. If a failure occurs on one of the hosts, the
other will take care of the traffic. The process of moving the activity from
one host to the other is known as a switchover.
Controlling the
TCP/IP Flow
The default configuration for the API is to send every TCAP message to
the SS7 stack immediately. In some cases it may be necessary to optimize
message transfer between the API and the SS7 stack. This is always
done from the SS7 stack to the API. In the other direction it must be
controlled by the user.
When transfer optimization is on, the TCAP API concatenates several
TCAP messages in one buffer. This buffer is sent to the SS7 stack
provided one of the following conditions is met:
•
The buffer is full
•
The transit time of the first message in the buffer has been exceeded
As the API does not use any process signals, in order to fulfil the second
condition, the API must be called regularly by the user process to check if
the transit time has been exceeded. The call that should be used is the
TCX_cnx_handler call. If there is nothing to send or receive, the user
may also call TCX_control with OUT_BUFFER_FLUSH_COND.
The command OUT_BUFFER_FLUSH forces the API to send the buffer
contents whether the above conditions are satisfied or not.
208
Chapter 6
Using the TCAP API
The HP OpenCall SS7 TCAP API
The transit time for each message is computed depending on the average
load at the time when the message is put in the buffer. It varies between
two limits, which can be set by the LOW_TRANSIT_TIME and
HIGH_TRANSIT_TIME controls.
The OUT_IPC_BUFFER_SIZE command configures the size of the socket
internal buffer (refer to setsockopt command).
Transparent SS7
Stack Replication
The replication of the SS7 stack is transparent to all TCAP users. When
TCX_open() is called, the TCAP API automatically establishes an IPC
channel with each SS7 stack. The TCAP API transparently manages
these channels and automatically directs the traffic to the active SS7
stacks. Thus, the TCAP user is only notified of a failure when both SS7
stacks are unable to provide any service.
Figure 6-6
Transparent SS7 Stack Replication
Notification
If one of the active SS7 Stacks handling the traffic fails, all the
transactions being handled by this stack are aborted, and the TCAP
users are notified through a TC_P_ABORT primitive for each
transaction lost. The TCAP user must reset its local timers and
state-machines.
Chapter 6
209
Using the TCAP API
The HP OpenCall SS7 TCAP API
Simultaneous Access by Multiple TCAP Users
Multiple TCAP users can simultaneously access TCAP using the same or
different SSNs. When the application opens a TCAP connection to the
SS7 stack, the connection is assigned an SSN.
If multiple TCAP users use the same SSN to access TCAP, by default all
incoming traffic is shared between the TCAP users using a round-robin
algorithm. However, if the TCAP Application Message Dispatcher
feature is used, incoming messages are shared between TCAP users
using a customer-supplied algorithm (see Chapter 7, Using the TCAP
Application Message Dispatcher, and the HP OpenCall SS7 Welcome
Guide).
It is possible to assign multiple SSNs to a single TCAP user or multiple
TCAP users on a single or multiple systems.
Single TCAP User
A single TCAP user can establish multiple TCAP stack connections. Each
connection can be given identical or different SSN values.
Figure 6-7, Single TCAP User with Multiple TCAP Stack Connections,
shows how a single TCAP user, using TCX_open(), can open two TCAP
stack connections identified as cnx_id1 and cnx_id2. cnx_id1 is
assigned the SSN value SSNy, and cnx_id2 is assigned the SSN value
SSNx.
Thus, all dialogues/transactions destined for SSNx and SSNy are received
by the same TCAP user.
Figure 6-7
210
Single TCAP User with Multiple TCAP Stack Connections
Chapter 6
Using the TCAP API
The HP OpenCall SS7 TCAP API
Multiple TCAP
Users
If several TCAP users are connected with the same SSN on the same
stack, by default, all incoming transactions/dialogues are shared
between them using a round-robin algorithm. All incoming TC_BEGINs
are distributed statistically. All other transaction primitives are sent to
the user handling the transaction.
The maximum number of connections is 32, with up to 8 SSNs.
Figure 6-8, Multiple TCAP Users on the SS7 Stack, shows two TCAP
users connected the SS7 Stack. Each stack connection is assigned an
SSN value. Both TCAP USER1 and TCAP USER2 have 3 stack connections
each. Each stack connection is assigned an SSN value.
All the stack connections belonging to TCAP USER2 have the same SSN
values as the stack connections belonging to TCAP USER1. Hence, all
transactions/dialogues routed to SSNy, SSNx and SSNz are shared
between TCAP USER1 and TCAP USER2.
Figure 6-8
Chapter 6
Multiple TCAP Users on the SS7 Stack
211
Using the TCAP API
The HP OpenCall SS7 TCAP API
Take-over of TCAP Connections
The application can make active a second connection with the same
application_id and instance_id as an already open/active connection.
When this is done the first connection no longer accepts new incoming
dialogues but continues to process dialogues in progress. In the following
figure, two sets of replicate connections are shown, each set having the
same SSN.
Figure 6-9
open/active, open/active and open/non-active, open/non-active
Active and
non-active
The state of active and non-active is the responsibility of two identifiers,
instance_id and application_id. The open/active connections accept
traffic. The open/non-active connections have the same application_id
and instance_id as the open/active connections but do not accept any
new incoming dialogues. The application needs to make active the
non-active connections in order for them to begin processing traffic.
If a second connection was previously configured, TCAP connection
take-over occurs automatically if the first connection goes down. TCAP
connection take-over can also occur on the specific request of an API. In
this case the first connection no longer accepts new traffic but continues
to process dialogs in progress. All new traffic uses the second connection.
application_id
The application_id is a user-application identifier.
See “Creating TCAP Stack Connections Using TCX_open()” on page 220.
212
Chapter 6
Using the TCAP API
The HP OpenCall SS7 TCAP API
Load sharing is possible by setting up several connections with the same
application_id and different instance_id and by distributing
in-coming traffic over these connections. This assumes that all instances
of an application_id are connected on the same SSN.
instance_id
The instance_id is defined within an application_id, identifying an
instance of the application, and is exclusive.
See “Creating TCAP Stack Connections Using TCX_open()” on page 220.
Open/active to
open/non-active
When the connection in the open/active mode goes to open/non-active two
main events occur:
1. The once open/active connection, now open/non-active, refuses any
further TC_BEGIN() primitives, but it still accepts all other
primitives. This allows it to refuse any new transactions while at the
same time allowing it to complete any ongoing transactions.
2. The open/non-active connection passes to open/active and it begins to
accept TC_BEGIN() primitives, hence accepting all new traffic that
would have gone to the now non-active connection.
Figure 6-10
Non-active to
closed
Chapter 6
open/non-active, open/active and open/active, open/non-active
To close the open/non-active connection you need to call TCX_close.
Otherwise the connection will stay open/non-active. If you want the
connection to be automatically closed, you can set the CloseOnCreate
option to YES using SAM.
213
Using the TCAP API
The HP OpenCall SS7 TCAP API
Figure 6-11
closed, open/active and open/active, open/non-active
Using ITU-T White Book TCAP for ITU-T Blue Book
TCAP Applications
To run an ITU-T Blue Book TCAP application using the ITU-T White
Book version of TCAP, you must observe the following conditions:
NOTE
214
•
The dlg_info_present fields of all tc_primitive structures must
be set to TC_NO.
•
The address type of the o_address field in tc_primitive must be
set to NO_TC_ADDRESS. This ensures that the option to alter the
originating address will not be used.
•
The application must be recompiled using -DTCAP_WHITE.
•
The application must be re-linked using the White Book library,
libSS7util.a (or libSS7util.sl) library.
Using the ITU-T White Book version of TCAP for ITU-T Blue Book
applications does not guarantee that Blue Book applications will not
receive and understand White Book transactions/dialogues.
Chapter 6
Using the TCAP API
The HP OpenCall SS7 TCAP API
Called and Calling Party Address
You can set the called and calling party address from TCAP by setting
parameters in file sys.<className>_TDx.tcap. You can change the
calling address specified in TC_CONTINUE, TC_END, or TC_U_ABORT when
TCAP receives a TC_BEGIN from the network. Use SAM menu options
Actions | View/Modify | Signaling Protocols | TCAP. In the case of
multiple stacks, there is an extra step in which you select the stack
concerned. This step comes after the menu option Signaling Protocols
(you select the stack by its LPC, and then you click on the Signaling
Protocol Configuration option).
You can also control what information is stored in the called address by
TCAP when routing on Global Title. It is used only after receiving
TC_BEGIN or TC_QUERY. It does not concern the application; the
application will receive the called address without any modification. This
address is reused as the calling address for each outgoing TCAP
message.
Chapter 6
215
Using the TCAP API
How to Use the TCAP API
How to Use the TCAP API
Overview
Several steps are required to give TCAP the primitives and parameters
necessary to invoke an operation, or to request services from another
entity. These steps are outlined here with a brief description, and then
the relevant sections are referenced. Most TCAP calls are defined in the
header file TCAP_ext.h.
Creating TCAP Stack Connections
First you must open a connection to the stack. The connection allows the
application to access the TCAP services either as a TC-user or as a
TR-user. The application must ask TCAP to open this connection using
TCX_open().
See “Creating TCAP Stack Connections Using TCX_open()” on page 220.
Scheduling TCAP Stack Connections
Secondly, you must schedule all the connections using the
HP OpenCall SS7 scheduling mechanism and the following function
calls:
•
TCX_select_mask()
•
select()
•
TCX_cnx_handler()
See “Scheduling TCAP Stack Connections” on page 224.
If TC-user, Use Invoke and Dialogue ids
If you are a TC-user, the application must use the invoke and dialogue
ids to allow several invocation and dialogues to be simultaneously active.
See “Using the Component Sublayer” on page 227.
Continue on to “Using the Component Sublayer, for TC-users” on
page 217.
216
Chapter 6
Using the TCAP API
How to Use the TCAP API
If TR-user, then...
If you are a TR-user, the application must manage all memory allocation,
component handling, and transactions.
See “Using the Transaction Sublayer” on page 261.
Using the Component Sublayer, for TC-users
The following sections only apply to TC-users using the component
sublayer of the TCAP API, unless specified otherwise.
Using the TCAP Component Structure
The TCAP API provides a C structure tcx_component, which builds the
component list so that you can exchange component data between the
application and the TCAP API.
See “Using the TCAP Component Structure” on page 232.
Allocate, Fill, Allocate
To create the components, you must allocate a component list structure,
fill it with user data, and allocate a buffer. Use TCX_alloc_component()
to allocate the component list, and TCX_alloc_buffer to allocate the
buffer.
See “Allocating Components to a List” on page 236.
Storing the Components
The application passes components to the component sublayer of the
TCAP API library individually using the TCX_put_component().
To create a components list with one component, you must make a
component list of one using TCX_alloc_component().
See “Storing the Components” on page 230.
Chapter 6
217
Using the TCAP API
How to Use the TCAP API
Create a Dialogue Primitive
The application must now create a dialogue primitive to request the
transmission of the components to the remote TC-user. The purpose of
the dialogue primitive is to request or indicate the dialogue handling
functions supported by the component sublayer.
See “Dialogue Handling” on page 243.
Sending Components and the Dialogue Primitive
TCX_send() assembles and transmits TCAP messages to the transaction
sublayer.
The dialogue primitive comes from the application and the encoded
components from the component sublayer of the TCAP API library, then
both the primitive and encoded components go to the transaction
sublayer.
See “Sending Components via the Component Sublayer Using
TCX_send()” on page 254.
Releasing Buffers and Components
There are three commands to use to release component structures and
buffers:
•
TCX_free_components()
•
TCX_free_buffer()
•
TCX_flush_components()
See “Releasing Buffers and Components” on page 241.
218
Chapter 6
Using the TCAP API
How to Use the TCAP API
Receiving TCAP Components
The application must use a TC-user connection to receive TCAP
messages. This again involves creating and scheduling a TCAP stack
connection. Then the application must use TCX_recv().
See “Creating TCAP Stack Connections Using TCX_open()” on page 220.
See “Receiving Components from the Component Sublayer Using
TCX_recv()” on page 257.
Extracting
components
After receiving a TCAP message with TXC_recv(), the components are
decoded but they remain in the internal API component list. The
application must extract these components individually from the
component sublayer using TCX_get_component().
See “Extracting Components Using TCX_get_component()” on page 260.
Closing TCAP Stack Connections for TC-users and
TR-users
Closing, and thus destroying a TCAP stack connection, must only be
done when you are certain that the application will not use the
connections again.
NOTE
Only close a TCAP stack connection when you are sure the application no
longer needs it.
If a connection is repeatedly opened and closed, the application will place
high overhead on the TCAP API mechanism.
A TCAP service is terminated when the application closes a stack
connection using TCX_close(). All the entities associated with this stack
connection are also closed, and all calls to TCX_send(), TLX_send(),
TCX_recv(), or TLX_recv() will be refused.
See “Closing TCAP Stack Connections Using TCX_close()” on page 264.
Chapter 6
219
Using the TCAP API
Creating TCAP Stack Connections Using TCX_open()
Creating TCAP Stack Connections Using
TCX_open()
The TCAP API creates stack connections on behalf of the application.
The application can request the services of the component and/or the
transaction sublayers via the connections created by TCX_open().
TCX_open() creates a new TCAP access point (stack connections),
allowing the application to access the TCAP services either as a TC-user
or a TR-user. If successful, TCX_open() returns a connection Identifier
(tcx_cnxid) that must be used in all subsequent calls related to the stack
connection.
To enable multiple connections, you will also have to set some of the
following parameters using SAM:
Table 6-2
Multiple Connection Configuration
If you...
...then set the
parameter...
...to...
do not want this functionality
autoSwitch
NO (default)
want the secondary connection to become active if the
primary fails
want the primary connection to be closed when the
secondary connection becomes active
YES
closeOnEnable
want the primary connection to become standby
when the secondary connection becomes active
want to close the existing primary connection when a
new primary connection is created
want to make the existing primary connection
secondary when a new primary connection is created
YES
NO (default)
closeOnCreate
YES
NO (default)
When a connection becomes secondary, it receives an MGT primitive
with a DESACTIVATE stats type even if the connection is closed later.
For more details about syntax, parameters, and return values, see the
TCX_open() man page.
220
Chapter 6
Using the TCAP API
Creating TCAP Stack Connections Using TCX_open()
The parameters closeOnEnable, closeOnCreate, and autoSwitch can
be set for each layer and apply to the API that connects to that layer. For
example, setting closeOnCreate in SCCP means that applications
connecting directly to SCCP will be subject to closeOnCreate, while
applications connecting to MTP3/M3UA or TCAP will not be affected.
NOTE
Only the values of the highest configured layer can be modified. This
means that when SCCP + TCAP have been configured, only the values
for TCAP can be modified, and those for MTP/M3UA and SCCP MUST
NOT be modified. If only SCCP has been configured as the upper layer,
the values for MTP/M3UA MUST NOT be modified.
Example: Creating a TC-user Connection
This code fragment shows how to make a TC-user connection.
/* Example of TCX_open (): */
#include <TCAP_ext.h>
#include <TCAP_errors.h>
tcx_application_info AppliInfo;
char ErrorMessage[100];
struct timeval
timeoutValue;
timeoutValue=1; /* value in seconds */
AppliInfo.mode= TCX_CNX_OVERWRITE ;
AppliInfo.application_id= TCAP_APPLICATION_ID;
AppliInfo.instance_id = InstanceId; // User application identification
CnxId =
TCX_open(ClassName,
TCX_TCAP_STD,
OSSN,
TC_YES,
TC_YES,
&AppliInfo,
TCX_SCCP_SERVICE_ITU_WB,
&timeoutValue);
/*Error Handling for TCX_open () */
if (CnxId == -1)
{
/* An error has occured during TCX_open */
Chapter 6
221
Using the TCAP API
Creating TCAP Stack Connections Using TCX_open()
/* You should consult tc_errno to know the reason */
switch (tc_errno)
{
case TCE_ILLEGAL_VALUE :
sprintf(ErrorMessage,“TCX_OPEN error: You have used an illegal value
(%d)”,tc_errno);
break;
case TCE_NO_CONFIG :
sprintf(ErrorMessage,“TCX_OPEN error: global.conf not be accessed (%d)”,
tc_errno);
break;
case TCE_BAD_CONFIG :
sprintf(ErrorMessage,“TCX_OPEN error: global.conf could not be parsed for %s
(%d)”, ClassName, tc_errno);
break;
case TCE_MEMORY_ERROR :
sprintf(ErrorMessage,“TCX_OPEN error: The application could not allocate
memory”
break;
case TCE_CONNECT_INIT :
sprintf(ErrorMessage,“TCX_OPEN error: A connection to SS7 stack cannot be
established (%d)”, tc_errno);
break;
case TCE_MAX_USERS :
sprintf(ErrorMessage,“TCX_OPEN error: The maximum number of TCAP users has
been exceeded (%d)”, tc_errno);
break;
<parameter>OR</parameter>
sprintf(ErrorMessage,“TCX_OPEN error : The maximum number of open connections
from the application has been exceeded (%d)”, tc_errno);
break;
case TCE_INVALID_SSN :
sprintf(ErrorMessage,“TCX_OPEN error : The SSN provided for this user is not
within the correct range (%d)”, tc_errno);
222
Chapter 6
Using the TCAP API
Creating TCAP Stack Connections Using TCX_open()
break;
case TCE_CNX_ID :
sprintf(ErrorMessage,“TCX_OPEN error : The returned cnxId is not
available. Close this cnxId and try to reopen it (%d)”, tc_errno);
break;
case TCE_API_BUSY :
sprintf(ErrorMessage,“TCX_OPEN error: The API is looking for a backup
connection.
Retry later (%d)”, tc_errno);
break;
case TCE_NO_SSN :
sprintf(ErrorMessage,“TCX_OPEN error : The given SSN has not been
configured(%d)”, tc_errno);
break;
case TCE_NO_SERVICE :
sprintf(ErrorMessage,“TCX_OPEN error : The required service doesn’t
exist (%d)”, tc_errno);
break;
case TCE_BAD_VERSION :
sprintf(ErrorMessage,“TCX_OPEN error : API version is not supported by
SS7 stack (%d)”, tc_errno);
break;
default :
sprintf(ErrorMessage,“TCX_OPEN error : TCX_open returned an unknown error value
(%d)”, tc_errno);
break;
} // End of switch()
fprintf(stderr,“%s\n”, ErrorMessage);
}
else {
/* Connection is OK */
......
}
Chapter 6
223
Using the TCAP API
Scheduling TCAP Stack Connections
Scheduling TCAP Stack Connections
As described in “Scheduling SS7 Connections” on page 72, you must
schedule all the stack connections using the HP OpenCall SS7
scheduling mechanism. Scheduling the TCAP stack connections is
achieved by using:
NOTE
•
TCX_select_mask()
•
select()
•
TCX_cnx_handler()
The read, write and exception masks must be used with all three
commands.
TCX_select_mask()
This pre-select function is used for all TCAP stack connections. It takes
the file descriptor masks created by the application, and sets them to
include the file descriptors used by the API to manage the TCAP stack
connections. The application must call this function before calling
select().
For details about syntax, parameters, and return values, see the
TCX_select_mask() man page.
select()
The select() function is used for all HP OpenCall SS7 scheduling. It
modifies the read, write and exception masks created by
TCX_select_mask() to indicate which sockets are to be used.
224
Chapter 6
Using the TCAP API
Scheduling TCAP Stack Connections
TCX_cnx_handler()
It is mandatory to call TCX_cnx_handler after every use of select().
TCX_cnx_handler() requests the API to process the masks returned by
select() and manage the internal mechanisms. An array of stack
connection identifiers is used to identify the stack connections that have
messages waiting to be received by the application.
Activity on the connection is flagged when one of the following events
occurs:
•
A message is received by the SS7 stack.
•
An L_cancel is generated by the API and must be extracted by the
receive function call.
•
A closed connection is found (a send or receive call returns an error).
The application should call the close function to deallocate API
resources.
•
A connection goes from busy state (API_BUSY) to normal state. The
application can resume processing (send and receive calls no longer
return an error).
For details about syntax, parameters, and return values, see the
TCX_cnx_handler() man page.
Example: Scheduling a TCAP Stack Connection
This is a code fragment of how to schedule a TCAP stack connection.
/* Example of scheduling stack connection: */
while( 1 ){
/* init select bit masks & timer in each loop */
FD_ZERO(&readMask);
FD_ZERO(&writeMask);
FD_ZERO(&exceptMask);
tmout.tv_sec = 2;
tmout.tv_usec = 0;
time = &tmout;
/*
*
HP OC SS7 select phase
*/
numFd = TCX_select_mask(0, &readMask, &writeMask, &exceptMask, &time);
n = select(numFd, &readMask, &writeMask, &exceptMask, time);
Chapter 6
225
Using the TCAP API
Scheduling TCAP Stack Connections
if ( n < 0 )
{
/* select error Mgmt */
switch(errno)
{
case EINTR:
/* note that select exit with EINTR if a sigalarm is received */
/* continue processing */
break;
default:
printf (“Error during select, reason: %d\n”, errno );
exit (-1);
}
}
/*
*
end of HP OC SS7 select phase
*/
num_cnx = MAX_FD;
cnx_active[0] = -1;
TCX_cnx_handler(n, &readMask, &writeMask, &exceptMask, &num_cnx, cnx_active);
/*
*
end of HP OC SS7 select phase
*/
if ( (num_cnx > 0) && ( cnx_active[0] == cnxId) )
{
more = 1; p_type = 0; prov_id = 0;
/* Receive all possible messages arrived */
..............
226
Chapter 6
Using the TCAP API
Using the Component Sublayer
Using the Component Sublayer
The application exchanges components with the TCAP component
sublayer via a scheduled TC-user connection. The component sublayer
manages the association between operations and results.
Invoke ID
The request to perform a remote operation is called an invocation. It is
identified by an invoke ID which allows several invocations of the same
or different operations to be simultaneously active.
Only one reply is sent to an operation. A reply carries an indication of
success or failure of the operation, and the operation’s invoke ID.
Dialogue ID
The component sublayer provides dialogue facilities which allow several
dialogues to run concurrently between two TC-users. Two types of
facilities are provided:
•
Unstructured dialogues
The application can send components without forming an explicit
association with the end TC-user. No replies are returned.
•
Structured dialogues
The application can form an explicit association with a TC-user using
a structured dialogue. A structured dialogue allows the application to
run several dialogues concurrently where each dialogue is identified
by a dialogue ID.
Invocation and Dialogue Handling
Figure 6-12, Invocation and Dialogue Handling, describes how multiple
invocations of the same operation are managed using invoke ids. This
figure also shows how a dialogue id locally identifies a dialogue between
two TC-users.
Chapter 6
227
Using the TCAP API
Using the Component Sublayer
Figure 6-12
Invocation and Dialogue Handling
1
TC-USER1 requests the remote invocation of an operation (op1) by TC-USER3. The invocation is
identified by the invoke id w, and the dialogue between TC-USER1 and TC-USER3 is locally identified
with the dialogue id z1.
2
A TCAP BEGIN message containing the invoke id w and the dialogue id z1 is sent to TC-USER3.
3
TC-USER3 receives an invocation component with invoke id w. TC-USER3 locally identifies its dialogue
with TC-USER1 with the dialogue id z2.
4
After TC-USER3 performs the operation op1 as requested by TC-USER1, the reply is returned to
TC-USER1 in a result component identified by the invoke id w.
228
Chapter 6
Using the TCAP API
Using the Component Sublayer
5
A TCAP END message containing the result component and TC-USER1 dialogue id z1 is sent to
TC-USER1.
6
TC-USER1 receives a reply from TC-USER3. Invoke id w matches the reply with the invocation. The
dialogue id z1 indicates that the result component came from TC-USER3.
7
TC-USER1 simultaneously requests TC-USER2 to perform operation op1. This invocation is identified by
the invoke id x, and TC-USER1 locally identifies its dialogue with TC-USER2 with the dialogue id y1.
8
A TCAP BEGIN message containing the invoke id x and the local dialogue id y1 is sent to TC-USER2.
9
TC-USER2 receives an invocation component with invoke id x. TC-USER2 locally identifies its dialogue
with TC-USER1 with the dialogue id y2.
10
After TC-USER2 performs the operation op1 as requested by TC-USER1, the reply is returned to
TC-USER1 in a result component. The result component is identified by the invoke id x.
11
A TCAP END message containing the result component and TC-USER1‘s dialogue id y1 is sent to
TC-USER1.
12
TC-USER1 receives TC-USER2’s reply. Invoke id x matches the reply with the corresponding invocation.
The dialogue id y1 indicates that the result component came from TC-USER2.
Chapter 6
229
Using the TCAP API
Creating a Component
Creating a Component
To create a component, you must
•
allocate the component list structure and number of components you
want to put in the list by using TCX_alloc_component() (one
component makes a list of one)
•
build the component structure by using tcx_component
•
allocate the buffer to contain the data by using TCX_alloc_buffer()
•
fill the user data in the allocated buffer
Now you need to store the components in the TCAP API Library.
Storing the Components
Before calling TCX_send() to encode and transmit the components to the
transaction sublayer, the components must be stored one by one in the
TCAP library using TCX_put_component(). Error checking is done each
time TCX_put_component() is used and any component causing an error
can be readily identified.
When you use TCX_send(), all stored components are encoded then the
dialogue primitive and encoded components are sent to the transaction
sublayer.
230
Chapter 6
Using the TCAP API
Creating a Component
Figure 6-13
Chapter 6
Storing the components within the TCAP library
231
Using the TCAP API
Using the TCAP Component Structure
Using the TCAP Component Structure
The TCAP API provides a C structure, tcx_component, which builds the
component list so that you can exchange component data between the
application and the TCAP API.
tcx_component
Components consist of a type and any parameters required to be used
when invoking a specific operation or replying to an operation.
The tcx_component structure is defined in the header file TCAP_ext.h.
232
Chapter 6
Using the TCAP API
Using the TCAP Component Structure
tc_component_type
Most component types are common to both ITU-T and ANSI defined
components.
The following table lists the component types that must be used to create
a component. The table also identifies whether the component type is
supported by ITU-T and/or ANSI.
Table 6-3
TCAP Component Types
Component
Type
Meaning
ANSI
ITUT
TC_INVOKE
Invocation of an operation.
-
✓
TC_INVOKE_L
Invocation of an operation. Component list is complete.
✓
-
TC_INVOKE_NL
Invocation of an operation. More components expected.
✓
-
TC_RESULT_L
Last part of a successful segmented result.
✓
✓
TC_RESULT_NL
Segment of a successful result.
✓
✓
TC_U_ERROR
Unsuccessful result, the invoked operation could not be
executed by the remote TC-user.
✓
✓
TC_U_CANCEL
Local cancel.
✓
✓
TC_L_CANCEL
Timeout of associated operation timer.
✓
✓
TC_U_REJECT
Rejection of an invalid component by remote TC-user.
✓
✓
TC_L_REJECT
Rejection of an invalid component by local component
sublayer.
✓
✓
TC_R_REJECT
Rejection of an invalid component by remote component
sublayer.
✓
✓
Chapter 6
233
Using the TCAP API
Using the TCAP Component Structure
Component Type Structure
Although some component types are common to both ANSI and ITU-T
TCAP, the structure of the component type is not identical. When you are
creating a TCAP component you must ensure that at least the
mandatory parameters as defined in Table 6-4, Structure of ANSI and
ITU-T Components, contain valid values.
Table 6-4
Structure of ANSI and ITU-T Components
Component Type
Parameters
Mandatory/Optional
TC_INVOKE
class
mandatory
invoke_id
mandatory
link_id
optional
operation
mandatory
parameter
optional
timeout
mandatory
class
optional
invoke_id
mandatory
correlation_id
optional
operation
mandatory
parameter
optional
timeout
optional
class
optional
invoke_id
mandatory
correlation_id
mandatory
operation
mandatory
parameter
optional
timeout
optional
TC_INVOKE_L
TC_INVOKE_NL
234
Chapter 6
Using the TCAP API
Using the TCAP Component Structure
Table 6-4
Structure of ANSI and ITU-T Components (Continued)
Component Type
Parameters
Mandatory/Optional
TC_RESULT_L
invoke_id
mandatory - ITU-T only
correlation_id
mandatory - ANSI only
operation
optional - ITU-T only
parameter
optional
invoke_id
mandatory - ITU-T only
correlation_id
mandatory - ANSI only
operation
optional - ITU-T only
parameter
optional
invoke_id
mandatory - ITU-T only
correlation_id
mandatory - ANSI only
error
mandatory
parameter
optional
TC_U_CANCEL
invoke_id
mandatory - ITU-T only
TC_L_CANCEL
correlation_id
mandatory - ANSI only
TC_U_REJECT
invoke_id
mandatory - ITU-T only
TC_L_REJECT
correlation_id
mandatory - ANSI only
TC_R_REJECT
problem_code
mandatory
parameter
optional
TC_RESULT_NL
TC_U_ERROR
Chapter 6
235
Using the TCAP API
Allocating Components
Allocating Components
After defining the component structure, you must allocate the
component, fill in the user data, and allocate adjoining buffer structure.
The application passes components to the component sublayer
individually using TCX_put_component(). The components are then sent
in a single message to the remote end.
Components in a message are delivered to the remote TC-user in the
same order as they were provided by the application.
All component memory allocation is performed by the TCAP API.
Allocating Components to a List
If you want to pass the components to the component sublayer to have
them stored there, you must take the following steps.
1. Allocate a component list of one using TCX_alloc_component().
2. Allocate one buffer for the one component of data using
TCX_alloc_buffer().
3. Fill in the data.
4. Use TCX_put_component() on each component of the link to send it
to the component sublayer. See “Passing a Component to the
Component Sublayer Using TCX_put_component” on page 240.
The parameters for TCX_alloc_component() and TCX_alloc_buffer()
follow.
TCX_alloc_component
This function allows you to allocate a number of chained components
from the library.
TCX_alloc_component() is defined in the header file TCAP_ext.h.
For details about syntax, parameters, and return values, see the
TCX_alloc_component() man page.
236
Chapter 6
Using the TCAP API
Allocating Components
TCX_alloc_buffer
This function allows you to allocate a buffer from the library. Buffers are
freed with their encapsulating component structure.
TCX_alloc_buffer() is defined in the header file TCAP_ext.h.
For details about syntax, parameters, and return values, see the
TCX_alloc_buffer() man page.
Example: Allocating One Component and One Buffer
This example is a code fragment for allocating one component and one
buffer.
See “Example: Filling the Buffer with User Data” on page 239 to fill the
components with user information.
/* allocation of one component example*/
tcx_buffer
*Buffer = NULL;
tcx_component *Component;
Error = TCX_alloc_component(&Component, 1); // We want only one component.
/*Error handler*/
if (Error != 0){
switch(tc_errno)
{
case TCE_ILLEGAL_VALUE :
fprintf(stderr,“TCX_alloc_component
Error);
break;
ILLEGAL VALUE (error value == %d)”,
case TCE_MEMORY_ERROR :
fprintf(stderr,“TCX_alloc_component No more memory (error value == %d)”,
Error);
break;
default :
fprintf(stderr,“TCX_alloc_component returned an unexpected error value : %d”,
Error);
break;
} // end of switch(Error)
......
} // End of if (Error != 0)
Chapter 6
237
Using the TCAP API
Allocating Components
else
{
Error = TCX_alloc_buffer(&Buffer, 1000); // We want a buffer of 1000 bytes
if (Error != 0)
{
switch(tc_errno)
{
case TCE_ILLEGAL_VALUE :
fprintf(stderr,“TCX_alloc_component
%d)”,Error);
break;
ILLEGAL VALUE (error value ==
case TCE_MEMORY_ERROR :
fprintf(stderr,“TCX_alloc_component No more memory (error value ==
%d)”,Error);
break;
default :
fprintf(stderr,“TCX_alloc_component: unexpected error value :
%d”,Error);
break;
} // end of switch(Error)
......
} // end of if (Error != 0)
memcpy(Buffer->bufferp, bufdata, 500); // copy user datas into component buffer
Buffer->actual_length=500;
with the length
of the datas
Component->parameter= Buffer;
component
// You must update this field
// now, give the address of data buffer to
} // end of else
238
Chapter 6
Using the TCAP API
Allocating Components
Example: Filling the Buffer with User Data
This example is a code fragment of filling buffers with user information.
/*Example of filling up the buffer with user data*/
tcx_component MyComponent;
MyComponent.next_component =NULL; // We are not chaining a list of components
MyComponent.c_type = TC_INVOKE;
MyComponent.op_class = 1;
MyComponent.invoke_id=230; // This value must be < 255 and unique
MyComponent.linked_id =-1;
MyComponent.operation.tag = GLOBAL_TYPE; /* No Action requested */
MyComponent.operation.length = 10;
memset(&MyComponent.operation.datas,0,10);
MyComponent.timer.tv_sec = NO_TIMER; /* We do not use the timer feature */
MyComponent.timer.tv_usec=0;
MyComponent.error.tag = LOCAL_TYPE;
/* No error handler specified */
MyComponent.error.length = MAX_OPERATION_LEN;
memset(&MyComponent.error.datas,0,MAX_OPERATION_LEN);
Chapter 6
239
Using the TCAP API
Allocating Components
Passing a Component to the Component Sublayer
Using TCX_put_component
TCX_put_component() passes a component to the TCAP API internal
component list. This internal component list is sent in a single TCAP
message.
TCX_put_component() is defined in the header file TCAP_ext.h.
For details about syntax, parameters, and return values, see the
TCX_put_component() man page.
Advanced Component Management
The wait-for-reject timer is activated when a reply to an invocation is
received. It avoids duplication of an invoke ID for two different operation
invocations.
For details about syntax, parameters, and return values, see the
TCX_control() man page.
240
Chapter 6
Using the TCAP API
Releasing Buffers and Components
Releasing Buffers and Components
TCX_free_components and TCX_free_buffer are used to release the
TCX_component structures that are stored in the application.
TCX_free_components ()
TCX_free_components() frees a list of components. The structure of
TCX_free_components() is defined in the header file TCX_ext.h.
For details about syntax, parameters, and return values, see the
TCX_free_components() man page.
If a problem occurs and you get an error return while using
TCX_put_component(), use TCX_free_components to free the
components from the application.
Figure 6-14
Chapter 6
When to Use TCX_free_components ()
241
Using the TCAP API
Releasing Buffers and Components
TCX_flush_components ()
TCX_flush_components() is used to flush TCX_component structures
stored in the component sublayer of the TCAP library. It deletes all
waiting components with a specific user_dialogue_id (uid) and
provider_dialogue_id (pid). This function call is defined in the header file
TCAP_ext.h. For details about syntax, parameters, and return values,
see the TCX_flush_components() man page.
If you use TCX_put_component successfully and then TCX_send() and
then you get an error return, use TCX_flush_components() to release
the components from the component layer of the TCAP API library.
Figure 6-15
When to Use TCX_flush_components
TCX_free_buffer()
TCX_free_buffer() frees the buffer allocated by TCX_alloc_buffer().
The structure of TCX_free_buffer() is defined in the header file
TCX_ext.h.
For more details, see the TCX_free_buffer() man page.
242
Chapter 6
Using the TCAP API
Dialogue Handling
Dialogue Handling
Although the application has created and passed components to the
component sublayer, they are not transmitted until requested by the
application.
The application must create a dialogue primitive to request transmission
of the components to a peer TC-user. The purpose of the dialogue
primitive is to request or indicate the dialogue handling functions
supported by the component sublayer.
tcx_primitive
The application must use the tcx_primitive structure defined in file
TCAP_ext.h.
Table 6-5
Structure of tcx_primitive
Field
Type
Meaning
p_type
tc_primitive_type
See “Primitive Types” on
page 244
service_quality
tcx_sccp_service_quality
See “SCCP Service Quality
Structure” on page 246
d_address
tc_address
SCCP destination address
for the TCAP message.
o_address
tc_address
SCCP originating address
for the TCAP message.
user_dialogue_id
unsigned int
This reference integer
identifier must be
generated by the
application. See “Dialogue
Management” on page 266.
provider_dialogue_id
unsigned int
This dialogue reference
identifier is provided by
TCAP. See “Dialogue
Management” on page 266.
Chapter 6
243
Using the TCAP API
Dialogue Handling
Table 6-5
Structure of tcx_primitive (Continued)
Field
Type
Meaning
dialog_portion
tc_dialog_portion
See “dialogue_portion” on
page 251
tcx_primitive_option
tcx_primitive_option
See “TCX Primitive
Options” on page 253.
Primitive Types
Dialogue primitives map onto transaction (TR) primitives with the same
generic name because there is a one-to-one relationship between a
dialogue and a transaction.
Table 6-6, Primitive Types, lists the valid tc_primitive_type values,
and if they are supported by ANSI and/or ITU-T.
Table 6-6
Primitive Types
Primitive Name
Meaning
ANSI
ITU-T
TC_UNI
Indicates an unstructured dialogue.
✓
✓
TC_BEGIN
Indicates the beginning of a structured
dialogue.
-
✓
TC_CONTINUE
Indicates the continuation of a dialogue. This
primitive must come after a TC_BEGIN or a
previous TC_CONTINUE.
-
✓
TC_END
Indicates the end of a dialogue.
-
✓
TC_NOTICE
Informs the TC-user that the Network Service
Provider has been unable to provide the
requested service.
✓
✓
TC_U_ABORT
Allows a TC-user to abort a dialogue without
transmitting any pending components.
✓
✓
TC_P_ABORT
Informs the TC-user that the dialogue has been
terminated by the transaction sublayer.
Pending components are not transmitted.
✓
✓
244
Chapter 6
Using the TCAP API
Dialogue Handling
Table 6-6
Primitive Types (Continued)
Primitive Name
Meaning
ANSI
ITU-T
TC_QUERY_W_PERM
Starts a dialogue, informing the remote
TC-user that it can end the dialogue.
✓
-
TC_QUERY_WO_PERM
Starts a dialogue, informing the remote
TC-user that it cannot end the dialogue.
✓
-
TC_RESPONSE
Indicates the end of a dialogue.
✓
-
TC_CONV_W_PERM
Indicates the continuation of a dialogue, and
that the remote TC-user can end the dialogue.
✓
-
TC_CONV_WO_PERM
Indicates the continuation of a dialogue, and
that the remote TC-user cannot end the
dialogue.
✓
-
SCCP_USER_STATUS
Requests or indicates the status of a remote
SCCP subsystem.
✓
✓
SCCP_PC_STATUS
Indicates the status of a remote SCCP point
code.
✓
✓
SCCP_N_COORD
Requests or indicates that a subsystem
withdrawal is initiated.
✓
✓
SCCP_N_COORD_RES
Requests or indicates that a subsystem
withdrawal is granted.
✓
✓
NO_PRIMITIVE
Returns local component indication:
L_CANCEL.
✓
✓
MGT
Returns management and statistic information
about TCAP.
✓
✓
SWITCH_STARTED
Indicates that the SS7 stack has begun its
switchover procedure.
✓
✓
SWITCH_DONE
Indicates that the SS7 stack switchover has
finished.
✓
✓
Chapter 6
245
Using the TCAP API
Dialogue Handling
SCCP Service Quality Structure
This table describes the parameters of the service quality structure.
Table 6-7
SCCP Service Quality Structure
Type
Field
Meaning
TC_BOOL
use_default_values
This parameter
be set by you.
TC_YES: use default quality
parameters for ALL of the following
parameters in this table.
TC_NO: You must declare all of the
following parameters.
TC_BOOL
sccp_return_option
TC_YES: The stack sends TC_notice()
messages back to the application
when there are problems.
TC_NO: The stack does not send
TC_notice () messages back to the
application in case of problems.
Default:TC_NO
TC_BOOL
sccp_use_extended_data
TC_YES: Forces the use of SCCP
XUDT protocol messages for all
TCAP transactions.
TC_NO: SCCP only uses an XUDT
protocol message to transport TCAP
transactions if data cannot fit into a
UDT message.
Default: TC_NO
246
Chapter 6
Using the TCAP API
Dialogue Handling
Table 6-7
SCCP Service Quality Structure (Continued)
Type
Field
Meaning
tcx_sccp_class
sccp_service_class
TCX_SCCP_CLASS0: No guarantee
of sequential delivery of TCAP
messages.
TCX_SCCP_CLASS1: Sequential
delivery of TCAP messages
guaranteed. Must use
sccp_sequence_control values for
different TCAP transactions to
prevent all TCAP messages going
over the same SS7 link.
Default: TCX_SCCP_CLASS0
tcx_importance
sccp_importance
Determines the priority level for
outgoing messages. If congestion
occurs, messages with the lowest
priority will be discarded first.
Set to
TCX_IMPORTANCE_LOW (0)
TCX_IMPORTANCE_MEDIUM (1)
TCX_IMPORTANCE_HIGH (2)
Default: TCX_IMPORTANCE_LOW
If the value of sccp_importance is
out of range in TCX_send(), its value
is reset to
TCX_IMPORTANCE_LOW.
unsigned
character
sccp_sequence_control
Only relevant if
sccp_service_class is set to
TCX_SCCP_CLASS1
Sequence numbers range from 0 to
255
Chapter 6
247
Using the TCAP API
Dialogue Handling
Primitive Structure
When the application exchanges primitives with the TCAP API, you
must ensure that the primitives contain the correct parameters as shown
in Table 6-8, “Structure of Dialogue Primitives.”
Table 6-8
Structure of Dialogue Primitives
Primitive Type
Parameters
Mandatary or Optional
TC_UNI
sce_quality
optional
d_address
mandatory
o_address
mandatory
dialogue_portion
optional - ITU-T White Book only
user_dialogue_id
mandatory
TC_BEGIN
sce_quality
optional
TC_QUERY_W_PERM
d_address
mandatory
TC_QUERY_WO_PERM
o_address
mandatory
dialogue_portion
optional - ITU-T White Book only
user_dialogue_id
mandatory
TC_CONTINUE
sce_quality
optional
TC_CONV_W_PERM
d_address
optional - accepted but not used a
TC_CONV_WO_PERM
o_address
optional - accepted but not used a
dialogue_portion
optional - ITU-T White Book only
user_dialogue_id
mandatory
provider_dialogue_id
mandatory
248
Chapter 6
Using the TCAP API
Dialogue Handling
Table 6-8
Structure of Dialogue Primitives (Continued)
Primitive Type
Parameters
Mandatary or Optional
TC_END
sce_quality
optional
TC_RESPONSE
d_address
optional - accepted but not used.
o_address
optional - accepted but not used.
dialogue_portion
optional - ITU-T White Book only
user_dialogue_id
mandatory
provider_dialogue_id
mandatory - absent in prearranged
end.
sce_quality
optional
d_address
optional - accepted but not used.
o_address
optional - accepted but not used.
user_dialogue_id
mandatory
provider_dialogue_id
mandatory
report_cause
mandatory
sce_quality
optional
d_address
optional - accepted but not used.
o_address
optional - accepted but not used.
dialogue_portion
optional - ITU-T White Book only
user_dialogue_id
mandatory
provider_dialogue_id
mandatory - absent if following
TC_BEGIN
TC_NOTICE
TC_U_ABORT
u_abort_cause
mandatory
Chapter 6
249
Using the TCAP API
Dialogue Handling
Table 6-8
Structure of Dialogue Primitives (Continued)
Primitive Type
Parameters
Mandatary or Optional
TC_P_ABORT
sce_quality
optional
d_address
optional - accepted but not used.
o_address
optional - accepted but not used.
user_dialogue_id
mandatory
provider_dialogue_id
mandatory - absent if following
TC_BEGIN
p_abort_cause
mandatory
SCCP_USER_STATUS
tc_ustatus
mandatory
SCCP_PC_STATUS
tc_pcstatus
mandatory
SCCP_N_COORD
tc_ncoord
Not used on request, provided on
indication
SCCP_N_COORD_RES
tc_ncoord
mandatory
NO_PRIMITIVE
user_dialogue_id
mandatory
provider_dialogue_id
mandatory - absent if from network
MGT
tc_stat
mandatory
SWITCH_STARTED
no parameter
-
SWITCH_DONE
no parameter
-
a. Used in ITU-T White Book for the first TC_CONTINUE in a dialogue.
250
Chapter 6
Using the TCAP API
Dialogue Handling
dialogue_portion
This field allows the negotiation of the Application Context and, as a
further option within it, the transparent transfer of user data which is
not components.
It is only used for ITU-T White Book dialogue primitives.
Table 6-9
dialogue_portion Structure
Field
Structure
Contents
Meaning
dlg_info_present
TC_BOOL
TC_NO
Indicates the dialogue
information is present.
TC_YES
application_context_name
user_information
tc_data
tc_data
length
Length of encoded
Object Identifier
value
data
Object Identifier
value encoded in
ASN.1
length
Length of encoded
user information
value.
data
EXTERNAL TAG +
EXTERNAL
LENGTH +
EXTERNAL VALUE
Reference to an explicitly
defined set of the TC-user
Application Service Elements
(ASEs).
The TCAP API encodes the
Application Context Tag, the
Application Context Length
and the Object Identifier Tag.
Information that can be
exchanged between TC-users,
independently of the remote
operation service.
user_information data is
transparent to TCAP, but must
be formatted according to Table
49 of Q.773 and must include
an EXTERNAL tag and length.
Similarly for incoming
messages arriving from the
network.
If the PDU is AARQ, AARE,
AABRT or AUDT, the TCAP
API encodes and decodes the
User Information Tag.
Otherwise only the Dialogue
Portion Tag is encoded and
decoded.
Chapter 6
251
Using the TCAP API
Dialogue Handling
Table 6-9
dialogue_portion Structure (Continued)
Field
Structure
Contents
Meaning
abort_reason
tc_abort_reason
AC_name_not_suppor
ted
Indicates whether a dialogue is
aborted because the received
application context name is not
supported and an alternative
cannot be proposed, or because
of any other user problem.
user_specific
Example: Creating a Dialogue Primitive
This example is a code fragment for creating a dialogue primitive.
/*Example of primitive creation*/
tcx_primitive Primitive;
Primitive.p_type = TC_BEGIN;
Primitive.service_quality.use_default_values = TC_YES;
Primitive.o_address.type= DPC_SSN;
Primitive.o_address.pc_value = 16;
Primitive.o_address.ssn
= 10;
Primitive.d_address.type= DPC_SSN;
Primitive.d_address.pc_value = 3;
Primitive.d_address.ssn
= 10;
Primitive.user_dialogue_id=2456;
// Computed by the application,
// must be different for each dialogue and > 0)
Primitive.provider_dialogue_id=0;
dialogue
// Computed by the API, but when you create a
// (TC_BEGIN) you initiate this field with 0.
252
Chapter 6
Using the TCAP API
Dialogue Handling
TCX Primitive Options
This is a list of the tcx_primitive options.
Table 6-10
tcx_primitive_option
Type
Field
Meaning
tc_u_abort
u_abort_cause
This field is used by ANSI and ITU-T
Blue Book components to indicate
the TC-user defined reason for the
aborted dialogue.
tc_termination_type
termination_type
This field indicates whether the
termination of a dialogue is basic or
prearranged, as defined in Q.771.
tc_transport_reason_
return
report_cause
This field contains information
returned by SCCP that indicates the
reason for the exception handling.
tc_p_abort_cause
p_abort_cause
This field indicates the local reason
for the aborted dialogue.
struct tc_stat_struct
tc_stat
This is the statistic information
provided by the local component
sublayer.
struct tcx_pcstatus_
struct
tc_pcstatus
This is the SCCP signalling point
status.
struct tcx_ustatus_
struct
tc_ustatus
This is the status of the remote
TC-user.
struct tcx_ncoord_
struct
tc_ncoord
This contains information about the
withdrawal of a peer subsystem.
For further information refer to the following files:
Chapter 6
•
TCAP_ext.h
•
TCAP_ccitt.h
•
TCAP_common.h
•
TCAP_ansi.h
253
Using the TCAP API
Sending Components via the Component Sublayer Using TCX_send()
Sending Components via the Component
Sublayer Using TCX_send()
The application must use a TC-user TCAP connection if you want to
encode and send TCAP messages via the component sublayer. You must
ensure that the component sublayer has been enabled.
TCX_send() assembles and transmits TCAP messages. Components,
that have been passed to the component sublayer either individually or
in a list, are sent with a dialogue primitive to the transaction sublayer
for further processing.
TCX_send() is defined in the header file TCAP_ext.h. For details about
syntax, parameters, and return values, see the TCX_send() man page.
Example: Using TCX_send ()
This example is a code fragment showing how to send components via
the component sublayer to the transaction sublayer.
/* example of sending data */
/*
* ---------------------------------------------------------------------* error management function
* returns TRUE in the current dialogue should be restarted
* ---------------------------------------------------------------------*/
TC_BOOL error_handler( int error,
int user_id,
int prov_id,
tcx_component *comp )
{
printf (“ERROR : %s\n”, tc_error_text[error] );
switch (error)
{
case TCE_ILLEGAL_VALUE :
case TCE_WRONG_IDS :
case TCE_NOT_IMPLEMENTED :
case TCE_ILLEGAL_CALL :
case TCE_NO_CONFIG :
case TCE_BAD_CONFIG :
case TCE_CONNECT_INIT :
case TCE_INVALID_SSN :
case TCE_MAX_USERS :
254
Chapter 6
Using the TCAP API
Sending Components via the Component Sublayer Using TCX_send()
case TCE_INTERNAL :
case TCE_MEMORY_ERROR :
exit(-1);
case TCE_CNX_CLOSED :
case TCE_CNX_ID :
TCX_close( cnxId );
connection_handler(AI, II);
return( TRUE );
case TCE_SYNTAX_ERROR :
if (TCX_free_components(comp) == -1)
{
printf (“Error in TCX_free_components: %s\n”,
tc_error_text[tc_errno]);
exit (-1);
}
return( TRUE );
case TCE_COMPONENT_ERROR :
case TCE_TOO_MANY_COMPONENTS :
if (TCX_flush_components(cnxId, user_id, prov_id) == -1)
{
printf (“Error in TCX_flush_component: %s\n”,
tc_error_text[tc_errno]);
exit (-1);
}
break;
case TCE_SEND_FULL :
case TCE_API_BUSY :
break;
default :
printf(“Returned an unknown error\n”);
}
return( FALSE );
}
int build_component_with_put(
{
tcx_component *comp_ptr;
tcx_buffer *buf_ptr;
int len;
tc_component_type type, int inv_id, int uid, int pid )
/* allocate one component */
if (TCX_alloc_component(&comp_ptr, 1) == -1)
{
printf (“Error in TCX_alloc_component: %s\n”, tc_error_text[tc_errno]);
exit (-1);
}
/* allocate one buffer of 1000 octets */
if (TCX_alloc_buffer(&buf_ptr, 1000) == -1)
{
printf (“Error in TCX_alloc_buffer: %s\n”, tc_error_text[tc_errno]);
Chapter 6
255
Using the TCAP API
Sending Components via the Component Sublayer Using TCX_send()
exit (-1);
}
comp_ptr->c_type = type;
comp_ptr->op_class = 1;
comp_ptr->invoke_id = inv_id;
comp_ptr->linked_id = -1;
/* operation fields */
comp_ptr->operation.tag = GLOBAL_TYPE;
comp_ptr->operation.length = 10;
sprintf ((char *)(comp_ptr->operation.datas),”abcdefghij”);
/* parameter field */
/* buffer size used initialisation */
buf_ptr->actual_length = 5;
/* copy user datas in buffer */
sprintf ((char *)(buf_ptr->bufferp), “12345”);
/* buffer pointer affectation to component */
comp_ptr->parameter= buf_ptr;
/* Initialize operation timer */
comp_ptr->timer.tv_sec = 30;
comp_ptr->timer.tv_usec = 0;
if (len= TCX_put_component(cnxId, uid, pid, comp_ptr) == -1)
{
error_handler( tc_errno, uid, pid, comp_ptr );
return( -1 );
}
return (len);
}
/* now the send portion code */
send_full=FALSE;
if (TCX_send(cnxId, NULL, &primitive_to_send, NULL) == -1)
{
switch( tc_errno )
{
case TCE_SEND_FULL :
case TCE_API_BUSY :
send_full = TRUE;
break;
default :
diag_init = error_handler( tc_errno, user_id, prov_id, NULL );
}
}
256
Chapter 6
Using the TCAP API
Receiving Components from the Component Sublayer Using TCX_recv()
Receiving Components from the Component
Sublayer Using TCX_recv()
The application must use a TC-user connection to receive components
and dialogue primitives from the component sublayer. See “Creating
TCAP Stack Connections Using TCX_open()” on page 220 for details
about creating TC-user connections.
Before any TC-user connection can be accessed, it must be scheduled as
described in “Scheduling TCAP Stack Connections” on page 224.
The TCX_recv() function receives a TCAP message from the network
and decodes the components found in the received message.
Extraction must be done by the application using TCX_get_component()
as described in “Extracting Components Using TCX_get_component()” on
page 260.
For details about syntax, parameters, and return values, see the
TCX_recv() man page.
Chapter 6
257
Using the TCAP API
Receiving Components from the Component Sublayer Using TCX_recv()
Example: Receiving Components Using TCX_recv ()
The example is a code fragment showing how to receive components
using TCX_recv().
/* receive example */
while (1)
{
/* init select bit masks & timer in each loop */
FD_ZERO(&readMask);
FD_ZERO(&writeMask);
FD_ZERO(&exceptMask);
tmout.tv_sec = 2;
tmout.tv_usec = 0;
time = &tmout;
/*
*
HP OC SS7 select phase
*/
numFd = TCX_select_mask(0,&readMask,&writeMask,&exceptMask,&time);
n = select(numFd, &readMask, &writeMask, &exceptMask, time);
if ( n < 0 )
{
/* select error Mgmt */
switch(errno)
{
case EINTR:
/* note that select exit with EINTR if a sigalarm is received */
/* continue processing */
break;
default:
printf (“Error during select, reason: %d\n”, errno );
exit (-1);
}
}
num_cnx = MAX_FD;
cnx_active[0] = -1;
TCX_cnx_handler(n, &readMask, &writeMask, &exceptMask, &num_cnx, cnx_active);
if ( (num_cnx > 0) && ( cnx_active[0] == cnxId) )
{
more = 1; p_type = 0; prov_id = 0;
/* Receive all possible messages arrived */
while( more > 0 )
{
result= TCX_recv( cnxId, NULL, &primitive, NULL, &more );
switch( result )
258
Chapter 6
Using the TCAP API
Receiving Components from the Component Sublayer Using TCX_recv()
{
case -1 :
/* error */
error_handler( tc_errno, 0, 0, NULL );
continue;
case 0 :
/* nothing received */
continue;
case NO_COMPONENTS :
/* something received without component
*/
default :
/* something received */
p_type= decode_primitive (&primitive);
prov_id = TC_P_PROVIDER_ID(&primitive);
break;
}
.........
Chapter 6
259
Using the TCAP API
Extracting Components Using TCX_get_component()
Extracting Components Using
TCX_get_component()
After receiving components with TCX_recv(), the components of a
received TCAP message are decoded but remain in the internal API
component list. The application must extract these components
individually from the component sublayer
This function extracts a component from the component sublayer. It also
updates the state-machines of the component sublayer.
TCX_get_component() is defined in the header file TCX_ext.h.
For details about syntax, parameters, and return values, see the
TCX_get_components() man page.
260
Chapter 6
Using the TCAP API
Using the Transaction Sublayer
Using the Transaction Sublayer
The TCAP transaction sublayer facilities are also accessible via the
TCAP API. When the application creates a TR-user connection as
described in “Creating TCAP Stack Connections Using TCX_open()” on
page 220, then non-standard user data and dialogue information not
defined by HP OpenCall SS7 can be exchanged with a remote TR-user.
Component Handling
The component handling primitives of the component sublayer as shown
in Table 6-3, TCAP Component Types, do not have any counterpart in
the transaction sublayer.
The TCAP API uses a byte table to exchange encoded user data.
Encoding and decoding of data in this table is the responsibility of the
application.
All memory allocation must be managed by the application.
Transaction Handling
There is a one-to-one relationship between dialogue handling primitives
of the component sublayer and the transaction handling primitives in
the transaction sublayer.
Thus the primitive types and their structure given in Table 6-6,
Primitive Types, and Table 6-8, Structure of Dialogue Primitives, are
also provided by the TCAP API for the exchange of user data via the
transaction sublayer to a remote TR-user.
Chapter 6
261
Using the TCAP API
Sending User Data via the Transaction Sublayer Using TLX_send()
Sending User Data via the Transaction
Sublayer Using TLX_send()
User data can only be sent via a scheduled TR-user connection. Initially,
the application must create and encode all the user information as bytes
in a component. Then TLX_send() must be called.
TLX_send() assembles and transmits a TCAP message. The component
portion of the TCAP message must be previously encoded by the
application.
TLX_send() is defined in the header file TCAP_ext.h.
For details about syntax, parameters, and return values, see the
TCX_send() man page.
262
Chapter 6
Using the TCAP API
Receiving User Data from the Transaction Sublayer Using TLX-recv()
Receiving User Data from the Transaction
Sublayer Using TLX-recv()
The application must use a TR-user stack connection to receive a TCAP
message directly from the transaction sublayer.
Before any TR-user connection can be accessed, it must be scheduled as
described in “Scheduling TCAP Stack Connections” on page 224.
The TLX_recv() receives TCAP message from the network but does not
decode the components found in the received message.
For details about syntax, parameters, and return values, see the
TCX_recv() man page.
Chapter 6
263
Using the TCAP API
Closing TCAP Stack Connections Using TCX_close()
Closing TCAP Stack Connections Using
TCX_close()
CAUTION
Only close a TCAP stack connection when you are certain that the
application will not use the connection again. If a connection is
repeatedly opened and closed, the application will place a high overhead
on the TCAP API mechanism.
A TCAP service is terminated when the application closes a stack
connection using TCX_close(). All the entities associated with this stack
connection are also closed, and all calls to TCX_send(), TLX_send(),
TCX_recv() or TLX_recv() will be refused.
This function closes a TCAP stack connection. You must reschedule any
remaining stack connections after you have called TCX_close(). If the
application closes the final TCAP stack connection, then TCAP will be
disconnected from SCCP.
For details about syntax, parameters, and return values, see the
TCX_close() man page.
Example: Closing a TC-user Connection
The example is a code fragment that shows how to close a TC-user
connection.
int
tcx_primitive
tc_primitive_type
struct tcx_component
cnxId, result, more;
primitive;
p_type;
* comp_ptr;
if ((result = TCX_recv(cnxId,NULL,&primitive, &comp_ptr, &more))>0)
{
p_type = TC_P_TYPE(primitive);
if (p_type == TC_END) {
if (TCX_close (cnxId) == -1)
printf (“Error during TCX_close\n”);
printf (“TC_CLIENT: End of operations\n”);
/* finished */
}
}
264
Chapter 6
Using the TCAP API
Component Management
Component Management
The tcx_component structure is used by the TCAP API to exchange data
with a TC-user. The application needs to allocate a buffer and component
list. See “Creating a Component” on page 230.
Retrieving Component Buffers
The application can retrieve a component buffer by using
TCX_get_component(). See “Extracting Components Using
TCX_get_component()” on page 260.
Memory Allocation
All component memory allocation and de-allocation is performed by the
TCAP API.
Invoke IDs
Each invocation of an operation can be referenced by its invoke ID. The
range of invoke ID is 0 to 255. An invoke ID can be reused if the previous
operation using the invoke Id has been terminated.
Wait-for-reject Timer
The wait-for-reject timer is activated when a reply to an invocation is
received. It avoids duplication of an invoke ID for two different operation
invocations.
The application can reduce this timeout value by calling TCX_control()
with the SET_REJECT_TIMER command. See “Advanced Component
Management” on page 240.
Chapter 6
265
Using the TCAP API
Dialogue Management
Dialogue Management
A dialogue is fully identified by a user_dialogue_id and a
provider_dialogue_id. Each dialogue primitive must contain one or
both of these IDs.
See “Dialogue Handling” on page 243 and the following dialogue
example.
Example of a TC Dialogue
1. The local TC user starts the dialogue with a TC_BEGIN(), assigning
the user_dialogue_id which is only used locally (uidx). When the
remote TC user receives the TC_BEGIN(), the remote user assigns his
own user_dialogue_id before responding. So, this value starts as
uid0 and passes to uidz. The provider_dialogue_id is also
assigned (pidy).
2. The local TC user receives the provider_dialogue_id from the
remote user (pidy), and continues to use his own local
user_dialogue_id (uidx).
3. The dialogue continues, identified uniquely on the Local TC user side
with uidx and pidy, and identified uniquely on the Remote TC user
side with uidz and pidy.
Figure 6-16
266
TC Dialogue Example
Chapter 6
Using the TCAP API
Dialogue Management
Setting Dialogue ID Values
Since the provider_dialogue_id is allocated by TCAP, it may be
necessary to control its value. Using the SAM menu options Actions |
View/Modify | Signaling Protocols | TCAP, you can define the minimum
(setLowPId). In the case of multiple stacks, there is an extra step in
which you select the stack concerned. This step comes after the menu
option Signaling Protocols (you select the stack’s LPC and then you click
on the Signaling Protocol Configuration option)
The maximum (setHighPId) provider_dialogue_id value available is
automatically calculated.
Simultaneous Dialogues
The number of simultaneous dialogues supported by TCAP depends on
the expansion level. The minimum is 65,535 and the maximum is
262,140 (4 x 65,535).
Chapter 6
267
Using the TCAP API
Transaction Management
Transaction Management
Transaction management is only necessary if the application is directly
using the transaction sublayer services of the TCAP API via a TR-user
connection. Because a TR-user connection bypasses the component
sublayer, the application must manage the encoding/decoding
mechanisms, state-machines and timers according to the non-standard
requirements.
The application must also manage transaction IDs as described in
“Dialogue Management” on page 266.
268
Chapter 6
Using the TCAP API
API Memory Management
API Memory Management
The application can increase the maximum size of memory (in bytes)
allowed for the TCAP API using TCX_control() and the
SET_API_MEMORY_SYZE command. The default is 65,000 bytes. You must
set the cnxId parameter of TCX_control() to NULL.
Chapter 6
269
Using the TCAP API
Tuning TCAP IPC Buffers Using TCX_control()
Tuning TCAP IPC Buffers Using
TCX_control()
As described in “Tuning IPC Buffers” on page 78, the application may
need to alter the default values of the IPC send and receive buffers.
TCX_control(): Syntax
The TCAP API provides the application with TCX_control() to
customize these IPC buffer attributes for each TCAP stack connection.
Return
Value
int
Function
TCX_control
Parameters
(int
void
tc_control_c
tc_control_parms
cnxId,
* context,
command,
* parameters);
Comment
In 64-bit mode,
the context field
is an “int”, not a
“void”.
context
This parameter is not supported. Set its value to NULL. When compiling
in 64-bit mode in aCC, any warnings related to this parameter can be
ignored.
cnxId
This input parameter specifies which stack connection IPC buffers will
be modified.
270
Chapter 6
Using the TCAP API
Tuning TCAP IPC Buffers Using TCX_control()
command
This input parameter defines the IPC buffer command as described in
the table.
Table 6-11
IPC Management Commands
Command
Meaning
OUT_IPC_BUFFER_SIZE
Increases the IPC transmit buffer from the default value of
8000 bytes. The maximum size is 65,535 bytes.
IN_IPC_BUFFER_SIZE
Increases the internal IPC receive buffer from the default
value of 8000 bytes. The maximum size is 65,535 bytes.
LOW_TRANSIT_TIME
Sets the maximum transit time before messages are sent on a
LAN with low traffic (default 20 ms).
HIGH_TRANSIT_TIME
Sets the maximum transit time before messages are sent on a
LAN with high traffic (default 100 ms).
OUT_BUFFER_BLOCK
Allows messages to be buffered. Reduces the number of IPC
system calls, and must be done as soon as the application
requires high message throughput. Should be used in
association with OUT_BUFFER_FLUSH and
OUT_BUFFER_FLUSH_COND.
OUT_BUFFER_DONT_BLOCK
Flushes the send buffer as soon as a TCX_send() or
TLX_send() call is issued.
OUT_BUFFER_FLUSH
Immediately flushes the send buffer.
OUT_BUFFER_FLUSH_COND
Flushes the send buffer only if one of the following conditions
is satisfied:
- the send buffer is full
- the transit time of the oldest message in the send buffer has
exceeded the set transit time
GET_CONNECTION_INFO
Copies all the IPC information from cnx_id to the cnx_info
field of parameters. This command be used before or after
changing a connection.
DESACTIVATE
Sets the active flag of TCAP connection to TC_NO. This
command allows the application to smoothly disconnect a
TCAP connection without losing the last incoming message.
Chapter 6
271
Using the TCAP API
Tuning TCAP IPC Buffers Using TCX_control()
Table 6-11
IPC Management Commands (Continued)
Command
Meaning
ACTIVATE
Sets the active flag of the TCAP connection to TC_YES. This
command allows the application to reconnect a TCAP
connection to the SS7 stack, and allows TCAP to accept new
incoming transaction requests for a TC- or TR-user.
parameters
These parameters are associated with particular IPC commands.
TCX_control uses the tc_control_params_struct structure defined in
the TCAP_common.h file to exchange data and information with the
application.
Table 6-12
Associated Parameters of IPC Commands
IPC command
Associated tc_control_params_struct field
OUT_IPC_BUFFER_SIZE
tx_buffer_size must be set to between 8,000 and 65,535.
IN_IPC_BUFFER_SIZE
rx_buffer_size must be set to between 8,000 and 65,535.
HIGH_TRANSIT_TIME
high_transit_time must contain a microsecond value.
LOW_TRANSIT_TIME
low_transit_time must contain a microsecond value.
GET_CONNECTION_INFO
cnx_info field is used to store current connection
information.
TCX_control(): Return Values
If TCX_control() is successful, a positive integer is returned.
If TCX_control() is unsuccessful, the return value is -1 and tc_errno is
set to indicate the error.
272
Chapter 6
Using the TCAP API
Tuning TCAP IPC Buffers Using TCX_control()
Table 6-13
TCX_control() Error Values
tc_errno
Meaning
TCE_ILLEGAL_VALUE
You used an illegal parameter value.
TCE_CNX_ID
You passed an invalid connection id for cnx_id.
TCE_CNX_CLOSED
The cnx_id connection has been closed.
TCE_ILLEGAL_CALL
You must enable the component sublayer before calling
TCX_put_component().
TCE_API_BUSY
A switchover is in progress. You must call TCX_control()
again.
TCE_WRONG_IDS
An incorrect user_dialogue_id or provider_dialogue_id
value has been passed to TCX_put_component().
TCE_NOT_IMPLEMENTED
You passed an illegal command to TCX_control().
TCE_MEMORY_ERROR
No memory available.
Chapter 6
273
Using the TCAP API
Transaction Timers
Transaction Timers
TCAP provides a timer mechanism for the transaction sublayer that
aborts any transaction that has not been terminated after a certain
period of time.
This behavior is managed by a timer that can be configured using SAM
menu options Actions | View/Modify | Signalling Protocols | TCAP. In
file sys.<className>.tcap, setTimerPeriod sets the maximum time
between the beginning of a transaction and the end of a transaction in
seconds. If it is set to 0, then the transaction timers are disabled.
274
Chapter 6
Using the TCAP API
TCAP Tutorial Programs
TCAP Tutorial Programs
Two tutorials (that is, example programs) named TcapClient and
TcapServer are provided with HP OpenCall SS7.
The source code of these tutorials is in the /opt/OC/tutorials/SS7
directory.
CAUTION
If you want to change a makefile or a tutorial supplied with
HP OpenCall SS7, you must first copy it to your own working directory.
You must not change the sources supplied with the HP OpenCall SS7
product in the directories in which they are delivered.
TcapClient.c
This TC-user program requests a remote ITU-T TCAP application
TcapServer to perform operations on its behalf.
You must first compile TcapClient using the command cc_tcap. This
will also compile TcapServer at the same time.
To run the program, the following values must be provided:
•
className:
Name of the SS7 stack
•
org point code
Point code number of the SS7 stack
•
org subsystem number
Subsystem number of the SS7 stack
•
dest point code
Point code number of the Server application
•
dest subsystem number
Subsystem number of the Server application
Chapter 6
275
Using the TCAP API
TCAP Tutorial Programs
For example, to run TcapClient on the client using SSN 40, enter:
TcapClient SS7_Stack_36 36 35 40 40
TcapServer.c
This TC-user program performs operations on behalf of the ITU-T TCAP
client application TcapClient.
You must first compile TcapServer using the command cc_tcap. This
will also compile TcapClient at the same time.
To run this program, the following values must be provided:
•
className
Name of the SS7 stack
•
org point code
Point code number of the SS7 stack
•
org subsystem number
Subsystem number of the SS7 stack
•
dest point code
Point code number of the Server application
•
dest subsystem number
Subsystem number of the Server application
For example, to run TcapServer on the server using SSN 40, enter:
TcapServer SS7_Stack_35 35 36 40 40
276
Chapter 6
Using the TCAP API
Building IN Message Sets Over the HP OpenCall SS7 TCAP API
Building IN Message Sets Over the
HP OpenCall SS7 TCAP API
To create IN message sets, you need an ASN.1 compiler.
Such software tools are available on the market.
For example, you can obtain OSS ASN.1 tools from OSS Nokalva Inc. at:
http://www.nokalva.com
or the ASN.1 product line from MARBEN at:
http://www.marben-products.com/ASN.1/overview.html
Chapter 6
277
Using the TCAP API
Building IN Message Sets Over the HP OpenCall SS7 TCAP API
278
Chapter 6
7
Using the TCAP Application
Message Dispatcher
This chapter describes the TCAP Application Message Dispatcher.
Chapter 7
279
Using the TCAP Application Message Dispatcher
Introduction
Introduction
The SS7 stack supplies a default dispatching algorithm (round robin).
Using the TCAP Application Message Dispatcher, customers supply their
own dispatching algorithm which replaces the default algorithm
supplied by the stack.
If TCAP Application Message Dispatcher is enabled and the dispatching
library file is not found at the start-up of the stack, a LOG is generated
and the stack does not start.
The following table presents a few of the messages used in this chapter.
Table 7-1
ITU and ANSI Versions of Messages
ITU Version
TC-BEGIN
ANSI Version
TC-QUERY-WITH-PERMISSION
TC-QUERY-WITHOUT-PERMISSION
TC-CONTINUE
TC-CONVERSATION-WITH-PERMISSION
TC-CONVERSATION-WITHOUT-PERMISSION
TC-UNI
TC-UNI
Meaning
Message that begins a
transaction.
Message belonging to an
established transaction.
Uni-directional message (not
belonging to a transaction).
Enabling and Disabling
TCAP Application Message Dispatcher is enabled and disabled using
SAM. If enabled, a client supplied shared library named
TCAProuter.<className>.sl must be provided in the /opt/OC/lib
directory.
NOTE
280
If necessary, the shared library directory can be changed by modifying
the TCAProuterPath variable in the [<classname>] section of the
global.conf configuration file.
Chapter 7
Using the TCAP Application Message Dispatcher
Introduction
TCAP Application Message Dispatcher is enabled or disabled globally for
all applications connected to the SS7 stack. Consequently, if the
dispatcher is enabled, the customer-supplied library functions must
route all incoming TC-BEGIN and TC-UNI messages for all applications.
Default Dispatching Algorithm
The default algorithm supplied by the stack is round robin. Figure 7-1
illustrates this algorithm for the case of four TCAP users connected to
the same SSN.
Figure 7-1
Round Robin Algorithm
As shown in the figure, incoming TC-BEGIN and TC-UNI messages are
distributed to each TCAP user connected to the same SSN, application
id, and instance id, strictly in turn. For example, suppose that User 4 is
the most “appropriate” user to handle the 2nd TC-BEGIN. The round
robin algorithm gives this message to User 3 (since this algorithm has no
way of knowing that User 4 is the most “appropriate” user).
Customer-Supplied Dispatching Algorithm
In this case, the customer supplies the dispatching algorithm to be used
(in the form of a shared library loaded by the stack).
Chapter 7
281
Using the TCAP Application Message Dispatcher
Introduction
Figure 7-2 illustrates the role of a customer-supplied dispatching
algorithm.
Figure 7-2
Customer-Supplied Dispatching Algorithm
Dispatching Outgoing Messages
The customer-supplied dispatching algorithm is not involved in the
dispatching of outgoing TCAP messages. The dispatching of such TCAP
messages is the concern of the destination stack.
ITU and ANSI Messages
In the discussion on TCAP application message dispatching in this
document, the ITU messages are used. However, everything said about
ITU messages also applies to their ANSI equivalents (see Table 7-1 on
page 280).
282
Chapter 7
Using the TCAP Application Message Dispatcher
Introduction
Dispatching Incoming TC-BEGIN and TC-UNI Messages
If the TCAP Application Message Dispatcher is enabled, TCAP layer
dispatching is performed as shown in Figure 7-2 on page 282. When the
SS7 stack receives a TC-BEGIN or TC-UNI message (or their ANSI
equivalents), it asks the customer-supplied dispatching algorithm to
make a dispatching decision. The SS7 stack then routes the message to
the TCAP user selected by the dispatching algorithm.
Dispatching Incoming TC-CONTINUE and TC-END Messages
For TC-CONTINUE and TC-END messages (and their ANSI equivalents),
the customer-supplied dispatching algorithm is not involved in the
dispatching decision. These messages concern an existing transaction, so
the stack routes them directly to the TCAP user associated with the
transaction.
Distributing Incoming Transactions
There are a number of ways of distributing incoming transactions.
Some examples are:
NOTE
Chapter 7
•
Based on the originating point code, or on a value within the message
itself, such as a free phone number or a ported number. For example,
the customer defines ranges of telephone numbers (R1, R2, R3, R4,
etc.). Messages with a telephone number within R1 are routed to
application A1, those within R2 are routed to application A2, etc.
•
Randomly or in a round robin fashion.
•
Based on the current workload. If an application is overloaded, then
the customer-supplied dispatching algorithm routes the message to
another application (or filters, or deletes the message).
•
Giving more traffic to one application than to the others.
The shared library may implement a separate dispatch algorithm for
different SSNs (for example, see Figure 7-3, “Example of Dispatching
Algorithms.”).
283
Using the TCAP Application Message Dispatcher
Introduction
Identifying Application Instances (TCAP Users)
The identification of an application instance is passed between the stack
and the customer-provided functions through a structure of type
tcx_application_info.
This structure contains the applicationID and the instanceID. Each
application instance must be uniquely identified through the
combination of an applicationID and an instanceID.
Applications Must Connect Using TCX_open()
Applications using TCAP Application Message Dispatcher must connect
using the API function TCX_open().
One of the parameters of this function is a pointer to a structure of type
tcx_application_info containing an applicationID and an
instanceID.
284
Chapter 7
Using the TCAP Application Message Dispatcher
Shared Library Technical Requirements
Shared Library Technical Requirements
If the TCAP Application Message Dispatcher feature is enabled, the
dispatching algorithm is provided in a customer-supplied shared library.
This algorithm is used to distribute incoming TCAP transactions
between applications connected on the same SSN (Subsystem Number).
This customer-supplied shared library must be robust, meaning that it
must be developed respecting the guidelines given in the “Guidelines for
Developing the Customer-Supplied Shared Library” on page 299.
The functions that must be present in this library are listed below. For
details about the syntax, parameters, and return values, see the
TCAProuter(3) man page. These customer-supplied functions are
invoked by the HP OpenCall SS7 stack. These functions must be coded
in C or C++. Note that the names of the functions are prefixed with
TCAProuter_ for ease of identification.
The permissions on this shared library file must be 555.
Header File
HP provides a header file for application developers. It must be included
in each of the source files of the customer-supplied library, and it is
included in each of the stack source files where there is a call to one of
the functions in the customer-supplied library.
For all functions, a negative return value indicates an error and has a
customer-supplied meaning. When a negative value is returned by a
customer-supplied function, the variable TCAProuter_errno should be
set to a value that is meaningful for the customer. The stack writes the
TCAProuter_errno value to a log file.
When the Library Functions are Called
The functions implemented by the shared library are called when a given
service (for example, an application identified by SSN, application
identifier and instance identifier) changes state and when an incoming
TCAP transaction has to be routed.
Once a transaction is initiated, all related incoming messages are sent to
the same application without invoking the TCAP router shared library.
Chapter 7
285
Using the TCAP Application Message Dispatcher
Shared Library Technical Requirements
If the TCAP Application Message Dispatcher capability is disabled, the
HP OpenCall SS7 stack performs the application dispatching using a
round robin algorithm.
TCAProuter_init()
This function is invoked immediately at stack startup. It provides an
opportunity for data initialization in the customer-supplied library. This
function has no parameters.
TCAProuter_application_activate()
This function is invoked when the first application, identified by SSN,
applicationId, and instanceId, becomes active.
Parameters indicate the SSN and a pointer the structure of the
application that has become active.
TCAProuter_application_deactivate()
This function is invoked when the last application instance, identified by
SSN, applicationId, and instanceId, is deactivated. In this event, the
customer-provided library updates its dispatching tables to account of
the fact that the application is no longer available.
Parameters indicate the SSN and a pointer the structure of the
application that has been deactivated.
TCAProuter_incoming_message()
This function is invoked for each incoming TC-BEGIN and TC-UNI
message (and for their ANSI equivalents). This function returns a
pointer to the structure of the application selected to get the message.
Input parameters indicate the primitive (decoded by the transaction
sublayer), the length, and a pointer to the component part of the
message.
TCAProuter_shutdown()
This function is invoked just before the stack stops. It can be used for
data cleanup. This function has no parameters.
286
Chapter 7
Using the TCAP Application Message Dispatcher
Some Approaches to Dispatching Design
Some Approaches to Dispatching Design
The rest of this chapter gives some examples of how the TCAP
Application Message Dispatcher feature might be used and how the
various components might react in certain circumstances. It is the
customer’s responsibility to code the functions to obtain the desired
behavior. These examples are intended to give you some ideas, they are
not to be taken as recommendations for design.
It is possible to employ a different technique for each SSN. For example,
messages destined to one SSN are distributed based on partitioning,
while messages destined to another SSN are distributed on a round robin
basis. In this case, the customer-supplied library contains a different
dispatching table for each SSN.
The examples are:
•
Partitioning
•
Load Balancing
•
Round Robin
•
Uneven Distribution
•
Routing on INAP Service Key
Partitioning
The idea behind partitioning is to base the dispatching on some value
inside the message. For example, one range of called numbers is passed
to one application instance, and another range is passed to another
application instance. In this case, you code the function
TCAProuter_incoming_message() so that it looks for the value within
the message, and based on this value, returns the appropriate
application and instance identifiers.
For example, several applications are running, each of which handles
requests for a range of called numbers. Each application has read/write
access only to the section of the database concerning its own range of
numbers. This arrangement increases performance by having each
application keep a section of the database or a cache of the database in
its memory. As a consequence, if any given application is not running, the
messages with values in the range for that application are rejected.
Chapter 7
287
Using the TCAP Application Message Dispatcher
Some Approaches to Dispatching Design
At Application Startup
When an application starts up, it reads its section of database into
memory and connects to the stack. It identifies itself to the stack using
its application ID and instance ID in the call to TCX_open().
Roles of the Customer-Supplied Functions
TCAProuter_init() sets up a dispatching table that maps called
number ranges to application and instance identifiers.
TCAProuter_application_activate() and
TCAProuter_application_deactivate() update the in-memory table
to keep track of which applications are active.
TCAProuter_incoming_message() decodes the message to get the
numeric value. Using this number, it looks in the table to obtain the
proper application ID and instance ID, and returns them to the stack.
Otherwise, -1 is returned to indicate that the message could not be
dispatched to any application.
Load Balancing
The idea behind load balancing is to send messages to the least busy
application instance.
At Application Startup
When an application starts up, it identifies itself to the stack using its
application ID and instance ID in the call to TCX_open().
Roles of the Customer-Supplied Functions
TCAProuter_init() initializes the library’s internal dispatching table.
TCAProuter_application_activate() updates the library’s internal
dispatching table to allow dispatching to that application.
TCAProuter_application_deactivate() updates the library’s internal
dispatching table to disallow dispatching to that application.
TCAProuter_incoming_message() routes the message to the application
with the lowest value for the number of transactions. This example uses
the number of transactions as an indicator of the load, but this is not
288
Chapter 7
Using the TCAP Application Message Dispatcher
Some Approaches to Dispatching Design
necessarily a good measure of the real traffic load. The real traffic load
depends more on the number of messages in a transaction rather than on
the number of transactions.
Round Robin
If TCAP Application Message Dispatcher is not enabled, the default
method of distributing messages to applications connected at the TCAP
interface is round robin. This functionality is provided by the stack. If
TCAP Application Message Dispatcher is enabled, the stack passes all
incoming TC-BEGIN and TC-UNI (or the ANSI equivalents) to the
customer-supplied library function TCAProuter_incoming_message()
for dispatching.
If it is desired to have applications responding to one SSN to be
distributed based on something in the message, and those applications
responding to a different SSN distributed on a round robin basis, the
customer-supplied library must also provide the round robin mechanism.
The stack and the shared library do not share dispatching responsibility.
If TCAP Application Message Dispatcher is enabled, the shared library
is responsible for dispatching. If TCAP Application Message Dispatcher
is not enabled, the stack is responsible for dispatching.
At Application Startup
When an application starts up, it identifies itself to the stack using its
application ID and instance ID in the call to TCX_open().
Roles of Customer-Supplied Functions
Each application ID and instance ID is indexed by a number. A counter is
maintained in the library to keep track of which one took the last
message.
TCAProuter_incoming_message() increments the counter and wraps it
around from the last index to the first (when necessary). It does this
until the counter indexes an active application.
TCAProuter_application_activate() updates the library’s internal
dispatching table to allow dispatching to this application instance.
TCAProuter_application_deactivate() updates the library’s internal
dispatching table to disallow dispatching to this application instance.
Chapter 7
289
Using the TCAP Application Message Dispatcher
Some Approaches to Dispatching Design
Uneven Distribution
The idea behind uneven distribution is that some application instances
have more capacity than others. For example, it might be desirable to
send twice as many messages to one application instance than to
another.
At Application Startup
When an application starts up, it identifies itself to the stack, using its
application ID and instance ID in the call to TCX_open().
Roles of Customer-Supplied Functions
The library’s internal dispatching table contains an integer field for each
application instance to indicate the desired percentage of transactions to
be routed to that instance. It may also contain an integer field for each
application instance indicating the current percentages given the
number of instances that are currently connected and active.
TCAProuter_init() initializes the library’s internal dispatching table
loading the desired percentage values.
TCAProuter_application_activate() updates the library’s internal
dispatching table to allow dispatching to that application instance, and
to adjust the current percentages to accommodate the number of
application instances currently alive.
TCAProuter_application_deactivate() updates the library’s internal
dispatching table to disallow dispatching to that application instance,
and to adjust the current percentages.
TCAProuter_incoming_message() looks in the table of user
transactions passed by parameter, and at the current percentages for
each application instance, to determine which instance gets the message.
The actual weighting used depends on the customer needs.
Dispatching on INAP Service Key
The idea behind dispatching based on the INAP service key is that
different applications handle different INAP services, so incoming
messages are distributed by INAP key.
290
Chapter 7
Using the TCAP Application Message Dispatcher
Some Approaches to Dispatching Design
At Application Startup
When an application starts up, it identifies itself to the stack using its
application ID and instance ID in the call to TCX_open().
Roles of Customer-Supplied Library Functions
The library’s internal dispatching table maps the INAP service key to
different application and instance IDs.
TCAProuter_application_activate() updates the library’s internal
dispatching table to allow dispatching to this application instance.
TCAProuter_application_deactivate() updates the library’s internal
dispatching table to disallow dispatching to this application instance.
TCAProuter_incoming_message() decodes the message up to the
Service Key and then maps the Service Key value to the appropriate
application instance through the dispatching table.
Chapter 7
291
Using the TCAP Application Message Dispatcher
Dispatching Algorithms
Dispatching Algorithms
Figure 7-3 shows an example of the use of dispatching algorithms within
the customer-supplied dispatching shared library. In this example, there
are four SSNs.
Figure 7-3
Example of Dispatching Algorithms
In this example, the shared library implements a separate dispatching
algorithm for each of the four SSNs.
The dispatching algorithm is used to determine the destination
applicationID and instanceID, and the
TCAProuter_incoming_message() function returns these to the stack
(which does the actual dispatching).
In this example, the dispatching algorithms use the following logic:
292
SSN1
uses the called number.
SSN2
uses random distribution.
SSN3
uses round robin.
SSN4
uses the current application workload.
Chapter 7
Using the TCAP Application Message Dispatcher
Dispatching Algorithms
The customer supplied algorithm determines which data to use and is
responsible for initializing and maintaining the data. There is no
provision for replicating data. For performance reasons, the data must be
in-memory and the lookup mechanism must be simple. For SSN3, the
shared library must contain its own round robin algorithm.
IMPORTANT
Chapter 7
SSN3 cannot use the stack’s default round robin algorithm, because
dispatching for all applications must be done either by the stack or by
the shared library but not by a mixture of both.
293
Using the TCAP Application Message Dispatcher
Calls to Functions in the Customer-Supplied Library
Calls to Functions in the Customer-Supplied
Library
Table 7-2, “Context of Call to Customer-Supplied Functions,” shows
when the customer-supplied functions TCAP Application Message
Dispatcher are called by the HP OpenCall SS7 stack.
Table 7-2
Call Context
Context of Call to Customer-Supplied Functions
Customer-supplied Function
Action at
Customer-supplie
d Library
Stack Startup
TCAProuter_init()
Data initialization
First creation of a
TC-user connection
(applicationId,
instanceId) on a
given SSN: call to
the TCX_open()
function with the
“active” parameter
set to YES
TCAProuter_application_activate()
Update of
dispatching tables to
take account of the
fact that the service
is connected and
active.
Activation of a
secondary
connection when
no primary
connection
(applicationId,
instanceId) on a
given SSN is
available:
TC-CONTROL from
the application
TCAProuter_application_activate()
Update of
dispatching tables to
take account of the
fact that the service
is connected and
active.
294
Chapter 7
Using the TCAP Application Message Dispatcher
Calls to Functions in the Customer-Supplied Library
Table 7-2
Call Context
Context of Call to Customer-Supplied Functions (Continued)
Customer-supplied Function
Action at
Customer-supplie
d Library
Creation of a
non-active TC-user
connection
(applicationId,
instanceId): call to
the TCX_open()
function with the
“active” parameter
set to NO
No customer-supplied function is called.
No action.
Deactivation of the
last active TC-user
connection
(applicationId,
instanceId) on that
SSN: TC-CONTROL
from the
application or
stack initiative
TCAProuter_application_deactivate()
Update of
dispatching tables to
take account of the
fact that the service
is no longer active.
Close of the last
active TC-user
connection
(applicationId,
instanceId) on that
SSN: call to the
TCX_close()
function
TCAProuter_application_deactivate()
Update of
dispatching tables to
take account of the
fact that the service
is no longer
available.
Close of a
non-active TC-user
connection
(applicationId,
instanceId): call to
the TCX_close()
function
No customer-supplied function is called.
No action.
Chapter 7
295
Using the TCAP Application Message Dispatcher
Calls to Functions in the Customer-Supplied Library
Table 7-2
Call Context
Context of Call to Customer-Supplied Functions (Continued)
Customer-supplied Function
Action at
Customer-supplie
d Library
Incoming traffic
message received
by TCAP
TCAProuter_incoming_message()
Return the identifier
of the application to
which the message
must be
transmitted.
Stack Shutdown
TCAProuter_shutdown()
Data cleanup
296
Chapter 7
Using the TCAP Application Message Dispatcher
Tracing and Logging
Tracing and Logging
NETTL Mechanism
The NETTL trace mechanism of the SS7 stack process is available to the
dispatching library of the TCAP Application Message Dispatcher.
Principles of Stack Traces
The traces of the stack can be activated/deactivated dynamically function
by function and on different levels according to the masks configured in
the debug.conf configuration file.
A trace function using NETTL is provided by the stack for the
customer-library. This function allows you to set traces within the code of
the dispatching functions and to display them as any other traces of the
HP OpenCall SS7 process.
The dispatching library traces are identified within the traces of the
HP OpenCall SS7 stack process by a specific mask.
To allow more flexibility and efficiency, a number of trace levels are
available to the dispatching library functions. This is configurable as a
parameter of the trace function.
The valid trace levels available to the dispatching library are described
in the TCAProuter man page. If the trace function is called with a trace
level different from those listed in the TCAProuter man page, the trace is
not displayed.
Trace Function Prototype
The TCAPRouter header file includes the trace levels and the prototype
of the trace function. This header file must be included in each source file
of the shared library using the trace function.
TCAProuter_trace( int traceLevel , char *string );
where:
Chapter 7
traceLevel
One of the values defined in the TCAProuter man page.
string
String to be displayed
297
Using the TCAP Application Message Dispatcher
Tracing and Logging
Activating the Trace Function
To activate the dispatching library traces, add 0x40000000 to the mask
related to the stack classname and the selected trace level.
The following extract of the debug.conf configuration file activates:
•
The memory dispatching library traces.
•
The error traces for the dispatching library and TCAP.
1 [SS7_Stack]
2 //Specific SS7_Stack:
3 //Environment = 0x00080000
4 //Proxy = 0x00100000
5 //Tcap = 0x00200000
6 //Sccp = 0x00400000
7 //Level = 0x00800000
8 //Level3-Links-Linksets = 0x01000000
9 //Level3-Routes-Dest = 0x02000000
10 //Level2 = 0x04000000
11 //Level2-Silt = 0x08000000
12 //SwitchCtrl = 0x10000000
13 //Gdi = 0x20000000
14 //User library = 0x40000000
15
16 COM_E_LL_FUNCTION_MASK = 0x00000000
17 COM_E_LL_MEMORY_MASK = 0x40000000 // set memory routing library traces
18 COM_E_LL_OBJECTS_MASK = 0x00000000
19 COM_E_LL_ERROR_MASK = 0x40200000 // set error traces for routing library and
Tcap
20 COM_E_LL_INFOFLOW1_MASK = 0x00000000
21 COM_E_LL_INFOFLOW2_MASK = 0x00000000
22 COM_E_LL_STATES_MASK = 0x00000000
23 COM_E_LL_STARTUP_MASK = 0x00000000
When to Use the Trace Function
The trace process is costly in terms of performance and in certain cases it
may even cause the stack to crash.
In a testing/debugging environment (for your shared library), you can
use the trace mechanism as needed.
In an operational environment, you are also recommended to activate the
trace only for errors (COM_E_LL_ERROR_MASK ).
298
Chapter 7
Using the TCAP Application Message Dispatcher
Guidelines for Developing the Customer-Supplied Shared Library
Guidelines for Developing the
Customer-Supplied Shared Library
This section gives some guidelines for developing the shared library.
Designing for Compatibility
•
For compatibility reasons with the HP OpenCall SS7 stack, the
shared library must be compiled in an HP-UX environment. The
shared library (once compiled) plus the stack will be executed on HPUX.
•
The dispatching library functions must be coded in C or C++.
•
If the TCAP Application Message Dispatcher is enabled, the library
file TCAProuter.<ClassName>.sl must be present in the directory
configured.
•
If the TCAP Application Message Dispatcher is enabled and the
customer-supplied dispatching library file is not found at the
start-up of the stack, a LOG is generated and the stack does not
start.
•
Within the dispatching library, the use of threads is NOT allowed.
•
The HA framework of the HP OpenCall SS7 product ensures the
replication of the application connection and activation commands on
both hosts and where necessary the same shared library functions
are called on both platforms. However, it is the customer’s
responsibility to ensure the consistency of the dispatching shared
libraries on both platforms.
•
If the TCAP Application Message Dispatcher is enabled, all TCAP
applications must connect using the function TCX_open().
Designing for Performance
Chapter 7
•
The customer-supplied dispatching function must be simple enough
to ensure the minimum impact on the SS7 stack performance.
•
Except for handling shared memory (see “Designing for Shared
Memory” on page 301), the customer-supplied library should make
no system calls.
299
Using the TCAP Application Message Dispatcher
Guidelines for Developing the Customer-Supplied Shared Library
300
•
The dispatching decision must be simple, involving one lookup in an
in-memory table.
•
Except for the functions that initialize or shutdown the
customer-supplied library, the customer-code cannot perform any I/O
operations. Consequently, the customer-supplied functions
TCAProuter_init() and TCAProuter_shutdown() may perform an
I/O operation (for example, to read a configuration file).
•
In order not to impact HP OpenCall SS7 performance, you are
recommended not to exceed 300 microseconds processing time within
the TCAProuter_incoming_message() function. Since
HP OpenCall SS7 does not enforce this limit, it is your responsibility
not to exceed this maximum processing time.
•
You are recommended not to exceed 0.5 seconds (corresponding to the
heartbeat frequency) processing time within the
TCAProuter_init() function.
•
The parameter maxRoutingTime in the sys.<className>_TDx.tcap
configuration file specifies the maximum processing time (in
microseconds) within the TCAProuter_incoming_message()
function. Each time this value is exceeded, a LOG is generated. This
parameter aims to log any excessive overstepping of the
recommended processing time. This value should be much higher
than the recommended time (300 microseconds). By default, it is set
to 20000 microseconds (= 20 milliseconds).
Chapter 7
Using the TCAP Application Message Dispatcher
Guidelines for Developing the Customer-Supplied Shared Library
Designing for Shared Memory
If the dispatching library uses shared memory to communicate with the
application, you must take account of the following constraints:
•
The application and the HP OpenCall SS7 stack must run on the
same host (that is, an application on the back end cannot access the
shared memory).
•
The stack and the client application must be part of the same FTC
group. If this is not the case, the shared memory will no longer be
usable after the switchover of one of them.
•
The application or the shared library is in charge of the management
of the shared memory.
•
The dispatching library is allowed to perform system calls only for
shared memory initialization and termination.
•
As regards HA, only the master accesses the shared memory. In case
of a switchover, it is the application’s responsibility to update the
shared memory.
•
Shared memory concurrent access (application for writing/shared
library for reading) must be managed efficiently enough not exceed
the maximum processing time allowed per dispatching function call.
Designing for High Availability
You are responsible for ensuring the consistency of the dispatching
shared libraries on both platforms.
Chapter 7
301
Using the TCAP Application Message Dispatcher
Guidelines for Developing the Customer-Supplied Shared Library
Designing in Accordance with Limits
•
The number of users at the TCAP interface is limited to 32 (whether
or not TCAP Application Message Dispatcher is enabled).
•
The maximum number of simultaneously open SSNs is 8 (whether or
not TCAP Application Message Dispatcher is enabled).
•
The component portion transmitted by the transaction sublayer to
the component sublayer after the dispatching function call is never
decoded (even if the dispatching library does it partially). At this
point, only the transaction portion and component sublayer header
have been decoded.
•
If the TCAProuter_incoming_message() function returns 0 but with
an unknown application id/instance id value, a LOG is generated and
a TC_ABORT is sent by the transaction sublayer to the originator of
the message with the following cause: RESOURCE LIMITATION (in
ITU).
•
The dispatching library is not invoked on reception of management
messages. Such messages are still broadcast to all the applications
connected to the stack.
•
Any application connected to the stack can modify the SSN state.
•
Even if the function TCAProuter_incoming_message(), detects a
decoding error which prevents dispatching, the stack does not
generate a TC_R_REJECT or a TC_U_REJECT. This is the responsibility
of the component sublayer/user. In this case, the application designer
may choose one of the following 2 solutions:
— The dispatching library function returns -1, which notifies the
transaction sublayer that no application has been found for the
message. Thus, a TC_ABORT is sent by the stack to the remote
user.
— The dispatching function returns 0 indicating that the
dispatching worked normally, but as application/instance id it
provides the identifier of a special application which is able to
generate the TC_R_REJECT or TC_U_REJECT to send to the remote
user. It is the application developer's responsibility to decide and
implement the required behavior.
302
Chapter 7
Using the TCAP Application Message Dispatcher
Header File
Header File
HP supplies a header file to be included in each of the source files of the
customer-supplied library, and it is included in each of the stack source
files where there is a call to one of the functions in the customer-supplied
library.
File Names
There are two versions of the header file:
•
TCAProuter.h in C
•
TCAProuter.hpp in C++
The header file includes the prototype of the functions to be implemented
within the shared library and of the trace function provided by the stack
to the shared library.
Synopsis
#include
#include
#include
#include
<sys/stdsyms.h>
<stdio.h>
<time.h>
"TCAP_ext.h"/* API structures for TCAProuter */
extern int TCAProuter_errno;
extern void TCAProuter_trace(int traceLevel, char * string);
int TCAProuter_init(void);
int TCAProuter_shutdown(void);
int TCAProuter_application_activate(int ssn,tcx_application_info *app);
int TCAProuter_application_deactivate(int ssn,tcx_application_info *app);
int TCAProuter_incoming_message(tcx_primitive * primitive,
int componentLength,
char * component,
tcx_application_info *app);
Chapter 7
303
Using the TCAP Application Message Dispatcher
Structures
Structures
The API structure providing the application and instance identifier of an
application are redefined in the header file and used in each prototype of
the customer-supplied dispatching functions.
tcx_application_info
typedef struct
{
tcx_appid_mode mode;
int applicationId;
int instanceId;
} tcx_application_info;
tcx_primitive
The API structure related to the transaction portion of a TCAP message
(primitive) can also be redefined in the header file and used in the
prototype of the TCAProuter_incoming_message() function, allowing
dispatching logic to be based on fields of the transaction part. In
particular, the destination SSN is a field of this structure.
304
Chapter 7
Using the TCAP Application Message Dispatcher
Functions
Functions
The functions available for implementation by the shared library are the
following:
•
TCAPRouter_init()
•
TCAPRouter_shutdown()
•
TCAPRouter_application_activate()
•
TCAPRouter_application_deactivate()
•
TCAPRouter_incoming_message()
The following function is provided by the stack to the shared library:
•
TCAPRouter_trace()
For information about each of the functions listed above, see the
TCAProuter() man page.
Chapter 7
305
Using the TCAP Application Message Dispatcher
TCAP Application Message Dispatcher Tutorial Programs
TCAP Application Message Dispatcher
Tutorial Programs
Two tutorials (that is, example programs) are provided with
HP OpenCall SS7.
CAUTION
If you want to change a makefile or a tutorial supplied with
HP OpenCall SS7, you must first copy it to your own working directory.
You must not change the sources supplied with the HP OpenCall SS7
product in the directories in which they are delivered.
C
A C shared library performing round robin application dispatching is
available in the /opt/OC/tutorials/SS7 directory.
It contains:
•
TCAProuter.c
•
TCAProuter.h
This shared library can be compiled with the cc_TCAProuter script:
cc_TCAProuter
C++
A C++ shared library performing round robin application dispatching is
available in the /opt/OC/tutorials/SS7 directory.
It contains:
•
TCAProuter.cpp
•
TCAProuter.hpp
This shared library can be compiled with the cc_TCAProuter script
using the C++ option:
cc_TCAProuter -C++
306
Chapter 7
8
PIC/AG - Introduction
This chapter introduces the HP OpenCall PIC/AG facility.
Chapter 8
307
PIC/AG - Introduction
Some Basic Terms
Some Basic Terms
The following terms are used in this document:
aCC
ANSI C++ Compiler for HP-UX.
API
Application Programming Interface. In this document,
reference is made to the Execution API, the HA API,
the Registry API, the PCA, and the TimerLib API
(which are supplied with HP OpenCall), and an
External API (which is supplied by the user).
client
In a client/server architecture, this is the side that
requests a service from the server.
Execution API Plug-In Execution API. This is one of the components
of the PIC Framework supplied with HP OpenCall.
308
FSM
Finite State Machine.
FTC
Fault Tolerant Controller. This is a component of the
HP OpenCall platform which provides fault tolerance.
HA API
HA API. This is one of the components of the PIC
Framework supplied with HP OpenCall.
IPC
Abbreviation for Inter Process Communication.
NOP
Means “no operation”. In a user plug-in (shared library)
context, NOP is used to indicate that, by default, a
method does nothing. If you want the method to
perform some operations, then you must customize the
method by supplying the code to perform the
operations you desire.
OC
Abbreviation for HP OpenCall.
PCA
Plug-In Communications API. This is one of the
components of the PIC Framework supplied with
HP OpenCall.
PIC/AG
Plug-In Container/Application Guardian. This is the
name of the HP OpenCall feature that supplies the
PIC, the PIC Framework, and the associated APIs.
Chapter 8
PIC/AG - Introduction
Some Basic Terms
PIC
Plug-In Container. This is one of the components of the
PIC Framework supplied with HP OpenCall. The role
of the PIC is to encapsulate user applications (called
user plug-ins) so that they can be managed by the FTC
and can communicate with other user plug-ins using
the PCA.
PIC Framework
This framework is supplied with HP OpenCall. It
provides the PIC, the PCA, the Execution API, the HA
API, and the Registry API. This framework enables
user-written code to benefit from the facilities of HP’s
FTC (Fault Tolerant Controller) and to communicate
with other user plug-ins using the PCA.
PIC Process
This is a process running on the HP OpenCall
platform. The PIC, and the user plug-in (shared
library) that it encapsulates, run as a single process.
This process is known as the PIC process.
Registry API
Registry API. This is one of the components of the PIC
Framework supplied with HP OpenCall.
server
In a client/server architecture, this is the side that
performs a service for the client.
Session
A set of related messages within the flow of messages
exchanged between user plug-in processes.
TimerLib API Timer Library API. This is one of the components of
HP OpenCall.
user plug-in
This is user-supplied code encapsulated in a PIC. It
enables user-written code to benefit from the facilities
of HP’s FTC (Fault Tolerance Controller) and to
communicate with another user plug-in using the PCA.
The user plug-in is supplied in the form of a shared
library.
Chapter 8
309
PIC/AG - Introduction
Purposes of the HP OpenCall PIC Framework
Purposes of the HP OpenCall PIC Framework
The following are the main purposes of this framework:
•
to enable user applications to benefit from the HP OpenCall High
Availability (HA) framework.
•
to facilitate communication between 2 user plug-ins.
These purposes are independent.
One application may want to benefit from HA while another application
wants to communicate with another user plug-in (application).
These purposes are illustrated in Figure 8-1, “Purposes of a User
Plug-In.”
Figure 8-1
Purposes of a User Plug-In
Ensuring HA
The FTC ensures High Availability for the user plug-in process. This
means that the FTC is capable of detecting a failure or an infinite loop in
the user plug-in (via the PIC). For HA, the PIC interfaces with the FTC
on behalf of the user plug-in.
310
Chapter 8
PIC/AG - Introduction
Purposes of the HP OpenCall PIC Framework
The FTC does not preserve the context of the user plug-in. If you want to
preserve the user plug-in context in case of switchover, you must
incorporate the code to do this in your user plug-in.
Communicating with Another Plug-In
Using the PCA (Plug-In Communications API), user plug-ins can
communicate with each other.
Possible Plug-In Applications
The following types of application could become user plug-ins:
Chapter 8
•
An application implementing a new protocol stack (that is, a stack
not provided in the HP OpenCall).
•
A CDR (Call Detail Record) application.
•
An application using the ISUP or TCAP API.
311
PIC/AG - Introduction
Components of the PIC Framework
Components of the PIC Framework
The components of the PIC framework are shown in Figure 8-2,
“Components of the PIC Framework.”
Figure 8-2
Components of the PIC Framework
What is Supplied in the PIC Framework
The HP OpenCall PIC framework supplies the following components:
•
The PIC (Plug-In Container)
•
The Execution API, the HA API, and the Registry API
You use the Execution API to set up the user plug-in (shared library)
and define its run-time scheduling. You use the HA API to interface
with the FTC. You use the Registry API to retrieve some PIC
attributes.
•
The PCA API (Plug-In Communications API)
You use the PCA API for communication with another user plug-in.
312
Chapter 8
PIC/AG - Introduction
Components of the PIC Framework
The TimerLib API and the FTC are other components of HP OpenCall.
The TimerLib API enables the plug-in to set/cancel timers (and call a
callback method on timer expiry).
What the User Must Develop
The user must develop:
•
The user plug-in itself (as a shared library).
•
The External API and External Application (if the user plug-in needs
to interface with an external application).
Role of Each Component
The PIC encapsulates the user plug-in (shared library) to form an
executable that is integrated in the HA framework of the platform.
The Execution API schedules the user plug-in, that is, it gives the user
plug-in some CPU time. The HA API interfaces with the FTC for High
Availability reasons. The Registry API gives access to some PIC
attributes.
The PCA is used to pass messages between user plug-ins.
Benefits of the PIC Framework
It enables an existing application to become HA (that is, its failure to be
detected by the FTC, restarted if desired, and can trigger a switchover).
The PIC is fully integrated in the Platform Monitor, the ocftcontrol,
and ocftstatus commands.
Chapter 8
313
PIC/AG - Introduction
Summary of PIC Framework Features
Summary of PIC Framework Features
The HP OpenCall PIC Framework provides the following features:
314
•
One PIC supports a single user plug-in (shared library).
•
Multiple PIC executables, and therefore multiple user plug-ins, are
supported on the same platform. The maximum number of PICs
depends on the FTC maximum process number and the number of
other Fault Tolerant processes running on the platform.
•
The PIC process is managed as a Fault Tolerant process by the FTC.
•
The PIC reports all process state changes to the user plug-in (shared
library).
•
Messages can be exchanged between 2 user plug-ins via the PCA.
These messages can contain any encoded data. The user plug-in
developer is responsible for any coding/decoding engines that are
required.
Chapter 8
PIC/AG - Introduction
User Plug-In Development
User Plug-In Development
This section describes the Plug-In software from the user plug-in
developer’s point of view and lists the major requirements for user
plug-in development.
Programming Guidelines
A user plug-in is a loadable library (shared library) that complies with
the APIs supplied with the PIC Framework. It provides a number of C++
objects that are defined by the APIs, and is designed to minimize the
amount of work required to migrate existing C/C++ software to
HP OpenCall.
Plug-In development has a number of constraints. For example, a user
plug-in cannot wait for a signal, or use archive libraries, and the user
plug-in process must run on the FE (Front-End) platform. Some
constraints in more detail:
Chapter 8
•
A user plug-in must run in a single-threaded process.
•
A user plug-in must not perform an OS waiting event. The user
plug-in must not make select(2)or poll(2) system calls. This is
the responsibility of the PIC.
•
A user plug-in must not call OS process control functions, such as
exit().
•
A user plug-in must not handle its own timers. It must use timers
provided in the TimerLib (see “TimerLib API” on page 335).
•
A user plug-in shares CPU-time with the PIC. The PIC needs
periodic CPU-time to ensure High Availability (HA). This period
depends on HA constraints specified in configuration files. The CPU
should not be kept busy for a time interval of the same order of
magnitude as the “FTC heartbeat timeout” period.
•
A user plug-in shares platform resources with other HP OpenCall
processes. This applies to resources such as CPU, memory, disk, LAN,
and so on. The amount of resources that the user plug-in (shared
library) needs must be taken into account when configuring/sizing
315
PIC/AG - Introduction
User Plug-In Development
the HP OpenCall platform. For example a disk-intensive user plug-in
would need a dedicated SCSI interface; a LAN-intensive user plug-in
would need a dedicated LAN.
This list is not exhaustive. It emphasizes that caution is required when
developing a user plug-in (shared library).
Compiling and Linking
For an example of compiling and linking a user plug-in, see the Tutorial
(and in particular, the associated Makefile) delivered with the PIC
Framework.
The user plug-in must be compiled on an HP-UX computer using the
aCC compiler with the options to generate 32-bit, single-threaded,
position independent code. The version of aCC must be at least 3.35 and
be compatible with STL V2 libraries. For more details about exception
management, see “Exception Handling” on page 342.
You can compile a simple user plug-in using the following command:
aCC MyPlugin.C -c -AA -int +p +z +DA1.1 -I.-I/opt/OC/include -o MyPlugin.o
where the +z option generates position independent code, and +DA1.1
generates 32-bit code.
The user plug-in must be linked as a shared library.
You can link a simple user plug-in using the following command:
aCC -z -b -AA -int -o MyPlugin.sl MyPlugin.o
where the -b option generates a shared library.
Development Environment
The user plug-in development environment allows the developer to build
user plug-in libraries and debug the user plug-in software.
316
Chapter 8
PIC/AG - Introduction
Exchanging Messages
Exchanging Messages
The PIC Framework provides a facility to manage inter-user plug-in
communication. This is illustrated in Figure 8-3, “Exchanging
Messages.”
Figure 8-3
Exchanging Messages
The following 2 types of messages are used by the user plug-in:
•
Data Messages.
•
Error Messages.
The PIC Framework defines a communications channel between user
plug-ins (shown by the arrow in the figure). This is provided by the PCA
(Plug-In Communication API).
Multiple Servers
A user plug-in can define several PCA_Servers. This is illustrated in
Figure 8-4, “Multiple PCA_Servers.”
Chapter 8
317
PIC/AG - Introduction
Exchanging Messages
Figure 8-4
Multiple PCA_Servers
Multiple Clients
From the PCA_Server point of view, several PCA_Clients (other user
plug-ins) can connect to it. There is no explicit limit to their number. All
these clients are equivalent, and the PCA_Server manages its connection
to them in the same manner.
The clients can be in different PICs.
Several PCA_Clients communicating with the same PCA_Server is
illustrated in Figure 8-5, “Multiple PCA_Clients.” In this case, the
session initiation (that is, the sending of the first message) must be done
by the client (otherwise, the server will open a session towards an
unspecified client).
318
Chapter 8
PIC/AG - Introduction
Exchanging Messages
Figure 8-5
Multiple PCA_Clients
Session
Messages exchanged always belongs to a session. A session is
implemented by a C++ object which can be overloaded for user
application usage.
Either side can create a session. It is created by the side that needs it
and this side sends the first message of the session. A session is called
“outbound” at the session creator’s side and “inbound” at the other side.
Irrespective of which side creates the session, both sides must close it.
Otherwise, session leaks may be caused by zombie sessions. The user
plug-in must contain the code to do this. The side which decides to close
the session must inform the other side of its decision. In contrast to the
session creation phase, there is no synchronization between the
PCA_Server and the PCA_Client for session deletion. It is at the
application level, via the messages exchanged between the user plug-in
server and the user plug-in client, that the synchronization has to be
done. For example, the side that decides to close the session should send
a “last” message to the other side to inform it that it should also close the
session. The user plug-in closes a session using a C++ method.
For session management, the PCA allows you to:
•
Chapter 8
create a new session.
319
PIC/AG - Introduction
Exchanging Messages
•
inform the user plug-in when the other side has created a new
session.
•
inform the user plug-in when the outbound path overflows (Transmit
flow control).
•
inform the user plug-in when the outbound path flow has returned to
a normal state (Transmit flow control).
•
close a session. A user plug-in must always close (or abort) a session,
regardless of which side created it.
•
abort a session. The session is closed with the propagation of an
abort error message.
Message Routing
Each message contains the session id. All messages belonging to the
same session contain the same session id. The receiver can retrieve the
associated context using this session id.
Multi PCA_Clients Case
In the case of multi PCA_Clients, several clients are connected to the
same PCA_Server, the message routing and dispatching over the
multiple clients is done as follows:
320
•
If the PCA_Client creates and sends the first message of the session,
the user plug-in receives it with its session id and the session is
bound to the client that sends the message. Any further messages
using this session will be routed to this client. The user plug-in does
not know from which client the session originated. This is managed
by the PCA layer and is transparent to the user plug-in.
•
If the user plug-in sends the first message of a new session (that is,
the session is created by the user plug-in), then in the multi
PCA_Clients case, the PCA determines the client that will receive
the message using a round robin or load balancing algorithm (based
on parameters that the user plug-in specifies when it creates the
PCA Server). In any case, the user plug-in application cannot specify
the PCA_client to which a newly created session is to be associated.
This is fully controlled by the PCA layer. From the PCA_Server point
of view, all PCA_Clients are equivalent, and it is traffic or load
balancing rules that influence the selection of one client rather than
another.
Chapter 8
PIC/AG - Introduction
Exchanging Messages
Flow Control
Flow Control is performed at two levels: session level and message level.
Levels of Flow Control
At the session level, flow control consists of preventing new sessions from
being opened. In this case, messages for existing sessions can still be sent
and received.
At the message level, flow control consists of refusing messages even for
existing sessions.
At both levels, flow control is implemented based on the level of
saturation of the links between the PCA_Server and the PCA_Clients.
Between User Plug-Ins
Between user plug-ins, the PIC enforces flow control by refusing the user
plug-in the right to open a session or send a message. Once the situation
returns to normal, the PIC informs the user plug-in that the flow control
restriction is lifted so that the user plug-in does not have to keep
re-trying periodically.
Chapter 8
321
PIC/AG - Introduction
Execution API
Execution API
The Execution API is responsible for the setup of the user plug-in
(shared library) and its scheduling at run-time.
For more details, see Figure 10-1, “C++ Structure of PIC API Classes.”
Class
PIC_PluginExe is the interface class to the Execution API.
Loading and Binding
The user plug-in shared library has a single developer-provided
entry-point binding function. The run-time entry-point functions of the
user plug-in are provided by deriving a Plug-In Execution API virtual
base class and optionally a Plug-In HA base class. The purpose of the
binding function is only to allocate to the user plug-in specific objects
inheriting from these base classes (and optionally from other base
classes). Subsequent access to the user plug-in is then performed
through these objects.
Scheduling
The Plug-In scheduling model is outlined in Figure 8-6, “Plug-In
Scheduling.”
322
Chapter 8
PIC/AG - Introduction
Execution API
Figure 8-6
Plug-In Scheduling
This scheduling model uses the OS function select() to check for an OS
signaled event. Before calling select(), the PIC calls the
PIC_PluginExe::selectMasks()method to update the masks.
The PIC_PluginExe::connectionHandler()method is called by the
PIC to do the minimum necessary to remove the OS “signaled event”
state. For example, if the signaled event is I/O on a socket, the method
reads the socket, if the event is a timeout, the method decides what to do.
The PIC_PluginExe::pendingRequest()method is called by the PIC to
check if there is still work to be done (by the user plug-in). The
PIC_PluginExe::pendingRequest()method should not actually do the
work since this is the role of PIC_PluginExe::processRequest().
If the PIC_PluginExe::pendingRequest()method indicates that there
is work to be done, the PIC then calls the
PIC_PluginExe::processRequest()method to do some of this work.
The user plug-in developer must ensure that the work is broken down
into tasks which need little CPU time.
Chapter 8
323
PIC/AG - Introduction
Execution API
While PIC_PluginExe::pendingRequest() indicates that there is still
work to be done, there is an iteration on calls to
PIC_PluginExe::processRequest(). The maximum number of such
iterations is defined by the InternalLoopCount attribute in pic.conf.
The user plug-in developer should develop the methods of the PIC
Execution API to obtain the user plug-in behavior that is required.
In particular, the user plug-in developer must develop the
PIC_PluginExe::processRequest() method to do the work as and
when required.
The Plug-In scheduling model is shown in more detail in Figure 10-2,
“Plug-In Scheduling Model.”
324
Chapter 8
PIC/AG - Introduction
HA API
HA API
The HA API is responsible for the management of the HA FSM (Finite
State Machine).
The object model is shown in Figure 10-1, “C++ Structure of PIC API
Classes.”
Class
PIC_PluginHA is the interface class to the HA API.
Features
The HA API provides the following HA features:
•
Interact with the user plug-in for HA state transitions.
•
It allows the user plug-in to request that the HA state is assigned
DOWN in case of internal failure.
•
It allows the user plug-in to notify the PIC about work completion in
some transient states.
HA States
In HP OpenCall platforms, the High-Availability (HA) feature is
managed by the Fault Tolerance Controller (FTC) process, also known as
the FTController.
The FTC starts and manages all the High-Availability process life cycles
of an HP OpenCall platform.
On HP-UX, there is a graphical interface to the FTC. This graphical
interface is known as the Platform Monitor or FT_monitor. Using this
graphical interface, you can display the process states and issue
commands to the processes. You can monitor and administer the HA
status of HP OpenCall processes using the Platform Monitor GUI, the
ocftcontrol command, and the ocftstatus command.
Chapter 8
325
PIC/AG - Introduction
HA API
The PIC (PlugInContainer) process (or any other HA process) life cycle is
defined by the HA states listed in Table 8-1, “Definition of HA States.”
Table 8-1
Definition of HA States
State
Definition
FTC_ACTIVE
A process in this state is actively handling a functionality of
the platform.
FTC_HOT_STANDBY
A process in this state is ready to take over control of a service
(but it is not currently handling a functionality of the
platform) in a minimum time.
FTC_SWITCHING
A process in this state is actually taking control of a
functionality.
FTC_STOPPING
A process in this state is going to FTC_DOWN.
FTC_SYNCHRONIZING
A process in this state is synchronizing itself with an
FTC_ACTIVE process. A process in this state is going to the
FTC_HOT_STANDBY state.
FTC_COLD_STANDBY
A process in this state may become active but is not currently
synchronized with the FTC_ACTIVE process.
FTC_BOOTING
A process in this state is starting. It is not ready to become
FTC_ACTIVE.
FTC_DOWN
A process in this state process has stopped (disappeared).
HA state transitions are driven by the HA Finite State Machine (FSM).
For more information on these states, see the FT_Monitor(1)man page
(on an HP OpenCall platform).
HA Model (on HP OpenCall SS7)
The HA FSM model as implemented by PIC is outlined in Figure 8-7,
“HA FSM for PIC (on HP OpenCall SS7).”
326
Chapter 8
PIC/AG - Introduction
HA API
Figure 8-7
Chapter 8
HA FSM for PIC (on HP OpenCall SS7)
327
PIC/AG - Introduction
HA API
When the FTC notifies the PIC of a change in the HA state, the PIC calls
the PIC_PluginHA::newState()method to notify the user plug-in of the
new HA state. The user plug-in developer may customize this method.
As regards HA, the user plug-in is mainly driven by the PIC and the
FTC. Once informed of a change in HA state by the PIC, the user plug-in
can either acknowledge the change, or ask for time before making the
change (in a transient transition). It can also decide to stop by executing
the PIC_PluginHA::fault() method and its state then becomes
FTC_DOWN.
Transitions from an “FTC driven state” are controlled by the FTC.
Transitions from a “Plug-In driven state” are controlled by the user
plug-in.
Transitions to the DOWN state can be triggered by either the FTC or the
user plug-in. Transitions to DOWN can be made from any other state.
Exit from the FTC_SWITCHING and FTC_SYNCHRONIZING states
represents the completion of transient operations for the user plug-in.
After FTC_STOPPING, the user plug-in can either go to
FTC_HOT_STANDBY (normal case), or go to FTC_COLD_STANDBY
(and subsequently FTC_SYNCHRONIZING).
The PIC uses the PIC_PluginHA::newState() method to inform the
user plug-in of changes in the HA state.
Transient States
In particular, when the HP OpenCall platform starts, the FTC and
Plug-In process decide which side will become FTC_ACTIVE and which
side will become FTC_HOT_STANDBY. The PIC informs the user
plug-in via the PIC_PluginHA::newState() method, of the new state
that it is entering, respectively FTC_SWITCHING for the Active side
and FTC_SYNCHRONIZING for the Standby side. Within the
FTC_SWITCHING (respectively FTC_SYNCHRONIZING) state, the
user plug-in can then perform whatever processing it has to perform in
order to move to the FTC_ACTIVE (respectively FTC_HOT_STANDBY)
state.
During the transient states (FTC_SWITCHING,
FTC_SYNCHRONIZING, and FTC_STOPPING), the user plug-in
should, in particular, manage the state of its PCA connections. In order
to be operational, they have to be both established and then enabled.
328
Chapter 8
PIC/AG - Introduction
HA API
Once it has completed the state transition, the user plug-in informs the
PIC either directly via the return code of the
PIC_PluginHA::newState() method, or if it requires more processing,
by calling the PIC_PluginHA::stateCompleted() method later.
Connection Establishment
PCA connection establishment can only be performed on PCA_Client
initiative. Thus, the user plug-in acting as a PCA_Server has no control
on PCA connection establishment. However, if it acts as a PCA_Client, it
should perform connection establishment during its transient state
transition (as appropriate).
Enabling/Disabling
Establishment of a PCA connection is not enough for traffic to be allowed
over it. The PCA connection must also be enabled.
In contrast with establishment, enabling has to be performed on both the
client and the server sides, and on client and server initiative,
respectively. After its establishment, by default, the PCA Connection is
disabled on both sides.
On its side, the user plug-in (shared library) has thus the possibility to
allow or prevent traffic on its PCA connections, whether as a client or as
a server, by enabling or disabling them. During the transient state, the
user plug-in should enable (respectively disable) the PCA connections on
its side, according to whether it wants to allow (respectively prevent)
traffic in the HA state it is going to (FTC_ACTIVE or
FTC_HOT_STANDBY).
For example, it can decide to enable (respectively disable) all its
connections during the FTC_SWITCHING (respectively
FTC_SYNCHRONISING or FTC_STOPPING) HA State.
The user plug-in enables connection by calling the
PCA_Server::enable() or the PCA_Client::enable() method
depending on whether it is acting as a server or as a client for the
corresponding PCA connection.
The user plug-in disables connection by calling either the
PCA_Server::disable() or the PCA_Client::disable() method.
Switchover
In the case of a switchover:
Chapter 8
329
PIC/AG - Introduction
HA API
•
the current FTC_HOT_STANDBY goes:
FTC_HOT_STANDBY --> FTC_SWITCHING --> FTC_ACTIVE
During the FTC_SWITCHING state, the user plug-in should enable
its PCA_Server and PCA_Client connections, as appropriate.
•
the current FTC_ACTIVE can either go:
FTC_ACTIVE --> FTC_STOPPING --> FTC_HOT_STANDBY
In this case, it is recommended that the user plug-in perform the
following actions during the FTC_STOPPING state (using the
appropriate PCA methods):
Step 1. Flush its inbound queue (delete its messages).
Step 2. Flush the PCA Server(s).
Step 3. Close all its sessions (so it needs to keep a list of its sessions).
Step 4. Disable its PCA Server(s).
or it can go:
FTC_ACTIVE --> FTC_STOPPING --> FTC_DOWN
which corresponds to:
Step 1. It executes the PIC_PluginHA::fault() method during the
FTC_STOPPING state.
Step 2. Consequently, it goes FTC_DOWN and the user user plug-in object is
deleted.
Step 3. It restarts “clean”, that is, once in the FTC_DOWN state, depending on
its HA configuration, it may be respawned automatically by the FTC. In
this case, it goes:
FTC_BOOTING --> FTC_SYNCHRONIZING --> FTC_HOT_STANDBY
Switchback
In the case of a switchback, there is another switchover (so the original
FTC_ACTIVE becomes FTC_ACTIVE again, and the original
FTC_HOT_STANDBY becomes FTC_HOT_STANDBY again). The user
plug-in behavior during a switchback is as described above for a
switchover.
330
Chapter 8
PIC/AG - Introduction
Registry API
Registry API
The Registry API is responsible for the retrieval of some PIC attributes.
This API is independent of the other APIs and is not linked to them. In
comparison to the other APIs, it is relatively simple. It is designed to
enable the user plug-in to retrieve some attributes. This Registry API
can be used anywhere in the user plug-in code.
The object model is shown in Figure 10-1, “C++ Structure of PIC API
Classes.”
Class
PIC_Registry is the interface class to the Registry API.
Purpose
The Registry API provides access to some PIC attributes, in particular,
the user plug-in name.
Chapter 8
331
PIC/AG - Introduction
PCA (Plug-In Communication API)
PCA (Plug-In Communication API)
The PIC supplies a communication API (known as the PCA) and an
Execution API. These are illustrated in Figure 8-8, “PCA Classes (as
Generally Used in a Plug-In).”
The PCA supplies the basic C++ classes that the user plug-in needs for
communication with other user plug-ins. For more details, see
Figure 9-2, “The PCA Object Model as Used in a Plug-In.”
Figure 8-8
332
PCA Classes (as Generally Used in a Plug-In)
Chapter 8
PIC/AG - Introduction
PCA (Plug-In Communication API)
The user plug-in developer should customize these to obtain the behavior
that is required. In particular, the user plug-in developer should develop
the areas shown in yellow in Figure 8-8, “PCA Classes (as Generally
Used in a Plug-In).”
The user plug-in developer can also create and use application-specific
classes that are shown as MyAppli_Classes in the figure.
Classes
The following are some of the classes made available to the user:
•
PCA_Server: This is the basic server interface class to the PCA.
•
PCA_Client: This is the basic client interface class to the PCA.
•
PCA_Queue: On the inbound path, the PCA_Server delivers received
messages to the inbound queue which is an object of the PCA_Queue
class.
•
PCA_Message: This is the class for messages exchanged between PCA
users.
Communication Setup and Control
From the user plug-in point of view, one or more clients (other user
plug-in applications) can connect to the user plug-in.
For communications setup and management, the PCA allows you to:
•
start a user plug-in server (i.e. PCA_Server) to accept client
connections.
•
enable/disable client connections to this server.
•
inform the user plug-in about each new client connection.
•
inform the user plug-in about each client disconnection.
•
act as a client of another user plug-in server.
Client connection/disconnection notifications are provided only for
management purposes. Connection notification allows the user plug-in to
accept or reject a new client. Disconnection notification allows the user
plug-in to decide how to process possible broken dialogues.
Chapter 8
333
PIC/AG - Introduction
PCA (Plug-In Communication API)
The server cannot disconnect a client. Disconnection occurs on client
initiative only. Exchanges of messages between the server and a
connected client can occur only once the connection has been enabled.
Enabling has to be performed on both sides of the connection (that is, by
the server and by the client). The PCA allows the client (which is a
PCA_Client) to do this. Each side can thus control when traffic on the
connection starts or is interrupted.
Communication
Once a session is created, the user plug-in can freely send or receive
messages on the session. In the outbound direction, the user plug-in does
not specify the client to which the message is sent. In the inbound
direction, the user plug-in does not need to know which client originated
the message. This is managed internally by the PCA and is hidden from
the user.
The PCA can:
•
handle message contents.
•
send messages within sessions.
•
receive messages within sessions.
•
restrict the inbound message flow (Receive flow control).
Management
The management interface can retrieve or set Inter Process
Communication (IPC) parameters, such as buffer size, and enable
time-stamping of messages for performance monitoring purposes.
334
Chapter 8
PIC/AG - Introduction
TimerLib API
TimerLib API
If the user plug-in needs timers, then it must use the TimerLib API to
handle them.
The TimerLib library is dynamically linked with the PIC.
The TimerLib API is declared on an HP OpenCall system in the file
/opt/OC/include/TimerLib.h. To use the HP OpenCall TimerLib API,
insert the following line in the user plug-in source code:
#include <TimerLib.h>
This API enables you to set (and cancel) a timer.
PIC Pool of Timers
In this case, the pool of timers is in the PIC. There is a single instance of
the PIC pool of timers. See the following figure.
Figure 8-9
The PIC Pool of Timers
The timer is set by the plug-in, but it pops in the PIC context.
The number of these timers is limited. The limit applies to the total
number of timers (the PIC’s own timers + the user plug-in timers). For
the limit, see the HP OpenCall SS7 Release Notes.
Chapter 8
335
PIC/AG - Introduction
TimerLib API
When using the PIC pool of timers, the PIC itself takes care of the API
scheduling. Therefore, the user plug-in must not use the
TIMER_handler() and the TIMER_select_time() functions. These
functions are called by the PIC.
Table 8-2 on page 336 shows the functions available in the TimerLib API
in the case where the PIC pool of timers is used.
Table 8-2
The PIC Pool of Timers - TimerLib API Functions
Function
Purpose
TIMER_cancel_timer()
Cancel a timer that is currently running.
TIMER_handler()
Process timer expirations.
This is called by the PIC only.
TIMER_select_time()
Set a pointer to a timeval to the correct value.
This is called by the PIC only.
TIMER_set_timer()
Set a timer.
TIMER_set_timer_t()
Set a timer.
TIMER_ts_add()
Add two times.
TIMER_ts_equals()
Compare two times.
TIMER_ts_lessthan()
Compare two times.
TIMER_ts_now()
Get the current system time.
TIMER_ts_sub()
Subtract two times.
336
Chapter 8
PIC/AG - Introduction
Changing the User Plug-In
Changing the User Plug-In
The HP OpenCall PIC Framework does not provide a specific
administration/management tool to change a user plug-in.
To change a user plug-in, you:
Step 1. Stop the PIC.
Step 2. Change the user plug-in shared library. For example, replace the old
version of the user plug-in shared library with the new version, or
change the path in the used instance of pic.conf to point to the new
version.
Step 3. Modify the configuration (if necessary).
Step 4. Restart the PIC.
Chapter 8
337
PIC/AG - Introduction
Starting/Stopping the User Plug-In
Starting/Stopping the User Plug-In
A user plug-in can be monitored like any other HP OpenCall process (if
managed by the FTC).
The PIC can be managed through the FTC to start/stop a user plug-in.
Using the Platform Monitor
To start a user plug-in, you start the PIC using the Platform Monitor. In
turn, the PIC loads and starts the user plug-in.
To force a switchover, you also use the Platform Monitor.
To stop a user plug-in, you use the Platform Monitor to stop the PIC. In
turn, the PIC stops the user plug-in.
The RunString field is used to specify the command line to start the
process. See the section on “Configuring PIC/AG” in the
HP OpenCall SS7 Operations Guide.
Using Command Lines
To force a switchover, you use the ocftcontrol command.
To stop a user plug-in, you use the ocftcontrol command to stop the
PIC. In turn, the PIC stops the user plug-in.
338
Chapter 8
PIC/AG - Introduction
Product Environment
Product Environment
Hardware Requirements
The required hardware configuration is specific to each user plug-in and
must be determined by the user plug-in developer. These requirements
depend on what the user plug-in application actually does.
However, the fact that the user plug-in runs on the same platform as
HP OpenCall means that the user plug-in shares hardware resources
with HP OpenCall.
As far as possible, the resources used by the user plug-in(s) and
HP OpenCall should be dedicated to prevent possible resource conflicts.
In particular, this applies to the LAN, the SCSI bus, memory, CPU, etc.
For hardware resource availability, refer to the appropriate HP OpenCall
documentation.
Other Equipment
Typically, a user plug-in will interface with an external device, either
hardware or software, as shown in Figure 8-2. This is the responsibility
of the user plug-in developer.
Chapter 8
339
PIC/AG - Introduction
Usability
Usability
The purpose of this section is to provide usability and operability
information about the PIC and the user plug-in (shared library).
Upgrade
The Plug-In API provides a C++ interface. It clearly isolates PIC and API
code from developer code:
•
The user plug-in (shared library) requires to be updated and
re-compiled each time the API specification is modified.
•
The user plug-in (shared library) does not require to be re-compiled
when the API implementation is modified.
•
The user plug-in (shared library) does not require to be re-compiled
when the PIC implementation is modified.
The user plug-in (shared library) is not loaded/unloaded dynamically.
The PIC is started with a specified user plug-in as a shared library. To
upgrade to a new user plug-in (shared library) version, you must restart
the PIC.
PCA Message Contents
The PCA can transfer any data transparently.
The user plug-in developer must work with the following knowledge of
PCA behavior:
340
•
No check is performed on exchanged messages by the PCA. It is
possible to send invalid messages to the remote side. It is the
responsibility of each side to check the validity of exchanged
messages, and these must be checked either before transmission or
on reception.
•
The PCA and the PIC do not check the contents of messages. The
coding and decoding of the data contents of messages is the
responsibility of the user plug-in developer. For example, a message
could hold a heading data part encoded in Q.931 and a trailing data
part encoded in PER, as long as both the user plug-ins agree that
this is the format to be used.
Chapter 8
PIC/AG - Introduction
Usability
Plug-In Management
The following limitations apply:
•
The Plug-In API provides no management facilities.
•
The maximum number of PICs is a parameter of HP OpenCall.
High Availability Framework
The PIC runs on the same platform as HP OpenCall and can switch
along with HP OpenCall or be managed independently.
Chapter 8
341
PIC/AG - Introduction
Exception Handling
Exception Handling
On HP-UX, the PIC and the user plug-in are compiled by the aCC
compiler and use STL V2 libraries.
The user plug-in programmer has to deal with exceptions raised either
by the PIC or by the user plug-in.
There are two cases of exceptions management:
•
Exceptions managed by the PIC.
•
Exceptions managed by the user plug-in.
How the PIC Manages Exceptions
The PIC (and the PCA, PIC Execution, PIC HA, and PIC Registry APIs)
do not raise any PIC specific exceptions. However, other kinds of
exceptions, for example, the one coming from STL functions as
bad_alloc, can be raised.
Any bad_alloc exceptions raised by “new” or STL functions are caught
internally in the PIC. Such an exception is converted to a specific explicit
status returned by the API functions.
At the PIC main level, there is a general exception handler that catches
any uncaught exceptions, produces a trace message and makes the whole
PIC go down. Then, depending on the HA policy, the PIC will either be
re-spawned on the same host, or will switchover to the standby host.
How the Plug-In Should Manage Exceptions
There are two basic rules to follow:
342
•
Since the PIC, the PCA, and the PIC APIs (Execution, HA, and
Registry), raise only fatal exceptions, the user plug-in does not need
to use a catch mechanism. Basically, when such exceptions are
raised, the PIC (and thus the user plug-in) is going down.
•
Since all exceptions caught by the general exception handler are
fatal, the user user plug-in code should not raise non-fatal exceptions
to the PIC.
Chapter 8
PIC/AG - Introduction
Plug-In Tutorial
Plug-In Tutorial
A tutorial is supplied with the HP OpenCall PIC Framework.
The tutorial is located in the /opt/OC/tutorials/PIC directory.
CAUTION
If you want to change a makefile or a tutorial supplied with
HP OpenCall SS7, you must first copy it to your own working directory.
You must not change the sources supplied with the HP OpenCall SS7
product in the directories in which they are delivered.
This tutorial contains an example of a user plug-in (shared library).
For further explanation of the HP OpenCall Plug-In feature, you are
recommended to refer to this tutorial. In particular, you should refer to
the tutorial to see how to run a user plug-in interactively.
Chapter 8
343
PIC/AG - Introduction
Plug-In Tutorial
344
Chapter 8
9
PIC/AG - Using the PCA API
This chapter describes the operation of the PCA (Plug-In Communication
API) and how it interfaces to a user plug-in.
Chapter 9
345
PIC/AG - Using the PCA API
High Availability (HA) and the PCA
High Availability (HA) and the PCA
This section describes the HA model for the HP OpenCall Plug-In and
how it impacts the PCA.
HA Model
Typically, in a configuration with Active and Standby platforms, two
types of connection are opened through the PCA, as shown in Figure 9-1:
Figure 9-1
•
Active connections are used to exchange data with the Active clients.
•
Standby connections are opened by Standby clients but do not carry
data.
Active and Standby Connections
A Standby connection is used to improve the performance of a possible
switchover. It can be activated in a much shorter time than opening a
new connection.
346
Chapter 9
PIC/AG - Using the PCA API
High Availability (HA) and the PCA
A connection is Active if both the client and the server side are Active. A
connection is Standby if both the client and the server are Standby.
Otherwise, the connection is in a transient state. Exchange of messages
is allowed only on Active connections.
Connection Enabling
The PCA allows the user to enable a connection when it enters the HA
Active state. Conversely, the user can also disable a connection when it
exits the Active state to a Standby state or any other state.
These features are implemented by the PCA_Server::enable(),
PCA_Client::enable(), PCA_Server::disable(), and
PCA_Client::disable() methods.
Enabling or disabling a connection does not impact the establishment of
the connection, it only impacts the exchange of messages above the
connection. Note also that Plug-In HA state transitions are driven by the
PIC API and are outside the scope of this chapter.
If a Server or Client connection is not enabled, you cannot create a new
session and if you try you will get the PCA_NOT_ACTIVE error code.
An attempt to send a message on an inactive connection returns an error.
This returns an immediate error status if the local side is not Active, or a
delayed error message if the remote side is not Active (this should
remain transient).
Default States
The default state of a server is disabled. A user plug-in should always
call the enable() method during user plug-in server setup. This can be
done at any time after the server object is created regardless of whether
or not another client is already connected. The state automatically
applies to all present and future client connections.
The default state of a client is disabled. A user plug-in should always call
the enable() method during user plug-in client setup. This can be done
at any time after the client object is created regardless of whether the
client is already connected to a server or not.
Chapter 9
347
PIC/AG - Using the PCA API
PCA Description
PCA Description
This section describes the PCA user-aware classes and how to setup a
user plug-in server. It also describes how clients connect to this server
and how messages can be exchanged.
Note that a user plug-in does not only interface with the PCA. The PCA
only addresses the communication aspects with other clients. A user
plug-in must also interface to the Plug-In Container execution interface
(see Chapter 10, “PIC/AG - Using the PIC APIs,” on page 385) for
scheduling and HA driving purposes.
For scheduling, see “Plug-In Scheduling” on page 391.
For HA, see “Plug-In HA Management” on page 395.
Object Model
The PCA has an object-oriented architecture. The object model of the
PCA is shown in Figure 9-2.
348
Chapter 9
PIC/AG - Using the PCA API
PCA Description
Figure 9-2
Chapter 9
The PCA Object Model as Used in a Plug-In
349
PIC/AG - Using the PCA API
PCA Description
The PCA provides a number of classes that can be used by the user
plug-in as is, and a number of base classes that are intended to be
customized by developers for specific purposes.
These base classes usually have a default implementation that can be
left unmodified by developers to provide the functionality of the class,
provided the default meets their requirements.
In Figure 9-2, the “Plug-In Body” block depicts the user-specific classes
that are not strictly related to the PCA but that are required to
implement the actual processing part of the user plug-in. The Plug-In
body is the user of the PCA.
The following classes are made available to the user:
NOTE
•
PCA_Queue: On the inbound path, the server delivers received
messages to the inbound queue which is an object of the PCA_Queue
class. The user plug-in then reads messages from the queue when it
is scheduled. PCA_Queue is a fixed-length queue with high and low
watermarks for flow control management.
•
PCA_Message: This is the class for messages exchanged between user
plug-ins. A message consists of a number of chained buffers together
with read and write pointers. The PCA_Message class provides basic
data handling methods such as read and write. It also provides
structured message handling methods for building and parsing the
headers of messages.
A message read is performed with PCA_Queue::get().
A message write is performed with PCA_Server::send() or with
PCA_Client::send().
Do not use the PCA_Queue::put() method. The PCA_Queue::put()
method is used by the PCA to fill the user plug-in inbound queue with
messages received from the external PCA clients. Then, the user plug-in
can retrieve these messages using the PCA_Queue::get() method, and
answer them using one of the send() methods. The user plug-in should
not add messages to its own inbound queue.
The following classes are base classes that can be customized (but this
customization is optional) by the user plug-in developer:
350
Chapter 9
PIC/AG - Using the PCA API
PCA Description
Chapter 9
•
PCA_Server: This class acts both as a base class and an API access
class (server interface class to the PCA). It allows the setup of a user
plug-in server and the exchange of messages with clients. You may
customize the PCA_Server to implement your own connection
management (and flow control management). If you implement your
own connection management, the user plug-in is then notified of each
connection attempt and can accept or reject such requests. The
PCA_Server is also notified of disconnection. In addition, the
outbound path and session flow control mechanisms (see below)
interface with this class. A user plug-in can possibly define many
servers if it offers many services.
•
PCA_Client: This class acts both as a base class and an API access
class (client interface class to the PCA). It allows a user plug-in to act
as a client of a user plug-in server and to exchange messages with it.
You can refine some member functions for connection management
and flow control management. If you refine the PCA_Client to
implement your own connection management, then the PCA_Client
is notified of connection “open” and “close” state changes. In addition,
the outbound path and session flow control mechanisms (see below)
interface with this class.
•
PCA_Session: The session is a basic concept of the PCA. A session
identifies a set of related messages (for example, an answer message
related to a previous question message). The same session object is
attached to all messages within the same set. A session is uniquely
associated with one PCA connection between a user plug-in server
and a client. Plug-In developers can define their own session object to
add context sensitive information to the base session class. Then,
each time a message is processed it can easily retrieve information
associated with the dialogue.
•
PCA_SessionFactory: Session objects are allocated internally by the
PCA. If a developer customizes the base PCA_Session class, the
developer must also provide a Session Factory object which is used by
the PCA to create and delete the user’s session when required.
•
PCA_BufferAllocator: PCA messages consist of chained buffers. If
developers find it efficient to control the allocation of such buffers
(for example, buffers allocated from a specified pool or from shared
memory), then the developers must define their own
PCA_BufferAllocator inherited object to perform the allocation.
Many such objects can be provided if many pools are used, depending
on the purpose of each messages. If developers do not need any
351
PIC/AG - Using the PCA API
PCA Description
special allocation mechanism, they can use the default
implementation of the PCA_BufferAllocator class which allocates
buffers from the OS heap. In this case, they do not need either to
understand the chained buffers structure of the PCA messages or
how to handle it.
Typically, the user plug-in developer customizes PCA_Server (to
customize the connection and/or flow control) and PCA_Session (and
consequently, PCA_SessionFactory) to associate a context with a
session.
Plug-In Server and Client Names
Plug-In servers are addressed by clients via physical addresses in the
form: <tcp-port>@<hostname> or <tcp-port>@<IP-address>.
352
Chapter 9
PIC/AG - Using the PCA API
Server Setup
Server Setup
First, a server object must be setup to provide a communication
capability with other clients.
Server Initialization
A server is setup by creating an object from the PCA_Server class, or
from a user-defined derived class. The purpose of deriving a user class is
for client connection management and session flow control management.
This is addressed in “Client Connection Management” on page 355 and
“Session Management” on page 361.
The newly created PCA_Server object must first be initialized with the
PCA_Server::init() method. It is associated with the following
parameters:
Chapter 9
•
The inbound queue:
The inbound queue is an object from the API-provided PCA_Queue
class, created using the PCA_Queue::create() method. It stores the
messages received by the PCA_Server before they get processed by
the user plug-in. The parameterization of this queue, performed by
calling the PCA_Server::init() method, directly impacts inbound
flow control behavior. This is discussed in “Receiving Messages” on
page 382.
You (the user plug-in developer) provide the inbound queue. This is
because when a user plug-in is made up of many user plug-in
servers, you can decide whether to use a single queue for all servers
or many queues (depending on the specific requirements of the
application). In the future, you may also want to customize this
interface class.
•
The user session factory:
If you define your own session class, you must also define your own
session factory class inheriting from PCA_SessionFactory. This is
discussed in “Session Management” on page 361. This argument is a
pointer to a user-session factory object. If you have no specific
requirements concerning sessions, you may simply pass a pointer to
a PCA_SessionFactory object.
353
PIC/AG - Using the PCA API
Server Setup
•
The user buffer allocator for inbound messages:
To optimize or customize memory usage for PCA messages, you can
specify buffer allocators.
This argument is a pointer to a user buffer allocator object. If you
have no specific requirements about the buffer allocator, you can
pass a NULL pointer or a pointer to a PCA_BufferAllocator object.
This parameter is provided only for inbound messages. For outbound
messages, the buffer allocator is associated with the message at
message construction time, see “Buffer Allocator” on page 378.
•
The outbound queue parameterization:
To cope with outbound overflow conditions, the PCA maintains
internally a PCA_Queue-like outbound queue. This fixed-size queue
is parameterized with a low watermark and a high watermark.
These parameters directly impact the transmit flow control behavior.
This is discussed in “Session Management” on page 361 and
“Sending Messages” on page 380.
The PCA_Server::init() method returns a status that indicates
whether or not the operation succeeded. The operation can only fail due
to internal memory allocation problems. In case of failure, the user
plug-in developer should check the consistency of queue-sizing
parameters.
Server Opening
Once initialized, the PCA server must be opened by attaching it to a user
plug-in server name as a physical address.
Opening a server is performed by the PCA_Server::open() method. It
succeeds unless there is an internal memory allocation problem or the
required name is unknown.
Once opened successfully, a server is ready to receive client connection
requests. This is detailed in “Client Connection Management” on
page 355.
NOTE
354
After a correct open operation on the Server, you must enable it before
sending traffic (that is, before session creation).
Chapter 9
PIC/AG - Using the PCA API
Server Setup
Server Closing
In the current release of HP OpenCall, dynamic loading and unloading of
the user plug-in is not addressed. Servers are not intended to be closed
by software after being opened. The operator must kill the PIC process
instead.
However, the PCA provides a simple lazy-closing mechanism. When no
client is connected (none connected yet, or all disconnected), you can call
PCA_Server::close() to stop the server. Subsequently, the server can
be re-started by calling PCA_Server::open() again, or the object may be
deleted if it is no longer useful.
The operation fails if one or more clients are connected. The user plug-in
cannot force the disconnection of clients.
Server IPC Parameterization
The low-level communication layer between the user plug-in server and
the clients can be parameterized on a server basis for performance
purposes. This can be done at server-setup time, or dynamically once the
server is connected to its clients, as long as consistency rules on
parameter values are respected.
Changing the server Inter Process Communication (IPC) parameters
impacts all present and future low level connections between the server
and each peer client. Low-level connections cannot be individually
configured.
The IPC methods include:
•
PCA_Server::setCnxLowTransmitTime()
•
PCA_Server::setCnxHighTransmitTime()
•
PCA_Server::setCnxEnableBuffering()
•
PCA_Server::setCnxRecvBufferSize()
•
PCA_Server::setCnxSendBufferSize()
Client Connection Management
Connection is always initiated by the client side. A user plug-in cannot
initiate connection to the client. It can only set up a server and wait for
connections.
Chapter 9
355
PIC/AG - Using the PCA API
Server Setup
Client connection management can optionally be performed by
customizing the PCA_Server base class. Three virtual methods are
defined for this purpose:
•
PCA_Server::authorizeClient()
This method allows the server to accept or reject each connection
attempt from a client. The decision can be made from the number of
connected clients or the identity of the new client. The default
implementation is accept.
•
PCA_Server::clientConnected()
This method informs the server that a client previously authorized
by PCA_Server::authorizeClient() is now connected. The default
implementation is NOP (no operation).
•
PCA_Server::clientDisconnected()
This method informs the server that either a client previously
authorized failed to connect, or that a running client disconnected on
its own or due to an IPC error. The default implementation is NOP.
Within all these methods, a client is identified by a unique address as a
literal string. This address is a physical address, made up of a TCP port
and IP address or hostname, terminated by a trailing '!'. This address is
provided by the PCA layer of the connected client. The TCP Port is
usually allocated dynamically at connection setup. The client itself has
no control on the address that is provided.
The default implementation of connection management always accepts
connection requests from clients, and logs the effective connections
and disconnections.
The user plug-in cannot exchange messages with clients before the first
client is connected.
The connection management interface indicates when the user plug-in
can start communicating with its clients.
Note that all clients of a user plug-in server are equivalent. There is no
way to specify the destination client for an outgoing session.
356
Chapter 9
PIC/AG - Using the PCA API
Client Setup
Client Setup
First, a client object must be setup to provide a communication capability
with a user plug-in server. This object is needed only if the user wants to
connect to another user plug-in server.
Client Initialization
A client is setup by creating an object from the PCA_Client class, or from
a user-defined derived class. The purpose of deriving a user class is for
server connection management and session flow control management.
This is addressed in “Client Connection Management” on page 355 and
“Session Management” on page 361.
The newly created PCA_Client object must first be initialized with the
PCA_Client::init() method.
It is associated with the following parameters:
Chapter 9
•
The target server name:
The PCA allows a user to pass a physical address
(tcpPort@ipAddress).
Note that the target server is defined at client initialization. A
PCA_Client can connect to one and only one server and this cannot
be changed after the initialization.
•
Literal information about the client:
This string will be passed to the destination server as an argument
to the PCA_Server::clientConnected() method. Within this
method, the server also receives the name (that is, the address) of the
client. However, this address, which is usually a physical address of
the form TCP port @ IP address, is provided by the PCA layer of the
client. The client itself has no control on the provided address. If it
wants to identify itself to the server, it can use this literal
information.
•
The inbound queue:
The inbound queue is an object from the API-provided PCA_Queue
class, created using the PCA_Queue::create() method. It stores the
messages received by the PCA_Client before they get processed by
the user plug-in. The parameterization of this queue, performed by
357
PIC/AG - Using the PCA API
Client Setup
calling the PCA_Client::init() method, directly impacts inbound
flow control behavior. This is discussed in “Receiving Messages” on
page 382.
•
The user session factory:
If you define your own session class, you must also define your own
session factory class inheriting from PCA_SessionFactory. This is
discussed in “Session Management” on page 361. This argument is a
pointer to a user-session factory object. If you have no specific
requirements concerning sessions, you may simply pass a pointer to
a PCA_SessionFactory object.
•
The user buffer allocator for inbound messages:
To optimize or customize memory usage for PCA messages, you can
specify buffer allocators.
This argument is a pointer to a user buffer allocator object. If you
have no specific requirements about the buffer allocator, you can
pass a NULL pointer or a pointer to a PCA_BufferAllocator object.
This parameter is provided only for inbound messages. For outbound
messages, the buffer allocator is associated with the message at
message construction time, see “Buffer Allocator” on page 378.
•
The outbound queue parameterization:
To cope with outbound overflow conditions, the PCA maintains
internally a PCA_Queue-like outbound queue. This fixed-size queue
is parameterized with a low watermark and a high watermark.
These parameters directly impact the transmit flow control behavior.
This is discussed in “Session Management” on page 361 and
“Sending Messages” on page 380.
•
The session parameterization:
Session management is parameterized with the maximum number of
sessions needed (originated from both sides) and the maximum
number of sessions originated from the client side. These parameters
(of the PCA_Client::init() method) should be set large enough to
cope with all situations. They cannot be changed after the
initialization. They involve neither significant memory consumption
nor any processing overhead either at the client side or the server
side.
The PCA_Client::init() method returns a status that indicates
whether or not the operation succeeded. The operation can only fail due
to internal memory allocation problems. In case of failure, the user
plug-in developer should check the consistency of queue-sizing
parameters.
358
Chapter 9
PIC/AG - Using the PCA API
Client Setup
Client Opening
Once initialized, the PCA client must be opened, that is, it must try to
connect to its target server.
Client opening is performed by the PCA_Client::open() method. It
succeeds unless there is an internal memory allocation problem or the
required name is unknown.
Connection setup completes when the PCA calls either the
PCA_Client::stateOpened() method or the
PCA_Client::stateClosed() method. See “Server Connection
Management” on page 360.
Once opened successfully (that is, PCA_Client::stateOpened() has
been called), a client is ready to communicate with its target server. This
is detailed in “Server Connection Management” on page 360.
NOTE
After a correct open operation on the client, you must enable it before
sending traffic (that is, before session creation).
Client Closing
To disconnect from its target server, the client calls the
PCA_Client::close() method.
Client IPC Parameterization
The low-level communication layer between the client and the server can
be parameterized for performance purposes. This can be done at
client-setup time, or dynamically once the client is connected to its server,
as long as consistency rules on parameter values are respected.
Changing the client IPC parameter impacts present and future low level
connections between the client and its server. A client can connect to one
and only one server (the target server defined at client initialization).
However, the client can open/close/re-open this connection several times,
for example, in case of connection failure.
The IPC methods include:
•
Chapter 9
PCA_Client::setCnxLowTransmitTime()
359
PIC/AG - Using the PCA API
Client Setup
•
PCA_Client::setCnxHighTransmitTime()
•
PCA_Client::setCnxEnableBuffering()
•
PCA_Client::setCnxRecvBufferSize()
•
PCA_Client::setCnxSendBufferSize()
Server Connection Management
Connection with the server is always initiated at the client side by
calling the PCA_Client::open() method. The termination of the
PCA_Client::open() method does not correspond to the establishment
of the connection. If there is no error (returned status: NO_ERROR) in the
processing of the PCA_Client::open()method, the PCA has
acknowledged the request to establish the connection and handles the
request asynchronously. It then notifies the client of the connection state
change by asynchronous calls to virtual functions as detailed below.
Connection management can optionally be performed by customizing two
virtual methods of the PCA_Client base class defined for this purpose:
•
PCA_Client::stateOpened()
When the connection actually becomes open, the PCA calls this
method to notify the client of this event.
•
PCA_Client::stateClosed()
When the connection is closed, the PCA calls this method to notify
the client of this event. This may occur either in the setup phase or
once the connection is established.
The default implementation of these connection management methods is
NOP (No Operation).
360
Chapter 9
PIC/AG - Using the PCA API
Session Management
Session Management
Messages are exchanged between a user plug-in server and a user
plug-in client within sessions.
A session identifies a set of related messages.
It is the session that identifies the client-server connection on which a
message is exchanged, as a session is associated with one and only one
connection. Message routing between the user plug-in server and its
clients is based on the session. All messages within a session are
exchanged with the same client. There is no way for the user plug-in to
know with which client the session is associated. This is transparent to
the user plug-in and fully managed by the PCA.
From a programming point of view, a session is an object. Each message
exchanged with the client references a session object.
This section shows how users can define their own sessions, and then
manage them for exchanging messages with the connected user plug-ins.
Customizing Plug-In Sessions
If you (a user plug-in developer) needs to add contextual information to a
session, you can specialize the PCA_Session base class. Since sessions
are created internally by the PCA, you must then provide your own
session factory class inheriting from the PCA_SessionFactory base
class, in order to allocate and release objects from this new class. This
requires the PCA_SessionFactory::createSession() and
PCA_SessionFactory::destroySession() methods.
The specialized session factory can also perform some other tasks. For
example, to open a session a user plug-in specific external device must be
setup, you can do this in the PCA_SessionFactory::createSession()
method, and you can undo it in the
PCA_SessionFactory::destroySession() method.
The user plug-in developer is free to implement all suitable tasks,
provided they remain compliant to the generic user plug-in programming
guidelines.
Chapter 9
361
PIC/AG - Using the PCA API
Session Management
Session Type
Session creation can be initiated either by the client side, or by the server
side, depending on who sends the first message of the session. This
session type (CALLER or CALLEE) can be found with the
PCA_Session::getType() method.
Session States
A session can be in one of the following 4 possible states:
•
ACTIVE
•
BROKEN
•
REJECTED
•
ZOMBIE
You can retrieve the state of a session using the
PCA_Session::getState() method.
The normal state of a session is ACTIVE.
The state of session can change depending on:
•
the state of the connection between the user plug-in server and a
client (over which the session is used to send messages),
•
the condition of reception of messages sent within this session,
•
the condition of deletion of the session object.
The state mechanism for a session is shown in Figure 9-3, “State
Machine for a Session.”
362
Chapter 9
PIC/AG - Using the PCA API
Session Management
Figure 9-3
Chapter 9
State Machine for a Session
363
PIC/AG - Using the PCA API
Session Management
ACTIVE State
This is the default state after successful creation. ACTIVE sessions are
used to exchange messages between the user plug-in (shared library)
server and the client.
BROKEN State
Any session is uniquely bound to one connection between a user plug-in
(shared library) server and a client.
Sometimes, a client can disconnect from the server with some sessions
being left open. For example, the disconnection may occur on client
initiative, or due to an IPC failure, or to a client being re-spawned.
In such cases, on the server side, the sessions related to the connection
are said to be broken and are automatically moved by the PCA to the
BROKEN state. However, on the client side, the corresponding sessions
are automatically closed by the PCA. There is no concept of broken
sessions on a client. This concept is specific to the server.
For example, the disconnection may occur on the client initiative, or due
to an IPC failure, or to a client being re-spawned.
You should not attempt to send messages on a session that is in a
BROKEN state. Even if the client re-opens the connection to the server,
it is not possible to use the broken sessions to exchange messages again
with this client (as the sessions on the client side are automatically
closed upon disconnection). You are recommended to delete these
BROKEN sessions.
REJECTED State
A message sent from the server to a client, or from a client to the server,
within a session, may be rejected by the receiving side (see “Session
Reject” on page 370). This results in an error message being returned to
the sender (see “Messages” on page 373) and the session is said to be
“rejected”.
ZOMBIE State
In some transient states, a session object may still exist but will be
deleted soon by the PCA (see “Session Deletion” on page 366 and
“Session Locking” on page 368). The session is then said to be a “zombie”
session.
364
Chapter 9
PIC/AG - Using the PCA API
Session Management
This happens when the user plug-in requests the PCA to delete a session
object (via a close() or abort() method), and the PCA cannot delete the
session object because it is currently locked or it is still referenced by
some messages. In such cases, the PCA acknowledges the request by
changing the state of the session to ZOMBIE.
The PCA will effectively delete the session object as soon as it is no
longer locked, or referenced by messages. When this will occur is
effectively outside of the control of the user plug-in (shared library)
application. For example, if the session is referenced by a message
currently in the outbound-queue waiting to be delivered, the reference is
removed when the PCA deletes the message, following its delivery. The
user plug-in cannot control when the PCA will delete this message. The
user plug-in can use locks to prevent the session from being deleted if it
still needs access to it. However, if the user plug-in unlocks a session or
deletes a message referring to it, this can potentially lead to the deletion
of this session object.
Session Creation
Sessions can be created either by the server or by a client, depending on
the side that initiates the dialogue (that is, sends the first message using
this session). The sender creates an outgoing session by using either the
PCA_Server::openSession(), or the PCA_Client::openSession()
method.
The reception of the first message using this session automatically
triggers the creation of a corresponding session object on the receiver
side. The creation of the incoming session is transparent to the receiver.
In both cases, the PCA internally calls the
PCA_SessionFactory::createSession() method to allocate the
session. The type of the session to be created is passed to the method.
Plug-In developers can customize this method and may implement any
specific processing required in addition to session object creation.
However, user plug-in (shared library) developers must not try to access
the public PCA_Session members of the newly created object within this
method.
On the sender side, the session creation can fail if:
Chapter 9
365
PIC/AG - Using the PCA API
Session Management
•
the receiver(s) is overloaded (that is, all the connected clients if the
sender is the user plug-in server, or the destination server if the
sender is a client). See “Server Session Flow Control” on page 369
and “Client Session Flow Control” on page 370.
•
the maximum number of sessions allocated to the connection is
reached. See the section on session parametrization in “Client
Initialization” on page 357. It will not be possible to create new
session unless some sessions (currently in use) are deleted.
•
other conditions, defined by the user plug-in (shared library)
developer during customization of the
PCA_SessionFactory::createSession(), method occur.
On the receiver side, the automatic session creation can also fail and
result in a session reject. See “Session Reject” on page 370.
Session Deletion
Normal Case
The destruction of a session should be performed both by the client side
and the server side.
Contrary to session creation, there is no mechanism that automatically
triggers, following the deletion of a session on one side, the deletion of the
corresponding session on the other side. The synchronization between
client and server on session deletion has to be managed at the
application level. The server and the client should agree on a protocol
that allows each of them to inform (or request) the other side of which
session to delete and when to delete it.
Clients call the PCA_Client::closeSession() method to delete a
session. Servers call the PCA_Server::closeSession() method to
delete a session.
Both sides must always be involved in session deletion (irrespective of
which side initiated the session).
Aborting a Session
In some exceptional cases, a session can be aborted by calling the
PCA_Server::abortSession() method on the user plug-in server side,
or the PCA_Client::abortSession() method on the user plug-in client
side. In this case, the session is closed and an abort error message is
366
Chapter 9
PIC/AG - Using the PCA API
Session Management
propagated. The abort session feature is based on a low level REJECT
message. This means that in some flow controlled situations, the
message can be lost. The receiver of an abort message should then close
the session on its side.
Closing Broken Sessions
The PCA does not provide any means to recycle broken sessions on the
server side, and so these sessions must be closed by the server.
Since the user plug-in server does not know which sessions are related to
a disconnected client, the PCA provides the
PCA_Server::closeBrokenSessions() method to close all sessions that
are in the BROKEN state.
Typically, this method can be called when the user plug-in is notified of a
client disconnection by the PCA. For this notification, the PCA calls the
PCA_Server::clientDisconnected() method, which can be customized
by the user plug-in developer.
However, if closing broken sessions is mandatory to avoid memory leaks,
the use of the PCA_Server::closeBrokenSessions() method is
optional. Instead, the user may close broken sessions by calling the
PCA_Server::closeSession() method repeatedly. A mixed approach
with some broken sessions being closed manually and some being closed
automatically, is also possible.
Automatic Closing
On the client side, when the client is disconnected from the server,
sessions are closed automatically and the user-defined
PCA_Client::stateClosed() method is called.
Session Object Deletion
When a session is closed, the associated object is deleted by the
user-provided PCA_SessionFactory::destroySession() method,
unless some messages still reference the session or the session is locked.
For example, this may happen if some messages related to the session
are pending in the inbound queue. The session object is marked for
deletion and its state turns “zombie”. When the last reference to the
session is released and the session is unlocked, the PCA calls the
PCA_SessionFactory::destroySession() method, which deletes the
session object.
Chapter 9
367
PIC/AG - Using the PCA API
Session Management
Session Locking
In some cases, you may want to prevent a closed (“zombie”) session from
being deleted immediately (so that you can perform some action on the
session before it “disappears”). For example, if a session was previously
closed, deleting a message can destroy the related session object. To
prevent this, you “lock” the session (and “unlock” it when you no longer
need it).
You can lock a session using the PCA_Session::lock() method. You can
unlock a session using the PCA_Session::unlock() method.
For example, if the session was previously closed, the following two
versions of the processErrorMsg() function perform “safe” access to the
session object:
void processErrorMsg(PCA_Message *P_msg)
{
P_msg->getSession()->errorCount+=1;
delete P_msg;
}
or
void processErrorMsg(PCA_Message *P_msg)
{
MySession L_session;
L_session=P_msg->getSession();
L_session->lock();
delete P_msg;
L_session->errorCount+=1;
L_session->unlock();
}
In the first case, the session object is accessed from the message
referencing it. All access to the session object is done before the message
deletion. Following the message deletion, there is no guarantee that the
session object still exists. In the second case, a lock is placed on the
session object before the message is deleted, thus ensuring the session
object will "survive" the message deletion. Further access to the session
object can be done safely as long as the lock is not removed. Following the
unlock of the session, there is no guarantee that the session object still
exists.
368
Chapter 9
PIC/AG - Using the PCA API
Session Management
Server Session Dispatching
At creation time, a session is bound to one and only one connection
between a user plug-in server and a client. As such, a session always
involves only one client.
Sessions created on the client side are naturally attached to the client
that created the session. From the client side, there is no need to select
the target server as a user plug-in client can be connected to one and only
one user plug-in server. For server outgoing sessions (that is, sessions
created by the user plug-in server), the destination client selection is
performed by the PCA, at session creation time, according to the
outbound flow control state of each client and a round robin algorithm:
•
A client is said to be outbound overflowed if the outbound queue, as
parameterized in PCA_Server::init(), has overflowed. Then the
instance is not eligible to hold a new session. Overflow occurs when
P_outQueueHighWatermark is exceeded. The overflow condition is
removed once the queue goes below P_outQueueLowWatermark.
•
When many clients are eligible, the PCA selects one of them using a
round robin model.
For the user plug-in server, all the clients are equivalent. The user
plug-in server has no control on the clients that will be selected for the
session it creates. This is all managed at the PCA level. This session
dispatching strategy is defined to balance traffic load between the
connected clients.
If a client is overloaded, it will delay processing of user plug-in messages
making the associated user plug-in outbound queue overflow. No new
session will be opened to this client until it returns to a normal state.
However, the client is free to open sessions to the server.
In the meantime, the user plug-in will route all new sessions and
subsequent traffic to the clients that offer enough processing bandwidth.
Server Session Flow Control
In the previous server session dispatching model, when no client is
eligible to hold a session, the PCA_Server::openSession() request is
rejected with a PCA_BUSY status.
Session setup is suspended until the PCA calls the user-defined
PCA_Server::sessionResume() method. The user can then issue new
PCA_Server::openSession() requests.
Chapter 9
369
PIC/AG - Using the PCA API
Session Management
A user plug-in (shared library) developer should be aware of the
following points:
•
The PCA does not guarantee that the first
PCA_Server::openSession() attempt, after the
PCA_Server::sessionResume() method, will succeed. In some
cases, messages being sent between calls to these two methods could
overflow all clients, making dispatching of a new session impossible.
However, if the outbound queue is correctly parameterized, this
should only happen occasionally.
•
Using PCA_Server::sessionResume() is recommended because it
avoids the overhead of polling the PCA. However, the use of
PCA_Server::sessionResume() is not mandatory, you can just retry
to open a session periodically until it succeeds.
Client Session Flow Control
If the destination server is overloaded, the
PCA_Client::openSession() request is rejected with a PCA_BUSY
status.
Session setup is suspended until the PCA calls the user-defined
PCA_Client::sessionResume() method. The user can then issue new
PCA_Client::openSession() requests.
A user plug-in developer should be aware of the following points:
•
The PCA does not guarantee that the first
PCA_Client:openSession() attempt, after the
PCA_Client::sessionResume() method, will succeed. In some
cases, messages being sent between calls to these two methods could
overflow the destination server, making the creation of a new session
impossible. However, if the outbound queue is correctly
parameterized, this should only happen occasionally.
•
Using PCA_Client::sessionResume() is recommended because it
avoids the overhead of polling the PCA server. However, the use of
PCA_Client::sessionResume() is not mandatory, you can just retry
to open a session periodically until it succeeds.
Session Reject
Upon reception of a message on a session, the receiver may reject the
session. The receiver can be either a user plug-in server or a client.
370
Chapter 9
PIC/AG - Using the PCA API
Session Management
Rejection of a session can occur on the reception of the first message on
the session, which requires a session creation on the receiver side, or on
subsequent messages once the session has already been created on the
receiver side.
A session rejection can occur in the following cases:
•
The receiver could not allocate internal resources to be associated
with the session. For example, the maximum number of sessions
available for the connection (as defined during the client
initialization phase) has been reached. See “Client Initialization” on
page 357.
•
The receiver is not in FTC_ACTIVE state. This may happen in some
transient HA states.
•
The session referenced in the message has already been closed on the
receiver side. Due to some inconsistencies between the server and
the clients, some sessions are closed on one side, but not on the other
side. There is now a kind of “session leak” at the PCA internal level
(to understand how these resources are parameterized, see
“Parameterization” on page 371).
When a session is rejected, an ERROR message is delivered to the sender
with the rejection cause (see “Messages” on page 373) and the session
enters the “rejected” state. Note that session rejection may only happen
when a message is sent on the session. If a session is only opened and
does not contain any traffic, it will not be rejected.
The sender must take the appropriate decision depending on the cause of
the rejection. Typically, the HA state problems are only transient. The
sender can try to re-send the message on the session later on. Internal
resource or session leak causes are a design or an implementation issue.
Parameterization
The user plug-in server side cannot parameterize/configure session
allocation, except for some specific requirements through its Session
Factory.
However, the client can configure some parameters related to session
allocation. Client parameters control the maximum number of sessions
that can be originated by each side. These parameters should be set large
Chapter 9
371
PIC/AG - Using the PCA API
Session Management
enough to cope with all situations.They do not involve significant
memory consumption or processing overhead either at the client or at the
server side.
372
Chapter 9
PIC/AG - Using the PCA API
Messages
Messages
A message is the basic unit exchanged between user plug-ins (server and
client).
A message consists of a fixed header part, and a data part whose content
is the responsibility of the user plug-in developer. The following sections
describe the generic structure and handling of data messages and
existing message types.
Types and Headers
This section focuses on message building and parsing.
A user plug-in exchanges formatted messages with the PCA. The
messages consist of a header whose structure is fixed by the PCA
specification and a data part whose contents are defined by the user
plug-in developer.
Two types of messages are defined:
•
DATA. These messages hold user data exchanged between user
plug-ins (in both directions).
•
ERROR. These messages are notifications from the PCA to the user
plug-in (shared library) of an asynchronous problem. They hold an
error code and a literal error diagnostic. When an error message is
received, the associated session is rejected (see “Session Reject” on
page 370). A user plug-in can only receive an ERROR message; it
cannot send one.
The format of each message type is shown in Figure 9-4, “PCA Messages
Format.”
The purpose of birthDate is discussed in “Profiling” on page 383. The
meaning of errorCode and errorText can be found in “Meaning of
errorCode and errorText Fields” on page 375.
Chapter 9
373
PIC/AG - Using the PCA API
Messages
Figure 9-4
PCA Messages Format
The type field must be read prior to any processing to know whether the
message type is DATA or ERROR. This is performed by the
PCA_Message::getType() method. In addition, this method performs
consistency checking on the message length. If it returns an error, the
message must be discarded. Note that the getType() method may be
called any number of times for the same message.
The session associated with the message is held in the session field
which is a pointer to the associated session object. It can be retrieved by
using the PCA_Message::getSession() method provided that
getType() has previously returned successfully. This method can also be
called multiple times for the same message. Since PCA messages
internally reference their session object, the return session object is
always valid. This is true even if the session has been closed by the user
using the PCA_Server::closeSession() method or the
PCA_Client::closeSession() method, and it is in the Zombie state
(see “Session Deletion” on page 366).
A formatted message is built using the PCA_Message::putHeader()
method and is parsed using the PCA_Message::getHeader() method.
Both methods copy the message header, passed as an argument, to or
from a C++ structure. The getHeader() method can be called only once
374
Chapter 9
PIC/AG - Using the PCA API
Messages
because it removes header bytes from the message. Once the header is
extracted, the remaining part of the message (DATA payload or ERROR
text) can be read using basic PCA_Message handling methods.
NOTE
Using the PCA_Messsage::putHeader() method to set the message
header, instead of the generic PCA_Message::write() method, or the
PCA_Message::writeAtHead() method, is mandatory. This ensures that
the relationships between sessions and their messages are correctly
managed.
Meaning of errorCode and errorText Fields
Table 9-1, “Meaning of errorCode and errorText,” gives the meaning of
the errorCode and errorText fields.
Table 9-1
errorCode
PCA_FAILURE
Meaning of errorCode and errorText
errorText
Chapter 9
Meaning for User
Session closed
at peer
PCA_FAILURE
PCA_FAILURE
Default
Text
Value
memory
overflow
Result of:
PCA_sessionFactory->getLastErro
rText()
If you customize this method, the
associated string is under your
control. A default implementation is
available.
A session is
closed at local
side, but is
still open at
peer side
375
PIC/AG - Using the PCA API
Messages
Table 9-1
Meaning of errorCode and errorText (Continued)
errorCode
errorText
PCA_NOT_ACTIVE
Default
Text
Value
Meaning for User
Peer is
disabled
PCA_ABORTED
Last parameter of:
PCA_Server::abortSession()
PCA_ABORTED
Last parameter of:
PCA_Client::abortSession()
NOTE
It is also possible to generate an error code through a parameter of the
PCA_Client::disable() and PCA_Server::disable() methods. In
both cases, the error text is “Peer is disabled”.
Types of PCA Payload
There are 3 types of payload: PRIVATE, DDL, and BER. Only PRIVATE
should be used.
Coding and decoding messages is not addressed by the PIC. This is left to
the user plug-in developer.
PCA_Message Internal Structure
PCA messages consist of a number of chained data buffers, together with
read and write pointers, as shown in Figure 9-5, “PCA Message
Structure.”
In normal usage, buffer chaining is transparent to the user plug-in
developer, unless explicitly specified, and for buffer handling
optimization purposes. See the methods PCA_Message::getFirst() and
PCA_Message::getNextDb().
376
Chapter 9
PIC/AG - Using the PCA API
Messages
Figure 9-5
PCA Message Structure
PCA messages are objects from the PCA_Message class.
The following basic operations can be performed on such objects:
Chapter 9
•
PCA_Message::write()
This writes a number of bytes at the write pointer position at the end
of the message. If the last data buffer is filled, new ones are allocated
(as shown in Figure 9-5) until the requested number of bytes is
copied into the message. The method takes a base address and a size,
or a C++ String, as its arguments.
•
PCA_Message::writeAtHead()
This method writes a number of bytes before the read pointer at the
head of the message. The method is typically used to add a header to
an existing message. However, dedicated methods exist to paste the
PCA header message, and their use is mandatory (see “Types and
Headers” on page 373 and Figure 9-4, “PCA Messages Format.”). If
there is enough space in the current read data buffer, the copy is
made there, otherwise a new data buffer is allocated and linked at
the head of the data buffer chain. The method takes a base address
and a size as its arguments.
•
PCA_Message::read()
This method copies a number of bytes, from the current read pointer
position at the head of the message, into a user buffer. The read
pointer is incremented and cannot exceed the write pointer. The
377
PIC/AG - Using the PCA API
Messages
method takes as arguments either a base address and a size, or a
C++ String and a size. If size is omitted, it attempts to read the whole
message.
•
PCA_Message::peek()
This method performs the same task as read except that it does not
affect the read pointer. Bytes from a PCA message can be read only
once but may be ‘peeked’ at any number of times. Typically, this is
used in intermediate dispatching of messages based on the contents
of specific fields. The method takes a base address, a size, and a byte
offset from the current read pointer, as its arguments.
In addition, the PCA_Message class provides a number of other handling
methods to retrieve message sizing attributes or optimize memory usage.
Buffer Allocator
A buffer allocator is associated with each PCA_Message at message
construction time. This object is used each time the message must
allocate a new data buffer to perform a write operation, and when the
message is deleted or cleaned up using PCA_Message::erase().
PCA_BufferAllocator is the abstract base class for the message buffer
allocator.
It has two member methods:
•
PCA_BufferAllocator::alloc()
This allocates a data buffer. The difference between this and the
usual malloc() or new is that the input size is also an output
parameter. The allocated buffer may be smaller than the requested
one (for example, if the memory pool is fragmented), it may also be
larger than the requested one (if memory blocks are pre-sized). The
actual size of the data buffer is taken into account by PCA_Message
when writing the current data and for future writes.
•
PCA_BufferAllocator::free()
This frees a data buffer. This works just like the usual free() or
delete.
Using a buffer allocator provides the maximum flexibility to the user
plug-in developer. It allows you to optimize message handling, for
example, making it possible to allocate data buffers from a shared
memory area, or from a specific memory pool.
378
Chapter 9
PIC/AG - Using the PCA API
Messages
The user plug-in developer may define as many buffer allocators as it
needs to meet its memory management constraints.
If there are no specific requirements about message memory
management, the user plug-in developer may use the default
implementation of the PCA_BufferAllocator class provided by the PCA.
By default, this class implements alloc() and free() with the usual
new and delete operators.
Chapter 9
379
PIC/AG - Using the PCA API
Sending Messages
Sending Messages
This section describes how messages can be sent from the user plug-in to
a client or to another server.
Principles
Messages are always sent within sessions.
A session is attached to the message by setting the “session” field in the
DATA header (errors cannot be sent). The session is either an outbound
session previously opened by the PCA_Server::openSession() method,
or the PCA_Client::openSession() method, or an inbound session that
was retrieved from a received message.
Once the header is set by the PCA_Message::putHeader() method, the
user can call the PCA_Server::send() method, or the
PCA_Client::send() method, to transmit the message.
Flow Control
The success of a PCA_Server::send() request, or a
PCA_Client::send() request, depends on the state of the outbound
queue parameterized by the PCA_Server::init() method, or the
PCA_Client::init() method (see “Server Initialization” on page 353
and “Client Initialization” on page 357). If the queue does not overflow,
the operation succeeds. If the queue overflows, the operation succeeds,
but the server returns a PCA_OVERFLOW status as a warning. If the queue
is full, the operation fails with a PCA_BUSY status.
Overflow occurs when P_outQueueHighWatermark is exceeded. The
overflow condition is removed once the queue goes below
P_outQueueLowWatermark.
Once PCA_BUSY is returned for a session, the session is said to be “flow
controlled” and no more messages can be sent within the session until it
exits this state. This happens when the PCA calls the user-provided
PCA_Server::sendResume() or PCA_Client::sendResume() method.
These methods provide the sender with a set of sessions being released
from the ‘flow controlled’ state. The sender can then start re-sending
messages within these sessions.
380
Chapter 9
PIC/AG - Using the PCA API
Sending Messages
Note that only the sessions provided by the sendResume() method are
released from their flow controlled state. Some ‘flow controlled’ sessions
may not belong to this set.
The set of sessions is implemented with an array of pointers to
PCA_Session objects. Some entries in this array may be NULL. This
must not be considered by the user plug-in as an error. The PCA
guarantees that a lower index session within this array was ‘flow
controlled’ before a session with a higher index. This feature may be used
to provide a fair send-restart turn.
The session array is only meaningful within the scope of the method. The
user plug-in must not keep a pointer to a part or the whole array and try
to use it later. Instead, if the user plug-in wants to keep track of ‘unflow
controlled’ sessions, it should copy the information from the array to a
private storage.
Usage of the sendResume() method is optional. Its default
implementation is NOP. Users may choose to retry periodically to send a
message on a session until it gets ‘unflow controlled’.
Message Ownership
If a send request succeeds, the message becomes the responsibility of the
PCA. This means that the user must not attempt to access the message
(read, write, and so on) or to delete it. This also applies if the send()
method returned an PCA_OVERFLOW warning status.
If a send request fails due to the saturation of the outbound queue, the
message remains the property of the user plug-in. It can perform any
operation on it, or keep it for future re-transmission.
In all other error cases (for example, PCA internal errors, or bad
messages), the message is deleted by the PCA. The user must not
attempt to use it further.
Chapter 9
381
PIC/AG - Using the PCA API
Receiving Messages
Receiving Messages
This section describes how messages from a client or from another server
are received in the user plug-in.
Principles
Received messages are stored by the PCA_Server or PCA_Client in the
inbound queue provided by the user at initialization time (see “Server
Initialization” on page 353, or “Client Initialization” on page 357). The
user plug-in reads each message in sequence from this queue and
processes it.
The inbound queue is a PCA_Queue object that allows a handling method
to know when messages are available for retrieval.
Flow Control
When the queue high watermark level is exceeded, the inbound queue
“overflows”. The queue exits the overflow condition when it goes below
the low watermark. Both the high watermark and low watermark are
specified at queue-creation time. The queue contains a built-in flow
control mechanism that prevents the server from delivering new
messages to an overflowed queue.
The PCA_Server or PCA_Client can deliver messages again when the
inbound queue exits the overflowed state. The PCA_Server or
PCA_Client is informed that the queue has exited the overflow
condition.
The user plug-in does not need to check the state of the inbound queue
periodically, or that it goes from overflowed to non-overflowed after a
message is retrieved.
Message Ownership
Once messages have been read from the inbound queue, they belong to
the user plug-in. When their processing is complete, the user plug-in
must delete them or re-cycle them by calling the PCA_Message::reset()
method and further handling methods.
382
Chapter 9
PIC/AG - Using the PCA API
Receiving Messages
Deletion destroys a message’s relation with its session (reference
counting), while the PCA_Message::reset() method keeps this relation
active. To re-define a message’s session, you use the
PCA_Message::putHeader() method.
Profiling
The PCA can provide a profile for the amount of time spent in the
inbound path by setting the global variable “extern int G_pcaProfile”
to 1. Then, the birthDate field of a DATA message holds the date in ms
when the message became the responsibility of the PCA, above the
underlying communication mechanism. The user can then call the
gettimeofday() function to retrieve the current date and compute the
elapsed time.
Profiling can be activated and de-activated dynamically. When
de-activated, the birthDate field is set to 0.
Chapter 9
383
PIC/AG - Using the PCA API
Receiving Messages
384
Chapter 9
10
PIC/AG - Using the PIC APIs
This chapter describes the operation of the PIC APIs (which includes the
Execution API, the HA API, and the Registry API).
Chapter 10
385
PIC/AG - Using the PIC APIs
Structure of PIC APIs
Structure of PIC APIs
These APIs are responsible for the setup of the user plug-in (shared
library), its scheduling at run-time, the management of the HA FSM
(Finite State Machine), and the retrieval of some PIC attributes.
Figure 10-1, “C++ Structure of PIC API Classes,” shows the C++
structure of these APIs.
These APIs consist of several base classes: PIC_PluginExe,
PIC_PluginHA, and PIC_Registry.
The PIC_PluginExe class deals with the scheduling interface of the
Plug-In. The PIC_PluginHA class deals with the HA aspects of the
Plug-In. The PIC_Registry gives access to some PIC attributes.
These classes hold concrete and virtual member methods. Concrete
members provide some entry points to the PIC, whereas virtual members
must be derived by the developer when creating a user plug-in. All
virtual methods have a default implementation. The user plug-in
developer implements only the ones of interest.
The C piSetup() function must be implemented by the user plug-in
developer to create and register instances of user plug-in objects that
customize the PIC_PluginExe, and optionally the PIC_PluginHA classes.
The piSetup() function receives as an argument a structure in which
the objects created have to be registered (and it returns its completion
status).
The piSetup() function can be considered to be the main for the user
plug-in, and it is the only function called by the PIC at startup.
386
Chapter 10
PIC/AG - Using the PIC APIs
Structure of PIC APIs
Figure 10-1
C++ Structure of PIC API Classes
The piSetup() function, the PIC_PluginExe::init() and the
PIC_PluginExe::close() methods allow the initialization and
shutdown of the user user plug-in.
They are discussed in “Plug-In Setup” on page 389.
The PIC_PluginExe::selectMasks(), the
PIC_PluginExe::connectionHandler(), the
PIC_PluginExe::pendingRequest(), and the
PIC_PluginExe::processRequest() methods all belong to the
scheduling part of the API.
They are detailed in “Plug-In Scheduling” on page 391.
Chapter 10
387
PIC/AG - Using the PIC APIs
Structure of PIC APIs
Finally, the PIC_PluginHA::newState(), PIC_PluginHA::getState(),
PIC_PluginHA::stateCompleted(), and PIC_PluginHA::fault()
methods, allow the user plug-in to interface with the HP OpenCall Fault
Tolerant Controller.
388
Chapter 10
PIC/AG - Using the PIC APIs
Plug-In Setup
Plug-In Setup
User Plugin Object Creation
The first step in user plug-in setup deals with the creation of the
UserPlugin objects. The user plug-in developer must provide a C
piSetup() function in the user plug-in shared library. This function
receives a pointer to the PIC_PluginInterface structure as an
argument in which the created objects have to be registered, and it
returns a completion status. The purpose of this function is to allocate a
user user plug-in PIC_PluginExe object and optionally a PIC_PluginHA
object. It returns 0 in case of success.
The PIC_PluginInterface structure contains only two pointers:
pluginExe and pluginHA for registering user objects.
Typical Implementation
A typical implementation of this method would be:
int piSetup(PIC_PluginInterface *P_pluginInterface)
{
P_pluginInterface->pluginExe=new UserPluginExe;
P_pluginInterface->pluginHA=new UserPluginHA;
return(0);
}
However, the user plug-in developer is free to add any specific processing
to the function, such as for checking the availability of resources or
performing some type of initialization, provided it complies with PIC HA
programming constraints.
Only one instance of each user user plug-in object is created at a time. In
some cases (for example, process abort), the PIC may delete the user
plug-in object(s). The user plug-in developer must ensure that the delete
operator of the object is consistent with the new operator used to allocate
it within the piSetup() function.
Chapter 10
389
PIC/AG - Using the PIC APIs
Plug-In Setup
Errors During Object Creation
If piSetup() function returns an error code (that is, user dependent), the
PIC just stops.
In case of an exception that is not caught by the user code, the PIC traces
the fact that it received this exception, and the PIC traces its own
termination.
For all other errors, no specific mechanism is provided by the PIC.
User Plug-In Initialization
Once user plug-in objects are created, the PIC calls their user-provided
init() method. Within this method, the user plug-in is intended to
perform all the required initialization before going through the HA FSM.
When this method is called, the HA state is BOOTING.
The method returns an initialization status. In case of failure, the PIC
aborts and enters the HA DOWN state. The conditions under which it
can restart depend on the HA policy selected for the user plug-in.
User Plug-In Shutdown
In case of a PIC stop, the user plug-in objects’ user-provided close()
method is called to ask the user plug-in to free all its allocated resources.
This is the last method called by the PIC before the user plug-in objects
get deleted.
390
Chapter 10
PIC/AG - Using the PIC APIs
Plug-In Scheduling
Plug-In Scheduling
Plug-In scheduling addresses the execution of the user plug-in body, and
the execution of asynchronous operations such as timers. The user
plug-in uses the PIC Scheduler.
Plug-In Body Scheduling
The basic paradigm in user plug-in body scheduling is that OS I/O
waiting (that is, call to the OS select()) is performed by the PIC itself.
The Execution API provides a method for the PIC to retrieve the set of
waiting OS I/Os (namely OS file descriptors) from the user plug-in, and
requests the user plug-in to process OS I/Os. A user plug-in must not
perform an OS waiting event.
For better management of time sharing, processing of OS I/Os is
performed in two steps:
•
Acknowledgment
The PIC asks the user plug-in for acknowledgment of fired I/Os
immediately after the select() method returns. The user plug-in is
intended to perform the minimum amount of work to make the OS
I/O exit from the signalled state. For example, if a fired I/O indicates
the arrival of data on a socket, the user plug-in should simply read
the socket.
•
Actual processing of the OS I/O
In a second step, the PIC provides the user plug-in with CPU time to
perform tasks subsequent to the OS I/O. In the previous example,
this would mean processing the received data.
Figure 10-2 shows the Plug-In scheduling model.
Chapter 10
391
PIC/AG - Using the PIC APIs
Plug-In Scheduling
Figure 10-2
Plug-In Scheduling Model
OS I/O collection is performed with the PIC calling the selectMasks()
method. After the select() method returns, OS I/Os are acknowledged
by the PIC calling the connectionHandler() method. Then a sequence
of pendingRequest()/processRequest() methods is issued.
The user plug-in pendingRequest() and processRequest() methods
return a status indicating whether or not there is some work left to be
done.
The possible status values are:
392
Chapter 10
PIC/AG - Using the PIC APIs
Plug-In Scheduling
EMPTY
The user plug-in lets the scheduler choose depending
on the user plug-in task attributes (I/O fed, Task fed,
...).
This status should not be used.
IDLE
The user plug-in has no processing left to do.
PROCESSING
The user plug-in requests processing time.
The pendingRequest() method should check only if the user plug-in
needs processing time. It should return an IDLE or PROCESSING
status as appropriate. If pendingRequest() returns PROCESSING,
then the PIC calls the processRequest() method to do the work. This
work may either result from the set of fired OS I/Os passed by the
connectionHandler() method or from an internal trigger.
If there is work to be done, then the PIC calls the processRequest()
method to actually do this work. The processRequest() method should
return either IDLE (if it has no more processing to do), or PROCESSING
(if it has processing left to do). If it returns PROCESSING, then the PIC
calls it again. The sequence completes either when the
processRequest() method returns IDLE, or when a PIC configuration
parameter (InternalLoopCount in the [PIC] section of pic.conf) is
reached.
The selectMasks(), connectionHandler(), processRequest(), and
pendingRequest() methods are C++ virtual members of the
PIC_PluginExe base class that must be implemented by the developer in
a specific user plug-in class inheriting from the PIC_PluginExe class.
The amount of work performed in each call to the processRequest()
method is the responsibility of the user plug-in developer. It should be
consistent with the InternalLoopCount parameter to ensure that the
user plug-in does not keep the CPU busy for a time greater than the
configured FTC heart beat.
NOTE
Chapter 10
TheInternalLoopCount parameter is just a simple way to define the
difference in priority between high priority tasks (PCA and the PIC) and
the low priority task (HA). TheInternalLoopCount parameter is not
intended to be used to tune the PIC scheduling.
393
PIC/AG - Using the PIC APIs
Plug-In Scheduling
Asynchronous Tasks (TimerLib)
The user plug-in is provided with a timer library (TimerLib) that allows
the setting and cancelling of timers and provides a user-defined callback
method to be called when a timer expires. See the TimerLib man pages.
The user plug-in can use all functions defined in the TimerLib library
except for TIMER_select_time() and TIMER_handler(). Execution of
the timer callback is the responsibility of the PIC (which uses the
Scheduler). It is triggered periodically (each the time select() method
returns). For equality of time sharing, heavy processing in such methods
is strongly discouraged. Instead, the user user plug-in should save the
time-out event in some context variables of its user plug-in, and then
process it within the processRequest() scope.
394
Chapter 10
PIC/AG - Using the PIC APIs
Plug-In HA Management
Plug-In HA Management
Features
HA management for the user plug-in consists of three features:
•
The user plug-in is informed of all HA FSM state changes.
Consequently, it can perform the appropriate processing depending
on its current state. For example, when entering the FTC_ACTIVE
state it should enable the Plug-In Communication API servers (see
Chapter 9, “PIC/AG - Using the PCA API,” on page 345). This also
applies to any specific processing, such as accessing an external
device.
For states other than FTC_BOOTING or FTC_DOWN, this is
performed through the user-defined PIC_PluginHA::newState()
method. This method returns a state completion value that drives
the next state transition for some transient states
(FTC_SWITCHING, FTC_SYNCHRONIZING, or FTC_STOPPING).
If the state completion value is PENDING, the current HA FSM
state will not terminate after PIC_PluginHA::newState() returns,
it will terminate after PIC_PluginHA::stateCompleted() is called.
•
The user plug-in may request the PIC to go FTC_DOWN.
If the user plug-in encounters a critical error, it may call the
PIC_PluginHA::fault() method to make the whole PIC enter the
HA state FTC_DOWN. Then, depending on the HA policy, the PIC
will be re-spawned on the same host, or will switchover to the
standby host.
•
The user plug-in may inform the PIC about work completion.
When the user plug-in has completed its work in some transient
states (FTC_SWITCHING, FTC_SYNCHRONIZING, and
FTC_STOPPING), it uses the PIC_PluginHA::stateCompleted()
method to notify the PIC that it is ready to go to the next state.
State Completion Values
The state completion values of a transient state like FTC_SWITCHING,
FTC_SYNCHRONIZING, or FTC_STOPPING, can be:
Chapter 10
395
PIC/AG - Using the PIC APIs
Plug-In HA Management
PENDING
The HA FSM state will not terminate automatically.
DONE
The HA FSM state will terminate automatically.
SYNC
The HA FSM state will terminate with the need of
synchronization (FTC_STOPPING before
FTC_COLD_STANDBY).
Example of an HA Sequence
The user plug-in scheduling takes place as long as the current HA FSM
state is neither FTC_BOOTING nor FTC_DOWN.
For the HA FSM states, see Figure 8-7, “HA FSM for PIC (on
HP OpenCall SS7).”
For the user plug-in scheduling model, see “Plug-In Body Scheduling” on
page 391.
Below is an example showing the sequence of HA function calls that
drive the user plug-in HA FSM state at startup:
Step 1. The PIC calls PIC_PluginHA::newState() with the value
FTC_SWITCHING and the user plug-in returns PENDING.
Step 2. The user plug-in calls PIC_PluginHA::stateCompleted() with the
value DONE from PIC_PluginExe::processRequest().
Step 3. The PIC calls PIC_PluginHA::newState() with the value FTC_ACTIVE
and the user plug-in returns DONE. Note that the default return of
newState() is DONE.
Step 4. The PIC calls PIC_PluginHA::newState() with the value
FTC_STOPPING and the user plug-in returns SYNC.
Step 5. The PIC calls PIC_PluginHA::newState() with the value
FTC_COLD_STANDBY and the user plug-in returns DONE.
Step 6. The PIC calls PIC_PluginHA::newState() with the value
FTC_SYNCHRONIZING and the user plug-in returns PENDING.
Step 7. The user plug-in calls PIC_PluginHA::stateCompleted() with the
value DONE from PIC_PluginExe::processRequest().
Step 8. The PIC calls PIC_PluginHA::newState() with the value
FTC_HOT_STANDBY and the user plug-in returns DONE.
Step 9. The procedure continues from Step 1.
396
Chapter 10
PIC/AG - Using the PIC APIs
The Plug-In Registry
The Plug-In Registry
This enables the user plug-in to retrieve some PIC attributes.
Currently, only the logical name of the PIC process can be retrieved
using the PIC_Registry::getProcessName() method. The user plug-in
developer can use this to build the user plug-in address for the PCA.
See “Plug-In Server and Client Names” on page 352.
Chapter 10
397
PIC/AG - Using the PIC APIs
The Plug-In Registry
398
Chapter 10
11
Using the OA&M API
This chapter describes the Operation, Administration & Maintenance
(OA&M) functions that the application can use to manage the MTP2,
MTP3, SCCP and TCAP processes in the SS7 Stack.
Chapter 11
399
Using the OA&M API
SS7 OA&M Services
SS7 OA&M Services
HP OpenCall SS7 provides Operation, Administration & Maintenance
(OA&M) services for MTP, SCCP and TCAP including:
•
Configuration
Dynamic configuration of SS7 entities such as destinations, routes,
linksets, links, local and remote SSNs and Global Title translations.
•
Statistics
Collection of statistics from the various SS7 components
(destinations, routes, linksets, links, SCCP and TCAP).
•
Control
Commands for the dynamic control of an active SS7 stack, and the
configuration of an inactive SS7 stack.
400
Chapter 11
Using the OA&M API
SS7 OA&M Services
Figure 11-1
OA&M in the SS7 Stack
User application
OA & M
APIs
TCAP
API
MTP3/
M3UA
API
- Configuration
AG API
Chapter 11
ISUP
& TUP
APIs
SCCP
API
- Monitoring
TCAP
- Control
SCCP
MTP level 3
M3UA
MTP level 2
SCTP
MTP level 1
IP
401
Using the OA&M API
SS7 OA&M Services
OA&M APIs
The SS7 stack provides an OA&M API for the development of customized
management applications such as platform administration and user
interfaces (Q.3, SNMP or customized interfaces) for MTP2, MTP3, SCCP
and TCAP.
OA&M Entities
The OA&M API is organized in an object-oriented structure. It provides
the application with access to the entities that manage the SS7 stack.
These entities perform operations requested by the application, and
return the associated reply. Each entity is assigned a type and an
address.
Obtaining Notification about OA&M Entity State
Changes
An OA&M entity may change state. No spontaneous notifications are
supplied. However, the application can request to be notified about state
changes in one of the following ways:
•
On occurrence (available for MTP only)
Each time an entity changes its state the application is notified. The
request may be refused if the maximum number of requests has
already been recorded. When you request notification about OA&M
entity state changes, “on occurrence” is the default request mode.
The other modes must be explicitly requested.
•
Periodic (available for MTP and SCCP)
The application requests an entity to periodically send a notification
of its current state. The request may be refused if the maximum
number of requests has already been recorded.
•
Immediate (available for MTP and SCCP)
The application requests an entity to send a notification containing
its current state.
402
Chapter 11
Using the OA&M API
SS7 OA&M Services
Issuing OA&M Requests
The application can issue a command requesting an OA&M entity to
perform an operation such as state change, configuration or statistical
information. All entities return a notification after a request has been
completed.
OA&M
Notifications
Chapter 11
An OA&M notification is always generated in reply to a request. It may
be a spontaneous notification if the application has previously set some
statistic or set an event report.
403
Using the OA&M API
Creating MTP and SCCP OA&M Connections using SS7_xifcreate
Creating MTP and SCCP OA&M Connections
using SS7_xifcreate
Requests generated by the application are passed to the appropriate
OA&M entity via OA&M connections. These connections are also used to
return notifications from an entity to the application.
NOTE
SS7_xifcreate() is the function to use. If the application was written
using SS7_ifcreate(), you should replace it with SS7_xifcreate().
The SS7_xifcreate() function creates an MTP or SCCP stack
connection. If successful SS7_xifcreate() returns a connection
Identifier (cnxId) that must be used in all subsequent calls related to the
stack connection.
For details about syntax, parameters, and return values, see the
SS7_xifcreate() man page.
404
Chapter 11
Using the OA&M API
Scheduling MTP and SCCP OA&M Connections
Scheduling MTP and SCCP OA&M
Connections
As described in “Scheduling SS7 Connections” on page 72, you must
schedule all the connections using the HP OpenCall SS7 scheduling
mechanism. Scheduling the MTP and SCCP OA&M connections is
achieved by:
•
SS7_ifselectmask()
•
select()
•
SS7_ifcnxhandler()
SS7_ifselectmask()
This pre-select function is used for all MTP and SCCP OA&M
connections. It takes the file descriptor masks created by the application,
and sets these masks to include the file descriptors used by the OA&M
API to manage the MTP and SCCP OA&M connections.
The application must call this function before calling select().
For details about syntax, parameters, and return values, see the
SS7_ifselectmask() man page.
select()
The select() function is used for all HP OpenCall SS7 scheduling.
It modifies the read, write and exception masks created by
SS7_ifselectmask().
SS7_ifcnxhandler()
The application must call this post-select function. SS7_ifcnxhandler()
requests the OA&M API to process the masks returned by select() and
manage the internal mechanisms.
An array of OA&M connection identifiers is used to identify the OA&M
connections that have messages waiting to be received by the
application.
Chapter 11
405
Using the OA&M API
Scheduling MTP and SCCP OA&M Connections
Activity on the connection is flagged when one of the following events
occurs:
•
A message is received by the SS7 stack.
•
A closed connection is found (a send or receive call returns an error).
The application should call the close function to deallocate API
resources.
•
A connection goes from busy state (API_BUSY) to normal state. The
application can resume processing (send and receive calls no longer
return an error).
For details about syntax, parameters, and return values, see the
SS7_ifcnxhandler() man page.
Examples
Example 11-1
Scheduling MTP and SCCP OA&M Connections
#define MAX_FD
int
int
fd_set
int
int
int
int
struct
127
nfound;
/* select result */
v1,v2,v3;
readMask, writeMask, exceptionMask;
num_cnx, cnx_active[MAX_FD];
cnxId, numFd, count, Tempo;
IdxCnx=0, ToDo=0;
ToSend=0;
timeval
tmout, * time = &tmout;
for (count=0;;count++)
{
tmout.tv_sec = 1;
tmout.tv_usec = 0;
time = &tmout;
/* Zero select bit masks before entering loop */
FD_ZERO(&readMask);
FD_ZERO(&writeMask);
FD_ZERO (&exceptionMask);
numFd = SS7_ifselectmask(0,
&readMask,
&writeMask,
&exceptionMask,
&time);
406
Chapter 11
Using the OA&M API
Scheduling MTP and SCCP OA&M Connections
nfound =select(numFd,
&readMask,
&writeMask,
&exceptionMask,
time);
num_cnx = MAX_FD;
/* initial size of cnx_active array */
SS7_ifcnxhandler(nfound,
&readMask,
&writeMask,
&exceptionMask,
&num_cnx,
cnx_active);
for( IdxCnx=0, ToDo=0; IdxCnx < num_cnx; IdxCnx++ )
{
if( cnx_active[IdxCnx] == cnxId ){
ToDo = 1;
break;
}
}
if ( !ToSend && !ToDo ) continue;
send_request();
count++;
}
Chapter 11
407
Using the OA&M API
Sending MTP2 OA&M Requests using MTP2X_oamcmd()
Sending MTP2 OA&M Requests using
MTP2X_oamcmd()
The application can request a Signalling Unit (SU) to perform an
operation. Each request contains an address identifying the entity that
must perform the operation.
The OA&M connections must be scheduled before the application issues
any request using MTP2X_oamcmd().
The MTP2X_oamcmd() command allows the application to remotely
control the MTP level 2 layer of SS7. It is a non-blocking call which
remotely monitors the SS7 hardware entities.
Several commands are provided to allow complete monitoring of the SS7
level 2 layer by the application. You can get the status of the SIU, TSU or
TSC. To specify a command, provide the object address, to which the
command will apply, and the command. The commands will trigger a
notification return, which contains all information relevant to the
command.
For details about syntax, parameters, and return values, see the
MTP2X_oamcmd() man page.
408
Chapter 11
Using the OA&M API
Receiving MTP2 OA&M Notifications using MTP2X_oamrecv()
Receiving MTP2 OA&M Notifications using
MTP2X_oamrecv()
The OA&M connections must be scheduled before the application
receives any generated notifications using MTP2X_oamrecv(). The
application must receive all generated notifications until none are left to
be received.
This function receives the OA&M notifications send by the local MTP2
OA&M entities. It is a non-blocking call which receives notifications sent
by the SS7 local node. These notifications hold two types of management
information: status and configuration. They are triggered by the use of
MTP2X_oamcmd() calls, and collected in notifications received by
MTP2X_oamrecv. MTP2X_oamrecv() returns the type of notification
received, and the associated information in the notifstruct parameter.
To avoid an incoming messages buffer overflow, the application should
call MTP2X_oamrecv() often enough. The recommendation is to wait
until messages arrive using the scheduling loop SS7_ifselectmask,
select system call (refer to the select(2) man pages) and
SS7_ifcnxhandler.
For details about syntax, parameters, and return values, see the
MTP2X_oamrecv() man page. This man page also contains an example.
Chapter 11
409
Using the OA&M API
MTP3 Entities and Management
MTP3 Entities and Management
At MTP3, the application can manage entities that map onto real objects
managed by MTP3. The application can use the OA&M API to set and
configure the MTP3 OA&M entities.
MTP3 Entity Structure
An entity can only be accessed when its type and its address are
provided. Because the OA&M API has an object oriented design, an
entity is addressed in relation to its local system, and if necessary its
parent entity. The figure below shows the hierarchy of the MTP3 entities
together with each entity’s address and attributes.
Figure 11-2
410
MTP3 Entities in a Containment Tree
Chapter 11
Using the OA&M API
MTP3 Entities and Management
Static Entities
Static entities, such as the MTP3 entity itself, cannot be deleted.
Attributes Set
When an Entity is
Created
The address of an entity must be set when the entity is created. For some
entities the cmdParms field must also be set, for example the cmdParms
field is used to set a route to primary or secondary.
Additional
Parameters
Additional parameters, indicated above as [ ], are set using the
set_value command. They can only be modified when the entity is
deactivated. The new values take effect when the entity is reactivated.
An example of an additional parameter set using the set_value
command is the PDN of a link.
Description of MTP3 Entities
The MTP3 entities are described in the table below.
Table 11-1
Chapter 11
Description of MTP3 OA&M Entities
Entity
Meaning
mtp
Represents the local point code of the SS7 platform.
local_alias
Represents the aliases of the local point code.
virtual_pc
Represents the virtual point codes associated with
the local point code.
destination
Represents a destination MTP3 point code.
cluster
ANSI only: When MTP is configured in cluster
routing, this entity denotes a cluster, that is, a
group of destinations located on the same mated
STP pair.
route
Represents an MTP3 signalling route to a DPC.
cluster_route
ANSI only: represents a route towards a cluster.
linkset
Represents a linkset.
links
Represents the links that connect to an adjacent
point code.
411
Using the OA&M API
MTP3 Entities and Management
cluster Entity
The cluster entity does not appear explicitly in the following tables.
However the destination entity covers both full point code destinations
and cluster destinations.
cluster_route
Entity
The cluster_route entity does not appear explicitly in the following
tables. However the route entity covers both full point code routes and
cluster routes.
Rules for Creating and Manipulating MTP3 Entities
•
The LPC value of the MTPL3 entity must be set before using any
MTP commands.
•
An entity can only be added if its parent entity exists.
•
An entity can only be removed if both of the following are true:
— all of its child entities have already been removed
— it has been deactivated
•
An entity can only be activated if all of the following are true:
— if it has been created
— if its parameters are valid
(The Links entity must be explicitly set to a valid PDN value for
the Signalling Unit. The default value of D=-1 will not enable the
link to be activated.)
— if all of its child entities can be activated
412
•
The Local Alias entity can not be activated or deactivated. It can only
be configured or removed.
•
Deactivating an entity will deactivate all its child entities.
Chapter 11
Using the OA&M API
MTP3 Entities and Management
Addressing MTP3 Entities
Table 11-2, MTP3 OA&M Addressing, lists the configurable parameters
that can be modified by the application.
For example, a route entity is addressed with respect to its local mtp
entity and its parent entity destination. The address field of all MTP3
entities must be specified as shown in this table.
Table 11-2
MTP3 OA&M Addressing
Object Type
address[0]
address[1]
address[2]
Command
Parameters
mtp
LPC
-
-
-
local_alias
LPC
local alias number
(DPC)
-
-
virtual_pc
LPC
virtual point code
number (VPC)
-
-
destination
LPC
(DPC)
-
-
route
LPC
(DPC)
linkset
LPC
adjacent point code
(APC)
links
LPC
adjacent point code
(APC)
Chapter 11
Primary/Secondary
Link number
(SLC)
413
Using the OA&M API
MTP3 Entities and Management
Possible States of MTP3 Entities
Each MTP3 OA&M entity, except a local alias or virtual point code, has
an associated state.
Table 11-3
MTP3 OA&M States
Entity
State
Meaning
mtp
normal
In service state.
inactive
Awaiting activation.
out_of_service
No active linksets.
restarting
Undergoing restart procedure.
normal
At least one link available to carry traffic.
inactive
Awaiting activation.
out_of_service
No active links.
congested
At least one congested link.
normal
Active, ready for traffic.
inactive
Awaiting activation.
out_of_service
Failure during alignment
congested
Congestion indication received from MTP2.
inhibited
Link is inhibited but in service.
inhibited_OS
Link is inhibited but out of service.
inhibited_inactive
Link is inhibited and inactive.
normal
Available for traffic.
inactive
Awaiting activation.
congested
At least one signalling route is congested.
out_of_service
No signalling route available.
restricted
Only restricted route available for traffic.
linkset
links
destination
414
Chapter 11
Using the OA&M API
MTP3 Entities and Management
Table 11-3
MTP3 OA&M States (Continued)
Entity
State
Meaning
route
normal
Available for traffic.
inactive
Awaiting activation.
out_of_service
Linkset out of service or TFPa (or TCP for
ANSI only) message received.
congested
Linkset congested or TFCb message
received.
TFR (or TCR for ANSI only) message
received.
restricted
a. Transfer Prohibited
b. Transfer Controlled
Chapter 11
415
Using the OA&M API
Sending MTP3 OA&M Requests using MTPL3_oamcmd()
Sending MTP3 OA&M Requests using
MTPL3_oamcmd()
The OA&M API provides the application with commands to control the
SS7 Stack. An MTP3 OA&M connection must be created and scheduled
before the application can issue any commands.
For details about syntax and parameters,see the MTPL3_oamcmd() man
page. This man page also contains examples.
Response to Expect from an MTPL3 OA&M Request
When you issue an MTP3 request using MTPL3_oamcmd(), you will
receive one of the following responses:
Command
Successful
A non-negative integer is returned to indicate that the command was
successful.
You must then use the command MTPL3_oamrecv() to receive the
notification.
•
If the command was executed correctly you receive:
— A notification.
•
If the command could not be executed (for example if you try to add
an object that already exists) you receive:
— An MTPOamNotifStruct of type error. The failure_cause field
contains the reason why the command could not be executed.
Command Failed
416
The value of -1 is returned to indicate that the command failed. The
ss7errno parameter is set to indicate the error.
Chapter 11
Using the OA&M API
Collecting MTP3 OA&M Statistics Using MTPL3_oamstat()
Collecting MTP3 OA&M Statistics Using
MTPL3_oamstat()
The application can collect statistics from MTP3 OA&M entities using
one of the following modes:
•
Immediate
The current value of a statistic is returned in a notification.
•
Periodic
A notification containing the current value of a statistic is generated
each time the period elapses.
•
On occurrence
A notification is generated when the statistic changes value.
For details about syntax, parameters, and return values, see the
MTPL3_oamcmd() man page.
Report Types
Collecting MTP3 OA&M statistics or reports is also dependent on the
entity type and the statistic type. Table 11-4, Statistics by Report Type,
lists the valid report types for each MTP3 OA&M entity.
Table 11-4
Statistics by Report Type
Object Types
Statistic
object_state
traffic_gauge
traffic_count
Chapter 11
mtp
destination
route
linkset
links
immediate
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
periodic
on occurrence
on occurrence
on occurrence
on occurrence
on
occurrence
immediate
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
periodic
-
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
417
Using the OA&M API
Collecting MTP3 OA&M Statistics Using MTPL3_oamstat()
Table 11-4
Statistics by Report Type (Continued)
Object Types
Statistic
failure_gauge
failure_count
congestion_gauge
congestion_count
rx_byte_count
tx_byte_count
discarded_msu
su_error_count
rx_load_average
tx_load_average
retransmitted_count
418
mtp
destination
route
linkset
links
-
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
-
immediate
immediate
immediate
periodic
periodic
periodic
immediate
immediate
immediate
periodic
periodic
periodic
-
immediate
immediate
periodic
periodic
immediate
immediate
periodic
periodic
immediate
immediate
periodic
periodic
immediate
immediate
periodic
periodic
immediate
immediate
periodic
periodic
immediate
immediate
periodic
periodic
immediate
immediate
periodic
periodic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Chapter 11
Using the OA&M API
Collecting MTP3 OA&M Statistics Using MTPL3_oamstat()
Response to Expect When You Collect MTP3 OA&M
Statistics
When you collect MTP3 statistics using the command MTPL3_oamstat(),
you will receive one of the following responses:
Command
successful
A non-negative integer is returned to indicate that the command was
successful.
You must then use the command MTPL3_oamrecv() to receive the
notifications.
•
If the request is executed you receive:
— An object_state notification acknowledging that the statistics
request was executed.
— Depending on whether you requested on occurrence, periodic or
immediate statistics you will receive one or more notifications
corresponding to the statistic you requested. If, for example, you
asked for a periodic traffic_count statistic you will receive an
MtpOamNotifType of type traffic_count at regular intervals.
You must continue using MTPL3_oamrecv() until the value
returned is 0 indicating that there are no more notifications
waiting.
•
If the request can not be executed you receive:
— An MtpOamNotifType of type error. The failure_cause field
contains the reason why the command could not be executed.
Command failed
Chapter 11
The value of -1 is returned to indicate that the command failed. The
ss7errno parameter is set to indicate the error.
419
Using the OA&M API
Receiving MTP3 OA&M Command and Statistic Notifications Using MTPL3_oamrecv()
Receiving MTP3 OA&M Command and
Statistic Notifications
Using MTPL3_oamrecv()
In response to a command from the application, the requested entity
performs the command, returning the result in a notification. The
application must receive all notifications using MTPL3_oamrecv().
This function receives notifications from MTP3 OA&M connections.
These notifications can contain status information, statistics or
configuration information.
For details about syntax, parameters, and return values, see the
MTPL3_oamrecv() man page. This man page also contains an example.
Response to Expect When You Use the
MTPL3_oamrecv() Command
When you receive notifications using the MTPL3_oamrecv() command,
you will receive one of the following responses:
Command
successful
An integer indicating the number of notifications waiting to be received
is returned. If this integer is not 0 you also receive:
In response to a command:
•
If the command was executed correctly you receive:
— a notification.
•
If the command could not be executed, (for example if you try to add
an object that already exists) you receive:
— An MTPOamNotifStruct of type error. The failure_cause field
contains the reason why the command could not be executed.
420
Chapter 11
Using the OA&M API
Receiving MTP3 OA&M Command and Statistic Notifications Using MTPL3_oamrecv()
In response to a request for statistics:
•
If the request is executed you receive:
— An object_state notification acknowledging that the statistics
request was executed.
— Depending on whether you requested on occurrence, periodic or
immediate statistics you will receive one or more notifications
corresponding to the statistic you requested. If, for example, you
asked for a periodic traffic_count statistic you will receive an
MtpOamNotifType of type traffic_count at regular intervals.
You must continue using MTPL3_oamrecv() until the value
returned is 0 indicating that there are no more notifications
waiting.
•
If the request can not be executed you receive:
— An MtpOamNotifType of type error. The failure_cause field
contains the reason why the command could not be executed.
Command failed
Chapter 11
The value of -1 is returned to indicate that the command failed. The
ss7errno parameter is set to indicate the error.
421
Using the OA&M API
SCCP OA&M Entities and Management
SCCP OA&M Entities and Management
When the application creates an SCCP OA&M connection, the entities
associated with SCCP can be monitored, configured and managed via the
OA&M API.
SCCP Entity Structure
An entity can only be accessed when its type and its address are
provided. Because the OA&M API has an object oriented design, an
entity is addressed in relation to its local system, and if necessary its
parent entity. The figure below shows the structure of the SCCP entities
together with the attributes of each entity and its address.
Figure 11-3
422
SCCP Entities in a Containment Tree
Chapter 11
Using the OA&M API
SCCP OA&M Entities and Management
Static Entity
Static entities, such as the SCCP entity itself, cannot be deleted.
Attributes Set
When Entity is
Created
The address of an entity must be set when the entity is created. For some
entities the cmdParms field must also be set, for example the cmdParms
field is used to set the concerned parameter as required.
Additional
Parameters
Additional parameters, indicated above as [ ], are set using the
set_value command. They can be modified at any time. Mode is an
example of an additional parameter.
Description of SCCP Entities
The SCCP entities are described in the table below.
Table 11-5
SCCP OA&M Entities
Entity
Entity Name
Description
SCCP
SO_SCCP
This entity models the local SCCP, and
contains all the entities belonging to SCCP.
Local User
SO_LOCAL_USER
This entity models a local SCCP user or SSN.
Virtual User
SO_VIRTUAL_USER
This entity models a virtual user.
Remote User
SO_REMOTE_USER
This entity models a remote SCCP user or
SSN that is known to the local SCCP.
Remote SP
SO_REMOTE_SP
This entity models a peer signalling point.
GT Translator
table
SO_GT_TRANSLATOR
This entity performs the Global Title
translation function for the local SCCP.
The GTTranslator Table is not created
directly by the user but is automatically
created when you add GT Entities. When the
last entity is removed the table is
automatically deleted.
Failed
Destination
Chapter 11
SO_FAILED_DEST
This entity is responsible for internally
collecting messages that do not have a valid
destination. It is unused.
423
Using the OA&M API
SCCP OA&M Entities and Management
Rules for Creating and Manipulating SCCP Entities
•
The LPC value of the MTPL3 entity must be set before starting to
create any SCCP entities.
•
Only the SCCP entity itself can be activated or deactivated.
•
An entity can only be added if its parent entity exists.
•
An entity can only be removed if all of its child entities have already
been removed.
Addressing SCCP Entities
The SCCP OA&M entities are referenced through their type and address
which is contained in an array. The elements in an address depend on the
entity.
Table 11-6
SCCP OA&M Addressing
Entity
address[0]
address[1]
cmdParms value to be
set
SO_SCCP
Unused
Unused
-
SO_LOCAL_USER
Local PC
SSN
-
SO_VIRTUAL_USER
Local PC
SSN
-
SO_REMOTE_USER
DPC
SSN
-
SO_REMOTE_SP
DPC
Unused
concerned
SO_FAILED_DEST
Unused
Unused
SO_GT_TRANSLATOR
Translator Id
Unused
424
digit_pr_ssn priority
Chapter 11
Using the OA&M API
SCCP OA&M Entities and Management
Translator Id
The Translator Id is a 32-bit integer structured as described in the table
below.
Table 11-7
Translator Id
Field
Octet
Value
Nature of Address
Indicator
1 (LSB)
SC_unusedIndicator
SC_subscriberNo
SC_reserved_national_use
SC_nationalNo
SC_internationalNo
2
SC_unused
3 (MSB)
SC_unknownNumbering
SC_isdn
SC_userdata
SC_telex
SC_maritimeMobile
SC_landMobile
SC_isdnMobile
NULL
(NAI)
Translation Type
(TT)
Numbering Plan
(NP)
Chapter 11
425
Using the OA&M API
SCCP OA&M Entities and Management
Possible States of SCCP Entities
Some SCCP OA&M entities have associated state information. When a
state change occurs, a notification is sent from the particular entity to
the application.
Table 11-8
SCCP OA&M States
Entity
State
Meaning
SO_SCCP
SO_AVAILABLE
In service state.
SO_UNAVAILABLE
Awaiting restart,
synchronized with MTP.
SO_RESTARTING
SO_CONGESTED
SO_UNCONGESTED
SO_STOPPED
Undergoing restart
procedure.
Congestion indication
received from MTP.
MTP is no long congested.
SCCP disabled via OA&M
API.
SO_LOCAL_USER
SO_VIRTUAL_USER
SO_REMOTE_USER
SO_REMOTE_SP
426
SO_INSERVICE
In service state.
SO_OUTOFSERVICE
Out of service state.
SO_INSERVICE
In service state.
SO_OUTOFSERVICE
Out of service state.
SO_AVAILABLE
Remote user is accessible.
SO_UNAVAILABLE
Remote user is not
accessible.
SO_INSERVICE
Remote SP is accessible.
SO_OUTOFSERVICE
Remote SP is not
accessible.
SO_GT_TRANSLATOR
Not applicable
SO_FAILED_DEST
Not applicable
Chapter 11
Using the OA&M API
Sending SCCP OA&M Requests Using SCCP_oamcmd()
Sending SCCP OA&M Requests Using
SCCP_oamcmd()
The SCCP OA&M API provides the application with commands to
control the SCCP and its users (SSNs). Some commands trigger a
notification containing all the information relevant to the issued
command.
For details about syntax, parameters, and return values, see the
SCCP_oamcmd() man page. This man page also contains examples.
Response to Expect When You Send an SCCP OA&M
Request
When you issue an SCCP request using SCCP_oamcmd(), you will receive
one of the following responses:
Command
successful
A non-negative integer is returned to indicate that the command was
successful.
You must then use the command SCCP_oamrecv() to receive the
notification.
•
If the command was executed correctly you receive:
— A notification.
•
If the command could not be executed, for example if you try to add
an object that already exists) you receive:
— An sccp_notif whose failure field contains the reason why
the command could not be executed.
Command failed
Chapter 11
The value of -1 is returned to indicate that the command failed. The
ss7errno parameter is set to indicate the error.
427
Using the OA&M API
Collecting SCCP OA&M Statistics Using SCCP_oamstat()
Collecting SCCP OA&M Statistics Using
SCCP_oamstat()
The application can collect statistics from SCCP OA&M entities using
one of the following modes:
•
Immediate
The current value of a statistic is returned in a notification.
•
Periodic
A notification containing the current value of a statistic is generated
each time the period elapses.
For details about syntax, parameters, and return values, see the
SCCP_oamstat() man page. This man page also contains examples.
Report Types
The application can request an entity to return a statistical report. The
type of mode of report is dependent on the entity and the statistic type as
shown in the following table.
Table 11-9
Statistics by Report Type
Object Type
Statistic
SO_ SCCP
SO_LOCAL_
USER
SO_VIRTUA
L_USER
SO_REMOTE
_SP
SO_REMOTE
_USER
SO_GT_
TRANSLATO
R
SO_FAILED
_DEST
immediate
immediate
immediate
immediate
immediate
-
-
periodic
periodic
periodic
periodic
periodic
SO_UDT_COU
NT_TX
immediate
immediate
immediate
immediate
immediate
-
-
periodic
periodic
periodic
periodic
periodic
SO_UDT_COU
NT_RX
immediate
immediate
immediate
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
periodic
periodic
periodic
SO_UDT_GAU
GE_TX
periodic
periodic
periodic
periodic
periodic
-
-
SO_STATE
428
Chapter 11
Using the OA&M API
Collecting SCCP OA&M Statistics Using SCCP_oamstat()
Table 11-9
Statistics by Report Type (Continued)
Object Type
Statistic
SO_ SCCP
SO_LOCAL_
USER
SO_VIRTUA
L_USER
SO_REMOTE
_SP
SO_REMOTE
_USER
SO_GT_
TRANSLATO
R
SO_FAILED
_DEST
SO_UDT_GAU
GE_RX
periodic
periodic
periodic
periodic
periodic
periodic
periodic
SO_UDTS_CO
UNT_TX
immediate
immediate
immediate
immediate
immediate
-
-
periodic
periodic
periodic
periodic
periodic
SO_UDTS_CO
UNT_RX
immediate
immediate
immediate
immediate
immediate
-
immediate
periodic
periodic
periodic
periodic
periodic
SO_UDTS_GA
UGE_TX
periodic
periodic
periodic
periodic
periodic
-
-
SO_UDTS_GA
UGE_RX
periodic
periodic
periodic
periodic
periodic
-
periodic
SO_RTG_FAI
LURE_
COUNT
immediate
immediate
immediate
immediate
immediate
immediate
-
periodic
periodic
periodic
periodic
periodic
periodic
SO_RTG_FAI
LURE_
GAUGE
-
-
-
-
-
-
-
SO_TRANS_R
EQ_ GAUGE
-
-
-
-
-
-
-
NOTE
Chapter 11
periodic
The receive counters for a given object are incremented each time that
object receives a message. Both messages from remote users and
requests from the network to the object will cause the counters to be
incremented. Similarly each message transmitted from an object
increments the transmit counters.
429
Using the OA&M API
Collecting SCCP OA&M Statistics Using SCCP_oamstat()
Response to Expect When You Collect SCCP OA&M
Statistics
When you collect SCCP statistics using SCCP_oamstat(), you will
receive one of the following responses:
Command
successful
A non-negative integer is returned to indicate that the command was
successful.
You must then use the command SCCP_oamrecv() to receive the
notification.
•
If the command was executed correctly, you receive:
— An SO_EXECUTED notification to acknowledge the request.
— Depending on whether you requested periodic or immediate
statistics you will receive one or more notifications corresponding
to the statistic you requested.
•
If the command could not be executed:
— You will get an sccp_notif whose failure field contains the
reason why the command could not be executed.
Command failed
430
The value of -1 is returned to indicate that the command failed. The
ss7errno parameter is set to indicate the error.
Chapter 11
Using the OA&M API
Receiving SCCP OA&M Command and Statistic Notifications Using SCCP_oamrecv()
Receiving SCCP OA&M Command and
Statistic Notifications
Using SCCP_oamrecv()
In response to a command from the application, the requested entity
responds with a notification indicating the result of the command. The
application must receive all notifications using SCCP_oamrecv().
This function receives notifications from SCCP OA&M connections.
These notifications can contain status information, statistics,
configurations or reports. They are the responses to previous SCCP
OA&M requests.
For details about syntax, parameters, and return values, see the
SCCP_oamrecv() man page. This man page also contains examples.
Response to Expect When You Use the
SCCP_oamrecv() Command
When you receive notifications using the SCCP_oamrecv() command, you
will receive one of the following responses:
Command
successful
An integer indicating the number of notifications waiting to be received
is returned. You must continue using SCCP_oamrecv() until the value
returned is 0 indicating that there are no more notifications waiting.
In response to a command:
•
If the command was executed correctly you receive:
— A notification.
•
If the command could not be executed you receive:
— An sccp_notif whose failure field contains the reason why
the command could not be executed.
Chapter 11
431
Using the OA&M API
Receiving SCCP OA&M Command and Statistic Notifications Using SCCP_oamrecv()
In response to a request for statistics:
•
If the command was executed correctly, you receive:
— An SO_EXECUTED notification to acknowledge the request.
— Depending on whether you requested on occurrence, periodic or
immediate statistics you will receive one or more notifications
corresponding to the statistic you requested.
•
If the command could not be executed you receive:
— An sccp_notif whose failure field contains the reason why
the command could not be executed.
Command failed
432
The value of -1 is returned to indicate that the command failed. The
ss7errno parameter is set to indicate the error.
Chapter 11
Using the OA&M API
Closing MTP and SCCP OA&M Connections Using SS7_close()
Closing MTP and SCCP OA&M Connections
Using SS7_close()
Only close an MTP or SCCP OA&M connection when you are certain
that the OA&M connection will no longer be used. Repeated opening and
closing of the connection places a high overhead on the OA&M API
mechanism.
An OA&M service is terminated when the application calls
SS7_ifclose(). All the entities used by the connection are also closed,
and any calls to these entities are refused.
For details about syntax, parameters, and return values, see the
SS7_ifclose() man page.
Chapter 11
433
Using the OA&M API
Using TCAP OA&M Functions
Using TCAP OA&M Functions
The application can collect TCAP statistics from the OA&M API. Unlike
MTP and SCCP, the TCAP OA&M applications can only request
statistical information, you cannot modify any configuration information.
434
Chapter 11
Using the OA&M API
Opening a TCAP OA&M Connection Using TCX_open()
Opening a TCAP OA&M Connection Using
TCX_open()
All TCAP OA&M requests and responses are exchanged via a TCAP
OA&M connection created by TCX_open().
TCX_open() creates a new TCAP access point (stack connections),
allowing the application to access the TCAP services either as a TC-user
or a TR-user.
For details about syntax, parameters, and return values, see the
TCX_open() man page.
Example 11-2
Example: Creating a TC-user Connection
This example is a code fragment that shows how to make a TC-user
connection.
/* Example of TCX_open (): */
#include <TCAP_ext.h>
#include <TCAP_errors.h>
CnxId = TCX_open(ClassName,
TCX_TCAP_STD,
OSSN,
TC_YES,
TC_YES,
NULL,
0,
0);
Chapter 11
435
Using the OA&M API
Scheduling TCAP OA&M Connections
Scheduling TCAP OA&M Connections
As described in “Scheduling SS7 Connections” on page 72, you must
schedule all the connections using the HP OpenCall SS7 scheduling
mechanism. You schedule the TCAP OA&M connections by using:
•
TCX_select_mask()
•
select()
•
TCX_cnx_handler()
TCX_select_mask()
This pre-select function is used for all TCAP OA&M connections. It takes
the file descriptor masks created by the application, and sets these
masks to include the file descriptors used by the OA&M API to manage
the TCAP OA&M connections. The application must call this function
before calling select().
For details about syntax, parameters, and return values, see the
TCX_select_mask() man page.
select()
The select() function is used for all HP OpenCall SS7 scheduling. It
modifies the read, write and exception masks created by
TCX_select_mask().
TCX_cnx_handler()
The application must call this post-select function. TCX_cnx_handler()
requests the API to process the masks returned by select() and
manage the internal mechanisms. An array of TCAP OA&M connection
identifiers is used to identify the OA&M connections that have messages
waiting to be received by the application.
Activity on the connection is flagged when one of these events occurs:
436
•
A message is received by the SS7 stack.
•
An L_cancel is generated by the API and must be extracted by the
receive function call.
Chapter 11
Using the OA&M API
Scheduling TCAP OA&M Connections
•
A closed connection is found (a send or receive call returns an error).
The application should call the close function to deallocate API
resources.
•
A connection goes from busy state (API_BUSY) to normal state. The
application can resume processing (send and receive calls no longer
return an error).
For details about syntax, parameters, and return values, see the
TCX_cnx_handler() man page.
Example 11-3
Scheduling TCAP OA&M Connections
int
cnx_active[MAX_FD];
int
numFd, num_cnx;
fd_set
readMask, writeMask; /* masks for select */
int
n;
int
result;
struct timeval
&tmout, * time = &tmout;
/* Zero select bit masks before entering loop */
FD_ZERO(&readMask);
FD_ZERO(&writeMask);
while (1) {
tmout.tv_sec = 2;
tmout.tv_usec = 0;
/* Must set this each time round loop as selectmask call
* may change the pointer
*/
time = &tmout;
/* Note: As we have no other fd’s open, the initial max fd
/* is 0. Also, we don’t use the exeception mask, so we pass 0.
* Note too that last param is a struct timeval **.
*/
numFd = TCX_select_mask(0, &readMask, &writeMask,0, &time);
n = select(numFd, (int *)&readMask, (int *)&writeMask, 0, time);
/* Note: We ALWAYS call the cnxhandler function after select(2),
* even if select returns an error (-1). This is to allow the API
* lib to clear any socket errors.
*/
num_cnx = MAX_FD;
TCX_cnx_handler(n, &readMask, &writeMask, 0, &num_cnx, cnx_active);
if ( (num_cnx > 0) && ( cnx_active[0] == cnxId) ) {
/* OA&M operations*/
}
Chapter 11
437
Using the OA&M API
Requesting TCAP Statistics Using TCX_control()
Requesting TCAP Statistics Using
TCX_control()
When the application has scheduled the TCAP OA&M connections,
OA&M commands relating to TCAP statistics can be issued.
This function issues requests for immediate or periodic statistical reports
on behalf of the application. A report is received by calling TCX_recv().
For details about syntax, parameters, and return values, see the
TC_control() man page.
The following table lists the types of statics produced.
Table 11-10
TCAP Statistic Types
Command
Meaning
STAT_ACTIVE_TRANSACTIONS
Number of active transactions/dialogues.
STAT_TRANSACTIONS_KILLED_
BY_TIMER
Number of transactions/dialogues that were
terminated internally by TCAP.
STAT_USER_LOAD
Number of TCAP messages per second for each user
attached to TCAP. Multiple notifications may be
returned.
STAT_NODE_MSG_SENT
Total number of TCAP messages sent by the SS7
platform.
STAT_NODE_MSG_RECV
Total number of TCAP messages received by the SS7
platform.
STAT_ABORT_RECEIVED
Returns the P_cause of each P_ABORT received by
TCAP. Multiple notifications may be returned.
STAT_ABORT_SENT
Returns the P_cause of each P_ABORT sent by TCAP.
Multiple notifications may be returned.
STAT_REJECT_RECV
Returns the Problem Code of each rejected
component received by TCAP. Multiple notifications
may be returned.
438
Chapter 11
Using the OA&M API
Requesting TCAP Statistics Using TCX_control()
Table 11-10
TCAP Statistic Types (Continued)
Command
Meaning
STAT_REJECT_SENT
Returns the Problem Code of each rejected
component send by TCAP. Multiple notifications may
be returned.
STAT_U_REJECT_RECEIVED
Returns the abort cause of each U_ABORT received
by TCAP. Multiple notifications may be returned.
STAT_U_REJECT_SENT
Returns the abort cause of each U_ABORT send by
TCAP. Multiple notifications may be returned.
STAT_COMPONENT_RECV
Number of components received.
STAT_COMPONENT_SENT
Number of components sent.
RESET_STATS
Reset counters.
stat_end
Indicates the end of multiple notifications returned in
response to these commands:
STAT_ABORT_RECEIVED, STAT_ABORT_SENT,
STAT_REJECT_RECV, STAT_REJECT_SENT,
STAT_U_REJECT_RECEIVED, STAT_U_REJECT_SENT.
Example 11-4
Requesting TCAP Statistics
int ret, cnxId_tcap;
TC_control_c command;
tc_control_parms controlParms;
// send the request
command = STAT_ACTIVE_TRANSACTIONS;
ontrolParms.period_value = 30; // report period of 30 secs
ret = TCX_control (cnxId_tcap, NULL,command,&controlParms);
if (ret < 0) {
// error handling
}
Chapter 11
439
Using the OA&M API
Collecting TCAP Statistics Using TCX_recv()
Collecting TCAP Statistics Using TCX_recv()
When the application issues an OA&M statistic request, the related
responses are returned to the application via MGT primitives.
This function receives a MGT primitive containing statistic information
from the OA&M API.
For details about syntax, parameters, and return values, see the
TCX_recv() man page.
Example 11-5
Receiving TCAP OA&M Statistics
tcx_primitive primitive;
tc_primitive_type
ptype;
tc_control_c statType;
tc_p_abort_cause abort_cause;
Boolean abort = FALSE;
SSWnotif_type notif_type;
int
notif_value;
int
more_message;
int backup_info,L_ret;
int
period;
while ((ret = TCX_recv (cnxId_tcap,NULL,&primitive,NULL, &more_message,&backup_info))
> 0)
{
ptype = primitive.type;
if (ptype != MGT) {
// this is a spontaneous notification
}
if (ptype == MGT) {
statType = primitive.tcx_primitive_option.tc_stat.stat_type;
if (statType == STAT_ABORT_RECEIVED) {
abort_cause =
primitive.tcx_primitive_option.tc_stat.p.abort.p_abort;
notif_value =
primitive.tcx_primitive_option.tc_stat.p.abort.value;
abort = TRUE;
} else {
if (statType == STAT_ABORT_SENT) {
abort_cause =
primitive.tcx_primitive_option.tc_stat.p.abort.p_abort;
notif_value =
primitive.tcx_primitive_option.tc_stat.p.abort.value;
abort = TRUE;
440
Chapter 11
Using the OA&M API
Collecting TCAP Statistics Using TCX_recv()
} else {
notif_value = primitive.tcx_primitive_option.tc_stat.p.value;
}
} // end of if (primitive.p_type == MGT)
else {
printf (“Bad primitive type received from TCAP\n”);
}
} // end of while
if (ret < 0) {
if (tc_errno == TCE_CNX_CLOSED || tc_errno == TCE_ILLEGAL_CALL)
printf (“tc_errno = %d\n”,tc_errno);
}
Chapter 11
441
Using the OA&M API
Closing a TCAP OA&M Connection Using TCX_close()
Closing a TCAP OA&M Connection Using
TCX_close()
Only close a TCAP OA&M connection when you are certain that the
application will not use the connections again. If a connection is
repeatedly opened and closed, the application will place a high overhead
on the API mechanism.
A TCAP OA&M service is terminated when the application closes an
OA&M connection using TCX_close(). All the entities associated with
this OA&M connection are also closed, and all further calls to
TCX_send(), TCX_recv() and TCX_control() will be refused.
For details about syntax, parameters, and return values, see the
TCX_close() man page.
442
Chapter 11
12
Using the ISUP API
This chapter describes how to open, close and use an SS7 stack
connection via the HP OpenCall SS7 ISUP API.
Chapter 12
443
Using the ISUP API
Introduction
Introduction
The HP OpenCall SS7 ISUP API provides the application with object
oriented access to the HP OpenCall SS7 ISUP library and its supported
functions. Hence the application can access the SS7 network via an SS7
stack and the HP OpenCall SS7 ISUP library.
In CIC-based distribution mode, an HA process called the Traffic
Discriminator routes ISUP traffic to the correct owner application using
the CIC and DPC values defined in the application’s configuration.
This chapter explains how you can use the API to set up, operate and
close a connection between the application and the HP OpenCall SS7
stack via HP OpenCall SS7 ISUP.
An example program illustrating simple call setup and release is listed
in “ISUP Tutorial Programs” on page 497.
For all function signatures and object structures, refer to the man pages.
444
Chapter 12
Using the ISUP API
ISUP Software Versions
ISUP Software Versions
HP OpenCall SS7 ISUP software supports the following base protocols:
•
ANSI
•
ITU-T
The current derived protocols are ITU88, ITU97, TTC, etc.
For each protocol, different message sets are supported.
For example:
•
the ANSI protocols support the ANSI-92 and ANSI-95 message sets
•
the ITU97 protocol supports the ITU-T93 and ITU-T97 message sets
The combination of a protocol and a message set is known as a flavor.
For a complete list of ISUP flavors supported by HP OpenCall SS7 ISUP,
please contact your HP representative.
Both the ANSI based and the ITU-T based versions of the
HP OpenCall SS7 ISUP software can be customized using the
HP OpenCall SS7 ISUP message set customization tool.
NOTE
Chapter 12
The IupTTC3, IupJJ90, and IsupPT message sets cannot be customized.
445
Using the ISUP API
ISUP Software Components
ISUP Software Components
HP OpenCall SS7 ISUP contains both generic software
components—common to both the ANSI based and the ITU-T based
product versions—and version specific software components.
Figure 12-1
HP OpenCall SS7 ISUP Components
Generic Components
These components are independent of the software version. They include
446
Chapter 12
Using the ISUP API
ISUP Software Components
•
HP OpenCall SS7 ISUP API
This C++ interface provides a single abstract programming view of
the HP OpenCall SS7 ISUP library. It provides an application with
objects and methods to create ISUP messages with their associated
parameters, and access the network via an HP OpenCall SS7 stack
to exchange signaling information.
•
HP OpenCall SS7 ISUP Supported Messages
These are the ISUP messages supported by the
HP OpenCall SS7 ISUP library. They are represented by the API as
a set of C++ object classes known as message classes. These message
classes provide specific interfaces to build and access individual
parameters found in each message.
•
HP OpenCall SS7 ISUP core
This component contains several sub-components concerning
internal HP OpenCall SS7 ISUP information, handling,
decoding/encoding and direct MTP3 access.
Version-Specific Components
These components affect the behavior of API objects. They include:
•
HP OpenCall SS7 ISUP State-machines
This component provides the ISUP behavior defined by the ANSI or
ITU-T standards
•
HP OpenCall SS7 ISUP Metadata
This component determines the behavior of the
HP OpenCall SS7 ISUP Supported Messages when they are
manipulated by an application. It contains the internal structure of
those messages defined the ANSI or ITU-T standards. This
component can be customized using the HP OpenCall SS7 ISUP
Message Customization Package
•
HP OpenCall SS7 ISUP Circuit Manager
This component manages the state of the circuits manipulated by the
state-machines.
Chapter 12
447
Using the ISUP API
Object Orientation Guidelines
Object Orientation Guidelines
HP OpenCall SS7 ISUP provides the application with a C++ API to
manipulate all SS7 stack connections and exchange messages as objects.
Its object-oriented nature should be kept in mind while you develop the
application.
Object Lifespan
When you create an object, its lifespan should be considered before it is
destroyed. If the object is repeatedly used with the same parameters,
then it must not be destroyed when the initial task is completed, but it
should exist until the application has completed all its tasks for that
object.
For example, the application communicates with an SS7 stack by means
of a connection object (IsupProbe). This connection must remain open
until the application no longer wishes to communicate with the SS7
stack. Otherwise, creating and destroying a connection object each time
you wish to exchange messages with the SS7 stack involves a high
processing overhead for the application.
Inheritance
Most of the objects manipulated by the API are instances of derived
classes. A base class defines the common methods and data for its
derived classes. Objects of a derived class contain all the data and
methods defined by both the base class and its derived class. Hence,
derived classes can refine the behavior of their parent classes.
Exception Handling
Error handling is not supported by the HP OpenCall SS7 ISUP API. Any
errors are indicated by the value returned after completion of a method.
Such values are known as Return Status Values, and each value signifies
a specific state.
448
Chapter 12
Using the ISUP API
Archive and Shared Libraries
Archive and Shared Libraries
The ISUP API is available both as an archive library and as a shared
library. See also “ISUP Makefiles” on page 499.
To know the compile and link directives to use for the archive and shared
libraries, refer to the ISUP API tutorial (see “ISUP Tutorial Programs”
on page 497).
Chapter 12
449
Using the ISUP API
Connections
Connections
A centralized application, such as Call Control described by ITU-T,
handles all circuit objects attached to a system. Signaling information
regarding these circuits is exchanged between signaling points via the
SS7 network.
HP OpenCall SS7 ISUP supports access to the SS7 network via a
maximum of 4 SS7 stacks. The HP OpenCall SS7 ISUP API provides
connection objects to connect the application to an SS7 stack. These
connection objects are commonly known as probe objects.
Figure 12-2
450
Connection/Probe Relationship
Chapter 12
Using the ISUP API
SS7 Stack Access
SS7 Stack Access
Via its API and probe objects, the HP OpenCall SS7 ISUP library allows
the application to access each SS7 stack using one of the following access
modes:
•
State-machine access mode
•
Bypass access mode
Access mode is selected when the application requests the API to create a
probe object on its behalf.
State-machine Mode
The state-machine access mode enables the application to benefit from
the state-machines and timers provided by HP OpenCall SS7 ISUP. The
protocol behavior of HP OpenCall SS7 ISUP is dependent on the
state-machines implemented for each software version (ANSI based or
ITU-T based).
Bypass Mode
In this access mode, the application can bypass the provided
state-machines and timers, and directly interface with the ISUP
Signaling Procedure Control (SPRC) functional block.
This mode of access is recommended if you are developing a gateway
application or an application not requiring interaction with the
state-machines.
If a customer has an existing application that implements the ISUP
state-machines, and the customer wants to use this application instead
of the HP OpenCall SS7 ISUP state-machines, then the Bypass Mode is
the appropriate mode.
Chapter 12
451
Using the ISUP API
ISUP CIC-Based Distribution
ISUP CIC-Based Distribution
ISUP CIC-based distribution is a facility that enables several primary
ISUP application instances to be connected simultaneously to the same
ISUP user part of MTP of the same SS7 stack, via an HA process called
the Traffic Discriminator (TDi).
See Figure 12-3 on page 454 for a sample configuration.
ISUP traffic is routed towards the application that handles the ISUP
circuit defined in its configuration. The circuit is identified by a couple
[DPC value, CIC value].
Default Platform Configuration
When installed on the platform, CIC-based distribution is enabled by
default. Any new configuration that does not use CIC-based distribution,
must explicitly disable CIC-based distribution, see the SAM online help
for details.
Inconsistent Distribution
An application using CIC-based distribution must not run alongside
another application that does not use CIC-based distribution.
Inconsistent distribution has a serious impact on platform performance
and results in ISUP traffic loss.
452
Chapter 12
Using the ISUP API
Application Instance Group
Application Instance Group
Schematically, ISUP application instances can be grouped into AIGs
(Application Instance Groups).
Each AIG contains one primary application instance, and one secondary
application instance.
Each primary ISUP application instance is identified by a unique
application id.
The secondary instance associated with this primary instance has the
same application id.
Figure 12-3 on page 454 shows a sample configuration.
Chapter 12
453
Using the ISUP API
Application Instance Group
Figure 12-3
Several Primary ISUP Application Instances Connected to an
SS7 Stack via the TDi
The primary ISUP application instances handle the messages. The
secondary application instance does not handle messages. A secondary
instance is dedicated to a single primary instance, that is, a secondary
instance cannot be the back up of more than one primary instance.
AIG configuration
The association between a CIC and an application id is defined in the
application’s configuration. Each primary ISUP application has its own
configuration containing the CICs for which it is responsible.
This configuration (and consequently the set of CICs) also applies to the
secondary application instance that backs up the application. At any
time, a CIC can be assigned to just one application, that is, a CIC cannot
454
Chapter 12
Using the ISUP API
Application Instance Group
be assigned simultaneously to several applications. This is done using
SAM (platform configuration tool). For more information on configuring
ISUP applications online, see the HP OpenCall SS7 Operations Guide.
NOTE
Chapter 12
An application’s configuration is not affected by the distribution mode,
that is, it does not need to be modified for use with (or without)
CIC-based distribution.
455
Using the ISUP API
ISUP Message Routing
ISUP Message Routing
Outgoing ISUP message routing is not affected by the traffic distribution
mode, that is, CIC-based distribution or non distribution.
Incoming Message Routing
Each primary instance has its own set of ISUP circuits, for which it is
responsible.
ISUP Circuit Owners
If a newly connected ISUP application tries to handle an ISUP circuit
that “belongs” to another application, an error trace is output and a log is
generated. A circuit “belongs” to the first application that loaded it for
the duration of the TDi’s existence.
TDi Routing Tables
The TDi loads any configuration file present at startup and consolidates
its routing table accordingly. If an ISUP application connects to the TDi
after TDi startup, the TDi loads the configuration at connection time and
updates its routing table.
With ISUP CIC-based distribution, the active TDi routes incoming
messages (that is, messages coming from the SS7 network) to the
appropriate primary ISUP application instance, using the OPC and CIC
value of the incoming message.
The routing table is not updated when the application disconnects from
the TDi.
NOTE
Routing is based on the OPC of the incoming message. From the ISUP
application’s point of view, this OPC corresponds to a DPC.
Messages from a Non-Assigned Circuit
Incoming messages from a non-assigned ISUP circuit are discarded and
a log is generated.
456
Chapter 12
Using the ISUP API
ISUP Message Routing
Management Messages
Management messages (MTP level 3 notifications) are broadcast to all
primary application instances. For example, a message concerning the
availability of the MTP service is sent to all the primary application
instances.
Chapter 12
457
Using the ISUP API
ISUP Application Connection
ISUP Application Connection
In CIC-based distribution mode, ISUP applications connect to the stack
via the TDi. To connect to the stack, an ISUP application must use the
IsupMgr::init method from the ISUP API library:
static ISUP::IsupMgr::init(IsupMgr &*
P_mgr,HPAIN::Uint32, P_applicationId, HPAIN::Boolean,
P_cicDistributed)
The value of the P_cicDistributed Boolean can be set to bTrue or to
bFalse.
To use CIC-based distribution, set the value to bTrue,else to bFalse.
NOTE
The connection of an ISUP application to more than one LPC is not
supported.
Application Disconnection
When an application disconnects from the TDi, the TDi routing table is
not updated. If a new application connects to the TDi with the same
application id, the former configuration is used to route the messages for
any ISUP circuits that exist in the routing table at connection time.
458
Chapter 12
Using the ISUP API
Dynamic Configuration
Dynamic Configuration
The configuration of ISUP applications can be changed dynamically
regardless of the distribution mode.
To change the configuration of a connected application, use SAM. See the
SAM on-line help and the HP OpenCall SS7 Operations Guide for more
information.
Next, run the ss7isupReload command to commit the changes in the
ISUP library and TDi routing table.
NOTE
Do not use the IsupMgr::Reload method in CIC-based distribution
mode.
ISUP Loopback Mode
Loopback can only be used when CIC-based distribution is disabled.
Flow Control and Congestion Handling
Flow control and congestion handling mechanisms are not affected by
the distribution mode.
On-line Upgrade
Online upgrade is supported (but with current shared library
limitations).
Chapter 12
459
Using the ISUP API
API Structure
API Structure
The HP OpenCall SS7 ISUP API is a C++ interface that provides the
application with a single abstract view of the HP OpenCall SS7 ISUP
library and its functions. Its major objects conform to the following object
model:
460
•
IsupMgr
•
IsupProbe
•
IsupSMProbe/IsupBPProbe
Chapter 12
Using the ISUP API
API Structure
Figure 12-4
Object Model
The object model diagram was developed using the object model notation
described in Object-Oriented Development: The Fusion Method,
Prentice-Hall International, Englewood Cliffs, New Jersey, 1994
IsupMgr
This is the management object class for the HP OpenCall SS7 ISUP API.
The main function of an IsupMgr object is to handle all the central
processing for the API such as scheduling, timers and loading of the
ISUP configuration file. It also creates, initializes and schedules probe
objects.
Chapter 12
461
Using the ISUP API
API Structure
Only one instance of the IsupMgr is allowed per application.
IsupProbe
The probe objects supported by the HP OpenCall SS7 ISUP API are
derived from a single base class, IsupProbe. This class defines the
common probe methods which include opening, closing and managing
the SS7 stack connections (probe objects).
Derived from this base class are two Probe classes:
•
IsupSMProbe
•
IsupBPProbe
IsupSMProbe
An object belonging to this class corresponds to an SS7 stack connection,
and uses the state-machine access mode to exchange primitives and
messages concerning Call Processing Control (CPC) and Circuit
Supervision Control.
Though this class inherits its general activation and deactivation
methods from IsupProbe, its objects are initialized by the IsupMgr object.
IsupBPProbe
IsupBPProbe objects allow ISUP primitives and messages to be directly
exchanged with MTP Level 3, bypassing the state-machines. Like
IsupSMProbe objects, they are dedicated to SS7 stack connections and
are initialized by the IsupMgr object.
462
Chapter 12
Using the ISUP API
Outline of the Basic Application
Outline of the Basic Application
The basic aim of the HP OpenCall SS7 ISUP is to allow you to develop
both simple and complex applications using the API objects. Although
each application is different, you must use and manage probe objects to
exchange ISUP messages.
The application should incorporate the following structure. Designing
the application in relation to this skeleton structure will enhance the
operation of the application with regard to the HP OpenCall SS7 ISUP
library.
General Application Structure
//
//
//
//
//
//
//
//
Chapter 12
initialize_IsupMgr_object
if (initialize_IsupMgr_object != Ok) then
error handling
fi
create_Probe_object()
open_Probe_object()
schedule_Probe_object()
463
Using the ISUP API
Initializing the IsupMgr object
Initializing the IsupMgr object
The static method IsupMgr::init() creates and initializes the IsupMgr
object. If the application has previously created an IsupMgr object, then
all subsequent calls to the IsupMgr::init() method return a pointer to
this IsupMgr object and the corresponding return value.
For details about the syntax, parameters, and return values of
IsupMgr::init(), see the IsupMgr(3) man page.
Loading the Configuration File
IsupMgr::init() also automatically loads a configuration file
specifically created for HP OpenCall SS7 ISUP. By default, this is a file
identified by the Application Identifier 0. Otherwise it is a file specified
during configuration. This configuration file contains Local Point Code
(LPC), Destination Point Codes (DPC), message set type and circuit
information.
The call to IsupMgr::init() may fail due to errors in this configuration
file.
Example 12-1
Initializing the IsupMgr Object
// initialize_IsupMgr_object()
// if (initialize_IsupMgr_object() != Ok) then
//
error handling
// fi
IsupMgr * isupMgr;
ISUP::InitStatus initStatus;
AppId=0;
// initialize IsupMgr object
initStatus = IsupMgr::init(isupMgr,AppId);
if (!(initStatus.isOk())){
cout << “IsupMgr: init failed:” << initStatus << “\n” << flush;
// error recovery
}
464
Chapter 12
Using the ISUP API
Creating and Opening a Probe Object
Creating and Opening a Probe Object
The application must request the HP OpenCall SS7 ISUP API to create a
probe object to exchange signaling information with the SS7 network via
an SS7 stack.
Once a probe object has been created, it must be opened to activate the
connection.
It can be opened as:
•
a single connection
(This type of connection is opened when application high availability
is not required.)
•
one of the connections in a active/standby configuration
(Such connections are used to provide a 2-host configuration with an
active and a standby application. The active application is opened on
the primary connection, the standby application is opened on the
secondary connection. Both applications are connected to the SS7
stack to enable application switchover.)
Creating a Probe Object
As no direct constructor exists for IsupSMProbe and IsupBPProbe, it is
the responsibility of the IsupMgr (factory) object to create each probe
object using the createSMProbe() and createBPProbe() methods.
For details about the syntax, parameters, and return values of the
createSMProbe() and createBPProbe() methods, see the IsupMgr(3)
man page.
The probe object is bound to an SS7 stack by the stack’s classname
(className).
Each classname must first be declared in the HP OpenCall SS7 ISUP
configuration file.
The ActivityObject is described in “Using the Activity Object” on
page 477.
Chapter 12
465
Using the ISUP API
Creating and Opening a Probe Object
Opening a Connection
After the object has been created, you must explicitly open the
connection to an SS7 stack and activate a probe object using the
open()method.
For details about the syntax, parameters, and return values of the
open() method, see the IsupProbe(3) man page.
Primary and Secondary Connections
The API provides functionality that enables you to choose the connection
mode that is used when an ISUP application opens a connection via the
ISUP API:
•
primary connection mode an application running over a primary
connection
•
secondary connection mode for a an application running over a
secondary connection
The ISUP API provides this information to the SS7 stack (MTP L3) when
the connection is established.
Switching
The stack can switch from the primary to the secondary connection upon
request of the application running over the secondary connection or on
primary application failure. In the first case, the primary connection
becomes the secondary, and the secondary becomes the primary and is
aware of MTP status (mtp_available, mtp_unavailable,
mtp_congested, mtp_uncongested, mtp_restarting).
The diagram below shows how switchover occurs:
466
Chapter 12
Using the ISUP API
Creating and Opening a Probe Object
Figure 12-5
Chapter 12
Switching
467
Using the ISUP API
Creating and Opening a Probe Object
Restrictions Related to Switching
A primary connection already exists and a new one is requested: the new
connection becomes primary and the old one becomes the secondary
connection.
A secondary connection wants to be primary: the previous primary is
disabled (becomes secondary) without notification from the SS7 stack.
The new primary is aware of the LPC state.
468
Chapter 12
Using the ISUP API
Creating and Opening a Probe Object
A primary connection is broken: the secondary connection becomes
primary automatically.
NOTE
It is impossible to perform the connection switchover from the
application using the primary connection. It is always the application
using the secondary connection that initiates the switchover with the
enable command.
NOTE
The stack behavior is affected by the following parameters: AutoSwitch,
CloseonCreate, and CloseonEnable. For more details, see Table 4-1 on
page 93.
Example 12-2
Creating and Opening an IsupSMProbe Object
ISUP::OpenStatus
openStatus;
ISUP::CreateStatus
createStatus;
IsupSMProbe*
isupSMProbe;
IsupSMProbe::ActivityObject* const activityObj =new ActivityObject();
char* className = new char [16];
// create_Probe_object()()
Chapter 12
469
Using the ISUP API
Creating and Opening a Probe Object
// if (create_Probe_object() != Ok) then
//
destroy_Probe_object()
//
error handling
// fi
createStatus = isupMgr->createSMProbe(className,activityObj,isupSMProbe);
if (!createStatus.isOk()) {
cout << "IsupSMProbe creation failed \n" << flush;
cout << "Error=" createStatus "\n" << flush;
// destroy probe
// error recovery
}
// open_Probe_object()
// if (open_Probe_object()!= Ok) then
//
close_Probe_object()
//
destroy_Probe
//
error handling
// fi
openStatus = isupSMProbe->open(ISUP::PRIMARY, HPAIN::bTrue);
if (! openStatus.isOk()){
cout << " isupSMProbe opening failure \n" << flush;
// close_Probe_object()
// destroy_probe_object
// delete_activity_object
// error recovery
}
470
Chapter 12
Using the ISUP API
Creating and Opening a Probe Object
Example 12-3
Creating and Asynchronously Opening an IsupSMProbe Object
ISUP::OpenStatus
openStatus;
ISUP::CreateStatus
createStatus;
IsupSMProbe*
isupSMProbe;
IsupAdditional::Info*
indication;
IsupAdditional::NotifOpenCnx* notifOpenCnx = NULL;
HPAIN::Uint32
nbIndication;
IsupSMProbe::ActivityObject*
const activityObj = new ActivityObject();
char*
className = new char [16];
// create an IsupSMProbe object
// create_Probe_object()()
// if (create_Probe_object() != Ok) then
//
destroy_Probe_object()
//
error handling
// fi
createStatus = isupMgr->createSMProbe(className,activityObj,isupSMProbe);
if (!createStatus.isOk()) {
cout << "IsupSMProbe creation failed \n" << flush;
cout << "Error=" createStatus "\n" << flush;
// destroy probe
// error recovery
}
// open_Probe_object()
// if (open_Probe_object()!= Ok) then
//
close_Probe_object()
//
destroy_Probe
//
error handling
Chapter 12
471
Using the ISUP API
Creating and Opening a Probe Object
// fi
openStatus = isupSMProbe->open(ISUP::PRIMARY, HPAIN::bFalse);
if (! openStatus.isOk()){
cout << " isupSMProbe opening failure \n" << flush;
// close_Probe_object()
// destroy_probe_object
// delete_activity_object
// error recovery
}
// Wait for Open Connection Notification
while( myIsupMgr->oamReceive(indication, nbIndication).getStatus() ==
ISUP::OamStatus::OPEN_CNX_IN_PROGRESS )
{
// schedule ISUP library
}
// Check if aysnchronous open connection was successful
if( indication != NULL )
{
// Safe cast to NotifOpenCnx object
notifOpenCnx = IsupAdditional::NotifOpenCnx::castInfo( indication );
}
if( notifOpenCnx == NULL )
{
cout << " isupSMProbe opening failure: no Open Connection Notification \n" <<
flush;
// close_Probe_object()
// destroy_probe_object
// delete_activity_object
472
Chapter 12
Using the ISUP API
Creating and Opening a Probe Object
// error recovery
}
else if( !notifOpenCnx->successful() )
{
cout << " isupSMProbe opening failure: negative Open Connection Notification \n" <<
flush;
// close_Probe_object()
// destroy_probe_object
// delete_activity_object
// error recovery
}
Chapter 12
473
Using the ISUP API
Scheduling Probe Objects
Scheduling Probe Objects
Via the created and active probe objects, the application requests the API
to exchange ISUP messages on its behalf. This is achieved by the API’s
asynchronous services, which allow the application to complete other
tasks until the API returns a response to the request.
It is the scheduling mechanism which provides these asynchronous
services. The mechanism is based on select(), a system call which
allows I/O multiplexing, and contains 3 phases:
•
Pre-select
•
Select()
•
Post-select
Pre-select
The pre-select phase is used to set up certain masks and time values
according to API requirements.
Masks
The read_mask, write_mask and exception_mask input parameters are
bit masks used by the API to shield the IPC descriptions from the
application. Do not override the masks by setting them to NULL in you
application. They can contain IPC file descriptors managed by the
application. Reset (using FD_ZERO) all the select masks that will be used
by the application before you enter the pre-select, post-select loop.
The application must initially create these three bit masks in the
standard HP-UX manner.
Timeout Value
The application must also provide the API with a timeout value, which is
the maximum length of time that the CPU is allowed to be blocked if
there is no I/O activity. The API assesses its own requirements and thus,
decreases this value to a minimal value, such as 500ms.
474
Chapter 12
Using the ISUP API
Scheduling Probe Objects
selectMask()
The API provides the pre-select method selectMask() to update and
modify the masks and timeout value provided by the application.
Using the contents of the read, write and exception masks,
selectMask()sets the file descriptor masks to indicate the file
descriptors used by the API. The file descriptors managed by the
application are left untouched. The returned bit masks are then used by
select().
The application must call IsupMgr::selectMask() before each
select().
For details about the syntax, parameters, and return values of
selectMask() method, see the IsupMgr(3) man page.
Select()
This second phase is the basis of the scheduling mechanism.
select() examines the file descriptors specified by the read, write and
execute bit masks. When select() is successful, it modifies and returns
these bit masks. The respective masks indicate if a file descriptor is
ready for reading or writing, or if there is a pending exception condition.
For details about the syntax, parameters, and return values of select()
method, see the select() man page.
Chapter 12
475
Using the ISUP API
Scheduling Probe Objects
Post-select
The post-select phase analyses the results of select() for the API and
triggers the necessary processing for the file descriptors (connections)
managed by the API. Processing is based on the Work value returned by
either IsupMgr::handler() or IsupMgr::doWork().
For details about the syntax, parameters, and return values of the
IsupMgr::handler and IsupMgr::doWork() methods, see the
IsupMgr(3) man page.
Work
Both IsupMgr::handler() and IsupMgr::doWork() return a value
known as Work to the application. This value indicates the number of
ISUP messages waiting to be received from the network.
handler()
The IsupMgr::handler() determines whether there are primitives to be
received from any of the active connections identified in the read bit
mask. If there are messages to be received, they are stored in a receive
buffer.
It manages all the internal mechanisms and must be called after every
HP-UX select(). As the IsupMgr::handler() returns just an
estimation of the processing to be done by the API, its CPU overhead is
quite low.
It may occur that none of the connections require servicing, such as an
internal timeout has been received.
doWork()
After the IsupMgr::handler() call has returned, IsupMgr::doWork()
processes the ISUP messages that are waiting to be received. It activates
the state-machines and HP OpenCall SS7 ISUP internal mechanism.
Finally, it can use the Activity object mechanism to indicate to the
application how many primitives are waiting to be received.
476
Chapter 12
Using the ISUP API
Using the Activity Object
Using the Activity Object
HP OpenCall SS7 ISUP provides a way to optimize
HP OpenCall SS7 ISUP API calls through the ActivityObject.
Implementing the ActivityObject takes advantage of the callback
methods provided by this object.
Criteria for Choosing to Implement the Activity
Object
If you do not use the Activity Object
If you choose not to use the ActivityObject, the application must perform
the following tasks.
•
In case of outbound flow-control the application must regularly call
the IsupProbe::send() method to know if the flow-control condition
is still present
•
The application must regularly call the IsupProbe::receive()
method to receive all inbound ISUP messages.
If you Implement the Activity Object
If you choose to implement an ActivityObject the
HP OpenCall SS7 ISUP API provides the application with following
information:
Chapter 12
•
the number of ISUP messages waiting to be received through the
recvActivity() method
•
the end of an outbound flow-control condition through the
sendPossible() method
•
any change of the MTP connection status through the cnxStatus()
method.
477
Using the ISUP API
Using the Activity Object
How to use the Activity Object
You can derive an activity object mechanism for IsupSMProbe and
IsupBPProbe objects. The aim of the mechanism must be to inform the
probe object(s) that primitives are waiting to be received by the
application. The mechanism must also inform the probe object(s)
whether it is possible to send ISUP messages and primitives, and the
status of the connection.
An ActivityObject class is defined by IsupSMProbe and IsupBPProbe.
These classes contain the following virtual methods:
Table 12-1
Return Type
virtual void
Activity Methods
Method
recvActivity()
Arguments
(IsupSMProbe *aProbe,
int nbOfRecvToDo)=0;
(IsupBPProbe *aProbe,
int nbOfRecvToDo)=0;
virtual void
sendPossible()
(IsupSMProbe * aprobe)=0;
(IsupBPProbe * aprobe)=0;
virtual void
cnxStatus()
(IsupSMProbe * aProbe,
ISUP::CnxStatus aStatus)=0;
(IsupBPProbe * aProbe,
ISUP::CnxStatus aStatus)=0;
Redefining the Activity Methods
The application can derive its own ActivityObject classes from the
provided parent class. You can then redefine the ActivityObject
methods, using the same arguments.
478
Chapter 12
Using the ISUP API
Using the Activity Object
recvActivity()
From the inbound path, the IsupSMProbe::recvActivity() and
IsupBPProbe::recvActivity() methods must provide the number of
primitives waiting to be received by a specific probe object.
NOTE
It must not receive the waiting primitives.
sendPossible()
From the outbound path, the IsupSMProbe::sendPossible() and
IsupSMProbe::sendPossible() methods must indicate whether it is
possible to send messages from a specific probe object to the network.
cnxStatus()
The cnxStatus() must indicate the status of the connection with the
SS7 stack, such as switchover or the connection has been closed.
Chapter 12
479
Using the ISUP API
Using the Activity Object
Example 12-4
Redefining the recvActivity() for an IsupSMProbe Object.
// activity object inheriting from IsupSMProbe: definition and
// implementation
class
{
void
void
void
};
MyActivityObject: public IsupSMProbe::ActivityObject
recvActivity(IsupSMProbe * aProbe, int nbOfRecvToDo);
sendPossible(IsupSMProbe * aProbe);
cnxStatus(IsupSMProbe * aProbe, ISUP::CnxStatus aStatus);
// List of Pending messages for each active ProbeList_of_p<RecvToDo> *listOfRecvToDo;
//--------------------------------------------------------------------//
Implementation of callback method MyActivityObject::recvActivity()
//
<< DO NOT CALL ‘receive’ in this callback method !! >>
//
//--------------------------------------------------------------------void MyActivityObject::recvActivity(IsupSMProbe * aProbe, int nbOfRecvToDo)
{
RecvToDo * recvToDo;
recvToDo= new RecvToDo (aProbe, nbOfRecvToDo);
if (listOfRecvToDo == NULL)
listOfRecvToDo = new List_of_p<RecvToDo>;
listOfRecvToDo->put (recvToDo);
}
480
Chapter 12
Using the ISUP API
Exchanging Messages via Probe Objects
Exchanging Messages via Probe Objects
Using their send() and receive() methods, IsupSMProbe and
IsupBPProbe objects exchange primitives and messages. It is important
that the primitives and messages are consistent types, otherwise these
methods will fail with the corresponding error.
Manipulating and exchanging signaling information via probe objects is
described in detail in Chapter 13, Exchanging ISUP Messages,.
Example 12-5
Exchanging Messages via an IsupSMProbe object.
ISUP::RecvStatus
ISUP::SendStatus
IsupSMProbe *
IsupSMProbe::PrimitiveType
ISUP::Address
IsupMsg *
IsupAdditional::Info *
int
recvStatus;
sendStatus;
isupSMProbe;
primitive;
address;
isupMsg;
info;
nbIndication;
// receive messages
do { recvStatus=isupSMProbe->receive(primitive,address,isupMsg,info,nbIndication);
if (!recvStatus.isOk()){
cout << “receive failed” << recvstatus << “\n” << flush;
// error recovery
}
// process the message contents.
} while (nbIndication >0 );
// select IAM message and assign values, including address info,
// send message
sendStatus=isupSMProbe->send(IsupSMProbe::SETUP_REQ, address, isupMsg, info);
if (!sendStatus.isOk()){
cout << “send failed =” << sendStatus << “\n”<< flush ;
delete isupMsg;
delete info;
// error recovery
}
Chapter 12
481
Using the ISUP API
Closing and Destroying a Probe
Closing and Destroying a Probe
Closing and destroying a probe object should only be done when you are
certain that it will no longer be used. Its lifespan must be carefully
considered, as recreating and re-opening a probe object places a high
overhead on the API mechanism.
Closing and destroying a probe object does not stop the application, it
only closes the connection to the SS7 stack.
Close()
This method closes the socket connection between a probe object and an
SS7 stack. You must do this before destroying the probe object.
For details about the syntax, parameters, and return values of the
close() method, see the IsupProbe(3) man page.
Destroy()
Only when the probe object has been closed, should you destroy it. After
destroying it, the pointer to the destroyed probe object is set to NULL,
thus avoiding its subsequent use.
When a probe object is destroyed, its activity object is not automatically
destroyed.
For details about the syntax, parameters, and return values of the
destroySMProbe and destroyBPProbe() methods, see the IsupMgr(3)
man page.
The usual time to destroy a probe object is at application termination.
Normally, you do not destroy a probe object during the life of the
application.
482
Chapter 12
Using the ISUP API
Closing and Destroying a Probe
Example 12-6
ISUP::CloseStatus
ISUP::DestroyStatus
IsupSMProbe *
MyActivityObject *
Closing and Destroying an IsupSMProbe Object
CloseStatus;
* destroyStatus;
IsupSMProbe;
const anActivityObject= new myActivityObject();
closeStatus = isupSMProbe->close();
if (!closeStatus.isOk()){
cout << “IsupSMProbe:: failure to close Probe /n” << flush;
cout << “Error =” << closeStatus << “/n” << flush;
// error recovery
}
destroyStatus = isupMgr->destroySMProbe(isupSMProbe);
if (!destroyStatus.isOk()){
cout << “IsupSMProbe:: failure to destroy Probe /n” << flush;
cout << “Error = “ << destroyStatus << “/n” << flush;
// error recovery
}
delete myActivityObject;
Chapter 12
483
Using the ISUP API
Receiving Notifications
Receiving Notifications
oamReceive()
Reload Procedure
During a reload procedure, the user application can receive notifications
containing the ISUP configuration changes. This mechanism can be
enabled/disabled by setting the ReportOnReload parameter to Yes/No in
the static or in the dynamic configuration.
To receive these notifications, the user application must call the
IsupMgr::oamReceive() function. If the ReportOnReload parameter is
set to YES and if the user application does not call
IsupMgr::oamReceive(), this can seriously impact the application
behavior.
Notifications Sent About Events in the ISUP Library
The following notifications are used to inform the application about
events in the ISUP library:
Table 12-2
Notification
ISUP Receive Notifications
Event
Read Accessors
IsupAdditional::
NotifOpenCnx
Notifies the
termination of an
asynchronous open
connection
procedure.
OPC() returns the LPC value of the stack
with which the ISUP library has attempted
to open a connection.
successful() returns the outcome of the
open connection procedure.
IsupAdditional::
NotifDelDpc
Notifies that a DPC
has been removed
from the
configuration.
OPC() returns the LPC value.
DPC() returns the DPC value.
484
Chapter 12
Using the ISUP API
Receiving Notifications
Table 12-2
Notification
IsupAdditional::
NotifDelCics
ISUP Receive Notifications (Continued)
Event
Notifies that a
range of circuits has
been removed from
the configuration.
Read Accessors
OPC() returns the LPC value.
DPC() returns the DPC value.
CICMIN() returns the first CIC of the
range.
CICMAX() returns the last CIC of the
range.
NOTE: If CICMIN() and CICMAX() return
the same value, only one CIC has been
removed.
IsupAdditional::
NotifAddDpc
Notifies that a DPC
has been added.
OPC() returns the LPC value.
DPC() returns the DPC value.
MsgSetName() returns the message set
applicable to the added DPC.
releaseCause() returns the
ReleaseCauseValue corresponding to the
added DPC.
IsupAdditional::
NotifCics
Notifies that a
range of circuits has
been added or
modified.
OPC() returns the LPC value.
DPC() returns the DPC value.
CICMIN() returns the first CIC of the
range.
CICMAX() returns the last CIC of the
range.
getOperation() returns whether the
circuits have been added or modified (return
value are: CICS_ADDED or
CICS_MODIFIED).
reserved() returns the circuit status.
defaultGroup() returns the defaultGroup
corresponding to the circuit added or
modified.
NOTE: defaultGroup() is only available for
the ANSI flavor.
For detailed description of the accessor return types, consult the
IsupAdditionalInfo.h file located in the /opt/OC/include/ISUP
directory.
Chapter 12
485
Using the ISUP API
Receiving Notifications
For any IsupAdditionalInfo received, you must:
1. Get the AdditionalInfo type using getInfoType().
2. Cast the AdditionalInfo on the right class using castInfo(const
Info* P_addInfo).
3. Get information from the AdditionalInfo using the corresponding
Read Accessors.
486
Chapter 12
Using the ISUP API
Receiving Notifications
An example of implementation of the use of the
IsupMgr::oamReceive() function is available in the IsupServer
tutorials.
Example 12-7
oamReceive()
IsupAdditional::Info
*L_InfoRecvPtr=NULL; // additional information
ISUP::OamStatus
L_OamStatus; // status returned by receive cmd
HPAIN::Schedulable::Work
L_handler; // enum returned by handler
int
maxFd;
int
numFd;
fd_set
readMask;
fd_set
writeMask;
timeval
time;
timeval
* timeout;
timeval
delay0, delay1;
struct timezone
delayzone;
int
timediff=0;
int
L_TimeMax = TIME_MAX;
HPAIN::Uint32
L_nbIndication; // nb of messages to be read
char
L_str[40];
// scheduling part
memset(&readMask, 0, sizeof(fd_set));
memset(&writeMask, 0, sizeof(fd_set));
// start the timer to measure the delay of reception
gettimeofday( &delay0, &delayzone);
// as long as the primitive expected is not received
while (timediff <= L_TimeMax) {
// elapsed time
gettimeofday( &delay1, &delayzone);
timediff = CLK_diff ( &delay1, &delay0) / 1000000 ;
// if there is no more message to receive
Chapter 12
487
Using the ISUP API
Receiving Notifications
if (G_MoreMessageToRead == 0 ) {
time.tv_sec = 5;
time.tv_usec = 0;
timeout = &time;
maxFd = IsupMgr->selectMask(0,&readMask,&writeMask,0,timeout);
if ((numFd = select(maxFd,&readMask, 0, 0, timeout))== -1) {
// if select failed only warning and go on (AT 3/96)
cout << " Warning: select failed" << flush;
} // if
L_handler = IsupMgr->handler(numFd,&readMask,&writeMask,0);
if (L_handler>200) L_handler=200;
} // if G_MoreMessageToRead
// receive a message **********************
L_OamStatus = IsupMgr->oamReceive( L_InfoRecvPtr, L_nbIndication);
// number of messages to treat
G_MoreMessageToRead=L_nbIndication;
// check the result **********************
// if NO_MSG, we read again until time max
if (L_OamStatus.getStatus() != ISUP::OamStatus::NO_ERROR &&
L_OamStatus.getStatus() != ISUP::OamStatus::RELOAD_IN_PROGRESS) {
// an error occured and is unexpected error
cout << " Error received " << flush;
}
// print the message ******************
if (L_InfoRecvPtr) {
cout << "Notification RECEIVED = " << L_InfoRecvPtr << flush;
delete L_InfoRecvPtr;
} // if L_InfoRecvPtr
else {
488
Chapter 12
Using the ISUP API
Receiving Notifications
G_MoreMessageToRead=0;
}
} // while
oamStatus()
During a reload/dump procedure, if you want to know when these
procedures are completed, this method can be used.
Example 12-8
oamStatus()
ISUP::OamStatus
L_OamStatus; // status returned by receive cmd
HPAIN::Schedulable::Work
L_handler; // enum returned by handler
int
maxFd;
int
numFd;
fd_set
readMask;
fd_set
writeMask;
timeval
time;
timeval
* timeout;
timeval
delay0, delay1;
struct timezone
delayzone;
int
timediff=0;
int
L_TimeMax = TIME_MAX;
// scheduling part
memset(&readMask, 0, sizeof(fd_set));
memset(&writeMask, 0, sizeof(fd_set));
// start the timer to measure the delay of reception
gettimeofday( &delay0, &delayzone);
// as long as the primitive expected is not received
while (timediff <= L_TimeMax) {
// elapsed time
Chapter 12
489
Using the ISUP API
Receiving Notifications
gettimeofday( &delay1, &delayzone);
timediff = CLK_diff ( &delay1, &delay0) / 1000000 ;
// if there is no more message to receive
time.tv_sec = 5;
time.tv_usec = 0;
timeout = &time;
maxFd = IsupMgr->selectMask(0,&readMask,&writeMask,0,timeout);
if ((numFd = select(maxFd,&readMask, 0, 0, timeout))== -1) {
// if select failed only warning and go on (AT 3/96)
cout << " Warning: select failed" << flush;
} // if
L_OamStatus = IsupMgr->OamStatus();
// if NO_MSG, we read again until time max
if (L_OamStatus.getStatus() != ISUP::OamStatus::NO_ERROR &&
// an error occured and is unexpected error
cout << " OamStatus error received " << flush;
} // while
490
Chapter 12
Using the ISUP API
Return Status Values
Return Status Values
Error handling is provided via values known as Return Status values.
On execution of all methods, an associated Return Status value indicates
whether the method was successful or erroneous, and the reason for the
error, if any.
The following table indicates the common return status classes for
IsupMgr and IsupProbe methods, and their returned values.
The isOK() method can be used to check for successful completion.
Table 12-3
Probe Return Status Values
Status
Class
InitStatus
CnxStatus
Chapter 12
Value
Reason
NO_ERROR
No error has occurred during Isupmgr
initialization.
ALREADY_CREATED
IsupMgr already exists.
NO_MORE_MEMORY
Problem occurred during memory
allocation for the IsupMgr.
NO_ISUP_CONFIG
Access to the HP OpenCall SS7 ISUP
configuration file has been denied.
BAD_ISUP_CONFIG
Erroneous or missing configuration file
provided for IsupMgr initialization.
INTERNAL_ERROR
An internal HP OpenCall SS7 ISUP
error has occurred.
NO_ERROR
No error for connection.
CNX_CLOSED
SS7 stack connection closed.
API_BUSY
Switchover in progress.
INTERNAL_ERROR
Internal HP OpenCall SS7 ISUP IPC
error has occurred.
491
Using the ISUP API
Return Status Values
Table 12-3
Probe Return Status Values (Continued)
Status
Class
CreateStatus
DestroyStat
us
492
Value
Reason
NO_ERROR
Probe/connection created.
NO_MORE_MEMORY
Problem occurred during memory
allocation for the Probe object.
MAX_PROBE_NUMBER_
EXCEEDED
Maximum number of Probes has been
reached.
ALREADY_CREATED
A Probe already exists for this LPC.
LPC_NOT_FOUND
LPC not found in configuration file.
INVALID_CLASSNAME
Unknown SS7 stack classname.
INVALID_SET_NAME
An invalid name for the set of messages
has been associated with a specific LPC.
WRONG_PROBE_TYPE
Different Probe type declared in
HP OpenCall SS7 ISUP configuration
file.
INTERNAL_ERROR
Internal HP OpenCall SS7 ISUP IPC
error has occurred.
NO_ERROR
Probe/connection destroyed.
ALREADY_DESTROYED
Probe was previously destroyed.
Chapter 12
Using the ISUP API
Return Status Values
Table 12-3
Probe Return Status Values (Continued)
Status
Class
OpenStatus
CloseStatus
Value
Reason
NO_ERROR
Probe/connection open.
NO_CONFIG
Configuration file could not be accessed.
BAD_GLOBAL_CONFIG
SS7 stack name not found in parsed
configuration file. The classname should
be checked.
CONNECT_INIT
Connection attempt rejected.
API_BUSY
High Availability switchover in progress.
ALREADY_OPEN
Probe/connection is already open.
INTERNAL_ERROR
Internal HP OpenCall SS7 ISUP IPC
error has occurred.
BAD_CNX_TYPE
Connection type is wrong (should be
primary or secondary)
NO_ERROR
Probe/connection closed.
PROBE_NOT_OPEN
Probe object not connected to the SS7
stack.
ALREADY_CLOSED
Probe object already closed.
IPC_SEND_FULL
IPC socket to SS7 stack is congested.
CLOSE_FAILED
Unable to close the SS7 stack connection.
INTERNAL_ERROR
Internal HP OpenCall SS7 ISUP IPC
error has occurred.
For information on return values related to creating and exchanging
messages, refer to the IsupMgr(3) man page.
Chapter 12
493
Using the ISUP API
Using Dynamic Configuration
Using Dynamic Configuration
Dynamic configuration enables you to modify the running ISUP. The
changes are allowed (any other changes will be refused by SAM):
•
modify the reportOnReload flag
•
add/remove DPCs
•
add/modify/remove CICs
Once you have prepared the changes dynamically, you can dynamically
reload the new configuration into the ISUP library using the dynamic
reload procedure. During the reload procedure, the user application can
receive notifications containing the ISUP configuration changes.
reload()
Once the ISUP dynamic configuration changes are defined through SAM,
then you can perform a reload to the ISUP library. You can perform this
reload using IsupMgr::reload().
The reload procedure is a three step operation:
1. Read the new configuration generated by SAM (in the file
/var/opt/OC/isup/isup.app<applicationId>.changes ).
2. Make all the changes.
3. Dump the new configuration in a temporary file (
/var/opt/OC/isup/isup.app<applicationId>.conf.dump).
You can also reload using the ss7IsupReload script delivered (see the
DynamicConfiguration man page). Using this script is the
recommended procedure, except in CIC-based distribution mode. You can
only perform one reload/dump operation at a time.
NOTE
494
Do not use the IsupMgr::reload method in CIC-based distribution
mode.
Chapter 12
Using the ISUP API
Using Dynamic Configuration
NOTE
Chapter 12
If you are using ISUP dynamic configuration and the ISUP application is
protected by the PIC/AG, then you must set the ReloadSignal to
SIGUSR2 (the default is SIGUSR1) using SAM. Otherwise, the ISUP
application does not reload the new configuration (it never receives the
SIGUSR1 signal from the ss7IsupReload script).
495
Using the ISUP API
Using Dynamic Configuration
Example 12-9
reload()
ISUP::ConfigStatus L_CStatus = IsupMgr::reload();
if (!L_CStatus.isOk()) {
cout << "reload failed" << flush;
return (RELOAD_ERROR);
}
return (RELOAD_STARTED);
dump()
If you need to dump the current ISUP configuration used by the
application, this method can be used.
Example 12-10
Using reload feature
ISUP::ConfigStatus L_CStatus = IsupMgr::dump();
if (!L_CStatus.isOk()) {
cout << "dump failed" << flush;
return (DUMP_ERROR);
}
return (DUMP_STARTED);
496
Chapter 12
Using the ISUP API
ISUP Tutorial Programs
ISUP Tutorial Programs
Tutorials (that is, example programs) are provided with
HP OpenCall SS7 ISUP. The syntax of their names are:
{Client}(SM}{ANSI}
isup{
}{ }{
}
{Server}{BP}{ITU }
All the possible combinations exist, giving 8 in total: isupClientSMANSI,
isupClientSMITU, ..., isupServerBPITU
The tutorials show how to develop a simple call setup/release application
using the methods provided by the HP OpenCall SS7 ISUP.
The source code of these tutorials is in the /opt/OC/tutorials/ISUP
directory.
CAUTION
If you want to change a makefile or a tutorial supplied with
HP OpenCall SS7, you must first copy it to your own working directory.
You must not change the sources supplied with the HP OpenCall SS7
product in the directories in which they are delivered.
NOTE
These tutorials use the ITU-T 88 or TTC version of the
HP OpenCall SS7 ISUP API.
Using State-machine Access
The Caller and Called show how to develop an application by using the
state-machine mode of access (IsupSMProbe) and its associated methods.
Chapter 12
Caller
isupClientSMANSI or isupClientSMITU
Called
isupServerSMANSI or isupServerSMITU
497
Using the ISUP API
ISUP Tutorial Programs
Using Bypass Access
The Caller and Called show how to develop an application specifically
using the bypass access mode (IsupBPProbe) and its associated methods.
498
Caller
isupClientBPANSI or isupClientBPITU
Called
isupServerBPANSI or isupServerBPITU
Chapter 12
Using the ISUP API
ISUP Makefiles
ISUP Makefiles
The following makefiles are provided with HP OpenCall SS7 ISUP:
CAUTION
Chapter 12
•
/opt/OC/tutorials/ISUPMakefileANSI
•
/opt/OC/tutorials/ISUPMakefileITU
If you want to change a makefile or a tutorial supplied with
HP OpenCall SS7, you must first copy it to your own working directory.
You must not change the sources supplied with the HP OpenCall SS7
product in the directories in which they are delivered.
499
Using the ISUP API
ISUP Makefiles
500
Chapter 12
13
Exchanging ISUP Messages
This chapter describes how to create, manipulate and exchange standard
ANSI and ITU-T messages. It also describes the various primitives
provided for IsupSMProbe and IsupBPProbe objects.
Chapter 13
501
Exchanging ISUP Messages
Introduction
Introduction
The HP OpenCall SS7 ISUP API provides the application with
programming access to supported ISUP messages via C++ object classes.
It gives a single abstract view of the ISUP messages independent of the
message layout.
This chapter describes the selection, creation and manipulation of these
messages.
502
Chapter 13
Exchanging ISUP Messages
Exchanging Primitives
Exchanging Primitives
Dialogue between different layers is performed by primitives which are
abstract elementary functions used to exchange information. As
indicated in Figure 13-1, ISUP Primitives, an application such as Call
Control requests the services provided by ISUP via specific primitives.
The set of ISUP primitives is divided into four categories:
Figure 13-1
Chapter 13
•
Request
•
Indication
•
Response
•
Confirmation
ISUP Primitives
503
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
HP OpenCall SS7 ISUP Primitives
MTP Level 3 can be accessed either via the HP OpenCall SS7 ISUP
state-machines using IsupSMProbe objects or directly via IsupBPProbe
objects. Both classes of probe objects exchange primitives with the API to
request, and respond to, the services supported by the
HP OpenCall SS7 ISUP library.
Because IsupSMProbe objects interact with the HP OpenCall SS7 ISUP
library differently from IsupBPProbe objects, a distinct group of
primitives is associated with each probe class.
Acknowledgment Primitives
In addition to the standard ISUP primitives, HP OpenCall SS7 ISUP
provides acknowledgment primitives.
These primitives enable the application to be synchronized with the
HP OpenCall SS7 ISUP library. This mainly applies to the circuit
internal reset and release primitives such as START_RELEASE_IND. When
HP OpenCall SS7 ISUP realizes that a circuit must be reset, it informs
the application and then waits for an acknowledgment.
For example, the application may have to reset some hardware and
software on reception of RESET_IND. The application will reply with a
RESET_RESP when the hardware and software reset is completed. On
receipt of the acknowledgment, HP OpenCall SS7 ISUP sends the
corresponding message(s) to the network.
Scenarios involving these acknowledgment primitives are described in:
504
•
Chapter 15, Introduction to ISUP Procedures,
•
Chapter 16, “ISUP Call Control - Procedures Common to ANSI and
ITU-T,”
•
Chapter 17, “ISUP Call Control - Procedures Specific to ANSI,”
•
Chapter 18, “ISUP Call Control - Procedures Specific to ITU-T.”
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Attempt To Use Non-Supported Message
When a primitive associated with an ISUP message is used with a
standard that does not support the message, the HP OpenCall SS7 ISUP
behavior is as follows:
Chapter 13
•
an attempt to create the message is refused with the
ISUP::SendStatus::INVALID_MESSAGE error status,
•
an attempt to send the primitive is refused with the
ISUP::SendStatus::ILLEGAL_PRIMITIVE error status.
505
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
State Machine Mode
ISUP SM Mode
Table 13-1 lists the ISUP primitives for ANSI in State Machine Mode.
Primitives for ANSI
For each primitive, Table 13-1 also indicates whether or not a message or
an AdditionalInfo is attached (receiving) or must be attached (sending).
It also specifies the type of message and AdditionalInfo concerned (see
also Table 13-4).
Table 13-2 lists the equivalent information for ITU based flavors.
Table 13-1
ISUP Primitives for State Machine Mode - ANSI
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
ADDRESS_COMPLETE_REQ
ACM
None
ADDRESS_COMPLETE_IND
ACM
None
BACKWARD_CHECK_TONE_ACK
None
None
BLOCKING_REQ
BLO
None
BLOCKING_IND
BLO
None
BLOCKING_RESP
BLA
None
BLOCKING_CONF
BLA
None
CALL_PROGRESS_REQ
CPG
None
CALL_PROGRESS_IND
CPG
None
CIRCUIT_VALIDATION_REQ
None
None
CIRCUIT_VALIDATION_IND
CVT
None
CIRCUIT_VALIDATION_RESP
CVR
None
CIRCUIT_VALIDATION_CONF
CVR
None
506
Comments
This primitive is used
by the application to
signal that the
backward tone has
been checked
(Continuity-check
procedures).
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-1
ISUP Primitives for State Machine Mode - ANSI (Continued)
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
CIRCUIT_VALIDATION_TEST_IND
CVT
CIRCUIT_VALIDATION_TEST_RESP
CVR
CIRCUIT_VALIDATION_TEST_REQ
CVT
CIRCUIT_VALIDATION_TEST_IND
CVT
CIRCUIT_VALIDATION_TEST_RESP
CVR
CIRCUIT_VALIDATION_TEST_CONF
CVR
CONFUSION_IND
CFN
None
CONNECT_LOOP_IND
None
None
CONNECT_LOOP_IND_ACK
None
None
CONNECT_TRANSCEIVER_IND
None
None
CONNECT_TRANSCEIVER_IND_ACK
None
None
CONTINUITY_RECHECK_REQ
CCR
None
CONTINUITY_RECHECK_IND
None
None
CONTINUITY_RECHECK_CONF
None
None
CONTINUITY_REPORT_REQ
COT
None
CONTINUITY_REPORT_IND
None
None
DISABLE_ECHO_IND
None
None
DISABLE_ECHO_IND_ACK
None
None
Chapter 13
Comments
This primitive is used
to ask the application
to connect its tone loop
(Continuity-check
procedures).
This primitive is used
to ask the application
to connect its
transceiver
(Continuity-check
procedures).
This primitive is used
to ask the application
to disable its echo
suppressor
(Continuity-check
procedures).
507
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-1
ISUP Primitives for State Machine Mode - ANSI (Continued)
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
ENABLE_ECHO_IND
None
None
ENABLE_ECHO_IND_ACK
None
None
EXIT_IND
EXM
None
FACILITY_REQ
FAC
None
FACILITY_IND
FAC
None
FORWARD_TRANSFER_IND
FOT
None
GROUP_BLOCKING_REQ
CGB
None
GROUP_BLOCKING_IND
CGB
None
GROUP_BLOCKING_RESP
None
None
GROUP_BLOCKING_CONF
CGBA
None
GROUP_QUERY_REQ
CQM
None
GROUP_QUERY_CONF
CQR
None
GROUP_RESET_REQ
GRS
None
GROUP_RESET_IND
GRS
None
GROUP_RESET_RESP
GRA
None
GROUP_RESET_CONF
GRA
None
GROUP_STOP_REQ
None
None
GROUP_STOP_CONF
None
None
508
Comments
This primitive is used
to ask the application
to enable its echo
suppressor
(Continuity-check
procedures).
This primitive is used
by the application to
ask the ISUP library to
stop re-transmitting
REL/RSC/CGB/GRS
messages concerning a
circuit group to the
SS7 network.
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-1
ISUP Primitives for State Machine Mode - ANSI (Continued)
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
GROUP_UNBLOCKING_REQ
CGU
None
GROUP_UNBLOCKING_IND
CGU
None
Comments
None
GROUP_UNBLOCKING_RESP
GROUP_UNBLOCKING_CONF
CGUA
None
ISUP_USR_MSG_REQ
FAA, FAR,
None
FAJ, or
USERDEF
This primitive is used
for messages defined
using the customizing
facility.
ISUP_USR_MSG_IND
None
None
MAINTENANCE_SYSTEM_IND
None
Maintenance
System
This primitive is used
to inform the
maintenance system of
a particular event. For
more information, see
the AdditionalInfo
section.
PASS_ALONG_REQ
PAM
None
PASS_ALONG_IND
PAM
None
This primitive is used
to send/receive any
ISUP message that is
already encoded as
part of a PAM (Pass
Along Message).
RELEASE_REQ
REL
None
RELEASE_IND
REL
None
RELEASE_RESP
RLC
None
RELEASE_CONF
RLC
None
Chapter 13
509
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-1
ISUP Primitives for State Machine Mode - ANSI (Continued)
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
REMOVE_LOOP_IND
None
None
REMOVE_LOOP_IND_ACK
None
None
REMOVE_TRANSCEIVER_IND
None
None
REMOVE_TRANSCEIVER_IND_ACK
None
None
RESET_REQ
RSC
None
RESET_IND
RSC
Reset
RESET_RESP
RLC
Reset
RESET_CONF
RLC
None
RESUME_IND
RES
None
RESUME_REQ
RES
None
SETUP_FAILURE_IND
None
None
510
Comments
This primitive is used
to ask the application
to remove its tone loop
(Continuity-check
procedures).
This primitive is used
to ask the application
to remove its
transceiver
(Continuity-check
procedures).
Either an RLC message
or a Reset
(AdditionalInfo), but
not both.
This primitive is used
to inform the
application that the
current call setup has
failed. For more
information, see the
AdditionalInfo
section.
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-1
ISUP Primitives for State Machine Mode - ANSI (Continued)
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
SETUP_REQ
IAM
Setup
SETUP_IND
IAM
None
SETUP_IND_ACK
None
Setup
SETUP_RESP
ANM
None
SETUP_CONF
ANM
None
SOFT_RESET_REQ
None
None
SOLICITED_INFO_REQ
INR
None
SOLICITED_INFO_IND
INR
None
SOLICITED_INFO_RESP
INF
None
SOLICITED_INFO_CONF
INF
None
UNSOLICITED_INFO_REQ
INF
None
UNSOLICITED_INFO_IND
INF
None
START_CHECK_TONE_IND
None
None
START_CHECK_TONE_ACK
None
None
START_RELEASE_IND
None
StartRelease
START_RELEASE_IND_ACK
None
None
Chapter 13
Comments
This primitive is used
to ask the application
to start checking the
backward tone
(Continuity-check
procedures).
This primitive is used
to inform the
application that the
current call is being
released. For more
information, see the
AdditionalInfo
section.
511
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-1
ISUP Primitives for State Machine Mode - ANSI (Continued)
HP OpenCall SS7 ISUP
Primitive
START_RESET_IND
ISUP
Message
None
Additional
Info
StartReset
LocalReset
START_RESET_IND_ACK
None
None
STOP_CHECK_TONE_IND
None
None
STOP_CHECK_TONE_IND_ACK
None
None
STOP_REQ
None
None
STOP_CONF
None
None
SUSPEND_IND
SUS
Suspend-Resu
me
SUSPEND_REQ
SUS
Comments
This primitive is used
to inform the
application that the
associated circuit is
being reset. For more
information, see the
AdditionalInfo
section.
This primitive is used
to ask the application
to stop checking the
backward tone
(Continuity-check
procedures).
This primitive is used
by the application to
ask the ISUP library to
stop re-transmitting
REL/RSC messages
concerning a circuit to
the SS7 network.
Suspend-Resu
me
TONE_DISAPPEARS_ACK
512
None
None
This primitive is used
by the application to
signal the
disappearance of the
backward tone.
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-1
ISUP Primitives for State Machine Mode - ANSI (Continued)
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
UNBLOCKING_REQ
UBL
None
UNBLOCKING_RESP
UBL
None
UNBLOCKING_IND
UBA
None
UNBLOCKING_CONF
UBA
None
UNEQUIPPED_CIRCUIT_IND
UCIC
None
Chapter 13
Comments
513
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
ISUP SM Mode
Primitives for
ITU-T Flavors
Table 13-2 lists the ISUP primitives for ITU based flavors in State
Machine Mode.
For each primitive, Table 13-2 also indicates whether or not a message or
an AdditionalInfo is attached (receiving) or must be attached (sending).
It also specifies the type of message and AdditionalInfo concerned (see
also Table 13-4).
Table 13-1 lists the equivalent information for ANSI.
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
ADDRESS_COMPLETE_REQ
ACM
None
ADDRESS_COMPLETE_IND
ACM
None
ALERT_REQ
ALT
None
ALERT_IND
ALT
None
APP_TRANSPORT_REQ
APM
None
APP_TRANSPORT_IND
APM
None
BACKWARD_CHECK_TONE_ACK
None
None
BLOCKING_REQ
BLO
None
BLOCKING_IND
BLO
None
BLOCKING_RESP
BLA
None
BLOCKING_CONF
BLA
None
514
Comments
This is supported in
TTC3 only.
This is supported in
TTC3 only.
This is supported in
Spr98 only.
This is supported in
Spr98only.
This primitive is used
by the application to
signal that the
backward tone has
been checked
(Continuity-check
procedures).
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
CALL_PROGRESS_REQ
CPG
None
CALL_PROGRESS_IND
CPG
None
CHARGING_REQ
CHG
None
CHARGING_IND
CHG
None
CHARGING_UNIT_ACK
TXA
None
CHARGING_UNIT_CONF
TXA
None
CHARGING_UNIT_REQ
ITX
None
CHARGING_UNIT_IND
ITX
None
CIRCUIT_RESERVATION_IND
CRM
None
CIRCUIT_RESERVATION_RESP
CRA
None
CONFUSION_IND
CFN
None
CONNECT_LOOP_IND
None
None
CONNECT_LOOP_IND_ACK
None
None
CONNECT_TRANSCEIVER_IND
None
None
CONNECT_TRANSCEIVER_IND_ACK
None
None
Chapter 13
Comments
This is supported in
TTC3 only.
This is supported in
TTC3 only.
This is supported in
Spr98 only.
This is supported in
Spr98only.
This is supported in
Spr98 only.
This is supported in
Spr98only.
This primitive is used
to ask the application
to connect its tone loop
(Continuity-check
procedures).
This primitive is used
to ask the application
to connect its
transceiver
(Continuity-check
procedures).
515
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
CONTINUITY_RECHECK_REQ
CCR
None
CONTINUITY_RECHECK_IND
None
None
CONTINUITY_RECHECK_CONF
None
None
CONTINUITY_REPORT_REQ
COT
None
CONTINUITY_REPORT_IND
None
None
DISABLE_ECHO_IND
None
None
DISABLE_ECHO_IND_ACK
None
None
ENABLE_ECHO_IND
None
None
ENABLE_ECHO_IND_ACK
None
None
FACILITY_ACCEPT_REQ
FAA
None
FACILITY_ACCEPT_IND
FAA
None
FACILITY_REJECT_REQ
FRJ
None
FACILITY_REJECT_IND
FRJ
None
FACILITY_REQ
FAC
None
FACILITY_IND
FAC
None
FACILITY_REQUEST_REQ
FAR
None
FACILITY_REQUEST_IND
FAR
None
516
Comments
This is not supported
in TTC.
This primitive is used
to ask the application
to disable its echo
suppressor
(Continuity-check
procedures).
This primitive is used
to ask the application
to enable its echo
suppressor
(Continuity-check
procedures).
This is not supported
in TTC.
This is not supported
in TTC.
This is not supported
in ITU-88, and TTC.
This is not supported
in TTC.
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
FORWARD_TRANSFER_IND
FOT
None
GROUP_BLOCKING_REQ
CGB
None
GROUP_BLOCKING_IND
CGB
None
GROUP_BLOCKING_RESP
None
None
GROUP_BLOCKING_CONF
CGBA
None
GROUP_QUERY_REQ
CQM
None
GROUP_QUERY_CONF
CQR
None
GROUP_QUERY_IND
CQM
None
GROUP_QUERY_RESP
CQR
None
GROUP_RESET_REQ
GRS
None
GROUP_RESET_IND
GRS
None
GROUP_RESET_RESP
GRA
None
GROUP_RESET_CONF
GRA
None
GROUP_STOP_REQ
None
None
GROUP_STOP_CONF
None
None
GROUP_UNBLOCKING_REQ
CGU
None
GROUP_UNBLOCKING_IND
CGU
None
GROUP_UNBLOCKING_RESP
None
None
GROUP_UNBLOCKING_CONF
CGUA
None
Chapter 13
Comments
This primitive is used
by the application to
ask the ISUP library to
stop re-transmitting
REL/RSC/CGB/GRS
messages concerning a
circuit group to the
SS7 network.
517
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
HW_GROUP_BLOCKING_REQ
CGB
None
HW_GROUP_BLOCKING_IND
CGB
None
HW_GROUP_BLOCKING_RESP
None
None
HW_GROUP_BLOCKING_CONF
CGBA
None
HW_GROUP_UNBLOCKING_REQ
CGU
None
HW_GROUP_UNBLOCKING_IND
CGU
None
HW_GROUP_UNBLOCKING_RESP
None
None
HW_GROUP_UNBLOCKING_CONF
CGU
None
INFORMATION_IND
SAM
None
INFORMATION_REQ
SAM
None
ISUP_USR_MSG_REQ
USERDE
F
None
ISUP_USR_MSG_IND
None
None
Comments
This is not supported
in TTC.
This primitive is used
for messages defined
using the customizing
facility.
MAINTENANCE_SYSTEM_IND
None
Maintenance
System
This primitive is used
to inform the
maintenance system of
a particular event. For
more information, see
the AdditionalInfo
section.
NETWORK_RESOURCE_MGT_REQ
NRM
None
NETWORK_RESOURCE_MGT_IND
NRM
None
This primitive is used
to send/receive the
NRM message used in
echo control
procedures. This is
supported in ITU-T
93/97, SSUR, and
Spr98 only.
518
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
PASS_ALONG_REQ
PAM
None
PASS_ALONG_IND
PAM
None
PRE_REL_INFORMATION_REQ
PRI
None
PRE_REL_INFORMATION_IND
PRI
None
PROGRESS_REQ
PRG
None
PROGRESS_IND
PRG
None
RELEASE_REQ
REL
None
RELEASE_IND
REL
None
RELEASE_RESP
RLC
None
RELEASE_CONF
RLC
None
REMOVE_LOOP_IND
None
None
REMOVE_LOOP_IND_ACK
None
None
REMOVE_TRANSCEIVER_IND
None
None
REMOVE_TRANSCEIVER_IND_ACK
None
None
Chapter 13
Comments
This primitive is used
to send/receive any
ISUP message that is
already encoded as
part of a PAM (Pass
Along Message). This
is not supported in
TTC.
This is supported in
Spr98 only.
This is supported in
Spr98only.
This is supported in
TTC3 only.
This is supported in
TTC3 only.
This primitive is used
to ask the application
to remove its tone loop
(Continuity-check
procedures).
This primitive is used
to ask the application
to remove its
transceiver
(Continuity-check
procedures).
519
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
RESET_REQ
RSC
None
RESET_IND
RSC
Reset
RESET_RESP
RLC
Reset
RESET_CONF
RLC
None
RESUME_IND
RES
None
RESUME_REQ
RES
None
SETUP_FAILURE_IND
None
None
SETUP_REQ
IAM
Setup
SETUP_IND
IAM
None
SETUP_IND_ACK
None
Setup
SETUP_RESP
CON or ANM
None
SETUP_CONF
CON or ANM
None
SOFTRESET_REQ
None
None
520
Comments
Either an RLC message
or a Reset
(AdditionalInfo), but
not both.
This primitive is used
to inform the
application that the
current call setup has
failed. For more
information, see the
AdditionalInfo
section.
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
SOLICITED_INFO_REQ
INR
None
SOLICITED_INFO_IND
INR
None
SOLICITED_INFO_RESP
INF
None
SOLICITED_INFO_CONF
INF
None
UNSOLICITED_INFO_REQ
INF
None
UNSOLICITED_INFO_IND
INF
None
START_CHECK_TONE_IND
None
None
START_CHECK_TONE_IND_ACK
None
None
START_RELEASE_IND
None
StartRelease
START_RELEASE_IND_ACK
None
None
START_RESET_IND
None
StartReset
LocalReset
START_RESET_IND_ACK
Chapter 13
None
None
Comments
This is not supported
in TTC.
This primitive is used
to ask the application
to start checking the
backward tone
(Continuity-check
procedures).
This primitive is used
to inform the
application that the
current call is being
released. For more
information, see the
AdditionalInfo
section.
This primitive is used
to inform the
application that the
associated circuit is
being reset. For more
information, see the
AdditionalInfo
section.
521
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
ISUP
Message
Additional
Info
STOP_CHECK_TONE_IND
None
None
STOP_CHECK_TONE_IND_ACK
None
None
STOP_REQ
None
None
STOP_CONF
None
None
SUSPEND_IND
SUS
SUSPEND_REQ
SUS
Suspend-Resu
me
Comments
This primitive is used
to ask the application
to stop checking the
backward tone
(Continuity-check
procedures).
This primitive is used
by the application to
ask the ISUP library to
stop re-transmitting
REL/RSC messages
about a circuit to the
SS7 network.
Suspend-Resu
me
TONE_DISAPPEARS_ACK
None
None
UNBLOCKING_REQ
UBL
None
UNBLOCKING_RESP
UBL
None
UNBLOCKING_IND
UBA
None
UNBLOCKING_CONF
UBA
None
UNEQUIPPED_CIRCUIT_IND
UCIC
None
522
This primitive is used
by the application to
signal the
disappearance of the
backward tone.
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-2
ISUP Primitives State Machine Mode - ITU Based Flavors
HP OpenCall SS7 ISUP
Primitive
UNKNOWN_MESSAGE_REQ
UNKNOWN_MESSAGE_IND
ISUP
Message
Message
with
unknown
ISUP
type.
Additional
Info
None
Comments
This primitive is used
to send/receive an
ISUP message of
unknown message
type, with all
parameters being
encoded as OPTIONAL
and a
MessageCompatibilit
yInformation
parameter indicating
“PassOn”. This is
supported in only
ITU-T 93/97, SSUR,
and Spr98.
Bypass Mode
ISUP BP Primitives Table 13-3 lists the ISUP primitives for Bypass Mode.
Table 13-3
ISUP Protocol Bypass Mode
Primitive
Event
INVALID_ISUP_MSG_IND
Indicate that a message from a known DPC could not be
decoded, and hence was destroyed.
ISUP_MSG_REQ
Send/receive any previously encoded ISUP message,
except for PAMs (Pass Along Messages).
ISUP_MSG_IND
PASS_ALONG_REQ
PASS_ALONG_IND
(not available for TTC)
Send/receive any previously encoded ISUP message as
part of a pass-along message.
UNKNOWN_MSG_REQ
Send/receive any previously encoded ISUP message,
except for PAMs (Pass Along Messages).
UNKNOWN_MSG_IND
Chapter 13
523
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-3
ISUP Protocol Bypass Mode (Continued)
Primitive
Event
UNKNOWN_OPC_MSG_IND
Indicate that a remote Point Code was not configured.
Additional Information
Additional information is required for some of the
HP OpenCall SS7 ISUP primitives. Therefore information elements are
attached to these primitives. These information elements aid the
application in determining the reason why a protocol event occurred,
such as the information included in the SETUP_FAILURE_IND
primitive.
The details of how these information elements are handled vary
depending on the primitive in use, however, the general pattern for
handling them is the same:
Step 1. Read the type of the additionalInfo using the getInfoType() method.
Step 2. Cast into the corresponding class. For a list of primitives that require,
Additional Information, see Table 13-4, “Primitives Requiring Additional
Information.”.
Step 3. Read the information using the appropriate accessors.
For details about the additional information values, see Appendix A,
“ISUP Library Values.”
See also Table 12-2, “ISUP Receive Notifications,” on page 484.
Table 13-4
Primitives
Primitives Requiring Additional Information
Additional
Information
Field
Used for:
SETUP_REQ
Setup
acmControlFlag
determining whether or not ACM control
is applied
SETUP_IND_ACK
Setup
N/A
determining whether or not ACM control
is applied
524
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-4
Primitives Requiring Additional Information (Continued)
Primitives
SETUP_FAILURE_IND
Additional
Information
Field
SetupFailure
setupFailureCause
Used for:
determining the reason for failure.
Possible values are:
UNSPECIFIED
DUAL_SEIZURE
FLOW_CONTROL
BLOCKING
COT_FAILURE
RELEASE
T27_TIMEOUT
CPC_BUSY
CRCR_RESET
SUSPEND_IND
SUSPEND_REQ
SuspendResume
origin
defining the origin of a reset.
Possible values are:
FROM_NETWORK
FROM_USER
START_RELEASE_IND
StartRelease
releaseCause
determining the reason for the release.
Possible values are:
UNEXPECTED_RLC
T7_TIMEOUT
T33_TIMEOUT
T_CRA_TIMEOUT
BLOCKING
RELEASE_REQUEST
T8_TIMEOUT
T1_TIMEOUT
DCO_SUCCESS
STOP_REQ
T9_TIMEOUT
CONTINUITY_SUCCESS
BACKWARD_CHECK_TONE_ACK
T6_TIMEOUT
T2_TIMEOUT
Chapter 13
525
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-4
Primitives
START_RESET_IND
Primitives Requiring Additional Information (Continued)
Additional
Information
StartReset
LocalReset
Field
resetCause
Used for:
determining the reason for the reset.
Possible values for StartReset are:
NO_REASON
UNEXPECTED_MESSAGE
T5_TIMEOUT
BLOCKING_WITH_RELEASE
COT_CC_NOT_REQUIRED
COT_FAILURE
TCCRr_TIMEOUT
T27_TIMEOUT
T34_TIMEOUT
DCO_LPA_FAIL
UNEQUIPPED_CIRCUIT
TIMER_SHORTAGE
Possible values for LocalReset are:
MTP_UNAVAILABLE
DPC_UNAVAILABLE
BLS_STOPPED
CRS_STOPPED
CQS_STOPPED
CRCR_STOPPED
GBUS_STOPPED
CGRS_STOPPED
MGBS_STOPPED
HGBS_STOPPED
CRCS_STOPPED
DCO_STOPPED
GROUP_QUERY_IND
CQM
GROUP_QUERY_RESP
CQM
RESET_IND
Reset
RESET_RESP
resetEvent
determining whether it is part of a Group
Reset operation.
Possible values are:
GROUP_RESET
526
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
Table 13-4
Primitives Requiring Additional Information (Continued)
Primitives
Additional
Information
MAINTENANCE_SYSTEM
_IND
Maintenance
System
Field
maintenance
SystemEvent
Used for:
defining the reason for the reset.
Possible values are:
T5_TIMEOUT
T17_TIMEOUT
RSC_AFTER_T17
RLC_AFTER_T17
CRS_STOP
MN_BLOCKING
HW_BLOCKING
MN_UNBLOCKING
HW_UNBLOCKING
MN_GROUP_BLOCKING
HW_GROUP_BLOCKING
MN_GROUP_UNBLOCKING
HW_GROUP_UNBLOCKING
T12_NOT_RUNNING
T13_TIMEOUT
T14_NOT_RUNNING
T15_TIMEOUT
T22_NOT_RUNNING
T19_TIMEOUT
T21_TIMEOUT
T23_TIMEOUT
T18_NOT_RUNNING
PRIORITY_TO_GROUP_RESET
T20_NOT_RUNNING
WRONG_STATUS_BITS
UCIC_STOP
COT_RECEIVED
DCO_FAIL
DCO_SUCCESS
STOP_REQ
REL_RECEIVED
T24_TIMEOUT
BACKWARD_CHECK_TONE_ACK
T28_TIMEOUT
T34_TIMEOUT
UNEQUIPPED_CIRCUIT
TIMER_SHORTAGE
RECV_ON_UNEQUIPPED_CIRCUIT
BLA_WHEN_IDLE
UBA_WHEN_LOCALLY_BLOCKED
NON_ISDN_ACCESS_INDICATION
CIRCUIT_VALIDATION_TEST_FAILED
Chapter 13
527
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Primitives
MTP Related Primitives
HP OpenCall SS7 ISUP forwards MTP related primitives to the
application indicating the current status of MTP Level 3. These
primitives inform the application whether it is possible to transfer
information via MTP. These primitives are forwarded to all probe objects.
Table 13-5
MTP Related Primitives
Primitive
528
Event
MTP_PAUSE_IND
Pause indication for a Destination Point Code
MTP_RESUME_IND
Resume indication for a Destination Point Code
MTP_DPC_CONGESTED_IND
Destination Point Code is congested
MTP_DPC_UNCONGESTED_IND
Destination Point Code is not congested
MTP_AVAILABLE_IND
Local MTP is available for message transfer
MTP_UNAVAILABLE_IND
Local MTP is unavailable for message transfer
MTP_CONGESTED_IND
Local MTP is congested
MTP_UNCONGESTED_IND
End of local MTP congestion
MTP_RESTARTING_IND
Local MTP is restarting
MTP_UPU_UNAVAILABLE_IND
Remote user part is unavailable
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Supported Messages
HP OpenCall SS7 ISUP Supported Messages
ISUP messages defined by ANSI and ITU-T standards are, by default,
supported by the HP OpenCall SS7 ISUP API. They are represented as a
set of C++ object classes derived from a base class, IsupMsg.
Message Classes
Each message has a defined object class, known as a message class.
These message classes provide specific interfaces to build and access the
parameters found in each message, while remaining abstract from their
HP OpenCall SS7 ISUP internal structure. Figure 13-2, Message Class
Relationships, illustrates their relationship to each other, and to the
IsupMgr class.
Chapter 13
529
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Supported Messages
Figure 13-2
Message Class Relationships
See also Figure 12-4, “Object Model.”
Message Class for Customized Messages
Messages that deviate from the standard messages, such as
operator-specific messages containing non-standard structure or
parameters, are manipulated by a special message class, IsupUserMsg.
Metadata
The internal structure of an ISUP message is contained in the
HP OpenCall SS7 ISUP metadata. The metadata governs the behavior of
message classes when manipulated by the application, and also directs
the HP OpenCall SS7 ISUP encoder/decoder mechanism.
530
Chapter 13
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Supported Messages
Standard Metadata
As the standard metadata is provided per software version (ANSI or
ITU-T), it contains the internal structure of the messages defined by the
corresponding recommendations.
Hence, the standard metadata provided for an ANSI version of the
HP OpenCall SS7 ISUP library does not contain the internal structure of
any ITU-T specific messages.
Figure 13-3
Chapter 13
Message Class/Metadata Relationship
531
Exchanging ISUP Messages
HP OpenCall SS7 ISUP Supported Messages
Encoder/Decoder
HP OpenCall SS7 ISUP message encoding and decoding is performed by
the generic table-driven HP OpenCall SS7 ISUP Encoder/Decoder, and is
coordinated by the metadata. The encoder/decoder ignores any optional
parameters which have not been included in the metadata.
Tracing
IsupMgr defines two methods to explicitly trace the encoding and
decoding of exchanged messages.
Table 13-6
Type
Tracing Methods
Method
Arguments
void
setTraceOn
();
void
setTraceOff
();
You can also use the HP OpenCall SS7 configuration files to trace the
application process.
532
Chapter 13
Exchanging ISUP Messages
Loading a Set of Messages
Loading a Set of Messages
When the IsupMgr object is initialized with IsupMgr::init(), the
HP OpenCall SS7 ISUP configuration file is automatically loaded. This
file contains all the LPC, DPC and circuit information required for the
HP OpenCall SS7 ISUP library.
Each LPC and DPC pair has an associated set of messages. The
MessageSetName field in the configuration file identifies the messages
that will be exchanged between the particular SS7 stack and DPC.
Identifying a Set of Messages
When a set of messages is loaded by IsupMgr::init(), it is given a
specific identifier that must be used in the subsequent manipulation of
messages belonging to the set of messages.
IsupMgr provides the application with a method to find out which set of
messages is associated with a particular DPC,
IsupMgr::whichMsgSet(). This method uses the SS7 stack classname
and the DPC to return the message set identifier, msgSetId.
For details about the syntax, parameters, and return values of
IsupMgr::whichMsgSet(), see the IsupMgr(3) man page.
Example 13-1
ISUP::MsgSetID
ISUP::PointCode
ISUP::InfoStatus
ISUP::InfoStatus
IsupMgr*
Identifying a Set of Messages.
msgSetId;
dpc;
selectStatus_A;
identifyMsgSetStatus;
isupMgr;
// initialize DPC
// select set of messages using classname and DPC
selectStatus_A= isupMgr->whichMsgSet (“SS7_Stack”, dpc, msgSetId);
if (! selectStatus.isOk()){
// error recovery
}
// msgSetId is subsequently used to identify the messages exchanged with
// the specified DPC
Chapter 13
533
Exchanging ISUP Messages
Creating Messages
Creating Messages
To manipulate and send a message, the application must first create an
instance of the message. This is done using the constructor associated
with the message.
Because a message belongs to a specific set of messages, identified by
msgSetId, its internal structure is dependent on the metadata defined
for msgSetId. Thus, to create an initial instance of the required message,
the application must specify the appropriate msgSetId in the message
constructor.
When a constructor is called by the application and the specified
msgSetId is supported by the HP OpenCall SS7 ISUP library, the
resulting message contains only the mandatory message parameters.
Their values are initialized to zero.
Example 13-2
Creating a Message
ISUP::MsgSetID
ISUP::InfoStatus
IsupMgr*
msgSetId;
identifyMsgSetStatus;
isupMgr;
// initialize DPC
// Get message set identifier
identifyMsgSetStatus = isupMgr->whichMsgSet (“ISUP”, msgSetId);
if (! identifyMsgSetStatus.isOk()){
// error recovery
}
// create an instance of IAM
IsupIam* iamMsg = new IsupIam(msgSetId);
534
Chapter 13
Exchanging ISUP Messages
ISUP Messages Supported
ISUP Messages Supported
In general, HP OpenCall SS7 ISUP supports all message types defined
by the standards that it supports.
All message types are associated with a C++ message class.
State machines implement sufficient functionality for call set-up and
release, including group operations
Complete List of Messages and Message Sets
Supported
For a complete list of the message sets available with the
HP OpenCall SS7 ISUP library, please contact your HP representative.
Partial Support
Some messages are not sent by the ISUP application but are sent
indirectly by the ISUP library. Some messages are not supported at all.
Some messages are just supported on reception mode.
Table 13-7, “Messages Partially Supported by ISUP,” lists ISUP
messages that are currently partially supported by the ISUP library.
Table 13-7
Messages Partially Supported by ISUP
How Implemented
Messages sent indirectly by the ISUP
library.
ANSI Messages
ITU Messages
CFN, COT, LPA, UCIC
CFN, COT, LPA, UCIC
Messages not supported.
CMC, CMR, CMRJ, CRG,
DRS, EXM, OLM, USR,
LOP, UPT, UPA
Automatic response sent by the ISUP
library.
CQR
CQR
Only reception implemented.
CRM, FOT
FOT, SGM
Chapter 13
535
Exchanging ISUP Messages
Accessors
Accessors
The parameter values of a message class instance, such as an instance of
IsupIam, are accessible via special message methods called accessors.
There are two groups of accessor: generic and specific.
Specific Accessors
All the parameter values contained in HP OpenCall SS7 ISUP
Supported Messages are accessible through parameter specific accessors.
Each parameter has two accessors, a read and a write accessor.
Optional parameters have two additional accessors:
•
the presence accessor, to indicate the presence of a specified optional
parameter,
•
the absence accessor, to force an optional parameter to be treated as
absent (whether it is in fact present or not).
When you write a value into an optional parameter, its presence
indicator is automatically set. Before applying a read accessor to an
optional parameter, you must examine the presence indicator to
ascertain if the parameter is present in the message.
The absence accessor forces an optional parameter to be treated as
absent (whether it is in fact present or not). This lets you reuse part of a
message without creating a new one and copying the parameters
required by the application.
Accessor Behavior
The behavior of an accessor depends on the message or parameter that
you want to access and on the metadata.
536
Chapter 13
Exchanging ISUP Messages
Accessors
Table 13-8
Specific Accessors
Type
Accessor
ISUP::ParmValue
accessorName
(read accessor)*
Arguments
(ISUP::MsgStatus& status) const;
accessorName denotes the
parameter name as listed in
“Supported Parameters List”
on page 550.
IsupXXX**
accessorName
(write accessor)*
(ISUP::ParmValue& val,
ISUP::MsgStatus& status);
void
<parameterShortName>SetA
bsent
(absence accessor)
(ISUP::MsgStatus& P_status);
HPAIN::Boolean
accessorNameIsPresent
(presence accessor)*
(ISUP::MsgStatus& status) const;
* accessorName denotes the parameter name as listed in “Supported Parameters List” on
page 550.
**IsupXXX denotes a specific message class as listed in “Supported Parameters List” on
page 550.
Accessing Data Part of an IsupMsg Object
Two methods are available to access the transfer representation (data
part) of an IsupMsg object:
•
IsupMsg::getPDU()
•
IsupMsg::setPDU()
These two methods are in the public area of the IsupMsg class.
IsupMsg::getPDU()
This method has the following signature:
IsupMsg::getPDU(void *PDU,HPAIN::Unit32
*P_length,ISUP::MsgStatus& P_status)
Chapter 13
537
Exchanging ISUP Messages
Accessors
It returns the data read in the transfer representation of the message in
the *PDU buffer, and updates the P_length parameter accordingly.
The status returned is one of the following:
ISUP::MsgStatus::NO_ERROR is returned in case of correct behavior.
ISUP::MsgStatus::READ_ERROR is returned if:
•
the transfer representation does not exist.
•
an error occurred when reading the transfer representation.
ISUP::MsgStatus::INVALID_LENGTH, if the given length parameter is
not large enough to allow copy of the transfer representation.
IsupMsg::setPDU()
This method has the following signature:
IsupMsg::setPDU(const void *P_PDU, HPAIN::Uint32 P_length,
ISUP::MsgStatus& P_status)
It sets the transfer representation of the IsupMsg object with the data
found in the buffer pointed to by the P_PDU parameter. The write
operation is done starting from the message type to the last parameter of
the ISUP message.
Errors that are returned when using this method are the following:
ISUP::MsgStatus::NO_MORE_MEMORY, if the network representation
cannot be created.
ISUP::MsgStatus::WRITE_ERROR, if the write operation cannot be
performed:
•
*P_length is null,
•
*P_PDU is null,
•
*the transfer representation already exists.
ISUP::MsgStatus::INVALID_TAG, if the type of the IsupMsg object used
is different from the message type read in the first byte of the PDU.
538
Chapter 13
Exchanging ISUP Messages
Assigning Values
Assigning Values
When a message is created via its message constructor, its mandatory
parameters are initialized with zeros. Naturally, you must assign values
to these parameters and if necessary, extend the message by including
some of its optional parameters.
HP OpenCall SS7 ISUP provides a base class—ISUP::ParmValue— for
encapsulating parameter values. This object class provides methods for
assigning values of differing lengths (32, 16 and 8 bits).
Table 13-9
Methods for Assigning Values
Type
Method
Arguments
ParmValue&
assign
(const char* s, HPAIN::Uint32 l);
ParmValue&
assign
(const void* s, HPAIN::Uint32 l);
ParmValue&
assign
(HPAIN::Uint32 i);
ParmValue&
assign
(HPAIN::Uint16 i);
ParmValue&
assign
(HPAIN::Byte b);
Example 13-3
Assigning Parameter Values
IsupIam* prepareIamMsg()
{
ISUP::ParmValue* value = new ISUP::ParmValue ();
ISUP::MsgStatus status;
// evaluate msgSetId
IsupIam* iamMsg = new IsupIam(msgSetId);
if (!iamMsg->isObjectValid(status)) {
delete value;
delete iamMsg;
return NULL;
}
iamMsg->natureOfCnxIndicators(value->assign (“\x66”, 1), status);
if (!status.isOk()) {
// error recovery
}
iamMsg->forwardCallIndicators(value->assign (“\x33\x58”, 2), status);
Chapter 13
539
Exchanging ISUP Messages
Assigning Values
if (!status.isOk()){
// error recovery
}
iamMsg->callingPartysCategory(value->assign (“\x53”, 1), status);
if (!status.isOk()){
// error recovery
}
iamMsg->userServiceInformation(value->assign (“\x53\x33”, 2), status);
if (!status.isOk()){
// error recovery
}
iamMsg->calledPartyNumber(value->assign (“\x53\x33\x76\x68”, 4), status);
if (!status.isOk()){
// error recovery
}
delete value;
return iamMsg;
}
540
Chapter 13
Exchanging ISUP Messages
Sending Messages
Sending Messages
After creating a message and setting its parameters, any of the active
probe objects can request the API to send the message to the network.
Figure 13-4, Probe/Message Relationship, illustrates the overall
relationship of messages, probe objects and IsupMgr object.
Chapter 13
541
Exchanging ISUP Messages
Sending Messages
Figure 13-4
Probe/Message Relationship
See Figure 12-4, “Object Model.”
542
Chapter 13
Exchanging ISUP Messages
Sending Messages
Both IsupSMProbe and IsupBPProbe have defined send() methods, and
as described in “Exchanging Primitives” on page 503, there is an
association between the primitives and messages sent via this method.
If the call to IsupSMProbe::send() or IsupBPProbe::send() has been
successful, the API automatically deletes the message. Otherwise, it
remains present for further manipulation.
For details about the syntax, parameters, and return values of
IsupSMProbe::send() and IsupBPProbe::send(), see the
IsupSMProbe(3) and IsupBPProbe(3) man pages.
Queued Messages
When the application sends a message, it is placed by the API into an
outbound queue. The HP OpenCall SS7 ISUP library then attempts to
send these queued messages to the network. If this action succeeds, the
queue is emptied. Otherwise, the queue still contains the messages that
were not sent.
This is part of the flow control mechanism performed by
HP OpenCall SS7 ISUP, and is described in “IPC Flow Control” on
page 559.
Example 13-4
Sending a Message via an IsupSMProbe Object
ISUP::SendStatus
IsupSMProbe *
ISUP::Address
sendStatus;
isupSMProbe;
address;
// initialize address
if (!sendStatus.isOk()){
cout << “Warning: send failed- error = “ sendStatus <<“\n” << flush;
// error recovery
}
Chapter 13
543
Exchanging ISUP Messages
Receiving Messages
Receiving Messages
Both probe classes provide a method to receive primitives and their
associated messages, receive(). This method must be used in
association with the activity object mechanism as described in “Using the
Activity Object” on page 477.
For details about the syntax, parameters, and return values of
IsupSMProbe::receive() and IsupBPProbe::receive(), see the
IsupSMProbe(3) and IsupBPProbe(3) man pages.
Casting Messages
Both IsupSMProbe::receive() and IsupSMProbe::receive() return
an instance of the base message class, IsupMsg. To exactly identify which
type of message has been received, you must use the
IsupMsg::getMsgType() method.
From the message type indicator returned by IsupMsg::getMsgType(),
you must select the appropriate cast method. Each message class has its
own safe casting method, which creates an instance of the message class
from the contents of the received message.
Unlike the send() methods, you must delete the received message when
the receive()call has been successful and you have finished processing
its contents using the accessors.
Table 13-10
Type
Casting Methods
Method
Arguments
static IsupXXX*
castMsg
(const IsupMsg* msg) const;
IsupMsg::Type
getMsgType
();
*IsupXXX denotes a specific message class listed in “Supported Parameters List”
on page 550.
544
Chapter 13
Exchanging ISUP Messages
Receiving Messages
Example 13-5
Receiving a Message from an IsupSMProbe Object
ISUP::RecvStatus
ISUP::MsgStatus
IsupSMProbe *
IsupSMProbe::PrimitiveType
ISUP::Address
IsupMsg
IsupMsg::Type
ISUPAdditional:: Info *
ISUP::Parmvalue*
int
recvStatus;
status;
isupSMProbe;
primitive;
address;
*isupMsg, *acmMsg;
msgType;
info;
value;
nbIndication;
do {
// receive message via isupSMProbe object
recvStatus = isupSMProbe->receive(primitive,address, isupMsg, info, nbIndication);
if (!recvStatus.isOk()){
cout << “receive failed- error=” << recvStatus << “\n” << flush;
// error recovery
}
// check if error message received
if (isupMsg==NULL)
cout <<“Warning: empty message received” << “\n” << flush;
// check message type
msgType= isup->getMsgType();
// process message contents
if (msgType == IsupMsg::ACM){IsupAcm* acmMsg = IsupAcm::castMsg(msgType);
// process contents
// delete contents
}
} while (nbIndication >0);
Queued Indications
It is the responsibility of the application to repeatedly call receive() to
retrieve all the received indications (nbIndication) as soon as possible.
While there are indications waiting to be received by the application, the
MTP3 will not perform a MTPL3recv() on behalf of the
HP OpenCall SS7 ISUP library.
See “IPC Flow Control” on page 559.
Chapter 13
545
Exchanging ISUP Messages
Automated Call Release
Automated Call Release
HP OpenCall SS7 ISUP provides a means of automatically releasing a
call on request from the application. This helps the programmer by
reducing the number of exchanges with the ISUP API.
The decision to release a circuit is the responsibility of the application.
HP OpenCall SS7 ISUP handles all new message exchange on this
circuit by implementing a state machine to process all the incoming
messages related to the circuit being released.
Figure 13-5
546
Successful Automated Call Release
Chapter 13
Exchanging ISUP Messages
Automated Call Release
Figure 13-6
Unsuccessful Automated Call Release, Followed by Reset, and
Local Reset (STOP)
When started, the state machine initiates a release by sending a REL
message. If no RLC is arrived before T5 expires, HP OpenCall SS7 ISUP
continues by initiating a RESET procedure (sends a RSC). If no RLC is
received before T17 times out, HP OpenCall SS7 ISUP just locally resets
the circuit (same as a STOP REQ procedure) and returns to idle. The
circuit is now available for future call attempts.
The application can release a circuit using the releaseCircuit()
method (part of the IsupSMProbe class). For details about
releaseCircuit(), see the IsupSMProbe(3) man page.
The application can get the number of circuits configured, using the
getNumberofCircuit()method (in the IsupMgr Object). For details
about getNumberofCircuit(), see the IsupMgr(3) man page.
Chapter 13
547
Exchanging ISUP Messages
Automated Call Release
Configuring for Automated Call Release
To use automatic call release with HP OpenCall SS7 ISUP, one cause
value must be configured per DPC in the isup.conf file.
The following example shows the line in the DPC section of the
ISUP.conf file with the release cause value (in hexadecimal) configured
for automatic release.
[Isup_Dpc_NAME]
LPC=2
DPC=1
MessageSetName=IA92sep
ReleaseCauseValue=0xCAA9
circuit=0, reserved=NO
circuit=1, reserved=INCOMING
circuit=2, reserved=OUTGOING
...
548
Chapter 13
Exchanging ISUP Messages
Return Status Values
Return Status Values
Like all HP OpenCall SS7 ISUP methods, status values are returned
after a method has been completed for a message. It returns the success
or failure of a method, and in the latter case, the reason for the failure.
For a description of these status values, see the IsupMgr(3) man page.
The IsupMgr object manages all the status information regarding
messages and their manipulation. This includes information relating to
the metadata.
Chapter 13
549
Exchanging ISUP Messages
Supported Parameters List
Supported Parameters List
This section covers the supported parameters for the ANSI and ITU-T
based versions of the product.
In general:
•
All parameters listed in supplied recommendations are supported by
HP OpenCall SS7 ISUP.
•
Attempts to access parameters of one standard, with metadata
defined by the other standard fail (with an IsupMsg::INVALID_PARM
error) unless the parameters are also supported version of ISUP in
use.
•
Attempts to create a message for a standard, using a metadata of
another standard not supporting this message, fail with an
IsupMsg::INVALID_MESSAGE error.
•
No customer-specific parameters are supported in the provided
message classes. Such parameters are managed by applications
using the installation mechanism, that is part of the Message
Customization Package.
•
Where a message parameter is specified as Mandatory by one
standard and Optional in another, the parameter appears as
Optional in the C++ message class. When used with the standard
metadata where the parameter is mandatory, the isPresent()
method associated with the parameter fails with an
IsupMsg::NOT_OPTIONAL error.
This only applies for the IAM UserServiceInformation parameter,
which is a mandatory variable for ANSI-95 and an optional variable
for ITUT-88.
•
550
Where a message parameter is specified as Mandatory in one
standard and is not present in another, the parameter appears as
Mandatory in the C++ message class. When used with the standard
metadata where the parameter is not specified, the read and write
parameter value accessor methods fail with an
IsupMsg::INVALID_PARM error.
Chapter 13
14
Managing
HP OpenCall SS7 ISUP
This chapter provides management guidelines for use in developing an
ISUP application.
Chapter 14
551
Managing HP OpenCall SS7 ISUP
Overview
Overview
The HP OpenCall SS7 ISUP API provides the application with objects
and methods to connect to and exchange primitives and messages with
the SS7 stack.
Incorporate the HP OpenCall SS7 ISUP management guidelines
described in this chapter into the application.
If you are developing a High Availability application, you must use the
circuit update mechanism provided by HP OpenCall SS7 ISUP.
552
Chapter 14
Managing HP OpenCall SS7 ISUP
Managing Race Conditions
Managing Race Conditions
When numerous network events rapidly occur, a race condition may
occur if the application does not call receive() as soon as the internal
call state changes.
In such circumstances, the HP OpenCall SS7 ISUP API returns the
status value WRONG_STATE if the application calls send(). The
application must ignore this unexpected return status value and receive
the waiting indications from the API.
Following this, the application will then re-synchronize with the
HP OpenCall SS7 ISUP state-machines.
Chapter 14
553
Managing HP OpenCall SS7 ISUP
Managing Memory Space
Managing Memory Space
Control of the memory used by HP OpenCall SS7 ISUP is dependent on
the application’s memory management. Thus, it is your responsibility to
ensure that there is not a shortage of memory space for the
HP OpenCall SS7 ISUP API objects.
When every object is instantiated, it must be checked. A Return Status
value of NO_MORE_MEMORY is returned if the allocation of memory for a
specific object has failed. You are responsible for coping with this
situation, and if there is no space available, you must delete all the
created objects and close all the probe objects, thus allowing the SS7
stack to release the MTP3 connection.
Conversely, if you redefine the global new(), HP OpenCall SS7 ISUP will
use it and any mechanism using this new().
554
Chapter 14
Managing HP OpenCall SS7 ISUP
Managing Object Memory
Managing Object Memory
Since the application manipulates objects via the
HP OpenCall SS7 ISUP API, you must be aware of certain rules for
managing these objects whether they are ISUP messages, Return Status
values or parameter values.
Messages
When you have created messages and assigned values to the particular
parameters, you must explicitly call the send() method. If the call
succeeds, then the API frees the memory used by the sent message. If the
call to send() fails, the message is returned to the application for further
investigation.
On receiving a message from the SS7 stack, the API creates a message
object for the application via the receive() method. This message object
must be deleted by the application when it has finished manipulating the
message. The message object can also be returned to the API via a
subsequent call to send().
Parameter Values
As illustrated in “Accessors” on page 536, you are recommended to create
parameter value objects using the ISUP::ParmValue object. These
objects are used by the appropriate write accessor to set the parameter.
To get a parameter value using a read accessor, the API creates the
parameter value objects.
In both cases, it is your responsibility to delete all parameter value
objects.
Additional Information
Some primitives sent from the HP OpenCall SS7 ISUP library to the
application contain additional information objects (see “Additional
Information” on page 524). These objects are automatically created by
the API.
Chapter 14
555
Managing HP OpenCall SS7 ISUP
Managing Object Memory
If the application sends any primitives containing additional
information, the API automatically deletes these objects when the call to
send() is successful.
In the case send() fails, the additional information objects are returned
to the application for further investigation. These objects must be deleted
by the application or returned to the API in a subsequent send().
Return Status Values
Check the Return Status value for each method, as described in
“Exception Handling” on page 448. The creation and deletion of these
return status objects is your responsibility: the API only assigns values
to these objects.
556
Chapter 14
Managing HP OpenCall SS7 ISUP
Handling IPC Buffers
Handling IPC Buffers
IPC buffers are used by HP OpenCall SS7 ISUP to communicate with
the SS7 stack.
All the messages that you send or receive are stored in the internal
buffers. You can decide whether messages are buffered before being sent
or whether they are automatically flushed to the network each time you
call IsupSMProbe::send() or IsupBPProbe::send().
By default, HP OpenCall SS7 ISUP is set to non-buffering mode, thus
flushing the internal buffers each time send() is called.
Figure 14-1
Internal Buffers
NOTE
When an IPC send buffer is full, it is automatically flushed.
Chapter 14
557
Managing HP OpenCall SS7 ISUP
Handling IPC Buffers
Modifying IPC Buffers
Usually, IPC Configuration is not required because
HP OpenCall SS7 ISUP provides the application with default buffers for
communication between the application and the SS7 stack.
You may have to modify the attributes of these default buffers in order to
optimize performance, thus reducing the number of system calls. The
following IsupProbe methods available for modifying buffer
characteristics:
•
setIPCSendSize
•
setIPCRecvSize
•
setLowTransitTime
•
setHighTransitTime
•
setBufferingMode
•
setNonBufferingMode
•
flush
•
flushConditional
For more details, see the IsupProbe(3) man page.
558
Chapter 14
Managing HP OpenCall SS7 ISUP
IPC Flow Control
IPC Flow Control
The HP OpenCall SS7 ISUP library provides both inbound and outbound
flow control via back-pressure. Inbound flow control is necessary when
the application cannot read all the pending message indications found in
HP OpenCall SS7 ISUP’s inbound queue. On the outbound path, flow
control becomes necessary when the application requests are blocked at
the MTP3 interface.
Figure 14-2
Chapter 14
Back-pressure and Paths
559
Managing HP OpenCall SS7 ISUP
IPC Flow Control
Inbound Path
The application receives single primitives from the
HP OpenCall SS7 ISUP API, even if multiple primitives have been
generated after the occurrence of a protocol event. A protocol event could
be a primitive received from either the application or the network, or
simply a timeout.
Primitives waiting to be received by the application are maintained by
HP OpenCall SS7 ISUP in an inbound queue.
Waiting Indications
With each IsupSMProbe::receive()and IsupBPProbe::receive(), the
number of indications waiting to be received is also passed, see
“Receiving Messages” on page 544. It is your responsibility to repeatedly
call receive() until all the waiting indications have been received.
Network Back-pressure
While there are still indications waiting to be received by the application,
MTP3 will not perform a MTPL3recv() on behalf of
HP OpenCall SS7 ISUP.
If the application does not receive all the pending primitives as soon as
possible, the back pressure HP OpenCall SS7 ISUP forces on the
network will cause the SS7 stack to delete all new messages that it
cannot send to HP OpenCall SS7 ISUP within a certain period of time.
Outbound Path
When a protocol event occurs, HP OpenCall SS7 ISUP state-machines
may generate one or more ISUP messages destined for the network. The
generated messages are placed in an outbound queue by the processing
state-machines.
Once the state-machines have completed their processing,
HP OpenCall SS7 ISUP attempts to send all the messages in the queue
to the network.
Remaining Messages
If HP OpenCall SS7 ISUP is successful in sending all the messages, the
queue is empty. Otherwise, it contains the messages that it could not
send.
560
Chapter 14
Managing HP OpenCall SS7 ISUP
IPC Flow Control
Application Back-pressure
The number of remaining messages in the queue is used by
HP OpenCall SS7 ISUP to accept or reject the service primitives that the
application issues.
When the application issues a send(), HP OpenCall SS7 ISUP
determines whether the queue is empty or not. If it is not empty, then the
send() fails with the Return Status value IPC_SEND_FULL.
However terminating primitives can be sent from the application to
HP OpenCall SS7 ISUP library when this IPC congested state occurs.
These primitives are:
•
START_RELEASE_IND_ACK
•
RELEASE_RESP
•
START_RESET_IND_ACK
•
RESET_RESP
•
STOP_REQ
When the congestion disappears, HP OpenCall SS7 ISUP immediately
calls sendPossible(), indicating to the application via the activity
object mechanism that it can restart sending messages.
Chapter 14
561
Managing HP OpenCall SS7 ISUP
Managing Circuit States
Managing Circuit States
For a High-Availability configuration, an application developer can
decide to use a switchover mechanism on the application-level. Currently
HP OpenCall SS7 ISUP provides you with methods to update and
restore dynamic circuit state information for circuits attached to an
IsupSMProbe object. Applications can also store circuit states in a
database.
These methods, coupled with an appropriate state synchronization
protocol between the applications, ensure that a standby application
starts up its operations with an up-to-date representation of the active
and idle circuits within the HP OpenCall SS7 ISUP library when
application switchover occurs.
Provided Methods
Two methods provided by IsupSMProbe let the active application
retrieve and set the state of the circuits managed by the standby
HP OpenCall SS7 ISUP. They are IsupSMProbe::setCircuitState
()and IsupSMProbe::getCircuitState(). For details about the syntax,
parameters, and return values of these two methods, see the
IsupSMProbe(3)man page.
However, the application is only allowed to manage the circuit state
information when the IsupSMProbe objects are closed or inactive.
NOTE
562
The getCircuitState() method returns the same state as CQR only if a
call is complete. If the IAM, ACM, ANM sequence has been completed
successfully, then getCircuitState() returns BUSY. Otherwise,
getCircuitState()returns IDLE.
Chapter 14
Managing HP OpenCall SS7 ISUP
Managing Circuit States
How HP OpenCall SS7 ISUP Tracks Circuit State
Values
The HP OpenCall SS7 ISUP API provides applications with the
capability to manage the state of circuits attached to a probe. This
capability is intended to highly-available Call Control applications, and
is not provided in an OA&M context.
Call Control Applications use ISUP for call set-up and release.
Applications maintain active circuits during failover. Circuits can be
supported by an external switch matrix and their state is
maintained/retrieved by the application during application failover.
Applications manage the states of circuits within the
HP OpenCall SS7 ISUP subsystem attached to the standby application.
This prevents all HP OpenCall SS7 ISUP circuit states being set to IDLE
when an application fails over and ensures that these circuits will be
maintained. Applications manage the states of circuits in a real-time
manner to limit the application fail-over time.
Applications can retrieve the state of circuits maintained by
HP OpenCall SS7 ISUP at any time. Applications synchronize the
update of circuit states within the standby application and the ISUP API
from the current states of the active application and the ISUP API. An
application can not set the HP OpenCall SS7 ISUP circuit states while
HP OpenCall SS7 ISUP is active.
The differences between the ANSI and the ITU-T circuit state definition
list below come from the Hardware Oriented Blocking function which is
not supported in ANSI (HW:Hardware, MN:Maintenance).
For a list of the circuit state values visible and manageable by
applications, see the IsupIntro(3) man page.
Chapter 14
563
Managing HP OpenCall SS7 ISUP
Developing a Circuit Update Mechanism
Developing a Circuit Update Mechanism
NOTE
The active/standby model presented below is only one possible HA model.
Other models (using database accesses or audit mechanisms to recover
circuit states) could also be used.
The circuit methods let an application running over an active
HP OpenCall SS7 stack update an application running over a standby
stack, prior to granting permission to proceed with a switchover. Using
this mechanism prevents a circuit from being found active by an
application running over a standby stack, if it is in the process of being
deactivated by the application running over the active stack.
To make use of this mechanism, follow these guidelines when developing
the application:
•
All new states, or changes in circuit states, must be propagated by
the HP OpenCall SS7 ISUP library of the application running over
the standby stack.
•
All changes in circuit states must be synchronized with the
HP OpenCall SS7 ISUP library of the application running over the
standby stack.
•
If the application fails, a switchover to the HP OpenCall SS7 ISUP
library of the application running over the standby stack should be
performed.
•
The failed application instance must update its circuit states.
Propagating States
When a request to set up a call has been successfully received or sent by
the application running over the active stack, the application should
propagate the state for that particular circuit to the application running
over the standby stack.
564
Chapter 14
Managing HP OpenCall SS7 ISUP
Developing a Circuit Update Mechanism
Figure 14-3
Propagation
Synchronizing States
Any further modifications or resetting of the state for the particular
circuit should then be synchronized in the HP OpenCall SS7 ISUP
library of the application running over the standby stack, ensuring that
the inactive library always contains the correct circuit state information.
Chapter 14
565
Managing HP OpenCall SS7 ISUP
Developing a Circuit Update Mechanism
Figure 14-4
Synchronization
Activating the Standby Application
If a stack fails, or must be deactivated, application failover may be
necessary. After the library has been successfully activated, you must
activate the necessary probe objects. Then, the application can continue
to successfully operate.
566
Chapter 14
Managing HP OpenCall SS7 ISUP
Developing a Circuit Update Mechanism
Figure 14-5
Activation
Recovering States
Meanwhile, the failed instance of the application can initiate its recovery
or updating mechanism, including the updating of all the circuit states
as saved in the active (previously standby) HP OpenCall SS7 ISUP
library.
Chapter 14
567
Managing HP OpenCall SS7 ISUP
Developing a Circuit Update Mechanism
Figure 14-6
568
Recovery
Chapter 14
15
Introduction to ISUP
Procedures
This chapter presents information about ISUP procedures, including
FSMs, interaction with the MTP layer and segmentation mechanisms.
Chapter 15
569
Introduction to ISUP Procedures
Supported Finite State Machines
Supported Finite State Machines
The table below identifies which of the HP OpenCall SS7 ISUP FSMs
are supported, whatever the selected flavor. It also shows the associated
implementation particularities or limitations, when applicable.
Table 15-1
FSM Support
Acronym
Implemente
d
Particularities/Limitations
Signaling Procedure Control
MSDC
Yes
MSDC
Yes
CPCI
Yes
CPCO
Yes
SSCI
Yes
SSCO
Yes
SCCP interactions not
implemented
Circuit reservation is supported in
CPCI only (incoming CRM) for
ANSI flavor. Charging is not
implemented. Alerting, Proceed,
InBandInfo and Progress
primitives are combined in a single
Address_Complete or
Call_Progress primitive. AMC
Control not supported.
ACM Control not supported.
ITU-T 93, 97 and ETSI V2 only.
ITU-T 93, 97 and ETSI V2 only.
Circuit Supervision Control
570
BLR
Yes
BLR
Yes
CCI
Yes
CCO
Yes
Chapter 15
Introduction to ISUP Procedures
Supported Finite State Machines
Table 15-1
FSM Support (Continued)
Acronym
NOTE
Chapter 15
Implemente
d
Particularities/Limitations
CGRR
Yes
CGRS
Yes
CQR
Yes
CQS
Yes
ITU-T based version only
CRI
Yes
Not present in TTC
CRO
Yes
Not present in TTC
CRR
Yes
CRS
Yes
CVTR
Yes
ANSI only
CVTS
Yes
ANSI only
DCO
Yes
ANSI only
GNR
Yes
GBNR
Yes
GBUR
Yes
GBUS
Yes
See the Note below.
HGA
No
ANSI only
SCGA
No
ANSI only
UCIC
Yes
Not present in TTC
In ANSI, if an unexpected CGBA or CGUA is received in any state, the
corresponding circuit state is set to IDLE. This is so even if the previous
state was “Wait for CGUA” or Wait for CGBA”. It is recommended that
the application responds to only one of the two CGB/CGUs received.
571
Introduction to ISUP Procedures
Supported Finite State Machines
This is due to the specifications described on sheet 3 of the state machine
GBUS of the ANSI ISUP library (ANSI T1.113-1995). The problem
occurs when a CGBA message is received in the "Wait for CGUA" state,
and the CICs are locally unblocked. Instead of going to "Wait for CGUA"
as a result of the "Bits set?" decision, the state machine goes to Idle,
which is not the correct transition.
572
Chapter 15
Introduction to ISUP Procedures
Interaction Scenarios
Interaction Scenarios
Interaction scenarios are representative of the external behavior of
HP OpenCall SS7 ISUP as perceived by its environment.
Inbound and Outbound Circuits
Some of the following scenarios refer to an inbound circuit and an
outbound circuit. This reflects the fact that the main purpose of ISUP is
to manage end-to-end connections over one or several circuits. When
contributing to the provision of an end-to-end connection, a Call Control
application which does not reside on a local exchange typically must
manage 2 circuits for the same call. This is shown below.
Figure 15-1
ISUP Managing Inbound and Outbound Circuits
As shown above, Transit Exchange “A” manages two circuits for the
provision of an end-to-end connection between the Calling Party and the
Called Party. These are the inbound and outbound circuits. In some
cases, the interactions of the application with HP OpenCall SS7 ISUP
regarding the outbound circuit include the communication of the results
of some operations performed on the inbound circuit. This is especially
applicable for the Continuity Check procedure.
Chapter 15
573
Introduction to ISUP Procedures
MTP3 Interaction Handling
MTP3 Interaction Handling
Certain primitives are related to the Local Point Code (LPC) and
Destination Point Code (DPC) status at the MTP3 Level.
When an inhibiting primitive is received, the application cannot send a
message. The call will be locally refused with the appropriate return
status value until the associated uninhibiting primitive is received.
Local MPT-3 Status Indications
The following indications received from MTP3 are processed by
HP OpenCall SS7 ISUP:
•
MTP_available
•
MTP_unavailable
•
MTP_congested
•
MTP_uncongested
•
MTP_restarting
After processing, all received indications are delivered to the application
as MTP3 primitives. See “MTP Related Primitives” on page 528 for
information about these.
LPC States
HP OpenCall SS7 ISUP maintains an internal representation of the SS7
stacks it connects to by the means of LPC objects. An LPC object can be
in one of the following states:
NOTE
574
•
Initial
•
Probe_created
•
Probe_opened_and_active
With the primary/secondary functionality, probe_opened_and_active
means that the connection is primary (opened_as_primary, or
opened_as_secondary, then enabled).
Chapter 15
Introduction to ISUP Procedures
MTP3 Interaction Handling
Within the Probe_opened_and_active state, the following sub-states
are managed:
•
MTP-3_not_opened (initial state when the probe is created)
•
MTP-3_unavailable
•
MTP-3_available
•
MTP-3_congested
State Transitions
Substate changes occur as MPT-3 indications are received from the
network:
•
The MTP_available indication brings the LPC to the available
state.
•
The MTP_restarting and MTP_unavailable indications bring the
LPC to the unavailable substate.
•
The MTP_congested indication brings the LPC from the available
state to the congested state.
•
The MTP_uncongested indication brings the LPC from the
congested state to the available state.
The following rules apply to primitive invocations and function calls
performed by the application via the HP OpenCall SS7 ISUP API:
Chapter 15
•
Creation of a second probe on a given LPC is refused.
•
Opening of an already opened probe is refused.
•
setCircuitState() operations are allowed in the probe created
state and refused in the other states. getCircuitState() operations
can be performed throughout the life of a probe.
•
Primitives can only be received and sent after a probe has been
opened.
•
For both state-machine and bypass probes, primitives from the
application are refused if MTP3 is not available. Either the
notOpenLPC or the unavailableLPC status code is returned.
For state-machine probes (ANSI version only), the MTP_UNAVAILABLE
indication from the HP OpenCall SS7 stack initiates an internal
reset of all configured circuits attached to the probe. This is indicated
to the application by a START_RESET_IND primitive
575
Introduction to ISUP Procedures
MTP3 Interaction Handling
(IsupAdditional::LocalReset = MTP_UNAVAILABLE) on each
impacted circuit. Note that the START_RESET_IND primitive with the
MTP_UNAVAILABLE indication is received only in the ANSI version (it
does not apply to the ITU-T version).
•
For state-machine probes, primitives from the application are
generally refused if MTP3 is congested. An LPC_CONGESTED status
code is returned. However, there are some exceptions to the previous
rule. The following primitives are accepted by
HP OpenCall SS7 ISUP with respect to the congested state of MTP3
(they may be rejected later in the processing based on some other
grounds):
— Primitives that terminate calls:
— START_RELEASE_IND_ACK
— RELEASE_REQ
— RELEASE_RESP
— Primitives that reset circuits
— START_RELEASE_IND_ACK
— RELEASE_REQ
— RESET_RESP
— Primitives that reset circuit groups:
— GROUP_RESET_REQ
— GROUP_RESET_RESP
— Primitives that block/unblock circuits:
— BLOCKING_REQ
— BLOCKING_RESP
— UNBLOCKING_REQ
— UNBLOCKING_RESP
— Primitives that block/unblock circuit groups:
— GROUP_BLOCKING_REQ
— GROUP_BLOCKING_RESP
576
Chapter 15
Introduction to ISUP Procedures
MTP3 Interaction Handling
— GROUP_UNBLOCKING_REQ
— GROUP_UNBLOCKING_RESP
— Primitives that stop REL/RSC retransmission on circuits:
— STOP_REQ
— Primitives that stop REL/RSC retransmission on circuit groups:
— GROUP_STOP_REQ
•
For bypass probes, all primitives from the application are refused if
MTP3 is congested. An LPC_CONGESTED status code is returned.
The following rules apply to the reception of MTP Transfer Indications
(e.g. ISUP messages) from the network with respect to the MTP3 state:
Chapter 15
•
Transfer indications received in the MTP_3 congested state are
processed as in the MTP_3 available state.
•
Transfer indications received in the MTP_3 unavailable state are
ignored.
•
Transfer indications received in the MTP_3 not opened state are
ignored.
577
Introduction to ISUP Procedures
Remote DPC Status Indications
Remote DPC Status Indications
This section describes how HP OpenCall SS7 ISUP processes the
following indications received from MTP3 about a specific DPC:
•
MTP_pause
•
MTP_resume
•
DPC_congested
•
DPC_uncongested
•
UPU_unavailable
After processing, all received indications are delivered to the application
as MTP3 DPC-related primitives.
DPC States
HP OpenCall SS7 ISUP maintains an internal representation of the
configured DPCs. A DPC object can be in one of the following states:
•
DPC_available (the initial state when the DPC object is created)
•
DPC_congested
•
DPC_paused (in this state there is no available route to the specified
DPC)
State Transitions
Indications received about a DPC which are not in the
HP OpenCall SS7 ISUP configuration are ignored.
DPC state changes occur as indications related to configured DPCs are
received from the network:
578
•
the MTP_pause indication brings the DPC into the paused state.
•
MTP_resume indication brings the DPC from the paused state into
the available state.
•
DPC_congested indication brings the DPC from the available state
to the congested state.
Chapter 15
Introduction to ISUP Procedures
Remote DPC Status Indications
•
DPC_uncongested indication brings the DPC from the congested to
the available state.
•
The UPU_unavailable indication is passed to the application
without interaction with the DPC state. It is the responsibility of the
application to handle situations where the ISUP User Part is not
accessible on a given DPC. The application could handle this by
periodically initiating an outbound test call.
•
For state-machine probes, primitives from the application that target
a given DPC are generally refused if the DPC is congested. A
DPC_CONGESTED status code is returned. However, there are some
exceptions to the previous rule. The following primitives are accepted
by HP OpenCall SS7 ISUP with respect to the congested state of a
DPC (they may be rejected later in the processing based on some
other grounds):
— Primitives that terminate calls:
— START_RELEASE_IND_ACK
— RELEASE_REQ
— RELEASE_RESP
— Primitives that reset circuits
— START_RELEASE_IND_ACK
— RESET_REQ
— RESET_RESP
— Primitives that reset circuit groups:
— GROUP_RESET_REQ
— GROUP_RESET_RESP
— Primitives that block/unblock circuits:
— BLOCKING_REQ
— BLOCKING_RESP
— UNBLOCKING_REQ
— UNBLOCKING_RESP
Chapter 15
579
Introduction to ISUP Procedures
Remote DPC Status Indications
— Primitives that block/unblock circuit groups:
— GROUP_BLOCKING_REQ
— GROUP_BLOCKING_RESP
— GROUP_UNBLOCKING_REQ
— GROUP_UNBLOCKING_RESP
— Primitives that stop REL/RSC retransmission on circuits:
— STOP_REQ
— Primitives that stop REL/RSC retransmission on circuit groups:
— GROUP_STOP_REQ
•
580
For bypass probes, all primitives from the application and targeted at
a given DPC are refused if the DPC is congested. A DPC_CONGESTED
status code is returned.
Chapter 15
Introduction to ISUP Procedures
Generic Primitive Processing (State-machine Probe)
Generic Primitive Processing (State-machine
Probe)
This section describes the generic processing performed by
HP OpenCall SS7 ISUP when receiving a primitive from the application
on an SM probe.
HP OpenCall SS7 ISUP does the following:
1. Checks the probe status and return if the probe is not created and
opened.
2. Checks the IPC flow control. If active, returns with an
IPC_SEND_FULL status.
3. Checks the LPC status (refer to “LPC States” on page 574).
4. Identifies the target DPC object and returns with an DPC_NOT_FOUND
status if there is a failure.
5. Checks the DPC status (refer to “State Transitions” on page 575).
6. Identifies the target CIC object and returns with a
CIRCUIT_NOT_FOUND status if failure.
7. Returns with an UNEQUIPPED_CIRCUIT status if the circuit is
unequipped.
Chapter 15
581
Introduction to ISUP Procedures
Generic Primitive Processing (State-machine Probe)
8. Validates that the message attached to the primitive is present (if
applicable) and of the right type (e.g. SETUP_REQ must be associated
with an IAM message), and returns with an
INCONSISTENT_ARGUMENTS status if failure.
9. Validates that the attached message is a valid message and returns
with an INVALID_MESSAGE status if there is a failure. This test will
fail if the application creates an instance of a message class (say
FAR) which is not supported by the compiled ISUP ANSI 95 message
set (e.g. the definition of the FAR message is not included in the
message set metadata). It ships the message instance to
HP OpenCall SS7 ISUP without testing its validity via the
isValid() method.
10. Checks (absence, presence, type) the additional information
parameter of the primitive against the primitive type and returns
with an INCONSISTENT_ARGUMENTS status if there is a failure.
11. Checks that the message attached to the primitive can be encoded,
and returns with an ENCODING_ERROR status if there is a failure.
12. Checks that the encoded message size is valid (e.g. less than 272
bytes, or less than 544 bytes for versions of the product that support
segmentation), and returns with an ENCODING_ERROR status if there
is a failure.
13. Identifies and activates the target state machine for the primitive.
582
Chapter 15
Introduction to ISUP Procedures
Generic Primitive Processing (Bypass Probe)
Generic Primitive Processing (Bypass Probe)
This section describes the generic processing performed by
HP OpenCall SS7 ISUP when receiving a primitive from the application
on a By-pass probe.
HP OpenCall SS7 ISUP performs the following steps:
1. Checks the probe status and return if the probe is not created and
opened.
2. Checks the IPC flow control. If active, returns with an
IPC_SEND_FULL status.
3. Checks the LPC status (refer to “LPC States” on page 574).
4. Identifies the target DPC object and returns with a DPC_NOT_FOUND
status if there is a failure.
5. Checks the DPC status (refer to “DPC States” on page 578).
6. Checks that the primitive is either ISUP_MSG_REQ or
PASS_ALONG_REQ, and returns with an INCONSISTENT_ARGUMENTS
status if there is a failure.
7. Validates that the attached message is a valid message and returns
with an INVALID_MESSAGE status if there is a failure. This test will
fail if the application creates an instance of a message class (say FAR
for ANSI 95) which is not supported by the compiled ISUP message
set (e.g. the definition of the FAR message is not included in the
message set metadata). It transmits the message instance to
HP OpenCall SS7 ISUP without testing its validity (via the
isValid() method).
8. Checks that the message attached to the primitive can be encoded,
returns with an ENCODING_ERROR status if there is a failure.
9. Checks that the encoded message size is valid (e.g. less than 272
bytes, or less than 544 bytes for flavors supporting segmentation),
and returns with a MSG_TOO_LONG status if failure.
10. Sends the encoded message to the network. If sending fails because
of IPC outbound flow control:
•
Chapter 15
keeps the message in the internal sending queue
583
Introduction to ISUP Procedures
Generic Primitive Processing (Bypass Probe)
584
•
reports the failure to application
•
marks the probe active for rescheduling
Chapter 15
Introduction to ISUP Procedures
Generic ISUP Message Handling (State-machine Probe)
Generic ISUP Message Handling
(State-machine Probe)
This section describes the generic processing performed by
HP OpenCall SS7 ISUP when receiving an ISUP message from the
network on an SM probe.
HP OpenCall SS7 ISUP performs the following steps:
1. Ignores the message if the LPC is not opened (race condition when
opening/closing a probe).
2. Identifies the following originating point code (DPC) of the message:
•
Ignore the message if the DPC object is not found.
•
Ignore the message if DPC paused.
3. Ignores the message if it is empty or less than 3 bytes long (cannot
access CIC or Message Type).
NOTE
Routing is based on the OPC of the incoming message. From the
stack’s point of view, this OPC corresponds to a DPC.
4. Sends back a UCIC message if:
•
The CIC value is greater than 2**14-1 that is 16,383 (maximum
CIC value in ANSI) or greater than 2**12-1, that is 4,095
(maximum CIC value for ITU-T based flavors).
•
No circuit object is associated with the received CIC value.
•
A circuit object is found but is configured as unequipped.
5. Sends back a CFN message if the message is not supported (e.g. not
included in the message set metadata) or cannot be decoded
Chapter 15
585
Introduction to ISUP Procedures
Generic ISUP Message Handling (Bypass Probe)
Generic ISUP Message Handling (Bypass
Probe)
This section describes the generic processing performed by
HP OpenCall SS7 ISUP when receiving an ISUP message from the
network on a bypass probe.
HP OpenCall SS7 ISUP performs the following steps:
1. Ignores the message if the LPC is not opened (race condition when
opening/closing a probe).
2. Identifies the following originating point code (DPC) of the message:
•
ignores the message and generate an UNKNOWN_OPC_MSG_IND to
the application if the DPC object is not found
•
ignores the message if the DPC paused
3. Ignores the message and generates an INVALID_ISUP_MSG_IND to
the application if:
586
•
the message is empty or less than 3 bytes long (cannot access CIC
or Message Type)
•
the message is not supported (e.g. not included in the message
set metadata or cannot be decoded)
Chapter 15
Introduction to ISUP Procedures
Generic ISUP Message Handling (Bypass Probe)
The UNKNOWN_OPC_MSG_IND and INVALID_ISUP_MSG_IND primitives are
purely informative. Their objective is to inform the application about the
existence of a configuration or interoperability problem. It is then the
responsibility of the application to warn the Operator about the
situation. To support the Operator in his/her troubleshooting activities,
error messages are logged by HP OpenCall SS7 ISUP using TTL.
Chapter 15
587
Introduction to ISUP Procedures
Generic ISUP Circuit Group Message Handling
Generic ISUP Circuit Group Message
Handling
The circuit group messages that are supported in ISUP are:
•
GRS/GRA
•
CGB/CGBA
•
CGU/CGUA
•
CQM/CQR
They all contain a rangeAndStatus parameter which determines which
circuits belong to the group. Thus, in addition to the generic processing
described above, the rangeAndStatus parameter in an incoming
message is interpreted as described in the following sections.
588
Chapter 15
Introduction to ISUP Procedures
Generic ISUP Circuit Group Message Handling
ANSI Based HP OpenCall SS7 ISUP
For ANSI based HP OpenCall SS7 ISUP:
Table 15-2
ISUP
Message
•
if range is 0, status is absent in both inbound and outbound
messages.
•
if range is not 0, its maximum value is 23 (national). 31
(international) is not supported.
rangeAndStatus Parameter
range = 0
range !=0
GRS
group=predetermined
no status subfield
range<24
group=[CIC,CIC+range]
no status subfield
GRA
no status subfield
status bit = 1 for locally blocked circuits
CGB
group=predetermined
no status subfield
range<24
group=[CIC,CIC+range] for which status bit = 1
CGBA
no status subfield
status bit = 1 for circuits which have been
blocked
CGU
group=predetermined
no status subfield
range<24
group=[CIC,CIC+range] for which status bit = 1
CGUA
no status subfield
status bit = 1 for circuits which have been
remotely unblocked
CQM
group=single circuit
no status subfield
range<24
group=[CIC,CIC+range]
no status subfield
CQR
no status subfield
no status subfield
Chapter 15
589
Introduction to ISUP Procedures
Generic ISUP Circuit Group Message Handling
ITU-T Based HP OpenCall SS7 ISUP
In addition to the generic processing described above, the
rangeAndStatus parameter in an incoming message is interpreted as
follows:
Table 15-3
ISUP
Message
•
range = 0 is a reserved value.
•
if range is not 0, its maximum value is 23 (national). 31
(international) is not supported.
rangeAndStatus Parameter
range = 0
range !=0
GRS
-Reserved-
range<32
group=[CIC,CIC+range]
no status subfield
GRA
-Reserved-
status bit = 1 for locally blocked circuits fro
maintenance reasons
CGB
-Reserved-
range<255, but number of affected circuits is less
than or equal to 32
group=[CIC,CIC+range] for which status bit = 1
CGBA
-Reserved-
status bit = 1 for circuits which have been blocked
CGU
-Reserved-
range<255, but number of affected circuits is less
than or equal to 32
group=[CIC,CIC+range] for which status bit = 1
CGUA
-Reserved-
status bit = 1 for circuits which have been remotely
unblocked
CQM
group=single circuit
no status subfield
range<32
group=[CIC,CIC+range]
no status subfield
CQR
no status subfield
no status subfield
590
Chapter 15
Introduction to ISUP Procedures
CFN and UCIC Message Handling
CFN and UCIC Message Handling
CFN Sending
A CFN message is sent by HP OpenCall SS7 ISUP in the following cases:
•
unknown message
•
message cannot be decoded
CFN Receipt
On receipt of a CFN message from the network, a CONFUSION_IND
primitive is issued to the application.
UCIC Sending
A UCIC message is sent back in the following cases:
•
the circuit associated with the received message is not configured
•
the circuit is configured as Unequipped
UCIC Receipt
On receipt of a UCIC message from the network, a
MAINTENANCE_SYSTEM_IND and an UNEQUIPPED_CIRCUIT_IND primitive
are issued to the application, and the state-machine affected by the
UCIC message is reset. If a CPC message is received, a
START_RESET_IND indicating Unequipped Circuit is sent.
Chapter 15
591
Introduction to ISUP Procedures
User Defined ISUP Message Exchange
User Defined ISUP Message Exchange
User defined messages can be exchanged at any state for a given circuit:
592
•
a customized message can be sent using the ISUP_USR_MSG_REQ
primitive
•
on receipt of a message recognized as a customized,
HP OpenCall SS7 ISUP issues an ISUP_USR_MSG_IND primitive
associated with the received message
Chapter 15
Introduction to ISUP Procedures
Segmentation - ITU-T 93, 97, ETSI-V2 Versions
Segmentation - ITU-T 93, 97, ETSI-V2 Versions
HP OpenCall SS7 ISUP offers facilities to handle the segmentation of
messages whose length is more than 272 bytes, and less than 544 bytes.
This segmentation mechanism is only offered when selecting the ITU97
version, used with the ITU-T 93, ITU-T 97 or ETSI-V2 message sets.
Segmentation for Outgoing Messages
The application issues a SETUP_REQ to HP OpenCall SS7 ISUP. The
associated IAM message length is more than 272 bytes, and therefore
needs segmentation. HP OpenCall SS7 ISUP handles the segmentation
process and then sends a segmented IAM message, with its SGM
extra-segment, to the network.
Figure 15-2
Segmentation for Outgoing Messages
If the message built by the application cannot be segmented, it is locally
refused by HP OpenCall SS7 ISUP with the appropriate error status.
Chapter 15
593
Introduction to ISUP Procedures
Segmentation - ITU-T 93, 97, ETSI-V2 Versions
Reassembly of Incoming Messages - Normal Case
A message is received from the network indicating that an SGM message
is following (this indication is present either in the optional backward
call indicator or in the optional forward call indicator).
HP OpenCall SS7 ISUP waits for the associated SGM message, and
reassembles both messages to build a single message of the same type as
the first one received. The reassembled message is then sent to the
application with the proper associated primitive.
Figure 15-3
Reassembly of Incoming Messages - Normal Case
Reassembly of Incoming Messages -Failure Case 1
A message is received from the network indicating that an SGM message
is following. HP OpenCall SS7 ISUP waits for the associated SGM
message. It is not received within T34. Reassembly is canceled and the
first received message is sent to the application with the proper
associated primitive.
594
Chapter 15
Introduction to ISUP Procedures
Segmentation - ITU-T 93, 97, ETSI-V2 Versions
Figure 15-4
Reassembly of Incoming Messages - T34 Expiry
Reassembly of Incoming Messages - Failure Case 2
A message is received from the network indicating that an SGM message
is following. HP OpenCall SS7 ISUP waits for the associated SGM
message. A new message is received that is not SGM. The reassembly of
the first received message is canceled.
Figure 15-5
Chapter 15
Reassembly of Incoming Messages - Other Message Received
595
Introduction to ISUP Procedures
Segmentation - ITU-T 93, 97, ETSI-V2 Versions
Reassembly of Incoming Messages - Interacting with
Continuity Check
An IAM is received indicating that an SGM message is following. A
continuity-check procedure is running and the COT message is received
before the SGM message.
The COT message is saved as long as the SGM message is not received, and
then sent to the application with the appropriate
CONTINUITY_REPORT_IND primitive.
The diagram below does not describe the primitives associated with the
continuity check procedure.
Figure 15-6
596
Reassembly of Incoming Messages - COT Received
Chapter 15
Introduction to ISUP Procedures
Handling Unrecognized Messages - ITU97 Mode for ITU-T Based HP OpenCall SS7 ISUP
Handling Unrecognized Messages ITU97 Mode for ITU-T Based
HP OpenCall SS7 ISUP
ITU97 mode supports handling of unrecognized ISUP messages, i.e.
messages whose message type field is not part of the standard message
set.
To be able to handle these messages, the following assumption is made,
as stated in the ITU-T 93/97 recommendations:
“All unrecognized messages that can be received only contain parameters
coded as optional parameters, no new messages will contain mandatory
fixed or mandatory variable parameters”
Two specific primitives are dedicated to unknown message exchanges:
•
UNKNOWN_MSG_REQ
•
UNKNOWN_MSG_IND
The unknown message is supported by a specific C++ class, IsupUkwn,
which offers read/write access to all standard parameters of ITU-T 97
through accessors dedicated to optional parameters.
Two dedicated methods enable the ISUP message type field to be
handled:
Chapter 15
•
IsupUkwn::setTagValue() allows the application to set the ISUP
message type field to be used by HP OpenCall SS7 ISUP when
sending the message
•
IsupUkwn::getTagValue() allows the application to retrieve the
ISUP message type field when receiving an unknown message
597
Introduction to ISUP Procedures
Handling Unrecognized Messages - ITU97 Mode for ITU-T Based HP OpenCall SS7 ISUP
598
Chapter 15
16
ISUP Call Control - Procedures
Common to ANSI and ITU-T
This chapter describes HP OpenCall SS7 ISUP behavior for call control
setup/teardown procedures that are common to ANSI and ITU-T.
Chapter 16
599
ISUP Call Control - Procedures Common to ANSI and ITU-T
Overview
Overview
For each procedure, this chapter provides:
600
•
message and primitive flow
•
circuit states and timer activity
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Conventions Used in Diagrams
Conventions Used in Diagrams
The diagrams in this chapter and in the following chapters:
•
Chapter 17, “ISUP Call Control - Procedures Specific to ANSI,”
•
Chapter 18, “ISUP Call Control - Procedures Specific to ITU-T,”
•
Chapter 19, “ISUP Circuit Maintenance - Procedures Specific to
ANSI,”
•
Chapter 20, “ISUP Circuit Maintenance - Procedures Specific to
ITU-T,”
use the following convention:
Prmt_Name(xxx)
Where:
Prmt_Name
Is the primitive name
xxx
Is the message type
In these diagrams, the term “Signaling Network” refers to a network
capable of transporting MSUs. This may be an SS7 network or an IP
network (using SIGTRAN).
Chapter 16
601
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Setup Procedures
Call Setup Procedures
Call setup is triggered when a message from the application is received
by the ISUP library containing the SETUP_REQ primitive and IAM. The
request to setup a call may be unsuccessful due to various factors, such
as failure to receive a specific ISUP library or dual seizure. The following
scenarios illustrate the behavior of the ISUP library in these various
circumstances.
SETUP Request Locally Refused by
HP OpenCall SS7 ISUP
The application issues a SETUP_REQ to HP OpenCall SS7 ISUP. The
primitive is locally rejected. Refer to the HP OpenCall SS7 ISUP API
man pages for details on how the failure condition is reported to the
application.
This situation occurs in the following cases:
602
•
the (DPC, CIC) does not correspond to a valid configured circuit
•
the circuit is reserved for inbound traffic
•
the circuit has already been seized (inbound seizure)
•
the circuit is under reset
•
the IAM message cannot be encoded
•
the IPC flow control is active
•
the SS7 Stack underneath is unavailable or congested
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Setup Procedures
Figure 16-1
SETUP_REQ Locally Refused by HP OpenCall SS7 ISUP
SETUP Request - Dual Seizure Case 1
This scenario corresponds to the case where a circuit is seized on both
sides at the same time. As a result of the SETUP_REQ,
HP OpenCall SS7 ISUP issues an IAM (IAM-1) to the network. The issued
IAM crosses the IAM (IAM-2) received from the peer, on its way to
HP OpenCall SS7 ISUP. Consequently, HP OpenCall SS7 ISUP receives
this IAM when already engaged in the processing of an outbound call
(CPCO).
In such a case, HP OpenCall SS7 ISUP instances determine which of the
inbound and outbound call attempts must be abandoned as follows. If the
Signaling Point Code of HP OpenCall SS7 ISUP is greater than the
Signaling Point Code of the peer, then HP OpenCall SS7 ISUP controls
all even CICs and the peer controls all odd CICs.
Here, HP OpenCall SS7 ISUP gives up and issues a SETUP_FAILURE_IND
primitive with a DUAL_SEIZURE cause. The application may use this
information to re-attempt the call setup on another circuit.
NOTE
Chapter 16
There is no automatic call setup re-attempt as another circuit has to be
selected.
603
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Setup Procedures
Figure 16-2
Dual Seizure
SETUP Request - Dual Seizure Case 2
In this second scenario of incoming seizure, the IAM from the peer has
already been received by HP OpenCall SS7 ISUP at the time the
SETUP_REQ is issued by the application. Most likely the SETUP_IND is
queued in the HP OpenCall SS7 ISUP API’ s Up List, waiting for the
application to read it.
In this case, HP OpenCall SS7 ISUP is already engaged in the
processing of an inbound call (CPCI) for the circuit at stake. The
SETUP_REQ is therefore refused directly (that is, synchronously) without
delivery of any asynchronous indication. Refer to the
HP OpenCall SS7 ISUP man pages for details on how the refusal is
communicated back to the application.
The application may re-try a call setup on another circuit.
604
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Setup Procedures
Figure 16-3
Incoming Seizure
SETUP Request - Failure to Receive ACM
In this scenario, an ACM must be received as a response to the IAM within
T7. Failure to receive ACM within T7 makes HP OpenCall SS7 ISUP
abandon the call attempt and issue a START_RELEASE_IND to the
application.
Chapter 16
605
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Setup Procedures
Figure 16-4
Failure to Receive ACM
Incoming Call Setup with Immediate Release
In this scenario, an REL message is received immediately following the
incoming IAM message.
Successful Call Setup for Incoming Side
Call Setup Including ACM Message Use
The following figure presents a successful call setup scenario where the
application sends ACM messages.
606
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Setup Procedures
Figure 16-5
Successful Call Setup - Incoming Side
Call Setup Without ACM Message
The following figure presents a successful call setup scenario where the
application directly sends an ANM message to complete the call.
Figure 16-6
Chapter 16
Successful Call Setup - Incoming Side
607
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Release
Call Release
A call can be released by either party, calling or called.
Normal Call Release - Outgoing Release
If the application wishes to release a circuit, it will send a RELEASE_REQ
primitive with a REL message containing the cause for releasing the
circuit, such as normal. The circuit status is modified to TRANSIENT, and
the REL message is sent to the SS7 network.
Figure 16-7
Call Release - Outgoing Release
Normal Call Release - Incoming Release
When an incoming REL is received, the application is notified with a
RELEASE_IND from the ISUP library.
608
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Release
Figure 16-8
Call Release - Incoming Release
Call Release Collision - Case 1
In this scenario, a RELEASE_REQ primitive is received and causes a REL
message to be sent to the network. In the mean time, a REL message is
also received. As a consequence, an RLC message is sent back.
Meanwhile, in response to the REL message previously sent, an RLC
message is received and the application is notified with a RELEASE_CONF.
Chapter 16
609
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Release
Figure 16-9
Abnormal Release - REL Collision
Call Release Collision - Case 2
In this scenario, HP OpenCall SS7 ISUP receives a RELEASE_REQ
primitive, but a REL message has just been received previously. That
collision results in the RELEASE_REQ primitive being rejected with a
cause indicating WRONG_STATE. The received REL message is nevertheless
processed, and an RLC message is sent back.
610
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Release
Figure 16-10
Abnormal Release - REL Collision
Incoming Reset
When an RSC message is received by HP OpenCall SS7 ISUP, the
application is notified by a RESET_IND without any timer constraint.
Chapter 16
611
ISUP Call Control - Procedures Common to ANSI and ITU-T
Call Release
Figure 16-11
Abnormal Release - Incoming Reset
NOTE
A RESET_RESP with RLC must be answered for the circuit which has
been reset by the RSC.
612
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Circuit Reset
Circuit Reset
Because the circuit state information is maintained by the ISUP library,
there may be occasions when this information is inaccurate. In such
cases, the circuit must be reset to an idle condition at both local and
remote ends, thereby making it available for new traffic.
HP OpenCall SS7 ISUP Initiated Reset - Successful
Procedure
In this scenario, HP OpenCall SS7 ISUP initiates a Reset procedure
after reception of an unexpected message:
•
for the ANSI standard, when HP OpenCall SS7 ISUP is in the
Wait-For-OGC-Complete state
•
for ITU-T standard, when HP OpenCall SS7 ISUP is in the
Wait-For-ACM state
As a result, a START_RESET_IND is sent to the application. It contains an
additional StartRelease information indicating the cause of the setup
failure: UNEXPECTED_MESSAGE. The application must respond to this
indication as soon as possible via a START_RESET_IND_ACK primitive.
Upon reception of the latter primitive, HP OpenCall SS7 ISUP issues an
RSC message to the network and starts timers T16 and T17.
On receipt of the RLC message, a RESET_CONF primitive is issued to the
application. For ANSI based HP OpenCall SS7 ISUP only, a
MAINTENANCE_SYSTEM_IND indicating RLC_AFTER_T17 is issued to the
application.
Chapter 16
613
ISUP Call Control - Procedures Common to ANSI and ITU-T
Circuit Reset
Figure 16-12
Call Reset - Successful
Reset from Network - Successful Procedure
In this case, the Reset procedure is initiated by the network, hence a
RESET_IND versus a START_RESET_IND. The application must reply
promptly, even though HP OpenCall SS7 ISUP does not set any timer
waiting for RESET_RESP from the application.
614
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Circuit Reset
Figure 16-13
Reset from Network - Successful Procedure
Reset from Application - Successful Procedure
The application can decide to reset a circuit. It does so using the
RESET_REQ primitive.
Figure 16-14
Chapter 16
Reset from Application- Successful Procedure
615
ISUP Call Control - Procedures Common to ANSI and ITU-T
Circuit Group Reset from Network
Circuit Group Reset from Network
Normal Case
In this scenario, a GRS message is received on a circuit group of which 2
circuits are out of IDLE state. For each of these circuits, a RESET_IND
primitive with an additional information Reset indicating a
GROUP_RESET, is delivered to the application. The latter needs to respond
with a RESET_RESP with the same additional information and no
message. That way, no RLC message will be sent over. The GRA group
reset ack message is sent back only after all the expected RESET_RESP
and the GROUP_RESET_RESP (without GRA associated message) primitives
have been received from the application (when all the circuits are in the
appropriate state).
NOTE
If the application responds with a RESET_RESP (RLC), an RLC message
will be sent.
Should a second GRS be received, even if its rangeAndStatus parameter
is identical to the previous one and therefore could be a repetition, it is
processed as a new one. In the above case, it is likely that not so many
RESET_IND primitives will be sent to the application as most circuit
states will be idle.
616
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Circuit Group Reset from Network
Figure 16-15
Group Reset
Failure Case
In this case, the GROUP_RESET_RESP is sent back by the application, but
not all RESET_IND have been acknowledged. The GRA message cannot be
sent back to the network, and an error is returned to the application.
Chapter 16
617
ISUP Call Control - Procedures Common to ANSI and ITU-T
Circuit Group Reset from Network
Figure 16-16
Group Reset - Failure Case
Double Reset
Here, a circuit must be reset twice. It must first be reset by a Circuit
Reset RSC, and then by a Circuit Group Reset (it belongs to the group).
After the list of circuits involved in the group is established,
HP OpenCall SS7 ISUP finds that the circuit is already being reset, and
therefore does not produce a RESET_IND for it. The application replies to
the first RESET_IND by a RESET_RESP, and then to the other RESET_IND.
Upon receipt of GROUP_RESET_RESP, as all the circuits of the group are in
the appropriate state, HP OpenCall SS7 ISUP can send the GRA.
NOTE
618
It is likely that the RESET_RESP corresponding to the Circuit Reset
contains an RLC message and no additional information. This causes an
RLC message to be sent to the network.
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Circuit Group Reset from Network
Figure 16-17
Chapter 16
Group Reset - Double Reset
619
ISUP Call Control - Procedures Common to ANSI and ITU-T
Information Exchange
Information Exchange
When supported by the selected standard (TTC typically does not
support this), HP OpenCall SS7 ISUP offers primitives to exchange
solicited or unsolicited information messages.
Solicited Information Exchange - Success
Figure 16-18
620
Solicited Information Exchange - Incoming Request
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Information Exchange
Figure 16-19
Solicited Information Exchange - Outgoing Request
Solicited Information Exchange - Failure Case 1
In this scenario, the remote fails to complete a solicited information
exchange while the call is being set up. In this case,
HP OpenCall SS7 ISUP initiates a release procedure after T33.
Chapter 16
621
ISUP Call Control - Procedures Common to ANSI and ITU-T
Information Exchange
Figure 16-20
Solicited Information Exchange - Failure
Solicited Information Exchange - Failure Case 2
It is not possible for the application to invoke a second information
request while a prior request is still pending.
622
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Information Exchange
Figure 16-21
Solicited Information Exchange - Failure
Unsolicited Information Exchange
Figure 16-22
Unsolicited Information Exchange
Information Exchange - Failure Case
Information Request or Information primitives on an IDLE circuit are
refused.
Chapter 16
623
ISUP Call Control - Procedures Common to ANSI and ITU-T
Information Exchange
Figure 16-23
624
Unsolicited Information Exchange - Failure
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Suspend/Resume
Suspend/Resume
Suspend/Resume - T6 Expiry
This procedure applies for both ANSI based and ITU-T based
HP OpenCall SS7 ISUP.
On T6 timeout, the START_RELEASE_IND primitive is sent to the
application indicating T6_TIMEOUT. When the application replies with
START_RELEASE_IND_ACK, the REL message is issued to the network. On
receipt of the RLC from the network, a RELEASE_CONF is issued to the
application.
Chapter 16
625
ISUP Call Control - Procedures Common to ANSI and ITU-T
Suspend/Resume
Figure 16-24
626
Suspend/Resume - T6 Timeout
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Forward Transfer
Forward Transfer
Forward Transfer Message - Normal Case
Here, a Forward Transfer message comes from the network (always
forward) and is simply transmitted to the application through a
FORWARD_TRANSFER_IND. No response is expected from the application.
Figure 16-25
Chapter 16
Forward Transfer Message - Normal Case
627
ISUP Call Control - Procedures Common to ANSI and ITU-T
Pass Along Message
Pass Along Message
Pass-along messages (PAM), containing an embedded ISUP message, can
be passed in both directions.
Pass Along Request - Normal Case
A PAM message may contain any ISUP message. HP OpenCall SS7 ISUP
does not analyze the encapsulated message, but transparently transmits
it to the network or to the application. The remote end will be notified by
a PASS_ALONG_IND containing the message.
For an outgoing call, before a PAM message can be sent, an ACM, ANM or
PAM message must have been received, indicating for the first two that
the pass-along method is available (in the backwardCallIndicators
parameter). Otherwise, the PASS_ALONG_REQ primitive is rejected.
For an incoming call, after the IAM message is received, and provided it
indicates that the pass-along method is available (in the Forward Call
Indicators parameter), the PASS_ALONG_REQ is accepted and causes a PAM
message to be sent out.
The ANM message can be sent afterwards.
Figure 16-26
628
Pass Along Procedure - Outgoing Call
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Pass Along Message
Figure 16-27
Pass Along Procedure - Incoming Call
Pass Along Request - Error Case
Here, the ANM message received indicates that the pass-along method is
not available (in the backwardCallIndicators parameter). Therefore,
the PASS_ALONG_REQ primitive is rejected.
Figure 16-28
Chapter 16
Pass Along Procedure - Failure
629
ISUP Call Control - Procedures Common to ANSI and ITU-T
Continuity Check Request with IAM or CCR
Continuity Check Request with IAM or CCR
The Continuity Check is a procedure for checking a circuit. It can be
requested, when supported by the selected flavor, in an IAM, a CCR or a
CRM message. The following sections describe a number of Continuity
scenarios.
Continuity Check on this Circuit
A Continuity Check is performed on the current circuit if the continuity
check indicator in the IAM message is set to ‘Continuity Check required
on this circuit’.
Successful Continuity Check
For the ANSI case, refer to “Continuity Check Request with IAM or
CCR” on page 649.
For the ITU-T case, refer to “Continuity Check Request with IAM or
CCR” on page 680.
Failed Continuity Check
In the case presented below, the loopback tone is not detected by the
application, and consequently the T24 timer expires. A COT message
indicating ContinuityFailure is sent by HP OpenCall SS7 ISUP.
630
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Continuity Check Request with IAM or CCR
Figure 16-29
Chapter 16
Continuity Check - Outgoing Side - Failure
631
ISUP Call Control - Procedures Common to ANSI and ITU-T
Continuity Check Request with IAM or CCR
After a failed continuity check, a re-check is done automatically as
depicted in the Continuity Recheck, see “Continuity Recheck” on
page 652.
Figure 16-30
632
Continuity Check - Incoming Side - Failure
Chapter 16
ISUP Call Control - Procedures Common to ANSI and ITU-T
Continuity Check Request with IAM or CCR
Continuity Check on the Previous Circuit
A Continuity Check is performed on the previous circuit if the
continuityCheckIndicator in the IAM message is set to “Continuity
Check required on the previous circuit”.
Figure 16-31
Chapter 16
Continuity Check on Previous Circuit - Outgoing Side
633
ISUP Call Control - Procedures Common to ANSI and ITU-T
Facility Message
Facility Message
This message is supported by HP OpenCall SS7 ISUP in following cases:
•
ANSI based HP OpenCall SS7 ISUP
•
ITU-T based HP OpenCall SS7 ISUP, with ITU-T 93, ITU-T 97 and
ETSI-V2 message sets
The FAC message can be sent or received in any state of a call.
Figure 16-32
634
FAC Message
Chapter 16
17
ISUP Call Control - Procedures
Specific to ANSI
This chapter describes HP OpenCall SS7 ISUP behavior for call control
setup/teardown procedures that are specific to ANSI.
Chapter 17
635
ISUP Call Control - Procedures Specific to ANSI
Call Setup Without ACM Reception
Call Setup Without ACM Reception
The following figure presents a successful outgoing call with direct
reception of ANM.
Figure 17-1
636
Successful Call Setup - Outgoing Side
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Call Release
Call Release
A call can be released by either party, calling or called.
Abnormal Call Release - Case 1
This scenario depicts a a situation where the peer node fails to
acknowledge the REL message sent out by HP OpenCall SS7 ISUP.
As a result, HP OpenCall SS7 ISUP:
•
First retransmits the REL message every T1, until T5 pops
•
After T5, HP OpenCall SS7 ISUP A issues a
MAINTENANCE_SYSTEM_IND indicating T5_TIMEOUT to application A
and initiate the “Circuit Reset after T5” procedure by sending a
START_RESET_IND primitive to the application. The procedure is
controlled by one timer: T17. A reset message (RSC) is sent out upon
receipt of the START_RESET_IND_ACK from application.
•
On each occurrence of T17, an RSC message is sent out.
•
A MAINTENANCE_SYSTEM_IND indicating T17_TIMEOUT is issued.
•
The procedure goes on until a STOP_REQ primitive is received from
application A. The STOP primitive stops the reset procedure and
brings the circuit back to idle state.
•
A MAINTENANCE_SYSTEM_IND indicating CRS_STOP is issued.
The abnormal call release procedure described in this scenario is
applicable to both inbound and outbound circuits.
NOTE
Chapter 17
RSC Message generation upon time-out is suspended if MTP3 is not
available or congested.
637
ISUP Call Control - Procedures Specific to ANSI
Call Release
Figure 17-2
638
Abnormal Release - Reset Failed
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Call Release
Abnormal Call Release - Case 2
In this case, an RLC message is eventually received during the reset
procedure. As a result, HP OpenCall SS7 ISUP completes the reset
sequence and issues a RESET_CONF() primitive. A
MAINTENANCE_SYSTEM_IND indicating RLC_AFTER_T17 is issued to the
application after RESET_CONF.
Chapter 17
639
ISUP Call Control - Procedures Specific to ANSI
Call Release
Figure 17-3
640
Abnormal Release - RLC Received at Last
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Circuit Reset
Circuit Reset
Because the circuit state information is maintained by the ISUP library,
there may be occasions when this information is inaccurate. In such
cases, the circuit must be reset to an idle condition at both local and
remote ends, thereby making it available for new traffic.
HP OpenCall SS7 ISUP Initiated Reset - Failure to
Receive RLC
In this case, HP OpenCall SS7 ISUP has initiated the “CPC-initiated
Reset” procedure. The network fails to respond with an RLC message. As
a result, HP OpenCall SS7 ISUP retransmits an RSC message every T16,
until the procedure is stopped by the application via a STOP_REQ
primitive or until the first T17 time-out.
After T17:
•
a MAINTENANCE_SYSTEM_IND is issued to the application, informing
the application/Operator about the error situation
•
RSC messages are sent every T17 (typically 1 minute) instead of
every T16 (typically 5 seconds)
until a STOP_REQ primitive is received from the application.
Chapter 17
641
ISUP Call Control - Procedures Specific to ANSI
Circuit Reset
Figure 17-4
642
Call Reset - Failure to Receive RLC
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Circuit Group Reset from User
Circuit Group Reset from User
Normal Case
In this scenario, a GROUP_RESET_REQ request is sent by the user. All the
circuits of the group are remotely and locally unblocked, and two GRS
messages are two GRS messages are sent to the network. Then ISUP
waits for the Acknowledgment message GRA before returning to idle.
Figure 17-5
Chapter 17
Group Reset from User- Normal Case
643
ISUP Call Control - Procedures Specific to ANSI
Circuit Reservation
Circuit Reservation
Circuit Reservation from Network
A circuit may be reserved prior to its setup. For the current version of
HP OpenCall SS7 ISUP, the application cannot request the reservation.
However, it is informed of a circuit reservation request by receiving a
CIRCUIT_RESERVATION_IND. Here, the circuit involved is marked
incoming busy by HP OpenCall SS7 ISUP. The application must respond
to that indication. On receipt of the CIRCUIT_RESERVATION_RESP,
HP OpenCall SS7 ISUP sends back a CRA message and starts the timer
T_CRA associated with the waiting-for-IAM state. The next steps are
those described in the call setup procedure, see “Call Setup Procedures”
on page 602.
Figure 17-6
644
Circuit Reservation from Network
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Circuit Reservation
Circuit Reservation from Network - T_CRA Expiry
In this example, the timer T_CRA has expired before the IAM message is
received. The application is informed of that event by the receipt of a
START_RELEASE_IND (indicating TCRA_TIMEOUT) which it acknowledges
by sending back a START_RELEASE_IND_ACK primitive. Upon receipt of
the latter, HP OpenCall SS7 ISUP sends a Release message and goes
into the release procedure previously described.
Figure 17-7
Chapter 17
Circuit Reservation from Network - Failure
645
ISUP Call Control - Procedures Specific to ANSI
Suspend/Resume
Suspend/Resume
When supported by the selected flavor, HP OpenCall SS7 ISUP offers
primitives and procedures to handle Suspend/Resume messages.
Suspend/Resume - Outgoing Call
HP OpenCall SS7 ISUP only signals incoming SUS messages through a
SUSPENDED_IND primitive. Outgoing SUS messages are considered
unexpected.
Figure 17-8
Suspend/Resume - Outgoing Call
Suspend/Resume - Incoming Call
HP OpenCall SS7 ISUP only accepts outgoing SUS messages associated
with SUSPEND_REQ primitives. Incoming SUS messages are considered
unexpected.
The suspended condition is removed after the application sends a
RESUME_REQ primitive associated with an RES message.
646
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Suspend/Resume
Figure 17-9
Chapter 17
Suspend/Resume - Incoming Call
647
ISUP Call Control - Procedures Specific to ANSI
Exit Message
Exit Message
Exit Message - Normal Case
In this example, an Exit message comes from a gateway in the network.
Because it is significant during the call setup only, it is transmitted to
the application, through an EXIT_IND, only if the CPC status is
wait-for-answer(3) or wait-for-address-complete(2). The application can
use it to generate timing indications. No response is expected on the
network side.
Figure 17-10
648
Exit Message - Normal Case
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
Continuity Check Request with IAM or CCR
The Continuity Check is a procedure for checking a circuit. It can be
requested, when supported by the selected flavor, in an IAM, a CCR or a
CRM message. The following sections describe a number of Continuity
scenarios.
Continuity Check on this Circuit
A Continuity Check is performed on the current circuit if the continuity
check indicator in the IAM message is set to ‘Continuity Check required
on this circuit’.
Successful Continuity Check
The outgoing side sends a Continuity message with a successful
indication after a correct check of the transmission path (a loop is
required on the incoming side, a tone is sent from the outgoing side and
is returned in time).
Chapter 17
649
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
Figure 17-11
650
Continuity Check - Outgoing Side
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
NOTE
Chapter 17
The CONNECT_LOOP_IND primitive and the SETUP_IND primitive are
handled in parallel by HP OpenCall SS7 ISUP. Therefore, depending on
the behavior of the application, the order of primitives described in the
diagram above can change. CONNECT_LOOP_IND and DISABLE_ECHO_IND
will ALWAYS be issued to the application sequentially (after
corresponding ACKs are sent back by the application).
651
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
Figure 17-12
Continuity Check - Incoming Side
Continuity Recheck
If the continuity recheck procedure is a success, only the outgoing side
sends a REL message to finish the procedure.
652
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
Figure 17-13
Chapter 17
Continuity Recheck - Outgoing Side
653
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
654
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
Figure 17-14
Chapter 17
Continuity Recheck - Incoming Side
655
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
Continuity Recheck - TCCR Expiry at Outgoing Side
If the TCCR timer expires during the continuity recheck phase, either
activated after a continuity failure during call setup, or after an explicit
continuity recheck request, the following occurs:
656
•
On the outgoing side, a reset procedure is activated by
HP OpenCall SS7 ISUP, the continuity recheck phase is cancelled. A
START_RESET_IND_ACK indicating DCO_LPA_FAIL is issued to the
application and an RSC message is sent by HP OpenCall SS7 ISUP
when application acknowledges by a START_RESET_IND_ACK.
•
On the incoming side, the continuity recheck procedure is cancelled
by the reset procedure engaged on the outgoing side.
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
Figure 17-15
Chapter 17
Continuity Recheck - Outgoing Side - TCCR Expiry
657
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
Continuity Recheck - T24 Expiry at Outgoing Side
If the T24 timer expires during the continuity recheck phase, either
activated after a continuity failure during call setup, or after an explicit
continuity recheck request, the following occurs.
On the outgoing side, a COT indicating failure is issued to the network,
and a MAINTENANCE_SYSTEM_IND primitive indicating DCO_FAIL is issued
to the application after the SECOND continuity failure (including the
eventual call setup continuity failure). The T26 timer is started to restart
a continuity recheck phase at its expiry.
658
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
Figure 17-16
Chapter 17
Continuity Recheck - Outgoing Side - T24 Expiry
659
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with IAM or CCR
660
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with CRM
Continuity Check Request with CRM
Because the Circuit Reservation Message is supported only on the
incoming side, the outgoing side is not represented in the following
scenarios.
Continuity Check on this Circuit
Note that for Continuity Check, the order (SETUP_IND,
CONNECT_LOOP_IND, DISABLE_ECHO_IND) and
(CONTINUITY_REPORT_IND, SETUP_FAILURE_IND,
REMOVE_LOOP_IND, and ENABLE_ECHO_IND) is not deterministic
since there are two separate state machines involved. For Continuity
Recheck, the order is deterministic since it is handled by one state
machine.
Chapter 17
661
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with CRM
Successful Continuity Check
Figure 17-17
662
Continuity Check with CRM - Incoming Side - Success
Chapter 17
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with CRM
Failed Continuity Check and Recheck Procedure
Figure 17-18
Chapter 17
Continuity Check with CRM - Incoming Side - Failure
663
ISUP Call Control - Procedures Specific to ANSI
Continuity Check Request with CRM
Continuity Check on the Previous Circuit/
Not Required on this Circuit
Even if the continuity check is required on the previous circuit,
HP OpenCall SS7 ISUP handles the request as if no continuity was
required.
Figure 17-19
664
Continuity Check with CRM - Not Required / Required on
Previous
Chapter 17
18
ISUP Call Control - Procedures
Specific to ITU-T
This chapter describes HP OpenCall SS7 ISUP behavior for call control
setup/teardown procedures that are specific to ITU-T.
Chapter 18
665
ISUP Call Control - Procedures Specific to ITU-T
Successful Call Setup for Outgoing Side
Successful Call Setup for Outgoing Side
Call Setup Including ACM Reception
The following figure presents a successful outgoing call with receipt of an
ACM message.
Figure 18-1
Successful Call setup - Outgoing Side
During the outgoing call setup phase, unlimited CPG messages can also
be received by HP OpenCall SS7 ISUP. Receipt of the ANM message is
signaled to the application by a SETUP_CONF primitive, which indicates
that the call enters the active phase.
NOTE
666
The TTC flavor does not use the T9 timer. In this particular case, no T9
timer is started when receiving an ACM message.
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Successful Call Setup for Outgoing Side
Use of the CON Message
When supported by the selected flavor, the CON message can be sent or
received by HP OpenCall SS7 ISUP during call setup phases.
Use of the CON Message for Outgoing Calls
The application must check the message type associated with the
SETUP_CONF primitive to determine which message (ANM or CON) has been
used.
Figure 18-2
Use of CON Message - Outgoing Side
Use of the CON Message for Incoming Calls
Instead of using an ANM message to complete the incoming call, the
application can make use of the CON message associated with the
SETUP_RESP primitive.
Chapter 18
667
ISUP Call Control - Procedures Specific to ITU-T
Successful Call Setup for Outgoing Side
Figure 18-3
Use of CON Message - Incoming Side
Use of the SAM Message
When supported by the selected flavor, the SAM message can be sent or
received by the application using HP OpenCall SS7 ISUP through
INFORMATION_REQ and INFORMATION_IND dedicated primitives.
NOTE
The SAM message can only be sent after having sent IAM and before
having received ACM.
The SAM message can only be received after having received IAM and
before having sent ACM.
668
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Successful Call Setup for Outgoing Side
Use of the SAM Message for Outgoing Calls
Figure 18-4
Use of SAM Message - Outgoing Side
Use of the SAM Message for Incoming Calls
Figure 18-5
Chapter 18
Use of SAM Message - Incoming Side
669
ISUP Call Control - Procedures Specific to ITU-T
Call Release
Call Release
A call can be released by either party, calling or called.
Abnormal Call Release - Case 1
This scenario depicts a a situation where the peer node fails to
acknowledge the REL message sent out by HP OpenCall SS7 ISUP. As a
result, HP OpenCall SS7 ISUP:
•
First retransmits the REL message every T1, until T5 pops
•
After T5, HP OpenCall SS7 ISUP A issues a
MAINTENANCE_SYSTEM_IND indicating T5_TIMEOUT to application A
and initiate the “Circuit Reset after T5” procedure by sending a
START_RESET_IND primitive to the application. The procedure is
controlled by one timer: T17. A reset message (RSC) is sent out upon
receipt of the START_RESET_IND_ACK from application.
•
On each occurrence of T17, an RSC message is sent out
•
The procedure goes on until a STOP_REQ primitive is received from
application A. The STOP primitive stops the reset procedure and
brings the circuit back to idle state.
The abnormal call release procedure described in this scenario is
applicable to both inbound and outbound circuits.
NOTE
670
RSC Message generation upon time-out is suspended if MTP3 is not
available or congested.
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Call Release
Figure 18-6
Abnormal Release - Reset Failed
Abnormal Call Release - Case 2
In this case, an RLC message is eventually received during the reset
procedure. As a result, HP OpenCall SS7 ISUP completes the reset
sequence and issues a RESET_CONF() primitive. A
MAINTENANCE_SYSTEM_IND indicating RLC_AFTER_T17 is issued to the
application before RESET_CONF.
Chapter 18
671
ISUP Call Control - Procedures Specific to ITU-T
Call Release
Figure 18-7
672
Abnormal Release - RLC Received at Least
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Circuit Reset
Circuit Reset
Because the circuit state information is maintained by the ISUP library,
there may be occasions when this information is inaccurate. In such
cases, the circuit must be reset to an idle condition at both local and
remote ends, thereby making it available for new traffic.
HP OpenCall SS7 ISUP Initiated Reset - Failure to
Receive RLC
In this case, HP OpenCall SS7 ISUP has initiated the “CPC-initiated
Reset” procedure. The network fails to respond with an RLC message. As
a result, HP OpenCall SS7 ISUP retransmits an RSC message every T16,
until the procedure is stopped by the application via a STOP_REQ
primitive or until the first T17 time-out.
After T17:
•
a MAINTENANCE_SYSTEM_IND is issued to the application, informing
the application/Operator about the error situation
•
RSC messages are sent every T17 (typically 1 minute) instead of
every T16 (typically 5 seconds)
until a STOP_REQ primitive is received from the application.
Chapter 18
673
ISUP Call Control - Procedures Specific to ITU-T
Circuit Reset
Figure 18-8
674
Call Reset - Failure to Receive RLC
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Circuit Group Reset from USER
Circuit Group Reset from USER
Normal Case
In this scenario, a GROUP_RESET_REQ request is sent by the user. All the
circuits of the group are remotely and locally unblocked, and two GRS
messages are sent to the network. Then ISUP waits for the
Acknowledgment message GRA before returning to idle.
Figure 18-9
Chapter 18
Group Reset from User- Normal Case
675
ISUP Call Control - Procedures Specific to ITU-T
Suspend/Resume
Suspend/Resume
Processing of the Suspend/Resume message depends on the source of the
messages (user or network initiated) and the origin of the call (outgoing
or incoming).
Suspend/Resume - Incoming Call
For an incoming call, HP OpenCall SS7 ISUP ignores the SUS message
indicating “Network Initiated” in the SuspendResumeIndicator
parameter. It only signals SUS messages indicating “User Initiated” in
the SuspendResumeIndicator parameter, through a SUSPEND_IND
primitive. The same behavior applies to the RES message, that
HP OpenCall SS7 ISUP issues to the application through a RESUME_IND
primitive.
In both cases, an AdditionnalInfo field indicating FROM_USER is
associated with the primitive.
HP OpenCall SS7 ISUP accepts both SUSPEND_REQ and RESUME_REQ
primitives with associated messages coming from the application.
676
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Suspend/Resume
Figure 18-10
Suspend/Resume - Incoming Call
Suspend/Resume - Outgoing Call
For an outgoing call, HP OpenCall SS7 ISUP accepts both the SUS
message indicating “Network Initiated” or “UserInitiated” in the
SuspendResumeIndicator parameter. It signals SUS messages through a
SUSPEND_IND primitive. The same behavior applies to the RES message
that HP OpenCall SS7 ISUP issues to the application through a
RESUME_IND primitive.
In both cases, an AdditionnalInfo field indicating FROM_NETWORK or
FROM_USER, depending on the originator of the message, is associated
with the primitive.
HP OpenCall SS7 ISUP accepts both SUSPEND_REQ and RESUME_REQ
primitives with associated messages coming from the application.
Chapter 18
677
ISUP Call Control - Procedures Specific to ITU-T
Suspend/Resume
Figure 18-11
Suspend/Resume - Outgoing Call
Suspend/Resume - T2 Expiry
When T2 timer expires, HP OpenCall SS7 ISUP activates a release
procedure by sending START_RELEASE_IND to the application, indicating
T2_TIMEOUT. This applies for both outgoing or incoming calls.
678
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Suspend/Resume
Figure 18-12
Chapter 18
Suspend/Resume - T6 Timeout
679
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
Continuity Check Request with IAM or CCR
The Continuity Check is a procedure for checking a circuit. It can be
requested, when supported by the selected flavor, in an IAM, a CCR or a
CRM message. The following sections describe a number of Continuity
scenarios.
Continuity Check on this Circuit
A Continuity Check is performed on the current circuit if the continuity
check indicator in the IAM message is set to ‘Continuity Check required
on this circuit’.
Successful Continuity Check
The outgoing side sends a Continuity message with a successful
indication after a correct check of the transmission path (a loop is
required on the incoming side, a tone is sent from the outgoing side and
is returned in time).
680
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
Figure 18-13
Chapter 18
Continuity Check - Outgoing Side
681
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
NOTE
682
The CONNECT_LOOP_IND primitive and the SETUP_IND primitive are
handled in parallel by HP OpenCall SS7 ISUP. Therefore, depending on
the behavior of the application, the order of primitives described in the
diagram above can change. CONNECT_LOOP_IND and DISABLE_ECHO_IND
will ALWAYS be issued to the application sequentially (after
corresponding ACKs are sent back by the application).
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
Figure 18-14
Continuity Check - Incoming Side
When selecting the ITU97 flavor for HP OpenCall SS7 ISUP, it is
possible that the SETUP_IND primitive is received AFTER the
DISABLE_ECHO_IND primitive by the application, if the IAM message is
segmented and the SGM message is not received.
Chapter 18
683
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
Continuity Recheck
If the continuity recheck procedure is a success, only the outgoing side
sends a REL message to finish the procedure.
684
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
Figure 18-15
Chapter 18
Continuity Recheck - Outgoing Side
685
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
686
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
Figure 18-16
Chapter 18
Continuity Recheck - Incoming Side
687
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
After a failed continuity check, a re-check is done automatically as
depicted in the next section.
Continuity Recheck - T24 Expiry at Outgoing Side
If the T24 timer expires during the continuity recheck phase, either
activated after a continuity failure during call setup, or after an explicit
continuity recheck request, the following occurs.
On the outgoing side, a COT indicating failure is issued to the network,
and a MAINTENANCE_SYSTEM_IND primitive indicating T24_TIMEOUT is
issued to the application after the SECOND continuity failure (including
the eventual call setup continuity failure). The T26 timer is started to
restart a continuity recheck phase at its expiry.
688
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
Figure 18-17
Chapter 18
Continuity Recheck - Outgoing Side - T24 Expiry
689
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
690
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
Figure 18-18
Chapter 18
Continuity Recheck - Incoming Side - COT Failure
691
ISUP Call Control - Procedures Specific to ITU-T
Continuity Check Request with IAM or CCR
692
Chapter 18
ISUP Call Control - Procedures Specific to ITU-T
Facility Request, Facility Accepted, Facility Reject Messages
Facility Request, Facility Accepted, Facility
Reject Messages
Based on three messages, FAR, FAA and FRJ, this procedure allows the
application to invoke a facility (an operation) towards the other side.
This invocation can be accepted or rejected. These procedures are
accessible only for flavors supporting the corresponding messages.
Facility Exchange - Success
A facility can be invoked only after the setup procedure, once the call is
established (ICC Answered, OGC Answered). In this example, the
application accepts the invocation.
Figure 18-19
Chapter 18
Facility Exchange - Success
693
ISUP Call Control - Procedures Specific to ITU-T
Facility Request, Facility Accepted, Facility Reject Messages
Facility Exchange - Failure
The second example shows how the application can refuse the invocation
by using a FACILITY_REJECT_REQ primitive and the FRJ message.
Figure 18-20
694
Facility Exchange - Failure
Chapter 18
19
ISUP Circuit Maintenance Procedures Specific to ANSI
This chapter describes circuit maintenance procedures that are specific
to ANSI.
Chapter 19
695
ISUP Circuit Maintenance - Procedures Specific to ANSI
Overview
Overview
The circuit maintenance processes described in this chapter include:
696
•
circuit blocking and unblocking
•
circuit group blocking and unblocking
•
circuit group query
•
circuit validation
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Blocking/Unblocking from a Network
Circuit Blocking/Unblocking from a Network
The blocking and unblocking mechanisms allow traffic to be removed
from, and then returned to, specific circuits.
Circuit Blocking from a Network - Normal Case
In this case, the circuit is put in the IDLE_REMOTELY_BLOCKED state.
Figure 19-1
Circuit Blocking from Network - Normal Case
Circuit Blocking from User - Normal Case
In this case, the circuit is put in the IDLE_LOCALLY_BLOCKED state.
Figure 19-2
Chapter 19
Circuit Blocking from User - Normal Case
697
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Blocking/Unblocking from a Network
Circuit Unblocking from a Network - Normal Case
The application is notified of the unblocking event if the circuit is
actually remotely blocked. In this case, it must reply with an
UNBLOCKING_RESP primitive. That causes the circuit to be marked
not-remotely-blocked and the UBA message to be sent to the network.
If the circuit is not remotely blocked, and a UBL is received, no
UNBLOCKING_IND is issued to the application, but the UBL message is
acknowledged with a UBA.
Figure 19-3
Circuit Unblocking from Network- Normal Case
Circuit Unblocking from User - Normal Case
Figure 19-4
698
Circuit Unblocking from User - Normal Case
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Blocking/Unblocking from a Network
Circuit Unblocking from a Network on Reception of
an IAM
In this case, an IAM indicating non test call, or a CRM message, received
on a REMOTELY_BLOCKED circuit, removes the blocking condition. It is the
responsibility of the application to synchronize the circuit state, as no
MAINTENANCE_SYSTEM_IND is issued by HP OpenCall SS7 ISUP.
Figure 19-5
Circuit Unblocking on Reception of IAM
Circuit Blocking during Setup Procedure
The reception of a BLO during the setup procedure (wait_for_ACM state)
triggers a release of the circuit. The application is informed through a
START_RELEASE_IND primitive indicating BLOCKING. On reply with a
START_RELEASE_IND_ACK, the REL message is sent to the network, and a
RELEASE_CONF primitive is issued to the application by
HP OpenCall SS7 ISUP on receipt of the RLC message.
Chapter 19
699
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Blocking/Unblocking from a Network
Figure 19-6
700
Circuit Blocking during Call Setup
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Blocking/Unblocking
Circuit Group Blocking/Unblocking
The group blocking/unblocking procedures are specific for each supplied
standard of HP OpenCall SS7 ISUP.
HP OpenCall SS7 ISUP handles both types of Group Blocking messages:
•
Group Blocking with immediate release
•
Group Blocking without immediate release
Group Blocking from Network Immediate Release - Normal Case 1
HP OpenCall SS7 ISUP reacts to the first received CGB message.
In this scenario, a CGB message is received from the network. The
message specifies that call release should be performed.
Consequently, HP OpenCall SS7 ISUP:
•
issues a GROUP_BLOCKING_IND primitive
•
initiates the release of calls, by sending a START_RESET_IND
primitive with additional info indicating BLOCKING_WITH_RELEASE.
The following diagram depicts a situation where 2 circuits of the
group are in this initial phase and hence are released
•
waits for the START_RESET_IND_ACK and GROUP_BLOCKING_RESP
primitives
•
marks all circuits as remotely blocked
•
upon receipt of all these primitives, sends back the acknowledgment
message CGBA
If a START_RESET_IND_ACK is missing, the CGBA will not be sent and the
application will get an error.
The START_RESET_IND(BLOCKING_WITH_RELEASE) primitive does not
cause an RSC to be sent to the network, therefore no RLC is received and
there is no RESET_CONF to be awaited.
Chapter 19
701
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Blocking/Unblocking
Figure 19-7
Group Blocking with Release - Normal Case
Group Blocking from Network - No Release Normal Case
In this scenario, a CGB message is received from the network, and the CBG
is requesting the No Release of the call. As a result,
HP OpenCall SS7 ISUP:
702
•
issues a GROUP_BLOCKING_IND primitive to the application
•
waits for the GROUP_BLOCKING_RESP from the application and sends
a CGBA message back to the network
•
marks all circuits as remotely blocked
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Blocking/Unblocking
Figure 19-8
Chapter 19
Group Blocking without Release - Normal Case
703
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Blocking/Unblocking
Group Blocking (Immediate Release or Not) from
User Normal Case
In this scenario, a maintenance GROUP_BLOCKING request is sent by the
user. Consequently, HP OpenCall SS7 ISUP:
•
sends two identical CBG messages using the one associated with the
primitive
•
waits for the GROUP_BLOCKING_CONF (CGBA) primitive
•
marks all circuits as “locally blocked”
The rangeAndStatus parameter is interpreted in the same way as the
CGB message
Figure 19-9
704
Group Blocking from User - Normal Case
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Blocking/Unblocking
Group Unblocking from NetworkNormal Case
In this scenario, a CGU is received from the network. As a result,
HP OpenCall SS7 ISUP:
NOTE
•
informs the application using a GROUP_UNBLOCKING_IND
•
waits for the GROUP_UNBLOCKING_RESP, and upon receipt of it, sends
a CGUA back to the network
•
marks all circuits as locally blocked
Although the CGU must be of the same type as the CGB previously sent
(i.e. no release or immediate release), no control is performed, and
the CGU is always processed.
The rangeAndStatus parameter is interpreted in the same way as the
CGB message.
Figure 19-10
Chapter 19
Group Unblocking from Network- Normal Case
705
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Blocking/Unblocking
Group Unblocking (Immediate or Not) from User Normal Case
In this scenario, a maintenance GROUP_UNBLOCKING request is sent by
the user. Consequently, HP OpenCall SS7 ISUP:
Figure 19-11
•
sends the CGU message associated with the primitive to the network
•
waits for the CGUA message from the network and issues a
GROUP_BLOCKING_CONF primitive to the application
•
marks all circuits as locally unblocked
Group Unblocking from User - Normal Case
Group Blocking (Without Immediate Release)
During Call Setup Procedure
This case only concerns received CGBs indicating no release with
circuits in an outgoing call setup phase (Wait for Address Complete
state).
In such cases, HP OpenCall SS7 ISUP issues a START_RELEASE_IND
primitive, indicating the BLOCKING cause. When receiving
START_RELEASE_IND_ACK for each concerned circuit,
706
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Blocking/Unblocking
HP OpenCall SS7 ISUP sends REL messages to release the call. A
RELEASE_CONF primitive is issued when an RLC comes back from the
network.
In parallel, the application finishes the group blocking operation by
sending a GROUP_BLOCKING_RESP primitive without any associated
messages. HP OpenCall SS7 ISUP creates and sends the corresponding
CGBA message to the network.
Figure 19-12
Chapter 19
Group Blocking during Call Setup
707
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
Circuit Group Query
Circuit Group Query from the Network
Here, the network initiates a circuit group query by sending a Circuit
Query message (CQM).
HP OpenCall SS7 ISUP can process the request internally without
interfering with the application. Therefore, no indication is issued to the
latter.
Each circuit of the group selected is examined, and its status is returned
in the Circuit State Indicator parameter of the Circuit Query Response
Message (CQR). If the circuit is not found, it is considered unequipped.
rangeAndStatus parameter interpretation:
Figure 19-13
708
•
if range is 0, the group is reduced to a single circuit
•
if range is not 0, a list is built from the message CIC, up to the range
value + 1
Circuit Group Query - from Network
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
Circuit Group Query from User (Application)
The application is allowed to activate a circuit group query procedure by
creating a CQM message and sending it to the network associated with a
GROUP_QUERY_REQ primitive.
HP OpenCall SS7 ISUP starts a T28 Timer dedicated to the group query
procedure.
On receipt of the answer to the CQM from the network,
HP OpenCall SS7 ISUP inspects the received CQR message to check for
error conditions in both the call processing and the maintenance state.
After this inspection, the CQS message is transmitted to the application
by HP OpenCall SS7 ISUP through a GROUP_QUERY_CONF primitive. See
Figure 19-14, “Circuit Group Query from User - Normal Case.”
Figure 19-14
Circuit Group Query from User - Normal Case
If the started timer expires, HP OpenCall SS7 ISUP sends back a
MAINTENANCE_SYSTEM_IND primitive indicating T28_TIMEOUT as shown
in Figure 19-15, “Circuit Group Query from User - Failure (T28
Timeout).”
Figure 19-15
Chapter 19
Circuit Group Query from User - Failure (T28 Timeout)
709
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
When the local circuit state is incoming busy or outgoing busy, and the
remote circuit is idle or unequipped, the behavior of
HP OpenCall SS7 ISUP is as shown in Figure 19-16, “Circuit Group
Query from User - Error in Processing State - Case 1.”
Figure 19-16
Circuit Group Query from User - Error in Processing State - Case
1
NOTE
It is the application’s responsibility to release any interconnected
circuits.
710
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
When the local circuit state is idle or unequipped, and the remote circuit
is incoming busy or outgoing busy, the behavior of
HP OpenCall SS7 ISUP is as shown in Figure 19-17, “Circuit Group
Query from User - Error in Processing State - Case 2.”
Figure 19-17
Chapter 19
Circuit Group Query from User - Error in Processing State - Case
2
711
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
When the local and remote circuit states are both incoming busy or both
outgoing busy, the behavior of HP OpenCall SS7 ISUP is as shown in
Figure 19-18, “Circuit Group Query from User - Error in Processing
State - Case 3.”
Figure 19-18
712
Circuit Group Query from User - Error in Processing State - Case
3
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
When the local circuit state is unequipped, and the remote circuit is
active (that is, not locally or remotely blocked, and not unequipped or
transient), the behavior of HP OpenCall SS7 ISUP is as shown in
Figure 19-19, “Circuit Group Query from User - Error in Maintenance
State - Case 1.”
Figure 19-19
Chapter 19
Circuit Group Query from User - Error in Maintenance State Case 1
713
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
When the local circuit state is not locally blocked, and the remote circuit
is unequipped, the behavior of HP OpenCall SS7 ISUP is as shown in
Figure 19-20, “Circuit Group Query from User - Error in Maintenance
State - Case 2.”
Figure 19-20
714
Circuit Group Query from User - Error in Maintenance State Case 2
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
When the local circuit state is remotely blocked, and the remote circuit is
not locally blocked, the behavior of HP OpenCall SS7 ISUP is as shown
in Figure 19-21, “Circuit Group Query from User - Error in Maintenance
State - Case 3.”
Figure 19-21
Chapter 19
Circuit Group Query from User - Error in Maintenance State Case 3
715
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
When the local circuit state is locally blocked, and the remote circuit is
not remotely blocked, the behavior of HP OpenCall SS7 ISUP is as
shown in Figure 19-22, “Circuit Group Query from User - Error in
Maintenance State - Case 4.”
The behavior after sending the BLO message is the same as after a user
initiated BLOCKING_REQ.
Figure 19-22
716
Circuit Group Query from User - Error in Maintenance State Case 4
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
When the local circuit state is not locally blocked, and the remote circuit
is remotely blocked, the behavior of HP OpenCall SS7 ISUP is as shown
in Figure 19-23, “Circuit Group Query from User - Error in Maintenance
State - Case 5.”The behavior after sending the BLO message is the same
as after a user initiated UNBLOCKING_REQ.
Figure 19-23
Chapter 19
Circuit Group Query from User - Error in Maintenance State Case 5
717
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Group Query
When the local circuit state is not remotely blocked, and the remote
circuit is locally blocked, the behavior of HP OpenCall SS7 ISUP is as
shown in the Figure 19-24, “Circuit Group Query from User - Error in
Maintenance State - Case 6.”
Figure 19-24
718
Circuit Group Query from User - Error in Maintenance State Case 6
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Validation
Circuit Validation
Circuit Validation from Network
In this example, a Circuit Validation Test message (CVT) is received from
the network. Because the information requested by the CVT is only
known to the application, HP OpenCall SS7 ISUP simply informs the
latter using a CIRCUIT_VALIDATION_IND. The application may check
that the circuit translation exists and prepares the Circuit Validation
Response Message (CVR), which it sends using the primitive
CIRCUIT_VALIDATION_RESP. The CVR message is then sent back to the
network.
Figure 19-25
Chapter 19
Circuit Validation from Network
719
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Validation
Circuit Validation from User
Circuit Validation from User - Normal Case
In this example, the user (application) sends a
CIRCUIT_VALIDATION_REQ to HP OpenCall SS7 ISUP which then starts
T_CVT and sends a Circuit Validation Test message (CVT) to the
network.
When a Circuit Validation Response message (CVR) is received from the
network, HP OpenCall SS7 ISUP stops T_CVT and informs the
application using a CIRCUIT_VALIDATION_CONF primitive.
Figure 19-26
720
Circuit Validation from User - Normal Case
Chapter 19
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Validation
Circuit Validation from User - Test Failed - Two T_CVT Timeouts
In this example, the user (application) sends a
CIRCUIT_VALIDATION_REQ to HP OpenCall SS7 ISUP which then starts
T_CVT and sends a Circuit Validation Test message (CVT) to the
network.
On the first T_CVT timeout, another CVT message is sent to the network.
On the second T_CVT timeout, HP OpenCall SS7 ISUP informs the
application using a MAINTENANCE_SYSTEM_IND with indication
CIRCUIT_VALIDATION_TEST_FAILED.
Figure 19-27
Chapter 19
Circuit Validation from User - Test Failed - Two T_CVT Timeouts
721
ISUP Circuit Maintenance - Procedures Specific to ANSI
Circuit Validation
Circuit Validation from User - Test Failed -CVR Received Before
Second T_CVT Timeout
In this example, the user (application) sends a
CIRCUIT_VALIDATION_REQ to HP OpenCall SS7 ISUP which then starts
T_CVT and sends a Circuit Validation Test message (CVT) to the
network.
When T_CVT times out, another CVT message is sent to the network.
Subsequently a CVT message is received from the network,
HP OpenCall SS7 ISUP stops T_CVT and informs the application using
a CIRCUIT_VALIDATION_CONF primitive.
Figure 19-28
722
Circuit Validation from User - Test Failed -CVR Received Before
Second T_CVT Timeout
Chapter 19
20
ISUP Circuit Maintenance Procedures Specific to ITU-T
This chapter describes circuit maintenance procedures that are specific
to ITU-T.
Chapter 20
723
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Overview
Overview
The circuit maintenance processes described in this chapter include:
724
•
circuit blocking and unblocking
•
circuit group blocking and unblocking
•
circuit group query
•
circuit validation
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Blocking/Unblocking from a Network
Circuit Blocking/Unblocking from a Network
The blocking and unblocking mechanisms allow traffic to be removed
from, and then returned to, specific circuits.
Circuit Blocking from a Network - Normal Case
In this case, the circuit is put in the xxx_MN_REMOTELY_BLOCKED state.
Figure 20-1
Chapter 20
Circuit Blocking from Network - Normal Case
725
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Blocking/Unblocking from a Network
Circuit Blocking from User - Normal Case
In this case, the circuit is put in the xxx_MN_LOCALLY_BLOCKED state.
Figure 20-2
726
Circuit Blocking from User - Normal Case
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Blocking/Unblocking from a Network
Circuit Unblocking from Network - Normal Case
In this case, the message only unblocks a maintenance-oriented blocked
circuit.
Figure 20-3
Circuit Unblocking from Network - Normal Case
Circuit Unblocking from User - Normal Case
Figure 20-4
Chapter 20
Circuit Unblocking from User - Normal Case
727
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Blocking/Unblocking from a Network
Circuit Unblocking from a Network on Reception of
an IAM
A circuit which is remotely blocked (maintenance-oriented or
hardware-oriented) is automatically unblocked on reception of an IAM,
not being a test call.
The application is warned through a MAINTENANCE_SYSTEM_IND
primitive indicating MN_UNBLOCKING or HW_UNBLOCKING, depending on
the state of the circuit.
Figure 20-5
728
Circuit Unblocking on Reception of IAM
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Blocking/Unblocking from a Network
Circuit Blocking during Setup Procedure
The reception of a BLO during the setup procedure (wait_for_ACM state)
triggers a release of the circuit. The application is informed through a
START_RELEASE_IND primitive indicating BLOCKING. On reply with a
START_RELEASE_IND_ACK, the REL message is sent to the network, and a
RELEASE_CONF primitive is issued to the application by
HP OpenCall SS7 ISUP on receipt of the RLC message.
Figure 20-6
Chapter 20
Circuit Blocking during Call Setup
729
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Circuit Group Blocking/Unblocking
ITU-T based HP OpenCall SS7 ISUP handles both types of Group
Blocking messages:
•
Group Blocking for maintenance reasons
•
Group Blocking for hardware reasons
Group Blocking (Maintenance Oriented) from
Network Normal Case
In this scenario, a CGB message is received from the network. The
message specifies that maintenance group blocking should be
performed. Consequently, HP OpenCall SS7 ISUP:
NOTE
730
•
issues a GROUP_BLOCKING_IND primitive
•
issues a MAINTENANCE_SYSTEM_IND primitive indicating
MN_GROUP_BLOCKING
•
upon receipt of a GROUP_BLOCKING_RESP primitive, sends back the
acknowledgment message CGBA
•
marks all circuits as maintenance remotely blocked
For ITU97 mode, the MAINTENANCE_SYSTEM_IND indication is received
prior to the GROUP_BLOCKING_IND indication.
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Figure 20-7
Chapter 20
Maintenance Group Blocking - Normal Case
731
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Group Blocking (Hardware Oriented) from Network Normal Case
In this scenario, a CGB is received from the network and the CGB is
requesting a Hardware oriented blocking operation. As a result,
HP OpenCall SS7 ISUP:
•
issues a HW_GROUP_BLOCKING_IND primitive to the application
•
issues a MAINTENANCE_SYSTEM_IND indicating HW_GROUP_BLOCKING
•
waits for the HW_GROUP_BLOCKING_RESP from the application and
sends a CGBA message back to the network
•
marks all circuits as remotely blocked
NOTE
For ITU97 mode, the MAINTENANCE_SYSTEM_IND indication is received
prior to the GROUP_BLOCKING_IND indication.
Figure 20-8
Hardware-Oriented Group Blocking - Normal Case
732
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Group Blocking (Maintenance Oriented) from User Normal Case
In this scenario, a maintenance GROUP_BLOCKING_REQ request is sent by
the user. Consequently, HP OpenCall SS7 ISUP:
•
sends the CGB message to the network
•
sends a MAINTENANCE_SYSTEM_IND (MN_GROUP_BLOCKING) to the
application
•
waits for the CGBA message and issues a GROUP_BLOCKING_CONF
(CGBA) primitive to the application
•
marks all circuits as MN_LOCALLY_BLOCKED
The rangeAndStatus parameter is interpreted in the same way as for
the CGB message.
NOTE
A RELEASE_IND caused by a HW_GROUP_BLOCKING does not need
a RELEASE_RESP.
Figure 20-9
Group Blocking from User - Normal Case
Chapter 20
733
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Group Blocking (Hardware Oriented) from User Normal Case
In this scenario, a hardware HW_GROUP_BLOCKING_REQ request is sent by
the user. Consequently, HP OpenCall SS7 ISUP:
•
sends the CGB message to the network
•
waits for the CGBA message and issues a
HW_GROUP_BLOCKING_CONF(CGBA) primitive to the application
•
marks all circuits as hardware locally blocked
The rangeAndStatus parameter is interpreted in the same way as for
the CGB message.
Figure 20-10
734
Group Blocking from User - Normal Case
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Group Unblocking (Maintenance Oriented) from
Network Normal Case
In this scenario, a CGU is received from the network. As a result,
HP OpenCall SS7 ISUP:
•
informs the application using GROUP_UNBLOCKING_IND
•
waits for the GROUP_UNBLOCKING_RESP, and upon receipt of it, sends
a CGUA back to the network primitive to the application
•
marks each of the latter unblocked
A maintenance blocked condition can only be removed by a maintenance
oriented group unblocking message.
The rangeAndStatus parameter is interpreted in the same way as for
the CGB message.
Figure 20-11
Chapter 20
Group Unblocking from Network - Normal Case
735
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Group Unblocking (Hardware Oriented) from
Network Normal Case
In this scenario, a CGU requesting hardware oriented unblocking is
received from the network. As a result, HP OpenCall SS7 ISUP:
•
informs the application using HW_GROUP_UNBLOCKING_IND
•
waits for the HW_GROUP_UNBLOCKING_RESP, and upon receipt of it,
sends a CGUA back to the network primitive to the application
•
marks each of the latter unblocked
A hardware blocked condition can only be removed by a hardware
oriented group unblocking message.
The rangeAndStatus parameter is interpreted in the same way as for
the CGB message.
Figure 20-12
736
Group Unblocking from Network - Normal Case
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Group Unblocking (Maintenance Oriented) from User
Normal Case
In this scenario, a GROUP_UNBLOCKING_REQ request is sent by the user.
Consequently, HP OpenCall SS7 ISUP:
Figure 20-13
Chapter 20
•
sends the CGU message associated with the primitive to the network
•
waits for the CGUA message from the network and issues a
GROUP_UNBLOCKING_CONF primitive to the application
•
marks all circuits locally unblocked
Group Unblocking from User - Normal Case
737
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Group Unblocking (Hardware Oriented) from User Normal Case
In this scenario, an HW_GROUP_UNBLOCKING_REQ request is sent by the
user. Consequently, HP OpenCall SS7 ISUP:
Figure 20-14
738
•
sends the CGU message associated with the primitive to the network
•
waits for the CGUA message from the network and issues an
HW_GROUP_UNBLOCKING_CONF primitive to the application
•
marks all circuits locally unblocked
Group Unblocking from User - Normal Case
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Group Blocking (Maintenance Oriented)
During Call Setup Procedure
If one of the circuits present in the CGB message received from the
network has issued a SETUP_REQ, an immediate release procedure is
engaged by HP OpenCall SS7 ISUP.
Consequently, a SETUP_FAILURE_IND indicating BLOCKING is issued to
the application.
Figure 20-15
Chapter 20
Group Blocking during Call Setup
739
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Blocking/Unblocking
Group Blocking (Hardware Oriented)
During Call Setup Procedure
If one of the circuits present in the CGB message received from the
network has issued a SETUP_REQ, an immediate release procedure is
engaged by HP OpenCall SS7 ISUP.
Consequently, a SETUP_FAILURE_IND indicating BLOCKING is issued to
the application.
Figure 20-16
740
Group Blocking during Call Setup
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Query
Circuit Group Query
Circuit Group Query from the Network
Here, the network initiates a circuit group query by sending a Circuit
Query message (CQM). HP OpenCall SS7 ISUP can process the request
internally without interfering with the application. Therefore, no
indication is issued to the latter. Each circuit of the group selected is
examined, and its status is returned in the Circuit State Indicator
parameter of the Circuit Query Response Message (CQR). If the circuit is
not found, it is considered unequipped.
rangeAndStatus parameter interpretation:
Figure 20-17
Chapter 20
•
if range is 0, the group is reduced to a single circuit
•
if range is not 0, a list is built from the message CIC, up to the range
value + 1
Circuit Group Query - from Network
741
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Query
Circuit Group Query from Application
For ITU-T based HP OpenCall SS7 ISUP, the application is allowed to
activate a circuit group query procedure by creating a CQM message,
and sending it to the network associated with a GROUP_QUERY_REQ
primitive.
HP OpenCall SS7 ISUP starts a Timer dedicated to the group query
procedure:
•
the T34 timer for the ITU-T 88 version
•
the T28 timer for all other ITU-T based flavors
Normal Case
On receipt of the answer to the CQM from the network, the received CQR
message is transmitted to the application by HP OpenCall SS7 ISUP
through a GROUP_QUERY_CONF primitive.
Figure 20-18
Circuit Group Query from User - Normal Case
Failure to Receive CQR
If the timer expires, HP OpenCall SS7 ISUP sends back a
MAINTENANCE_SYSTEM_IND primitive indicating:
742
•
the T34_TIMEOUT for the ITU-T 88 version
•
the T28_TIMEOUT for all other ITU-T based flavors
Chapter 20
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Query
Figure 20-19
Chapter 20
Circuit Group Query from User - Failure
743
ISUP Circuit Maintenance - Procedures Specific to ITU-T
Circuit Group Query
744
Chapter 20
A
ISUP Library Values
This appendix lists the AdditionalInfo values that can be returned by the
ISUP Library in certain ANSI and ITU-T -based scenarios.
Appendix A
745
ISUP Library Values
ANSI-based HP OpenCall SS7 ISUP
ANSI-based HP OpenCall SS7 ISUP
Table A-1
SETUP_FAILURE_IND
Value
Comments
DUAL_SEIZURE
The application, unaware that ISUP has already
received an IAM message on the same circuit, sent a
SETUP_REQ
COT_FAILURE
A continuity check (incoming or outgoing) failed
FLOW_CONTROL
T7 timeout popped, when in outbound flow control state
Table A-2
START_RESET_IND
Value
Comments
UNEXPECTED_MESSAGE
Received an unexpected message while in states where
a reset procedure must be engaged (see recommended
SDLs).
T5_TIMEOUT
T5 timeout expired.
COT_CC_NOT_REQUIRED
Received a COT message while continuity was not
required on the corresponding circuit.
MTP_UNAVAILABLE
See NOTE * below.
DPC_UNAVAILABLE
See NOTE * below.
BLOCKING_WITH_RELEASE
Handled a CGB message requesting immediate release.
See NOTE * below.
TCCRr_TIMEOUT
TCCRr timeout expired for incoming continuity
recheck.
T27_TIMEOUT
T27 timeout expired for incoming continuity recheck.
T34_TIMEOUT
T34 timeout expired for incoming continuity recheck.
DCO_LPA_FAIL
LPA was not received within the TCCRr timer for
outgoing continuity recheck.
746
Appendix A
ISUP Library Values
ANSI-based HP OpenCall SS7 ISUP
Table A-2
START_RESET_IND (Continued)
Value
Comments
UNEQUIPPED_CIRCUIT
Received a UCIC on a circuit that is not Idle regarding
the CPC state machine.
TIMER_SHORTAGE
when trying to start a T6, T7, T8, or T_CRA timer, there
is no timer available and the corresponding circuit is
not idle with regard to the CPC state machine.
NOTE
* No RESET_CONF indication should be awaited after a
START_RESET_IND with these cause values.
Table A-3
START_RELEASE_IND
Value
UNEXPECTED_RLC
Comments
RLC was received while in unexpected states (see SDL
diagrams):
CPCI:
•
Wait for COT and IAM
•
Wait for IAM
•
Wait for COT
•
Wait for OGC complete
•
Wait for Answer
•
ICC answered
•
ICC suspended
CPCO:
T6_TIMEOUT
Appendix A
•
Wait for continuity reports
•
Wait for address complete
•
Wait for answer
T6 timer expired
747
ISUP Library Values
ANSI-based HP OpenCall SS7 ISUP
Table A-3
START_RELEASE_IND (Continued)
Value
Comments
T7_TIMEOUT
T7 timeout expired
T8_TIMEOUT
T8 timeout expired
T33_TIMEOUT
T33 timeout expired
T_CRA_TIMEOUT
TCRA expired
BLOCKING
CPCO:
•
BLO/CGB (without release) received in Wait for
continuity reports
•
BLO/CGB (without release) received in Wait for
address complete
T1_TIMEOUT
T1 expired during outgoing continuity recheck
DCO_SUCCESS
Continuity recheck was successful.
STOP_REQ
Continuity recheck was stopped by the application.
Table A-4
MAINTENANCE_SYSTEM_IND
Value returned
Comments
T13_TIMEOUT
T13 timer expired (BLS)
T15_TIMEOUT
T15 timeout expired (BLS)
T23_TIMEOUT
T23 first expiry (CGRS)
T5_TIMEOUT
T5 timeout expired
COT_RECEIVED
Received a COT with first time indicator=on during
incoming continuity recheck
T5_TIMEOUT
T5 expired during outgoing continuity recheck
DCO_FAIL
Outgoing continuity recheck failed (T24 timeout)
with first time indicator=on
DCO_SUCCESS
Outgoing continuity recheck succeeded with first
time indicator=on
748
Appendix A
ISUP Library Values
ANSI-based HP OpenCall SS7 ISUP
Table A-4
MAINTENANCE_SYSTEM_IND (Continued)
Value returned
Comments
STOP_REQ
The application sent STOP_REQ during outgoing
continuity recheck
T17_TIMEOUT
T17 expired
RSC_AFTER_T17
Received RSC while CRS state machine was in the
Wait for RLC state
CRS_STOP
CRS state machine stopped while waiting for RLC
message
RLC_AFTER_T17
Received RLC while the CRS state machine was in
the Wait for RLC state
T19_TIMEOUT
T19 timer expired (GBUS)
T21_TIMEOUT
T21 timer expired (GBUS)
T18_NOT_RUNNING
CGBA received while T18 was not running in Wait
for CGBA states on the GBUS state machine
WRONG_STATUS_BITS
CGBA/CGUA received while the GBUS state
machine was in Wait for CGBA/CGUA states and
too many or too few bits were set in status
T20_NOT_RUNNING
CGUA received while T20 is not running in Wait for
CGUA states on the GBUS state machine
UNEQUIPPED_CIRCUIT
UCIC received.
TIMER_SHORTAGE
Too many timers is use, no more timers available.
NON_ISDN_ACCESS_INDICATION
An address complete message is received with the
ISDN access indicator set to NON_ISDN (ITU-T
TTC3 only).
CIRCUIT_VALIDATION_TEST_FAI
LED (second time)
Circuit validation test failed. T_CVT timeout for the
second time.
RECV_ON_UNEQUIPPED_CIRCUIT
A message is received on a non configured or
unequipped circuit.
Appendix A
749
ISUP Library Values
ITU-T - based HP OpenCall SS7 ISUP
ITU-T - based HP OpenCall SS7 ISUP
Table A-5
SETUP_FAILURE_IND
Value
Comments
T27_TIMEOUT
T27 expired while in Wait for CCR state
DUAL_SEIZURE
•
IAM received while sending
CONTINUITY_RECHECK_REQ (CRCS state
machine)
•
IAM received while sending SETUP_REQ
CPC_BUSY
CONTINUITY_RECHECK_REQ requested while the
circuit was not IDLE
BLOCKING
•
CGB (Maintenance) has been sent through
GROUP_BLOCKING_REQ in WaitForContinuity
State (CPCI)
•
CGB (Maintenance) has been sent through
GROUP_BLOCKING_REQ in WaitForACM State
(CPCI)
•
CGB (Maintenance) has been received while in
WaitForACM State (CPCO)
•
CGB (Maintenance) has been received while in
WaitForContinuity State (CPCO)
•
CGB (Hardware) has been sent through
HW_GROUP_BLOCKING_REQ in
WaitForContinuity State (CPCI)
•
CGB (Hardware) has been received while in
WaitForContinuity State (CPCO)
•
COT indicating failure was received in
WaitForContinuity State (CPCI)
•
COT indicating failure was sent during outgoing
continuity recheck
RELEASE
COT_FAILURE
750
Appendix A
ISUP Library Values
ITU-T - based HP OpenCall SS7 ISUP
Table A-5
SETUP_FAILURE_IND (Continued)
Value
ITU97 only (CRCR state machine):
CRCR_RESET
•
RSC received while waiting for Continuity (CCR)
•
GRS received while waiting for Continuity (CCR)
•
A Reset occurred while waiting for Continuity
(CCR)
In WaitForACM State (CPCO) in flow control condition
(T7 expiry+outbound flow control)
FLOW_CONTROL
Table A-6
Comments
START_RESET_IND
Value
UNEXPECTED_MESSAGE
Comments
•
ACM, ANM, CON, CPG, FOT, RES, SAM, SUS,
INR, INF, PAM, FAR, FRJ, FAA, COT received in
IDLE State
•
IAM, ACM, CON, ANM, CPG, FOT, RES, SUS, INR,
PAM, FAR, FAA, FRJ received in
WaitForContinuity State (CPCI)
•
IAM, ACM, ANM, CON, CPG, FOT, RES, SUS,
FAR, FRJ, FAA, COT received in WaitForACM
(CPCI)
•
ANM, FOT, RES, SAM, SUS, FAR, FRJ, FAA
received in WaitForACM (CPCI)
•
ACM, ANM, CON, CPG, FOT, RES, SAM, SUS,
FAR, FAA, FRJ received in WaitForContinuity
(CPCO)
COT_CC_NOT_REQUIRED
COT received when not awaited
UNEQUIPPED_CIRCUIT
Received a UCIC on a circuit that is not Idle regarding
the CPC state machine.
In this case, the application should not wait for a
RESET_CONF.
Appendix A
751
ISUP Library Values
ITU-T - based HP OpenCall SS7 ISUP
Table A-6
START_RESET_IND (Continued)
Value
TIMER_SHORTAGE
Table A-7
Comments
•
when trying to start a T2, T6, T7, T8, T9, T33, or
T_CRA timer, there is no timer available and the
corresponding circuit is not idle regarding the CPC
state machine.
•
when trying to start a T34 timer, there is no timer
available and the SSC state machine is not in the
idle state (TTC3, SSUR, and ITU97 only).
START_RELEASE_IND
Value
Comments
CONTINUITY_SUCCESS
BackwardCheckTone received in
WaitForBackwardCheckTone, after
ENABLE_ECHO_IND_ACK received
UNEXPECTED_RLC
•
RLC received in WaitForACM, WaitForANM,
ACTIVE, Suspended States (CPCI)
•
RLC received in WaitForACM, WaitForANM,
ACTIVE, Suspended States (CPCO)
•
RLC received in WaitForContinuity (CPCI, CPCO)
•
RLC received after IAM received (CPCI)
•
BLO received in WaitForACM (CPCO)
•
BLO received in WaitForContinuity (CPCO)
BLOCKING
T2_TIMEOUT
T2 timer expired
T6_TIMEOUT
T6 timer expired
T8_TIMEOUT
T8 timer expired
T7_TIMEOUT
T7 timer expired
T9_TIMEOUT
T9 timer expired
T33_TIMEOUT
T33 timer expired
752
Appendix A
ISUP Library Values
ITU-T - based HP OpenCall SS7 ISUP
Table A-8
MAINTENANCE_SYSTEM_IND
Value
Comments
UNEQUIPPED_CIRCUIT
UCIC received.
TIMER_SHORTAGE
Too many timers is use, no more timers available.
RECV_ON_UNEQUIPPED_CIRCUIT
A message is received on a non configured or
unequipped circuit.
MGBS/HGBS state machine
MN_GROUP_BLOCKING
•
GROUP_BLOCKING_REQ has been sent (MGBS
only)
•
in WaitForCGUA State, CGUA received and
CGUA != CGU status bits (ITU-T 93/97 ONLY)
MN_GROUP_UNBLOCKING
In WaitForCGBA State, CGBA received and CGBA !=
CGB status bits (ITU-T 93/97 ONLY)
HW_GROUP_BLOCKING
HW_GROUP_BLOCKING_REQ has been sent
(HGBS only)
HW_GROUP_UNBLOCKING
ITU97 only (and all standards based on ITU97),
HGBS state machine:
T19_TIMEOUT
Appendix A
•
on CGBA receipt in Idle state, generated for each
circuit not hardware locally blocked
•
on WaitForCGBA state, generated for each circuit
not asked to be blocked in the CGB and marked
as blocked in the CGBA statusBits (that is, CGB
status bits < CGBA status bits)
•
on WaitForCGUA state, generated for each circuit
not asked to be unblocked in the CGU and
marked as unblocked in the CGUA status bits
(that is, CGU status bits < CGUA status bits)
•
on WaitForCGUA state, generated if not all
circuits are acknowledged in the CGUA status
bits (that is, CGU status bits > CGUA status bits)
(only one notification)
First T19 expiry
753
ISUP Library Values
ITU-T - based HP OpenCall SS7 ISUP
Table A-8
MAINTENANCE_SYSTEM_IND (Continued)
Value
Comments
T21_TIMEOUT
First T21 expiry
T18_NOT_RUNNING
In WaitForCGBA State, after CGBA is received,
CGB=CGBA (status bits), and T18 timer is not
running
PRIORITY_TO_GROUP_RESET
In WaitForCGBA or WaitForCGUA State, after GRS
sent through GROUP_RESET_REQ, CGB<=GRS or
CGU<=GRS
T20_NOT_RUNNING
In WaitForCGUA State, after CGUA is received,
CGU=CGUA (status bits), and T20 timer is not
running
MGBR state machine
MN_BLOCKING
GROUP_BLOCKING_IND received
HGBR state machine
HW_BLOCKING
HW_GROUP_BLOCKING_IND received
HRB state machine
HW_UNBLOCKING
RSC/ GRS are sent (through
RESET_REQ/GROUP_RESET_REQ) or received in
remotely blocked state
HLB state machine
HW_UNBLOCKING
RSC/GRS are sent (through
RESET_REQ/GROUP_RESET_REQ) in locally
blocked state
CRS state machine
T17_TIMEOUT
First T17 expiry
RLC_AFTER_T17
RLC received in WaitForRelease state and T16 not
running
CRCS state machine
754
Appendix A
ISUP Library Values
ITU-T - based HP OpenCall SS7 ISUP
Table A-8
MAINTENANCE_SYSTEM_IND (Continued)
Value
Comments
T5_TIMEOUT
T5 timer expired
T24_TIMEOUT
T24 timer expired in WaitForBackwardChecktone
and check indicator=2
BACKWARD_CHECK_TONE_ACK
BackwardCheckTone received and check indicator=3,
after ENABLE_ECHO_IND_ACK received
CRCR state machine
COT_RECEIVED
COT failure received in WaitForREL state and check
indicator=2
REL_RECEIVED
REL received in WaitForREL state and check
indicator=3
CQS state machine
T34_TIMEOUT
T34 timer expired (ITU-T 88 and TTC ONLY)
T28_TIMEOUT
T28 timer expired (ITU-T 93/97 ONLY)
BLS state machine
MN_BLOCKING
BLOCKING_REQ sent
T12_NOT_RUNNING
In WaitForBLA State, BLA received and T12 timer
not running
T13_TIMEOUT
First T13 expiry
MN_UNBLOCKING
After RSC/GRS sent (through
RESET_REQ/GROUP_RESET_REQ) in WaitForBLA
or LocallyBlocked state
T14_NOT_RUNNING
In WaitForUBA State, UBA received and T14 timer
not running
T15_TIMEOUT
First T15 expiry
Appendix A
755
ISUP Library Values
ITU-T - based HP OpenCall SS7 ISUP
Table A-8
MAINTENANCE_SYSTEM_IND (Continued)
Value
Comments
BLA_WHEN_IDLE
ITU97 only (for all standards based on ITU97):
A BLA is received on a circuit for which the BLS state
machine is in the Idle state (that is, no Blocking
action has been requested).
UBA_WHEN_LOCALLY_BLOCKED
ITU97 only (for all standards based on ITU97):
A UBA is received on a locally blocked circuit.
BLR state machine
MN_BLOCKING
MN_UNBLOCKING
•
BLO received in IDLE state
•
after GRS/GRA exchange and status bits in GRA
=1
•
RSC sent or received, GRS received in
WaitForBLA or remotely blocked state
•
IAM received in remotely blocked state
CPC state machine
T5_TIMEOUT
T5 timer expired
CGRS state machine
T22_NOT_RUNNING
In WaitForGRA state, after GRA received and T22
timer not running
T23_NOT_RUNNING
First T23 timer expiry
756
Appendix A
B
TUP Addendum
This appendix contains a description of TUP (Telephone User Part) as
supported by HP OpenCall SS7 TUP. The description is based on the
description of HP OpenCall SS7 ISUP given in the rest of this guide.
Appendix B
757
TUP Addendum
How to Use This Addendum
How to Use This Addendum
There are many similarities between HP OpenCall SS7 TUP and
HP OpenCall SS7 ISUP. This addendum is written to take advantage of
these similarities.
This addendum does not contain a complete description of
HP OpenCall SS7 TUP. Instead, it describes HP OpenCall SS7 TUP in
terms of the differences between it and HP OpenCall SS7 ISUP.
Functionality Identical to HP OpenCall SS7 ISUP
If a functionality of HP OpenCall SS7 TUP is identical to the
corresponding functionality of HP OpenCall SS7 ISUP, its description is
not repeated in this addendum. Instead, an explicit cross-reference is
made to the description of the corresponding HP OpenCall SS7 ISUP
functionality in the body of this guide.
Consequently, while reading this addendum, you must refer to the rest of
this guide as and when necessary.
Functionality Not Identical to HP OpenCall SS7 ISUP
If there is a difference in a functionality between HP OpenCall SS7 TUP
and HP OpenCall SS7 ISUP, then the HP OpenCall SS7 TUP
functionality is fully described in this addendum.
758
Appendix B
TUP Addendum
Flavors Supported by HP OpenCall SS7 TUP
Flavors Supported by HP OpenCall SS7 TUP
This addendum describes the flavors supported by
HP OpenCall SS7 TUP. The following terms are used:
CTUP
to refer to the ITU-T TUP China flavor,
Recommendations Q721 to Q725.
ITUP
to refer to the ITU-T TUP Blue Book flavor,
Recommendations Q721 to Q725.
Unless explicitly indicated otherwise (for example, by phrases such as
not supported in CTUP or CTUP Only, and not supported in ITUP or
ITUP Only), the contents of this addendum applies to both flavors.
NOTE
The term TUP is used to refer to generic TUP, that is, not specific to a
particular flavor.
If the contents of a Table or a Figure is specific to a particular flavor, then
its title includes the words CTUP Only or ITUP Only as appropriate.
Table B-1 lists the main differences between the two flavors supported.
Table B-1
Main Differences Between the CTUP and ITUP Flavors
Item
CTUP (China
Flavor)
ITUP (ITU-T
Flavor)
ANU (Answer Signal Unqualified)
message, associated with the SETUP
primitive.
Not supported.
Supported.
Charging messages:
CCC, CCG, CHA, CHG, PCC and TRG.
Not supported.
Supported.
Charging primitives:
CHARGING_REQ, CHARGING_IND,
CHARGING_RESP, and CHARGING_CONF.
Not supported.
Supported.
Length of CIC field.
12 bits (that is, 16
minus 4 bits for the
spare field).
12 bits (no spare
field).
Appendix B
759
TUP Addendum
Flavors Supported by HP OpenCall SS7 TUP
Table B-1
Main Differences Between the CTUP and ITUP Flavors
Item
CTUP (China
Flavor)
ITUP (ITU-T
Flavor)
Closed User Group Information in IAI
message
Not supported.
Supported.
DPC and OPC formats.
Integer or a.b.c
format.
Integer (ITU-T)
format.
24 bits.
14 bits.
MAL (Malicious Call Identification)
message.
Supported
Not supported.
MPM (Metering Pulse Signal) message.
Supported.
Not supported.
METERING_PULSE_REQ primitive.
Supported.
Not supported.
OPR (Operator Signal) message.
Supported.
Not supported.
SLB (Subscriber Local Busy) message.
Supported.
Not supported.
Consequently, SLB is
not in the list of the
possible UBM
messages.
STB (Subscriber Toll Busy) message.
Supported.
Not supported.
Consequently, STB is
not in the list of
possible UBM
messages.
UBM (Unsuccessful Backward Setup)
messages.
The UBM messages
are:
ACB, ADI, CFL, CGC,
DPN, EUM, LOS, NNC,
SEC, SLB, SSB, SST,
STB, and UNN.
The UBM messages
are:
ACB, ADI, CFL, CGC,
DPN, EUM, LOS, NNC,
SEC, SSB, SST, and
UNN.
DPC and OPC range fields.
760
Appendix B
TUP Addendum
Introduction
Introduction
This section introduces the HP OpenCall SS7 TUP system.
Overview
HP OpenCall SS7 TUP supports applications requiring access to the SS7
network via TUP. It relies on MTP Level 3 functionality to transfer its
messages through the SS7 network to the destination end point. As a
member of the HP OpenCall SS7 family, HP OpenCall SS7 TUP accesses
the SS7 network via an HP OpenCall SS7 stack.
Currently HP OpenCall SS7 TUP does not interface with SCCP, as most
applications do not require end-to-end signaling using SCCP services.
Software Versions
HP OpenCall SS7 TUP software supports the following flavors:
•
CTUP (China flavor)
•
ITUP (ITU-T flavor)
The description in this addendum applies to both flavors except where
the contrary is explicitly stated.
See also “Flavors Supported by HP OpenCall SS7 TUP” on page 759.
Software Components
HP OpenCall SS7 TUP contains both generic software components and
version specific software components.
HP OpenCall SS7 TUP is similar to HP OpenCall SS7 ISUP except TUP
has just 2 flavors and no message sets.
See also “Flavors Supported by HP OpenCall SS7 TUP” on page 759.
Appendix B
761
TUP Addendum
Introduction
Conventions Used in Diagrams
The diagrams in this chapter use the following convention:
Prmt_Name(xxx)
Where:
Prmt_Name
Is the primitive name
xxx
Is the message type
In these diagrams, the term “Signaling Network” refers to a network
capable of transporting MSUs. This may be an SS7 network or an IP
network (using SIGTRAN).
762
Appendix B
TUP Addendum
Application Development Guidelines
Application Development Guidelines
This section contains general guidelines for developing applications on
top of the HP OpenCall SS7 TUP API.
The equivalent information for HP OpenCall SS7 ISUP is in Chapter 2,
“General System Guidelines.”
Designing for System Predictability
This is as for HP OpenCall SS7 ISUP, see “Designing for System
Predictability” on page 58.
Optimizing OS Performance
This is as for HP OpenCall SS7 ISUP, see “Optimizing OS Performance”
on page 59.
Techniques for Performance Optimization
This is as for HP OpenCall SS7 ISUP, see “Techniques for Performance
Optimization” on page 60.
System Test and Validation
This is as for HP OpenCall SS7 ISUP, see “System Test and Validation”
on page 61.
Object Orientation Guidelines
This is as for HP OpenCall SS7 ISUP, see “Object Orientation
Guidelines” on page 763.
Appendix B
763
TUP Addendum
Application Development Guidelines
Archive and Shared Libraries
The TUP API is available both as an archive library and as a shared
library.
To know the compile and link directives to use for the archive and shared
libraries, refer to the TUP API tutorial (see “TUP Tutorial Programs” on
page 899).
764
Appendix B
TUP Addendum
Using the API
Using the API
This section describes how to open, close, and use the SS7 stack
connection via the HP OpenCall SS7 TUP API.
The equivalent information for HP OpenCall SS7 ISUP is in Chapter 12,
“Using the ISUP API.”
Introduction
This is as for HP OpenCall SS7 ISUP, see “Introduction” on page 444.
Connections
This is as for HP OpenCall SS7 ISUP, see “Connections” on page 450.
SS7 Stack Access
This is as for HP OpenCall SS7 ISUP, see “SS7 Stack Access” on
page 451.
API Structure
This is as for HP OpenCall SS7 ISUP, see “API Structure” on page 460.
Outline of the Basic Application
This is as for HP OpenCall SS7 ISUP, see “Outline of the Basic
Application” on page 463.
Initializing the IsupMgr Object
This is as for HP OpenCall SS7 ISUP, see “Initializing the IsupMgr
object” on page 464.
Creating and Opening a Probe Object
This is as for HP OpenCall SS7 ISUP, see “Creating and Opening a
Probe Object” on page 465.
Appendix B
765
TUP Addendum
Using the API
Scheduling Probe Objects
This is as for HP OpenCall SS7 ISUP, see “Scheduling Probe Objects” on
page 474.
Using the Activity Object
This is as for HP OpenCall SS7 ISUP, see“Using the Activity Object” on
page 477.
Exchanging Messages via Probe Objects
This is as for HP OpenCall SS7 ISUP, see “Exchanging Messages via
Probe Objects” on page 481.
Closing and Destroying a Probe Object
This is as for HP OpenCall SS7 ISUP, see “Closing and Destroying a
Probe” on page 482.
Receiving Notifications
oamReceive()
This is as for HP OpenCall SS7 ISUP, see “Receiving Notifications” on
page 484. However, the defaultGroup() accessor (referenced in the
IsupAdditional::NotifCics row of Table 12-2 on page 484) is
available in CTUP but not available in ITUP.
For detailed description of the accessor return types, consult the
IsupAdditionalInfo.h file located in the /opt/OC/include/TUP
directory.
For any IsupAdditionalInfo received, you must:
1. Get the AdditionalInfo type using getInfoType().
2. Cast the AdditionalInfo on the right class using castInfo(const
Info* P_addInfo).
3. Get information from the AdditionalInfo using the corresponding
Read Accessors.
766
Appendix B
TUP Addendum
Using the API
Return Status Values
This is as for HP OpenCall SS7 ISUP, see “Return Status Values” on
page 491.
Using Dynamic Configuration
This is as for HP OpenCall SS7 ISUP, see “Using Dynamic
Configuration” on page 494.
Appendix B
767
TUP Addendum
Exchanging Messages
Exchanging Messages
This section describes how to create, manipulate and exchange standard
ITU-T messages. It also describes the various primitives provided for
IsupSMProbe and IsupBPProbe objects.
The equivalent information for HP OpenCall SS7 ISUP is in Chapter 13,
“Exchanging ISUP Messages.”
Introduction
This is as for HP OpenCall SS7 ISUP, see “Introduction” on page 502.
Exchanging Primitives
This is as for HP OpenCall SS7 ISUP, see “Exchanging Primitives” on
page 503.
HP OpenCall SS7 TUP Primitives
This is as for HP OpenCall SS7 ISUP, see “HP OpenCall SS7 ISUP
Primitives” on page 504, except that the list of TUP primitives for State
Machine Mode is given in Table B-2 (for CTUP) and Table B-3 (for
ITUP).
State Machine Mode Primitives
Table B-2 lists the CTUP primitives for State Machine Mode. Note that
the equivalent primitives for ITUP are listed in Table B-3.
Table B-2
State Machine Mode Primitives (CTUP Only)
Primitive
CTUP
Message
SETUP_REQ
IAM or IAI
SETUP_IND
IAM or IAI
SETUP_RESP
ANN or ANC
SETUP_CONF
ANN or ANC
768
Comments
Appendix B
TUP Addendum
Exchanging Messages
Table B-2
State Machine Mode Primitives (CTUP Only) (Continued)
Primitive
CTUP
Message
This is sent by the application to
SETUP_IND primitive.
SETUP_IND_ACK
CONTINUITY_REPORT_REQ
Comments
COT or CCF
CONTINUITY_REPORT_IND
CONTINUITY_RECHECK_REQ
CCR
CONTINUITY_RECHECK_IND
CONTINUITY_RECHECK_CONF
CONNECT_LOOP_IND
CONNECT_LOOP_IND_ACK
DISABLE_ECHO_IND
DISABLE_ECHO_IND_ACK
REMOVE_LOOP_IND
REMOVE_LOOP_IND_ACK
ENABLE_ECHO_IND
ENABLE_ECHO_IND_ACK
This primitive is used to ask the
application to connect its tone loop
(Continuity-check procedures).
This primitive is used to ask the
application to disable its echo
suppressor (Continuity-check
procedures).
This primitive is used to ask the
application to remove its tone loop
(Continuity-check procedures).
This primitive is used to ask the
application to enable its echo
suppressor (Continuity-check
procedures).
BACKWARD_CHECK_TONE_ACK
This primitive is used by the
application to signal that the
backward tone has been checked
(Continuity-check procedures).
CONNECT_TRANSCEIVER_IND
This primitive is used to ask the
application to connect its
transceiver (Continuity-check
procedures).
CONNECT_TRANSCEIVER_IND_ACK
Appendix B
769
TUP Addendum
Exchanging Messages
Table B-2
State Machine Mode Primitives (CTUP Only) (Continued)
Primitive
CTUP
Message
Comments
This primitive is used to ask the
application to remove its
transceiver (Continuity-check
procedures).
REMOVE_TRANSCEIVER_IND
REMOVE_TRANSCEIVER_IND_ACK
This primitive is used to ask the
application to start checking the
backward tone (Continuity-check
procedures).
START_CHECK_TONE_IND
START_CHECK_TONE_IND_ACK
This primitive is used to ask the
application to stop checking the
backward tone (Continuity-check
procedures).
STOP_CHECK_TONE_IND
STOP_CHECK_TONE_IND_ACK
This primitive is used by the
application to signal the
disappearance of the backward
tone.
TONE_DISAPPEARS_ACK
SOLICITED_INFO_REQ
GRQ
SOLICITED_INFO_IND
GRQ
SOLICITED_INFO_RESP
GSM
SOLICITED_INFO_CONF
GSM
ADDRESS_COMPLETE_REQ
ACM
ADDRESS_COMPLETE_IND
CIP_IND
ACC
This is used to indicate the TUP
congestion level. It is equivalent
to ISUP REL with ACL.
User message
or MAL.
This primitive is used for
messages defined using the
customizing facility.
Note that MAL is not supported in
ITUP.
CIP_REQ
TUP_USR_MSG_REQ
TUP_USR_MSG_IND
770
Appendix B
TUP Addendum
Exchanging Messages
Table B-2
State Machine Mode Primitives (CTUP Only) (Continued)
Primitive
RELEASE_REQ
RELEASE_IND
RELEASE_RESP
RELEASE_CONF
CTUP
Message
CLF, CBK, CCL,
or UBM*
RLG
* = where UBM is one of the
following: ACB, ADI, CFL, CGC, DPN,
EUM, LOS,
NNC, SEC, SLB,SSB, SST, STB, or
UNN.
RLG
This primitive is used to inform
the application that the current
call is being released.
START_RELEASE_IND
START_RELEASE_IND_ACK
This primitive is used to inform
the application that the associated
circuit is being reset.
START_RESET_IND
START_RESET_IND_ACK
RESET_REQ
RSC or CLF
RESET_IND
RSC or CLF
RESET_RESP
RLG
RESET_CONF
RLG
GROUP_RESET_REQ
GRS
GROUP_RESET_IND
GRS
GROUP_RESET_RESP
GRA
GROUP_RESET_CONF
GRA
BLOCKING_REQ
BLO
BLOCKING_IND
BLO
BLOCKING_RESP
BLA
BLOCKING_CONF
BLA
Appendix B
Comments
771
TUP Addendum
Exchanging Messages
Table B-2
State Machine Mode Primitives (CTUP Only) (Continued)
Primitive
CTUP
Message
UNBLOCKING_REQ
UBL
UNBLOCKING_IND
UBL
UNBLOCKING_RESP
UBA
UNBLOCKING_CONF
UBA
GROUP_BLOCKING_REQ
MGB
GROUP_BLOCKING_IND
MGB
GROUP_BLOCKING_RESP
MGA
GROUP_BLOCKING_CONF
MGA
GROUP_UNBLOCKING_REQ
MGU
GROUP_UNBLOCKING_IND
MGU
GROUP_UNBLOCKING_RESP
MUA
GROUP_UNBLOCKING_CONF
MUA
HW_GROUP_BLOCKING_REQ
HGB
HW_GROUP_BLOCKING_IND
HGB
HW_GROUP_BLOCKING_RESP
HBA
HW_GROUP_BLOCKING_CONF
HBA
HW_GROUP_UNBLOCKING_REQ
HGU
HW_GROUP_UNBLOCKING_IND
HGU
HW_GROUP_UNBLOCKING_RESP
HUA
HW_GROUP_UNBLOCKING_CONF
HUA
SW_GROUP_BLOCKING_REQ
SGB
SW_GROUP_BLOCKING_IND
SGB
SW_GROUP_BLOCKING_RESP
SBA
SW_GROUP_BLOCKING_CONF
SBA
772
Comments
Appendix B
TUP Addendum
Exchanging Messages
Table B-2
State Machine Mode Primitives (CTUP Only) (Continued)
Primitive
CTUP
Message
SW_GROUP_UNBLOCKING_REQ
SGU
SW_GROUP_UNBLOCKING_IND
SGU
SW_GROUP_UNBLOCKING_RESP
SUA
SW_GROUP_UNBLOCKING_CONF
SUA
INFORMATION_IND
SAM or SAO
INFORMATION_REQ
SAM or SAO
This primitive is used to inform
the maintenance system of a
particular event.
MAINTENANCE_SYSTEM_IND
FORWARD_TRANSFER_REQ
FOT
FORWARD_TRANSFER_IND
FOT
OPERATOR_SIGNAL_REQ
OPR
OPERATOR_SIGNAL_IND
OPR
REANSWER_REQ
RAN
REANSWER_IND
RAN
METERING_PULSE_REQ
MPM
METERING_PULSE_IND
MPM
STOP_REQ
STOP_CONF
Appendix B
Comments
Note that OPR is not supported in
ITUP.
This primitive is used to issue a
metering pulse message (MPM) to
the application or to the network.
Note that MPM is not supported in
ITUP.
This primitive is used by the
application to ask the TUP library
to stop re-transmitting
CFL/CLF/RSC messages concerning
a circuit to the SS7 network.
773
TUP Addendum
Exchanging Messages
Table B-2
State Machine Mode Primitives (CTUP Only) (Continued)
CTUP
Message
Primitive
Comments
This primitive is used by the
application to ask the TUP library
to stop re-transmitting
CFL/CLF/RSC/GRS/MGB/HGB/SGB
messages concerning a circuit
group to the SS7 network.
GROUP_STOP_REQ
GROUP_STOP_CONF
Table B-3 lists the ITUP primitives for State Machine Mode. Note that
the equivalent primitives for CTUP are listed in Table B-2.
Table B-3
State Machine Mode Primitives (ITUP Only)
Primitive
SETUP_REQ
SETUP_IND
SETUP_RESP
SETUP_CONF
ITUP Message
IAM or IAI
IAM or IAI
ANN, ANC, or ANU
ANN, ANC, or ANU
CONTINUITY_REPORT_REQ
CONTINUITY_REPORT_IND
COT or CCF
CONTINUITY_RECHECK_REQ
CONTINUITY_RECHECK_IND
CONTINUITY_RECHECK_CONF
CCR
774
Note that ANU is not
supported in CTUP.
This is sent by the application
to acknowledge a SETUP_IND
primitive.
SETUP_IND_ACK
CONNECT_LOOP_IND
CONNECT_LOOP_IND_ACK
Comments
This primitive is used to ask
the application to connect its
tone loop (Continuity-check
procedures).
Appendix B
TUP Addendum
Exchanging Messages
Table B-3
State Machine Mode Primitives (ITUP Only) (Continued)
Primitive
ITUP Message
Comments
DISABLE_ECHO_IND
DISABLE_ECHO_IND_ACK
This primitive is used to ask
the application to disable its
echo suppressor
(Continuity-check
procedures).
REMOVE_LOOP_IND
REMOVE_LOOP_IND_ACK
This primitive is used to ask
the application to remove its
tone loop (Continuity-check
procedures).
ENABLE_ECHO_IND
ENABLE_ECHO_IND_ACK
This primitive is used to ask
the application to enable its
echo suppressor
(Continuity-check
procedures).
BACKWARD_CHECK_TONE_ACK
This primitive is used by the
application to signal that the
backward tone has been
checked (Continuity-check
procedures).
CONNECT_TRANSCEIVER_IND
CONNECT_TRANSCEIVER_IND_ACK
This primitive is used to ask
the application to connect its
transceiver (Continuity-check
procedures).
REMOVE_TRANSCEIVER_IND
REMOVE_TRANSCEIVER_IND_ACK
This primitive is used to ask
the application to remove its
transceiver (Continuity-check
procedures).
START_CHECK_TONE_IND
START_CHECK_TONE_IND_ACK
This primitive is used to ask
the application to start
checking the backward tone
(Continuity-check
procedures).
Appendix B
775
TUP Addendum
Exchanging Messages
Table B-3
State Machine Mode Primitives (ITUP Only) (Continued)
Primitive
ITUP Message
Comments
STOP_CHECK_TONE_IND
STOP_CHECK_TONE_IND_ACK
This primitive is used to ask
the application to stop
checking the backward tone
(Continuity-check
procedures).
TONE_DISAPPEARS_ACK
Primitive used by the
application to signal the
disappearance of the
backward tone.
SOLICITED_INFO_REQ
SOLICITED_INFO_IND
SOLICITED_INFO_RESP
SOLICITED_INFO_CONF
GRQ
GRQ
GSM
GSM
ADDRESS_COMPLETE_REQ
ADDRESS_COMPLETE_IND
ACM
CIP_IND
CIP_REQ
ACC
This primitive is used to
indicate the TUP congestion
level (equivalent to the ISUP
REL with ACL).
TUP_USR_MSG_REQ
TUP_USR_MSG_IND
User message
A message defined via the
TUP message customizing
facility.
RELEASE_REQ
RELEASE_IND
RELEASE_RESP
RELEASE_CONF
CLF, CBK, CCL or UBM*
CLF, CBK, CCL or UBM*
RLG
RLG
* = where UBM is one of the
following: ACB, ADI, CFL, CGC,
DPN, EUM, LOS, NNC, SEC, SSB,
SST, or UNN.
START_RELEASE_IND
START_RELEASE_IND_ACK
776
This primitive is used to
inform the application that
the current call is being
released.
Appendix B
TUP Addendum
Exchanging Messages
Table B-3
State Machine Mode Primitives (ITUP Only) (Continued)
Primitive
ITUP Message
This primitive is used to
inform the application that
the associated circuit is being
reset.
START_RESET_IND
START_RESET_IND_ACK
RESET_REQ
RESET_IND
RESET_RESP
RESET_CONF
RSC or CLF
RSC or CLF
RLG
RLG
GROUP_RESET_REQ
GROUP_RESET_IND
GROUP_RESET_RESP
GROUP_RESET_CONF
GRS
GRS
GRA
GRA
BLOCKING_REQ
BLOCKING_IND
BLOCKING_RESP
BLOCKING_CONF
BLO
BLO
BLA
BLA
UNBLOCKING_REQ
UNBLOCKING_IND
UNBLOCKING_RESP
UNBLOCKING_CONF
UBL
UBL
UBA
UBA
GROUP_BLOCKING_REQ
GROUP_BLOCKING_IND
GROUP_BLOCKING_RESP
GROUP_BLOCKING_CONF
MGB
MGB
MBA
MBA
GROUP_UNBLOCKING_REQ
GROUP_UNBLOCKING_IND
GROUP_UNBLOCKING_RESP
GROUP_UNBLOCKING_CONF
MGU
MGU
MUA
MUA
HW_GROUP_BLOCKING_REQ
HW_GROUP_BLOCKING_IND
HW_GROUP_BLOCKING_RESP
HW_GROUP_BLOCKING_CONF
HGB
HGB
HBA
HBA
Appendix B
Comments
777
TUP Addendum
Exchanging Messages
Table B-3
State Machine Mode Primitives (ITUP Only) (Continued)
Primitive
ITUP Message
HW_GROUP_UNBLOCKING_REQ
HW_GROUP_UNBLOCKING_IND
HW_GROUP_UNBLOCKING_RESP
HW_GROUP_UNBLOCKING_CONF
HGU
HGU
HUA
HUA
SW_GROUP_BLOCKING_REQ
SW_GROUP_BLOCKING_IND
SW_GROUP_BLOCKING_RESP
SW_GROUP_BLOCKING_CONF
SGB
SGB
SBA
SBA
SW_GROUP_UNBLOCKING_REQ
SW_GROUP_UNBLOCKING_IND
SW_GROUP_UNBLOCKING_RESP
SW_GROUP_UNBLOCKING_CONF
SGU
SGU
SUA
SUA
INFORMATION_REQ
INFORMATION_IND
SAM or SAO
SAM or SAO
This primitive is used to
inform the maintenance
system of a particular event.
MAINTENANCE_SYSTEM_IND
FORWARD_TRANSFER_REQ
FORWARD_TRANSFER_IND
FOT
FOT
REANSWER_REQ
REANSWER_IND
RAN
RAN
STOP_REQ
STOP_CONF
778
Comments
This primitive is used by the
application to ask the TUP
library to stop
re-transmitting CFL/CLF/RSC
messages concerning a circuit
to the SS7 network.
Appendix B
TUP Addendum
Exchanging Messages
Table B-3
State Machine Mode Primitives (ITUP Only) (Continued)
Primitive
ITUP Message
Comments
This primitive is used by the
application to ask the TUP
library to stop
re-transmitting
CFL/CLF/RSC/GRS/MGB/HGB/SGB
messages concerning a circuit
group to the SS7 network.
GROUP_STOP_REQ
GROUP_STOP_CONF
CHG or CCG or TRG
CHG or CCG or TRG
CHA or CCC or PCC
CHA or CCC or PCC
CHARGING_REQ
CHARGING_IND
CHARGING_RESP
CHARGING_CONF
Note that these primitives
and messages are not
supported in CTUP.
Bypass Mode
This is as for HP OpenCall SS7 ISUP, see “Bypass Mode” on page 523.
MTP Related Primitives
This is as for HP OpenCall SS7 ISUP, see “MTP Related Primitives” on
page 528.
Additional Information
This is as for HP OpenCall SS7 ISUP, see “Additional Information” on
page 524, except that the list of TUP primitives requiring Additional
Information is given in Table B-4.
Appendix B
779
TUP Addendum
Exchanging Messages
Table B-4
HP OpenCall SS7 TUP Primitives Requiring Additional
Information
Primitives
SETUP_FAILURE_IND
Additional
Information
Field
SetupFailure
setupFailureCause
Used for:
determining the reason for failure.
Possible values are:
DUAL_SEIZURE
FLOW_CONTROL
BLOCKING
COT_FAILURE
RELEASE
TWCCR_TIMEOUT
CPC_BUSY
CRCR_RESET
START_RELEASE_IND
StartRelease
releaseCause
determining the reason for the release.
Possible values are:
BLOCKING
CONTINUITY_SUCCESS
T2_TIMEOUT
T1_TIMEOUT
TWCLR_TIMEOUT
TWRAN_TIMEOUT
TWANN_TIMEOUT
START_RESET_IND
StartReset
resetCause
determining the reason for the reset.
Possible values are:
NO_REASON
UNEXPECTED_MESSAGE
T5_TIMEOUT
T7_TIMEOUT
COT_CC_NOT_REQUIRED
GRS_RANGE0
TIMER_SHORTAGE
RESET_IND
RESET_RESP
Reset
resetEvent
determining whether or not it is part of a
Group Reset operation.
Possible values are:
GROUP_RESET
780
Appendix B
TUP Addendum
Exchanging Messages
Table B-4
Primitives
STOP_CONF
HP OpenCall SS7 TUP Primitives Requiring Additional
Information (Continued)
Additional
Information
LocalReset
Field
LocalresetCause
Used for:
determining the reason for the reset.
GROUP_STOP_CONF
Possible values are:
START_RESET_IND
MTP_UNAVAILABLE
DPC_UNAVAILABLE
BLS_STOPPED
CRS_STOPPED
CRCR_STOPPED
CGRS_STOPPED
MGBS_STOPPED
HGBS_STOPPED
SGBS_STOPPED
CRCS_STOPPED
Appendix B
781
TUP Addendum
Exchanging Messages
Table B-4
HP OpenCall SS7 TUP Primitives Requiring Additional
Information (Continued)
Primitives
Additional
Information
MAINTENANCE_SYSTEM
_IND
Maintenance
System
Field
maintenance
SystemEvent
Used for:
defining the event.
Possible values are:
RECV_ON_UNEQUIPPED_CIRCUITM
N_BLOCKING
HW_BLOCKING
SW_BLOCKING
MN_UNBLOCKING
HW_UNBLOCKING
SW_UNBLOCKING
MN_GROUP_BLOCKING
HW_GROUP_BLOCKING
SW_GROUP_BLOCKING
MN_GROUP_UNBLOCKING
HW_GROUP_UNBLOCKING
SW_GROUP_UNBLOCKING
T5_TIMEOUT
T7_TIMEOUT
T8_TIMEOUT
T13_TIMEOUT
T16_TIMEOUT
T19_TIMEOUT
T22_TIMEOUT
T27_TIMEOUT
T29_TIMEOUT
T33_TIMEOUT
T35_TIMEOUT
T39_TIMEOUT
T41_TIMEOUT
T12_NOT_RUNNING
T15_NOT_RUNNING
T21_NOT_RUNNING
T26_NOT_RUNNING
T28_NOT_RUNNING
T32_NOT_RUNNING
T34_NOT_RUNNING
T38_NOT_RUNNING
T40_NOT_RUNNING
PRIORITY_TO_GROUP_RESET
COT_RECEIVED
CLF_RECEIVED
BACKWARD_CHECK_TONE_ACK
TIMER_SHORTAGE
782
Appendix B
TUP Addendum
Exchanging Messages
HP OpenCall SS7 TUP Message Management
Overview
The rules and hypothesis for the TUP message management are:
•
The encoder/decoder functions are flavor dependent (for example,
CTUP). The source code is not generated by software.
•
The new local representation mechanism is generic for TUP. It gives
fast access to each message parameter.
•
Specific message parameter accessors are available to:
— Get a parameter value.
— Set a parameter value.
— Mark an optional parameter as not present.
— Check optional parameter presence.
Appendix B
•
No method is provided to install new message parameters.
•
Supports non-standard TUP messages (User messages).
•
Segmented messages are not supported.
•
Multiple instances of a message parameter are not possible in the
TUP protocol and therefore it is not necessarily supported.
783
TUP Addendum
Exchanging Messages
Table B-5 lists the classes from the ISUP message module that have been
adapted for TUP.
Table B-5
Adaptation of HP OpenCall SS7 ISUP Message Classes
ISUP Class
TUP Class
Purpose
IsupInfoMgr
IsupInfoMgr
Used by the message module to manage its internal
global data.
IsupMsg
IsupMsg
Pure virtual class defining a generic interface to all
TUP messages. It is intended to be specialized to
define instances of specific TUP messages with a
specific accessor interface.
IsupIam,
IsupAcm,
...
TupXXX
(examples:
IsupIam, TupIAI,
TupAcm, …)
Specialization of the IsupMsg. Instances of specific
TUP messages with a specific accessor interface.
IsupUserMsg
TupUserMsg
Specialization of the IsupMsg. This class is used to
support non-standard TUP messages.
Encoding/Decoding TUP Messages
The decoding operation of a TUP message is done just once. After the
decoding operation, a local representation (LR) mechanism is
implemented to store all the parameters in memory. The parameter
values can then be accessed directly without having to do any more
decoding. Each message supported by the TUP library has its own local
representation (LR) in memory.
Operations Performed by the decode() Function
The decode() function performs the following operations:
Step 1. Decode the message type (H0/H1).
Step 2. Initialize the LR data corresponding to the current message type.
Step 3. Set the message LR description area to zero.
Step 4. Decode each parameter:
•
784
Read the PDU message.
Appendix B
TUP Addendum
Exchanging Messages
•
Update the LR description area.
•
Fill the LR data area.
Operations Performed by the encode() Function
The encode() function performs the following operations:
Step 1. Initialize the PDU data.
Step 2. Read the current message LR description area for each parameter (from
index 0 to the maximum number of parameters):
•
if the parameter is present, fill the PDU message with the data in LR
data area.
•
go to the next parameter.
Parameter Checking
The TUP encoder/decoder only checks that the message format is
compatible with the TUP format specification as regards parameter
lengths and the presence of mandatory parameters. However, the actual
parameter values are not verified (for example, reserved values are not
verified).
Encoding/decoding operations stop as soon as an error is detected. In this
case, an ENCODING_ERROR/DECODING_ERROR error is returned.
Accessors for TUP Messages
The TupXXX classes (for example: TupAcm) offer specific accessors to
message parameters. Two kinds of parameters are defined: mandatory
and optional.
The mandatory parameter accessors are used to get and set a parameter
value.
For optional parameters, two accessors are added. One accessor is to test
the presence of the parameter, and the other is to mark it as not being
present.
Parameters values are contained in ISUP::ParmValue class objects. The
access result is returned in ISUP::MsgStatus class objects. These object
are identical to those used in the ISUP library.
The specific accessors prototypes are shown below.
Appendix B
785
TUP Addendum
Exchanging Messages
Set Value Accessor
To set the paramName parameter value in a TupXXX message:
TupXXX * TupXXX::paramName(ISUP::ParmValue& P_sVal,
ISUP::MsgStatus& P_status)
Get Value Accessor
To get the paramName parameter value from a TupXXX message:
ISUP::ParmValue* TupXXX::paramName(ISUP::MsgStatus&
P_status) const
Check Value Accessor
To check for the presence of the paramName parameter in a TupXXX
message:
HPAIN::Boolean TupXXX::paramNameIsPresent(ISUP::MsgStatus&
P_status) const
Mark as Absent Accessor
To mark the paramName parameter as not present in a TupXXX message:
void TupXXX::paramNameSetAbsent(ISUP::MsgStatus& P_status)
Parameter With an Invalid Length
If a parameter value is given an invalid length, the API behaves as
follows:
•
If a parameter is given a value of length less than the minimum
parameter length, then the parameter value is extended with 0s to
the minimum parameter length. No error is returned.
•
If a parameter is given a value of length greater than the minimum
parameter length, then the error INVALID_LENGTH is returned.
TUP User Message
This is implemented as a TUP standard message with only two
parameters: UserParamMsgType and UserParam. These parameters,
supplied by the application, represent respectively the message type
(H0/H1) and the parameter area of the message the user wants to send to
the provider. No check is performed by the TUP encoder.
786
Appendix B
TUP Addendum
Exchanging Messages
The userParam parameter can contain any kind of TUP parameter. Its
maximum size is the maximum size of the parameter area in a TUP
message.
TUP Message Class Naming Convention
The TUP message class general naming convention is as follows:
•
All classes that correspond to messages that exist in both the ISUP
and the TUP protocols keep the name used in the ISUP library. For
example: IsupIam, IsupAcm, etc.
•
TUP messages that do not exist in ISUP have their corresponding
class named TupXXX. For example: TupIai, TupCcf, …
TUP Message Module Classes
Table B-6 lists the TUP message module classes.
Table B-6
TUP Message Module Classes
Item
Comment
TUP class: IsupInfoMgr
Corresponding ISUP
class
IsupInfoMgr
Purpose
Class used by message module to manage its internal global
data.
Main Changes
All methods related to message setting are deleted.
All methods related to ASN.1+ tags are deleted.
Main Methods
init(): initialize LR memory, call to the init() methods of
IsupMsg
end(): end with the IsupMsg class.
setTraceOn/Off(): start/stop decoding / encoding tracing;
call to the setTraceOn/Off() methods of IsupMsg.
TUP class: IsupMsg
Corresponding ISUP
class
Appendix B
IsupMsg
787
TUP Addendum
Exchanging Messages
Table B-6
TUP Message Module Classes (Continued)
Item
Comment
Purpose
Pure virtual class defining a generic interface to all TUP
messages. It is intended to be specialized to define instances
of specific TUP messages with a specific accessor interface.
Main Changes
TUP LR management: encoding / decoding, accessors.
All methods related to ASN.1+ tags are deleted.
IsupMsg is not an inherited class (from the BF class).
PDU data management: this is managed by the class itself.
Main Methods
init(): initialize LR memory for all message type supported
(call to init() methods of TupXXX).
end(): end with TupXXX classes.
encode(): encode PDU from message LR representation
(virtual method).
decode(): decode PDU and get message LR representation.
getPDU(): copy associate PDU into given buffer.
freePDU(): free the associated PDU memory.
setPDU(): associate given PDU to the message.
getMsgType(): get the type of the current message (IAM, …).
setMsgType(): set the message type.
setTraceOn/Off(): start/stop tracing in encode() and
decode() methods.
TUP class: TupXXX
(where XXX represents the message type, and the TUP message class general naming
convention (see “TUP Message Class Naming Convention” on page 787) applies.
Corresponding ISUP
class
788
IsupIam,...
Appendix B
TUP Addendum
Exchanging Messages
Table B-6
TUP Message Module Classes (Continued)
Item
Comment
Purpose
Specialization of the IsupMsg class. Instances of specific TUP
messages with a specific accessor interface.
Main Methods
castMsg(): casts a generic IsupMsg object into a TupXXX
object.
Specific accessors: get, set, check / set presence of a
parameter.
encode(): encode PDU from message LR representation.
init(): initialize the LR data pointers and areas.
end(): free associated LR memory.
TUP class: TupUserMsg
Corresponding ISUP
class
IsupUserMsg
Purpose
Specialization of the IsupMsg class. This class is used to
support non-TUP standard messages.
Main Changes
This class is defined in exactly the same way as the TupXXX
classes.
Main Methods
These are the same as for the TupXXX classes.
TUP Message Description (API)
When a parameter exists in both the ISUP and the TUP protocols, then
its name is the ISUP one. In this case, if the TUP parameter name is
different from the ISUP one, then the TUP name is given in the
Parameter Type column.
Appendix B
789
TUP Addendum
Exchanging Messages
The parameter formats are those defined in Q783. However, in order to
facilitate decoding and encoding, the format used for
calledPartyNumber and subsequentNumber parameters in the IAI, IAM
and SAM messages is as shown in Table B-7.
Table B-7
Format for calledPartyNumber and
subsequentNumber Parameters
Byte
first byte
Bits
bits HGFE
bits DCBA
subsequent bytes
Meaning
number of address signals
sub-field.
Not significant.
address digits
All mandatory parameters of a message must be set before sending the
message to the TUP library. Otherwise, an ENCODING_ERROR error is
returned.
Table B-8 lists all the CTUP messages classes and their associated
accessors provided by the HP OpenCall SS7 TUP API. The equivalent
information for ITUP is given in Table B-9.
Table B-8
Message Classes and Accessors (CTUP Only)
Message
Class
Parameter Name
Parameter Type
TupAcb
-
-
TupAcc
automCongestionLevel
Mandatory,
Fixed length, "Message Indicators"
IsupAcm
backwardCallIndicators
Mandatory,
Fixed length, "Message Indicators"
TupAdi
-
-
TupAnc
-
-
TupAnn
-
-
IsupBla
-
-
IsupBlo
-
-
790
Appendix B
TUP Addendum
Exchanging Messages
Table B-8
Message Classes and Accessors (CTUP Only) (Continued)
Message
Class
Parameter Name
Parameter Type
TupCbk
-
-
TupCcf
-
-
TupCcl
-
-
IsupCcr
-
-
TupCfl
-
-
TupCgc
-
-
TupClf
-
-
IsupCot
-
-
TupDpn
-
-
TupEum
octetIndicator
signallingPointCode
Mandatory, Fixed length
Mandatory, Fixed length
IsupFot
-
-
IsupGra
rangeAndStatus
Mandatory, Variable length
TupGrq
requestTypeIndicators
Mandatory, Fixed length
IsupGrs
rangeAndStatus
Mandatory, Fixed length
TupGsm
responseTypeIndicator
callingPartysCategory
callingPartyNumber
Mandatory, Fixed length
Optional, Fixed length
Optional, Variable length,
"Calling Line Identity"
Optional, Variable length,
subfield of "Incoming Trunk and
Transit Exchange Identity"
Optional, Variable length,
subfield of "Incoming Trunk and
Transit Exchange Identity"
Optional, Variable length, "Original
Called Address"
transitExchangeIdentity
incomingTrunkIdentity
originalCalledNumber
Appendix B
791
TUP Addendum
Exchanging Messages
Table B-8
Message Classes and Accessors (CTUP Only) (Continued)
Message
Class
Parameter Name
Parameter Type
TupHba
rangeAndStatus
Mandatory, Variable length
TupHgb
rangeAndStatus
Mandatory, Variable length
TupHgu
rangeAndStatus
Mandatory, Variable length
TupHua
rangeAndStatus
Mandatory, Variable length
TupIai
callingPartysCategory
messageIndicators
calledPartyNumber
Mandatory, Fixed length
Mandatory, Fixed length
Mandatory, Variable length, "Number
Of Address Signals" + "Address Signals"
Optional, Variable length, "Calling Line
Identity"
Optional, Variable length, "Original
Called Address"
callingPartyNumber
originalCalledNumber
IsupIam
callingPartysCategory
messageIndicators
calledPartyNumber
Mandatory, Fixed length
Mandatory, Fixed length
Mandatory, Variable length
TupLos
-
-
TupMal
-
-
TupMba
rangeAndStatus
Mandatory, Variable length
TupMgb
rangeAndStatus
Mandatory, Variable length
TupMgu
rangeAndStatus
Mandatory, Variable length
TupMpm
chargingInformation
Mandatory, Fixed length
TupMua
rangeAndStatus
Mandatory, Variable length
TupNnc
-
-
TupOpr
-
-
TupRan
-
-
TupRlg
-
-
792
Appendix B
TUP Addendum
Exchanging Messages
Table B-8
Message Classes and Accessors (CTUP Only) (Continued)
Message
Class
Parameter Name
Parameter Type
IsupRsc
-
-
IsupSam
subsequentNumber
Mandatory, Variable length, "Address
Signals"
TupSao
subsequentNumber
Mandatory, Fixed length, "Address
Signals"
TupSba
rangeAndStatus
Mandatory, Variable length
TupSec
-
-
TupSgb
rangeAndStatus
Mandatory, Variable length
TupSgu
rangeAndStatus
Mandatory, Variable length
TupSlb
-
-
TupSsb
-
-
TupSst
-
-
TupStb
-
-
TupSua
rangeAndStatus
Mandatory, Variable length
IsupUba
-
-
IsupUbl
-
-
TupUnn
-
-
IsupUserMsg
messageType
userParam
Mandatory, Fixed length (H0/H1)
Optional, Variable length
Appendix B
793
TUP Addendum
Exchanging Messages
Table B-9 lists all the ITUP messages classes and their associated
accessors provided by the HP OpenCall SS7 TUP API. The equivalent
information for CTUP is given in Table B-8.
Table B-9
Message Classes and Accessors (ITUP Only)
Message
Class
Parameter Name
Parameter Type
TupAcb
-
-
TupAcc
automCongestionLevel
Mandatory, Fixed length, "Message
Indicators"
IsupAcm
backwardCallIndicators
Mandatory, Fixed length, "Message
Indicators"
TupAdi
-
-
TupAnc
-
-
TupAnn
-
-
TupAnu
-
-
IsupBla
-
-
IsupBlo
-
-
TupCbk
-
-
TupCcf
-
-
TupCcc
chargingUnitIndicators
Mandatory, Fixed length, "Charging
Unit field"
TupCcg
collectionIndicators
Mandatory, Fixed length, "Collection
field"
TupCcl
-
-
IsupCcr
-
-
TupCfl
-
-
TupCgc
-
-
TupCha
-
-
794
Appendix B
TUP Addendum
Exchanging Messages
Table B-9
Message Classes and Accessors (ITUP Only) (Continued)
Message
Class
Parameter Name
Parameter Type
packetChargingA
tariffIndicatorsA
tariffFactorA
timeIndicator (*see the
Note following this table)
packetChargingB
tariffIndicatorsB
tariffFactorB
Optional, Fixed length, "Packet
charging A"
Optional, Fixed length, "Tariff
Indicators A"
Optional, Fixed length, "Tariff Factor A"
Optional, Fixed length, "Time indicator"
TupClf
-
-
IsupCot
-
-
TupDpn
-
-
TupEum
octetIndicator
signallingPointCode
Mandatory, Fixed length
Mandatory, Fixed length
IsupFot
-
-
IsupGra
rangeAndStatus
Mandatory, Variable length
TupGrq
requestTypeIndicators
Mandatory, Fixed length
IsupGrs
rangeAndStatus
Mandatory, Fixed length
TupChg
Appendix B
Optional, Fixed length, "Packet
charging B"
Optional, Fixed length, "Tariff
Indicators B"
Optional, Fixed length, "Tariff Factor B"
795
TUP Addendum
Exchanging Messages
Table B-9
Message Classes and Accessors (ITUP Only) (Continued)
Message
Class
TupGsm
Parameter Name
responseTypeIndicator
callingPartysCategory
callingPartyNumber
transitExchangeIdentity
incomingTrunkIdentity
originalCalledNumber
Parameter Type
Mandatory, Fixed length
Optional, Fixed length
Optional, Variable length, "Calling Line
Identity"
Optional, Variable length, subfield of
"Incoming Trunk and Transit Exchange
Identity"
Optional, Variable length, subfield of
"Incoming Trunk and Transit Exchange
Identity"
Optional, Variable length, "Original
Called Address"
TupHba
rangeAndStatus
Mandatory, Variable length
TupHgb
rangeAndStatus
Mandatory, Variable length
TupHgu
rangeAndStatus
Mandatory, Variable length
TupHua
rangeAndStatus
Mandatory, Variable length
TupIai
callingPartysCategory
messageIndicators
calledPartyNumber
Mandatory, Fixed length
Mandatory, Fixed length
Mandatory, Variable length, "Number
Of Address Signals" + "Address Signals"
Optional, Fixed length, "Closed User
Group Information "
Optional, Variable length, "Calling Line
Identity"
Optional, Variable length, "Original
Called Address"
CUGinterlockCode
callingPartyNumber
originalCalledNumber
IsupIam
callingPartysCategory
messageIndicators
calledPartyNumber
Mandatory, Fixed length
Mandatory, Fixed length
Mandatory, Variable length
TupLos
-
-
TupMba
rangeAndStatus
Mandatory, Variable length
796
Appendix B
TUP Addendum
Exchanging Messages
Table B-9
Message Classes and Accessors (ITUP Only) (Continued)
Message
Class
Parameter Name
Parameter Type
TupMgb
rangeAndStatus
Mandatory, Variable length
TupMgu
rangeAndStatus
Mandatory, Variable length
TupMua
rangeAndStatus
Mandatory, Variable length
TupNnc
-
-
TupPcc
chargingUnitIndicators
Mandatory, Variable length, "Charging
unit field"
TupRan
-
-
TupRlg
-
-
IsupRsc
-
-
IsupSam
subsequentNumber
Mandatory, Variable length, "Address
Signals"
TupSao
subsequentNumber
Mandatory, Fixed length, "Address
Signals"
TupSba
rangeAndStatus
Mandatory, Variable length
TupSec
-
-
TupSgb
rangeAndStatus
Mandatory, Variable length
TupSgu
rangeAndStatus
Mandatory, Variable length
TupSsb
-
-
TupSst
-
-
TupSua
rangeAndStatus
Mandatory, Variable length
TupTrg
tariffIndicators
tariffFactor
timeIndicator (*see the
Note following this table)
Mandatory, Fixed length, "Tariff
indicators"
Optional, Fixed length, "Tariff factor"
Mandatory, Fixed length, "Time
indicator"
Appendix B
797
TUP Addendum
Exchanging Messages
Table B-9
Message Classes and Accessors (ITUP Only) (Continued)
Message
Class
Parameter Name
Parameter Type
IsupUba
-
-
IsupUbl
-
-
TupUnn
-
-
IsupUserMsg
messageType
userParam
Mandatory, Fixed length (H0/H1)
Optional, Variable length
NOTE
(*) The timeIndicator parameter is coded on one byte. The shift of 2
bits is done by the encode() and decode() methods.
Rounding a Parameter Length
If a parameter length does not correspond to an exact number of bytes,
the length is rounded to the upper number of bytes.
In this case, the significant bits are placed starting from the least
significant bit of the parameter.
For example, in an IAI message the callingPartysCategory parameter
is 6 bits long. You set the callingPartysCategory parameter to 000001
in an IAI as follows:
TupIaiObject->callingPartysCategory(ParmValueObject->assign("\x01",1),
MsgStatusObject);
If the callingPartysCategory parameter is 000001 in a received IAI
message, the ParmValue returned by the get accessor will be one byte
long: 0x01:
ParmValueObject = TupIaiObject->callingPartysCategory (MsgStatusObject);
798
Appendix B
TUP Addendum
Exchanging Messages
Automated Call Release
HP OpenCall SS7 TUP provides a means of automatically releasing a
call on request from the application. This helps the programmer by
reducing the number of exchanges with the TUP API.
The decision to release a circuit is the responsibility of the application.
HP OpenCall SS7 TUP handles all new message exchanges on this
circuit by implementing an Automated Call Release (ACR) State
Machine. This state machine processes all the incoming messages
related to the circuit being released.
Figure B-1
Successful Automated Call Release
NOTE
In Figure B-1, the asterisk (*) after CFL means that this message type
can be configured using the ACRReleaseMessage field in the Tup_Global
section of the tup.conf file. The allowed message types are: ACB, CBK,
CFL, CGC, LOS, NNC, and SEC. The default message type is CFL.
Appendix B
799
TUP Addendum
Exchanging Messages
Figure B-2
Unsuccessful Automated Call Release
NOTE
In Figure B-2, the asterisk (*) after ACB means that this message type
can be configured using the ACRReleaseMessage field in the Tup_Global
section of the tup.conf file. The allowed message types are: ACB, CBK,
CFL, CGC, LOS, NNC, and SEC. The default message type is CFL.
The double asterisk (**) after T3 started means that if the message type
CFL is used, the timers started are T4 and T5 and not T3.
800
Appendix B
TUP Addendum
Exchanging Messages
ACR State Machine
When started, the ACR State Machine initiates a release by sending an
ACB message as shown in Figure B-2.
If no RLG arrives before T3 expires, HP OpenCall SS7 TUP sends a CFL.
If no RLG arrives before T4 expires, HP OpenCall SS7 TUP sends another
CFL. This is repeated for n attempts until T5 expires. If no RLG arrives
before T5 expires, HP OpenCall SS7 TUP sends an RSC. If no RLG arrives
before T18 expires, HP OpenCall SS7 TUP sends another RSC. This is
repeated for n attempts until T19 expires. If no RLG is received before
T19 expires, HP OpenCall SS7 TUP just locally resets the circuit (same
as a STOP_REQ procedure) and returns to idle. The circuit is now
available for future call attempts.
Return Status Values
This is as for HP OpenCall SS7 ISUP, see in “Return Status Values” on
page 549.
Appendix B
801
TUP Addendum
Managing HP OpenCall SS7 TUP
Managing HP OpenCall SS7 TUP
This section contains management guidelines for use in developing the
application.
The equivalent information for HP OpenCall SS7 ISUP is in Chapter 14,
“Managing HP OpenCall SS7 ISUP.”
Overview
This is as for HP OpenCall SS7 ISUP, see “Overview” on page 552.
Managing Race Conditions
This is as for HP OpenCall SS7 ISUP, see “Managing Race Conditions”
on page 553.
Managing Memory Space
This is as for HP OpenCall SS7 ISUP, see “Managing Memory Space” on
page 554.
Managing Object Memory
This is as for HP OpenCall SS7 ISUP, see “Managing Object Memory” on
page 555.
Handling IPC Buffers
This is as for HP OpenCall SS7 ISUP, see“Handling IPC Buffers” on
page 557.
802
Appendix B
TUP Addendum
Managing HP OpenCall SS7 TUP
Congestion and Flow Control
IPC Flow Control
This is as for HP OpenCall SS7 ISUP, see “IPC Flow Control” on
page 559, except for the section Outbound Path, which is as follows.
Outbound Path
The following primitives are accepted by HP OpenCall SS7 TUP in the
IPC congested state:
1. Primitives aimed at terminating a call:
START_RELEASE_IND_ACK
RELEASE_RESP
2. Primitives aimed at resetting a circuit:
START_RESET_IND_ACK
RESET_RESP
3. Primitives aimed at stopping CFL/CLF/RSC retransmission on a circuit:
STOP_REQ
Automatic Congestion Control
The ACC message is sent from the overloaded end on reception of the CLF
message and before sending the RLG message. Two levels of congestion
can be indicated in the ACC message.
On receipt of the ACC message, the TUP layer sends a (CIP_IND)
Congestion Indication Primitive to the application that is to manage
traffic reduction. The procedure used to reduce traffic depends on the
implementation.
Appendix B
803
TUP Addendum
Managing HP OpenCall SS7 TUP
Figure B-3
Automatic Congestion Control - Outgoing Side
Figure B-4
Automatic Congestion Control - Incoming Side
804
Appendix B
TUP Addendum
Managing HP OpenCall SS7 TUP
Managing Circuit States
This is as for HP OpenCall SS7 ISUP, see “Managing Circuit States” on
page 562, except for the state values (visible and manageable by
applications) shown below.
Available Circuit States
Appendix B
•
IDLE
•
IDLE_MN_LOCALLY_BLOCKED
•
IDLE_MN_REMOTELY_BLOCKED
•
IDLE_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
BUSY_INCOMING_ACTIVE
•
BUSY_INCOMING_MN_LOCALLY_BLOCKED
•
BUSY_INCOMING_MN_REMOTELY_BLOCKED
•
BUSY_INCOMING_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
BUSY_OUTGOING_ACTIVE
•
BUSY_OUTGOING_MN_LOCALLY_BLOCKED
•
BUSY_OUTGOING_MN_REMOTELY_BLOCKED
•
BUSY_OUTGOING_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_HW_LOCALLY_BLOCKED
•
IDLE_HW_REMOTELY_BLOCKED
•
IDLE_HW_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_HW_MN_LOCALLY_BLOCKED
•
IDLE_HW_MN_REMOTELY_BLOCKED
•
IDLE_HW_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_HW_LOCALLY_BLOCKED_MN_REMOTELY_BLOCKED
•
IDLE_HW_REMOTELY_BLOCKED_MN_LOCALLY_BLOCKED
•
IDLE_HW_LOCALLY_BLOCKED_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_HW_LOCALLY_AND_REMOTELY_BLOCKED_MN_LOCALLY_BLOCKED
•
IDLE_HW_LOCALLY_AND_REMOTELY_BLOCKED_MN_REMOTELY_BLOCKED
805
TUP Addendum
Managing HP OpenCall SS7 TUP
806
•
IDLE_HW_REMOTELY_BLOCKED_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_REMOTELY_BLOCKED
•
IDLE_SW_REMOTELY_BLOCKED_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_REMOTELY_BLOCKED_HW_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_REMOTELY_BLOCKED_HW_LOCALLY_BLOCKED
•
IDLE_SW_REMOTELY_BLOCKED_MN_LOCALLY_BLOCKED
•
IDLE_SW_REMOTELY_BLOCKED_HW_MN_LOCALLY_BLOCKED
•
IDLE_SW_REMOTELY_BLOCKED_HW_MN_LOCALLY_AND_REMOTELY_BLOCKE
D
•
IDLE_SW_REMOTELY_BLOCKED_MN_LOCALLY_BLOCKED_HW_LOCALLY_AND
_REMOTELY_BLOCKED
•
IDLE_SW_REMOTELY_BLOCKED_HW_LOCALLY_BLOCKED_MN_LOCALLY_AND
_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_BLOCKED
•
IDLE_SW_LOCALLY_BLOCKED_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_BLOCKED_HW_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_BLOCKED_HW_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_BLOCKED_MN_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_BLOCKED_HW_MN_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_BLOCKED_HW_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_BLOCKED_MN_REMOTELY_BLOCKED_HW_LOCALLY_AND
_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_BLOCKED_HW_REMOTELY_BLOCKED_MN_LOCALLY_AND
_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_MN_LOCALLY_BLOCKED
•
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_HW_LOCALLY_BLOCKED
•
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_MN_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_HW_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_HW_MN_LOCALLY_BLOCKED
Appendix B
TUP Addendum
Managing HP OpenCall SS7 TUP
Appendix B
•
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_HW_MN_REMOTELY_BLOCKE
D
•
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_HW_LOCALLY_BLOCKED_MN
_REMOTELY_BLOCKED
•
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_MN_LOCALLY_BLOCKED_HW
_REMOTELY_BLOCKED
•
IDLE_SW_MN_REMOTELY_BLOCKED
•
IDLE_SW_MN_REMOTELY_BLOCKED_HW_LOCALLY_AND_REMOTELY_BLOCKE
D
•
IDLE_SW_MN_REMOTELY_BLOCKED_HW_LOCALLY_BLOCKED
•
IDLE_SW_MN_LOCALLY_BLOCKED
•
IDLE_SW_MN_LOCALLY_BLOCKED_HW_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_MN_LOCALLY_BLOCKED_HW_REMOTELY_BLOCKED
•
IDLE_SW_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_MN_LOCALLY_AND_REMOTELY_BLOCKED_HW_LOCALLY_BLOCKED
•
IDLE_SW_MN_LOCALLY_AND_REMOTELY_BLOCKED_HW_REMOTELY_BLOCKE
D
•
IDLE_SW_HW_REMOTELY_BLOCKED
•
IDLE_SW_HW_REMOTELY_BLOCKED_MN_LOCALLY_AND_REMOTELY_BLOCKE
D
•
IDLE_SW_HW_REMOTELY_BLOCKED_MN_LOCALLY_BLOCKED
•
IDLE_SW_HW_LOCALLY_BLOCKED
•
IDLE_SW_HW_LOCALLY_BLOCKED_MN_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_HW_LOCALLY_BLOCKED_MN_REMOTELY_BLOCKED
•
IDLE_SW_HW_LOCALLY_AND_REMOTELY_BLOCKED
•
IDLE_SW_HW_LOCALLY_AND_REMOTELY_BLOCKED_MN_LOCALLY_BLOCKED
•
IDLE_SW_HW_LOCALLY_AND_REMOTELY_BLOCKED_MN_REMOTELY_BLOCKE
D
•
IDLE_SW_HW_MN_REMOTELY_BLOCKED
•
IDLE_SW_HW_MN_LOCALLY_BLOCKED
•
IDLE_SW_HW_MN_LOCALLY_AND_REMOTELY_BLOCKED
807
TUP Addendum
Managing HP OpenCall SS7 TUP
These visible circuit states do not represent exactly the internal call
states, but are deduced from them by using the following rules:
808
•
The circuit is considered as IDLE until the setup procedure is
completed.
•
The circuit is considered as BUSY_INCOMING_XXX when the call state
(CPC) is IGC answered.
•
The circuit is considered as BUSY_OUTGOING_XXX when the call state
(CPC) is OGC answered.
•
The circuit is considered as XXX_LOCALLY_BLOCKED when the BLS
state is locally_blocked.
•
The circuit is considered as XXX_REMOTELY_BLOCKED when the BLR
state is remotely_blocked.
•
The circuit is considered as XXX_HW_LOCALLY_BLOCKED when the HLB
state is locally_blocked.
•
The circuit is considered as XXX_HW_REMOTELY_BLOCKED when the
HRB state is remotely_blocked.
•
The circuit is considered as XXX_SW_LOCALLY_BLOCKED when the SLB
state is locally_blocked.
•
The circuit is considered as XXX_SW_REMOTELY_BLOCKED when the
SRB state is remotely_blocked.
Appendix B
TUP Addendum
Managing HP OpenCall SS7 TUP
The SetCircuitState() and GetCircuitState() are methods of
IsupSMProbe object class. They are used by the application to set and get
the circuit states. The SetCircuitState() method works only on the
secondary HP OpenCall SS7 TUP connection.
Developing a Circuit Update Mechanism
This is as for HP OpenCall SS7 ISUP, see “Developing a Circuit Update
Mechanism” on page 564.
Appendix B
809
TUP Addendum
Introduction to TUP Procedures
Introduction to TUP Procedures
This section contains information about TUP procedures, including
FSMs and interaction with the MTP layer.
The equivalent information for HP OpenCall SS7 ISUP is in Chapter 15,
“Introduction to ISUP Procedures.”
Supported Finite State Machines
The supported State Machines are those described in ITU-T Q724.
Table B-10 lists the HP OpenCall SS7 TUP FSMs supported and
includes comments where applicable.
Table B-10
Supported Finite State Machines (FSMs)
Acronym
Comments
Signaling Procedure Control
MSDC
Does not exist in Q724; adapted from ISUP.
MDSC
Does not exist in Q724; adapted from ISUP.
Call Processing Control
CPCI
Does not exist in Q724.
CPCO
Does not exist in Q724.
Circuit Supervision Control
810
BLR
Blocking and unblocking signal reception.
BLS
Blocking and unblocking signal sending.
CCI
Continuity-check incoming.
CCO
Continuity-check outgoing.
CGRR
Circuit group reset receipt.
CGRS
Circuit group reset sending.
Appendix B
TUP Addendum
Introduction to TUP Procedures
Table B-10
Supported Finite State Machines (FSMs)
Acronym
Appendix B
Comments
CRI
Continuity recheck incoming.
Equivalent to ISUP ITU-88 CRCR.
CRO
Continuity recheck outgoing.
Equivalent to ISUP ITU-88 CRCS.
CRR
Circuit reset receipt.
Does not exist in Q724; adapted from ISUP.
CRS
Circuit reset sending.
MBUR
Maintenance generated circuit group blocking and
unblocking receipt. Equivalent to ISUP ITU-88 MGBR.
MBUS
Maintenance generated circuit group blocking and
unblocking sending. Equivalent to ISUP ITU-88 MGBS.
HBUR
Hardware generated circuit group blocking and
unblocking receipt. Equivalent to ISUP ITU-88 HGBR.
HBUS
Hardware generated circuit group blocking and
unblocking sending. Equivalent to ISUP ITU-88 HGBS.
SBUR
Software generated circuit group blocking and
unblocking receipt.
SBUS
Software generated circuit group blocking and
unblocking sending.
HRB
Hardware remotely blocking.
Does not exist in Q724; adapted from ISUP.
HLB
Hardware locally blocking.
Does not exist in Q724; adapted from ISUP.
SRB
Software remotely blocking.
Equivalent to the HRB state machine except it is for a
software blocking operation.
SLB
Software locally blocking.
Equivalent to the SLB state machine except it is for a
software blocking operation.
811
TUP Addendum
Introduction to TUP Procedures
Interaction Scenarios
This is as for HP OpenCall SS7 ISUP, see “Interaction Scenarios” on
page 573.
MTP3 Interaction Handling
This is as for HP OpenCall SS7 ISUP, see “MTP3 Interaction Handling”
on page 574.
Remote DPC Status Indications
This is as for HP OpenCall SS7 ISUP, see “Remote DPC Status
Indications” on page 578.
Generic Primitive Processing (State Machine Probe)
This is as for HP OpenCall SS7 ISUP, see “Generic Primitive Processing
(State-machine Probe)” on page 581.
Generic Primitive Processing (Bypass Probe)
This is as for HP OpenCall SS7 ISUP, see “Generic Primitive Processing
(Bypass Probe)” on page 583.
Generic TUP Message Handling (State Machine
Probe)
This is as for HP OpenCall SS7 ISUP, see “Generic ISUP Message
Handling (State-machine Probe)” on page 585.
Generic TUP Message Handling (Bypass Probe)
This is as for HP OpenCall SS7 ISUP, see “Generic ISUP Message
Handling (Bypass Probe)” on page 586.
812
Appendix B
TUP Addendum
Introduction to TUP Procedures
Generic TUP Circuit Group Message Handling
The circuit group messages that are supported in TUP are:
•
GRS/GRA (Group Reset)
•
HGB/HGA (Hardware Group Blocking)
•
HGU/HUA (Hardware Group Unblocking)
•
MGB/MGA (Maintenance Group Blocking)
•
MGU/MUA (Maintenance Group Unblocking)
•
SGB/SBA (Software Group Blocking)
•
SGU/SUA (Software Group Unblocking)
They all contain a rangeAndStatus parameter which determines which
circuits belong to the group. In addition to the generic processing
described above, the rangeAndStatus parameter in an incoming
message is interpreted as described below.
To be taken into account, group messages such as GRS, HGB, HGU, MGB,
MGU, SGB, and SGU must be sent twice in less than 5 seconds. At the
receiving side, if two messages of the same kind are received within 5
seconds but with different rangeAndStatus parameters, the first
message received is ignored and the HP OpenCall SS7 TUP layer will
wait for a message identical to the last one received.
In addition to the generic processing described above, the
rangeAndStatus parameter in an incoming message is interpreted as
follows:
•
range = 0 is a reserved value.
•
if range is not 0, its maximum value is 23 (national). The value 31
(international) is not supported.
Table B-11 shows how the CIC label is interpreted in the
rangeAndStatus parameter.
Appendix B
813
TUP Addendum
Introduction to TUP Procedures
Table B-11
Interpreting the CIC Label in the rangeAndStatus Parameter
TUP
Message
range = 0
CIC Label
range !=0
CIC Label
GRS
Representative
CIC within the
CIC group.
No status field
related to the
pre-determined
CIC group.
First CIC within
the CIC group,
or within that
part of the CIC
group.
No status field
related to whole
CIC group.
GRA
This is as for
GRS.
This is as for
GRS.
This is as for
GRS.
Related to a
whole CIC
group. Number
of consecutive
CICs to be
handled = Range
+ 1.
Domain =
[2..256].
Status field
indicates the
status for each
CIC in the Label
up to 256.
814
Appendix B
TUP Addendum
Introduction to TUP Procedures
Table B-11
TUP
Message
Interpreting the CIC Label in the rangeAndStatus Parameter
range = 0
CIC Label
HGB, HGU,
MGB, MGU,
SGB, SGU
Representative
CIC within the
CIC group.
range !=0
CIC Label
No status field
included related
to the
pre-determined
CIC group.
First CIC within
the CIC group,
or within that
part of the CIC
group.
Related to a
whole CIC
group. Number
of consecutive
CICs to be
handled = Range
+ 1.
Domain =
[2..256].
Status field
indicates the
status for each
CIC in the Label
up to 256.
HGA, HUA,
MBA, MUA,
SBA, SUA
Representative
CIC within the
CIC group.
No status field
included related
to the
pre-determined
CIC group.
First CIC within
the CIC group,
or within that
part of the CIC
group.
Related to a
whole CIC
group. Number
of consecutive
CICs to be
handled = Range
+ 1.
Domain =
[2..256].
Status field
indicates the
status for each
CIC in the Label
up to 256.
Appendix B
815
TUP Addendum
Call Control
Call Control
This section describes how HP OpenCall SS7 TUP behaves when
controlling call setup and call teardown procedures.
The equivalent information for HP OpenCall SS7 ISUP is in the
following chapters:
•
Chapter 16, “ISUP Call Control - Procedures Common to ANSI and
ITU-T,”
•
Chapter 17, “ISUP Call Control - Procedures Specific to ANSI,”
•
Chapter 18, “ISUP Call Control - Procedures Specific to ITU-T.”
For each procedure, this section provides:
•
message and primitive flow
•
circuit states and timer activity
The diagrams in this section use the following convention:
Prmt_Name(xxx)
where: Prmt_Name is the primitive name and xxx is the message type.
Call Setup Procedures
Call setup is triggered when a message from the application is received
by the TUP library containing the SETUP_REQ primitive and IAM (or IAI).
The request to setup a call may be unsuccessful due to various factors,
such as failure to receive a specific TUP message or dual seizure.
The following scenarios illustrate the behavior of the TUP library in
these various circumstances.
Setup Request Locally Refused by HP OpenCall SS7 TUP
The application issues a SETUP_REQ to HP OpenCall SS7 TUP.
The primitive is locally rejected.
Refer to the HP OpenCall SS7 TUP API man pages for details on how
the failure condition is reported to the application.
This situation occurs in the following cases:
816
Appendix B
TUP Addendum
Call Control
Figure B-5
•
the (DPC, CIC) does not correspond to a valid configured circuit
•
the circuit is reserved for inbound traffic
•
the circuit is busy
•
the circuit is under reset
•
the IAM (or IAI) message cannot be encoded
•
the IPC flow control is active
•
the SS7 Stack underneath is unavailable or congested
Setup Request Locally Refused by HP OpenCall SS7 TUP
Setup Request - Dual Seizure Case 1
A dual seizure is detected the TUP layer when it receives an initial
address message for a circuit for which it has already sent an initial
address message.
In such a case, the call accepted is the one being processed by the
controlling side and the call being processed by the non-controlling side
is given up.
The controlling side is defined as follows:
•
It has a higher Signaling Point Code than the other side and the
current CIC is even.
•
It has a lower Signaling Point Code than the other side and the
current CIC is odd.
Having determined the controlling side, the other side is the
non-controlling side.
Appendix B
817
TUP Addendum
Call Control
The scenario shown in Figure B-6 and Figure B-7 corresponds to the case
where a circuit is seized on both sides at the same time.
In Figure B-6, as a result of the SETUP_REQ, HP OpenCall SS7 TUP
issues an IAM (IAM-1) to the network.
The issued IAM crosses the IAM (IAM-2) received from the peer, on its way
to HP OpenCall SS7 TUP. Consequently, HP OpenCall SS7 TUP
receives this IAM when already engaged in the processing of an outbound
call.
In this case, HP OpenCall SS7 TUP gives up and issues a
SETUP_FAILURE_IND primitive with a DUAL_SEIZURE cause.
The application may use this information to re-attempt the call setup on
another circuit. There is no automatic call setup re-attempt as another
circuit has to be selected.
Figure B-6 shows the scenario on the non-controlling side.
Figure B-6
Setup - Dual Seizure Case 1 - Non-Controlling Side
Figure B-7 shows the same scenario on the controlling side.
818
Appendix B
TUP Addendum
Call Control
Figure B-7
Setup - Dual Seizure Case 1 - Controlling Side
Setup Request - Dual Seizure Case 2
In the scenario shown in Figure B-8, the application issues a SETUP_REQ
primitive on a circuit for which an incoming IAM message has just been
treated. The outgoing call is refused with a return status.
The most likely cause is that the SETUP_IND is queued in the Up List of
HP OpenCall SS7 TUP waiting for the application to read it.
The application may re-try a call setup on another circuit.
Figure B-8
Appendix B
Setup - Dual Seizure Case 2
819
TUP Addendum
Call Control
Setup - Failure to Receive ACM
In the scenario shown in Figure B-9, an ACM must be received as a
response to the IAM within T2.
If the ACM is not received within T2, HP OpenCall SS7 TUP abandons
the call attempt and issues a START_RELEASE_IND (T2_TIMEOUT)
primitive to the application.
Once the application acknowledges, a CLF is sent to the network.
Figure B-9
820
Setup - Failure to Receive ACM
Appendix B
TUP Addendum
Call Control
Setup Request - Failure to Receive ANN (or ANC)
In the scenario shown in Figure B-10, an ANN must be received as a
response to the IAM within Twann.
If the ANN is not received within Twann, HP OpenCall SS7 TUP
abandons the call attempt and issues a START_RELEASE_IND to the
application.
Once the application acknowledges, a CLF is sent to the network.
Figure B-10
Appendix B
Setup - Failure to Receive ANN (or ANC)
821
TUP Addendum
Call Control
Setup Request - Unsuccessful Backward Setup Message
When an unsuccessful backward setup message is received from the
network after the sending of an IAM message, then the TUP library
issues a RELEASE_IND primitive to the application.
In all cases, the TUP layer enters a state to wait for the application to
perform the release of the call using the RELEASE_REQ primitive.
However, in the special case of an SLB signal, the scenario given in
Figure B-46, “Re-answer Procedure - Outgoing Side - After SLB (CTUP
Only),” may also occur.
Figure B-11
Setup - Failure - Outgoing Side - Use of UBM
NOTE
In Figure B-11, UBM is one of the following messages: ACB, ADI, CFL, CGC,
DPN, EUM, LOS, NNC, SEC, SLB, SSB, SST, STB, or UNN.
822
Appendix B
TUP Addendum
Call Control
Figure B-12
Setup - Failure - Incoming Side - Use of UBM
NOTE
In Figure B-12, UBM is one of the following messages: ACB, ADI, CFL, CGC,
DPN, EUM, LOS, NNC, SEC, SLB, SSB, SST, STB, or UNN.
Appendix B
823
TUP Addendum
Call Control
Incoming Call Setup with Immediate Release
In the scenario shown in Figure B-13, a CLF message is received
immediately following the incoming IAM message.
Figure B-13
Incoming Call Setup With Immediate Release
Successful Call Setup for Outgoing Side
In the scenario shown in Figure B-14, an IAM (or IAI) message is sent.
An ACM message is received before T2 expires.
An ANN (or ANC) message is received before Twann expires.
Figure B-14
824
Successful Call Setup - Outgoing Side
Appendix B
TUP Addendum
Call Control
Successful Call Setup for Incoming Side
In the scenario shown in Figure B-15, an IAM (or IAI) message is
received.
An ACM message is sent followed by an ANN (or ANC) message.
Figure B-15
Appendix B
Successful Call Setup - Incoming Side
825
TUP Addendum
Call Control
Use of SAM and SAO Messages
In the case where an overlap operation is used after the initial address
message has been sent, the remaining address signal may be sent in
one-digit subsequent address messages (SAO) or in a multi-digit message
(SAM). The INFORMATION_REQ and INFORMATION_IND primitive are used
to carry SAM or SAO messages between the application and the TUP layer.
Figure B-16
826
Use of SAM or SAO - Outgoing Side
Appendix B
TUP Addendum
Call Control
Figure B-17
Appendix B
Use of SAM or SAO - Incoming Side
827
TUP Addendum
Call Control
Information Exchange
In the scenario shown in Figure B-18, an IAM message is sent to the
network. This is followed by 2 SAM messages.
Subsequently, a GRQ message is received from the network, and a GSM
message is sent in response.
After the information exchange, an ACM message is received followed by
an ANN message.
Figure B-19 shows the incoming side of this scenario.
Figure B-18
828
Solicited Information Exchange - Outgoing Side
Appendix B
TUP Addendum
Call Control
In the scenario shown in Figure B-19, an IAM message is received from
the network.
This is followed by 2 SAM messages (and an SAO message between the 2
SAM messages).
Subsequently, a GRQ message is sent and a GSM message is received in
response.
After the information exchange, the ACM and ANN messages are sent.
Figure B-18 shows the outgoing side of this scenario.
Figure B-19
Appendix B
Solicited Information Exchange - Incoming Side
829
TUP Addendum
Call Control
Use of GRQ and GSM Messages
This section describes the use of GRQ (General Request Message) and GSM
(General Forward Setup Information Message).
The GRQ/GSM protocol can be initiated only during call setup.
A unique GSM must be sent in response to a GRQ and must only contain
answers to all the requests contained in the GRQ.
This is shown in Figure B-20 and Figure B-21.
Figure B-20
Incoming IAM (or IAI) Leading to GRQ and GSM
Figure B-21
Outgoing IAM Leading to GRQ and GSM
Any information received in the GSM other than that specifically
requested in the associated GRQ is ignored.
If a second GSM is received (in response to a GRQ), it is ignored. This is
shown in Figure B-22.
830
Appendix B
TUP Addendum
Call Control
Figure B-22
Incoming IAM (or IAI) and Two GSMs Received
Normally, the side which sent the GRQ should wait until it receives the
GSM before sending an ACM. This is shown in Figure B-23.
However, there is an exception (shown in Figure B-24) for the case of an
international network that is completely SS7.
Figure B-23
ACM Sent After GSM Received
However, in a fully SS7 international network, the international transit
exchange is not required to delay sending the ACM even if the GRQ/GSM
cycle has not been completed (that is, it ignores the GSM). This is shown
in Figure B-24.
Appendix B
831
TUP Addendum
Call Control
Figure B-24
ACM Sent Before GSM Received
If a GRQ is received before the GSM is sent in reply, the second GRQ is
ignored. This is shown in Figure B-25.
Figure B-25
Second GRQ Received Before GSM Sent
If the call attempt fails (for example, a CGC, NNC, CFL, etc., is received)
during the period when an exchange is waiting for a GSM, then the
appropriate backward call failure is sent without waiting for the GSM.
This is shown in Figure B-26.
832
Appendix B
TUP Addendum
Call Control
Figure B-26
Call Failure During Wait for GSM
If the GSM is not sent before T2 expires (20 - 30 seconds, waiting to receive
ACM), the call attempt fails (a CLF is sent).
This is shown in Figure B-27.
Figure B-27
Appendix B
ACM Timeout Because of Failure to Send GSM
833
TUP Addendum
Call Control
Continuity Check Request with IAM or CCR
The Continuity Check is a procedure for checking a circuit. It can be
requested, when supported by the selected flavor, in an IAM, an IAI, or a
CCR message. The following sections describe a number of Continuity
scenarios.
Continuity Check on This Circuit
A Continuity Check is performed on the current circuit if the continuity
check indicator in the IAM message is set to ‘Continuity Check required
on this circuit’.
Successful Continuity Check
The outgoing side sends a Continuity message with a successful indication after
a correct check of the transmission path (a loop is required on the incoming side,
a tone is sent from the outgoing side and is returned in time).
834
Appendix B
TUP Addendum
Call Control
Figure B-28
Appendix B
Continuity Check - Success - Outgoing Side
835
TUP Addendum
Call Control
Figure B-29
836
Continuity Check - Success - Incoming Side
Appendix B
TUP Addendum
Call Control
Failed Continuity Check
In the case presented below, the loopback tone is not detected by the application,
and consequently the T8 timer expires.
A CCF message indicating ContinuityFailure is sent by HP OpenCall SS7 TUP.
Figure B-30
Appendix B
Continuity Check - Outgoing Side - Failure
837
TUP Addendum
Call Control
Figure B-31
Continuity Check - Incoming Side - Failure
After a failed continuity check, a re-check is done automatically as depicted in
the Continuity Recheck.
Continuity Recheck
If the continuity recheck procedure is a success, only the outgoing side sends a
CLF message to finish the procedure.
838
Appendix B
TUP Addendum
Call Control
Figure B-32
Appendix B
Continuity Recheck - Outgoing Side - Success
839
TUP Addendum
Call Control
The timer Twccr is equivalent to the ISUP ITU 88 timer T27 (4 minutes):
"waiting for CCR message". Upon Twccr timeout a SETUP_FAILURE_IND
(TWCCR_TIMEOUT) primitive is sent to the application.
Figure B-33
840
Continuity Recheck - Incoming Side - Success
Appendix B
TUP Addendum
Call Control
Continuity Recheck - Test Call
An explicit request for continuity recheck can also be issued by the application to
HP OpenCall SS7 TUP. It is ignored if the circuit is not idle.
Figure B-34
Continuity Recheck - Outgoing Side - Test Call
Figure B-35
Continuity Recheck - Incoming Side - Test Call
Appendix B
841
TUP Addendum
Call Control
Continuity Recheck - T8 Expiry at Outgoing Side
If the T8 timer expires during the continuity recheck phase, either activated after
a continuity failure during call setup, or after an explicit continuity recheck
request, the following occurs.
842
•
On the outgoing side, a CCF is issued to the network, and a
MAINTENANCE_SYSTEM_IND primitive indicating T8_TIMEOUT is issued to the
application after the second continuity failure (including the eventual call
setup continuity failure). The T10 timer is started to restart a continuity
recheck phase at its expiry.
•
On the incoming side, a CCF is received, and a MAINTENANCE_SYSTEM_IND
primitive indicating COT_RECEIVED is issued to the application after the
second continuity failure (including the eventual call setup continuity
failure). The Twccr timer is started to wait for a new incoming CCR.
Appendix B
TUP Addendum
Call Control
Figure B-36
Appendix B
Continuity Recheck - Outgoing Side - T8 Expiry
843
TUP Addendum
Call Control
Figure B-37
844
Continuity Recheck - Incoming Side - CCF
Appendix B
TUP Addendum
Call Control
Continuity Check on the Previous Circuit
A Continuity Check is performed on the previous circuit if the
continuityCheckIndicator in the IAM (or IAI) message is set to
“Continuity Check required on the previous circuit”.
Figure B-38
Continuity Check on Previous Circuit - Outgoing Side - COT
Figure B-39
Continuity Check on Previous Circuit - Incoming Side - COT
Appendix B
845
TUP Addendum
Call Control
Figure B-40
Continuity Check on Previous Circuit - Outgoing Side - CCF
Figure B-41
Continuity Check on Previous Circuit - Incoming Side - CCF
846
Appendix B
TUP Addendum
Call Control
Re-answer Procedures
The re-answer procedures provided in the TUP protocol allow for a call to
be re-established after one of the following clear messages has been sent:
•
CBK (Clear backward message).
When the called side goes on-hook first, the CBK message is sent to
the calling side. If the called side goes off-hook immediately
afterwards, then the RAN message is issued to the calling side and the
call returns to the incoming answered state.
The Twran timer measures the delay in which the re-answer
procedure is allowed. It is started upon CBK receipt at the calling
side. On Twran expiry, the call is automatically released by sending a
START_RELEASE_IND to the primitive and a CLF to the network.
•
CCL (Calling party clear signal).
In some conditions (defined by the application), when the calling side
goes on-hook first, the CCL message is sent to the called side. If the
calling side goes off-hook immediately afterwards, then the RAN
message is issued to the called side and the call returns to the
incoming answered state.
The Twran timer measures the delay in which the re-answer
procedure is allowed. It is started upon CCL receipt at the called side.
On Twran expiry, the call is automatically released by sending a
START_RELEASE_IND to the primitive and a CBK to the network.
The OPR message may be used in case of operator calls, in order to
generate re-ringing of a subscriber who has just gone on-hook. The
objective is for an operator to get the subscriber to go off-hook. The OPR
signal is transparently transmitted to/from the application by means of
the primitives OPERATOR_SIGNAL_IND and OPERATOR_SIGNAL_REQ.
NOTE
The OPR message and the OPERATOR_SIGNAL_IND and
OPERATOR_SIGNAL_REQ primitives are not supported in ITUP.
In the following scenarios, the use of OPR is shown in italic font because it
is optional in the re-answer procedure.
Appendix B
847
TUP Addendum
Call Control
Called Side Goes On-hook First
The called side (shown in Figure B-42) goes on-hook first. It sends a CBK
message and starts Twclr (to wait for a CLR message). When it goes
off-hook again immediately afterwards, it stops Twclr and sends a RAN
message to the calling side (shown in Figure B-43).
Figure B-42
Re-answer Procedure - Incoming Side - RAN After CBK
The calling side (shown in Figure B-43), receives the CBK message and
starts Twran (to wait for a RAN message). It receives the RAN message
before Twran expires.
Figure B-43
848
Re-answer Procedure - Outgoing Side - RAN After CBK
Appendix B
TUP Addendum
Call Control
Calling Side Goes On-hook First
The calling side (shown in Figure B-44) goes on-hook first. It sends a CCL
message and starts Twclr (to wait for the CLR message). When it goes
off-hook again immediately afterwards, it stops Twclr and sends a RAN
message to the called side (shown in Figure B-45).
Figure B-44
Re-answer Procedure - Outgoing Side - RAN After CCL
The called side (shown in Figure B-45), receives a CCL message and
starts Twran (to wait for a possible RAN message). It receives the RAN
message before Twran expires.
Figure B-45
Appendix B
Re-answer Procedure - Incoming Side - RAN After CCL
849
TUP Addendum
Call Control
After Local Subscriber Busy (CTUP Only)
This procedure is available for operator calls when the operator provides
Trunk Offering. If an SLB message (not available in ITUP) is received as
a response to the setup message sent by the operator, the call may be
established after the busy called side goes on-hook.
The scenario is shown in Figure B-46 (for the outgoing side) and
Figure B-47 (for the incoming side).
Figure B-46
850
Re-answer Procedure - Outgoing Side - After SLB (CTUP Only)
Appendix B
TUP Addendum
Call Control
Figure B-47
Appendix B
Re-answer Procedure - Incoming Side - After SLB (CTUP Only)
851
TUP Addendum
Call Control
Call Release
A call can be released by either party, calling or called.
If the application wishes to release a circuit, it will send a RELEASE_REQ
primitive with a CLF message containing the cause for releasing the
circuit. The circuit status is modified to TRANSIENT, and the CLF message
is sent to the SS7 network.
If the called part initiates the release, the application is notified with a
RELEASE_IND from the TUP library.
Normal Call Release
In scenario shown in Figure B-48, the application managing the call
initiates the release. The HP OpenCall TUP layer starts 2 timers when
sending the Clear Forward Message:
T6 Timer
"waiting for release-guard signal" (4-15 seconds).
T7 Timer
"stop sending clear-forward signal on timeout" (1
minute).
The CLF message is repeated every T6 until either an RLG is received or
T7 expires. If T7 expires, a reset circuit procedure is initiated.
Figure B-48
852
Normal Call Release - Initiated from Calling Party
Appendix B
TUP Addendum
Call Control
In the scenario shown in Figure B-49, the Clear-back signal is sent in the
backward direction indicating that the called party has cleared the call.
The call is not released immediately at the calling side to allow for the
possible reception of a re-answer signal as shown in “Re-answer
Procedures” on page 847.
Figure B-49
Appendix B
Normal Call Release - Initiated from Called Party
853
TUP Addendum
Call Control
In the scenario shown in Figure B-50, the called party does not go
on-hook and no RAN message is received from network. When Twran
expires, the call is automatically released by the TUP layer by issuing a
START_RELEASE_IND primitive to the application.
Figure B-50
854
Normal Call Release - Initiated from Called Party After Twran
Expiry
Appendix B
TUP Addendum
Call Control
In the scenario shown in Figure B-51, the application sends a Clear-back
signal in the backward direction indicating to the calling part that the
call is cleared.
The call is not released immediately at the calling side to allow for the
possible reception of a re-answer signal as shown in “Re-answer
Procedures” on page 847.
Figure B-51
Normal Call Release - Outgoing Release in Backward Direction
In the scenario shown in Figure B-52, a CFL message is received. A CLF is
sent and T6 and T7 are started. The release is completed (the circuit
returns to IDLE) when the RLG message is received.
Figure B-52
Normal Call Release - Call Failure Signal Received
In the scenario shown in Figure B-53, a CFL message is sent and T4 and
T5 are started. A CLF is received and T4 and T5 are stopped.
Appendix B
855
TUP Addendum
Call Control
When the release is completed (the circuit state returns to IDLE), the RLG
message is sent.
Figure B-53
856
Normal Call Release - Call Failure Signal Sent
Appendix B
TUP Addendum
Call Control
Abnormal Call Release
In the scenario shown in Figure B-54, a CLF message is sent and T6 and
T7 are started. T6 expires and another CLF message is sent.
When T7 expires, a MAINTENANCE_SYSTEM_IND primitive is sent to the
application. An RSC message is sent (and T18 and T19 are started).
When the RLG message is received, the reset is completed (the circuit
state returns to IDLE).
Figure B-54
Appendix B
Abnormal Call Release - Failure To Receive RLG After Sending
CLF
857
TUP Addendum
Call Control
In the scenario shown in Figure B-55, a CBK message is sent and Twclr is
started. Twclr expires and a CFL message is sent (and T4 and T5 are
started).
A CLF message is received (and T4 and T5 are stopped).
When the release is completed (the circuit state returns to IDLE), the RLG
message is sent.
Figure B-55
858
Abnormal Call Release - Failure To Receive CLF After Sending
CBK
Appendix B
TUP Addendum
Call Control
In the scenario shown in Figure B-56, a CFL message is sent and T4 and
T5 are started.
T4 expires and another CFL message is sent (and T4 is re-started).
T5 expires and a MAINTENANCE_SYSTEM_IND primitive is sent to the
application (and T4 is stopped).
An RSC message is sent (and T18 and T19 are started).
A CLF message is received (and T18 and T19 are stopped).
When the reset is completed (the circuit state returns to IDLE), the RLG
message is sent.
Figure B-56
Appendix B
Abnormal Call Release - Failure To Receive CLF After Sending
CFL
859
TUP Addendum
Call Control
Circuit Reset
The circuit reset mechanism is used to reset a circuit to an IDLE
condition, thereby making the circuit available for new traffic.
Successful Reset from Application - Incoming Exchange
In the scenario shown in Figure B-57 (case of an incoming call), the Reset
procedure is initiated by the application by issuing a RESET_REQ (RSC)
primitive. The TUP library sends an RSC message to the network.
A CLF message is received. When the circuit state is set to IDLE, an RLG
message is sent to the network.
Figure B-57
860
Successful Reset from Application- Incoming
Appendix B
TUP Addendum
Call Control
Successful Reset from Application - Outgoing Exchange
In the scenario shown in Figure B-58 (case of an outgoing call), the Reset
procedure is initiated by the application by issuing a RESET_REQ (RSC)
primitive. The TUP library sends an RSC message to the network.
When an RLG message is received, the circuit state is set to IDLE.
Figure B-58
Appendix B
Successful Reset from Application- Outgoing
861
TUP Addendum
Call Control
Reset from Network - Incoming Exchange - Successful
Procedure
In the scenario shown in Figure B-59 (case of an incoming call), the Reset
procedure is initiated by the network.
The TUP Layer accepts the signal as a clear-forward signal and responds
by sending a release-guard signal, after the circuit has been made idle.
This scenario is applicable to an incoming exchange in any phase of call
set-up or during a call.
The application has to reply promptly though HP OpenCall SS7 TUP
and does not set a timer (waiting for RESET_RESP from the application).
Figure B-59
862
Reset from Network - Incoming Exchange - Successful Procedure
Appendix B
TUP Addendum
Call Control
Reset from Network - Outgoing Exchange - Successful
Procedure
In the scenario shown in Figure B-60 (case of an outgoing call), the Reset
procedure is initiated by the network.
The TUP Layer accepts the signal as a clear-back or call failure signal
and responds by sending a clear forward signal. The circuit state is set to
IDLE when an RLG message is received. The application has to wait for
RESET_CONF.
Figure B-60
Appendix B
Reset from Network - Outgoing Exchange - Successful Procedure
863
TUP Addendum
Call Control
HP OpenCall SS7 TUP Initiated Reset - Successful Procedure
In the scenario shown in Figure B-61, HP OpenCall SS7 TUP initiates a
Reset procedure if it receives an unexpected message (a RAN message)
after it sends an IAM message.
As a result, it sends a START_RESET_IND primitive to the application.
The primitive contains an additional information (StartReset) indicating
the cause of the setup failure: UNEXPECTED_MESSAGE. The application
must respond to this indication as soon as possible via a
START_RESET_IND_ACK primitive.
On reception of the latter primitive, HP OpenCall SS7 TUP sends an RSC
message to the network and starts timers T18 and T19.
On receipt of the RLG message, a RESET_CONF primitive is sent to the
application.
Figure B-61
864
Circuit Reset - Successful Procedure
Appendix B
TUP Addendum
Call Control
HP OpenCall SS7 TUP Initiated Reset - Failure to Receive RLG
In the scenario shown in Figure B-62, HP OpenCall SS7 TUP initiates
the reset procedure because of the reception of an unexpected message.
The network fails to respond with an RLG message.
As a result, HP OpenCall SS7 TUP retransmits an RSC message every
T18, until the procedure is stopped by the application via a STOP_REQ
primitive or until the first T19 time-out.
After T19:
Appendix B
•
A MAINTENANCE_SYSTEM_IND is sent to the application, informing the
application/operator about the error situation.
•
RSC messages are sent every T19 (typically 1 minute) instead of
every T18 (typically 5 seconds) until a STOP_REQ primitive is received
from the application.
865
TUP Addendum
Call Control
Figure B-62
Circuit Reset - Failure to Receive RLG
Reset in Locally Blocked Conditions
This is the same as for ISUP, but instead of the RLC after the BLO, a CLF,
or RLG signal is sent depending on whether it is an incoming or an
outgoing call. The BLO message has to be acknowledged. If not, the
repetition procedure is applied.
Reset in Remotely Blocked Conditions
This is the same as for ISUP, but instead of an RLC, respond with a CLF
for outgoing call and RLG for all other cases.
866
Appendix B
TUP Addendum
Call Control
Dual Reset Circuit Conditions
This is the same as for ISUP, except an RLG is sent instead of an RLC.
Circuit Group Reset
See also “Generic TUP Circuit Group Message Handling” on page 813.
The GRS message is always sent twice to avoid erroneous group reset
operations. On the reception side, if only one message is received within
5 seconds, then the operation is canceled.
Table B-12 gives the timers used for group reset.
Table B-12
Timer
name
Appendix B
Timers Used for Group Reset
Group
Message
Operation
T20
GRS
Waiting for second GRS message.
T21
GRA
Waiting for GRA message.
T22
GRS
Delay before sending the GRS
message.
867
TUP Addendum
Call Control
Group Reset From Network - Normal Case
In the scenario shown in Figure B-63, a GRS message is received for 2
circuits for which the current state is not IDLE.
On the first GRS, a timer T20 is started, and the state is set to "Wait for
second GRS".
On the second GRS, a GROUP_RESET_IND primitive is sent to the
application, then a RESET_IND primitive is sent for each circuit.
The GRA group reset acknowledgment message is sent back only after all
the expected RESET_RESP and the GROUP_RESET_RESP (without the GRA
associated message) primitives have been received from the application
(when all the circuits are in the appropriate state).
Figure B-63
868
Group Reset From Network - Normal Case - Range Not Zero
Appendix B
TUP Addendum
Call Control
In the scenario shown in Figure B-64, a GRS message is received for 2
circuits for which the current state is not IDLE.
On the first GRS, a timer T20 is started, and the state is set to "Wait for
second GRS".
On the second GRS, a GROUP_RESET_IND primitive is sent to the
application, which responds with a GROUP_RESET_RESP (with GRA
associated message) primitive indicating to the remote end that a group
reset procedure is started.
Then, a START_RESET_IND primitive is sent to the application for each
circuit involved in the group.
For each START_RESET_IND_ACK primitive, an RSC message is sent to the
network, and the remote end will respond with an RLG message.
Figure B-64
Appendix B
Group Reset From Network - Normal Case - Range Zero
869
TUP Addendum
Call Control
Reset From User - Normal Case
In this scenario shown in Figure B-65, a GROUP_RESET_REQ request is
sent by the user. All the circuits of the group are remotely and locally
unblocked, and the GRS message is sent to the network. Then, TUP waits
for the Acknowledgment message GRA before returning the circuit state
to IDLE.
In the case where the range parameter value is 0 in the GRS sent, then
for all the circuits involved an RSC will be received from network, and a
RLG sent in response (see “Group Reset From Network - Normal Case” on
page 868).
Figure B-65
870
Group Reset From User - Normal Case
Appendix B
TUP Addendum
Call Control
Failure Case - No Acknowledgment Received From Network
In the scenario shown in Figure B-66, the application sends a
GROUP_RESET_REQ primitive. If no response is received from the remote
end, GRS messages are repeated according to the T21 and T22
mechanism.
Figure B-66
Appendix B
Group Reset - Failure Case - No Acknowledgment Received From
Network
871
TUP Addendum
Call Control
Failure Case - No Response Received From Application
In the case shown in Figure B-67, the GROUP_RESET_RESP primitive is
sent back by the application but not all RESET_IND primitives have been
acknowledged. The GRA message cannot be sent back to the network and
an error is returned to the application.
Figure B-67
872
Group Reset - Failure Case - No Response Received From
Application
Appendix B
TUP Addendum
Call Control
Double Reset - Normal Case
In the scenario shown in Figure B-68, a circuit is to be reset twice; first
by a Circuit Reset RSC, and then by a Circuit Group Reset (it belongs to
the group).
After the list of circuits involved in the group is established,
HP OpenCall SS7 TUP finds that circuit is already being reset,
therefore, it does not produce a RESET_IND for it.
The application responds to the first RESET_IND by a RESET_RESP, and
then to the other RESET_IND. On receipt of GROUP_RESET_RESP, as all the
circuits of the group are in the appropriate state, HP OpenCall SS7 TUP
can send the GRA.
Note that it is likely that the RESET_RESP corresponding to the Circuit
Reset contains an RLG message and no additional info, thus causing an
RLG message to be sent to the network.
Figure B-68
Appendix B
Double Reset - Normal Case - Range Not Zero
873
TUP Addendum
Call Control
In the scenario shown in Figure B-69, a circuit is to be reset twice; first
by a Circuit Reset RSC, then by a Circuit Group Reset (it belongs to the
group). RESET_IND procedure as well as the START_RESET_IND is
involved for it because at the remote end, group reset procedure is
waiting for an RSC for each circuit.
Figure B-69
874
Double Reset - Normal Case - Range Zero
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Maintenance
This section describes circuit maintenance processes.
The equivalent information for HP OpenCall SS7 ISUP is in Chapter 19,
“ISUP Circuit Maintenance - Procedures Specific to ANSI,” and
Chapter 20, “ISUP Circuit Maintenance - Procedures Specific to ITU-T.”
The circuit maintenance processes described in this section include:
•
circuit blocking and unblocking
•
circuit group blocking and unblocking
Circuit Blocking/Unblocking
Circuit Blocking From Network - Normal Case
In the scenario shown in Figure B-70, a BLO message is received from the
network (requesting that a circuit be blocked).
A BLOCKING_IND primitive is issued to the application.
Once the application responds with a BLOCKING_RESP primitive, the
circuit state is set to IDLE_MN_REMOTELY_BLOCKED, and a BLA message is
sent to the network.
Figure B-70
Appendix B
Circuit Blocking From Network - Normal Case
875
TUP Addendum
Circuit Maintenance
Circuit Blocking From User - Normal Case
In the scenario shown in Figure B-71, a BLOCKING_REQ primitive is
issued by the application.
A BLO message is sent to the network.
Timer T11 is set to 0 to have the application alerted of the maintenance
blocking operation immediately on receipt of the BLA message.
Otherwise, the application will be alerted at T11 expiry if the circuit is
still locally blocked.
The circuit state is set to IDLE_MN_LOCALLY_BLOCKED, and a
BLOCKING_CONF primitive is issued to the application.
Figure B-71
Circuit Blocking From User - Normal Case
Circuit Unblocking From Network - Normal Case
In the case shown in Figure B-72, the UBL message only unblocks a
maintenance oriented blocked circuit.
Figure B-72
876
Circuit Unblocking From Network - Normal Case
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Unblocking From User - Normal Case
In the scenario shown in Figure B-73, an UNBLOCKING_REQ primitive is
issued by the application.
A UBL message is sent to the network.
Once the UBA message is received from the network, the circuit is
unblocked and the circuit state is set to IDLE.
Figure B-73
Circuit Unblocking From User - Normal Case
Circuit Unblocking From Network - On Reception of IAM
A blocked circuit can be unblocked only by unblocking or reset messages.
Circuit Blocking During the Setup Procedure
In the scenario shown in Figure B-74, a SETUP_REQ (IAM) primitive is
issued by the application. An IAM message is sent to the network.
Before the ACM message is received, a BLO message is received
(requesting that the circuit be blocked).
A MAINTENANCE_SYSTEM_IND primitive is issued to the application.
Once the application responds with a BLOCKING_RESP primitive, the
circuit state is set to IDLE_MN_REMOTELY_BLOCKED, and a BLA message is
sent to the network.
A START_RELEASE_IND primitive is issued to the application, and once it
is acknowledged, a CLF message is sent to the network. The release is
complete once the RLG message is received from the network.
In the case shown in Figure B-74, an automatic call re-attempt should be
made by the application on another circuit.
Appendix B
877
TUP Addendum
Circuit Maintenance
Figure B-74
Circuit Blocking During Setup Procedure - Outgoing Side
Figure B-75 shows the incoming side of the scenario whose outgoing side
is shown in Figure B-74.
In the case shown in Figure B-75, if the IAM message concerns a test call,
then the call would be accepted.
Figure B-75
878
Circuit Blocking During Setup Procedure - Incoming Side
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Blocking/Unblocking
HP OpenCall SS7 TUP handles tree types of Group Blocking messages:
•
Group Blocking for a maintenance reason.
•
Group Blocking for a hardware reason.
•
Group Blocking for a software reason.
All group blocking and unblocking messages are sent twice to prevent
erroneous blocking operations. On the reception side, if only one message
is received within 5 seconds, then the operation is canceled. The
corresponding timers are given in Table B-13.
Table B-13
Timer Name
Timers for Circuit Group
Blocking/Unblocking
Group Message
Type
Operation
T23
MGB
maintenance blocking
T24
MGU
maintenance
unblocking
T30
HGB
hardware blocking
T31
HGU
hardware unblocking
T36
SGB
software blocking
T37
SGU
software unblocking
See also “Generic TUP Circuit Group Message Handling” on page 813.
Appendix B
879
TUP Addendum
Circuit Maintenance
Circuit Group Blocking
Circuit Group Blocking From Network - Maintenance OrientedNormal Case
In the scenario shown in Figure B-76, 2 MGB messages are received from
the network in less than 5 seconds (timer T23). This specifies that
"maintenance group blocking" should be performed.
Consequently, HP OpenCall SS7 TUP:
Step 1. Issues a GROUP_BLOCKING_IND primitive to the application.
Step 2. Issues a MAINTENANCE_SYSTEM_IND indicating MN_GROUP_BLOCKING.
Step 3. Marks all the circuits concerned as "maintenance remotely blocked".
Step 4. Upon receipt of a GROUP_BLOCKING_RESP primitive, sends back the
acknowledgment message MBA.
Timer T25 is set to 0 to have the application alerted of the maintenance
blocking operation immediately on reception of the second MGB message.
If not, the application will be alerted at T25 expiry if no management
group unblocking has been performed on this circuit.
Figure B-76
880
Group Blocking from Network - MN - Normal Case
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Blocking from Network - Hardware Oriented Normal Case
In the scenario shown in Figure B-77, 2 HGB messages are received from
the network in less than 5 seconds (timer T30). This specifies that
"hardware group blocking" should be performed.
Consequently, HP OpenCall SS7 TUP:
Step 1. Issues a HW_GROUP_BLOCKING_IND primitive to the application.
Step 2. Issues a MAINTENANCE_SYSTEM_IND indicating HW_GROUP_BLOCKING.
Step 3. Marks all the circuits concerned as "hardware remotely blocked".
Step 4. Upon receipt of a HW_GROUP_BLOCKING_RESP primitive, sends back the
acknowledgment message HBA.
Figure B-77
Appendix B
Group Blocking from Network - HW - Normal Case
881
TUP Addendum
Circuit Maintenance
Circuit Group Blocking from Network - Software Oriented Normal Case
In the scenario shown in Figure B-78, two SGB messages are received
from the network in less than 5 seconds (timer T36). This specifies that
"software group blocking" should be performed.
Consequently, HP OpenCall SS7 TUP:
Step 1. Issues a SW_GROUP_BLOCKING_IND primitive to the application.
Step 2. Issues a MAINTENANCE_SYSTEM_IND indicating SW_GROUP_BLOCKING.
Step 3. Marks all the circuits concerned as "software remotely blocked".
Step 4. Upon receipt of a SW_GROUP_BLOCKING_RESP primitive, sends back the
acknowledgment message SBA.
Figure B-78
882
Group Blocking from Network - SW - Normal Case
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Blocking from User - Maintenance Oriented Normal Case
In the scenario shown in Figure B-79, a GROUP_BLOCKING_REQ request is
sent by the user.
Consequently, HP OpenCall SS7 TUP:
Step 1. Sends two MGB messages to the network.
Step 2. Upon receipt of an MBA message from the network, issues a
GROUP_BLOCKING_CONF(MBA) primitive to the application.
Step 3. Marks all the circuits concerned as "maintenance locally blocked".
Figure B-79
Appendix B
Group Blocking from User - MN - Normal Case
883
TUP Addendum
Circuit Maintenance
Circuit Group Blocking from User - Hardware Oriented - Normal
Case
In the scenario shown in Figure B-80, a HW_GROUP_BLOCKING_REQ
request is sent by the user.
Consequently, HP OpenCall SS7 TUP:
Step 1. Sends two HGB messages to the network.
Step 2. Upon receipt of an HBA message from the network, issues a
HW_GROUP_BLOCKING_CONF(HBA) primitive to the application.
Step 3. Marks all the circuits concerned as "hardware locally blocked".
If one of the circuits concerned is seized by a call, then the call state is set
to IDLE, running timers are stopped, and a SETUP_FAILURE_IND
primitive or a RELEASE_IND primitive (without associated message) is
issued to the application.
Figure B-80
884
Group Blocking from User - HW - Normal Case
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Blocking from User - Software Oriented - Normal
Case
In the scenario shown in Figure B-81, a SW_GROUP_BLOCKING_REQ
request is sent by the user.
Consequently, HP OpenCall SS7 TUP:
Step 1. Sends two SGB messages to the network.
Step 2. Upon receipt of an SBA message from the network, issues a
SW_GROUP_BLOCKING_CONF(SBA) primitive to the application.
Step 3. Marks all the circuits concerned as "software locally blocked".
If one of the circuits concerned is seized by a call, then the call state is set
to IDLE, running timers are stopped, and a SETUP_FAILURE_IND
primitive or a RELEASE_IND primitive (without associated message) is
issued to the application.
Figure B-81
Appendix B
Group Blocking from User - SW - Normal Case
885
TUP Addendum
Circuit Maintenance
Circuit Group Blocking During Setup - Maintenance Oriented Normal Case
In the scenario shown in Figure B-82, two MGB messages arrive from the
network after an IAM message has been sent.
Figure B-82
886
Group Blocking During Call Setup - MN - Normal Case
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Blocking During Call Setup - Hardware Oriented Normal Case
In the scenario shown in Figure B-83, two HGB messages arrive from the
network after an IAM message has been sent.
Figure B-83
Appendix B
Group Blocking During Call Setup - HW - Normal Case
887
TUP Addendum
Circuit Maintenance
Circuit Group Blocking During Call Setup - Software Oriented Normal Case
In the scenario shown in Figure B-84, two SGB messages arrive from the
network after an IAM message has been sent.
Figure B-84
888
Group Blocking During Call Setup - SW - Normal Case
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Unblocking
Circuit Group Unblocking from Network (Maintenance
Oriented) - Normal Case
In the scenario shown in Figure B-85, 2 MGU messages are received from
the network in less than 5 seconds (timer T24). This specifies that
"maintenance group unblocking" should be performed.
Consequently, HP OpenCall SS7 TUP:
Step 1. Issues a GROUP_UNBLOCKING_IND primitive to the application.
Step 2. On receipt of a GROUP_UNBLOCKING_RESP primitive, sends back the
acknowledgment message MUA.
Step 3. Marks all the circuits concerned as "maintenance remotely unblocked".
A maintenance blocked condition can only be removed by a maintenance
oriented unblocking message.
Figure B-85
Appendix B
Group Unblocking from Network - MN - Normal Case
889
TUP Addendum
Circuit Maintenance
Circuit Group Unblocking from Network (Hardware Oriented) Normal Case
In the scenario shown in Figure B-86, 2 HGU messages are received from
the network in less than 5 seconds (timer T31). This specifies that
"hardware group unblocking" should be performed.
Consequently, HP OpenCall SS7 TUP:
Step 1. Issues a HW_GROUP_UNBLOCKING_IND primitive to the application.
Step 2. Upon receipt of a HW_GROUP_UNBLOCKING_RESP primitive, sends back the
acknowledgment message HUA.
Step 3. Marks all the circuits concerned as "hardware remotely unblocked".
Figure B-86
890
Group Unblocking from Network - HW - Normal Case
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Unblocking from Network (Software Oriented) Normal Case
In the scenario shown in Figure B-87, 2 SGU messages are received from
the network in less than 5 seconds (timer T37). This specifies that
"software group unblocking" should be performed.
Consequently, HP OpenCall SS7 TUP:
Step 1. Issues a SW_GROUP_UNBLOCKING_IND primitive to the application.
Step 2. Upon receipt of a SW_GROUP_UNBLOCKING_RESP primitive, sends back the
acknowledgment message SUA.
Step 3. Marks all the circuits concerned as "software remotely unblocked".
Figure B-87
Appendix B
Group Unblocking from Network - SW - Normal Case
891
TUP Addendum
Circuit Maintenance
Circuit Group Unblocking from User (Maintenance Oriented) Normal Case
In the scenario shown in Figure B-88, a GROUP_UNBLOCKING_REQ request
is sent by the user.
Consequently, HP OpenCall SS7 TUP:
Step 1. Sends two MGU messages to the network.
Step 2. Upon receipt of an MUA message from the network, issues a
GROUP_UNBLOCKING_CONF(MUA) primitive to the application.
Step 3. Marks all the circuits concerned as "maintenance locally unblocked".
Figure B-88
892
Group Unblocking from User - MN - Normal Case
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Unblocking from User (Hardware Oriented) Normal Case
In the scenario shown in Figure B-89, a HW_GROUP_UNBLOCKING_REQ
request is sent by the user.
Consequently, HP OpenCall SS7 TUP:
Step 1. Sends two HGU messages to the network.
Step 2. Upon receipt of an HUA message from the network, issues a
HW_GROUP_UNBLOCKING_CONF(HUA) primitive to the application.
Step 3. Marks all the circuits concerned as "hardware locally unblocked".
Figure B-89
Appendix B
Group Unblocking from User - HW - Normal Case
893
TUP Addendum
Circuit Maintenance
Circuit Group Unblocking from User (Software Oriented) Normal Case
In the scenario shown in Figure B-90, a SW_GROUP_UNBLOCKING_REQ
request is sent by the user.
Consequently, HP OpenCall SS7 TUP:
Step 1. Sends two SGU messages to the network.
Step 2. Upon receipt of an SUA message from the network, issues a
SW_GROUP_UNBLOCKING_CONF(SUA) primitive to the application.
Step 3. Marks all the circuits concerned as "software locally unblocked".
Figure B-90
894
Group Unblocking from User - SW - Normal Case
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Blocking/Unblocking - Acknowledgment
When a group blocking or unblocking message is sent to the network,
two timers Tx and Ty (Tx and Ty are given with the corresponding group
message type in Table B-14) are started to wait for the acknowledgment.
Their use is described as follows:
•
On Tx timeout (4-15 seconds), the group message is re-sent (twice) to
the network and Tx timer is restarted.
•
On Ty timeout (1 minute), the group message is re-sent (twice) to the
network and the Ty timer is restarted. If is the first Ty timeout, a
MAINTENANCE_SYSTEM_IND (Ty_TIMEOUT) primitive is issued to the
application, and timer Tx is stopped.
Acknowledgment Timers Used
Table B-14 lists the timers used to wait for acknowledgment during
group blocking/unblocking operations.
Table B-14
Acknowledgment Timers - Group Blocking
and Unblocking
Tx
Appendix B
Ty
Group Message Type
T26
T27
MGB
T28
T29
MGU
T32
T33
HGB
T34
T35
HGU
T38
T39
SGB
T40
T41
SGU
895
TUP Addendum
Circuit Maintenance
Example of Using the Acknowledgment Timers
Figure B-91 shows an example of the use of the Tx and Ty timers in the
case of sending an SGU message.
Figure B-91
896
Circuit Group Blocking or Unblocking - Acknowledgment Timers
Appendix B
TUP Addendum
Miscellaneous Procedures
Miscellaneous Procedures
Use of MPM Message (CTUP Only)
Note that the MPM message is not applicable to ITUP.
Figure B-92
Metering Pulse Message - Outgoing Side (CTUP Only)
Figure B-93
Metering Pulse Message - Incoming Side (CTUP Only)
Appendix B
897
TUP Addendum
Miscellaneous Procedures
Use of MAL Message (CTUP Only)
The use of the MAL message is not explained in the CTUP specification.
If received, then it will be issued to the application in a
TUP_USR_MSG_IND primitive without affecting the state-machines.
Use of FOT Message
Figure B-94
Forward Transfer Message - Outgoing Side
Figure B-95
Forward Transfer Message - Incoming Side
898
Appendix B
TUP Addendum
TUP Tutorial Programs
TUP Tutorial Programs
Four tutorials (that is, example programs) are provided with
HP OpenCall SS7 TUP. Their names are:
•
tupClientSM
•
tupServerSM
•
tupClientBP
•
tupServerBP
The tutorials show how to develop a simple call setup/release application
using the methods provided by the HP OpenCall SS7 TUP.
The source code of these tutorials is in the /opt/OC/tutorials/TUP
directory.
CAUTION
If you want to change a makefile or a tutorial supplied with
HP OpenCall SS7, you must first copy it to your own working directory.
You must not change the sources supplied with the HP OpenCall SS7
product in the directories in which they are delivered.
Using State-machine Access
The Caller and Called show how to develop an application by using the
state-machine mode of access (IsupSMProbe) and its associated methods.
Caller
tupClientSM
Called
tupServerSM
Using Bypass Access
The Caller and Called show how to develop an application specifically
using the bypass access mode (IsupBPProbe) and its associated methods.
Appendix B
Caller
tupClientBP
Called
tupServerBP
899
TUP Addendum
TUP Makefile
TUP Makefile
The makefile /opt/OC/tutorials/TUP/Makefile is provided with
HP OpenCall SS7 TUP.
CAUTION
900
If you want to change a makefile or a tutorial supplied with
HP OpenCall SS7, you must first copy it to your own working directory.
You must not change the sources supplied with the HP OpenCall SS7
product in the directories in which they are delivered.
Appendix B
Symbols
., 459
Numerics
16 bit values
assigning, 539
32 bit values
assigning, 539
8 bit values
assigning, 539
A
abnormal
call release (ISUP), 637, 639, 670, 671
aCC
definition, 308
access modes (ISUP)
bypass, 451, 462
state-machine, 451, 462
accessors (ISUP)
behavior, 536
description, 536
message parameters, 544
presence accessor, 536
read accessor, 536
specific accessors, 536
using parameter value objects, 555
write accessor, 536
accessors (TUP)
check value, 786
China TUP, 790
for messages, 785
get value, 786
ITU-T, 794
mark as absent, 786
set value, 786
ACM message (ISUP)
not received, 605, 607, 636
reception, 606, 666
ACM message (TUP)
not received, 820
ACR
state machine (TUP), 801
activating
standby application, 566
activity object
deleting, 482
function, 478
methods, 478
redefining methods, 478
activity object (TUP)
mechanism description, 766
activity object mechanism
description, 477
indication of IPC state, 561
receiving message, 544
scheduling, 476
AdditionalInfo values (ISUP)
ANSI, 746
ITU-T, 750
library values, 745
ADDRESS_COMPLETE_IND
primitive (CTUP), 770
primitive (ISUP ANSI), 506
primitive (ISUP ITU), 514
primitive (ITUP), 776
ADDRESS_COMPLETE_REQ
primitive (CTUP), 770
primitive (ISUP ANSI), 506
primitive (ISUP ITU), 514
primitive (ITUP), 776
AG
PIC/AG definition, 308, 309
ALERT_IND
primitive (ISUP ITU), 514
ALERT_REQ
primitive (ISUP ITU), 514
algorithm
loadsharing, 47
algorithms
round robin, 281, 289
user-supplied, 281
alias
definition of alias point code, 50
definition of local alias, 50
ALREADY_CLOSED, 493
ALREADY_DESTROYED, 492
ALREADY_OPEN, 493
ANC message (TUP)
not received, 821
ANN message (TUP)
not received, 821
ANSI
circuit reservation, 644
continuity check, 661
continuity recheck, 652
exit message, 648
Global Title types, 149
protocol, 445
901
software versions, 445
suspend resume messages, 646
TCAP versions, 204
ANSI messages, 280
ANSI-92
message set (ISUP), 445
standards (ISUP), 529
state-machines (ISUP), 447
ANSI-95
message set (ISUP), 445
AP (ISUP)
rejection of primitives, 561
API
asychronous services, 72
combinations, 68
communication via IPC buffers, 77
concepts, 65
definition, 308
Execution API, 308
file descriptors, 73
general definition, 66
HA API, 308
independent of platform configuration, 66
mechanisms, 65
minimum timeout value, 73
PCA, 308
PIC/AG, 49
Registry API, 309
TCAP Application Message Dispatcher, 47
API (ISUP)
asynchronous services, 474
C++, 448
central processing, 461
creating additional information objects, 555
deleting additional information objects, 556
exchanging messages, 474, 541, 560
general relationship of object classes, 541
inbound indications queue, 545, 560
message classes, 447, 529
methods, 447
object-oriented, 448
objects, 447, 460
outbound message queue, 543, 561
recreating and reopening objects, 482
software components, 447
structure, 460
API (TUP)
structure, 765
API management (ISUP)
902
circuit states, 562
guidelines, 552
inbound indications queue, 560
memory space, 554
messages, 555
object management rules, 555
object memory, 555
outbound message queue, 560
parameter values, 555
redefining new(), 554
return status values, 556
API management (TUP)
guidelines, 802
IPC buffers, 557, 802
memory space, 802
object memory, 802
API_BUSY, 491, 493
APIs
ISUP, 44
M3UA, 44, 86
management, 44, 48
MTP-3, 44
MTP3, 86
multiple, 44, 68, 74
SCCP, 44
stack, 44, 46
TCAP, 44
TUP, 44
APP_TRANSPORT_IND
primitive (ISUP ITU), 514
APP_TRANSPORT_REQ
primitive (ISUP ITU), 514
application
accessing a protocol layer, 46
accessing an SS7 stack, 66
active, 564
basic structure (ISUP), 463
basic structure (TUP), 765
Call Control (ISUP), 573
centralized, 450
communicating via a connection, 448
communicating with SS7 stack, 71
connecting to an SS7 stack, 71
context, 202
creating message parameter value objects,
555
deleting additional information objects, 556
deleting message parameter values, 555
destroying entities belonging to a
connection, 76
developing circuit update mechanism, 564
effects of a switchover, 81
failure, 564
flow control, 79
gateway, 451
High Availability, 552
ITU-T Blue Book TCAP on a White Book
TCAP API, 214
location on a platform, 66
maintenance, 68
managing circuit states (ISUP), 562
managing file descriptors, 73
managing flow control, 559
managing return status value objects, 556
migration from development platforms, 68
optimizing performance, 60
primitives rejected, 561
priority, 59, 62
processing overhead, 448
receiving pending primitives, 560
receiving primitives, 75
receiving waiting indications, 80
redefining new(), 554
reducing back-pressure, 80
reducing IPC calls, 78
reducing network back-pressure, 80
rescheduling, 76
response time, 560
returned messages, 555
scheduling, 71
scheduling and timeout value, 73
scheduling loop, 74
sending primitives, 75
share of CPU, 62
sharing CPU with SS7 stack, 62
sizing, 68
specific C++ guidelines (ISUP), 448
specific C++ guidelines (TUP), 763
standby, 562, 564
switchover mechanism, 562
synchronization between applications, 562
synchronizing with state-machines, 553
tuning IPC buffers, 78
upgrade, 68
using error codes, 83
using IPC buffers, 77
using the M3UA API, 86
using the MTP3 API, 86
using the OA&M API, 399
using the SCCP API, 115
using the TCAP API, 195
utilizing SS7 management functions, 48
application (TUP)
managing circuit states, 805
application connection, 458
Application Instance Group
AIG, 453
ASN.1 compiler, 207
assign() method, 539
aStatus parameter, 478
automated
call release (ISUP), 546
call release (TUP), 799
unsuccessful call release (TUP), 800
automatic
congestion control (TUP), 803, 804
autoSwitch parameter
MTP3/M3UA, 94
TCAP, 221
B
back-pressure, 79, 559, 560
BACKWARD_CHECK_TONE
primitive (ISUP ANSI), 506
BACKWARD_CHECK_TONE_ACK
primitive (CTUP), 769
primitive (ISUP ITU), 514
primitive (ITUP), 775
backwardCallIndicators parameter, 628, 629
BAD_CNX_TYPE, 493
BAD_GLOBAL_CONFIG, 493
BAD_ISUP_CONFIG, 491
Berkeley socket mechanism, 72
bit masks, 73
blocking
circuit (ISUP), 699, 729
primitives, 579
BLOCKING_CONF
primitive (CTUP), 771
primitive (ISUP ANSI), 506
primitive (ISUP ITU), 514
primitive (ITUP), 777
BLOCKING_IND
primitive (CTUP), 771
primitive (ISUP ANSI), 506
primitive (ISUP ITU), 514
primitive (ITUP), 777
903
BLOCKING_REQ
primitive (CTUP), 771
primitive (ISUP ANSI), 506
primitive (ISUP ITU), 514
primitive (ITUP), 777
BLOCKING_RESP
primitive (CTUP), 771
primitive (ISUP ANSI), 506
primitive (ISUP ITU), 514
primitive (ITUP), 777
BP mode
examples (ISUP), 498
examples (TUP), 899
BP probes, 583, 586
buffer sizes, 59
bypass access
examples (ISUP), 498
examples (TUP), 899
Bypass Mode
primitives (ITU-T TUP), 779
Bypass Mode (TUP)
primitives, 779
Bypass probes, 583, 586
bypass TCAP component layer, 200
C
C++
interface (ISUP), 447
Call Control (ISUP)
application, 450, 573
exchanging primitives, 503
call release
collision (ISUP), 610
call release (ISUP)
abnormal, 637, 639, 670, 671
abnormal inbound, 637, 670
abnormal outbound, 637, 670
automated, 546
collision, 609
normal, 608, 637, 670
normal incoming, 608
normal outgoing, 608
call release (TUP)
automated, 799
automated unsuccessful, 800
normal outgoing, 852
procedures, 852
call setup (ISUP), 606
ACM message use, 606
ACM reception, 666
904
successful for incoming side, 606
successful for outgoing side, 666
unsuccessful, 602
without ACM message, 607
without ACM reception, 636
call setup (TUP), 824, 825, 826, 827
dual seizure, 817, 818, 819
failure to receive ACM, 820
failure to receive ANC, 821
failure to receive ANN, 821
failure UBM received, 822
failure UBM sent, 823
immediate release, 824
locally refused, 816, 817
procedures, 816
UBM received, 822
unsuccessful, 816
call setup/release
examples (ISUP), 497
examples (TUP), 899
call teardown (TUP)
procedures, 816
CALL_PROGRESS_IND
primitive (ISUP ANSI), 506
primitive (ISUP ITU), 515
CALL_PROGRESS_REQ
primitive (ISUP ANSI), 506
primitive (ISUP ITU), 515
calledPartyNumber
parameter (TUP), 790
calls to functions
TCAP Application Message Dispatcher, 294
castMsg() method, 544
CCR message (ISUP)
continuity check, 630, 649, 680
CCR message (TUP)
continuity check, 834
CFN messages (ISUP)
sending, 591
CGB message (ISUP)
receiving, 701
CHARGING_CONF
primitive (ITUP), 779
CHARGING_IND
primitive (ISUP ITU), 515
primitive (ITUP), 779
CHARGING_REQ
primitive (ISUP ITU), 515
primitive (ITUP), 779
CHARGING_RESP
primitive (ITUP), 779
CHARGING_UNIT_ACK
primitive (ISUP ITU), 515
CHARGING_UNIT_CONF
primitive (ISUP ITU), 515
CHARGING_UNIT_IND
primitive (ISUP ITU), 515
CHARGING_UNIT_REQ
primitive (ISUP ITU), 515
check value
accessor (TUP), 786
China TUP
accessors, 790
flavor, 759
message classes, 790
primitives (SM mode), 768
CIC-based distribution, 43, 444, 452, 455, 456
default distribution mode, 452
loopback mode, 459
outgoing ISUP messages, 456
Platform configuration, 452
TDi routing, 456
TDi routing tables, 456
using loopback mode, 459
CIP_IND
primitive (CTUP), 770
primitive (ITUP), 776
CIP_REQ
primitive (CTUP), 770
primitive (ITUP), 776
circuit (ISUP)
active and idle, 562
blocking during setup, 699, 729
information, 464, 533
manager, 447
manipulating, 447
objects, 450
reset, 613, 641, 673
circuit blocking (ISUP)
from network, 697, 725
circuit group (ISUP)
ANSI based messages, 589
blocking, 701, 730
ITU-T based messages, 590
message handling, 588
messages, 588
normal reset, 616
queries, 708, 741
reset, 616
unblocking, 701, 730
circuit group (TUP)
messages, 813
circuit group queries, 708, 741
circuit group queries (ISUP)
from a network, 708, 741
from application (ITU-T based), 742
circuit group reset (ISUP)
double reset, 618
failure, 617
from network, 616
from user, 643, 675
normal, 643, 675
circuit groups (ISUP)
blocking/unblocking, 580
circuit reservation
ANSI based, 644
from network, 644, 645
T_CRA expiry, 645
circuit reset (ISUP)
successful, 613, 641, 673
circuit states
propagating, 564
synchronizing, 564, 565
TUP, 816
updating, 564, 567
circuit states (ISUP)
timer activity, 600
circuit states (TUP)
managing, 805
circuit unblocking (ISUP)
from network, 697, 698, 699, 725, 727, 728
from user, 698, 727
circuit update mechanism
activating stand-by application, 566
High Availability (ISUP), 552, 562
propagating states, 564
states (ISUP), 563
synchronizing states, 565
CIRCUIT_RESERVATION_IND
primitive (ISUP ITU), 515
CIRCUIT_RESERVATION_RESP
primitive (ISUP ITU), 515
CIRCUIT_VALIDATION_CONF
primitive (ISUP ANSI), 506
CIRCUIT_VALIDATION_IND
primitive (ISUP ANSI), 506
CIRCUIT_VALIDATION_REQ
primitive (ISUP ANSI), 506
CIRCUIT_VALIDATION_RESP
primitive (ISUP ANSI), 506
905
circuits
inbound, 573
outbound, 573
circuits (ISUP)
blocking/unblocking, 576
circuitStateIndicator parameter, 708, 741
classes
message (ITU-T TUP), 794
message (TUP), 790
classname, 465
CLOSE_FAILED, 493
closeOnCreate parameter
MTP3/M3UA, 94
TCAP, 221
closeOnEnable parameter
MTP3/M3UA, 94
TCAP, 221
CloseStatus, 493
CNX_CLOSED, 491
CnxStatus, 491
CnxStatus return status, 478
cnxStatus() method, 478
collision
call release (ISUP), 609, 610
combining linksets, 90
compiler
ASNI, 200
compilers
aCC, 308
compiling and linking
TCAP API, 197
CON message (ISUP)
incoming calls, 667
outgoing calls, 667
using, 667
conditions (ISUP)
IDLE, 613, 641, 673
conditions (TUP)
IDLE, 860
configuration
dynamic, 494
dynamic (TUP), 767
High Availability, 562
standby application, 562
switchover, 562
Configuration file
Application, 454
ISUP, 455
configuration file
contents, 464
declaring classnames, 465
906
errors in contents, 464
installation, 461
loading, 461, 464, 533
configurations
1-host cluster, 66
2-host cluster, 66
development, 66
Development Platform, 43
distributed, 66
FE/BE, 66
HA, 71, 208
CONFUSION_IND
primitive (ISUP ANSI), 507
primitive (ISUP ITU), 515
congestion (TUP)
control, 803, 804
CONNECT_INIT, 493
CONNECT_LOOP_IND
primitive (CTUP), 769
primitive (ISUP ITU), 515
primitive (ITUP), 774
CONNECT_LOOP_IND_ACK
primitive (CTUP), 769
primitive (ISUP ITU), 515
primitive (ITUP), 774
CONNECT_TRANSCEIVER_IND
primitive (CTUP), 769
primitive (ISUP ITU), 515
primitive (ITUP), 775
CONNECT_TRANSCEIVER_IND_ACK
primitive (CTUP), 769
primitive (ISUP ITU), 515
primitive (ITUP), 775
connections
as file descriptors, 476
as service access points, 71, 75
closing, 76, 482
connecting to the active stack, 71
creating, 71
destroying related entities, 76
end-to-end, 573
exchange of information, 75
HP OpenCall SS7 Stack relationship, 450
identifiers, 71
receiving information, 75
sending information, 75
setting transit time, 78
used by application, 448
See also probe objects.
CONNNECT_LOOP_IND
primitive (ISUP ANSI), 507
CONNNECT_LOOP_IND_ACK
primitive (ISUP ANSI), 507
CONNNECT_TRANSCEIVER_IND
primitive (ISUP ANSI), 507
CONNNECT_TRANSCEIVER_IND_ACK
primitive (ISUP ANSI), 507
container
Plug-In, 309
containment tree, 410, 422
continuity check, 596
ANSI, 661
current circuit, 661
current circuit (ISUP), 630, 649, 680
failed, 630, 663
not required on this circuit, 664
previous circuit, 664
procedure (ISUP), 573
successful, 649, 662, 680
continuity check (ISUP)
CCR, 630, 649, 680
IAM, 630, 649, 680
continuity check (TUP)
CCR message, 834
current circuit, 834
failed, 837
IAM message, 834
successful, 834
continuity check request
CRM, 661
continuity recheck, 632
ANSI, 652
failed, 663
ITU-T, 684
outgoing side, 656, 658, 688
previous circuit, 633
T24 expiry, 658, 688
TCCR expiry, 656
continuity recheck (TUP)
outgoing side, 842
previous circuit, 845
successful, 838
T8 expiry, 842
CONTINUITY_RECHECK_CONF
primitive (CTUP), 769
primitive (ISUP ANSI), 507
primitive (ISUP ITU), 516
primitive (ITUP), 774
CONTINUITY_RECHECK_IND
primitive (CTUP), 769
primitive (ISUP ANSI), 507
primitive (ISUP ITU), 516
primitive (ITUP), 774
CONTINUITY_RECHECK_REQ
primitive (CTUP), 769
primitive (ISUP ANSI), 507
primitive (ISUP ITU), 516
primitive (ITUP), 774
CONTINUITY_REPORT_IND
primitive (CTUP), 769
primitive (ISUP ANSI), 507
primitive (ISUP ITU), 516
primitive (ITUP), 774
CONTINUITY_REPORT_REQ
primitive (CTUP), 769
primitive (ISUP ANSI), 507
primitive (ITUP), 774
controlling side
dual seizure (TUP), 819
CQR message (ISUP)
sending, 708, 741
CreateStatus, 492
CRM
continuity check request, 661
customized messages, 592
D
decode function
TUP, 784
Default platform configuration
CIC-based distribution, 452
Destination Point Code (DPC), 464, 533
status, 574
DestroyStatus, 492
dialogues
simultaneous TCAP, 267
DISABLE_ECHO_IND
primitive (CTUP), 769
primitive (ISUP ANSI), 507
primitive (ISUP ITU), 516
primitive (ITUP), 775
DISABLE_ECHO_IND_ACK
primitive (CTUP), 769
primitive (ISUP ANSI), 507
primitive (ISUP ITU), 516
primitive (ITUP), 775
dispatching
tables, 292
dispatching algorithms
round robin, 281
907
user-supplied, 281
double reset (ISUP)
circuit group reset, 618
doWork
scheduling, 476
DPC
object, 578
state changes, 578
states, 578
status, 574
DPC states, 578
dual seizure (ISUP)
SETUP request, 603, 604
dual seizure (TUP)
call setup, 818
controlling side, 819
detection, 817, 819
example, 819
non-controlling side, 818
outgoing refused, 819
dynamic configuration
using, 494
using (TUP), 767
E
ENABLE_ECHO_IND
primitive (CTUP), 769
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 516
primitive (ITUP), 775
ENABLE_ECHO_IND_ACK
primitive (CTUP), 769
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 516
primitive (ITUP), 775
encode function
TUP, 785
end-to-end connection, 573
environment
developer, 42
runtime, 42
error, 629
handling, 448
error codes, 83
examples
BP mode (ISUP), 498
BP mode (TUP), 899
bypass access (ISUP), 498
bypass access (TUP), 899
call setup/release (ISUP), 497
908
call setup/release (TUP), 899
closing IsupSMProbe object, 483
creating IsupSMProbe object, 469, 471
destroying IsupSMProbe object, 483
identifying a set of messages, 533
initializing IsupMgr object, 464
ISUP SM mode, 497
ISUP tutorials, 497
opening IsupSMProbe object, 469, 471
redefining activityObject methods, 480,
487, 489
SCCP tutorials, 192
TUP SM mode, 899
TUP tutorials, 899
using reload feature, 496
Execution API
definition, 308
exit message (ISUP)
ANSI, 648
normal, 648
EXIT_IND
primitive (ISUP ANSI), 508
F
facility exchange
failure, 694
succesful, 693
facility invocation, 693
FACILITY_ACCEPT_IND
primitive (ISUP ITU), 516
FACILITY_ACCEPT_REQ
primitive (ISUP ITU), 516
FACILITY_IND
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 516
FACILITY_REJECT_IND
primitive (ISUP ITU), 516
FACILITY_REJECT_REQ
primitive (ISUP ITU), 516
FACILITY_REQ
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 516
FACILITY_REQUEST_IND
primitive (ISUP ITU), 516
FACILITY_REQUEST_REQ
primitive (ISUP ITU), 516
failed
continuity check (TUP), 837
failure condition
reporting (ISUP), 602
fault
FTC, 308
file descriptors
bit masks, 73
processing, 74
files
sys.tcap, 274
TCAP_ansi.h, 243
TCAP_common.h, 272
Finite State Machines (ISUP)
implementation particularities, 570
limitations, 570
supported, 570
Finite State Machines (TUP)
implementation particularities, 810
limitations, 810
supported, 810
flavors
TUP, 759
flow control, 79
application, 559
application back-pressure, 561
back-pressure, 559
inbound path, 560
IPC, 543
network back pressure, 560
outbound path, 560
queued indications, 545, 559, 560
queued messages, 543, 559, 560
flow control (TUP)
IPC, 803
outbound path, 803
flush() method, 558
flushConditional() method, 558
forward transfer, 627
forward transfer message
normal, 627
FORWARD_TRANSFER_IND
primitive (CTUP), 773
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 778
FORWARD_TRANSFER_REQ
primitive (CTUP), 773
primitive (ITUP), 778
FSM
definition, 308
FTC
definition, 308
functionality
primary/secondary, 574
functions
TCAProuter_trace(), 297
functions (TUP)
decode, 784
encode, 785
fusion method, 530, 542
G
get value
accessor (TUP), 786
getCircuitState() method, 562
getMsgType() method, 544
getNumberOfCircuit() method, 547
Global Title (GT)
local translation, 172
nature of address indicator, 166
numbering plan, 166
remote translation, 171
routing, 116
table, 166
translation, 116, 166, 171, 172, 177
translation table, 171, 172
translation type, 166
types used on hybrid stack, 205
group blocking (ISUP)
(hardware oriented) during call setup, 740
(hardware oriented) from Network, 732
(hardware oriented) from user, 734, 738
(maintenance oriented) during call setup,
739
(maintenance oriented) from user, 733, 737
during call setup, 706
from network, 701, 702
from user, 704
hardware reasons, 730
maintenance reasons, 730
group unblocking (ISUP)
(hardware oriented) from network, 736
(hardware oriented) from user, 737, 738,
739, 740
(maintenance oriented) form network, 735
from network, 705
from user, 706
GROUP_BLOCKING_CONF
primitive (CTUP), 772
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 777
909
GROUP_BLOCKING_IND
primitive (CTUP), 772
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_BLOCKING_REQ
primitive (CTUP), 772
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_BLOCKING_RESP
primitive (CTUP), 772
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_QUERY_CONF
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
GROUP_QUERY_IND
primitive (ISUP ITU), 517
GROUP_QUERY_REQ
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
GROUP_QUERY_RESP
primitive (ISUP ITU), 517
GROUP_RESET_CONF
primitive (CTUP), 771
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_RESET_IND
primitive (CTUP), 771
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_RESET_REQ
primitive (CTUP), 771
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_RESET_RESP
primitive (CTUP), 771
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_STOP_CONF
primitive (CTUP), 774
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 779
910
GROUP_STOP_REQ
primitive (CTUP), 774
primitive (ISUP ANSI), 508
primitive (ISUP ITU), 517
primitive (ITUP), 779
GROUP_UNBLOCKING_CONF
primitive (CTUP), 772
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_UNBLOCKING_IND
primitive (CTUP), 772
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_UNBLOCKING_REQ
primitive (CTUP), 772
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 517
primitive (ITUP), 777
GROUP_UNBLOCKING_RESP
primitive (CTUP), 772
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 517
primitive (ITUP), 777
guidelines
TCAP Application Message Dispatcher, 299
H
HA API
definition, 308
HA mechanisms, 74
HA process, 444
High Availability
configuration, 562
HA, 452
HP OpenCall ISUP
circuit manager, 447
core, 447
encoder/decoder mechanism, 530, 532
features, 47
forcing network back-pressure, 560
interaction scenarios, 573
IPC buffers, 557
metadata, 447
protocol behavior, 451
scheduling, 474
state-machines, 447, 504, 560
supported messagesSee also messages
timers, 461
HP OpenCall ISUP Library
access, 444
interface, 447, 460
services, 504
HP OpenCall SS7 family, 761
HP OpenCall SS7 Stack
access to SS7 network, 761
accessing network, 444
back-pressure, 560
classname, 465
closing connection, 482
connection objects, 462
connections, 448
deleting messages, 560
IPC buffers, 557
maximum number supported, 450
message exchange, 447
opening a connection, 466
releasing connections, 554
status, 479
HP OpenCall TUP
end-to-end signalling, 761
features, 47, 761, 763, 765, 766, 767, 801,
802, 803
scheduling, 766
HP-UX, 474
HW_GROUP_BLOCKING_CONF
primitive (CTUP), 772
primitive (ISUP ITU), 518
primitive (ITUP), 777
HW_GROUP_BLOCKING_IND
primitive (CTUP), 772
primitive (ISUP ITU), 518
primitive (ITUP), 777
HW_GROUP_BLOCKING_REQ
primitive (CTUP), 772
primitive (ISUP ITU), 518
primitive (ITUP), 777
HW_GROUP_BLOCKING_RESP
primitive (CTUP), 772
primitive (ISUP ITU), 518
primitive (ITUP), 777
HW_GROUP_UNBLOCKING_CONF
primitive (CTUP), 772
primitive (ISUP ITU), 518
primitive (ITUP), 778
HW_GROUP_UNBLOCKING_IND
primitive (CTUP), 772
primitive (ISUP ITU), 518
primitive (ITUP), 778
HW_GROUP_UNBLOCKING_REQ
primitive (CTUP), 772
primitive (ISUP ITU), 518
primitive (ITUP), 778
HW_GROUP_UNBLOCKING_RESP
primitive (CTUP), 772
primitive (ISUP ITU), 518
primitive (ITUP), 778
hybrid stack, 204, 205
hybrid stacks, 197, 205
I
I/O
activity, 474
multiplexing, 474
IAM message (ISUP)
circuit unblocking, 699, 728
continuity check, 630, 649, 680
length, 593
IAM message (TUP)
continuity check, 834
IDLE condition
ISUP, 613, 641, 673
TUP, 860
immediate release
TUP, 824
INAP service key, 290
inbound and outbound circuits, 573
inbound flow control, 79
incoming (SAM message), 827
incoming (SAO message), 827
incoming (TUP)
solicited information exchange, 829
incoming call (TUP)
immediate release, 824
successful setup, 825
unsuccessful setup, 823
incoming calls
suspend/resume messages, 646, 676
incoming messages from unassigned circuits
, 456
incoming reset
ISUP, 611
incoming with immediate release, 606
Inconsisent modes, 452
Inconsistent distribution, 452
inconsistent distribution modes, 452
information elements, 555
information exchange, 620
solicited, 621, 622
911
TUP, 828, 829
unsolicited, 623
information messages
solicited, 620
unsolicited, 620
INFORMATION_IND
primitive (CTUP), 773
primitive (ISUP ITU), 518
primitive (ITUP), 778
INFORMATION_REQ
primitive (CTUP), 773
primitive (ISUP ITU), 518
primitive (ITUP), 778
InitStatus return status, 491
interaction scenarios, 573
interactions handling, 574
interface
programming, 308
INTERNAL_ERROR, 491, 493
Inter-Process Communication (IPC)
buffer sizes, 78
buffering modes, 77, 78
buffers, 77
flow control, 79
flushing the send buffer, 77
optimizing, 60
reducing IPC calls, 78
reducing transit time, 78
SS7 stack communication, 72
tuning MTP3 buffers, 105
tuning performance, 78
tuning TCAP IPC buffers, 269
invalid length
parameter (TUP), 786
INVALID_CLASSNAME, 492
INVALID_ISUP_MSG_IND
primitive (BP Mode), 523
INVALID_SET_NAME, 492
invocation
facility (ISUP), 693
IPC
buffers, 557, 558
configuration, 558
congested state, 561
default buffers, 558
definition, 308
flow control, 581
flow control (TUP), 803
optimizing performance, 558
IPC_SEND_FULL, 493
912
is, 452, 459
ISUP, 444, 452, 600
applications, 47
behavior, 447
makefiles, 499
messages, 585, 586
parameters, 447
primitives, 503
protocol event, 560
tutorials, 497
ISUP API
as stack API, 44
effects of a switchover, 82
services provided, 47
ISUP CIC-based distribution
CIC-based distribution, 458
Traffic Discriminator, 454
ISUP traffic loss
traffic loss, 452
ISUP tutorials, 497
ISUP_MSG_IND
primitive (BP Mode), 523
ISUP_MSG_REQ
primitive (BP Mode), 523
ISUP_USR_MSG_IND
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 518
ISUP_USR_MSG_REQ
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 518
IsupBPProbe
accessing MTP3, 504
activity object, 478
creating, 465
description, 462
initialization, 462
interaction with HP OpenCall ISUP
Library, 504
methods, 460
receiving primitives, 462
sending messages, 462, 543
IsupBPProbe primitives
INVALID_ISUP_MSG_IND, 485, 523
ISUP_MSG_IND, 523
ISUP_MSG_REQ, 523
PASS_ALONG_IND, 523
PASS_ALONG_REQ, 523
UNKNOWN_MSG_IND, 523
UNKNOWN_MSG_REQ, 523
UNKNOWN_OPC_MSG_IND, 524
IsupInfoMgr
class (TUP), 787
IsupMgr
base class, 529
creating probe objects, 465
derived message classes, 529
function, 461
identifying sets of messages, 533
initializing, 464
initializing (TUP), 765
instance, 462
loading configuration file, 533
managing return status values, 549
methods, 460, 530
object description, 461
previously created, 464
relationship to message classes, 529
relationship to probe and message classes,
541
tracing the encoding/decoding mechanism,
532
See also scheduling
IsupMsg
class (TUP), 787
description, 529
methods, 530
receiving instance of, 544
IsupProbe
base class, 462
description, 462
methods, 460, 558
IsupSMProbe
accessing MTP3, 504
activity object, 478
circuit state updating, 562
creating, 465
description, 462
initialization, 462
interaction with HP OpenCall ISUP
Library, 504
methods, 460, 562
receiving primitives, 462
sending messages, 462, 543
IsupSMProbe object
closing and destroying, 483
IsupSMProbe primitives
RELEASE_RESP, 561
RESET_RESP, 561
START_RELEASE_IND_ACK, 561
START_RESET_IND_ACK, 561
STOP_REQ, 561
IsupUserMsg
description, 530
See also message customizing.
ITU messages, 280
ITU-T
Blue Book TCAP, 214
continuity recheck, 684
Global Title types, 149
protocol (ISUP), 445
recommendations, 149
software versions (ISUP), 445
suspend/resume messages, 676
TCAP versions, 204
TUP flavor, 759
White Book TCAP, 202, 214, 251
ITU-T 88
recommendations (ISUP), 529
state-machines (ISUP), 447, 451
ITU-T 97
flavor (ISUP), 683
ITU-T TUP
accessors, 794
message classes, 794
primitives (BP mode), 779
ITU-T93
message set (ISUP), 445
ITU-T97
message set (ISUP), 445
L
layer
TCAP component, 200
TCAP transaction, 200
layers
M3UA, 86, 87
SCTP, 87
length
invalid parameter length (TUP), 786
library
shared, 92, 197
shared (SCCP), 131
Timer, 309
limits
message size, 102
linksets
combining, 90
load balancing, 288
loadsharing, 210
913
algorithm, 47
MTP3, 106
multiple TCAP users and mutiple
connections, 211
round-robin algorithm, 211
single TCAP user with multiple
connections, 210
using SLS, 89
using SSN, 210
local alias
definition, 50
Local Point Code (LPC), 464, 533
Local Point Code (LPC) status, 574
LPC
object, 574
object states, 574
status, 574
LPC states, 574
LPC_NOT_FOUND, 492
M
M3UA
description, 86, 87
M3UA API
as stack API, 44
description, 86
effects of a switchover, 82
M3UA-based platform
message size limit, 102
MAINTAINANCE_IND
primitive (ITUP), 778
MAINTENANCE_SYATEM_IND
primitive (CTUP), 773
MAINTENANCE_SYSTEM_IND
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 518
T20_NOT_RUNNING, 749
MAINTENANCE_SYSTEM_IND values
BACKWARD_CHECK_TONE_ACK, 755
BLA_WHEN_IDLE, 756
COT_RECEIVED, 748, 755
CRS_STOP, 749
DCO_FAIL, 748
DCO_SUCCESS, 748
HW_BLOCKING, 754
HW_GROUP_BLOCKING, 753
HW_GROUP_UNBLOCKING, 753
HW_UNBLOCKING, 754
MN_BLOCKING, 754, 755, 756
MN_GROUP_BLOCKING, 753
914
MN_GROUP_UNBLOCKING, 753
MN_UNBLOCKING, 755, 756
PRIORITY_TO_GROUP_RESET, 754
RECV_ON_UNEQUIPPED_CIRCUIT,
749, 753
REL_RECEIVED, 755
RLC_AFTER_T17, 749, 754
RSC_AFTER_T17, 749
STOP_REQ, 749
T12_NOT_RUNNING, 755
T13_TIMEOUT, 748, 755
T14_NOT_RUNNING, 755
T15_TIMEOUT, 748, 755
T17_TIMEOUT, 749, 754
T18_NOT_RUNNING, 749, 754
T19_TIMEOUT, 749, 753
T20_NOT_RUNNING, 754
T21_TIMEOUT, 749, 754
T22_NOT_RUNNING, 756
T23_NOT_RUNNING, 756
T23_TIMEOUT, 748
T24_TIMEOUT, 755
T28_TIMEOUT, 755
T34_TIMEOUT, 755
T5_TIMEOUT, 748, 755, 756
TIMER_SHORTAGE, 749, 753
UBA_WHEN_LOCALLY_BLOCKED, 756
UNEQUIPPED_CIRCUIT, 749, 753
WRONG_STATUS_BITS, 749
makefiles
ISUP, 499
TUP, 900
management
APIs, 44, 48
application, 48
mark as absent
accessor (TUP), 786
MAX_PROBE_NUMBER_EXCEEDED, 492
memory
dynamic allocation (ISUP), 554
freeing, 555
redefining new(), 554
requirements, 59
shortage (ISUP), 554
message
reassembly, 594
transfer optimizing, 208
transit time, 209
message classes (ISUP)
abstract interface, 447, 529
base class, 529
behavior, 530
casting an instance of, 544
constructors, 534, 539
for customized messages, 530
function, 447
generic component, 447
IsupIam, 536
IsupUserMsg, 530
message-specific interface, 529
relationship to IsupMgr, 529
relationship to metadata, 531
relationship to probe and IsupMgr classes,
541
representing messages, 447, 529
message customizing (ISUP)
modifying the metadata, 447
message flow, 600
TUP, 816
message parameter values
as objects, 539
assigning 16 bit values, 539
assigning 32 bit values, 539
assigning 8 bit values, 539
assigning values, 539
base class, 539
creating, 555
creating objects, 555
deleting, 555
management, 555
message parameters
accessing optional parameters (ISUP), 536
assigning values (ISUP), 539
in message classes, 529
mandatory (ISUP), 539
mandatory parameters, 534
optional parameters (ISUP), 539
message sets (ISUP)
ANSI-92, 445
ANSI-95, 445
ITU-T93, 445
ITU-T97, 445
message transfer
ISUP, 47
TUP, 47, 761
messages
buffering, 77
discriminating, 107
distributing, 107
identifying set of messages, 533
in-sequence transfer, 153
queued, 80
receiving, 75, 107, 173, 202, 257, 263
receiving (ISUP), 555
retransmitting, 177
routing, 106, 168, 198
SAM (ISUP), 669
sending, 75, 106, 153, 168, 202, 243, 254, 262
session, 309
size limits, 102
structure, 140, 202
waiting to be received, 80
See also message classes.
messages (ISUP)
accessing parameters, 529, 536
Bypass, 586
CFN handling, 591
CGB, 701
circuit group, 588
Circuit Query Response, 708, 741
CON, 667
creating instances, 534, 555
customized, 592
default message structure, 534, 539
defined for LPC/DPC pair, 533
deleting instances, 555
exit, 648
facility, 634
facility accepted, 693
facility reject, 693
facility request, 693
forward transfer, 627
generic processing, 585, 586
generic processing (BP), 586
generic processing (SM), 585
group blocking, 701, 730
identifying message type, 544
identifying messages for LPC/DPC pair, 533
in inbound queue, 545
in outbound queue, 543
internal structure, 534
ITU-T, 693
management, 555
MessageSetName, 533
operator specific, 530
pass-along, 628
processing parameters, 544
915
receiving, 560
SAM, 669
SAM message, 668
sending, 543, 555, 560
setting buffering mode, 557
SM probe, 585
standard metadata, 447
storing in internal buffers, 557
supported by API, 447
suspend/resume, 646, 676
tracing the encoding/decoding mechanism,
532
UCIC, 591
UCIC handling, 591
unknown, 597
unrecognized, 597
user defined, 592
messages (TUP)
circuit group, 813
classes (CTUP), 790
classes (ITU-T TUP), 794
module classes, 787
metadata
contents, 530
coordinating encoding/decoding, 532
governing encoding/decoding, 530
governing message classes, 530
return status values, 549
software version, 531
specific component (ISUP), 447
standard (ISUP), 447, 531
METERING_PULSE_IND
primitive (CTUP), 773
METERING_PULSE_REQ
primitive (CTUP), 773
methods
assign(), 539
castMsg(), 544
cnxStatus(), 478
common probe methods, 462
failure, 549, 561
flush(), 558
flushConditional(), 558
getCircuitState(), 562
getMsgType(), 544
getNumberOfCircuit(), 547
new(), 554
receive(), 544
recvActivity(), 478
916
releaseCircuit(), 547
return status values, 491
select(), 475
send(), 481
sendPossible(), 478, 561
setBufferingMode(), 558
setCircuitState(), 562
setHighTransitTime(), 558
setIPCRecvSize(), 558
setIPCSendSize(), 558
setLowTransitTime(), 558
setNonBufferingMode(), 558
setTraceOff(), 532
setTraceOn(), 532
success of, 549
modifying
configuration (dynamic), 494, 767
MPT3
interactions handling, 574
LPC states, 574
MTP
transfer indications, 577
MTP Level 3
DPC available, 108
DPC congestion, 109
DPC unavailable, 107
DPC uncongested, 110
features, 86
link management, 90, 108, 109
message handling, 89, 106
MSU functions, 89, 106
network management, 89
primitives, 98
restart procedure, 111
route management, 90, 106
routing label, 106
services, 46
traffic management, 90
MTP_AVAILABLE_IND primitive, 528
MTP_CONGESTED_IND, 528
MTP_DPC_CONGESTED_IND primitive,
528
MTP_DPC_UNCONGESTED_IND
primitive, 528
MTP_PAUSE_IND primitive, 528
MTP_RESTARTING_IND, 528
MTP_RESUME_IND primitive, 528
MTP_UNAVAILABLE_IND primitive, 528
MTP_UNCONGESTED_IND, 528
MTP_UPU_UNAVAILABLE_IND, 528
MTP2 OA&M API
array of active connections, 405
closing connections, 433
creating connections, 404
flow control, 409
function calls refused, 433
MTP2X_oamrecv(), 408, 409
no notifications received, 409
post-select phase, 405
pre-select phases, 405
receiving notifications, 409
requests, 408
scheduling connections, 405
MTP2 OA&M API functions
MTP2X_oamrecv(), 408, 409
SS7_ifclose(), 433
SS7_ifcnxhandler(), 405
MTP3, 574, 575
access (ISUP), 462, 504
access (TUP), 768
blocking (ISUP), 559
interactions handling (ISUP), 574
releasing connection (ISUP), 554
status (ISUP), 528
MTP-3 API
as stack API, 44
MTP3 API
connections, 93, 103
description, 86
DPC available, 108
DPC congestion, 109
DPC uncongested, 110
effects of a switchover, 82
function calls refused, 104
guidelines, 86
indications, 98
local MTP restart, 111
local MTP unavailable, 111
MSU primitives, 106, 107
post-select phase, 96
pre-select phase, 95
primitives, 97, 108, 110, 111
receive IPC buffer, 100, 105
receiving MSUs, 106
requests, 98
return values, 108, 111
scheduling, 94
scheduling functions, 95
select(), 95
send IPC buffer, 102, 105
sending MSUs, 102, 106
terminating a service, 104
tuning IPC buffers, 105
MTP3 API functions
MTPL3_recv(), 100
MTPL3_send(), 102
SS7_ifclose(), 104
SS7_ifcnxhandler(), 95
SS7_ifctrl(), 105
SS7_ifselectmask(), 95
MTP3 connections
closing, 104
cnxId, 94
creating, 93
destroying all related entities, 104
in an array, 96
scheduling, 95
MTP3 OA&M API
an array of active connections, 405
closing connections, 433
collecting statistics, 417
configuring entities, 410
creating connections, 404
function calls refused, 433
post-select phase, 405
receiving notifications, 420
requests, 416
scheduling connections, 405
ss7errno, 416, 419, 421, 427, 430, 432
MTP3 OA&M API functions
MTL3_oamstat(), 419
MTPL3_oamcmd(), 416, 419, 420, 427, 430,
431
SS7_if close(), 433
SS7_ifcnxahndler(), 405
SS7_ifselectmask(), 405
MTP3 primitives, 574
MTP_AVAILABLE_IND, 528
MTP_CONGESTED_IND, 528
MTP_DPC_CONGESTED_IND, 528
MTP_DPC_UNCONGESTED_IND, 528
MTP_PAUSE_IND, 528
MTP_RESTARTING_IND, 528
MTP_RESUME_IND, 528
MTP_UNAVAILABLE_IND, 528
MTP_UNCONGESTED_IND, 528
MTP_UPU_UNAVAILABLE_IND, 528
MTP3 routing
917
providing the SIO, 102
MTP3/M3UA tutorials, 112
MTP3-based platform
message size limit, 102
multiple APIs, 44, 68, 74
N
network events, 553
Network Service Data Unit (NSDU), 118, 121
Network Service Part (NSP), 46, 116, 202
NETWORK_RESOURCE_MGT_IND
primitive (ISUP ITU), 518
NETWORK_RESOURCE_MGT_REQ
primitive (ISUP ITU), 518
new() method, 554
NO_CONFIG, 493
NO_ERROR, 493
NO_MORE_MEMORY
return status, 554
non-controlling side
dual seizure (TUP), 818
NOP
definition, 308
normal
call release (ISUP), 608, 637, 670
number
of maximum invocations, 265
of maximum simultaneous dialogues, 267
of messages waiting to be received, 80
of scheduling loops, 74
O
OA&M
configuration, 400
control, 400, 416, 427
entities, 402
notifications, 403
requests, 403
services, 400
states, 402
statistics, 400
OA&M API
addressing, 424
array of active connections, 405, 436
closing connections, 433, 442
collecting MTP3 statistics, 417
collecting SCCP statistics, 428
collecting TCAP statistics, 440
configuring entities, 410
creating connections, 404, 435
918
flow control, 409
function calls refused, 433
guidelines, 399
post-select phase, 405, 436
pre-select phase, 405, 436
receiving MTP2 notifications, 409
receiving MTP3 notifications, 420
receiving SCCP notifications, 431
scheduling connections, 405, 436
sending MTP2 requests, 408
sending requests, 416
sending SCCP requests, 427
sending TCAP requests, 437
ss7errno, 416, 419, 421, 427, 430, 432
OA&M API functions
MTL3_oamstat(), 419
MTP2X_oamrecv(), 409
MTPL3_oamcmd(), 416, 419, 420, 427, 430,
431
MTPL3_oamrecv(), 420
SCCP_oamcmd(), 427
SCCP_oamrecv(), 431
SCCP_oamstat(), 429
SS7_ifclose(), 433
SS7_ifcnxhandler(), 405
TCX_cnx_handler(), 436
TCX_control(), 438
TCX_recv(), 440
TCX_select_mask(), 436
OA&M APIs
as management APIs, 44
services provided, 48
OA&M entities
addressing, 402, 411, 424
configuring, 410
destroying entities, 433
managing the SS7 stack, 402
MTP3, 410
notifications, 403
object-oriented structure, 402
performing operations, 402
requests, 403
returning replies, 402
SCCP, 422
state of, 402
OA&M notifications
contents, 420
generated, 409
MTP2, 409
MTP3, 420
SCCP, 431
spontaneous, 403
OA&M requests
MTP2, 408
MTP3, 416
perform operation, 403
return notification, 403
SCCP, 427
TCAP, 438
OA&M states
changing, 402, 426
mode of notification, 402, 426
MTP3, 411
OA&M statistics
collecting, 440
entity relationship, 417, 428
immediate, 417, 428, 438
modes of collecting, 417, 428
MTP3, 417
on occurrence, 417
periodic, 417, 428, 438
report modes, 417, 428
SCCP, 428
TCAP, 440
OAM API
effect of VPC, 53
object
destination, 411
links, 411
linkset, 411
local_alias, 411
LPC, 574
mtp, 411
route, 411
SO_FAILED_DEST, 423
SO_GT_TRANSLATOR, 423
SO_LOCAL_USER, 423
SO_REMOTE_SP, 423
SO_REMOTE_USER, 423
SO_SCCP, 423
SO_VIRTUAL_USER, 423
virtual_pc, 411
object classes
ActivityObject, 476, 478
base class, 448
derived classes, 448
for ISUP messages, 447
inheritance, 448
IsupBPProbe, 462
IsupMgr, 461
IsupMsg, 529
IsupProbe, 462
IsupSMProbe, 462
IsupUserMsg, 530
parent classes, 448
ParmValue, 539, 555
probe classes, 462
object model
ISUP, 460
objects
additional information, 555
behavior of, 448
contents, 448
deleting (ISUP), 554
destroying, 448
DPC, 578
general guidelines, 448
inactive, 562
instantiation (ISUP), 554
lifespan, 448
management (ISUP), 555
memory shortage (ISUP), 554
message parameter values, 555
messages (ISUP), 555
parameter values (ISUP), 555
processing overhead, 448
representing connections, 448
return status values, 555, 556
objects (TUP)
management, 802
OC
definition, 308
Open Systems Interconnection (OSI), 46
OpenStatus, 493
OPERATOR_SIGNAL_IND
primitive (CTUP), 773
OPERATOR_SIGNAL_REQ
primitive (CTUP), 773
OUT_BUFFER_FLUSH, 208
outbound flow control, 79
outbound path
TUP, 803
outgoing (SAM message), 826
outgoing (SAO message), 826
outgoing (TUP)
continuity recheck, 842
information exchange, 828
normal release, 852
919
outgoing call
dual seizure (TUP), 819
outgoing call (TUP)
successful setup, 824
unsuccessful setup, 822
outgoing calls (ISUP)
suspend and resume messages, 677
suspend/resume messages, 646
P
parameter
circuitStateIndicator, 708, 741
parameters
aProbe, 478
aStatus, 478
backwardCallIndicators, 628, 629
calledPartyNumber (TUP), 790
nbOfRecvToDo, 478
rangeAndStatus, 736
subsequentNumber (TUP), 790
SuspendResumeIndicator, 676
parameters (ISUP)
message, 544
rangeAndStatus, 588, 616, 704, 708, 733,
734, 735, 741
supported, 550
parameters (TUP), 798
invalid length, 786
rangeAndStatus, 813
partitioning, 287
PASS_ALONG_IND
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 519
PASS_ALONG_MSG_IND
primitive (BP Mode), 523
PASS_ALONG_REQ
primitive (BP Mode), 523
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 519
pass-along requests, 629
normal, 628
path
outbound (TUP), 803
paths
back-pressure, 559
flow control, 559
inbound, 559
outbound, 559
PCA
definition, 308
920
peer node, 637, 670
PIC
definition, 309
PIC Framework
definition, 309
PIC/AG
API, 49
definition, 308, 309
plug-in
definition, 309
Plug-In Container
definition, 309
Plug-In tutorials, 343
point code
alias, 50
PRE_REL_INFORMATION_IND
primitive (ISUP ITU), 519
PRE_REL_INFORMATION_REQ
primitive (ISUP ITU), 519
previous circuit
continuity recheck, 633
previous circuit (TUP)
continuity recheck, 845
primary/secondary functionality, 574
primitive, 98
primitive flow
TUP, 816
primitives
acknowledgment, 504
blocking/unblocking circuits, 579
categories (ISUP), 503
circuit related (ISUP), 504
description (ISUP), 503
dialogue (ISUP), 503
generic processing, 581, 583
MTP related, 528
MTP3, 574
race conditions (ISUP), 553
receiving, 560
rejection by API, 561
requiring additional information (ISUP),
524
resetting circuit groups, 576, 579
resetting circuits, 576, 579
side-effect of protocol events, 560
stopping REL/RSC retransmission, 577, 580
synchronizing with application (ISUP), 553
terminating calls, 576, 579
terminating primitive, 561
to synchronize with application, 504
primitives (ISUP)
acknowledgment, 504
additional information, 524, 555
blocking/unblocking circuit groups, 576, 580
blocking/unblocking circuits, 576
primitives (TUP)
additional information, 779
BP mode, 779
China TUP (SM mode), 768
exchanging, 768
ITU-T TUP (BP mode), 779
ITU-T TUP (SM mode), 774
requiring additional information, 780
priority
application, 59, 62
SS7_Stack process, 62
probe
SM, 581
probe objects
activating, 466
base class, 462
bound to HP OpenCall SS7 Stack, 465
closing, 482
creating, 465
derived classes, 462
destroying, 482
exchanging primitives and messages, 481,
504
exchanging primitives and messages
(ISUP), 541
interaction with HP OpenCall Library, 504
lifespan, 482
memory shortage (ISUP), 554
opening, 465
receiving primitives, 544
recreating and re-opening, 482
relationship to message classes and
IsupMgr, 541
representing connections, 450
scheduling, 461, 474
selecting access modes (ISUP), 451
using activity object, 478
probe objects (TUP)
exchanging primitives and messages, 766
PROBE_NOT_OPEN, 493
probes
BP, 583
Bypass, 583
SM, 585
probes (ISUP)
BP, 586
procedures
call setup (ISUP), 600, 602
call teardown (ISUP), 600
continuity check (ISUP), 573
procedures (TUP)
call setup, 816
call teardown (TUP)
procedures, 816
processes
HA, 62
SS7_Stack, 62
programming
interface, 308
PROGRESS_IND
primitive (ISUP ITU), 519
PROGRESS_REQ
primitive (ISUP ITU), 519
propagating
states, 564
protocol event, 80, 524
protocols
ANSI, 445
protocols (ISUP)
ITU-T, 445
R
race condition
ISUP, 553
rangeAndStatus
parameter (ISUP), 588, 616, 704, 708, 733,
734, 735, 741
parameter (TUP), 813
rangeAndStatus parameter, 736
REANSWER_IND
primitive (CTUP), 773
primitive (ITUP), 778
REANSWER_REQ
primitive (CTUP), 773
primitive (ITUP), 778
reassembly
incoming messages, 594
reassembly of incoming messages
failure, 594, 595
interacting with continuity check, 596
receive() method, 544
receiving
CFN messages, 591
UCIC messages, 591
921
refusal
setup locally refused (TUP), 816, 817
refused function calls, 104
Registry API
definition, 309
REL message
stopping retransmission, 577, 580
release (TUP)
successful call release, 799
RELEASE_CONF
primitive (CTUP), 771
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 519
primitive (ITUP), 776
RELEASE_IND
primitive (CTUP), 771
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 519
primitive (ITUP), 776
RELEASE_REQ
primitive (CTUP), 771
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 519
primitive (ITUP), 776
RELEASE_RESP
primitive (CTUP), 771
primitive (ISUP ANSI), 509
primitive (ISUP ITU), 519
primitive (ITUP), 776
RELEASE_RESP primitive, 561
releaseCircuit() method, 547
remote DPC, 578
status indications, 578
REMOVE_LOOP_IND
primitive (CTUP), 769
primitive (ISUP ITU), 519
primitive (ITUP), 775
REMOVE_LOOP_IND_ACK
primitive (CTUP), 769
primitive (ISUP ITU), 519
primitive (ITUP), 775
REMOVE_TRANSCEIVER_IND
primitive (CTUP), 770
primitive (ISUP ANSI), 510
primitive (ISUP ITU), 519
primitive (ITUP), 775
REMOVE_TRANSCEIVER_IND_ACK
primitive (CTUP), 770
primitive (ISUP ANSI), 510
primitive (ISUP ITU), 519
922
primitive (ITUP), 775
rescheduling
See scheduling.
reset (ISUP)
additional information, 616
ANSI standard, 613
circuit, 613, 618, 641, 673
circuit group, 616, 617
double, 618
failure to receive RLC, 641, 673
from application, 615
from network, 614
HP OpenCall initiated, 613, 641, 673
incoming, 611
ITU-T standard, 613
successful, 613, 614, 615
reset (TUP)
failure to receive RLC, 865
successful, 864
TUP initiated, 864, 865
RESET_CONF
primitive (CTUP), 771
primitive (ISUP ANSI), 510
primitive (ISUP ITU), 520
primitive (ITUP), 777
RESET_IND
primitive (CTUP), 771
primitive (ISUP ANSI), 510
primitive (ISUP ITU), 520
primitive (ITUP), 777
RESET_REQ
primitive (CTUP), 771
primitive (ISUP ANSI), 510
primitive (ISUP ITU), 520
primitive (ITUP), 777
RESET_RESP
primitive (CTUP), 771
primitive (ISUP ANSI), 510
primitive (ISUP ITU), 520
primitive (ITUP), 777
RESET_RESP primitive, 561
RESUME_IND
primitive (ISUP ANSI), 510
primitive (ISUP ITU), 520
RESUME_REQ
primitive (ISUP ANSI), 510
primitive (ISUP ITU), 520
return status
CloseStatus, 493
CnxStatus, 478, 491
CreateStatus, 492
DestroyStatus, 492
InitStatus, 491
OpenStatus, 493
return status values
ALREADY_CLOSED, 493
ALREADY_CREATED, 491
ALREADY_DESTROYED, 492
ALREADY_OPEN, 493
API_BUSY, 491, 493
BAD_CNX_TYPE, 493
BAD_GLOBAL_CONFIG, 493
BAD_ISUP_CONFIG, 491
CLOSE_FAILED, 493
CNX_CLOSED, 491
CONNECT_INIT, 493
for error handling, 448
in race conditions, 553
INTERNAL_ERROR, 491, 493
INVALID_CLASSNAME, 492
INVALID_SET_NAME, 492
IPC_SEND_FULL, 493, 561
LPC_NOT_FOUND, 492
managed by IsupMgr, 549
management, 556
MAX_PROBE_NUMBER_EXCEEDED,
492
NO_CONFIG, 493
NO_ERROR, 491, 493
NO_ISUP_CONFIG, 491
NO_MORE_MEMORY, 491, 554
PROBE_NOT_OPEN, 493
unexpected values, 553
WRONG_PROBE_TYPE, 492
WRONG_STATE, 553
return values
examining, 83
MTP3 API, 108, 111
TCAP API, 272
reverse hybrid stack, 204, 205
RLC message (TUP)
not received, 865
round robin algorithm, 281, 289
rounding
parameter length (TUP), 798
rounding length, 798
round-robin algorithm, 211
routing
MTP3 routing label, 106
SCCP end-to-end, 116
RSC message
stopping retransmission, 577, 580
S
SAM message
outgoing calls (ISUP), 669
SAM message (ISUP)
incoming calls, 669
using, 668
SAM message (TUP), 826, 827
incoming, 827
outgoing, 826
SAO message (TUP), 826, 827
incoming, 827
outgoing, 826
SCCP
addressing, 119, 126
application pairs, 126
connection oriented services, 121
connectionless services, 118
description, 116
end-to-end signalling, 761
features, 118
Global Title, 116, 119, 126, 148
message handling, 118
primitives, 137
relay, 121
restart, 119
retransmitting messages, 177
return option, 118, 177
routing, 116, 118
services, 46, 116, 761
signalling point status management, 119,
126, 180
subsystem management, 116, 119
subsystem status management, 183
subsystem status test, 119, 185
subsystems, 120, 187
traffic distribution, 129
traffic filtering, 127, 133
tutorials, 192
users, 116
SCCP API
addressing, 160, 171
ANSI Global Title structure, 149
as stack API, 44
confirmations, 138, 139
congested DPC, 182
connection oriented services, 153
923
connectionless services, 131, 153
connections, 132
effect of VPC, 53
effects of a switchover, 81
function calls refused, 154
Global Title, 149
guidelines, 115
indications, 138, 139
in-sequence message transfer, 153
IPC buffer values, 155
ITU-T Global Title structure, 149
masks, 95, 134
no GT translation, 171
pre-select phase, 134
primitives, 137, 168
receive IPC buffer, 150, 155
receiving primitives, 149
request, 139
requests, 138
rescheduling, 154
response, 138, 139
return option, 177
routing, 160
routing mechaism, 168, 173
scheduling, 134
send IPC buffer, 154, 155
sending SCCP primitives, 150, 168
services provided, 46
signalling point, 180, 181, 182
structure of message parameters, 138
subsystems, 184, 185, 188, 190, 191
terminating a service, 154
SCCP API functions
SCCP_recv(), 150
SCCP_send(), 153
SS7_ifclose(), 154
SS7_ifcnxhandler(), 134
SS7_ifcreate(), 404
SS7_ifctrl(), 155
SS7_ifselectmask(), 134
SCCP connections
and their IPC buffers, 155
closing, 92, 131, 154
creating, 132
destroying all related entites, 154
forwarding, 122, 156
in an array, 135
scheduling, 134
SCCP OA&M API
924
addressing, 424
array of active connections, 405
closing connections, 433
collecting statistics, 428
controlling, 427
creating connections, 404
function calls refused, 433
notifications, 431
post-select phase, 405
pre-select phase, 405
receiving notifications, 431
requests, 427
scheduling connections, 405
sending requests, 427
translator id, 425
SCCP OA&M API functions
SCCP_oamcmd(), 427
SCCP_oamrecv(), 432
SCCP_oamstat(), 429
SS7_ifclose(), 433
SS7_ifcnxhandler(), 405
SS7_ifselect(), 405
SCCP routing
activate, 168, 173
DPC and SSN, 177
mechaism for incoming messages, 173
mechaism for outgoing messages, 168
routing indicator, 172
using a point code, 171
using backup signalling points, 180
using backup subsystems, 180
using DPC, 172
using DPC and GT, 171
using DPC and new SSN, 172
using DPC and SSN, 171, 172, 177
using local GT translation, 172, 177
using local SSN, 171, 172, 177
using LPC and SSN, 172
using MTP3 routing, 172
using new SSN, 172
using remote GT translation, 171
using remote point code, 171, 172
using remote SSN, 171, 172, 177
using routing indicator, 177
using SSN, 177
without GT translation, 170, 173
scheduling
active connections, 74
activity object mechanism, 476
analyzing the masks, 476
bit masks, 73
connections, 71
doWork(), 476
estimation of work, 476
file descriptors, 73
loop in application, 74
masks, 73, 474
mechanism, 72, 474
methods, 475
methods of IsupMgr, 461
minimizing select(), 60
MTP3 API, 95
multiple APIs, 68, 74
number of select(), 74
OA&M connections, 405
phases, 474
phases of, 72
post-select, 476
post-select phase, 74
pre-select, 474
pre-select phase, 72
probe objects, 474
probe objects (TUP), 766
processing messages, 476
processing work, 476
rescheduling a connection, 76
select(), 73
sockets, 72
TCAP connections, 223
timeout value, 73, 474
work, 476
SCTP
description, 87
segmentation
mechanism, 593
outgoing messages, 593
seizure (TUP)
dual, 817, 818, 819
select
See scheduling
select() method, 475
send() method, 481
sending
CFN messages, 591
UCIC messages, 591
sendPossible() method, 478, 561
services
provided by MTP-3 API, 46
provided by OA&M APIs, 48
provided by SCCP API, 46
provided by TCAP API, 47
session
definition, 309
set value
accessor (TUP), 786
setBufferingMode() method, 558
setCircuitState() method, 562
setHighTransitTime() method, 558
setIPCRecvSize() method, 558
setIPCSendSize() method, 558
setLowTransitTime() method, 558
setNonBufferingMode() method, 558
setTraceOff() method, 532
setTraceOn method, 532
setup (TUP)
procedures, 816
unsuccessful, 816
SETUP request (ISUP)
dual seizure, 603, 604
failure to receive ACM, 605
locally refused, 602
SETUP_CONF
primitive (CTUP), 768
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 520
primitive (ITUP), 774
SETUP_FAILURE_IND
primitive (ISUP ANSI), 510
primitive (ISUP ITU), 520
values, 746
SETUP_FAILURE_IND values
BLOCKING, 750
COT_FAILURE, 746, 750
CPC_BUSY, 750
CRCR_RESET, 751
DUAL_SEIZURE, 746, 750
FLOW_CONTROL, 746, 751
RELEASE, 750
T27_TIMEOUT, 750
SETUP_IND
primitive (CTUP), 768
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 520
primitive (ITUP), 774
SETUP_IND_ACK
primitive (CTUP), 769
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 520
primitive (ITUP), 774
925
SETUP_REQ
primitive (CTUP), 768
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 520
primitive (ITUP), 774
SETUP_RESP
primitive (CTUP), 768
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 520
primitive (ITUP), 774
shared library, 92, 197
SCCP, 131
signaling point code, 603
signalling links
activated, 111
unavailable, 111
signalling point
accessible, 182
congested, 182
prohibited, 180
status, 180
signalling points, 450
SIGTRAN
M3UA layer, 86, 87
SCTP layer, 87
simultaneous
TCAP dialogues, 267
size
buffers, 59
memory required, 59
SM mode
example (ISUP), 497
example (TUP), 899
SM probe, 581
SM probes, 585
sockets, 72
SOFT_RESET_REQ
primitive (ISUP ANSI), 511
SOFTRESET_REQ
primitive (ISUP ITU), 520
software components
core (ISUP), 447
generic (ISUP), 446
HP OpenCall ISUP API, 446
HP OpenCall ISUP Circuit Manager, 447
HP OpenCall ISUP Supported Messages,
447
metadata (ISUP), 447
specific (ISUP), 447
software version
926
supplied metadata, 531
software versions
ANSI, 445
software versions (ISUP)
ITU-T, 445
solicited
information exchange (TUP), 828, 829
solicited information exchange
failure, 621, 622
SOLICITED_INFO_CONF
primitive (CTUP), 770
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 521
primitive (ITUP), 776
SOLICITED_INFO_IND
primitive (CTUP), 770
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 521
primitive (ITUP), 776
SOLICITED_INFO_REQ
primitive (CTUP), 770
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 521
primitive (ITUP), 776
SOLICITED_INFO_RESP
primitive (CTUP), 770
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 521
primitive (ITUP), 776
SS7 network
accessing, 444
accessing (ISUP), 47
accessing (TUP), 47, 761
exchanging information with API, 465, 541
sending queued messages, 543
SS7 network access
ANSI and ITU-T hybrid stack, 204
local, 66, 71
remote, 66, 68, 71
SS7 stack
className, 71
coexist with APIs and applications, 66
connections, 62, 71
generic name, 71
hybrid stack, 204, 205
network back-pressure, 80
reverse hybrid stack, 204, 205
sharing CPU with applications, 62
transparent replication, 209
unable to provide any service, 209
SSN, Subsystem Number, 47
standby application
activating, 566
START_CHECK_TONE_ACK
primitive (ISUP ANSI), 511
START_CHECK_TONE_IND
primitive (CTUP), 770
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 521
primitive (ITUP), 775
START_CHECK_TONE_IND_ACK
primitive (CTUP), 770
primitive (ISUP ITU), 521
primitive (ITUP), 775
START_RELEASE_IND
primitive (CTUP), 771
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 521
primitive (ITUP), 776
START_RELEASE_IND values
BLOCKING, 748, 752
CONTINUITY_SUCCESS, 752
DCO_SUCCESS, 748
STOP_REQ, 748
T_CRA_TIMEOUT, 748
T1_TIMEOUT, 748
T2_TIMEOUT, 752
T33_TIMEOUT, 748, 752
T6_TIMEOUT, 747, 752
T7_TIMEOUT, 748, 752
T8_TIMEOUT, 748, 752
T9_TIMEOUT, 752
UNEXPECTED_RLC, 747, 752
START_RELEASE_IND_ACK
primitive (CTUP), 771
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 521
primitive (ITUP), 776
START_RELEASE_IND_ACK primitive, 561
START_RESET_IND
primitive (CTUP), 771
primitive (ISUP ANSI), 512
primitive (ISUP ITU), 521
primitive (ITUP), 777
START_RESET_IND values
BLOCKING_WITH_RELEASE, 746
COT_CC_NOT_REQUIRED, 746, 751
DCO_LPA_FAIL, 746
DPC_UNAVAILABLE, 746
MTP_UNAVAILBLE, 746
T27_TIMEOUT, 746
T34_TIMEOUT, 746
T5_TIMEOUT, 746
TCCRr_TIMEOUT, 746
TIMER_SHORTAGE, 747, 752
UNEQUIPPED_CIRCUIT, 747, 751
UNEXPECTED MESSAGE, 746
UNEXPECTED_MESSAGE, 751
START_RESET_IND_ACK
primitive (CTUP), 771
primitive (ISUP ANSI), 512
primitive (ISUP ITU), 521
primitive (ITUP), 777
START_RESET_IND_ACK primitive, 561
state changes
DPC, 578
state machine access
example (ISUP), 497
example (TUP), 899
State Machine Mode
primitives (China TUP), 768
primitives (ITU-T TUP), 774
state machines (TUP)
ACR, 801
state transitions, 575, 578
state-machines
ISUP, 447, 451, 476
states
DPC, 578
LPC, 574
LPC objects, 574
propagating, 564
recovering, 567
synchronizing, 565
transitions, 575, 578
status
DPC, 574
LPC, 574
status classes
See return status.
status indications, 578
remote DPC, 578
STOP_CHECK_TONE_IND
primitive (CTUP), 770
primitive (ISUP ANSI), 512
primitive (ISUP ITU), 522
primitive (ITUP), 776
STOP_CHECK_TONE_IND_ACK
primitive (CTUP), 770
primitive (ISUP ANSI), 512
927
primitive (ISUP ITU), 522
primitive (ITUP), 776
STOP_CONF
primitive (CTUP), 773
primitive (ISUP ANSI), 512
primitive (ISUP ITU), 522
primitive (ITUP), 778
STOP_REQ
primitive (CTUP), 773
primitive (ISUP ANSI), 512
primitive (ISUP ITU), 522
primitive (ITUP), 778
STOP_REQ primitive, 561
stopping
retransmission of REL messages, 577, 580
retransmission of RSC messages, 577, 580
subsequentNumber
parameter (TUP), 790
substate
changes, 575
substates
managed, 575
subsystems
backup, 180
graceful withdrawal, 191
in service, 119, 185
management functions, 116
out of service, 119, 184
refused withdrawal, 190
replicated, 120, 188
routing through backup, 180
status, 119, 184
status management, 184
status test, 186
successful withdrawal, 189
successful
call release (TUP), 799
continuity check (TUP), 834
continuity recheck (TUP), 838
incoming setup (TUP), 825
outgoing setup (TUP), 824
successful incoming, 825
successful outgoing, 824
suspend/resume
messages, 646
suspend/resume messages, 646
ANSI based, 646
incoming call, 646, 676
ITU-T based, 676
outgoing call, 646, 677
928
T2 expiry, 678
T6 expriy, 625
SUSPEND_IND
primitive (ISUP ANSI), 512
primitive (ISUP ITU), 522
SUSPEND_REQ
primitive (ISUP ANSI), 512
primitive (ISUP ITU), 522
SuspendResumeIndicator parameter, 676
SW_GROUP_BLOCKING_CONF
primitive (CTUP), 772
primitive (ITUP), 778
SW_GROUP_BLOCKING_IND
primitive (CTUP), 772
primitive (ITUP), 778
SW_GROUP_BLOCKING_REQ
primitive (CTUP), 772
primitive (ITUP), 778
SW_GROUP_BLOCKING_RESP
primitive (CTUP), 772
primitive (ITUP), 778
SW_GROUP_UNBLOCKING_CONF
primitive (CTUP), 773
primitive (ITUP), 778
SW_GROUP_UNBLOCKING_IND
primitive (CTUP), 773
primitive (ITUP), 778
SW_GROUP_UNBLOCKING_REQ
primitive (CTUP), 773
primitive (ITUP), 778
SW_GROUP_UNBLOCKING_RESP
primitive (CTUP), 773
primitive (ITUP), 778
switchover
configuration, 562
effects on an application, 81
ISUP API, 82
M3UA API, 82
MTP3 API, 82
SCCP API, 81
TCAP API, 81
TUP API, 82
switchoverMTP3 API, 82
synchronizing
circuit states, 564, 565
states, 565
system requirements
buffer sizes, 59
buffered I/O, 59
CPU usage, 61
IPC, 60
memory, 59
object management, 60
optimized performance, 59
optimized performance (TUP), 763
optimum performance, 60
performance, 58
performance path, 60
platform mechanism, 61
predictability, 58
resource access, 59
responding to SS7 network requests, 58
responding to STLM, 61
scheduling, 60, 62
T
T2 expiry
suspend/resume messages, 678
T24 expiry
continuity recheck, 658, 688
T6 expiry
suspend/resume messages, 625
T8 expiry (TUP)
continuity recheck, 842
T9 timer (ISUP), 666
tables
dispatching, 292
TACP Application Message Dispatcher
calls to functions, 294
TCAP
application context, 202, 206
component, 201
component portion, 202
component sublayer, 47, 198, 227
description, 198
dialogue, 201
dialogue portion, 202, 205
exchange of components, 202
invocation, 227
invoke ID, 227
multiple users, 210
operation, 198, 227
reply, 227
routing, 198
services, 47
sharing incoming dialogues, 211
simultaneous dialogues, 267
simultaneously active invocations, 227
TC-user, 198, 201
transaction, 202
transaction portion, 202
transaction sublayer, 47, 198, 261
TR-user, 201
tutorials, 275
versions, 204
TCAP AMD
tutorials, 306
TCAP API
accessing the component sublayer, 227
and ITU-T Blue Book applications, 214
application context, 251
as stack API, 44
automatic IPC channel, 209
compiling and linking, 197
connections, 220, 264, 435
decoding received components, 260
dialogue handling primitives, 244, 248
dialogue management, 265
disconnecting from SCCP, 264
effects of a switchover, 81
guidelines, 196
how to use, 215
hybrid stacks, 197, 205
IPC buffer commands, 271
IPC buffer values, 270, 272
ITU-T White Book, 214
loadsharing, 209
managing IPC channels, 209
managing memory, 269
masks, 224
memory allocation, 236, 261, 265
memory handling, 261
modifying the wait-for-reject timer value,
265
non-disruptive service update, 206
pre-select phase, 224
primitives, 233
receive IPC buffer, 270
receiving primitives, 257
receiving TCAP messages, 263
rescheduling, 264
return values, 272
send IPC buffer, 270
sending TCAP primitives, 243
sending user data, 262, 263
services provided, 47
stack switchover, 207
switchover, 208
929
tc_errno values, 272
TC-user, 243, 254, 257
terminating a service, 264, 442
timer mechanisms, 272
timer mechansims, 272
transaction handling primitives, 244
transaction management, 268
TR-user, 261
tuning TCAP IPC buffers, 269
TCAP API functions
TCX_alloc_buffer, 236
TCX_alloc_component, 236
TCX_close(), 264, 442
TCX_cnx_handler(), 224
TCX_control(), 270
TCX_get_component(), 260
TCX_open(), 220, 224, 225, 236, 237, 240,
241, 242, 254, 257, 260, 262, 263, 264, 435
TCX_put_component(), 240
TCX_recv(), 257, 442
TCX_select_mask(), 224, 436
TCX_send(), 254, 442
TLX_recv(), 263
TLX_send(), 262
TCAP Application Message Dispatcher
API, 47
disabling, 280
enabling, 280
functions, 286
guidelines, 299
header file, 285
INAP service key, 290
load balancing, 288
loadsharing, 210
partitioning, 287
shared library, 285
TCX_open function, 299
tracing, 297
uneven distribution, 290
TCAP component sublayer
bypassing, 268
component portion, 202
enabled, 254
extracting components, 260
operation, 201
passing components, 236
providing dialogue handling functions, 202,
227
reply, 201
930
service of, 198
transaction, 202
user, 201
using, 226
TCAP components
and their order in message, 236
ASN.1 compiler, 207
component buffer, 265
component handling, 261
component handling primitives, 233
contents, 201
creating, 236
encoding and decoding, 260
exchanging, 202
invoke Id, 265
management, 265
non-standard, 47, 207
structure of, 232, 234
types of, 233
TCAP connections
and their IPC buffers, 270
assigned an SSN, 210
assigned an SSN value, 211
closing, 264
creating, 220
in an array, 225
loadsharing, 210, 211
scheduling, 224
service access point, 220, 435
TC-user, 220, 435
TR-user, 220, 261, 435
TCAP dialogues
and exchanging components, 202
between TC-users, 202, 227
concurrent, 202
concurrent dialogues, 267
destination address, 243
dialogue handling primitives, 206, 243
dialogue ID, 227
dialogue Id, 267
dialogue portion, 202, 206
management, 266
originating address, 243
p-abort cause, 253
point code status, 253
pointer to dialog portion, 244
primitive type, 243
provider dialogue id, 243
realtionship with transactions, 244
report types, 253
service quality, 243
structure of dialogue portion, 248
structure of dialogue primitives, 243
structure of primitives, 248
structured, 227
termination type, 253
u-abort cause, 253
unstructured, 227
user dialogue id, 243
u-status, 253
withdrawal information, 253
TCAP function parameter
cnxId, 270
command, 270
context, 270
max_fd, 224
parameters, 271
TCAP management
API memory, 268
component, 264
dialogue, 265
IPC buffers, 270
switchover, 209
timer mechanisms, 272
transaction, 268
TCAP OA&M API
array of active connections, 436
closing connections, 442
collecting statistics, 440
creating connection, 435
post-select phase, 436
pre-select phase, 436
scheduling connections, 436
sending requests, 438
TCAP OA&M API functions
TCX_close(), 442
TCX_cnx_handler(), 436
TCX_control(), 438
TCX_recv(), 440
TCAP transaction sublayer
and ASN.1 compiler, 207
component handling, 261
component portion, 262
direct access, 201, 207, 268
end-to-end connection, 202
exchange of user data, 261
exchange of user dataTR-user, 202
indirect access, 201
management, 268
memory allocation, 261
service of, 198
timers, 274
transaction handling, 261
transaction portion, 202
user, 201, 202
using, 261
TCAProuter_application_activate() function,
286
TCAProuter_application_deactivate()
function, 286
TCAProuter_incoming_message() function,
286
TCAProuter_init() function, 286
TCAProuter_shutdown() function, 286
TCAProuter_trace() function, 297
TC-BEGIN message, 280, 283
TC-CONTINUE message, 280, 283
TC-CONVERSATION-xxx message, 280
TCCR expiry
continuity recheck, 656
TC-END message, 283
TCP/IP flow control, 208
TC-QUERY-xxx message, 280
TC-UNI message, 280, 283
TCX_cnx_handler, 208
TCX_recv, 208
TCX_select_mask, 208
teardown (TUP)
procedures, 816
terminating calls
primitives, 579
testing
application, 42
looback, 43
performance, 58
procedures, 58
subsystem status test procedure, 185
system, 61
timer activity
ISUP, 600
TUP, 816
TimerLib
definition, 309
timers
ISUP, 742
tolerant
FTC, 308
TONE_DISAPPEARS_ACK
primitive (CTUP), 770
931
primitive (ISUP ANSI), 512
primitive (ISUP ITU), 522
primitive (ITUP), 776
tracing, 532
TCAP Application Message Dispatcher, 297
Traffic Discriminator
CIC-based distribution, 452
TDi, 444
transfer indications
MTP, 577
transitions
state, 575, 578
TTC flavor, 666
TUP
accessors, 785
applications, 47, 761
China flavor, 759
circuit states, 816
continuity recheck, 838
decode function, 784
differences between flavors, 759
encode function, 785
FSMs, 810
IsupInfoMgr class, 787
IsupMsg class, 787
ITU-T flavor, 759
makefile, 900
message flow, 816
message module classes, 787
primitives (BP mode), 779
primitives requiring additional
information, 780
timer activity, 816
TupUserMsg class, 789
TupXXX class, 788
tutorials, 899
user message, 786
TUP API
as stack API, 44
effects of a switchover, 82
services provided, 47
TUP_USR_MSG_IND
primitive (CTUP), 770
primitive (ITUP), 776
TUP_USR_MSG_REQ
primitive (ITUP), 776
TupUserMsg
class (TUP), 789
TupXXX
class (TUP), 788
932
TU-T TUP
primitives (SM mode), 774
tutorials
ISUP, 497
MTP3/M3UA, 112
Plug-In, 343
SCCP, 192
TCAP, 275
TCAP AMD, 306
TUP, 899
VPC, 53
U
UBM message (TUP)
received, 822
sent, 823
UCIC messages, 591
unblocking
primitives, 579
UNBLOCKING_CONF
primitive (CTUP), 772
primitive (ISUP ANSI), 513
primitive (ISUP ITU), 522
primitive (ITUP), 777
UNBLOCKING_IND
primitive (CTUP), 772
primitive (ISUP ANSI), 513
primitive (ISUP ITU), 522
primitive (ITUP), 777
UNBLOCKING_REQ
primitive (CTUP), 772
primitive (ISUP ANSI), 513
primitive (ISUP ITU), 522
primitive (ITUP), 777
UNBLOCKING_RESP
primitive (CTUP), 772
primitive (ISUP ANSI), 513
primitive (ISUP ITU), 522
primitive (ITUP), 777
UNEQUIPPED_CIRCUIT_IND
primitive (ISUP ANSI), 513
primitive (ISUP ITU), 522
uneven distribution, 290
unknown messages
handling, 597
primitives, 597
UNKNOWN_MESSAGE_IND
primitive (ISUP ITU), 523
UNKNOWN_MESSAGE_REQ
primitive (ISUP ITU), 523
UNKNOWN_MSG_IND
primitive (BP Mode), 523
UNKNOWN_MSG_REQ
primitive (BP Mode), 523
UNKNOWN_OPC_MSG_IND
primitive (BP Mode), 524
unsolicited information exchange, 623
failure, 623
UNSOLICITED_INFO_IND
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 521
UNSOLICITED_INFO_REQ
primitive (ISUP ANSI), 511
primitive (ISUP ITU), 521
unsuccessful
backward setup message (TUP), 822
call release (TUP), 800
call setup (ISUP), 602
call setup (TUP), 816, 822, 823
updating
circuit states, 567
user defined messages, 592
User In Service (UIS), 119
user message
TUP, 786
User Out of Service (UOS), 119, 180, 184
user-supplied algorithm, 281
V
validation, 58, 61
values
SETUP_FAILURE_IND, 746
Virtual Point Code
definition, 52
Virtual User
definition, 53
VPC
definition, 52
OAM API, 53
SCCP API, 53
tutorials, 53
VU
definition, 53
W
work
measurement, 476
WRONG_PROBE_TYPE, 492
WRONG_STATE
return status, 553
933