1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
|
/*
*
* ===================================
* HARP | Host ATM Research Platform
* ===================================
*
*
* This Host ATM Research Platform ("HARP") file (the "Software") is
* made available by Network Computing Services, Inc. ("NetworkCS")
* "AS IS". NetworkCS does not provide maintenance, improvements or
* support of any kind.
*
* NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
* SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
* In no event shall NetworkCS be responsible for any damages, including
* but not limited to consequential damages, arising from or relating to
* any use of the Software or related support.
*
* Copyright 1994-1998 Network Computing Services, Inc.
*
* Copies of this Software may be made, however, the above copyright
* notice must be reproduced on all copies.
*
* @(#) $FreeBSD$
*
*/
/*
* ATM Forum UNI 3.0/3.1 Signalling Manager
* ----------------------------------------
*
* Message formatting blocks
*
*/
#ifndef _UNI_SIG_MSG_H
#define _UNI_SIG_MSG_H
#define UNI_MSG_DISC_Q93B 0x09
#define UNI_MSG_MIN_LEN 9
/*
* Values for Q.2931 message type.
*/
#define UNI_MSG_CALP 0x02
#define UNI_MSG_CONN 0x07
#define UNI_MSG_CACK 0x0F
#define UNI_MSG_SETU 0x05
#define UNI_MSG_RLSE 0x4D
#define UNI_MSG_RLSC 0x5A
#define UNI_MSG_RSTR 0x46
#define UNI_MSG_RSTA 0x4E
#define UNI_MSG_STAT 0x7D
#define UNI_MSG_SENQ 0x75
#define UNI_MSG_ADDP 0x80
#define UNI_MSG_ADPA 0x81
#define UNI_MSG_ADPR 0x82
#define UNI_MSG_DRPP 0x83
#define UNI_MSG_DRPA 0x84
/*
* Values for information element identifier.
*/
#define UNI_IE_CAUS 0x08
#define UNI_IE_CLST 0x14
#define UNI_IE_EPRF 0x54
#define UNI_IE_EPST 0x55
#define UNI_IE_AALP 0x58
#define UNI_IE_CLRT 0x59
#define UNI_IE_CNID 0x5A
#define UNI_IE_QOSP 0x5C
#define UNI_IE_BHLI 0x5D
#define UNI_IE_BBCP 0x5E
#define UNI_IE_BLLI 0x5F
#define UNI_IE_BLSH 0x60
#define UNI_IE_BNSH 0x61
#define UNI_IE_BSDC 0x62
#define UNI_IE_BRPI 0x63
#define UNI_IE_CGAD 0x6C
#define UNI_IE_CGSA 0x6D
#define UNI_IE_CDAD 0x70
#define UNI_IE_CDSA 0x71
#define UNI_IE_TRNT 0x78
#define UNI_IE_RSTI 0x79
/*
* Masks for information element extension in bit 8
*/
#define UNI_IE_EXT_BIT 0x80
#define UNI_IE_EXT_MASK 0x7F
/*
* Signalling message in internal format.
*/
#define UNI_MSG_IE_CNT 22
struct unisig_msg {
u_int msg_call_ref;
u_char msg_type;
u_char msg_type_flag;
u_char msg_type_action;
int msg_length;
struct ie_generic *msg_ie_vec[UNI_MSG_IE_CNT];
};
#define UNI_MSG_CALL_REF_RMT 0x800000
#define UNI_MSG_CALL_REF_MASK 0x7FFFFF
#define UNI_MSG_CALL_REF_GLOBAL 0
#define UNI_MSG_CALL_REF_DUMMY 0x7FFFFF
#define EXTRACT_CREF(x) \
((x) & UNI_MSG_CALL_REF_RMT ? (x) & UNI_MSG_CALL_REF_MASK : (x) | UNI_MSG_CALL_REF_RMT)
#define GLOBAL_CREF(x) (((x) & UNI_MSG_CALL_REF_MASK) == UNI_MSG_CALL_REF_GLOBAL)
#define DUMMY_CREF(x) (((x) & UNI_MSG_CALL_REF_MASK) == UNI_MSG_CALL_REF_DUMMY)
#define UNI_MSG_TYPE_FLAG_MASK 1
#define UNI_MSG_TYPE_FLAG_SHIFT 4
#define UNI_MSG_TYPE_ACT_CLEAR 0
#define UNI_MSG_TYPE_ACT_DISC 1
#define UNI_MSG_TYPE_ACT_RPRT 2
#define UNI_MSG_TYPE_ACT_RSVD 3
#define UNI_MSG_TYPE_ACT_MASK 3
#define UNI_MSG_IE_AALP 0
#define UNI_MSG_IE_CLRT 1
#define UNI_MSG_IE_BBCP 2
#define UNI_MSG_IE_BHLI 3
#define UNI_MSG_IE_BLLI 4
#define UNI_MSG_IE_CLST 5
#define UNI_MSG_IE_CDAD 6
#define UNI_MSG_IE_CDSA 7
#define UNI_MSG_IE_CGAD 8
#define UNI_MSG_IE_CGSA 9
#define UNI_MSG_IE_CAUS 10
#define UNI_MSG_IE_CNID 11
#define UNI_MSG_IE_QOSP 12
#define UNI_MSG_IE_BRPI 13
#define UNI_MSG_IE_RSTI 14
#define UNI_MSG_IE_BLSH 15
#define UNI_MSG_IE_BNSH 16
#define UNI_MSG_IE_BSDC 17
#define UNI_MSG_IE_TRNT 18
#define UNI_MSG_IE_EPRF 19
#define UNI_MSG_IE_EPST 20
#define UNI_MSG_IE_ERR 21
#define msg_ie_aalp msg_ie_vec[UNI_MSG_IE_AALP]
#define msg_ie_clrt msg_ie_vec[UNI_MSG_IE_CLRT]
#define msg_ie_bbcp msg_ie_vec[UNI_MSG_IE_BBCP]
#define msg_ie_bhli msg_ie_vec[UNI_MSG_IE_BHLI]
#define msg_ie_blli msg_ie_vec[UNI_MSG_IE_BLLI]
#define msg_ie_clst msg_ie_vec[UNI_MSG_IE_CLST]
#define msg_ie_cdad msg_ie_vec[UNI_MSG_IE_CDAD]
#define msg_ie_cdsa msg_ie_vec[UNI_MSG_IE_CDSA]
#define msg_ie_cgad msg_ie_vec[UNI_MSG_IE_CGAD]
#define msg_ie_cgsa msg_ie_vec[UNI_MSG_IE_CGSA]
#define msg_ie_caus msg_ie_vec[UNI_MSG_IE_CAUS]
#define msg_ie_cnid msg_ie_vec[UNI_MSG_IE_CNID]
#define msg_ie_qosp msg_ie_vec[UNI_MSG_IE_QOSP]
#define msg_ie_brpi msg_ie_vec[UNI_MSG_IE_BRPI]
#define msg_ie_rsti msg_ie_vec[UNI_MSG_IE_RSTI]
#define msg_ie_blsh msg_ie_vec[UNI_MSG_IE_BLSH]
#define msg_ie_bnsh msg_ie_vec[UNI_MSG_IE_BNSH]
#define msg_ie_bsdc msg_ie_vec[UNI_MSG_IE_BSDC]
#define msg_ie_trnt msg_ie_vec[UNI_MSG_IE_TRNT]
#define msg_ie_eprf msg_ie_vec[UNI_MSG_IE_EPRF]
#define msg_ie_epst msg_ie_vec[UNI_MSG_IE_EPST]
#define msg_ie_err msg_ie_vec[UNI_MSG_IE_ERR]
/*
* Information element header.
*/
struct ie_hdr {
u_char ie_hdr_ident;
u_char ie_hdr_coding;
u_char ie_hdr_flag;
u_char ie_hdr_action;
int ie_hdr_length;
int ie_hdr_err_cause;
struct ie_generic *ie_hdr_next;
};
#define UNI_IE_HDR_LEN 4
#define UNI_IE_CODE_CCITT 0
#define UNI_IE_CODE_STD 3
#define UNI_IE_CODE_MASK 3
#define UNI_IE_CODE_SHIFT 5
#define UNI_IE_FLAG_MASK 1
#define UNI_IE_FLAG_SHIFT 4
#define UNI_IE_ACT_CLEAR 0
#define UNI_IE_ACT_DIS 1
#define UNI_IE_ACT_RPRT 2
#define UNI_IE_ACT_DMSGIGN 5
#define UNI_IE_ACT_DMSGRPRT 6
#define UNI_IE_ACT_MASK 7
/*
* ATM AAL parameters information element in internal format.
*/
struct ie_aalp {
int8_t ie_aal_type;
union {
struct aal_type_1_parm {
u_char subtype;
u_char cbr_rate;
u_short multiplier;
u_char clock_recovery;
u_char error_correction;
u_char struct_data_tran;
u_char partial_cells;
} type_1;
struct aal_type_4_parm {
int32_t fwd_max_sdu;
int32_t bkwd_max_sdu;
int32_t mid_range;
u_char mode;
u_char sscs_type;
} type_4;
struct aal_type_5_parm {
int32_t fwd_max_sdu;
int32_t bkwd_max_sdu;
u_char mode;
u_char sscs_type;
} type_5;
struct user_aal_type {
u_char aal_info[4];
} type_user;
} aal_u;
};
#define UNI_IE_AALP_AT_AAL1 1
#define UNI_IE_AALP_AT_AAL3 3
#define UNI_IE_AALP_AT_AAL5 5
#define UNI_IE_AALP_AT_AALU 16
#define UNI_IE_AALP_A1_ST_NULL 0
#define UNI_IE_AALP_A1_ST_VCE 1
#define UNI_IE_AALP_A1_ST_SCE 2
#define UNI_IE_AALP_A1_ST_ACE 3
#define UNI_IE_AALP_A1_ST_HQA 4
#define UNI_IE_AALP_A1_ST_VID 5
#define UNI_IE_AALP_A1_CB_64 1
#define UNI_IE_AALP_A1_CB_DS1 4
#define UNI_IE_AALP_A1_CB_DS2 5
#define UNI_IE_AALP_A1_CB_32064 6
#define UNI_IE_AALP_A1_CB_DS3 7
#define UNI_IE_AALP_A1_CB_97728 8
#define UNI_IE_AALP_A1_CB_E1 16
#define UNI_IE_AALP_A1_CB_E2 17
#define UNI_IE_AALP_A1_CB_E3 18
#define UNI_IE_AALP_A1_CB_139264 19
#define UNI_IE_AALP_A1_CB_N64 64
#define UNI_IE_AALP_A1_CR_NULL 0
#define UNI_IE_AALP_A1_CR_SRTS 1
#define UNI_IE_AALP_A1_CR_ACR 2
#define UNI_IE_AALP_A1_EC_NULL 0
#define UNI_IE_AALP_A1_EC_FEC 1
#define UNI_IE_AALP_A1_SD_NULL 0
#define UNI_IE_AALP_A1_SD_SDT 1
#define UNI_IE_AALP_A3_R_MASK 1023
#define UNI_IE_AALP_A3_R_SHIFT 16
#define UNI_IE_AALP_A5_M_MSG 1
#define UNI_IE_AALP_A5_M_STR 2
#define UNI_IE_AALP_A5_ST_NULL 0
#define UNI_IE_AALP_A5_ST_AO 1
#define UNI_IE_AALP_A5_ST_NAO 2
#define UNI_IE_AALP_A5_ST_FR 4
/*
* ATM user cell rate information element in internal format.
*/
struct ie_clrt {
int32_t ie_fwd_peak;
int32_t ie_bkwd_peak;
int32_t ie_fwd_peak_01;
int32_t ie_bkwd_peak_01;
int32_t ie_fwd_sust;
int32_t ie_bkwd_sust;
int32_t ie_fwd_sust_01;
int32_t ie_bkwd_sust_01;
int32_t ie_fwd_burst;
int32_t ie_bkwd_burst;
int32_t ie_fwd_burst_01;
int32_t ie_bkwd_burst_01;
int8_t ie_best_effort;
int8_t ie_tm_options;
};
#define UNI_IE_CLRT_FWD_PEAK_ID 130
#define UNI_IE_CLRT_BKWD_PEAK_ID 131
#define UNI_IE_CLRT_FWD_PEAK_01_ID 132
#define UNI_IE_CLRT_BKWD_PEAK_01_ID 133
#define UNI_IE_CLRT_FWD_SUST_ID 136
#define UNI_IE_CLRT_BKWD_SUST_ID 137
#define UNI_IE_CLRT_FWD_SUST_01_ID 144
#define UNI_IE_CLRT_BKWD_SUST_01_ID 145
#define UNI_IE_CLRT_FWD_BURST_ID 160
#define UNI_IE_CLRT_BKWD_BURST_ID 161
#define UNI_IE_CLRT_FWD_BURST_01_ID 176
#define UNI_IE_CLRT_BKWD_BURST_01_ID 177
#define UNI_IE_CLRT_BEST_EFFORT_ID 190
#define UNI_IE_CLRT_TM_OPTIONS_ID 191
#define UNI_IE_CLRT_TM_FWD_TAG 0x01
#define UNI_IE_CLRT_TM_BKWD_TAG 0x02
/*
* Broadband bearer capability information element in internal format.
*/
struct ie_bbcp {
int8_t ie_bearer_class;
int8_t ie_traffic_type;
int8_t ie_timing_req;
int8_t ie_clipping;
int8_t ie_conn_config;
};
#define UNI_IE_BBCP_BC_BCOB_A 1
#define UNI_IE_BBCP_BC_BCOB_C 3
#define UNI_IE_BBCP_BC_BCOB_X 16
#define UNI_IE_BBCP_BC_MASK 0x1F
#define UNI_IE_BBCP_TT_NIND 0
#define UNI_IE_BBCP_TT_CBR 1
#define UNI_IE_BBCP_TT_VBR 2
#define UNI_IE_BBCP_TT_MASK 3
#define UNI_IE_BBCP_TT_SHIFT 2
#define UNI_IE_BBCP_TR_NIND 0
#define UNI_IE_BBCP_TR_EER 1
#define UNI_IE_BBCP_TR_EENR 2
#define UNI_IE_BBCP_TR_RSVD 3
#define UNI_IE_BBCP_TR_MASK 3
#define UNI_IE_BBCP_SC_NSUS 0
#define UNI_IE_BBCP_SC_SUS 1
#define UNI_IE_BBCP_SC_MASK 3
#define UNI_IE_BBCP_SC_SHIFT 5
#define UNI_IE_BBCP_CC_PP 0
#define UNI_IE_BBCP_CC_PM 1
#define UNI_IE_BBCP_CC_MASK 3
/*
* Broadband high layer information information element in internal
* format.
*/
struct ie_bhli {
int8_t ie_type;
u_char ie_info[8];
};
#define UNI_IE_BHLI_TYPE_ISO 0
#define UNI_IE_BHLI_TYPE_USER 1
#define UNI_IE_BHLI_TYPE_HLP 2
#define UNI_IE_BHLI_TYPE_VSA 3
#define UNI_IE_BHLI_HLP_LEN 4
#define UNI_IE_BHLI_VSA_LEN 7
/*
* Broadband low-layer information information element in internal
* format.
*/
struct ie_blli {
int8_t ie_l1_id;
int8_t ie_l2_id;
int8_t ie_l2_mode;
int8_t ie_l2_q933_use;
int8_t ie_l2_window;
int8_t ie_l2_user_proto;
int8_t ie_l3_id;
int8_t ie_l3_mode;
int8_t ie_l3_packet_size;
int8_t ie_l3_window;
int8_t ie_l3_user_proto;
int16_t ie_l3_ipi;
int8_t ie_l3_snap_id;
u_char ie_l3_oui[3];
u_char ie_l3_pid[2];
};
#define UNI_IE_BLLI_L1_ID 1
#define UNI_IE_BLLI_L2_ID 2
#define UNI_IE_BLLI_L3_ID 3
#define UNI_IE_BLLI_LID_MASK 3
#define UNI_IE_BLLI_LID_SHIFT 5
#define UNI_IE_BLLI_LP_MASK 31
#define UNI_IE_BLLI_L2P_ISO1745 1
#define UNI_IE_BLLI_L2P_Q921 2
#define UNI_IE_BLLI_L2P_X25L 6
#define UNI_IE_BLLI_L2P_X25M 7
#define UNI_IE_BLLI_L2P_LAPB 8
#define UNI_IE_BLLI_L2P_HDLC1 9
#define UNI_IE_BLLI_L2P_HDLC2 10
#define UNI_IE_BLLI_L2P_HDLC3 11
#define UNI_IE_BLLI_L2P_LLC 12
#define UNI_IE_BLLI_L2P_X75 13
#define UNI_IE_BLLI_L2P_Q922 14
#define UNI_IE_BLLI_L2P_USER 16
#define UNI_IE_BLLI_L2P_ISO7776 17
#define UNI_IE_BLLI_L2MODE_NORM 1
#define UNI_IE_BLLI_L2MODE_EXT 2
#define UNI_IE_BLLI_L2MODE_SHIFT 5
#define UNI_IE_BLLI_L2MODE_MASK 3
#define UNI_IE_BLLI_Q933_ALT 0
#define UNI_IE_BLLI_L3P_X25 6
#define UNI_IE_BLLI_L3P_ISO8208 7
#define UNI_IE_BLLI_L3P_ISO8878 8
#define UNI_IE_BLLI_L3P_ISO8473 9
#define UNI_IE_BLLI_L3P_T70 10
#define UNI_IE_BLLI_L3P_ISO9577 11
#define UNI_IE_BLLI_L3P_USER 16
#define UNI_IE_BLLI_L3MODE_NORM 1
#define UNI_IE_BLLI_L3MODE_EXT 2
#define UNI_IE_BLLI_L3MODE_SHIFT 5
#define UNI_IE_BLLI_L3MODE_MASK 3
#define UNI_IE_BLLI_L3PS_16 4
#define UNI_IE_BLLI_L3PS_32 5
#define UNI_IE_BLLI_L3PS_64 6
#define UNI_IE_BLLI_L3PS_128 7
#define UNI_IE_BLLI_L3PS_256 8
#define UNI_IE_BLLI_L3PS_512 9
#define UNI_IE_BLLI_L3PS_1024 10
#define UNI_IE_BLLI_L3PS_2048 11
#define UNI_IE_BLLI_L3PS_4096 12
#define UNI_IE_BLLI_L3PS_MASK 15
#define UNI_IE_BLLI_L3IPI_SHIFT 6
#define UNI_IE_BLLI_L3IPI_SNAP 0x80
/*
* Call state information element in internal format.
*/
struct ie_clst {
int8_t ie_state;
};
#define UNI_IE_CLST_STATE_U0 0
#define UNI_IE_CLST_STATE_U1 1
#define UNI_IE_CLST_STATE_U3 3
#define UNI_IE_CLST_STATE_U6 6
#define UNI_IE_CLST_STATE_U8 8
#define UNI_IE_CLST_STATE_U9 9
#define UNI_IE_CLST_STATE_U10 10
#define UNI_IE_CLST_STATE_U11 11
#define UNI_IE_CLST_STATE_U12 12
#define UNI_IE_CLST_STATE_N0 0
#define UNI_IE_CLST_STATE_N1 1
#define UNI_IE_CLST_STATE_N3 3
#define UNI_IE_CLST_STATE_N6 6
#define UNI_IE_CLST_STATE_N8 8
#define UNI_IE_CLST_STATE_N9 9
#define UNI_IE_CLST_STATE_N10 10
#define UNI_IE_CLST_STATE_N11 11
#define UNI_IE_CLST_STATE_N12 12
#define UNI_IE_CLST_GLBL_REST0 0x00
#define UNI_IE_CLST_GLBL_REST1 0x3d
#define UNI_IE_CLST_GLBL_REST2 0x3e
#define UNI_IE_CLST_STATE_MASK 0x3f
/*
* Called party number information element in internal format.
*/
struct ie_cdad {
int8_t ie_type;
int8_t ie_plan;
Atm_addr ie_addr;
};
#define UNI_IE_CDAD_TYPE_UNK 0
#define UNI_IE_CDAD_TYPE_INTL 1
#define UNI_IE_CDAD_TYPE_MASK 7
#define UNI_IE_CDAD_TYPE_SHIFT 4
#define UNI_IE_CDAD_PLAN_E164 1
#define UNI_IE_CDAD_PLAN_NSAP 2
#define UNI_IE_CDAD_PLAN_MASK 15
/*
* Called party subaddress information element in internal format.
*/
struct ie_cdsa {
Atm_addr ie_addr;
};
#define UNI_IE_CDSA_TYPE_NSAP 0
#define UNI_IE_CDSA_TYPE_AESA 1
#define UNI_IE_CDSA_TYPE_MASK 7
#define UNI_IE_CDSA_TYPE_SHIFT 4
/*
* Calling party number information element in internal format.
*/
struct ie_cgad {
int8_t ie_type;
int8_t ie_plan;
int8_t ie_pres_ind;
int8_t ie_screen_ind;
Atm_addr ie_addr;
};
#define UNI_IE_CGAD_TYPE_UNK 0
#define UNI_IE_CGAD_TYPE_INTL 1
#define UNI_IE_CGAD_TYPE_MASK 7
#define UNI_IE_CGAD_TYPE_SHIFT 4
#define UNI_IE_CGAD_PLAN_E164 1
#define UNI_IE_CGAD_PLAN_NSAP 2
#define UNI_IE_CGAD_PLAN_MASK 15
#define UNI_IE_CGAD_PRES_ALLOW 0
#define UNI_IE_CGAD_PRES_RSTR 1
#define UNI_IE_CGAD_PRES_NNA 2
#define UNI_IE_CGAD_PRES_RSVD 3
#define UNI_IE_CGAD_PRES_MASK 3
#define UNI_IE_CGAD_PRES_SHIFT 5
#define UNI_IE_CGAD_SCR_UNS 0
#define UNI_IE_CGAD_SCR_UVP 1
#define UNI_IE_CGAD_SCR_UVF 2
#define UNI_IE_CGAD_SCR_NET 3
#define UNI_IE_CGAD_SCR_MASK 3
/*
* Calling party subaddress information element in internal format.
*/
struct ie_cgsa {
Atm_addr ie_addr;
};
#define UNI_IE_CGSA_TYPE_NSAP 0
#define UNI_IE_CGSA_TYPE_AESA 1
#define UNI_IE_CGSA_TYPE_MASK 7
#define UNI_IE_CGSA_TYPE_SHIFT 4
/*
* Cause information element in internal format.
*/
#define UNI_IE_CAUS_MAX_ID 24
#define UNI_IE_CAUS_MAX_QOS_SUB 24
struct ie_caus {
int8_t ie_loc;
int8_t ie_cause;
int8_t ie_diag_len;
u_int8_t ie_diagnostic[24];
};
#define UNI_IE_CAUS_LOC_USER 0
#define UNI_IE_CAUS_LOC_PRI_LCL 1
#define UNI_IE_CAUS_LOC_PUB_LCL 2
#define UNI_IE_CAUS_LOC_TRANSIT 3
#define UNI_IE_CAUS_LOC_PUB_RMT 4
#define UNI_IE_CAUS_LOC_PRI_RMT 5
#define UNI_IE_CAUS_LOC_INTL 7
#define UNI_IE_CAUS_LOC_BEYOND 10
#define UNI_IE_CAUS_LOC_MASK 15
#define UNI_IE_CAUS_UN_NS_SHIFT 3
#define UNI_IE_CAUS_UN_NS_MASK 1
#define UNI_IE_CAUS_UN_NA_SHIFT 2
#define UNI_IE_CAUS_UN_NA_MASK 1
#define UNI_IE_CAUS_UN_CAU_MASK 3
#define UNI_IE_CAUS_RR_USER 0
#define UNI_IE_CAUS_RR_IE 1
#define UNI_IE_CAUS_RR_INSUFF 2
#define UNI_IE_CAUS_RR_SHIFT 2
#define UNI_IE_CAUS_RR_MASK 31
#define UNI_IE_CAUS_RC_UNK 0
#define UNI_IE_CAUS_RC_PERM 1
#define UNI_IE_CAUS_RC_TRANS 2
#define UNI_IE_CAUS_RC_MASK 3
/*
* Cause codes from UNI 3.0, section 5.4.5.15
*/
#define UNI_IE_CAUS_UNO 1 /* Unallocated number */
#define UNI_IE_CAUS_NOTROUTE 2 /* No route to transit net */
#define UNI_IE_CAUS_NODROUTE 3 /* No route to destination */
#define UNI_IE_CAUS_BAD_VCC 10 /* VPI/VCI unacceptable */
#define UNI_IE_CAUS_NORM 16 /* Normal call clearing */
#define UNI_IE_CAUS_BUSY 17 /* User busy */
#define UNI_IE_CAUS_NORSP 18 /* No user responding */
#define UNI_IE_CAUS_REJECT 21 /* Call rejected */
#define UNI_IE_CAUS_CHANGED 22 /* Number changed */
#define UNI_IE_CAUS_CLIR 23 /* User rejects CLIR */
#define UNI_IE_CAUS_DORDER 27 /* Dest out of order */
#define UNI_IE_CAUS_INVNO 28 /* Invalid number format */
#define UNI_IE_CAUS_SENQ 30 /* Rsp to Status Enquiry */
#define UNI_IE_CAUS_NORM_UNSP 31 /* Normal, unspecified */
#define UNI_IE_CAUS_NA_VCC 35 /* VCC not available */
#define UNI_IE_CAUS_ASSIGN_VCC 36 /* VPCI/VCI assignment failure */
#define UNI_IE_CAUS_NORDER 38 /* Network out of order */
#define UNI_IE_CAUS_TEMP 41 /* Temporary failure */
#define UNI_IE_CAUS_DISCARD 43 /* Access info discarded */
#define UNI_IE_CAUS_NO_VCC 45 /* No VPI/VCI available */
#define UNI_IE_CAUS_UNAVAIL 47 /* Resource unavailable */
#define UNI_IE_CAUS_NO_QOS 49 /* QoS unavailable */
#define UNI_IE_CAUS_NO_CR 51 /* User cell rate not avail */
#define UNI_IE_CAUS_NO_BC 57 /* Bearer capability not auth */
#define UNI_IE_CAUS_NA_BC 58 /* Bearer capability n/a */
#define UNI_IE_CAUS_SERVICE 63 /* Service or opt not avail */
#define UNI_IE_CAUS_NI_BC 65 /* Bearer cap not implemented */
#define UNI_IE_CAUS_COMB 73 /* Unsupported combination */
#define UNI_IE_CAUS_CREF 81 /* Invalid call reference */
#define UNI_IE_CAUS_CEXIST 82 /* Channel does not exist */
#define UNI_IE_CAUS_IDEST 88 /* Incompatible destination */
#define UNI_IE_CAUS_ENDPT 89 /* Invalid endpoint reference */
#define UNI_IE_CAUS_TRNET 91 /* Invalid transit net */
#define UNI_IE_CAUS_APPEND 92 /* Too many pending add party */
#define UNI_IE_CAUS_UAAL 93 /* AAL parms can't be supp */
#define UNI_IE_CAUS_MISSING 96 /* Mandatory IE missing */
#define UNI_IE_CAUS_MTEXIST 97 /* Message type nonexistent */
#define UNI_IE_CAUS_IEEXIST 99 /* IE type nonexistent */
#define UNI_IE_CAUS_IECONTENT 100 /* IE content invalid */
#define UNI_IE_CAUS_STATE 101 /* Message incomp with state */
#define UNI_IE_CAUS_TIMER 102 /* Recovery on timer expire */
#define UNI_IE_CAUS_LEN 104 /* Incorrect message length */
#define UNI_IE_CAUS_PROTO 111 /* Protocol error */
/*
* Connection identifier information element in internal format.
*/
struct ie_cnid {
int8_t ie_vp_sig;
int8_t ie_pref_excl;
u_short ie_vpci;
u_short ie_vci;
};
#define UNI_IE_CNID_VPSIG_MASK 3
#define UNI_IE_CNID_VPSIG_SHIFT 3
#define UNI_IE_CNID_PREX_MASK 7
#define UNI_IE_CNID_MIN_VCI 32
/*
* Quality of service parameter information element in internal format.
*/
struct ie_qosp {
int8_t ie_fwd_class;
int8_t ie_bkwd_class;
};
#define UNI_IE_QOSP_FWD_CLASS_0 0
#define UNI_IE_QOSP_FWD_CLASS_1 1
#define UNI_IE_QOSP_FWD_CLASS_2 2
#define UNI_IE_QOSP_FWD_CLASS_3 3
#define UNI_IE_QOSP_FWD_CLASS_4 4
#define UNI_IE_QOSP_BKWD_CLASS_0 0
#define UNI_IE_QOSP_BKWD_CLASS_1 1
#define UNI_IE_QOSP_BKWD_CLASS_2 2
#define UNI_IE_QOSP_BKWD_CLASS_3 3
#define UNI_IE_QOSP_BKWD_CLASS_4 4
/*
* Broadband repeat indicator information element in internal format.
*/
struct ie_brpi {
int8_t ie_ind;
};
#define UNI_IE_BRPI_PRI_LIST 2
#define UNI_IE_BRPI_IND_MASK 15
/*
* Restart indicator information element in internal format.
*/
struct ie_rsti {
int8_t ie_class;
};
#define UNI_IE_RSTI_IND_VC 0
#define UNI_IE_RSTI_ALL_VC 2
#define UNI_IE_RSTI_CLASS_MASK 3
/*
* Broadband locking shift information element in internal format.
*/
struct ie_blsh {
int8_t ie_dummy;
};
/*
* Broadband non-locking shift information element in internal format.
*/
struct ie_bnsh {
int8_t ie_dummy;
};
/*
* Broadband sending complete information element in internal format.
*/
struct ie_bsdc {
int8_t ie_ind;
};
#define UNI_IE_BSDC_IND 0x21
/*
* Transit net selection information element in internal format.
*/
struct ie_trnt {
int8_t ie_id_type;
int8_t ie_id_plan;
u_char ie_id_len;
u_char ie_id[4];
};
#define UNI_IE_TRNT_IDT_MASK 7
#define UNI_IE_TRNT_IDT_SHIFT 4
#define UNI_IE_TRNT_IDP_MASK 15
#define UNI_IE_TRNT_IDT_NATL 2
#define UNI_IE_TRNT_IDP_CIC 1
/*
* Endpoint reference information element in internal format.
*/
struct ie_eprf {
int8_t ie_type;
int16_t ie_id;
};
#define UNI_IE_EPRF_LDI 0
/*
* Endpoint state information element in internal format.
*/
struct ie_epst {
int8_t ie_state;
};
#define UNI_IE_EPST_NULL 0
#define UNI_IE_EPST_API 1
#define UNI_IE_EPST_APR 6
#define UNI_IE_EPST_DPI 11
#define UNI_IE_EPST_DPR 12
#define UNI_IE_EPST_ACTIVE 10
#define UNI_IE_EPST_STATE_MASK 0x3F
/*
* Generic information element
*/
struct ie_generic {
struct ie_hdr ie_hdr;
union {
struct ie_aalp ie_aalp;
struct ie_clrt ie_clrt;
struct ie_bbcp ie_bbcp;
struct ie_bhli ie_bhli;
struct ie_blli ie_blli;
struct ie_clst ie_clst;
struct ie_cdad ie_cdad;
struct ie_cdsa ie_cdsa;
struct ie_cgad ie_cgad;
struct ie_cgsa ie_cgsa;
struct ie_caus ie_caus;
struct ie_cnid ie_cnid;
struct ie_qosp ie_qosp;
struct ie_brpi ie_brpi;
struct ie_rsti ie_rsti;
struct ie_blsh ie_blsh;
struct ie_bnsh ie_bnsh;
struct ie_bsdc ie_bsdc;
struct ie_trnt ie_trnt;
struct ie_eprf ie_eprf;
struct ie_epst ie_epst;
} ie_u;
};
#define ie_ident ie_hdr.ie_hdr_ident
#define ie_coding ie_hdr.ie_hdr_coding
#define ie_flag ie_hdr.ie_hdr_flag
#define ie_action ie_hdr.ie_hdr_action
#define ie_length ie_hdr.ie_hdr_length
#define ie_err_cause ie_hdr.ie_hdr_err_cause
#define ie_next ie_hdr.ie_hdr_next
#define ie_aalp_aal_type ie_u.ie_aalp.ie_aal_type
#define ie_aalp_1_subtype ie_u.ie_aalp.aal_u.type_1.subtype
#define ie_aalp_1_cbr_rate ie_u.ie_aalp.aal_u.type_1.cbr_rate
#define ie_aalp_1_multiplier ie_u.ie_aalp.aal_u.type_1.multiplier
#define ie_aalp_1_clock_recovery ie_u.ie_aalp.aal_u.type_1.clock_recovery
#define ie_aalp_1_error_correction ie_u.ie_aalp.aal_u.type_1.error_correction
#define ie_aalp_1_struct_data_tran ie_u.ie_aalp.aal_u.type_1.struct_data_tran
#define ie_aalp_1_partial_cells ie_u.ie_aalp.aal_u.type_1.partial_cells
#define ie_aalp_4_fwd_max_sdu ie_u.ie_aalp.aal_u.type_4.fwd_max_sdu
#define ie_aalp_4_bkwd_max_sdu ie_u.ie_aalp.aal_u.type_4.bkwd_max_sdu
#define ie_aalp_4_mid_range ie_u.ie_aalp.aal_u.type_4.mid_range
#define ie_aalp_4_mode ie_u.ie_aalp.aal_u.type_4.mode
#define ie_aalp_4_sscs_type ie_u.ie_aalp.aal_u.type_4.sscs_type
#define ie_aalp_5_fwd_max_sdu ie_u.ie_aalp.aal_u.type_5.fwd_max_sdu
#define ie_aalp_5_bkwd_max_sdu ie_u.ie_aalp.aal_u.type_5.bkwd_max_sdu
#define ie_aalp_5_mode ie_u.ie_aalp.aal_u.type_5.mode
#define ie_aalp_5_sscs_type ie_u.ie_aalp.aal_u.type_5.sscs_type
#define ie_aalp_user_info ie_u.ie_aalp.aal_u.type_user.aal_info
#define ie_clrt_fwd_peak ie_u.ie_clrt.ie_fwd_peak
#define ie_clrt_bkwd_peak ie_u.ie_clrt.ie_bkwd_peak
#define ie_clrt_fwd_peak_01 ie_u.ie_clrt.ie_fwd_peak_01
#define ie_clrt_bkwd_peak_01 ie_u.ie_clrt.ie_bkwd_peak_01
#define ie_clrt_fwd_sust ie_u.ie_clrt.ie_fwd_sust
#define ie_clrt_bkwd_sust ie_u.ie_clrt.ie_bkwd_sust
#define ie_clrt_fwd_sust_01 ie_u.ie_clrt.ie_fwd_sust_01
#define ie_clrt_bkwd_sust_01 ie_u.ie_clrt.ie_bkwd_sust_01
#define ie_clrt_fwd_burst ie_u.ie_clrt.ie_fwd_burst
#define ie_clrt_bkwd_burst ie_u.ie_clrt.ie_bkwd_burst
#define ie_clrt_fwd_burst_01 ie_u.ie_clrt.ie_fwd_burst_01
#define ie_clrt_bkwd_burst_01 ie_u.ie_clrt.ie_bkwd_burst_01
#define ie_clrt_best_effort ie_u.ie_clrt.ie_best_effort
#define ie_clrt_tm_options ie_u.ie_clrt.ie_tm_options
#define ie_bbcp_bearer_class ie_u.ie_bbcp.ie_bearer_class
#define ie_bbcp_traffic_type ie_u.ie_bbcp.ie_traffic_type
#define ie_bbcp_timing_req ie_u.ie_bbcp.ie_timing_req
#define ie_bbcp_clipping ie_u.ie_bbcp.ie_clipping
#define ie_bbcp_conn_config ie_u.ie_bbcp.ie_conn_config
#define ie_bhli_type ie_u.ie_bhli.ie_type
#define ie_bhli_info ie_u.ie_bhli.ie_info
#define ie_blli_l1_id ie_u.ie_blli.ie_l1_id
#define ie_blli_l2_id ie_u.ie_blli.ie_l2_id
#define ie_blli_l2_mode ie_u.ie_blli.ie_l2_mode
#define ie_blli_l2_q933_use ie_u.ie_blli.ie_l2_q933_use
#define ie_blli_l2_window ie_u.ie_blli.ie_l2_window
#define ie_blli_l2_user_proto ie_u.ie_blli.ie_l2_user_proto
#define ie_blli_l3_id ie_u.ie_blli.ie_l3_id
#define ie_blli_l3_mode ie_u.ie_blli.ie_l3_mode
#define ie_blli_l3_packet_size ie_u.ie_blli.ie_l3_packet_size
#define ie_blli_l3_window ie_u.ie_blli.ie_l3_window
#define ie_blli_l3_user_proto ie_u.ie_blli.ie_l3_user_proto
#define ie_blli_l3_ipi ie_u.ie_blli.ie_l3_ipi
#define ie_blli_l3_snap_id ie_u.ie_blli.ie_l3_snap_id
#define ie_blli_l3_oui ie_u.ie_blli.ie_l3_oui
#define ie_blli_l3_pid ie_u.ie_blli.ie_l3_pid
#define ie_clst_state ie_u.ie_clst.ie_state
#define ie_cdad_type ie_u.ie_cdad.ie_type
#define ie_cdad_plan ie_u.ie_cdad.ie_plan
#define ie_cdad_addr ie_u.ie_cdad.ie_addr
#define ie_cdsa_addr ie_u.ie_cdsa.ie_addr
#define ie_cgad_type ie_u.ie_cgad.ie_type
#define ie_cgad_plan ie_u.ie_cgad.ie_plan
#define ie_cgad_pres_ind ie_u.ie_cgad.ie_pres_ind
#define ie_cgad_screen_ind ie_u.ie_cgad.ie_screen_ind
#define ie_cgad_addr ie_u.ie_cgad.ie_addr
#define ie_cgsa_addr ie_u.ie_cgsa.ie_addr
#define ie_caus_loc ie_u.ie_caus.ie_loc
#define ie_caus_cause ie_u.ie_caus.ie_cause
#define ie_caus_diag_len ie_u.ie_caus.ie_diag_len
#define ie_caus_diagnostic ie_u.ie_caus.ie_diagnostic
#define ie_cnid_vp_sig ie_u.ie_cnid.ie_vp_sig
#define ie_cnid_pref_excl ie_u.ie_cnid.ie_pref_excl
#define ie_cnid_vpci ie_u.ie_cnid.ie_vpci
#define ie_cnid_vci ie_u.ie_cnid.ie_vci
#define ie_qosp_fwd_class ie_u.ie_qosp.ie_fwd_class
#define ie_qosp_bkwd_class ie_u.ie_qosp.ie_bkwd_class
#define ie_brpi_ind ie_u.ie_brpi.ie_ind
#define ie_rsti_class ie_u.ie_rsti.ie_class
#define ie_bsdc_ind ie_u.ie_bsdc.ie_ind
#define ie_trnt_id_type ie_u.ie_trnt.ie_id_type
#define ie_trnt_id_plan ie_u.ie_trnt.ie_id_plan
#define ie_trnt_id_len ie_u.ie_trnt.ie_id_len
#define ie_trnt_id ie_u.ie_trnt.ie_id
#define ie_eprf_type ie_u.ie_eprf.ie_type
#define ie_eprf_id ie_u.ie_eprf.ie_id
#define ie_epst_state ie_u.ie_epst.ie_state
/*
* Macro to add an IE to the end of a list of IEs
*/
#define MSG_IE_ADD(m, i, ind) \
if (m->msg_ie_vec[ind]) { \
struct ie_generic *_iep = msg->msg_ie_vec[ind]; \
while (_iep->ie_next) { \
_iep = _iep->ie_next; \
} \
_iep->ie_next = i; \
} else { \
m->msg_ie_vec[ind] = i; \
}
#endif /* _UNI_SIG_MSG_H */
|