OpenSS7 SS7 for the Common Man |
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
||||||||||||||||||||||||||
Home | Overview | Status | News | Documentation | Resources | About | |||||||||||||||||||||
File /code/strss7/drivers/sigtran/sua_msgs.h#ifndef __SUA_MSGS_H__ #define __SUA_MSGS_H__ #ident "@(#) $RCSfile: sua_msgs.h,v $ $Name: $($Revision: 0.8.2.1 $) $Date: 2002/04/19 18:37:16 $" #include "ua_msgs.h" /* * ========================================================================= * * SUA MESSAGE DEFINITIONS:- * * ========================================================================= * * SUA-Specific Messages: per draft-ietf-sigtran-sua-09.txt * ------------------------------------------------------------------- */ #define SUA_CNLS_CLDT UA_MHDR(1, 0, UA_CLASS_CNLS, 0x01) #define SUA_CNLS_CLDR UA_MHDR(1, 0, UA_CLASS_CNLS, 0x02) #define SUA_CNLS_LAST 0x02 #define SUA_CONS_CORE UA_MHDR(1, 0, UA_CLASS_CONS, 0x01) #define SUA_CONS_COAK UA_MHDR(1, 0, UA_CLASS_CONS, 0x02) #define SUA_CONS_COREF UA_MHDR(1, 0, UA_CLASS_CONS, 0x03) #define SUA_CONS_RELRE UA_MHDR(1, 0, UA_CLASS_CONS, 0x04) #define SUA_CONS_RELCO UA_MHDR(1, 0, UA_CLASS_CONS, 0x05) #define SUA_CONS_RESCO UA_MHDR(1, 0, UA_CLASS_CONS, 0x06) #define SUA_CONS_RESRE UA_MHDR(1, 0, UA_CLASS_CONS, 0x07) #define SUA_CONS_CODT UA_MHDR(1, 0, UA_CLASS_CONS, 0x08) #define SUA_CONS_CODA UA_MHDR(1, 0, UA_CLASS_CONS, 0x09) #define SUA_CONS_COERR UA_MHDR(1, 0, UA_CLASS_CONS, 0x0a) #define SUA_CONS_COIT UA_MHDR(1, 0, UA_CLASS_CONS, 0x0b) #define SUA_CONS_LAST 0x0b /* * SUA-Specific Parameters: per draft-ietf-sigtran-sua-09.txt * ------------------------------------------------------------------- */ #define SUA_PARM_HOP_CNT UA_PHDR(0x0101,sizeof(uint32_t)) #define SUA_PARM_SRCE_ADDR UA_PHDR(0x0102,sizeof(uint32_t)*5) /* XXX */ #define SUA_PARM_DEST_ADDR UA_PHDR(0x0103,0) #define SUA_PARM_SRN UA_PHDR(0x0104,sizeof(uint32_t)) #define SUA_PARM_DRN UA_PHDR(0x0105,sizeof(uint32_t)) #define SUA_PARM_CAUSE UA_PHDR(0x0106,sizeof(uint32_t)) #define SUA_PARM_SEQ_NUM UA_PHDR(0x0107,sizeof(uint32_t)) #define SUA_PARM_RX_SEQ_NUM UA_PHDR(0x0108,sizeof(uint32_t)) #define SUA_PARM_ASP_CAPS UA_PHDR(0x0109,sizeof(uint32_t)) #define SUA_PARM_CREDIT UA_PHDR(0x010a,sizeof(uint32_t)) #define SUA_PARM_DATA UA_PHDR(0x010b,0) #define SUA_PARM_USER_CAUSE UA_PHDR(0x010c,sizeof(uint32_t)) #define SUA_PARM_NA UA_PHDR(0x010d,sizeof(uint32_t)) #define SUA_PARM_ROUTING_KEY UA_PHDR(0x010e,0) #define SUA_PARM_REG_RESULT UA_PHDR(0x010f,sizeof(uint32_t)) #define SUA_PARM_DEREG_RESULT UA_PHDR(0x0110,sizeof(uint32_t)) #define SUA_PARM_ADDR_RANGE UA_PHDR(0x0111,0) #define SUA_PARM_CORR_ID UA_PHDR(0x0112,sizeof(uint32_t)) #define SUA_PARM_IMP UA_PHDR(0x0113,sizeof(uint32_t)) #define SUA_PARM_MP UA_PHDR(0x0114,sizeof(uint32_t)) #define SUA_PARM_PCLS UA_PHDR(0x0115,sizeof(uint32_t)) #define SUA_PARM_SEQ_CTL UA_PHDR(0x0116,sizeof(uint32_t)) #define SUA_PARM_SEGM UA_PHDR(0x0117,sizeof(uint32_t)) #define SUA_PARM_SMI UA_PHDR(0x0118,sizeof(uint32_t)) #define SUA_PARM_TID_LABEL UA_PHDR(0x0119,sizeof(uint32_t)) #define SUA_PARM_DRN_LABEL UA_PHDR(0x011a,sizeof(uint32_t)) #define SUA_SPARM_GT UA_PHDR(0x8001,0) #define SUA_SPARM_PC UA_PHDR(0x8002,sizeof(uint32_t)) #define SUA_SPARM_SSN UA_PHDR(0x8003,sizeof(uint32_t)) #define SUA_SPARM_IPV4_ADDR UA_PHDR(0x8004,sizeof(uint32_t)) #define SUA_SPARM_HOSTNAME UA_PHDR(0x8005,0) #define SUA_SPARM_IPV6_ADDR UA_PHDR(0x8006,sizeof(uint32_t)*4) /* * Routing Indicator used with SUA_PARM_SRCE_ADDR and SUA_PARM_DEST_ADDR. */ #define SUA_RI_GT 0x01 #define SUA_RI_PC_SSN 0x02 #define SUA_RI_HOSTNAME 0x03 #define SUA_RI_SSN_IP 0x04 /* * Address Indicator flags used with addresses. */ #define SUA_AI_SSN 0x01 #define SUA_AI_PC 0x02 #define SUA_AI_GT 0x04 #define SUA_SPARM_BASE 0x0801 typedef struct sua_sparms { parm_t gt; parm_t pc; parm_t ssn; parm_t ipv4_addr; parm_t hostname; parm_t ipv6_addr; #define SUA_SPARM_MAX 5 } sua_sparms_t; #define SUA_PARM_BASE 0x0101 typedef struct sua_parms { uint type; uint mlen; ua_parms_t common; parm_t hop_cnt; parm_t srce_addr; parm_t dest_addr; parm_t srn; parm_t drn; parm_t cause; parm_t seq_num; parm_t rx_seq_num; parm_t asp_caps; parm_t credit; parm_t data; parm_t user_cause; parm_t na; parm_t routing_key; parm_t reg_result; parm_t dereg_result; parm_t addr_range; parm_t corr_id; parm_t imp; parm_t mp; parm_t pcls; parm_t seq_ctl; parm_t segm; parm_t smi; parm_t tid_label; parm_t drn_label; #define SUA_PARM_MAX 26 sua_sparms_t srce; sua_sparms_t dest; } sua_parms_t; static inline int sua_decode_parms(mblk_t * mp, sua_parms_t * sua_results) { int len; uint32_t *p = (uint32_t *) mp->b_rptr; uint32_t *e = (uint32_t *) mp->b_wptr; bzero(sua_results, sizeof(*sua_results)); sua_results->type = (UA_MSG_CLAS(*p) << 8) | UA_MSG_TYPE(*p++); sua_results->mlen = ntohl(*p++); for (;; p += UA_WORDS(len)) { int ttag, tag; if (p == e) break; if (p > e - 1 || (len = UA_LENGTH(*p)) < 4) return (-EMSGSIZE); tag = UA_TAG(*p); ttag = tag - UA_PARM_BASE; if (0 <= ttag && ttag <= UA_PARM_MAX) { pp = ((struct ua_parm *) &sua_results->common) + ttag; pp->u.wptr = p + 1; pp->len = len; pp->val = ntohl(p[1]); } else { ttag = tag - SUA_PARM_BASE; if (0 <= ttag && ttag <= SUA_PARM_MAX) { int offset; struct sua_sparms_t *sp; pp = ((struct ua_parm *) &sua_results->hop_cnt) + ttag; pp->u.wptr = p + 1; pp->len = len; pp->val = ntohl(p[1]); switch (ttag) { case 1: /* srce_addr */ sp = &sua_results->srce; break; case 2: /* dest_addr */ sp = &sua_results->dest; break; default: continue; } { int len2; uint32_t *p2 = p + 1; /* skip parm header */ uint32_t *e2 = p + UA_WORDS(len); for (;; p2 += UA_WORDS(len2)) { int stag; if (p2 == e2) break; if (p2 > e2 - 1 || (len2 = UA_LENGTH(*p2)) < 4) return (-EMSGSIZE); stag = UA_TAG(*p2) - SUA_SPARM_BASE; if (0 <= stag && stag <= SUA_SPARM_MAX) { pp = ((struct ua_parm *) (sp)) + stag; pp->u.wptr = p2 + 1; pp->len = len2; pp->val = ntohl(p2[1]); continue; } ptrace(("Invalid sub-parameter tag %x\n", tag)); return (-EPROTO); } } continue; } ptrace(("Invalid parameter tag %x\n", tag)); return (-EPROTO); } } return (0); } #endif /* __SUA_MSGS_H__ */
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |