1122205Sharti/*
2122205Sharti * Copyright (c) 2001-2003
3122205Sharti *	Fraunhofer Institute for Open Communication Systems (FhG Fokus).
4122205Sharti * 	All rights reserved.
5122205Sharti *
6122205Sharti * Redistribution and use in source and binary forms, with or without
7122205Sharti * modification, are permitted provided that the following conditions
8122205Sharti * are met:
9122205Sharti * 1. Redistributions of source code must retain the above copyright
10122205Sharti *    notice, this list of conditions and the following disclaimer.
11122205Sharti * 2. Redistributions in binary form must reproduce the above copyright
12122205Sharti *    notice, this list of conditions and the following disclaimer in the
13122205Sharti *    documentation and/or other materials provided with the distribution.
14122205Sharti *
15122205Sharti * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16122205Sharti * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17122205Sharti * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18122205Sharti * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19122205Sharti * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20122205Sharti * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21122205Sharti * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22122205Sharti * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23122205Sharti * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24122205Sharti * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25122205Sharti * SUCH DAMAGE.
26122205Sharti *
27122205Sharti * Author: Hartmut Brandt <harti@freebsd.org>
28122205Sharti *
29131826Sharti * $Begemot: libunimsg/netnatm/sig/unimkmsg.h,v 1.4 2003/09/19 12:03:34 hbb Exp $
30122205Sharti *
31122205Sharti * Macros to make messages.
32122205Sharti */
33122205Sharti
34122205Sharti#define MK_MSG_ORIG(MSG,TYPE,CREF,FLAG) 				\
35122205Sharti    do {								\
36122205Sharti	(MSG)->mtype = (TYPE);						\
37122205Sharti	(MSG)->u.hdr.cref.cref = (CREF);				\
38122205Sharti	(MSG)->u.hdr.cref.flag = (FLAG);				\
39122205Sharti	(MSG)->u.hdr.act = UNI_MSGACT_DEFAULT;				\
40122205Sharti    } while(0)
41122205Sharti
42122205Sharti#define MK_MSG_RESP(MSG,TYPE,CREF)					\
43122205Sharti    do {								\
44122205Sharti	(MSG)->mtype = (TYPE);						\
45122205Sharti	(MSG)->u.hdr.cref.cref = (CREF)->cref;				\
46122205Sharti	(MSG)->u.hdr.cref.flag = !(CREF)->flag;				\
47122205Sharti	(MSG)->u.hdr.act = UNI_MSGACT_DEFAULT;				\
48122205Sharti    } while(0)
49122205Sharti
50122205Sharti#define MK_IE_CALLSTATE(IE,CS)						\
51122205Sharti    do {								\
52122205Sharti	(IE).h.present = 0;						\
53122205Sharti	IE_SETPRESENT(IE);						\
54122205Sharti	(IE).h.coding = UNI_CODING_ITU;					\
55122205Sharti	(IE).h.act = UNI_IEACT_DEFAULT;					\
56122205Sharti	(IE).state = CS;						\
57122205Sharti    } while(0)
58122205Sharti
59122205Sharti#define MK_IE_EPREF(IE,EPREF,FLAG)					\
60122205Sharti    do {								\
61122205Sharti	(IE).h.present = 0;						\
62122205Sharti	IE_SETPRESENT(IE);						\
63122205Sharti	(IE).h.coding = UNI_CODING_ITU;					\
64122205Sharti	(IE).h.act = UNI_IEACT_DEFAULT;					\
65122205Sharti	(IE).epref = EPREF;						\
66122205Sharti	(IE).flag = FLAG;						\
67122205Sharti    } while(0)
68122205Sharti
69122205Sharti#define MK_IE_EPSTATE(IE,STATE)						\
70122205Sharti    do {								\
71122205Sharti	(IE).h.present = 0;						\
72122205Sharti	IE_SETPRESENT(IE);						\
73122205Sharti	(IE).h.coding = UNI_CODING_ITU;					\
74122205Sharti	(IE).h.act = UNI_IEACT_DEFAULT;					\
75122205Sharti	(IE).state = STATE;						\
76122205Sharti    } while(0)
77122205Sharti
78122205Sharti#define MK_IE_CAUSE(IE,LOC,CAUSE)					\
79122205Sharti    do {								\
80122205Sharti	(IE).h.present = 0;						\
81122205Sharti	IE_SETPRESENT(IE);						\
82122205Sharti	(IE).h.coding = UNI_CODING_ITU;					\
83122205Sharti	(IE).h.act = UNI_IEACT_DEFAULT;					\
84122205Sharti	(IE).loc = LOC;							\
85122205Sharti	(IE).cause = CAUSE;						\
86122205Sharti    } while(0)
87122205Sharti
88122205Sharti#define ADD_CAUSE_MTYPE(IE,MTYPE)					\
89122205Sharti    do {								\
90122205Sharti	(IE).h.present |= UNI_CAUSE_MTYPE_P;				\
91122205Sharti	(IE).u.mtype = MTYPE;						\
92122205Sharti    } while(0)
93122205Sharti
94122205Sharti#define ADD_CAUSE_CHANNID(IE,VPI,VCI)					\
95122205Sharti    do {								\
96122205Sharti	(IE).h.present |= UNI_CAUSE_VPCI_P;				\
97122205Sharti	(IE).u.vpci.vpci = VPI;						\
98122205Sharti	(IE).u.vpci.vci = VCI;						\
99122205Sharti    } while(0)
100122205Sharti
101122205Sharti#define ADD_CAUSE_TIMER(IE,TIMER)					\
102122205Sharti    do {								\
103122205Sharti	(IE).h.present |= UNI_CAUSE_TIMER_P;				\
104122205Sharti	(IE).u.timer[0] = (TIMER)[0];					\
105122205Sharti	(IE).u.timer[1] = (TIMER)[1];					\
106122205Sharti	(IE).u.timer[2] = (TIMER)[2];					\
107122205Sharti    } while(0)
108122205Sharti
109122205Sharti/************************************************************/
110122205Sharti
111122205Sharti#define COPY_FROM_RELEASE_COMPL(U,DEST)					\
112122205Sharti    do {								\
113122205Sharti	u_int _i, _j;							\
114122205Sharti									\
115122205Sharti	for(_i = _j = 0; _i < 2; _i++)					\
116122205Sharti		if(IE_ISGOOD((U)->u.release_compl.cause[_i]))		\
117122205Sharti			(DEST)->cause[_j++] =				\
118122205Sharti			    (U)->u.release_compl.cause[_i];		\
119122205Sharti	for(_i = _j = 0; _i < UNI_NUM_IE_GIT; _i++)			\
120122205Sharti		if(IE_ISGOOD((U)->u.release_compl.git[_i]))		\
121122205Sharti			(DEST)->git[_j++] =				\
122122205Sharti			    (U)->u.release_compl.git[_i];		\
123122205Sharti	if(IE_ISGOOD((U)->u.release_compl.uu))				\
124122205Sharti		(DEST)->uu = (U)->u.release_compl.uu;			\
125122205Sharti	if(IE_ISGOOD((U)->u.release_compl.crankback))			\
126122205Sharti		(DEST)->crankback = (U)->u.release_compl.crankback;	\
127122205Sharti    } while(0)
128122205Sharti
129122205Sharti#define COPY_FROM_DROP_ACK(U,DEST)					\
130122205Sharti    do {								\
131122205Sharti	u_int _i, _j;							\
132122205Sharti									\
133122205Sharti	if(IE_ISGOOD((U)->u.drop_party_ack.epref))			\
134122205Sharti		(DEST)->epref = (U)->u.drop_party_ack.epref;		\
135122205Sharti	if(IE_ISGOOD((U)->u.drop_party_ack.cause))			\
136122205Sharti		(DEST)->cause = (U)->u.drop_party_ack.cause;		\
137122205Sharti	if(IE_ISGOOD((U)->u.drop_party_ack.uu))				\
138122205Sharti		(DEST)->uu = (U)->u.drop_party_ack.uu;			\
139122205Sharti	for(_i = _j = 0; _i < UNI_NUM_IE_GIT; _i++)			\
140122205Sharti		if(IE_ISGOOD((U)->u.drop_party_ack.git[_i]))		\
141122205Sharti			(DEST)->git[_j++] =				\
142122205Sharti			    (U)->u.drop_party_ack.git[_i];		\
143122205Sharti    } while(0)
144122205Sharti
145122205Sharti#define COPY_FROM_ADD_REJ(U,DEST)					\
146122205Sharti    do {								\
147122205Sharti	u_int _i, _j;							\
148122205Sharti									\
149122205Sharti	if(IE_ISGOOD((U)->u.add_party_rej.epref))			\
150122205Sharti		(DEST)->epref = (U)->u.add_party_rej.epref;		\
151122205Sharti	if(IE_ISGOOD((U)->u.add_party_rej.cause))			\
152122205Sharti		(DEST)->cause = (U)->u.add_party_rej.cause;		\
153122205Sharti	if(IE_ISGOOD((U)->u.add_party_rej.uu))				\
154122205Sharti		(DEST)->uu = (U)->u.add_party_rej.uu;			\
155122205Sharti	for(_i = _j = 0; _i < UNI_NUM_IE_GIT; _i++)			\
156122205Sharti		if(IE_ISGOOD((U)->u.add_party_rej.git[_i]))		\
157122205Sharti			(DEST)->git[_j++] =				\
158122205Sharti			    (U)->u.add_party_rej.git[_i];		\
159122205Sharti    } while(0)
160