Documente Academic
Documente Profesional
Documente Cultură
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
Second Edition
Hewlett-Packard Company
OpenCall Business Unit
38053 GRENOBLE Cedex 9
France
ii
Contents
Preface
1. Introduction to HP OpenCall SS7 APIs
HP OpenCall SS7 Developers 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tutorials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 on Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIGTRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
File Names and Path Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
36
37
38
38
38
39
40
40
40
41
41
41
41
42
43
44
44
46
46
47
47
47
47
49
49
49
52
52
52
52
53
54
iii
Contents
Platform and User Application Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using LANs with GDI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compiling and Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C++ Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Examples of Compile/Link Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
56
57
57
57
58
60
62
63
64
64
65
65
65
66
67
67
68
68
68
69
69
70
71
72
73
73
74
74
74
75
76
Contents
General Description of the Level 3 (MTP3/M3UA) API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
MTP Level 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
MTP Level 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
MTP Level 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
MTP3 User Adaptation (M3UA) Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Stream Control Transport Protocol (SCTP) Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Features of MTP3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Message Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Multiple Application Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Network Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Traffic Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Link Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Route Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Combining Linksets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
How to Use the MTP3 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Creating MTP3 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Scheduling MTP3 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
MTP3 Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Receiving MSUs (Message Signaling Units). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Sending MSUs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Closing MTP3 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Using the MTP3 API Shared Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Creating MTP3 Stack Connections with SS7_xifcreate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Scheduling MTP3 Stack Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
SS7_ifselectmask(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
SS7_ifcnxhandler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
MTP3 Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Receiving MSUs with MTPL3_recv(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Sending MSUs Using MTPL3_send . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Closing MTP3 Stack Connections with SS7_ifclose() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Tuning MTP3 IPC Buffers with SS7_ifctrl() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
MTP3 API Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Sending MSUs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Receiving MSUs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
DPC Unavailable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
DPC Available . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
DPC Congestion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Contents
DPC Uncongested . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Local MTP3 Unavailable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Local MTP3 Restart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
vi
106
106
106
108
108
108
108
109
109
109
109
109
110
110
111
111
112
112
112
112
112
113
113
113
113
114
116
116
116
117
119
Contents
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 the SCCP Using SS7_ifctrl() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Addressing and Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Addressing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Types of Traffic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
120
121
121
126
127
130
131
132
133
133
135
142
144
147
148
149
153
153
154
156
156
158
158
160
160
161
162
164
164
166
167
168
168
169
vii
Contents
API Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the TCAP API Shared Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Create a Dialogue Primitive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
viii
172
173
174
174
174
176
177
177
178
178
178
179
179
180
180
181
182
182
183
183
184
186
188
190
191
192
192
192
192
192
193
193
193
193
193
194
Contents
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tcx_primitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Primitive Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCCP Service Quality Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Primitive Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
194
194
195
195
196
197
200
200
200
201
201
203
203
203
203
206
206
208
208
209
210
212
212
212
213
213
215
216
216
217
217
218
218
219
219
220
222
224
ix
Contents
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCX_control(): Return Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transaction Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using TCAP over GDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GDI Access (Application Interface Layer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GDI Connectivity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
x
226
227
229
230
230
233
234
236
237
237
237
238
239
240
240
241
241
241
241
241
242
242
243
243
244
245
246
246
248
250
251
252
252
Contents
TCAP Addressing Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing Stack Switchovers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing Dual Signaling LANs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCAP Tutorial Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TcapClient.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TcapServer.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Building IN Message Sets Over the HP OpenCall SS7 TCAP API . . . . . . . . . . . . . . . . . . . . . . . .
253
253
254
257
260
260
261
262
264
264
265
265
269
269
269
270
270
270
270
270
271
271
272
273
274
274
276
278
281
281
281
281
282
282
283
283
xi
Contents
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 Tutorials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
284
285
285
286
287
287
287
288
288
288
289
290
290
290
8. PIC/AG - Introduction
Some Basic Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Purposes of the HP OpenCall PIC Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ensuring HA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xii
292
294
294
295
295
296
296
297
297
297
298
299
299
300
301
302
302
303
304
305
Contents
Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Execution API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Loading and Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HA API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HA States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HA Model (on HP OpenCall SS7) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Registry API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Purpose. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PCA (Plug-in Communication API) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Communication Setup and Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TimerLib API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PIC Pool of Timers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plug-in Pools of Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Changing the User Plug-in. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Starting/Stopping the User Plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
306
307
307
307
307
310
310
310
310
311
316
316
316
317
318
318
319
319
320
320
322
324
325
325
326
326
326
327
327
327
328
328
329
329
329
330
xiii
Contents
High Availability (HA) and the PCA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HA Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connection Enabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PCA Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Server Setup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Server Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Creation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session 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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Buffer Allocator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sending Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xiv
332
332
333
334
334
339
339
340
341
341
341
343
343
345
345
345
346
347
347
348
348
351
352
354
355
355
356
356
357
359
359
361
362
362
364
366
Contents
Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Message Ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Profiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
366
366
367
368
368
368
368
369
372
375
375
376
376
377
377
380
381
381
381
382
383
386
388
388
388
389
390
391
391
391
391
392
394
395
xv
Contents
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xvi
396
396
397
398
399
400
402
402
403
403
405
406
406
408
408
409
410
410
412
413
413
414
414
416
417
417
419
420
421
422
422
422
422
424
426
Contents
Closing a TCAP OA&M Connection Using TCX_close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
430
431
432
432
433
434
434
434
434
435
436
437
437
437
438
439
442
444
445
445
446
448
448
448
448
449
449
450
450
451
451
452
452
459
459
xvii
Contents
Select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Post-select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the Activity Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Criteria for Choosing to Implement the Activity Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
How to use the Activity Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Redefining the Activity Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Messages via Probe Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing and Destroying a Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Destroy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
oamReceive() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
oamStatus() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Return Status Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Dynamic Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
reload() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dump() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Tutorial Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using State-machine Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Bypass Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISUP Makefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
460
461
462
462
463
463
466
467
467
467
469
469
472
474
477
477
478
480
480
481
482
xviii
484
485
486
486
487
488
505
505
510
511
511
513
514
Contents
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
515
516
516
517
518
518
518
519
519
519
520
522
524
526
527
527
528
529
531
532
533
536
537
538
539
539
539
539
540
541
542
543
544
545
547
547
xix
Contents
How HP OpenCall SS7 ISUP Tracks Circuit State Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Developing a Circuit Update Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Propagating States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Synchronizing States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Activating the Standby Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Recovering States. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
548
549
549
550
551
552
xx
556
558
558
559
559
563
563
566
568
569
570
571
572
573
574
574
574
574
574
575
576
576
577
577
578
580
Contents
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 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
583
584
585
585
586
587
588
589
589
591
591
591
592
593
594
596
596
597
598
599
599
600
601
603
603
604
605
606
606
608
608
610
610
611
611
612
613
xxi
Contents
Continuity Check on this Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
Continuity Check on the Previous Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
Facility Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
620
621
621
621
622
622
623
623
625
625
627
628
629
630
630
632
632
633
642
642
643
Contents
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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check Request with CRM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Continuity Check on this Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
651
653
653
655
655
656
656
657
658
658
659
660
660
661
661
672
672
678
678
679
680
682
682
683
685
685
687
687
688
688
689
691
692
692
704
xxiii
Contents
Facility Exchange - Success. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
Facility Exchange - Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
708
709
709
710
711
711
712
713
714
714
716
717
718
719
720
721
722
723
724
725
725
726
Contents
ANSI-based HP OpenCall SS7 ISUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
ITU-T - based HP OpenCall SS7 ISUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Application Development Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Designing for System Predictability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Techniques for Performance Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
System Test and Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Object Orientation Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the TUP API Shared Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using the Activity Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Messages via Probe Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Closing and Destroying a Probe Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Receiving Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Return Status Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Using Dynamic Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exchanging Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 TUP Primitives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HP OpenCall SS7 TUP Message Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
742
742
742
743
745
745
745
745
747
747
747
747
747
747
748
748
748
748
748
748
748
748
749
749
749
749
749
750
750
751
751
751
751
766
xxv
Contents
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Managing 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Call Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Maintenance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Blocking/Unblocking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuit Group Blocking/Unblocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xxvi
782
784
784
785
785
785
785
785
785
786
788
791
792
792
793
793
794
794
794
794
794
795
798
798
834
856
856
860
878
878
879
879
880
880
880
881
Contents
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
xxvii
Contents
xxviii
Preface
This guide contains guidelines for developing applications for HP OpenCall SS7
platforms.
This guide accompanies HP OpenCall SS7 3.1 on Linux.
General guidelines for developing applications and using the APIs supplied
with the HP OpenCall SS7 software.
Guidelines for developing applications and using the API supplied with the
HP OpenCall SS7 ISUPand HP Opencall SS7 TUP software.
ISUP/TUP call setup and call teardown procedures and circuit maintenance
processes.
xxix
Contents
Chapter 1, Introduction to
HP OpenCall SS7 APIs.
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).
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.
Describes the TCAP API and the functions that the application can use
to establish and maintain TCAP dialogues with a remote TCAP user.
Describes how to use the PCA API to develop a user plug-in (shared
library) to run with the Application Guardian.
xxx
Chapter
Contents
Describes how to use the PIC APIs to develop a user plug-in (shared
library) to run with the Application Guardian.
Describes how to open, close and use an SS7 stack connection via the
HP OpenCall SS7 ISUP API.
xxxi
Chapter
Appendix B, TUP
Addendum.
xxxii
Contents
Describes HP Opencall SS7 TUP. It describes the differences between
HP Opencall SS7 TUP and HP OpenCall SS7 ISUP.
Associated Documentation
The following guides are on the HP OpenCall SS7 3.1 on Linux CD-ROM:
Table 1
HP OpenCall SS7
Conformance and Compliance
Statements
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.
It contains information on the SS7 Monitor, configuration files, and the
SNMP traps generated by the platform.
HP OpenCall SS7
Troubleshooting Guide
xxxiii
The following guides are available but are not on the HP OpenCall SS7 3.1 on
Linux CD-ROM:
Table 2
Other Documents
Title
Contents
xxxiv
xxxv
xxxvi
Chapter 1
35
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
36
Development Platform
Chapter 1
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
37
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
MTP3/M3UA, SCCP, ISUP, TUP and TCAP APIs. In the case of TCAP, the
stacks 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.
An application can use a single API (either an SS7 Stack or an SS7 Management
API) or simultaneously use multiple APIs.
38
Chapter 1
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
39
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,
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
Routing
Addressing
Segmentation/Reassembly
40
Chapter 1
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:
Component Management,
Transaction/Dialog Management.
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
41
42
Chapter 1
Application Guardian
By using the Application Guardian 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
Application Guardian, see the HP OpenCall SS7 Welcome Guide.
The Application Guardian has its own APIs.
These APIs are described in Chapter 9, PIC/AG - Using the PCA API, and
Chapter 10, PIC/AG - Using the PIC APIs.
Chapter 1
43
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 45 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
Step
2. The STP E selects one of the constituents of the alias (let us say A).
Step
Step
Step
Step
44
Chapter 1
Chapter 1
45
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).
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.
46
Chapter 1
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.
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/tutorials directory.
Chapter 1
47
CAUTION
48
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.
Chapter 1
Table 1-1
File/Path Names
Purpose
File Path/Name
SNMP Agent
/etc/snmp/snmpd.conf
Log Files
/var/log/messages
/var/log/daemon.log
/var/log/rpmpkgs
/var/adm/nettl.LOGxx
NOTE
Chapter 1
49
50
Chapter 1
Chapter 2
51
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.
52
Minimize the number of process switches that you have implied in the
performance path.
Allocate all dynamic objects into a free pool at startup and use them from there,
as required.
Chapter 2
Optimizing OS Performance
The main causes of poor performance leading to unpredictable system response are
due to access contention of memory and CPU resources.
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 55).
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 nice, rtprio
or rtsched.
Make sure you have sufficient physical memory for all HP OpenCall SS7 and
application processes. For a Front End running HP OpenCall SS7 processes
only, with no application processes, 128 MB is the recommended minimum for
the system. The recommended minimum per stack is also 128 MB. The system
must have at least twice as much swap memory (also known as virtual memory)
as physical memory.
Beware of the effect of buffered I/Os. See the product Release Notes.
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.
53
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.
54
Chapter 2
NOTE
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.
Chapter 2
55
56
Chapter 2
C Language
Compiling and Linking in a Single Command (C)
To compile and link a C program in a single command line, you use:
gcc -D_GNU_SOURCE -fexceptions -pthread -Wall -I/opt/OC/include -o foo foo.c
-L/opt/OC/lib -lSS7utilXXX
C++ Language
Compiling and Linking in a Single Command (C++)
To compile and link a C++ program in the same command line, you use:
g++ -fexceptions -pthread -Wall -I/opt/OC/include -o foo foo.c -L/opt/OC/lib
-lSS7utilXXX
Chapter 2
57
-I/opt/OC/include
SCCP API
TCAP API
ISUP API
Using the ISUP API Shared Library on page 435 and ISUP Makefiles on
page 482.
TUP API
58
Chapter 2
Chapter 3
59
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).
60
Chapter 3
Chapter 3
61
62
Chapter 3
Chapter 3
63
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.
NOTE
className
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.
64
Chapter 3
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
Masks
Chapter 3
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.
65
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).
66
Chapter 3
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 When you are using multiple APIs in the application, you must only have one
APIs
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.
Chapter 3
67
68
Chapter 3
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.
Chapter 3
69
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
70
Chapter 3
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. The Internal Buffer size
must not be reduced to less than the half of the configured IPC buffer size.
For details about the specific IPC functions, see the following API chapters.
Chapter 3
71
72
Back-pressure
Chapter 3
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
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
Chapter 3
73
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.
74
Chapter 3
Chapter 3
75
76
Chapter 3
Chapter 4
77
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.
78
Chapter 4
Chapter 4
Order-of-arrival option for the delivery of individual user messages within the
streams.
79
User application
TCAP
API
ISUP
& TUP
APIs
SCCP
API
MTP3/
M3UA
API
AG API
OA & M
APIs
TCAP
SCCP
MTP level 3
M3UA
SCTP
Signaling Network
Management
IP
MTP level 2
MTP level 1
80
Chapter 4
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:
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
81
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 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 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.
82
Chapter 4
SS7_ifselectmask()
select()
SS7_ifcnxhandler()
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 90 for a list and explanation of all MTP3
primitives.
Chapter 4
83
Sending MSUs
MTPL3_send() sends MSUs to a remote destination.
84
Chapter 4
NOTE
To enable the multiple connection functionality, you will also have to set parameters
in the sys.<className>.api configuration file as follows:
Table 4-1
If you...
...to...
autoSwitch
NO
YES
closeOnEnable
NOTE
Chapter 4
YES
NO
closeOnCreate
YES
NO
85
#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 */
}
86
Chapter 4
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
87
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.
For details about syntax, parameters, and return values, see the
SS7_ifcnxhandler() man page.
Example 4-2
int
int
int
int
fd_set
fd_set
fd_set
struct timeval
nfound;
/* select result */
num_cnx;
numFd;
cnx_active[MAX_FD];
readMask;
/* mask for select */
writeMask;
/* mask for select */
exceptionMask /*mask for select*/
tmout, * time = &tmout;
ss7_service_parms sceparms;
sceparms . SI = SI_VALUE;
/* service parameters */
88
Chapter 4
Chapter 4
89
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
mtp_pause_ind
mtp_resume_ind
Thus, the application exchanges messages and status information with MTP3.
90
Chapter 4
Chapter 4
MTP3 Primitives
91
int
dpc;
/* destination point code */
unsigned 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);
92
Chapter 4
Chapter 4
93
NOTE
If the application sends messages to MTP level 3 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
For details about syntax, parameters, and return values, see the MTPL3_send()
man page.
Example 4-4
94
Chapter 4
Chapter 4
95
96
Chapter 4
Chapter 4
97
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
98
Sending an MSU
Chapter 4
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
Receiving an MSU
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.
Chapter 4
99
If the application attempts to send an MSU to the affected DPC, it will result in the
error code EAPIILLVALUE.
100
Chapter 4
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
At this point the application can continue sending MSUs to the DPC.
Chapter 4
101
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
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
102
Chapter 4
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
103
104
Chapter 4
Chapter 5
105
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
HP OpenCall SS7 complies to the ANSI standard for the Preferred/Next Preferred
Preferred and
functionality, as described in GR-82-CORE, Issue 1, June 1994, Revision 3,
Primary/ Secondary 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.
106
Chapter 5
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
107
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.
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.
108
Chapter 5
Global Title
DPC
SSN
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 In Service
Chapter 5
109
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:
110
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.
Chapter 5
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
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.
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.
Chapter 5
111
SS7_ifselectmask()
select()
SS7_ifcnxhandler()
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 119.
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 121.
112
Chapter 5
Chapter 5
113
NOTE
To enable multiple connections, you will also have to set parameters in the
configuration file sys.<className>.api:
Table 5-1
If you...
...to...
autoSwitch
NO
YES
(default)
closeOnEnable
YES
NO
(default)
closeOnCreate
YES
NO
(default)
114
Chapter 5
ss7_service_parms
sceparms;
OCTET
client_ssn = 101;
int
cnxId;
sceparms.ssn = client_ssn;
sceparms.mode = SCCP_ITU_WHITE;
/* service parameters */
Chapter 5
115
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().
116
Chapter 5
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 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
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;
/* Must set this each time round loop as selectmask call
* may change the pointer
*/
time = &tmout;
Chapter 5
117
118
Chapter 5
SCCP Primitives
Primitives consist of commands and their respective responses associated with the
services requested of SCCP. As shown in Figure 5-2, SCCP Primitives,, there are
four categories.
Figure 5-2
SCCP Primitives
Chapter 5
119
Recommendation
Use of the _x primitives is preferred because they take advantage of the
segmentation/reassembly functionality.
Table 5-2
Type
Primitive Name
Associated Structure
Service
Request
sccp_xunitdata_req
sccp_xunitdata_parms
sccp_state_req
sccp_state_parms
sccp_xnotice_req
sccp_xnotice_parms
sccp_coord_req
sccp_coord_parms
Response
sccp_coord_resp
sccp_coord_parms
Indication
sccp_xunitdata_ind
sccp_xunitdata_parms
sccp_state_ind
sccp_state_parms
sccp_pcstate_ind
sccp_pcstate_parms
sccp_xnotice_ind
sccp_xnotice_parms
sccp_coord_ind
sccp_coord_parms
sccp_coord_conf
sccp_coord_parms
Confirmation
120
Chapter 5
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-3
SCCP Parameter
Structure
Element
Type
Value
affectedDPC
BITS32
affectedSSN
OCTET
associatedPC
BITS32
Chapter 5
121
SCCP Parameter
Structure
Element
Type
Value
callingAddress
SC_ADDRESS
pointCodePrese
nt
SC_PC_USAGE
SC_no,
SC_SCCPUse,
SC_MTPUse
pointCode
BITS32
ssnPresent
ubool
ssn
OCTET
gt
pointer to a
SC_GLOBAL_TITLEstructure
or NULL (no global title)
calledAddress
SC_GLOBAL_
TITLE
coordStatus
122
ubool
gtIndicator
SC_GT_INDICATOR
SC_noGlobalTitle
SC_gtType1
SC_gtType2
SC_gtType3
SC_gtType4
translation
SC_TRANSLATION_TYP
E
SC_unused
SC_internetwork_1
SC_networkSpecific_1
numbering
SC_NUMBERING_PLAN
SC_unknownNumbering
SC_isdn
SC_userdata
SC_telex
SC_maritimeMobile
SC_landMobile
SC_isdnMobile
encoding
SC_ENCODING_SCHEME
SC_unknownEncode
SC_bcdOdd
SC_bcdEven
nature
SC_ADDRESS_NATURE
SC_subscriberNo
SC_nationalNo
SC_internationalNo
digits
char*
SC_CONFIRM_STATUS
SC_granted_withdrawal
SC_denied_withdrawal
SC_no_peer
Chapter 5
SCCP Parameter
Structure
Element
Type
Value
hopCounter
unsigned char
Range: 1-15
Defaults to 15 if set outside
range.
importance
InSequence
int
ubool
Set to 0.
multInd
SC_SMI
multIndUnknown
multIndSolitary
multIndDuplicated
returnOption
ubool
Chapter 5
123
SCCP Parameter
Structure
Element
Type
Value
returnReason
SC_RETURN_REASON
SC_noTranslationNature
SC_noTranslationSpecif
ic
SC_subsystemCongestion
SC_subsystemFailure
SC_unequippedUser
SC_networkFailure
SC_networkCongestion
SC_unqualified
SC_errorInMsgTransport
SC_errorInLocalprocess
ing
SC_noDestReassembly
SC_sccpFailure
SC_hopCounterViolation
SC_segNotSupported
SC_segFailure
SC_invalidISNIrouting
SC_unauthorizedMsg
SC_msgIncompatibility
SC_noISNIconsRouting
SC_redundantISNIconsRo
uting
SC_noISNIidentificatio
n
SC_noError
SegmOption
ubool
sequenceControl
int
serviceClass
SC_SERVICE
_ CLASS
spStatus
SC_SP_STATUS
SC_inaccessible
SC_congestedSC_accessi
ble
SC_restartingSC_conges
ted
SC_cnx_error
XUDTOption
ubool
XUDTSOption
ubool
124
SCCP_CLASS_0 = 0
SCCP_CLASS_1
Chapter 5
SCCP Parameter
Structure
Element
Type
Value
userStatus
SC_USER_STATUS
SC_UIS
SC_UOS
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.
Chapter 5
125
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.
126
Chapter 5
Chapter 5
127
128
Chapter 5
Chapter 5
129
130
Chapter 5
Chapter 5
131
132
Chapter 5
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:
SC_PC_USAGE setting
Meaning
SC_no
SC_SccpUse
SC_MtpUse
In this case routing indicator must be set to RtGT and the translation must
take place locally
Chapter 5
133
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.
134
Chapter 5
In this case the routing indicator must be set to RtGT and the translation must
take place locally.
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
Chapter 5
Inbound traffic goes from the MTP layer to the SCCP layer.
135
Inbound Traffic
Outbound
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.
Figure 5-4
Outbound Traffic
136
Chapter 5
Loopback traffic goes from the application to the SCCP layer to a local application
on the same system.
Figure 5-5
Loopback Traffic
Chapter 5
137
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.
Figure 5-6
Relay Traffic
138
Chapter 5
Subsystem Number
This element identifies the sub-system (ISUP, SCCP management or a TCAP
user) that can be accessed via the SCCP.
Routing Indicator
This indicates whether routing is based on the SSN or on a GT.
Chapter 5
139
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).
140
Boolean value
NAI value
TT value
NP value
...
Chapter 5
a DPC
This corresponds to an incomplete translation. The GT continues to be used for
routing (routOnGt remains set to yes).
Chapter 5
141
142
Chapter 5
Chapter 5
143
144
Chapter 5
Chapter 5
145
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 GT
146
Chapter 5
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
Chapter 5
147
148
Chapter 5
Chapter 5
149
150
Chapter 5
Chapter 5
151
If the received calledPartyAddress contains both an LPC and an SSN, then the
sccp_xunitdata_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.
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).
152
Chapter 5
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-3,
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.
Chapter 5
153
154
Chapter 5
Chapter 5
155
156
Chapter 5
Chapter 5
157
158
Chapter 5
Chapter 5
159
160
Chapter 5
Chapter 5
161
162
Chapter 5
Replicated Subsystems
The HP OpenCall SS7 SCCP supports the coordinated withdrawal of local and peer
subsystems.
Chapter 5
163
164
Chapter 5
Chapter 5
165
166
Chapter 5
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.
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=AAA, ABB, WBB, or WAA).
To run SccpClient on the client using SSN 10, enter:
SccpClient_32_AAA SS7_Stack_36 36 35 -o10 -r10
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.
Chapter 5
167
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.
168
Chapter 5
Chapter 5
169
170
Chapter 5
Chapter 6
171
Overview
Chapter Organization
This chapter is organized in the following way:
Management guidelines
API Functions
In 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 Function
(Not Supported in Release 3.1)
172
Function To Be Used
TC_close()
TCX_close()
TC_open()
TCX_open()
TC_recv()
TCX_recv()
TC_select_mask()
TCX_select_mask()
Chapter 6
Obsolete Function
(Not Supported in Release 3.1)
Function To Be Used
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.
Replace the TC_ function calls by the TCX_ versions listed in Table 6-1,
Obsolete API Functions.
Chapter 6
173
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.
174
Chapter 6
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
175
176
Chapter 6
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
177
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.
Component portion
The component portion contains information about individual operations and
their responses to operators.
178
Chapter 6
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
179
ANSI 90
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.
180
Chapter 6
General restriction - The only restriction imposed on ITU-T White Book TCAP applications using a
use of Global Title
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.
Chapter 6
181
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.
182
Chapter 6
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 222.
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 the
cfgSccp command (for a description, see the man page). See also the
HP OpenCall SS7 Operations Guide.
Receive Mechanism, To improve throughput the TCAP API stores incoming messages from the SS7 stack
Buffering and Test
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
Message
messages are received by the user one by one with a TCX_recv() call. Because of
this:
One TCX_recv() gives one message to the user, but several may have been
received from the socket.
Chapter 6
183
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 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.
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
184
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.
Chapter 6
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
A single TCAP user can establish multiple TCAP stack connections. Each
connection can be given identical or different SSN values.
185
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.
186
Chapter 6
Chapter 6
187
Active and
non-active
application_id
188
Chapter 6
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
189
NOTE
190
The application must be re-linked using the White Book library, libSS7util.so
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
Chapter 6
191
TCX_select_mask()
select()
TCX_cnx_handler()
192
Chapter 6
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 237.
Chapter 6
193
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 230.
TCX_free_components()
TCX_free_buffer()
TCX_flush_components()
194
Chapter 6
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 236.
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 240.
Chapter 6
195
To enable multiple connections, you will also have to set some of the following
parameters using the cfgTcap command (for a description, see the man page):
Table 6-2
If you...
...to...
autoSwitch
NO (default)
YES (default)
closeOnEnable
YES (default)
NO (default)
closeOnCreate
YES (default)
NO (default)
196
Chapter 6
TCX_open(ClassName,
TCX_TCAP_STD,
OSSN,
TC_YES,
TC_YES,
&AppliInfo,
TCX_SCCP_SERVICE_ITU_WB,
&timeoutValue);
Chapter 6
197
198
Chapter 6
Chapter 6
199
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.
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:
200
Chapter 6
For details about syntax, parameters, and return values, see the
TCX_cnx_handler() man page.
Chapter 6
201
202
Chapter 6
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 operations 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.
Chapter 6
203
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.
A TCAP BEGIN message containing the invoke id w and the dialogue id z1 is sent to TC-USER3.
TC-USER3 receives an invocation component with invoke id w. TC-USER3 locally identifies its dialogue with
TC-USER1 with the dialogue id z2.
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.
A TCAP END message containing the result component and TC-USER1 dialogue id z1 is sent to TC-USER1.
204
Chapter 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.
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.
A TCAP BEGIN message containing the invoke id x and the local dialogue id y1 is sent to TC-USER2.
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-USER1s dialogue id y1 is sent to TC-USER1.
12
TC-USER1 receives TC-USER2s 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
205
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)
Now you need to store the components in the TCAP API Library.
206
Chapter 6
Chapter 6
207
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.
208
Chapter 6
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
Component
Type
Meaning
TC_INVOKE
ANSI
ITU-T
Invocation of an operation.
TC_INVOKE_L
TC_INVOKE_NL
TC_RESULT_L
TC_RESULT_NL
TC_U_ERROR
TC_U_CANCEL
Local cancel.
TC_L_CANCEL
TC_U_REJECT
TC_L_REJECT
TC_R_REJECT
Chapter 6
209
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
210
Chapter 6
Component Type
Parameters
Mandatory/Optional
TC_RESULT_L
invoke_id
correlation_id
operation
parameter
optional
invoke_id
correlation_id
operation
parameter
optional
invoke_id
correlation_id
error
mandatory
parameter
optional
TC_U_CANCEL
invoke_id
TC_L_CANCEL
correlation_id
TC_U_REJECT
invoke_id
TC_L_REJECT
correlation_id
TC_R_REJECT
problem_code
mandatory
parameter
optional
TC_RESULT_NL
TC_U_ERROR
Chapter 6
211
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.
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.
212
Chapter 6
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.
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)
else
{
Chapter 6
213
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
} // end of else
214
Chapter 6
Chapter 6
215
For details about syntax, parameters, and return values, see the
TCX_put_component() man page.
216
Chapter 6
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
217
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
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.
218
Chapter 6
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
service_quality
tcx_sccp_service_quality
d_address
tc_address
o_address
tc_address
user_dialogue_id
unsigned int
provider_dialogue_id
unsigned int
dialog_portion
tc_dialog_portion
See dialogue_portion on
page 226
Chapter 6
219
Field
Type
Meaning
tcx_primitive_option
tcx_primitive_option
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
TC_BEGIN
TC_CONTINUE
TC_END
TC_NOTICE
TC_U_ABORT
TC_P_ABORT
TC_QUERY_W_PERM
220
Chapter 6
Primitive Name
Meaning
ANSI
ITU-T
TC_QUERY_WO_PERM
TC_RESPONSE
TC_CONV_W_PERM
TC_CONV_WO_PERM
SCCP_USER_STATUS
SCCP_PC_STATUS
SCCP_N_COORD
SCCP_N_COORD_RES
NO_PRIMITIVE
MGT
SWITCH_STARTED
SWITCH_DONE
Chapter 6
221
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_BOOL
sccp_use_extended_data
222
Chapter 6
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
unsigned
character
sccp_sequence_control
Chapter 6
223
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
Primitive Type
Parameters
Mandatary or Optional
TC_UNI
sce_quality
optional
d_address
mandatory
o_address
mandatory
dialogue_portion
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
user_dialogue_id
mandatory
TC_CONTINUE
sce_quality
optional
TC_CONV_W_PERM
d_address
TC_CONV_WO_PERM
o_address
dialogue_portion
user_dialogue_id
mandatory
provider_dialogue_id
mandatory
224
Chapter 6
Primitive Type
Parameters
Mandatary or Optional
TC_END
sce_quality
optional
TC_RESPONSE
d_address
o_address
dialogue_portion
user_dialogue_id
mandatory
provider_dialogue_id
sce_quality
optional
d_address
o_address
user_dialogue_id
mandatory
provider_dialogue_id
mandatory
report_cause
mandatory
sce_quality
optional
d_address
o_address
dialogue_portion
user_dialogue_id
mandatory
provider_dialogue_id
TC_NOTICE
TC_U_ABORT
u_abort_cause
mandatory
Chapter 6
225
Primitive Type
Parameters
Mandatary or Optional
TC_P_ABORT
sce_quality
optional
d_address
o_address
user_dialogue_id
mandatory
provider_dialogue_id
p_abort_cause
mandatory
SCCP_USER_STATUS
tc_ustatus
mandatory
SCCP_PC_STATUS
tc_pcstatus
mandatory
SCCP_N_COORD
tc_ncoord
SCCP_N_COORD_RES
tc_ncoord
mandatory
NO_PRIMITIVE
user_dialogue_id
mandatory
provider_dialogue_id
MGT
tc_stat
mandatory
SWITCH_STARTED
no parameter
SWITCH_DONE
no parameter
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.
226
Chapter 6
dialogue_portion Structure
Field
Structure
Contents
Meaning
dlg_info_present
TC_BOOL
TC_NO
TC_YES
application_context_name
user_information
tc_data
tc_data
length
Length of encoded
Object Identifier value
data
length
data
EXTERNAL TAG +
EXTERNAL LENGTH +
EXTERNAL VALUE
abort_reason
tc_abort_reason
AC_name_not_suppor
ted
user_specific
Chapter 6
227
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;
Primitive.provider_dialogue_id=0;
dialogue
228
Chapter 6
tcx_primitive_option
Type
Field
Meaning
tc_u_abort
u_abort_cause
tc_termination_type
termination_type
tc_transport_reason_
return
report_cause
tc_p_abort_cause
p_abort_cause
struct tc_stat_struct
tc_stat
struct tcx_pcstatus_
struct
tc_pcstatus
struct tcx_ustatus_
struct
tc_ustatus
struct tcx_ncoord_
struct
tc_ncoord
Chapter 6
TCAP_ext.h
TCAP_ccitt.h
TCAP_common.h
TCAP_ansi.h
229
230
Chapter 6
Chapter 6
231
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 );
}
}
232
Chapter 6
Chapter 6
233
234
Chapter 6
Chapter 6
235
For details about syntax, parameters, and return values, see the
TCX_get_components() man page.
236
Chapter 6
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
237
For details about syntax, parameters, and return values, see the TCX_send() man
page.
238
Chapter 6
Chapter 6
239
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.
240
Chapter 6
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 206.
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 216.
Chapter 6
241
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 219 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
TC Dialogue Example
242
Chapter 6
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
243
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 242.
244
Chapter 6
Chapter 6
245
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
Function
Parameters
int
TCX_control
(int
cnxId,
voida
* context,
tc_control_c
command,
tc_control_parms
* parameters);
cnxId
This input parameter specifies which stack connection IPC buffers will be modified.
246
Chapter 6
This input parameter defines the IPC buffer command as described in the table.
Table 6-11
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
OUT_BUFFER_DONT_BLOCK
OUT_BUFFER_FLUSH
OUT_BUFFER_FLUSH_COND
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
Chapter 6
247
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 TCor TR-user.
parameters
Table 6-12
IPC command
OUT_IPC_BUFFER_SIZE
IN_IPC_BUFFER_SIZE
HIGH_TRANSIT_TIME
LOW_TRANSIT_TIME
GET_CONNECTION_INFO
248
Chapter 6
tc_errno
Meaning
TCE_ILLEGAL_VALUE
TCE_CNX_ID
TCE_CNX_CLOSED
TCE_ILLEGAL_CALL
TCE_API_BUSY
TCE_WRONG_IDS
TCE_NOT_IMPLEMENTED
TCE_MEMORY_ERROR
No memory available.
Chapter 6
249
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 the cfgTcap
command (for a description, see the man page). See also the HP OpenCall SS7
Operations Guide.
In the 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.
250
Chapter 6
NOTE
TCAP messages have a maximum component portion size of 4000 bytes. The
remaining 90 bytes are used for TCAP header encoding.
TCAP requests a connection on GDI using the Sub-System Number (SSN) 256.
The SSN 256 is reserved for applications using the GDI protocol and cannot be used
for SCCP connections.
The GDI interface is defined by Bellcore as "ISCP Generic Data Interface for
TCP/IP", with versions:
5.0 January 97
4.1 May 96
HP OpenCall SS7 implements all GDI 4.1 features, and can interoperate with 5.0.
The HP OpenCall SS7 stack provides the transport protocol part of GDI.
Chapter 6
251
GDI messages can be longer than those run over SCCP. The maximum GDI
message length is 4096 bytes (6 bytes of header). GDI messages are versioned.
The sub layer (SCCP or GDI) to which a message must be routed is determined
by the SubSystem Number (SSN) during the TCAP connection phase. The
TCAP API requests a connection to GDI using the SSN 256. This SSN is
reserved for GDI.
The Distant GDI Point Code (DGPC) maps a logical connection to a remote
host (client or server).
GDI Connectivity
This section lists some rules for GDI connectivity:
252
The GDI stack can run as a server or as a client. The server listens and accepts
client connection requests. If a connection between a GDI client and a GDI
server goes down, the GDI client tries to reconnect periodically until the
connection is reestablished. Once a connection has been established, either the
client or the server can initiate a transaction.
Transport Error Handling: if an error occurs at GDI level, the GDI layer (server
or client) closes the connection and refuses all outstanding requests for that
connection.
Chapter 6
2-host platform: a 2-host HP OpenCall SS7 platform has one active host and
one peer host. Only connection requests to the active host are accepted. The
peer host refuses client connections.
Dual signaling LAN: GDI uses the two LANs to do loadsharing. However, as
TCP/IP cannot ensure delivery order over more than one LAN a transaction is
always kept on the same LAN. If one of the two LANs goes down, traffic is
ensured on the other one. All open transactions are lost if a LAN switchover
occurs.
Notifications
GDI uses the SCCP_USER_STATUS primitive to indicate to the TCAP user
whether a connection to a remote GDI host is available or not.(Return values are
Out of Service and In Service). This differs from SCCP where it indicates
that a remote SCCP user is in service or out of service.
GDI uses the TC_NOTICE primitive to indicate GDI transport errors to the TCAP
user. The GDI transport error is returned in the report_cause field of the
TC_NOTICE primitive.
Chapter 6
253
incompatibleVersions:
The version number in the GDI message header does not match
the versions supported on the server
queue full:
The server cannot process the request at this time due to a full
input queue
resultsTooLong:
taskrefused:
timerExpired:
unauthorizedRequest:
The request was refused by the server system because of
security
systemNotResponding:
The server site is not responding
254
When a standby SS7 stack becomes active, the local TCAP user is notified by
the SCCP_USER_STATUS primitive, which indicates that the connection to
the remote GDI host is again available (In Service).
When an active SS7 stack becomes standby, the remote TCAP user receives an
SCCP_USER_STATUS primitive indicating that the connection to it is
unavailable (Out of Service), and a second SCCP_USER_STATUS primitive
indicating that the connection to the host with the active SS7 stack is available
(In Service). (DGPC1 is In Service, DGPC2 is Out Of Service seen from host
1). The TCAP application is responsible for managing both DGPCs.
Chapter 6
NOTE
All active transactions are lost on switchover. The TCAP user must reset its local
timer and state-machines.
After a switchover, the newly active SS7 stack can accept connection requests from
GDI client hosts. It is the responsibility of the GDI client to set the reconnection
attempt period to a meaningful value. In the worst case, the interruption of service
time is equal to the switchover time plus the reconnection attempt period.
Figure 6-17
Chapter 6
255
256
Chapter 6
Chapter 6
257
Half of all new transactions which start during this period are lost.
In the worst case, the maximum period of disturbed traffic is equal to:
1.5 x (Keep Alive Timeout) + 1 period = 2.5 x (Keep Alive Timeout)
After the period of disturbed traffic, the initial level of traffic returns on the
remaining LAN.
During the disturbed period, either the application must handle a TCAP transaction
timer, or you can set the TCAP setTimerPeriod timer to a value which suits the
traffic. To do this, use the cfgTcap command (for a description, see the man page).
This is to ensure that uncompleted TCAP transactions are aborted when the timer
pops and that further TCAP transactions can be started.
Choosing a GDI Timer Value
The default timer value is 40,000 ms, which causes a KeepAliveRequest to be sent
every minute. However, reducing the 40,000 ms value increases the frequency of the
KeepAliveRequests but also creates increased traffic on the LAN. Using the
information in the figure, a compromise must be made between the required
reactivity to a LAN failure and the level of Keep Alive traffic that is acceptable.
258
Chapter 6
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. The name of the executable are
TcapClient_32_xxx (where xxx=AAA, ABB, WBB, or WAA).
To run the program, the following values must be provided:
className:
Name of the SS7 stack
For example, to run TcapClient on the client using SSN 40, enter:
Chapter 6
259
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.
The name of the executable is TcapServer_32_xxx (where xxx=AAA, ABB,
WBB, or WAA).
To run this program, the following values must be provided:
className
Name of the SS7 stack
For example, to run TcapServer on the server using SSN 40, enter:
TcapServer_32_AAA SS7_Stack_35 35 36 40 40
260
Chapter 6
Chapter 6
261
262
Chapter 6
Chapter 7
263
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 the 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 Version
TC-BEGIN
ANSI Version
TC-QUERY-WITH-PERMISSION
Meaning
Message that begins a transaction.
TC-QUERY-WITHOUT-PERMISSION
TC-CONTINUE
TC-CONVERSATION-WITH-PERMISSION
TC-CONVERSATION-WITHOUT-PERMISSION
TC-UNI
TC-UNI
Message belonging to an
established transaction.
Uni-directional message (not
belonging to a transaction).
NOTE
264
Chapter 7
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).
Chapter 7
265
Chapter 7
NOTE
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.
The shared library may implement a separate dispatch algorithm for different SSNs
(for example, see Figure 7-3, Example of Dispatching Algorithms.).
Chapter 7
267
268
Chapter 7
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.
Chapter 7
269
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.
270
Chapter 7
Partitioning
Load Balancing
Round Robin
Uneven Distribution
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
271
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 librarys internal dispatching table.
TCAProuter_application_activate() updates the librarys internal
dispatching table to allow dispatching to that application.
TCAProuter_application_deactivate() updates the librarys 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 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.
272
Chapter 7
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 librarys internal
dispatching table to allow dispatching to this application instance.
TCAProuter_application_deactivate() updates the librarys internal
dispatching table to disallow dispatching to this application instance.
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.
Chapter 7
273
274
Chapter 7
Chapter 7
275
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
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:
276
SSN1
SSN2
SSN3
SSN4
Chapter 7
IMPORTANT
Chapter 7
SSN3 cannot use the stacks 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.
277
Call Context
Customer-supplied Function
Action at
Customer-supplied
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.
278
Chapter 7
Call Context
Customer-supplied Function
Action at
Customer-supplied
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 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.
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 action.
Chapter 7
279
Call Context
Customer-supplied Function
Action at
Customer-supplied
Library
Incoming traffic
message received by
TCAP
TCAProuter_incoming_message()
Stack Shutdown
TCAProuter_shutdown()
Data cleanup
280
Chapter 7
where:
Chapter 7
traceLevel
string
String to be displayed
281
1 [SS7_Stack_TDx_n]
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
282
Chapter 7
Chapter 7
The dispatching library functions must be coded in C or C++ (using the ISO
C-89 or ISO C++-89 language versions).
283
284
Except for handling shared memory (see Designing for Shared Memory on
page 285), the customer-supplied library should make no system calls.
Chapter 7
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 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 applications responsibility to update the shared memory.
Chapter 7
285
Any application connected to the stack can modify the SSN state.
286
Chapter 7
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 */
Chapter 7
287
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.
288
Chapter 7
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()
TCAPRouter_trace()
For information about each of the functions listed above, see the TCAProuter()
man page.
Chapter 7
289
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 tutorial directory /opt/OC/tutorials.
It contains:
TCAProuter.c
TCAProuter.h
C++
A C++ shared library performing round robin application dispatching is available in
the tutorial directory /opt/OC/tutorials.
It contains:
TCAProuter.cpp
TCAProuter.hpp
This shared library can be compiled with the cc_TCAProuter command using the
C++ option:
cc_TCAProuter -C++
290
Chapter 7
PIC/AG - Introduction
This chapter introduces the HP OpenCall PIC/AG facility.
Chapter 8
291
PIC/AG - Introduction
Some Basic Terms
292
API
client
Execution API
FSM
FTC
g++
HA API
IPC
NOP
OC
PCA
PIC/AG
Chapter 8
PIC/AG - Introduction
Some Basic Terms
PIC
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 HPs FTC (Fault Tolerant Controller) and to
communicate with other user plug-ins using the PCA.
PIC Process
Registry API
server
Session
TimerLib API
user plug-in
Chapter 8
293
PIC/AG - Introduction
Purposes of the HP OpenCall PIC Framework
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.
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.
294
Chapter 8
PIC/AG - Introduction
Purposes of the HP OpenCall PIC Framework
Chapter 8
An application implementing a new protocol stack (that is, a stack not provided
in the HP OpenCall).
295
PIC/AG - Introduction
Components of the PIC Framework
The TimerLib API and the FTC are other components of HP OpenCall.
296
Chapter 8
PIC/AG - Introduction
Components of the PIC Framework
The TimerLib API enables the plug-in to set/cancel timers (and call a callback
method on timer expiry).
The External API and External Application (if the user plug-in needs to
interface with an external application).
Chapter 8
297
PIC/AG - Introduction
Summary of PIC Framework Features
298
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 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
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:
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 320).
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.
This list is not exhaustive. It emphasizes that caution is required when developing a
user plug-in (shared library).
Chapter 8
299
PIC/AG - Introduction
User Plug-in Development
where:
-shared
-pthread
--allow-shlib-undefined
If you intend to use the TCAP API within the user plug-in, you must use
-lSS7utilWBB for the ITU/TCAP flavor and -lSS7utilAAA for the
ANSI/TCAP flavor after -L/opt/OC/lib in the above command.
Development Environment
The user plug-in development environment allows the developer to build user
plug-in libraries and debug the user plug-in software.
300
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
Data Messages.
Error Messages.
Multiple Servers
A user plug-in can define several PCA_Servers. This is illustrated in Figure 8-4,
Multiple PCA_Servers.
Chapter 8
301
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).
302
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
creators 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
inform the user plug-in when the other side has created a new session.
303
PIC/AG - Introduction
Exchanging Messages
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:
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.
Flow Control
Flow Control is performed at two levels: session level and message level.
304
Chapter 8
PIC/AG - Introduction
Exchanging Messages
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
305
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.
Scheduling
The Plug-in scheduling model is outlined in Figure 8-6, Plug-in Scheduling.
306
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
307
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.
308
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:
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 Linux, you can monitor and administer the HA status of HP OpenCall processes
using the ocftcontrol and ocftstatus commands.
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
FTC_ACTIVE
Chapter 8
Definition
A process in this state is actively handling a functionality of the
platform.
309
PIC/AG - Introduction
HA API
Table 8-1
Definition
FTC_HOT_STANDBY
FTC_SWITCHING
FTC_STOPPING
FTC_SYNCHRONIZING
FTC_COLD_STANDBY
FTC_BOOTING
FTC_DOWN
310
Chapter 8
PIC/AG - Introduction
HA API
Figure 8-7
Chapter 8
311
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.
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.
312
Chapter 8
PIC/AG - Introduction
HA API
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
313
PIC/AG - Introduction
HA API
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
Step
Step
3. Close all its sessions (so it needs to keep a list of its sessions).
Step
Step
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.
314
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
315
PIC/AG - Introduction
PCA (Plug-in Communication API)
316
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_Message: This is the class for messages exchanged between PCA users.
Chapter 8
317
PIC/AG - Introduction
PCA (Plug-in Communication API)
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:
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.
318
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>
The timer is set by the plug-in, but it pops in the PIC context.
Chapter 8
319
PIC/AG - Introduction
TimerLib API
The number of these timers is limited. The limit applies to the total number of timers
(the PICs own timers + the user plug-in timers). For the limit, see the
HP OpenCall SS7 Release Notes.
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 321 shows the functions available in the TimerLib API in the case
where the PIC pool of timers is used.
Table 8-2
Purpose
TIMER_cancel_timer()
TIMER_handler()
TIMER_select_time()
TIMER_set_timer()
Set a timer.
TIMER_set_timer_t()
Set a timer.
TIMER_ts_add()
TIMER_ts_equals()
TIMER_ts_lessthan()
TIMER_ts_now()
TIMER_ts_sub()
320
Chapter 8
PIC/AG - Introduction
TimerLib API
The number of these timers has no explicit limit except the one given by the user
when initializing the pool of timers (that is, when calling the
OCTIME_init_module(3) function in the plug-in constructor code).
The timer is set by the plug-in and it pops in the plug-in context, when the plug-in
calls the OCTIME_handler(3) function.
Armed timers are guaranteed to pop:
1. in the thread where they were armed.
2. when the OCTIME_handler(3) function is called.
When using plug-in pools of timers, the plug-in code is in charge of the maintenance
of the pool. See Table 8-3 on page 323 for the details.
Table 8-3 on page 323 shows the functions available in the TimerLib API in the case
where a user plug-in pool of timers is used.
Table 8-3
OCTIME_cancel_timer()
Chapter 8
Purpose
Cancel a timer that is currently running.
321
PIC/AG - Introduction
TimerLib API
Table 8-3
Purpose
OCTIME_destroy_module()
OCTIME_handler()
OCTIME_init_module()
OCTIME_select_time()
OCTIME_set_timer()
Set a timer.
OCTIME_set_timer_t()
Set a timer.
OCTIME_ts_add()
OCTIME_ts_equals()
OCTIME_ts_lessthan()
OCTIME_ts_now()
OCTIME_ts_sub()
322
Chapter 8
PIC/AG - Introduction
Changing the User Plug-in
Chapter 8
Step
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
Step
323
PIC/AG - Introduction
Starting/Stopping the User Plug-in
324
Chapter 8
PIC/AG - Introduction
Product Environment
Product Environment
Hardware Requirements
The HP OpenCall Plug-in runs on HP-UX (versions 11.0 and 11i) and Linux.
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
325
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.
326
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:
Chapter 8
327
PIC/AG - Introduction
Exception Handling
Exception Handling
On Linux, the g++ compiler is used.
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:
328
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.
Chapter 8
329
PIC/AG - Introduction
Plug-in Tutorial
330
Chapter 8
Chapter 9
331
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.
332
Chapter 9
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
333
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 371) for scheduling and HA driving purposes.
For scheduling, see Plug-in Scheduling on page 377.
For HA, see Plug-in HA Management on page 381.
Object Model
The PCA has an object-oriented architecture. The object model of the PCA is shown
in Figure 9-2.
334
Chapter 9
Chapter 9
335
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.
The following classes are base classes that can be customized (but this
customization is optional) by the user plug-in developer:
336
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
Chapter 9
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.
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.
Chapter 9
337
338
Chapter 9
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 341 and Session Management on
page 347.
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
339
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 364.
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 341.
NOTE
After a correct open operation on the Server, you must enable it before sending
traffic (that is, before session creation).
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.
340
Chapter 9
PCA_Server::setCnxLowTransmitTime()
PCA_Server::setCnxHighTransmitTime()
PCA_Server::setCnxEnableBuffering()
PCA_Server::setCnxRecvBufferSize()
PCA_Server::setCnxSendBufferSize()
Chapter 9
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.
341
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.
342
Chapter 9
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 341 and Session Management on
page 347.
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
343
Client Opening
Once initialized, the PCA client must be opened, that is, it must try to connect to its
target server.
344
Chapter 9
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.
Chapter 9
PCA_Client::setCnxLowTransmitTime()
PCA_Client::setCnxHighTransmitTime()
PCA_Client::setCnxEnableBuffering()
PCA_Client::setCnxRecvBufferSize()
345
PCA_Client::setCnxSendBufferSize()
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.
346
Chapter 9
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.
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.
Chapter 9
347
Session States
A session can be in one of the following 4 possible states:
ACTIVE
BROKEN
REJECTED
ZOMBIE
the state of the connection between the user plug-in server and a client (over
which the session is used to send messages),
The state mechanism for a session is shown in Figure 9-3, State Machine for a
Session.
348
Chapter 9
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.
Chapter 9
349
350
Chapter 9
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:
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 355 and Client Session Flow Control
on page 356.
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 356.
Chapter 9
351
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 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.
352
Chapter 9
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
Chapter 9
353
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.
354
When many clients are eligible, the PCA selects one of them using a round
robin model.
Chapter 9
Chapter 9
355
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.
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 343.
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 357).
When a session is rejected, an ERROR message is delivered to the sender with the
rejection cause (see Messages on page 359) 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.
356
Chapter 9
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 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.
Chapter 9
357
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.
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 356). 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 369. The meaning
of errorCode and errorText can be found in Meaning of errorCode and
errorText Fields on page 361.
358
Chapter 9
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 352).
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 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.
Chapter 9
359
NOTE
Table 9-1
errorCode
PCA_FAILURE
errorText
Default
Text
Value
Session closed at
peer
PCA_FAILURE
memory
overflow
PCA_FAILURE
A session is
closed at local
side, but is still
open at peer side
PCA_NOT_ACTIVE
Peer is disabled
Result of:
PCA_sessionFactory->getLastErro
rText()
If you customize this method, the associated
string is under your control. A default
implementation is available.
PCA_ABORTED
PCA_ABORTED
360
Chapter 9
NOTE
Chapter 9
361
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 359 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 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.
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.
362
Chapter 9
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.
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
363
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 339 and Client Initialization on page 343). 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.
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.
364
Chapter 9
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
365
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 339, or Client Initialization on page 343). 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.
Deletion destroys a messages relation with its session (reference counting), while
the PCA_Message::reset() method keeps this relation active. To re-define a
messages session, you use the PCA_Message::putHeader() method.
366
Chapter 9
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
367
368
Chapter 9
Chapter 9
369
370
Chapter 9
10
Chapter 10
371
372
Chapter 10
Chapter 10
373
374
Chapter 10
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.
Errors During Object Creation
If piSetup() function returns an error code (that is, user dependent), the PIC just
stops.
Chapter 10
375
376
Chapter 10
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.
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.
Chapter 10
377
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:
EMPTY
378
PROCESSING
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
379
380
Chapter 10
Plug-in HA Management
Features
HA management for the user plug-in consists of three features:
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.
Chapter 10
381
SYNC
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 377.
Below is an example showing the sequence of HA function calls that drive the user
plug-in HA FSM state at startup:
382
Step
Step
Step
Step
Step
Step
Step
Step
Step
Chapter 10
Chapter 10
383
384
Chapter 10
11
Chapter 11
385
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.
386
Chapter 11
User application
OA & M
APIs
TCAP
API
MTP3/
M3UA
API
- Configuration
AG API
ISUP
& TUP
APIs
SCCP
API
- Monitoring
TCAP
- Control
SCCP
MTP level 3
M3UA
MTP level 2
SCTP
MTP level 1
IP
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.
Chapter 11
387
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.
388
Chapter 11
NOTE
Chapter 11
389
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.
Activity on the connection is flagged when one of the following events occurs:
390
Chapter 11
For details about syntax, parameters, and return values, see the
SS7_ifcnxhandler() man page.
Examples
Example 11-1
#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);
nfound =select(numFd,
&readMask,
&writeMask,
&exceptionMask,
time);
Chapter 11
391
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++;
}
392
Chapter 11
Chapter 11
393
394
Chapter 11
Static Entities
Chapter 11
395
Entity
Meaning
mtp
local_alias
virtual_pc
Represents the virtual point codes associated with the local point code.
destination
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
cluster_route
linkset
Represents a linkset.
links
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.
396
Chapter 11
The LPC value of the MTPL3 entity must be set before using any MTP
commands.
Chapter 11
The Local Alias entity can not be activated or deactivated. It can only be
configured or removed.
397
Object Type
address[0]
address[1]
address[2]
Command
Parameters
mtp
LPC
local_alias
LPC
virtual_pc
LPC
destination
LPC
(DPC)
route
LPC
(DPC)
linkset
LPC
links
LPC
398
Primary/Secondary
Link number
(SLC)
Chapter 11
Entity
State
Meaning
mtp
normal
In service state.
inactive
Awaiting activation.
out_of_service
No active linksets.
restarting
normal
inactive
Awaiting activation.
out_of_service
No active links.
congested
normal
inactive
Awaiting activation.
out_of_service
congested
inhibited
inhibited_OS
inhibited_inactive
normal
inactive
Awaiting activation.
congested
out_of_service
restricted
linkset
links
destination
Chapter 11
399
Entity
State
Meaning
route
normal
inactive
Awaiting activation.
out_of_service
congested
restricted
a. Transfer Prohibited
b. Transfer Controlled
400
Chapter 11
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
Chapter 11
The value of -1 is returned to indicate that the command failed. The ss7errno
parameter is set to indicate the error.
401
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
Statistic
object_state
traffic_gauge
traffic_count
402
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
Chapter 11
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
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
403
Command failed
404
The value of -1 is returned to indicate that the command failed. The ss7errno
parameter is set to indicate the error.
Chapter 11
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.
Chapter 11
405
Command failed
406
The value of -1 is returned to indicate that the command failed. The ss7errno
parameter is set to indicate the error.
Chapter 11
Static Entity
Chapter 11
407
Entity
Entity Name
Description
SCCP
SO_SCCP
Local User
SO_LOCAL_USER
Virtual User
SO_VIRTUAL_USER
Remote User
SO_REMOTE_USER
Remote SP
SO_REMOTE_SP
GT Translator
table
SO_GT_TRANSLATOR
SO_FAILED_DEST
Failed
Destination
408
The LPC value of the MTPL3 entity must be set before starting to create any
SCCP entities.
Chapter 11
An entity can only be removed if all of its child entities have already been
removed.
Entity
address[0]
address[1]
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
Translator Id
digit_pr_ssn priority
Translator Id
Field
Octet
Value
Nature of Address
Indicator
1 (LSB)
SC_unusedIndicator
SC_subscriberNo
SC_reserved_national_use
SC_nationalNo
SC_internationalNo
SC_unused
(NAI)
Translation Type
(TT)
Chapter 11
409
Translator Id (Continued)
Field
Octet
Value
Numbering Plan
3 (MSB)
SC_unknownNumbering
SC_isdn
SC_userdata
SC_telex
SC_maritimeMobile
SC_landMobile
SC_isdnMobile
NULL
(NP)
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
SO_LOCAL_USER
SO_VIRTUAL_USER
SO_REMOTE_USER
410
SO_INSERVICE
In service state.
SO_OUTOFSERVICE
SO_INSERVICE
In service state.
SO_OUTOFSERVICE
SO_AVAILABLE
SO_UNAVAILABLE
Chapter 11
Entity
State
Meaning
SO_REMOTE_SP
SO_INSERVICE
Remote SP is accessible.
SO_OUTOFSERVICE
SO_GT_TRANSLATOR
Not applicable
SO_FAILED_DEST
Not applicable
411
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
412
The value of -1 is returned to indicate that the command failed. The ss7errno
parameter is set to indicate the error.
Chapter 11
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
Statistic
SO_ SCCP
SO_LOCAL
_USER
SO_VIRTU
AL_USER
SO_REMOT
E_SP
SO_REMOT
E_USER
SO_GT_
TRANSLAT
OR
SO_FAILE
D_DEST
immediate
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
periodic
SO_UDT_COUNT
_TX
immediate
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
periodic
SO_UDT_COUNT
_RX
immediate
immediate
immediate
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
periodic
periodic
periodic
SO_UDT_GAUGE
_TX
periodic
periodic
periodic
periodic
periodic
SO_STATE
Chapter 11
413
Statistic
SO_ SCCP
SO_LOCAL
_USER
SO_VIRTU
AL_USER
SO_REMOT
E_SP
SO_REMOT
E_USER
SO_GT_
TRANSLAT
OR
SO_FAILE
D_DEST
SO_UDT_GAUGE
_RX
periodic
periodic
periodic
periodic
periodic
periodic
periodic
SO_UDTS_COUN
T_TX
immediate
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
periodic
SO_UDTS_COUN
T_RX
immediate
immediate
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
periodic
SO_UDTS_GAUG
E_TX
periodic
periodic
periodic
periodic
periodic
SO_UDTS_GAUG
E_RX
periodic
periodic
periodic
periodic
periodic
periodic
SO_RTG_FAILU
RE_ COUNT
immediate
immediate
immediate
immediate
immediate
immediate
periodic
periodic
periodic
periodic
periodic
periodic
SO_RTG_FAILU
RE_ GAUGE
SO_TRANS_REQ
_ GAUGE
NOTE
414
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.
Chapter 11
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.
415
416
Chapter 11
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.
417
418
Chapter 11
Chapter 11
419
For details about syntax, parameters, and return values, see the TCX_open() man
page.
Example 11-2
420
Chapter 11
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:
Chapter 11
421
For details about syntax, parameters, and return values, see the
TCX_cnx_handler() man page.
Example 11-3
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 fds open, the initial max fd
/* is 0. Also, we dont use the exception 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*/
}
422
Chapter 11
Command
Meaning
STAT_ACTIVE_TRANSACTIONS
STAT_TRANSACTIONS_KILLED_
BY_TIMER
STAT_USER_LOAD
STAT_NODE_MSG_SENT
STAT_NODE_MSG_RECV
STAT_ABORT_RECEIVED
STAT_ABORT_SENT
STAT_REJECT_RECV
STAT_REJECT_SENT
STAT_U_REJECT_RECEIVED
Chapter 11
423
Command
Meaning
STAT_U_REJECT_SENT
STAT_COMPONENT_RECV
STAT_COMPONENT_SENT
RESET_STATS
Reset counters.
stat_end
Example 11-4
424
Chapter 11
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;
Chapter 11
425
426
Chapter 11
Chapter 11
427
428
Chapter 11
12
Chapter 12
429
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 applications 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.
Example programs illustrating simple call setup and release are listed in ISUP
Tutorial Programs on page 480.
For all function signatures and object structures, refer to the man pages.
430
Chapter 12
ANSI
ITU-T
the ANSI protocols support the ANSI-92 and ANSI-95 message sets
the ITU97 protocol supports the ITU-T93 and ITU-T97 message sets
Chapter 12
431
Generic Components
These components are independent of the software version. They include
432
Chapter 12
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.
Version-Specific Components
These components affect the behavior of API objects. They include:
This component provides the ISUP behavior defined by the ANSI or ITU-T
standards
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
This component manages the state of the circuits manipulated by the state-machines.
Chapter 12
433
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
Exception handling is not used by the HP OpenCall SS7 APIs. 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. However,
HP OpenCall SS7 APIs can carry user exceptions on Linux. Exceptions are enabled
by default with g++. Use the -fexceptions compilation flag with g++ or gcc to
force support of exceptions in the application code.
434
Chapter 12
The following is an example of a compile/link using the shared library (for ISUP
ANSI):
g++ -fexceptions -pthread -I/opt/OC/include -I/opt/OC/include/ISUP
-o isupClientSMANSI isupClientSMANSI.C -lisupANSIapi -lSS7utilAAA
Chapter 12
435
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
436
Connection/Probe Relationship
Chapter 12
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
437
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.
438
Chapter 12
Several Primary ISUP Application Instances Connected to an SS7 Stack via the
TDi
Chapter 12
439
AIG Configuration
The association between a CIC and an application id is defined in the applications
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 be assigned simultaneously to
several applications.
To do this, use the cfgIsup command (for a description, see the man page). See
also the HP OpenCall SS7 Operations Guide.
NOTE
440
Chapter 12
NOTE
Routing is based on the OPC of the incoming message. From the ISUP applications
point of view, this OPC corresponds to a DPC.
Chapter 12
441
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.
442
Chapter 12
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.
Chapter 12
443
Dynamic Configuration
The configuration of ISUP applications can be changed dynamically regardless of
the distribution mode.
To change the configuration of a connected application, you have to use the
cfgIsup command (for a description, see the man page). See also the
HP OpenCall SS7 Operations Guide.
Next, run the ss7isupReload command to commit the changes in the ISUP
library and TDi routing table.
NOTE
Online Upgrade
Online upgrade is supported (but with current shared library limitations).
444
Chapter 12
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:
Chapter 12
IsupMgr
IsupProbe
IsupSMProbe/IsupBPProbe
445
Figure 12-4
Object Model1
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.
1. This diagram was developed using the object model notation described in
Object-Oriented Development: The Fusion Method
Prentice-Hall International, Englewood Cliffs, New Jersey, 1994
446
Chapter 12
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.
Chapter 12
447
448
initialize_IsupMgr_object
if (initialize_IsupMgr_object != Ok) then
error handling
fi
create_Probe_object()
open_Probe_object()
schedule_Probe_object()
Chapter 12
Chapter 12
449
a single connection
(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.)
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.
450
Chapter 12
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:
Chapter 12
451
452
Switching
Chapter 12
Chapter 12
453
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
Example 12-2
ISUP::OpenStatus
openStatus;
ISUP::CreateStatus
createStatus;
IsupSMProbe*
isupSMProbe;
IsupSMProbe::ActivityObject* const activityObj =new ActivityObject();
char* className = new char [16];
// 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;
454
Chapter 12
close_Probe_object()
destroy_probe_object
delete_activity_object
error recovery
Example 12-3
ISUP::OpenStatus
ISUP::CreateStatus
IsupSMProbe*
IsupAdditional::Info*
IsupAdditional::NotifOpenCnx*
HPAIN::Uint32
IsupSMProbe::ActivityObject*
char*
//
//
//
//
//
//
openStatus;
createStatus;
isupSMProbe;
indication;
notifOpenCnx = NULL;
nbIndication;
const activityObj = new ActivityObject();
className = new char [16];
createStatus = isupMgr->createSMProbe(className,activityObj,isupSMProbe);
if (!createStatus.isOk()) {
cout << "IsupSMProbe creation failed \n" << flush;
cout << "Error=" createStatus "\n" << flush;
// destroy probe
// error recovery
}
Chapter 12
455
// open_Probe_object()
// if (open_Probe_object()!= Ok) then
//
close_Probe_object()
//
destroy_Probe
//
error handling
// 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
error recovery
456
Chapter 12
close_Probe_object()
destroy_probe_object
delete_activity_object
error recovery
Chapter 12
457
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 OS
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.
458
Chapter 12
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
459
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
IIsupMgr::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 OS
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.
460
Chapter 12
Chapter 12
any change of the MTP connection status through the cnxStatus() method.
461
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;
462
Chapter 12
NOTE
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.
Example 12-4
Chapter 12
463
464
Chapter 12
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
465
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.
Example 12-6
ISUP::CloseStatus
ISUP::DestroyStatus
IsupSMProbe *
MyActivityObject *
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
}
466
Chapter 12
Chapter 12
467
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
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.
468
Chapter 12
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.
IsupAdditional::
NotifCics
Notifies that a
range of circuits
has been added
or modified.
Chapter 12
469
oamReceive()
IsupAdditional::Info
ISUP::OamStatus
HPAIN::Schedulable::Work
int
int
fd_set
fd_set
timeval
timeval
timeval
struct timezone
int
int
HPAIN::Uint32
char
maxFd;
numFd;
readMask;
writeMask;
time;
* timeout;
delay0, delay1;
delayzone;
timediff=0;
L_TimeMax = TIME_MAX;
L_nbIndication; // nb of messages to be read
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);
470
Chapter 12
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
HPAIN::Schedulable::Work
int
int
fd_set
Chapter 12
471
writeMask;
time;
* timeout;
delay0, delay1;
delayzone;
timediff=0;
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
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
472
Chapter 12
Table 12-3
Status Class
InitStatus
CnxStatus
Chapter 12
Value
Reason
NO_ERROR
ALREADY_CREATED
NO_MORE_MEMORY
NO_ISUP_CONFIG
BAD_ISUP_CONFIG
INTERNAL_ERROR
NO_ERROR
CNX_CLOSED
API_BUSY
Switchover in progress.
INTERNAL_ERROR
473
Status Class
CreateStatus
DestroyStat
us
474
Value
Reason
NO_ERROR
Probe/connection created.
NO_MORE_MEMORY
MAX_PROBE_NUMBER_
EXCEEDED
ALREADY_CREATED
LPC_NOT_FOUND
INVALID_CLASSNAME
INVALID_SET_NAME
WRONG_PROBE_TYPE
INTERNAL_ERROR
NO_ERROR
Probe/connection destroyed.
ALREADY_DESTROYED
Chapter 12
Status Class
OpenStatus
CloseStatus
Value
Reason
NO_ERROR
Probe/connection open.
NO_CONFIG
BAD_GLOBAL_CONFIG
CONNECT_INIT
API_BUSY
ALREADY_OPEN
INTERNAL_ERROR
BAD_CNX_TYPE
NO_ERROR
Probe/connection closed.
PROBE_NOT_OPEN
ALREADY_CLOSED
IPC_SEND_FULL
CLOSE_FAILED
INTERNAL_ERROR
For information on return values related to creating and exchanging messages, refer
to the IsupMgr(3) man page.
Chapter 12
475
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 using the cfgIsup
command (for a description, see the man page), then you can perform a reload to the
ISUP library. You can perform this reload using IsupMgr::reload().
The reload procedure:
1. Reads the new configuration generated by the cfgIsup command (for a
description, see the man page) in the file:
/var/opt/OC/ISUP/isup.app<applicationId>.changes
2. Makes all the changes.
3. Dumps the new configuration in a temporary file:
/var/opt/OC/ISUP/isup.app<applicationId>.conf.dump.
You can also reload using the ss7IsupReload command delivered (see the
DynamicConfiguration man page). Using this command is the recommended
procedure, except in CIC-based distribution mode. You can only perform one
reload/dump operation at a time.
NOTE
476
Chapter 12
NOTE
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 the cfgIsup command (for a description, see the man page).
Otherwise, the ISUP application does not reload the new configuration (it never
receives the SIGUSR1 signal from the ss7IsupReload command).
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
Chapter 12
477
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.
478
Caller
isupClientSMANSI or isupClientSMITU
Callee
isupServerSMANSI or isupServerSMITU
Chapter 12
Chapter 12
Caller
isupClientBPANSI or isupClientBPITU
Callee
isupServerBPANSI or isupServerBPITU
479
ISUP Makefiles
The following makefiles are provided with HP OpenCall SS7 ISUP:
CAUTION
480
/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.
Chapter 12
Chapter 12
481
482
Chapter 12
13
Chapter 13
483
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.
484
Chapter 13
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
485
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:
Chapter 16, ISUP Call Control - Procedures Common to ANSI and ITU-T,
486
Chapter 13
Chapter 13
487
Table 13-1 lists the ISUP primitives for ANSI in State Machine Mode.
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
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
488
Comments
Chapter 13
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
489
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
490
Comments
This primitive is used to
ask the application to
enable its echo suppressor
(Continuity-check
procedures).
Chapter 13
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
ISUP_USR_MSG_IND
None
None
MAINTENANCE_SYSTEM_IND
None
Maintenance
System
PASS_ALONG_REQ
PAM
None
PASS_ALONG_IND
PAM
None
RELEASE_REQ
REL
None
RELEASE_IND
REL
None
RELEASE_RESP
RLC
None
RELEASE_CONF
RLC
None
Chapter 13
491
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
492
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).
Chapter 13
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
493
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
-Resume
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
-Resume
TONE_DISAPPEARS_ACK
None
None
UNBLOCKING_REQ
UBL
None
UNBLOCKING_RESP
UBL
None
UNBLOCKING_IND
UBA
None
UNBLOCKING_CONF
UBA
None
494
Chapter 13
ISUP
Message
UCIC
Additional Info
Comments
None
ISUP SM Mode
Table 13-2 lists the ISUP primitives for ITU based flavors in State Machine Mode.
Primitives for ITU-T
For each primitive, Table 13-2 also indicates whether or not a message or an
Flavors
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
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
Chapter 13
Comments
495
ISUP
Message
Additional Info
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
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
496
Comments
Chapter 13
ISUP
Message
Additional Info
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
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
Chapter 13
Comments
This primitive is used to
ask the application to
connect its transceiver
(Continuity-check
procedures).
This is not supported in
TTC.
497
ISUP
Message
Additional Info
FACILITY_REQ
FAC
None
FACILITY_IND
FAC
None
FACILITY_REQUEST_REQ
FAR
None
FACILITY_REQUEST_IND
FAR
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_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
498
Comments
This is not supported in
ITU-88, and TTC.
This is not supported in
TTC.
Chapter 13
ISUP
Message
Additional Info
GROUP_UNBLOCKING_REQ
CGU
None
GROUP_UNBLOCKING_IND
CGU
None
GROUP_UNBLOCKING_RESP
None
None
GROUP_UNBLOCKING_CONF
CGUA
None
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
USERDEF
None
ISUP_USR_MSG_IND
None
None
MAINTENANCE_SYSTEM_IND
None
Maintenance
System
Chapter 13
Comments
499
ISUP
Message
Additional Info
NETWORK_RESOURCE_MGT_REQ
NRM
None
NETWORK_RESOURCE_MGT_IND
NRM
None
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
500
Comments
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.
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.
Chapter 13
ISUP
Message
Additional Info
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
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
Chapter 13
Comments
This primitive is used to
ask the application to
remove its transceiver
(Continuity-check
procedures).
501
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
None
None
STOP_CHECK_TONE_IND
None
None
STOP_CHECK_TONE_IND_ACK
None
None
502
Comments
This is not supported in
TTC.
Chapter 13
ISUP
Message
Additional Info
STOP_REQ
None
None
STOP_CONF
None
None
SUSPEND_IND
SUS
SUSPEND_REQ
SUS
Suspend
-Resume
Comments
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
-Resume
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
UNKNOWN_MESSAGE_REQ
Message
with
unknown
ISUP type.
None
UNKNOWN_MESSAGE_IND
Chapter 13
503
Bypass Mode
ISUP BP Primitives
Table 13-3
Event
INVALID_ISUP_MSG_IND
ISUP_MSG_REQ
ISUP_MSG_IND
PASS_ALONG_REQ
PASS_ALONG_IND
(not available for TTC)
UNKNOWN_MSG_REQ
UNKNOWN_MSG_IND
UNKNOWN_OPC_MSG_IND
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
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
504
Chapter 13
Field
Used for:
SETUP_REQ
Setup
acmControlFlag
SETUP_IND_ACK
Setup
N/A
SETUP_FAILURE_IND
SetupFailure
setupFailureCause
SUSPEND_IND
SUSPEND_REQ
SuspendResume
origin
START_RELEASE_IND
StartRelease
releaseCause
Chapter 13
505
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
506
Chapter 13
Primitives
Additional
Information
MAINTENANCE_SYSTEM_I
ND
MaintenanceSy
stem
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
507
508
Event
MTP_PAUSE_IND
MTP_RESUME_IND
MTP_DPC_CONGESTED_IND
MTP_DPC_UNCONGESTED_IND
MTP_AVAILABLE_IND
MTP_UNAVAILABLE_IND
MTP_CONGESTED_IND
MTP_UNCONGESTED_IND
MTP_RESTARTING_IND
MTP_UPU_UNAVAILABLE_IND
Chapter 13
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
509
Figure 13-2
Chapter 13
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.
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.
Chapter 13
511
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.
512
Chapter 13
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.
Chapter 13
513
// 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
514
Chapter 13
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);
Chapter 13
515
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
ANSI Messages
CFN, COT, LPA, UCIC
ITU Messages
CFN, COT, LPA, UCIC
CMC, CMR, CMRJ, CRG,
DRS, EXM, OLM, USR,
LOP, UPT, UPA
CQR
CQR
CRM, FOT
FOT, SGM
516
Chapter 13
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:
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.
Table 13-8
Type
ISUP::ParmValue
Chapter 13
Specific Accessors
Accessor
accessorNamea(read accessor)
Arguments
(ISUP::MsgStatus& status) const;
517
Type
Accessor
Arguments
IsupXXXb*
accessorNamea
(write accessor)
(ISUP::ParmValue& val,
ISUP::MsgStatus& status);
void
<parameterShortName>SetAbsent
(absence accessor)
(ISUP::MsgStatus& P_status);
HPAIN::Boolean
accessorNameaIsPresent
(presence accessor)
IsupMsg::getPDU()
IsupMsg::setPDU()
These two methods are in the public area of the IsupMsg class.
IsupMsg::getPDU()
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:
518
Chapter 13
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,
Chapter 13
519
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 classISUP::ParmValue for
encapsulating parameter values. This object class provides methods for assigning
values of differing lengths (32, 16 and 8 bits).
Table 13-9
Type
Method
Arguments
ParmValue&
assign
ParmValue&
assign
ParmValue&
assign
(HPAIN::Uint32 i);
ParmValue&
assign
(HPAIN::Uint16 i);
ParmValue&
assign
(HPAIN::Byte b);
Example 13-3
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);
if (!status.isOk()){
// error recovery
520
Chapter 13
Chapter 13
521
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.
522
Chapter 13
Figure 13-4
Chapter 13
Probe/Message Relationship1
523
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.
Unsent messages are stored in the queue until they can be sent to the network.
Messages that cannot be sent to the MTP3 Level3 due to communication channel
congestion are kept in the outbound queue. If the capacity of the outbound queue
overflows, unsent messages are discarded without notifying the application.
This is part of the flow control mechanism performed by HP OpenCall SS7 ISUP,
and is described in IPC Flow Control on page 543.
Example 13-4
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
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 462.
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 IsupXXXa
castMsg
IsupMsg::Type
getMsgType
();
Chapter 13
525
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.
See IPC Flow Control on page 543.
526
Chapter 13
Chapter 13
527
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.
528
Chapter 13
Chapter 13
529
530
Chapter 13
531
532
Chapter 13
Chapter 13
533
534
Chapter 13
14
Chapter 14
535
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.
536
Chapter 14
Chapter 14
537
538
Chapter 14
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 519, 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 505).
These objects are automatically created by the API.
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().
Chapter 14
539
540
Chapter 14
Internal Buffers
NOTE
Chapter 14
541
setIPCSendSize
setIPCRecvSize
setLowTransitTime
setHighTransitTime
setBufferingMode
setNonBufferingMode
flush
flushConditional
542
Chapter 14
Chapter 14
543
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 527. 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.
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.
544
Chapter 14
START_RELEASE_IND_ACK
RELEASE_RESP
START_RESET_IND_ACK
RESET_RESP
STOP_REQ
Chapter 14
545
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
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.
546
Chapter 14
Chapter 14
547
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:
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.
548
Chapter 14
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
549
Synchronization
550
Chapter 14
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
551
552
Recovery
Chapter 14
Chapter 14
553
554
Chapter 14
15
Chapter 15
555
FSM Support
Implemented
Particularities/Limitations
Yes
MSDC
Yes
CPCI
Yes
CPCO
Yes
SSCI
Yes
SSCO
Yes
Yes
BLR
Yes
CCI
Yes
CCO
Yes
CGRR
Yes
CGRS
Yes
CQR
Yes
CQS
Yes
556
Chapter 15
Particularities/Limitations
CRI
Yes
CRO
Yes
CRR
Yes
CRS
Yes
CVTR
Yes
ANSI only
CVTS
Yes
ANSI only
DCO
Yes
ANSI only
GNR
Yes
GBNR
Yes
GBUR
Yes
GBUS
Yes
HGA
No
ANSI only
SCGA
No
ANSI only
UCIC
Yes
NOTE
Chapter 15
557
Interaction Scenarios
Interaction scenarios are representative of the external behavior of
HP OpenCall SS7 ISUP as perceived by its environment.
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.
558
Chapter 15
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 510 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
Chapter 15
Initial
Probe_created
Probe_opened_and_active
559
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_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:
560
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 (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).
Chapter 15
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
GROUP_UNBLOCKING_REQ
GROUP_UNBLOCKING_RESP
Primitives that stop REL/RSC retransmission on circuits:
STOP_REQ
Chapter 15
561
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:
562
Transfer indications received in the MTP_3 not opened state are ignored.
Chapter 15
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_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:
Chapter 15
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.
563
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
Primitives that block/unblock circuit groups:
GROUP_BLOCKING_REQ
GROUP_BLOCKING_RESP
564
Chapter 15
Chapter 15
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.
565
566
Chapter 15
Chapter 15
567
NOTE
Routing is based on the OPC of the incoming message. From the stacks point of
view, this OPC corresponds to a DPC.
3. Ignores the message if it is empty or less than 3 bytes long (cannot access CIC
or Message Type).
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)
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
568
Chapter 15
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
569
GRS/GRA
CGB/CGBA
CGU/CGUA
CQM/CQR
570
Chapter 15
Table 15-2
ISUP
Message
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
CGB
group=predetermined
no status subfield
range<24
group=[CIC,CIC+range] for which status bit = 1
CGBA
no status subfield
CGU
group=predetermined
no status subfield
range<24
group=[CIC,CIC+range] for which status bit = 1
CGUA
no status subfield
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
571
Table 15-3
ISUP
Message
rangeAndStatus Parameter
range = 0
range !=0
GRS
-Reserved-
range<32
group=[CIC,CIC+range]
no status subfield
GRA
-Reserved-
CGB
-Reserved-
CGBA
-Reserved-
CGU
-Reserved-
CGUA
-Reserved-
CQM
group=single circuit
no status subfield
range<32
group=[CIC,CIC+range]
no status subfield
CQR
no status subfield
no status subfield
572
Chapter 15
unknown message
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:
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
573
574
Chapter 15
Chapter 15
575
576
Chapter 15
Chapter 15
577
578
Chapter 15
Handling Unrecognized Messages ITU97 Mode for ITU-T Based HP OpenCall SS7 ISUP
ITU97 mode supports handling of unrecognized ISUP messages, that is, 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
Chapter 15
579
580
Chapter 15
16
Chapter 16
581
Overview
For each procedure, this chapter provides:
582
Chapter 16
Where:
Prmt_Name
xxx
Chapter 16
583
Figure 16-1
584
Chapter 16
NOTE
Figure 16-2
Dual Seizure
Chapter 16
585
Incoming Seizure
586
Chapter 16
Chapter 16
587
588
Chapter 16
Call Release
A call can be released by either party, calling or called.
Chapter 16
589
590
Chapter 16
Chapter 16
591
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.
592
Chapter 16
NOTE
A RESET_RESP with RLC must be answered for the circuit which has been reset
by the RSC.
Chapter 16
593
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.
594
Chapter 16
Chapter 16
595
596
Chapter 16
NOTE
If the application responds with a RESET_RESP (RLC), an RLC message will be sent.
Chapter 16
597
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.
598
Chapter 16
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
Chapter 16
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.
599
600
Chapter 16
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.
Chapter 16
601
602
Chapter 16
Chapter 16
603
604
Chapter 16
Chapter 16
605
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.
Figure 16-24
606
Suspend/Resume - T6 Timeout
Chapter 16
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
607
608
Chapter 16
Chapter 16
609
610
Chapter 16
Chapter 16
611
612
Chapter 16
Chapter 16
613
Facility Message
This message is supported by HP OpenCall SS7 ISUP in following cases:
ITU-T based HP OpenCall SS7 ISUP, with ITU-T 93, ITU-T 97 and ETSI-V2
message sets
614
FAC Message
Chapter 16
Chapter 16
615
616
Chapter 16
Chapter 16
617
618
Chapter 16
17
Chapter 17
619
Overview
The circuit maintenance processes described in this chapter include:
620
circuit validation
Chapter 17
Chapter 17
621
622
Chapter 17
Chapter 17
623
624
Chapter 17
upon receipt of all these primitives, sends back the acknowledgment message
CGBA
Chapter 17
625
626
Chapter 17
Figure 17-8
Chapter 17
waits for the GROUP_BLOCKING_RESP from the application and sends a CGBA
message back to the network
627
sends two identical CBG messages using the one associated with the primitive
628
Chapter 17
NOTE
waits for the GROUP_UNBLOCKING_RESP, and upon receipt of it, sends a CGUA
back to the network
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.
Chapter 17
629
Figure 17-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
630
Chapter 17
Chapter 17
631
Figure 17-13
632
if range is not 0, a list is built from the message CIC, up to the range value +
1
Chapter 17
Chapter 17
633
NOTE
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 17-17, Circuit Group Query from User - Error in Processing State - Case 2.
634
Chapter 17
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 17-18, Circuit
Group Query from User - Error in Processing State - Case 3.
Figure 17-18
Chapter 17
635
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 17-20,
Circuit Group Query from User - Error in Maintenance State - Case 2.
636
Chapter 17
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 17-21,
Circuit Group Query from User - Error in Maintenance State - Case 3.
Figure 17-21
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 17-22,
Circuit Group Query from User - Error in Maintenance State - Case 4.
Chapter 17
637
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 17-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.
638
Chapter 17
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 17-24,
Circuit Group Query from User - Error in Maintenance State - Case 6.
Figure 17-24
Chapter 17
639
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 17-25
640
Chapter 17
Chapter 17
641
642
Chapter 17
Chapter 17
Circuit Validation from User - Test Failed -CVR Received Before Second
T_CVT Timeout
643
644
Chapter 17
Chapter 17
645
646
Chapter 17
18
Chapter 18
647
648
Chapter 18
Call Release
A call can be released by either party, calling or called.
The abnormal call release procedure described in this scenario is applicable to both
inbound and outbound circuits.
NOTE
Chapter 18
649
650
Chapter 18
Chapter 18
651
652
Chapter 18
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.
RSC messages are sent every T17 (typically 1 minute) instead of every T16
(typically 5 seconds)
Chapter 18
653
654
Chapter 18
Chapter 18
655
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 585.
Figure 18-6
656
Chapter 18
Chapter 18
657
Suspend/Resume
When supported by the selected flavor, HP OpenCall SS7 ISUP offers primitives
and procedures to handle Suspend/Resume messages.
658
Chapter 18
Chapter 18
659
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 18-10
660
Chapter 18
NOTE
Chapter 18
661
662
Chapter 18
Continuity Recheck
If the continuity recheck procedure is a success, only the outgoing side sends a REL
message to finish the procedure.
Chapter 18
663
664
Chapter 18
Chapter 18
665
666
Chapter 18
Chapter 18
On the incoming side, the continuity recheck procedure is cancelled by the reset
procedure engaged on the outgoing side.
667
668
Chapter 18
Chapter 18
669
670
Chapter 18
Chapter 18
671
672
Chapter 18
Chapter 18
673
674
Chapter 18
Chapter 18
675
676
Chapter 18
19
Chapter 19
677
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
678
The TTC flavor does not use the T9 timer. In this particular case, no T9 timer is
started when receiving an ACM message.
Chapter 19
Chapter 19
679
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.
680
Chapter 19
Chapter 19
681
Call Release
A call can be released by either party, calling or called.
The abnormal call release procedure described in this scenario is applicable to both
inbound and outbound circuits.
NOTE
682
Chapter 19
Chapter 19
683
684
Chapter 19
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.
RSC messages are sent every T17 (typically 1 minute) instead of every T16
(typically 5 seconds)
Chapter 19
685
686
Chapter 19
Chapter 19
687
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).
688
Chapter 19
Chapter 19
689
690
Chapter 19
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.
Figure 19-12
Chapter 19
Suspend/Resume - T6 Timeout
691
NOTE
692
Chapter 19
Chapter 19
693
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.
694
Chapter 19
Chapter 19
695
696
Chapter 19
Chapter 19
697
698
Chapter 19
Chapter 19
699
700
Chapter 19
Chapter 19
701
702
Chapter 19
Chapter 19
703
704
Chapter 19
Chapter 19
705
706
Chapter 19
20
Chapter 20
707
Overview
The circuit maintenance processes described in this chapter include:
708
circuit validation
Chapter 20
Chapter 20
709
710
Chapter 20
711
712
Chapter 20
Chapter 20
713
NOTE
714
Chapter 20
Chapter 20
715
NOTE
Figure 20-8
716
Chapter 20
The rangeAndStatus parameter is interpreted in the same way as for the CGB
message.
NOTE
Figure 20-9
Chapter 20
717
The rangeAndStatus parameter is interpreted in the same way as for the CGB
message.
Figure 20-10
718
Chapter 20
waits for the GROUP_UNBLOCKING_RESP, and upon receipt of it, sends a CGUA
back to the network primitive to the application
Chapter 20
719
720
Chapter 20
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
721
Figure 20-14
722
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
Chapter 20
Chapter 20
723
724
Chapter 20
Figure 20-17
Chapter 20
if range is not 0, a list is built from the message CIC, up to the range value +
1
725
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
726
Chapter 20
Figure 20-19
Chapter 20
727
728
Chapter 20
Appendix A
729
SETUP_FAILURE_IND
Value
Comments
DUAL_SEIZURE
COT_FAILURE
FLOW_CONTROL
Table A-2
START_RESET_IND
Value
Comments
UNEXPECTED_MESSAGE
T5_TIMEOUT
T5 timeout expired.
COT_CC_NOT_REQUIRED
MTP_UNAVAILABLE
DPC_UNAVAILABLE
BLOCKING_WITH_RELEASE
TCCRr_TIMEOUT
T27_TIMEOUT
T34_TIMEOUT
DCO_LPA_FAIL
LPA was not received within the TCCRr timer for outgoing
continuity recheck.
UNEQUIPPED_CIRCUIT
730
Appendix A
START_RESET_IND (Continued)
Value
TIMER_SHORTAGE
Comments
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
Table A-3
START_RELEASE_IND
Value
UNEXPECTED_RLC
Comments
RLC was received while in unexpected states (see SDL
diagrams):
CPCI:
ICC answered
ICC suspended
CPCO:
T6_TIMEOUT
T6 timer expired
T7_TIMEOUT
T7 timeout expired
Appendix A
731
START_RELEASE_IND (Continued)
Value
Comments
T8_TIMEOUT
T8 timeout expired
T33_TIMEOUT
T_CRA_TIMEOUT
TCRA expired
BLOCKING
CPCO:
T1_TIMEOUT
DCO_SUCCESS
STOP_REQ
Table A-4
MAINTENANCE_SYSTEM_IND
Value returned
Comments
T13_TIMEOUT
T15_TIMEOUT
T23_TIMEOUT
T5_TIMEOUT
T5 timeout expired
COT_RECEIVED
T5_TIMEOUT
DCO_FAIL
DCO_SUCCESS
732
Appendix A
MAINTENANCE_SYSTEM_IND (Continued)
Value returned
Comments
STOP_REQ
T17_TIMEOUT
T17 expired
RSC_AFTER_T17
Received RSC while CRS state machine was in the Wait for
RLC state
CRS_STOP
RLC_AFTER_T17
Received RLC while the CRS state machine was in the Wait
for RLC state
T19_TIMEOUT
T21_TIMEOUT
T18_NOT_RUNNING
WRONG_STATUS_BITS
T20_NOT_RUNNING
UNEQUIPPED_CIRCUIT
UCIC received.
TIMER_SHORTAGE
NON_ISDN_ACCESS_INDICATION
CIRCUIT_VALIDATION_TEST_FAILE
D (second time)
RECV_ON_UNEQUIPPED_CIRCUIT
Appendix A
733
SETUP_FAILURE_IND
Value
Comments
T27_TIMEOUT
DUAL_SEIZURE
CPC_BUSY
BLOCKING
RELEASE
COT_FAILURE
734
Appendix A
SETUP_FAILURE_IND (Continued)
Value
Comments
ITU97 only (CRCR state machine):
CRCR_RESET
FLOW_CONTROL
Table A-6
START_RESET_IND
Value
UNEXPECTED_MESSAGE
Comments
COT_CC_NOT_REQUIRED
UNEQUIPPED_CIRCUIT
Appendix A
735
START_RESET_IND (Continued)
Value
Comments
TIMER_SHORTAGE
Table A-7
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.
START_RELEASE_IND
Value
Comments
CONTINUITY_SUCCESS
UNEXPECTED_RLC
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
736
Appendix A
MAINTENANCE_SYSTEM_IND
Value
Comments
UNEQUIPPED_CIRCUIT
UCIC received.
TIMER_SHORTAGE
RECV_ON_UNEQUIPPED_CIRCUIT
MN_GROUP_UNBLOCKING
HW_GROUP_BLOCKING
HW_GROUP_UNBLOCKING
T19_TIMEOUT
T21_TIMEOUT
Appendix A
737
MAINTENANCE_SYSTEM_IND (Continued)
Value
Comments
T18_NOT_RUNNING
PRIORITY_TO_GROUP_RESET
T20_NOT_RUNNING
GROUP_BLOCKING_IND received
HW_GROUP_BLOCKING_IND received
RLC_AFTER_T17
T5 timer expired
T24_TIMEOUT
738
Appendix A
MAINTENANCE_SYSTEM_IND (Continued)
Value
BACKWARD_CHECK_TONE_ACK
Comments
BackwardCheckTone received and check indicator=3, after
ENABLE_ECHO_IND_ACK received
REL_RECEIVED
T28_TIMEOUT
BLOCKING_REQ sent
T12_NOT_RUNNING
T13_TIMEOUT
MN_UNBLOCKING
T14_NOT_RUNNING
T15_TIMEOUT
BLA_WHEN_IDLE
UBA_WHEN_LOCALLY_BLOCKED
Appendix A
739
MAINTENANCE_SYSTEM_IND (Continued)
Value
MN_BLOCKING
MN_UNBLOCKING
Comments
T5 timer expired
T23_NOT_RUNNING
740
Appendix A
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
741
TUP Addendum
How to Use This Addendum
742
Appendix B
TUP Addendum
Flavors Supported by HP OpenCall SS7 TUP
ITUP
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
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.
Not supported.
Supported.
Appendix B
743
TUP Addendum
Flavors Supported by HP OpenCall SS7 TUP
Table B-1
24 bits.
14 bits.
Supported
Not supported.
Supported.
Not supported.
METERING_PULSE_REQ primitive.
Supported.
Not supported.
Supported.
Not supported.
Supported.
Not supported.
Consequently, SLB is not
in the list of the possible
UBM messages.
Supported.
Not supported.
Consequently, STB is not
in the list of possible
UBM messages.
744
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:
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 743.
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 743.
Conventions Used in Diagrams
The diagrams in this chapter use the following convention:
Prmt_Name(xxx)
Where:
Appendix B
745
TUP Addendum
Introduction
Prmt_Name
xxx
746
Appendix B
TUP Addendum
Application Development Guidelines
Appendix B
747
TUP Addendum
Using the API
Introduction
This is as for HP OpenCall SS7 ISUP, see Introduction on page 430.
Connections
This is as for HP OpenCall SS7 ISUP, see Connections on page 436.
API Structure
This is as for HP OpenCall SS7 ISUP, see API Structure on page 446.
748
Appendix B
TUP Addendum
Using the API
Receiving Notifications
oamReceive()
This is as for HP OpenCall SS7 ISUP, see Receiving Notifications on page 469.
However, the defaultGroup() accessor (referenced in the
IsupAdditional::NotifCics row of Table 12-2 on page 469) 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.
Appendix B
749
TUP Addendum
Using the API
750
Appendix B
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 484.
Exchanging Primitives
This is as for HP OpenCall SS7 ISUP, see Exchanging Primitives on page 485.
CTUP Message
SETUP_REQ
IAM or IAI
SETUP_IND
IAM or IAI
SETUP_RESP
ANN or ANC
SETUP_CONF
ANN or ANC
SETUP_IND_ACK
Appendix B
Comments
751
TUP Addendum
Exchanging Messages
Table B-2
CONTINUITY_REPORT_REQ
CTUP Message
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
BACKWARD_CHECK_TONE_ACK
CONNECT_TRANSCEIVER_IND
CONNECT_TRANSCEIVER_IND_ACK
REMOVE_TRANSCEIVER_IND
REMOVE_TRANSCEIVER_IND_ACK
752
Appendix B
TUP Addendum
Exchanging Messages
Table B-2
CTUP Message
Comments
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
STOP_CHECK_TONE_IND
STOP_CHECK_TONE_IND_ACK
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
User message or
MAL.
CIP_REQ
TUP_USR_MSG_REQ
TUP_USR_MSG_IND
RELEASE_REQ
RELEASE_IND
RELEASE_RESP
RELEASE_CONF
Appendix B
RLG
RLG
753
TUP Addendum
Exchanging Messages
Table B-2
CTUP Message
START_RELEASE_IND
START_RELEASE_IND_ACK
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
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
754
Comments
Appendix B
TUP Addendum
Exchanging Messages
Table B-2
CTUP Message
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
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
Appendix B
Comments
755
TUP Addendum
Exchanging Messages
Table B-2
CTUP Message
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
GROUP_STOP_REQ
GROUP_STOP_CONF
Comments
Table B-3 lists the ITUP primitives for State Machine Mode. Note that the
equivalent primitives for CTUP are listed in Table B-2.
756
Appendix B
TUP Addendum
Exchanging Messages
Table B-3
SETUP_REQ
SETUP_IND
SETUP_RESP
SETUP_CONF
ITUP Message
IAM or IAI
IAM or IAI
ANN, ANC, or ANU
ANN, ANC, or ANU
Comments
SETUP_IND_ACK
CONTINUITY_REPORT_REQ
CONTINUITY_REPORT_IND
COT or CCF
CONTINUITY_RECHECK_REQ
CONTINUITY_RECHECK_IND
CONTINUITY_RECHECK_CONF
CCR
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
BACKWARD_CHECK_TONE_ACK
Appendix B
757
TUP Addendum
Exchanging Messages
Table B-3
ITUP Message
Comments
CONNECT_TRANSCEIVER_IND
CONNECT_TRANSCEIVER_IND_ACK
REMOVE_TRANSCEIVER_IND
REMOVE_TRANSCEIVER_IND_ACK
START_CHECK_TONE_IND
START_CHECK_TONE_IND_ACK
STOP_CHECK_TONE_IND
STOP_CHECK_TONE_IND_ACK
TONE_DISAPPEARS_ACK
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
TUP_USR_MSG_REQ
TUP_USR_MSG_IND
User message
758
Appendix B
TUP Addendum
Exchanging Messages
Table B-3
RELEASE_REQ
RELEASE_IND
RELEASE_RESP
RELEASE_CONF
ITUP Message
CLF, CBK, CCL or UBM*
CLF, CBK, CCL or UBM*
RLG
RLG
Comments
* = 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
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
Appendix B
759
TUP Addendum
Exchanging Messages
Table B-3
ITUP Message
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
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
MAINTENANCE_SYSTEM_IND
FORWARD_TRANSFER_REQ
FORWARD_TRANSFER_IND
FOT
FOT
REANSWER_REQ
REANSWER_IND
RAN
RAN
760
Comments
Appendix B
TUP Addendum
Exchanging Messages
Table B-3
ITUP Message
Comments
STOP_REQ
STOP_CONF
GROUP_STOP_REQ
GROUP_STOP_CONF
CHARGING_REQ
CHARGING_IND
CHARGING_RESP
CHARGING_CONF
Bypass Mode
This is as for HP OpenCall SS7 ISUP, see Bypass Mode on page 505.
MTP Related Primitives
This is as for HP OpenCall SS7 ISUP, see MTP Related Primitives on page 510.
Appendix B
761
TUP Addendum
Exchanging Messages
Additional Information
This is as for HP OpenCall SS7 ISUP, see Additional Information on page 505,
except that the list of TUP primitives requiring Additional Information is given in
Table B-4.
Table B-4
Primitives
SETUP_FAILURE_IND
Field
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
START_RESET_IND
StartReset
resetCause
762
Appendix B
TUP Addendum
Exchanging Messages
Table B-4
Primitives
RESET_IND
Field
resetEvent
RESET_RESP
Used for:
determining whether or not it is part of a Group
Reset operation.
Possible values are:
GROUP_RESET
STOP_CONF
LocalReset
LocalresetCause
GROUP_STOP_CONF
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
763
TUP Addendum
Exchanging Messages
Table B-4
Primitives
Additional
Information
MAINTENANCE_SYSTEM_I
ND
MaintenanceSy
stem
Field
maintenance
SystemEvent
Used for:
defining the event.
Possible values are:
RECV_ON_UNEQUIPPED_CIRCUITMN_B
LOCKING
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
764
Appendix B
TUP Addendum
Exchanging Messages
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.
Multiple instances of a message parameter are not possible in the TUP protocol
and therefore it is not necessarily supported.
Table B-5 lists the classes from the ISUP message module that have been adapted
for TUP.
Table B-5
ISUP Class
Purpose
IsupInfoMgr
IsupInfoMgr
IsupMsg
IsupMsg
IsupIam,
IsupAcm,
...
TupXXX (examples:
IsupIam, TupIAI,
TupAcm, )
Appendix B
765
TUP Addendum
Exchanging Messages
Table B-5
ISUP Class
IsupUserMsg
TUP Class
TupUserMsg
Purpose
Specialization of the IsupMsg. This class is used to support
non-standard TUP messages.
Step
Step
Step
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.
Parameter Checking
766
Appendix B
TUP Addendum
Exchanging Messages
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.
Set Value Accessor
To set the paramName parameter value in a TupXXX message:
TupXXX * TupXXX::paramName(ISUP::ParmValue& P_sVal, ISUP::MsgStatus& P_status)
767
TUP Addendum
Exchanging Messages
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,
Comment
TUP class: IsupInfoMgr
IsupInfoMgr
Purpose
Main Changes
768
Appendix B
TUP Addendum
Exchanging Messages
Table B-6
Main Methods
Comment
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.
IsupMsg
Purpose
Main Changes
Appendix B
769
TUP Addendum
Exchanging Messages
Table B-6
Main Methods
Comment
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.
IsupIam,...
Purpose
770
Appendix B
TUP Addendum
Exchanging Messages
Table B-6
Comment
Main Methods
IsupUserMsg
Purpose
Main Changes
This class is defined in exactly the same way as the TupXXX classes.
Main Methods
Table B-7
first byte
subsequent bytes
Appendix B
Bits
bits HGFE
bits DCBA
Meaning
number of address signals sub-field.
Not significant.
address digits
771
TUP Addendum
Exchanging Messages
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 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
TupCbk
TupCcf
TupCcl
IsupCcr
TupCfl
TupCgc
TupClf
IsupCot
TupDpn
TupEum
octetIndicator
signallingPointCode
772
Appendix B
TUP Addendum
Exchanging Messages
Table B-8
Message Class
Parameter Name
Parameter Type
IsupFot
IsupGra
rangeAndStatus
TupGrq
requestTypeIndicators
IsupGrs
rangeAndStatus
TupGsm
responseTypeIndicator
callingPartysCategory
callingPartyNumber
transitExchangeIdentity
incomingTrunkIdentity
originalCalledNumber
TupHba
rangeAndStatus
TupHgb
rangeAndStatus
TupHgu
rangeAndStatus
TupHua
rangeAndStatus
TupIai
callingPartysCategory
messageIndicators
calledPartyNumber
callingPartyNumber
originalCalledNumber
IsupIam
Appendix B
callingPartysCategory
messageIndicators
calledPartyNumber
773
TUP Addendum
Exchanging Messages
Table B-8
Message Class
Parameter Name
Parameter Type
TupLos
TupMal
TupMba
rangeAndStatus
TupMgb
rangeAndStatus
TupMgu
rangeAndStatus
TupMpm
chargingInformation
TupMua
rangeAndStatus
TupNnc
TupOpr
TupRan
TupRlg
IsupRsc
IsupSam
subsequentNumber
TupSao
subsequentNumber
TupSba
rangeAndStatus
TupSec
TupSgb
rangeAndStatus
TupSgu
rangeAndStatus
TupSlb
TupSsb
TupSst
TupStb
774
Appendix B
TUP Addendum
Exchanging Messages
Table B-8
Message Class
Parameter Name
Parameter Type
TupSua
rangeAndStatus
IsupUba
IsupUbl
TupUnn
IsupUserMsg
messageType
userParam
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 Class
Parameter Name
Parameter Type
TupAcb
TupAcc
automCongestionLevel
IsupAcm
backwardCallIndicators
TupAdi
TupAnc
TupAnn
TupAnu
IsupBla
IsupBlo
TupCbk
TupCcf
Appendix B
775
TUP Addendum
Exchanging Messages
Table B-9
Message Class
Parameter Name
Parameter Type
TupCcc
chargingUnitIndicators
TupCcg
collectionIndicators
TupCcl
IsupCcr
TupCfl
TupCgc
TupCha
TupChg
packetChargingA
tariffIndicatorsA
tariffFactorA
timeIndicator (*see the Note
following this table)
packetChargingB
tariffIndicatorsB
tariffFactorB
TupClf
IsupCot
TupDpn
TupEum
octetIndicator
signallingPointCode
IsupFot
IsupGra
rangeAndStatus
TupGrq
requestTypeIndicators
IsupGrs
rangeAndStatus
776
Appendix B
TUP Addendum
Exchanging Messages
Table B-9
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
TupHgb
rangeAndStatus
TupHgu
rangeAndStatus
TupHua
rangeAndStatus
TupIai
callingPartysCategory
messageIndicators
calledPartyNumber
CUGinterlockCode
callingPartyNumber
originalCalledNumber
IsupIam
callingPartysCategory
messageIndicators
calledPartyNumber
TupLos
TupMba
rangeAndStatus
TupMgb
rangeAndStatus
Appendix B
777
TUP Addendum
Exchanging Messages
Table B-9
Message Class
Parameter Name
Parameter Type
TupMgu
rangeAndStatus
TupMua
rangeAndStatus
TupNnc
TupPcc
chargingUnitIndicators
TupRan
TupRlg
IsupRsc
IsupSam
subsequentNumber
TupSao
subsequentNumber
TupSba
rangeAndStatus
TupSec
TupSgb
rangeAndStatus
TupSgu
rangeAndStatus
TupSsb
TupSst
TupSua
rangeAndStatus
TupTrg
tariffIndicators
tariffFactor
timeIndicator (*see the Note
following this table)
IsupUba
IsupUbl
TupUnn
778
Appendix B
TUP Addendum
Exchanging Messages
Table B-9
Message Class
IsupUserMsg
NOTE
Parameter Type
Mandatory, Fixed length (H0/H1)
Optional, Variable length
(*) The timeIndicator parameter is coded on one byte. The shift of 2 bits is done
by the encode() and decode() methods.
Appendix B
779
TUP Addendum
Exchanging Messages
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.
780
Appendix B
TUP Addendum
Exchanging Messages
Figure B-2
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.
Appendix B
781
TUP Addendum
Exchanging Messages
782
Appendix B
TUP Addendum
Managing HP OpenCall SS7 TUP
Overview
This is as for HP OpenCall SS7 ISUP, see Overview on page 536.
Appendix B
783
TUP Addendum
Managing HP OpenCall SS7 TUP
784
Appendix B
TUP Addendum
Managing HP OpenCall SS7 TUP
Figure B-3
Figure B-4
Appendix B
785
TUP Addendum
Managing HP OpenCall SS7 TUP
786
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
IDLE_HW_REMOTELY_BLOCKED_MN_LOCALLY_AND_REMOTELY_BLOCKED
Appendix B
TUP Addendum
Managing HP OpenCall SS7 TUP
Appendix B
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_BLOCKED
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
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_HW_MN_REMOTELY_BLOCKED
IDLE_SW_LOCALLY_AND_REMOTELY_BLOCKED_HW_LOCALLY_BLOCKED_MN_
REMOTELY_BLOCKED
787
TUP Addendum
Managing HP OpenCall SS7 TUP
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_BLOCKED
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_BLOCKED
IDLE_SW_HW_REMOTELY_BLOCKED
IDLE_SW_HW_REMOTELY_BLOCKED_MN_LOCALLY_AND_REMOTELY_BLOCKED
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_BLOCKED
IDLE_SW_HW_MN_REMOTELY_BLOCKED
IDLE_SW_HW_MN_LOCALLY_BLOCKED
IDLE_SW_HW_MN_LOCALLY_AND_REMOTELY_BLOCKED
These visible circuit states do not represent exactly the internal call states, but are
deduced from them by using the following rules:
788
TUP Addendum
Managing HP OpenCall SS7 TUP
Appendix B
789
TUP Addendum
Introduction to TUP Procedures
Acronym
Comments
MDSC
CPCO
BLS
CCI
Continuity-check incoming.
CCO
Continuity-check outgoing.
CGRR
CGRS
CRI
790
Appendix B
TUP Addendum
Introduction to TUP Procedures
Table B-10
Acronym
Comments
CRO
CRR
Circuit reset receipt. Does not exist in Q724; adapted from ISUP.
CRS
MBUR
MBUS
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
SBUS
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.
Interaction Scenarios
This is as for HP OpenCall SS7 ISUP, see Interaction Scenarios on page 558.
Appendix B
791
TUP Addendum
Introduction to TUP Procedures
792
Appendix B
TUP Addendum
Introduction to TUP Procedures
Table B-11 shows how the CIC label is interpreted in the rangeAndStatus
parameter.
Appendix B
793
TUP Addendum
Introduction to TUP Procedures
Table B-11
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.
No status field
related to whole
CIC group.
GRA
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.
HGB, HGU,
MGB, MGU,
SGB, SGU
Representative
CIC within the CIC
group.
No status field
included related to
the pre-determined
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.
794
Appendix B
TUP Addendum
Introduction to TUP Procedures
Table B-11
TUP Message
range = 0
CIC Label
HGA, HUA,
MBA, MUA,
SBA, SUA
Representative
CIC within the CIC
group.
range !=0
CIC Label
No status field
included related to
the pre-determined
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
795
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,
where: Prmt_Name is the primitive name and xxx is the message type.
796
Appendix B
TUP Addendum
Call Control
Figure B-5
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.
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.
Appendix B
797
TUP Addendum
Call Control
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
798
Appendix B
TUP Addendum
Call Control
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
799
TUP Addendum
Call Control
Figure B-9
800
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
801
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
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.
802
Appendix B
TUP Addendum
Call Control
Figure B-12
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
803
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
804
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
805
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
806
Appendix B
TUP Addendum
Call Control
Figure B-17
Appendix B
807
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
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.
808
Appendix B
TUP Addendum
Call Control
Figure B-19
Appendix B
809
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
Figure B-21
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.
810
Appendix B
TUP Addendum
Call Control
Figure B-22
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
Appendix B
811
TUP Addendum
Call Control
Figure B-24
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
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.
812
Appendix B
TUP Addendum
Call Control
Figure B-26
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
813
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).
814
Appendix B
TUP Addendum
Call Control
Figure B-28
Appendix B
815
TUP Addendum
Call Control
Figure B-29
816
Appendix B
TUP Addendum
Call Control
Figure B-30
Appendix B
817
TUP Addendum
Call Control
Figure B-31
818
Appendix B
TUP Addendum
Call Control
Figure B-32
Appendix B
819
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
820
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
Figure B-35
Appendix B
821
TUP Addendum
Call Control
822
Appendix B
TUP Addendum
Call Control
Figure B-36
Appendix B
823
TUP Addendum
Call Control
Figure B-37
824
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
Figure B-39
Appendix B
825
TUP Addendum
Call Control
Figure B-40
Figure B-41
826
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:
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
In the following scenarios, the use of OPR is shown in italic font because it is
optional in the re-answer procedure.
Appendix B
827
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
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
828
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
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
829
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
830
Appendix B
TUP Addendum
Call Control
Figure B-47
Appendix B
831
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
T7 Timer
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
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 829.
832
Appendix B
TUP Addendum
Call Control
Figure B-49
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.
Appendix B
833
TUP Addendum
Call Control
Figure B-50
Normal Call Release - Initiated from Called Party After Twran Expiry
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 829.
Figure B-51
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.
834
Appendix B
TUP Addendum
Call Control
Figure B-52
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.
When the release is completed (the circuit state returns to IDLE), the RLG message
is sent.
Figure B-53
Appendix B
835
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
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.
836
Appendix B
TUP Addendum
Call Control
Figure B-55
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.
Appendix B
837
TUP Addendum
Call Control
Figure B-56
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.
838
Appendix B
TUP Addendum
Call Control
Figure B-57
Appendix B
839
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
840
Appendix B
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
Appendix B
841
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
842
Appendix B
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
Appendix B
843
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:
844
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.
Appendix B
TUP Addendum
Call Control
Figure B-62
Appendix B
845
TUP Addendum
Call Control
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 795.
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
846
Operation
T20
GRS
T21
GRA
T22
GRS
Appendix B
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
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.
Appendix B
847
TUP Addendum
Call Control
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
848
Appendix B
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 849).
Figure B-65
Appendix B
849
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
850
Appendix B
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
Appendix B
851
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
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.
852
Appendix B
TUP Addendum
Call Control
Figure B-69
Appendix B
853
TUP Addendum
Circuit Maintenance
Circuit Maintenance
This section describes circuit maintenance processes.
The equivalent information for HP OpenCall SS7 ISUP is in Chapter 17, 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/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
854
Appendix B
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
Appendix B
855
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
856
Appendix B
TUP Addendum
Circuit Maintenance
Figure B-74
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
Appendix B
857
TUP Addendum
Circuit Maintenance
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
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 795.
858
Appendix B
TUP Addendum
Circuit Maintenance
Circuit Group Blocking
Circuit Group Blocking From Network - Maintenance Oriented- Normal
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
Step
Step
Step
Figure B-76
Appendix B
859
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
Step
Step
Step
Figure B-77
860
Appendix B
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
Step
Step
Step
Figure B-78
Appendix B
861
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
Step
Step
Figure B-79
862
Appendix B
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
Step
Step
Figure B-80
Appendix B
863
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
Step
Step
Figure B-81
864
Appendix B
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
Appendix B
865
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
866
Appendix B
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
Appendix B
867
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
Step
Step
Figure B-85
868
Appendix B
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
Step
Step
Figure B-86
Appendix B
869
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
Step
Step
Figure B-87
870
Appendix B
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
Step
Step
Figure B-88
Appendix B
871
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
Step
Step
Figure B-89
872
Appendix B
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
Step
Step
Figure B-90
Appendix B
873
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:
Tx
874
Ty
T26
T27
MGB
T28
T29
MGU
T32
T33
HGB
T34
T35
HGU
T38
T39
SGB
T40
T41
SGU
Appendix B
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
Appendix B
875
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
Figure B-93
876
Appendix B
TUP Addendum
Miscellaneous Procedures
Figure B-95
Appendix B
877
TUP Addendum
TUP Tutorial Programs
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.
tupClientSM
Callee
tupServerSM
878
Caller
tupClientBP
Callee
tupServerBP
Appendix B
TUP Addendum
TUP Makefile
TUP Makefile
The makefile /opt/OC/tutorials/TUP/Makefile is provided with
HP OpenCall SS7 TUP.
CAUTION
Appendix B
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.
879
TUP Addendum
TUP Makefile
880
Appendix B
TUP Addendum
TUP Makefile
Appendix B
881
TUP Addendum
TUP Makefile
882
Appendix B
Index
Symbols
., 445
Numerics
16 bit values
assigning, 522
32 bit values
assigning, 522
8 bit values
assigning, 522
A
abnormal
call release (ISUP), 649, 651, 682, 683
access modes (ISUP)
bypass, 437, 448
state-machine, 437, 448
accessors (ISUP)
behavior, 519
description, 519
message parameters, 527
presence accessor, 519
read accessor, 519
specific accessors, 519
using parameter value objects, 539
write accessor, 519
accessors (TUP)
check value, 769
China TUP, 773
for messages, 768
get value, 768
ITU-T, 777
mark as absent, 769
set value, 768
ACM message (ISUP)
not received, 588, 590, 648
reception, 589, 678
ACM message (TUP)
not received, 802
ACR
state machine (TUP), 784
activating
standby application, 551
activity object
deleting, 467
function, 463
methods, 463
redefining methods, 463
activity object (TUP)
883
884
failure, 549
flow control, 72
gateway, 437
High Availability, 536
ITU-T Blue Book TCAP on a White Book TCAP
API, 190
location on a platform, 60
maintenance, 62
managing circuit states (ISUP), 547
managing file descriptors, 66
managing flow control, 543
managing return status value objects, 540
migration from development platforms, 62
optimizing performance, 52
primitives rejected, 545
priority, 53, 55
processing overhead, 434
receiving pending primitives, 545
receiving primitives, 68
receiving waiting indications, 73
redefining new(), 538
reducing back-pressure, 73
reducing IPC calls, 71
reducing network back-pressure, 73
rescheduling, 69
response time, 545
returned messages, 539
scheduling, 64
scheduling and timeout value, 66
scheduling loop, 67
sending primitives, 68
share of CPU, 55
sharing CPU with SS7 stack, 55
sizing, 62
specific C++ guidelines (ISUP), 434
specific C++ guidelines (TUP), 747
standby, 547, 549
switchover mechanism, 547
synchronization between applications, 547
synchronizing with state-machines, 537
tuning IPC buffers, 71
upgrade, 62
using error codes, 76
using IPC buffers, 70
using the M3UA API, 78
using the MTP3 API, 78
using the OA&M API, 385
using the SCCP API, 105
using the TCAP API, 171
885
messages, 795
circuit group queries, 632, 725
circuit group queries (ISUP)
from a network, 632, 725
from application (ITU-T based), 726
circuit group reset (ISUP)
double reset, 601
failure, 600
from network, 599
from user, 655, 687
normal, 655, 687
circuit groups (ISUP)
blocking/unblocking, 564
circuit reservation
ANSI based, 656
from network, 656, 657
T_CRA expiry, 657
circuit reset (ISUP)
successful, 596, 653, 685
circuit states
propagating, 549
synchronizing, 549, 550
TUP, 798
updating, 549, 552
circuit states (ISUP)
timer activity, 583
circuit states (TUP)
managing, 788
circuit unblocking (ISUP)
from network, 621, 622, 623, 709, 711, 712
from user, 622, 711
circuit update mechanism
activating stand-by application, 551
High Availability (ISUP), 536, 547
propagating states, 549
states (ISUP), 548
synchronizing states, 550
CIRCUIT_RESERVATION_IND
primitive (ISUP ITU), 496
CIRCUIT_RESERVATION_RESP
primitive (ISUP ITU), 496
CIRCUIT_VALIDATION_CONF
primitive (ISUP ANSI), 488
CIRCUIT_VALIDATION_IND
primitive (ISUP ANSI), 488
CIRCUIT_VALIDATION_REQ
primitive (ISUP ANSI), 488
CIRCUIT_VALIDATION_RESP
primitive (ISUP ANSI), 488
circuits
inbound, 558
outbound, 558
circuits (ISUP)
blocking/unblocking, 561
circuitStateIndicator parameter, 632, 725
classes
message (ITU-T TUP), 777
message (TUP), 773
classname, 451
CLOSE_FAILED, 476
CloseStatus, 476
CNX_CLOSED, 474
CnxStatus, 474
CnxStatus return status, 463
cnxStatus() method, 463
collision
call release (ISUP), 592, 593
combining linksets, 82
commands
cfgIsup, 441, 445, 477, 478
cfgSccp, 183
cfgTcap, 189, 191, 196, 243, 250, 257, 259, 264
compiler
ASNI, 176
compilers
g++, 292
CON message (ISUP)
incoming calls, 679
outgoing calls, 679
using, 679
conditions (ISUP)
IDLE, 596, 653, 685
conditions (TUP)
IDLE, 840
configuration
, 442
dynamic, 477
dynamic (TUP), 750
High Availability, 547
ISUP CIC-based distribution, 445
standby application, 547
switchover, 547
Configuration file
Application, 440
ISUP, 441
configuration file
contents, 450
declaring classnames, 451
errors in contents, 450
installation, 448
loading, 448, 450, 516
configurations
1-host cluster, 60
2-host cluster, 60
development, 60
Development Platform, 37
distributed, 60
FE/BE, 53, 60
HA, 64, 184
CONFUSION_IND
primitive (ISUP ANSI), 489
primitive (ISUP ITU), 497
congestion (TUP)
control, 786, 787
congestion handling, 445
CONNECT_INIT, 476
CONNECT_LOOP_IND
primitive (CTUP), 752
primitive (ISUP ITU), 497
primitive (ITUP), 757
CONNECT_LOOP_IND_ACK
primitive (CTUP), 752
primitive (ISUP ITU), 497
primitive (ITUP), 757
CONNECT_TRANSCEIVER_IND
primitive (CTUP), 752
primitive (ISUP ITU), 497
primitive (ITUP), 758
CONNECT_TRANSCEIVER_IND_ACK
primitive (CTUP), 752
primitive (ISUP ITU), 497
primitive (ITUP), 758
connections
as file descriptors, 461
as service access points, 64, 68
closing, 69, 467
connecting to the active stack, 64
creating, 64
destroying related entities, 69
end-to-end, 558
exchange of information, 68
HP Opencall SS7 Stack relationship, 436
identifiers, 64
receiving information, 68
sending information, 68
setting transit time, 71
used by application, 434
See also probe objects.
connectivity
GDI, 256
CONNNECT_LOOP_IND
888
developer, 36
runtime, 36
error, 612
handling, 434
error codes, 76
errors
transport (GDI), 254
examples
BP mode (ISUP), 481
BP mode (TUP), 880
bypass access (ISUP), 481
bypass access (TUP), 880
call setup/release (ISUP), 480
call setup/release (TUP), 880
closing IsupSMProbe object, 467
creating IsupSMProbe object, 455, 456
destroying IsupSMProbe object, 467
identifying a set of messages, 516
initializing IsupMgr object, 450
ISUP SM mode, 480
ISUP tutorials, 480
opening IsupSMProbe object, 455, 456
redefining activityObject methods, 464, 471, 472
SCCP tutorials, 168
TCAP tutorials, 260
TUP SM mode, 880
TUP tutorials, 880
using reload feature, 478
Execution API
definition, 292
exit message (ISUP)
ANSI, 660
normal, 660
EXIT_IND
primitive (ISUP ANSI), 490
F
facility exchange
failure, 705
succesful, 704
facility invocation, 704
FACILITY_ACCEPT_IND
primitive (ISUP ITU), 498
FACILITY_ACCEPT_REQ
primitive (ISUP ITU), 498
FACILITY_IND
primitive (ISUP ANSI), 490
primitive (ISUP ITU), 498
FACILITY_REJECT_IND
primitive (ISUP ITU), 498
890
FACILITY_REJECT_REQ
primitive (ISUP ITU), 498
FACILITY_REQ
primitive (ISUP ANSI), 490
primitive (ISUP ITU), 498
FACILITY_REQUEST_IND
primitive (ISUP ITU), 498
FACILITY_REQUEST_REQ
primitive (ISUP ITU), 498
failed
continuity check (TUP), 818
failure
LAN (GDI), 258, 259
failure condition
reporting (ISUP), 585
fault
FTC, 292
file descriptors
bit masks, 66
processing, 67
file names
Linux, 49
files
sys.tcap, 250
TCAP_ansi.h, 219
TCAP_common.h, 248
Finite State Machines (ISUP)
implementation particularities, 556
limitations, 556
supported, 556
Finite State Machines (TUP)
implementation particularities, 792
limitations, 792
supported, 792
flavors
TUP, 743
flow control, 72
application, 543
application back-pressure, 545
back-pressure, 544
inbound path, 544
IPC, 526
network back pressure, 545
outbound path, 545
queued indications, 528, 543, 545
queued messages, 526, 543, 545
flow control (TUP)
IPC, 786
outbound path, 786
flush() method, 542
891
GROUP_QUERY_REQ
primitive (ISUP ANSI), 490
primitive (ISUP ITU), 498
GROUP_QUERY_RESP
primitive (ISUP ITU), 498
GROUP_RESET_CONF
primitive (CTUP), 754
primitive (ISUP ANSI), 490
primitive (ISUP ITU), 499
primitive (ITUP), 760
GROUP_RESET_IND
primitive (CTUP), 754
primitive (ISUP ANSI), 490
primitive (ISUP ITU), 499
primitive (ITUP), 760
GROUP_RESET_REQ
primitive (CTUP), 754
primitive (ISUP ANSI), 490
primitive (ISUP ITU), 499
primitive (ITUP), 760
GROUP_RESET_RESP
primitive (CTUP), 754
primitive (ISUP ANSI), 490
primitive (ISUP ITU), 499
primitive (ITUP), 760
GROUP_STOP_CONF
primitive (CTUP), 757
primitive (ISUP ANSI), 490
primitive (ISUP ITU), 499
primitive (ITUP), 762
GROUP_STOP_REQ
primitive (CTUP), 757
primitive (ISUP ANSI), 490
primitive (ISUP ITU), 499
primitive (ITUP), 762
GROUP_UNBLOCKING_CONF
primitive (CTUP), 755
primitive (ISUP ANSI), 491
primitive (ISUP ITU), 499
primitive (ITUP), 760
GROUP_UNBLOCKING_IND
primitive (CTUP), 755
primitive (ISUP ANSI), 491
primitive (ISUP ITU), 499
primitive (ITUP), 760
GROUP_UNBLOCKING_REQ
primitive (CTUP), 755
primitive (ISUP ANSI), 491
primitive (ISUP ITU), 499
primitive (ITUP), 760
892
GROUP_UNBLOCKING_RESP
primitive (CTUP), 755
primitive (ISUP ANSI), 491
primitive (ISUP ITU), 499
primitive (ITUP), 760
guidelines
TCAP Application Message Dispatcher, 283
H
HA API
definition, 292
HA mechanisms, 67
HA process, 430
High Availability
configuration, 547
HA, 438
HP Opencall ISUP
circuit manager, 433
core, 433
encoder/decoder mechanism, 513, 514
features, 41
forcing network back-pressure, 545
interaction scenarios, 558
IPC buffers, 541
metadata, 433
protocol behavior, 437
scheduling, 459
state-machines, 433, 486, 545
supported messagesSee also messages
timers, 448
HP Opencall ISUP Library
access, 430
interface, 433, 446
services, 486
HP Opencall SS7 family, 745
HP Opencall SS7 Stack
access to SS7 network, 745
accessing network, 430
back-pressure, 545
classname, 451
closing connection, 467
connection objects, 448
connections, 434
deleting messages, 545
IPC buffers, 541
maximum number supported, 436
message exchange, 433
opening a connection, 452
releasing connections, 538
893
status, 464
HP Opencall TUP
end-to-end signalling, 745
features, 41, 745, 747, 748, 749, 750, 784, 785, 786
scheduling, 749
HW_GROUP_BLOCKING_CONF
primitive (CTUP), 755
primitive (ISUP ITU), 499
primitive (ITUP), 760
HW_GROUP_BLOCKING_IND
primitive (CTUP), 755
primitive (ISUP ITU), 499
primitive (ITUP), 760
HW_GROUP_BLOCKING_REQ
primitive (CTUP), 755
primitive (ISUP ITU), 499
primitive (ITUP), 760
HW_GROUP_BLOCKING_RESP
primitive (CTUP), 755
primitive (ISUP ITU), 499
primitive (ITUP), 760
HW_GROUP_UNBLOCKING_CONF
primitive (CTUP), 755
primitive (ISUP ITU), 499
primitive (ITUP), 761
HW_GROUP_UNBLOCKING_IND
primitive (CTUP), 755
primitive (ISUP ITU), 499
primitive (ITUP), 761
HW_GROUP_UNBLOCKING_REQ
primitive (CTUP), 755
primitive (ISUP ITU), 499
primitive (ITUP), 761
HW_GROUP_UNBLOCKING_RESP
primitive (CTUP), 755
primitive (ISUP ITU), 499
primitive (ITUP), 761
hybrid stack, 180, 181
hybrid stacks, 173, 181
I
I/O
activity, 459
multiplexing, 459
IAM message (ISUP)
circuit unblocking, 623, 712
continuity check, 613, 661, 692
length, 576
IAM message (TUP)
continuity check, 816
IDLE condition
ISUP, 596, 653, 685
TUP, 840
immediate release
TUP, 806
INAP service key, 274
inbound and outbound circuits, 558
inbound flow control, 72
incoming (SAM message), 809
incoming (SAO message), 809
incoming (TUP)
solicited information exchange, 811
incoming call (TUP)
immediate release, 806
successful setup, 807
unsuccessful setup, 805
incoming calls
suspend/resume messages, 659, 688
incoming reset
ISUP, 594
incoming with immediate release, 589
Inconsisent modes, 438
Inconsistent distribution, 438
inconsistent distribution modes, 438
information elements, 539
information exchange, 603
solicited, 604, 605
TUP, 810, 811
unsolicited, 606
information messages
solicited, 603
unsolicited, 603
INFORMATION_IND
primitive (CTUP), 756
primitive (ISUP ITU), 499
primitive (ITUP), 761
INFORMATION_REQ
primitive (CTUP), 756
primitive (ISUP ITU), 499
primitive (ITUP), 761
InitStatus return status, 474
interaction scenarios, 558
interactions handling, 559
interface
programming, 292
INTERNAL_ERROR, 474, 476
Inter-Process Communication (IPC)
buffer sizes, 71
buffering modes, 70, 71
buffers, 70
flow control, 72
accessors, 777
message classes, 777
primitives (BP mode), 762
ITU-T93
message set (ISUP), 431
ITU-T97
message set (ISUP), 431
K
Keep Alive Mechanism
GDI, 259
L
LAN failure
GDI, 259
LANs
dual LANs (GDI), 257
GDI (failure of one LAN), 258, 259
layer
TCAP transaction, 176
layers
M3UA, 78, 79
SCTP, 79
TCAP component, 176
length
invalid parameter length (TUP), 769
library
shared (ISUP), 435
shared (MTP3), 84
shared (SCCP), 113
shared (TCAP), 173
shared (TUP), 747
Timer, 293
linksets
combining, 82
Linux
directory names, 49
file names, 49
load balancing, 272
loadsharing, 186
algorithm, 41
MTP3, 98
multiple TCAP users and mutiple connections,
187
definition, 44
Local Point Code (LPC), 450, 516
Local Point Code (LPC) status, 559
logging
TTL, 281
LPC
object, 559
object states, 559
status, 559
LPC states, 559
LPC_NOT_FOUND, 475
M
M3UA
description, 78, 79
on Linux, 49
M3UA API
description, 78
effects of a switchover, 75
MAINTAINANCE_IND
primitive (ITUP), 761
MAINTENANCE_SYATEM_IND
primitive (CTUP), 756
MAINTENANCE_SYSTEM_IND
primitive (ISUP ANSI), 491
primitive (ISUP ITU), 500
T20_NOT_RUNNING, 733
MAINTENANCE_SYSTEM_IND values
BACKWARD_CHECK_TONE_ACK, 739
BLA_WHEN_IDLE, 740
COT_RECEIVED, 732, 739
CRS_STOP, 733
DCO_FAIL, 732
DCO_SUCCESS, 732
HW_BLOCKING, 738
HW_GROUP_BLOCKING, 737
HW_GROUP_UNBLOCKING, 737
HW_UNBLOCKING, 738
MN_BLOCKING, 738, 739, 740
MN_GROUP_BLOCKING, 737
MN_GROUP_UNBLOCKING, 737
MN_UNBLOCKING, 739, 740
PRIORITY_TO_GROUP_RESET, 738
RECV_ON_UNEQUIPPED_CIRCUIT, 733, 737
REL_RECEIVED, 739
RLC_AFTER_T17, 733, 738
RSC_AFTER_T17, 733
STOP_REQ, 733
T12_NOT_RUNNING, 739
896
897
898
setTraceOn(), 515
success of, 532
modifying
configuration (dynamic), 477, 750
MPT3
interactions handling, 559
LPC states, 559
MTP
transfer indications, 562
MTP Level 3
DPC available, 100
DPC congestion, 101
DPC unavailable, 99
DPC uncongested, 102
features, 78
link management, 82, 100, 101
message handling, 81, 98
MSU functions, 81, 98
network management, 81
primitives, 90
restart procedure, 103
route management, 82, 98
routing label, 98
services, 40
traffic management, 82
MTP_AVAILABLE_IND primitive, 510
MTP_CONGESTED_IND, 510
MTP_DPC_CONGESTED_IND primitive, 510
MTP_DPC_UNCONGESTED_IND primitive, 510
MTP_PAUSE_IND primitive, 510
MTP_RESTARTING_IND, 510
MTP_RESUME_IND primitive, 510
MTP_UNAVAILABLE_IND primitive, 510
MTP_UNCONGESTED_IND, 510
MTP_UPU_UNAVAILABLE_IND, 510
MTP2 OA&M API
array of active connections, 391
closing connections, 419
creating connections, 390
flow control, 395
function calls refused, 419
MTP2X_oamrecv(), 394, 395
no notifications received, 395
post-select phase, 391
pre-select phases, 391
receiving notifications, 395
requests, 394
scheduling connections, 391
MTP2 OA&M API functions
MTP2X_oamrecv(), 394, 395
899
SS7_ifclose(), 419
SS7_ifcnxhandler(), 391
MTP3, 559
access (ISUP), 448, 486
access (TUP), 751
blocking (ISUP), 543
interactions handling (ISUP), 559
releasing connection (ISUP), 538
status (ISUP), 510
MTP3 API
connections, 85, 95
description, 78
DPC available, 100
DPC congestion, 101
DPC uncongested, 102
effects of a switchover, 75
function calls refused, 96
guidelines, 78
indications, 90
local MTP restart, 103
local MTP unavailable, 103
MSU primitives, 98, 99
post-select phase, 88
pre-select phase, 87
primitives, 89, 100, 102, 103
receive IPC buffer, 92, 97
receiving MSUs, 98
requests, 90
return values, 100, 103
scheduling, 86
scheduling functions, 87
select(), 87
send IPC buffer, 94, 97
sending MSUs, 94, 98
terminating a service, 96
tuning IPC buffers, 97
MTP3 API functions
MTPL3_recv(), 92
MTPL3_send(), 94
SS7_ifclose(), 96
SS7_ifcnxhandler(), 87
SS7_ifctrl(), 97
SS7_ifselectmask(), 87
MTP3 connections
closing, 96
cnxId, 86
creating, 85
destroying all related entities, 96
in an array, 88
scheduling, 87
MTP3 OA&M API
an array of active connections, 391
closing connections, 419
collecting statistics, 403
configuring entities, 396
creating connections, 390
function calls refused, 419
post-select phase, 391
receiving notifications, 406
requests, 402
scheduling connections, 391
ss7errno, 402, 405, 407, 413, 416, 418
MTP3 OA&M API functions
MTL3_oamstat(), 405
MTPL3_oamcmd(), 402, 405, 406, 413, 416, 417
SS7_if close(), 419
SS7_ifcnxahndler(), 391
SS7_ifselectmask(), 391
MTP3 primitives, 559
MTP_AVAILABLE_IND, 510
MTP_CONGESTED_IND, 510
MTP_DPC_CONGESTED_IND, 510
MTP_DPC_UNCONGESTED_IND, 510
MTP_PAUSE_IND, 510
MTP_RESTARTING_IND, 510
MTP_RESUME_IND, 510
MTP_UNAVAILABLE_IND, 510
MTP_UNCONGESTED_IND, 510
MTP_UPU_UNAVAILABLE_IND, 510
MTP3 routing
providing the SIO, 94
multiple APIs, 38, 62, 67
N
network events, 537
Network Service Data Unit (NSDU), 108
Network Service Part (NSP), 40, 106, 178
NETWORK_RESOURCE_MGT_IND
primitive (ISUP ITU), 500
NETWORK_RESOURCE_MGT_REQ
primitive (ISUP ITU), 500
new() method, 538
NO_CONFIG, 476
NO_ERROR, 476
NO_MORE_MEMORY
return status, 538
non-controlling side
dual seizure (TUP), 800
NOP
definition, 292
normal
call release (ISUP), 591, 649, 682
notifications
GDI, 253
number
of maximum invocations, 241
of maximum simultaneous dialogues, 243
of messages waiting to be received, 73
of scheduling loops, 67
O
OA&M
configuration, 386
control, 386, 402, 413
entities, 388
notifications, 389
requests, 389
services, 386
states, 388
statistics, 386
OA&M API
addressing, 410
array of active connections, 391, 422
closing connections, 419, 428
collecting MTP3 statistics, 403
collecting SCCP statistics, 414
collecting TCAP statistics, 426
configuring entities, 396
creating connections, 390, 421
flow control, 395
function calls refused, 419
guidelines, 385
post-select phase, 391, 422
pre-select phase, 391, 422
receiving MTP2 notifications, 395
receiving MTP3 notifications, 406
receiving SCCP notifications, 417
scheduling connections, 391, 422
sending MTP2 requests, 394
sending requests, 402
sending SCCP requests, 413
sending TCAP requests, 423
ss7errno, 402, 405, 407, 413, 416, 418
OA&M API functions
MTL3_oamstat(), 405
MTP2X_oamrecv(), 395
MTPL3_oamcmd(), 402, 405, 406, 413, 416, 417
MTPL3_oamrecv(), 406
900
SCCP_oamcmd(), 413
SCCP_oamrecv(), 417
SCCP_oamstat(), 415
SS7_ifclose(), 419
SS7_ifcnxhandler(), 391
TCX_cnx_handler(), 422
TCX_control(), 424
TCX_recv(), 426
TCX_select_mask(), 422
OA&M APIs
as management APIs, 38
services provided, 42
OA&M entities
addressing, 388, 397, 410
configuring, 396
destroying entities, 419
managing the SS7 stack, 388
MTP3, 396
notifications, 389
object-oriented structure, 388
performing operations, 388
requests, 389
returning replies, 388
SCCP, 408
state of, 388
OA&M notifications
contents, 406
generated, 395
MTP2, 395
MTP3, 406
SCCP, 417
spontaneous, 389
OA&M requests
MTP2, 394
MTP3, 402
perform operation, 389
return notification, 389
SCCP, 413
TCAP, 424
OA&M states
changing, 388, 412
mode of notification, 388, 412
MTP3, 397
OA&M statistics
collecting, 426
entity relationship, 403, 414
immediate, 403, 414, 424
modes of collecting, 403, 414
MTP3, 403
901
on occurrence, 403
periodic, 403, 414, 424
report modes, 403, 414
SCCP, 414
TCAP, 426
OAM API
effect of VPC, 47
object
destination, 397
links, 397
linkset, 397
local_alias, 397
LPC, 559
mtp, 397
route, 397
SO_FAILED_DEST, 409
SO_GT_TRANSLATOR, 409
SO_LOCAL_USER, 409
SO_REMOTE_SP, 409
SO_REMOTE_USER, 409
SO_SCCP, 409
SO_VIRTUAL_USER, 409
virtual_pc, 397
object classes
ActivityObject, 461, 463
base class, 434
derived classes, 434
for ISUP messages, 433
inheritance, 434
IsupBPProbe, 448
IsupMgr, 448
IsupMsg, 511
IsupProbe, 448
IsupSMProbe, 448
IsupUserMsg, 512
parent classes, 434
ParmValue, 522, 539
probe classes, 448
object model
ISUP, 446
objects
additional information, 539
behavior of, 434
contents, 434
deleting (ISUP), 538
destroying, 434
DPC, 563
general guidelines, 434
inactive, 547
supported, 533
parameters (TUP), 781
invalid length, 769
rangeAndStatus, 795
partitioning, 271
PASS_ALONG_IND
primitive (ISUP ANSI), 491
primitive (ISUP ITU), 500
PASS_ALONG_MSG_IND
primitive (BP Mode), 505
PASS_ALONG_REQ
primitive (BP Mode), 505
primitive (ISUP ANSI), 491
primitive (ISUP ITU), 500
pass-along requests, 612
normal, 611
path
outbound (TUP), 786
paths
back-pressure, 544
flow control, 544
inbound, 544
outbound, 544
PCA
definition, 292
peer node, 649, 682
PIC
definition, 293
PIC Framework
definition, 293
PIC/AG
API, 43
definition, 292, 293
plug-in
definition, 293
Plug-In Container
definition, 293
point code
alias, 44
PRE_REL_INFORMATION_IND
902
SS7_Stack process, 55
probe
SM, 566
probe objects
activating, 452
base class, 448
bound to HP Opencall SS7 Stack, 451
closing, 467
creating, 451
derived classes, 448
destroying, 467
exchanging primitives and messages, 466, 486
exchanging primitives and messages (ISUP), 524
interaction with HP Opencall Library, 486
lifespan, 467
memory shortage (ISUP), 538
opening, 451
receiving primitives, 527
recreating and re-opening, 467
relationship to message classes and IsupMgr, 524
representing connections, 436
scheduling, 448, 459
selecting access modes (ISUP), 437
using activity object, 463
probe objects (TUP)
exchanging primitives and messages, 749
PROBE_NOT_OPEN, 476
probes
BP, 568
Bypass, 568
SM, 569
probes (ISUP)
BP, 570
procedures
call setup (ISUP), 583, 585
call teardown (ISUP), 583
continuity check (ISUP), 558
procedures (TUP)
call setup, 798
call teardown (TUP)
procedures, 798
processes
HA, 55
SS7_Stack, 55
programming
interface, 292
PROGRESS_IND
primitive (ISUP ITU), 501
PROGRESS_REQ
primitive (ISUP ITU), 501
propagating
states, 549
protocol event, 73, 505
protocols
ANSI, 431
protocols (ISUP)
ITU-T, 431
R
race condition
ISUP, 537
rangeAndStatus
parameter (ISUP), 571, 599, 628, 632, 717, 718,
719, 725
RELEASE_REQ
primitive (CTUP), 754
primitive (ISUP ANSI), 491
primitive (ISUP ITU), 501
primitive (ITUP), 759
RELEASE_RESP
primitive (CTUP), 754
primitive (ISUP ANSI), 491
primitive (ISUP ITU), 501
primitive (ITUP), 759
RELEASE_RESP primitive, 546
releaseCircuit() method, 530
remote DPC, 563
status indications, 563
REMOVE_LOOP_IND
primitive (CTUP), 752
primitive (ISUP ITU), 501
primitive (ITUP), 758
REMOVE_LOOP_IND_ACK
primitive (CTUP), 752
primitive (ISUP ITU), 501
primitive (ITUP), 758
REMOVE_TRANSCEIVER_IND
primitive (CTUP), 753
primitive (ISUP ANSI), 492
primitive (ISUP ITU), 501
primitive (ITUP), 758
REMOVE_TRANSCEIVER_IND_ACK
primitive (CTUP), 753
primitive (ISUP ANSI), 492
primitive (ISUP ITU), 501
primitive (ITUP), 758
rescheduling
See scheduling.
reset (ISUP)
additional information, 599
ANSI standard, 596
circuit, 596, 601, 653, 685
circuit group, 599, 600
double, 601
failure to receive RLC, 653, 685
from application, 598
from network, 597
HP Opencall initiated, 596, 653, 685
incoming, 594
ITU-T standard, 596
successful, 596, 597, 598
reset (TUP)
failure to receive RLC, 846
successful, 845
904
INVALID_CLASSNAME, 475
INVALID_SET_NAME, 475
IPC_SEND_FULL, 476, 546
LPC_NOT_FOUND, 475
managed by IsupMgr, 532
management, 540
MAX_PROBE_NUMBER_EXCEEDED, 475
NO_CONFIG, 476
NO_ERROR, 474, 476
NO_ISUP_CONFIG, 474
NO_MORE_MEMORY, 474, 538
PROBE_NOT_OPEN, 476
unexpected values, 537
WRONG_PROBE_TYPE, 475
WRONG_STATE, 537
return values
examining, 76
MTP3 API, 100, 103
TCAP API, 248
reverse hybrid stack, 180, 181
RLC message (TUP)
not received, 846
round robin algorithm, 265, 273
rounding
parameter length (TUP), 781
rounding length, 781
round-robin algorithm, 187
routing
MTP3 routing label, 98
SCCP end-to-end, 106
RSC message
stopping retransmission, 562, 565
S
SAM message
outgoing calls (ISUP), 681
SAM message (ISUP)
incoming calls, 681
using, 680
SAM message (TUP), 808, 809
incoming, 809
outgoing, 808
SAO message (TUP), 808, 809
incoming, 809
outgoing, 808
SCCP
addressing, 109
connectionless services, 108
description, 106
end-to-end signalling, 745
features, 108
Global Title, 106, 109, 125
message handling, 108
primitives, 119
relay, 111
restart, 109
retransmitting messages, 153
return option, 108, 153
routing, 106, 108
services, 40, 106, 745
signalling point status management, 109, 156
subsystem management, 106, 109
subsystem status management, 159
subsystem status test, 109, 161
subsystems, 110, 163
tutorials, 168
users, 106
SCCP API
addressing, 135, 147
ANSI Global Title structure, 126
as stack API, 38
confirmations, 120
congested DPC, 158
connectionless services, 113, 130
connections, 114
effect of VPC, 47
effects of a switchover, 74
function calls refused, 131
Global Title, 126
guidelines, 105
indications, 120
in-sequence message transfer, 130
IPC buffer values, 132
ITU-T Global Title structure, 126
masks, 87, 116
no GT translation, 147
pre-select phase, 116
primitives, 119, 144
receive IPC buffer, 127, 132
receiving primitives, 126
requests, 120
rescheduling, 131
response, 120
return option, 153
routing, 135
routing mechaism, 144, 149
scheduling, 116
send IPC buffer, 131, 132
sending SCCP primitives, 127, 144
services provided, 40
signalling point, 156, 157, 158
structure of message parameters, 120
subsystems, 160, 161, 164, 166, 167
terminating a service, 131
SCCP API functions
SCCP_recv(), 127
SCCP_send(), 130
SS7_ifclose(), 131
SS7_ifcnxhandler(), 116
SS7_ifcreate(), 390
SS7_ifctrl(), 132
SS7_ifselectmask(), 116
SCCP connections
and their IPC buffers, 132
closing, 84, 113, 131
creating, 114
destroying all related entites, 131
in an array, 117
scheduling, 116
SCCP OA&M API
addressing, 410
array of active connections, 391
closing connections, 419
collecting statistics, 414
controlling, 413
creating connections, 390
function calls refused, 419
notifications, 417
post-select phase, 391
pre-select phase, 391
receiving notifications, 417
requests, 413
scheduling connections, 391
sending requests, 413
translator id, 411
SCCP OA&M API functions
SCCP_oamcmd(), 413
SCCP_oamrecv(), 418
SCCP_oamstat(), 415
SS7_ifclose(), 419
SS7_ifcnxhandler(), 391
SS7_ifselect(), 391
SCCP routing
activate, 144, 149
DPC and SSN, 153
mechaism for incoming messages, 149
mechaism for outgoing messages, 144
routing indicator, 148
906
sockets, 65
TCAP connections, 199
timeout value, 66, 459
work, 461
SCTP
description, 79
on Linux, 49
segmentation
mechanism, 576
outgoing messages, 576
seizure (TUP)
dual, 799, 800, 801
select
See scheduling
select() method, 460
send() method, 466
sending
CFN messages, 574
UCIC messages, 574
sendPossible() method, 463, 546
services
provided by MTP3 API, 40
provided by OA&M APIs, 42
provided by SCCP API, 40
provided by TCAP API, 41
session
definition, 293
set value
accessor (TUP), 768
setBufferingMode() method, 542
setCircuitState() method, 547
setHighTransitTime() method, 542
setIPCRecvSize() method, 542
setIPCSendSize() method, 542
setLowTransitTime() method, 542
setNonBufferingMode() method, 542
setTraceOff() method, 515
setTraceOn method, 515
setup (TUP)
procedures, 798
unsuccessful, 798
SETUP request (ISUP)
dual seizure, 586, 587
failure to receive ACM, 588
locally refused, 585
SETUP_CONF
primitive (CTUP), 751
primitive (ISUP ANSI), 493
primitive (ISUP ITU), 502
primitive (ITUP), 757
SETUP_FAILURE_IND
on Linux, 49
SCTP layer, 79
simultaneous
TCAP dialogues, 243
SM mode
example (ISUP), 480
example (TUP), 880
SM probe, 566
SM probes, 569
sockets, 65
SOFT_RESET_REQ
primitive (ISUP ANSI), 493
SOFTRESET_REQ
primitive (ISUP ITU), 502
software components
core (ISUP), 433
generic (ISUP), 432
HP Opencall ISUP API, 432
HP Opencall ISUP Circuit Manager, 433
HP Opencall ISUP Supported Messages, 433
metadata (ISUP), 433
specific (ISUP), 433
software version
supplied metadata, 513
software versions
ANSI, 431
software versions (ISUP)
ITU-T, 431
solicited
information exchange (TUP), 810, 811
solicited information exchange
failure, 604, 605
SOLICITED_INFO_CONF
primitive (CTUP), 753
primitive (ISUP ANSI), 493
primitive (ISUP ITU), 502
primitive (ITUP), 759
SOLICITED_INFO_IND
primitive (CTUP), 753
primitive (ISUP ANSI), 493
primitive (ISUP ITU), 502
primitive (ITUP), 759
SOLICITED_INFO_REQ
primitive (CTUP), 753
primitive (ISUP ANSI), 493
primitive (ISUP ITU), 502
primitive (ITUP), 759
SOLICITED_INFO_RESP
primitive (CTUP), 753
primitive (ISUP ANSI), 493
908
states
DPC, 563
LPC, 559
LPC objects, 559
propagating, 549
recovering, 552
synchronizing, 550
transitions, 560, 563
status
DPC, 559
LPC, 559
status classes
See return status.
status indications, 563
remote DPC, 563
STOP_CHECK_TONE_IND
primitive (CTUP), 753
primitive (ISUP ANSI), 494
primitive (ISUP ITU), 503
primitive (ITUP), 759
STOP_CHECK_TONE_IND_ACK
primitive (CTUP), 753
primitive (ISUP ANSI), 494
primitive (ISUP ITU), 503
primitive (ITUP), 759
STOP_CONF
primitive (CTUP), 756
primitive (ISUP ANSI), 494
primitive (ISUP ITU), 503
primitive (ITUP), 761
STOP_REQ
primitive (CTUP), 756
primitive (ISUP ANSI), 494
primitive (ISUP ITU), 503
primitive (ITUP), 761
STOP_REQ primitive, 546
stopping
retransmission of REL messages, 562, 565
retransmission of RSC messages, 562, 565
subsequentNumber
parameter (TUP), 773
substate
changes, 560
substates
managed, 560
subsystems
backup, 156
graceful withdrawal, 167
in service, 109, 161
management functions, 106
SW_GROUP_UNBLOCKING_REQ
primitive (CTUP), 756
primitive (ITUP), 761
SW_GROUP_UNBLOCKING_RESP
primitive (CTUP), 756
primitive (ITUP), 761
switchover
configuration, 547
effects on an application, 74
ISUP API, 75
M3UA API, 75
MTP3 API, 75
SCCP API, 74
TCAP API, 74
TUP API, 75
switchoverMTP3 API, 75
switchovers
GDI, 254
synchronizing
circuit states, 549, 550
states, 550
system requirements
buffered I/O, 53
CPU usage, 54
IPC, 52
memory, 53
object management, 52
optimized performance, 53
optimum performance, 52
performance, 52
performance path, 52
platform mechanism, 54
predictability, 52
resource access, 53
responding to SS7 network requests, 52
responding to STLM, 54
scheduling, 55
T
T2 expiry
suspend/resume messages, 691
T24 expiry
continuity recheck, 669, 699
T6 expiry
suspend/resume messages, 608
T8 expiry (TUP)
continuity recheck, 823
T9 timer (ISUP), 678
tables
dispatching, 276
911
TCX_put_component(), 216
TCX_recv(), 233, 428
TCX_select_mask(), 200, 422
TCX_send(), 230, 428
TLX_recv(), 239
TLX_send(), 238
TCAP Application Message Dispatcher
API, 41
disabling, 264
enabling, 264
functions, 270
guidelines, 283
header file, 269
TCAP dialogues
and exchanging components, 178
between TC-users, 178, 203
concurrent, 178
concurrent dialogues, 243
destination address, 219
dialogue handling primitives, 182, 219
dialogue ID, 203
dialogue Id, 243
dialogue portion, 178, 182
management, 242
originating address, 219
p-abort cause, 229
point code status, 229
pointer to dialog portion, 220
primitive type, 219
provider dialogue id, 219
realtionship with transactions, 220
report types, 229
service quality, 219
structure of dialogue portion, 224
structure of dialogue primitives, 219
structure of primitives, 224
structured, 203
termination type, 229
u-abort cause, 229
unstructured, 203
user dialogue id, 219
u-status, 229
withdrawal information, 229
TCAP function parameter
cnxId, 246
command, 246
context, 246
max_fd, 200
parameters, 247
TCAP management
API memory, 244
component, 240
dialogue, 241
IPC buffers, 246
switchover, 185
timer mechanisms, 248
transaction, 244
TCAP OA&M API
array of active connections, 422
closing connections, 428
collecting statistics, 426
creating connection, 421
913
performance, 52
procedures, 52
subsystem status test procedure, 161
system, 54
threads
designing for, 63
timer activity
ISUP, 583
TUP, 798
timer value
GDI, 259
TimerLib
definition, 293
timers
ISUP, 726
tolerant
FTC, 292
TONE_DISAPPEARS_ACK
primitive (CTUP), 753
primitive (ISUP ANSI), 494
primitive (ISUP ITU), 504
primitive (ITUP), 759
tracing, 515
TCAP Application Message Dispatcher, 281
TTL, 281
Traffic Discriminator
CIC-based distribution, 438
TDi, 430
transfer indications
MTP, 562
transitions
state, 560, 563
TTC flavor, 678
TTL
description, 281
TUP
accessors, 768
applications, 41, 745
China flavor, 743
circuit states, 798
continuity recheck, 820
decode function, 767
differences between flavors, 743
encode function, 767
FSMs, 792
IsupInfoMgr class, 770
IsupMsg class, 770
ITU-T flavor, 743
makefile, 881
message flow, 798
915
values
GDI timer value, 259
SETUP_FAILURE_IND, 730
Virtual Point Code
definition, 46
Virtual User
definition, 47
VPC
definition, 46
OAM API, 47
SCCP API, 47
tutorials, 47
VU
definition, 47
W
work
measurement, 461
WRONG_PROBE_TYPE, 475
WRONG_STATE
return status, 537
916