OpenSS7
SS7 for the
Common Man

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified:

Home Overview Status News Documentation Resources About
   
 Overview
 Status
 News
 Documentation
 Resources
 About

   
Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/sigtran/sua_msgs.h


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__ */


Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/sigtran/sua_msgs.h

OpenSS7
SS7 for the
Common Man
Home Overview Status News Documentation Resources About

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified: