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