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/include/ss7/sccp.h


File /code/strss7/include/ss7/sccp.h



#ifndef __SS7_SCCP_H__
#define __SS7_SCCP_H__

#ident "@(#) $Name:  $($Revision: 0.8.2.5 $) Copyright (c) 1997-2002 OpenSS7 Corporation."

#ifdef __KERNEL__
#include "../../include/sys/npi.h"
#else
#include <sys/npi.h>
#endif

/*
 *  These are SCCP specific definitions for NPI...
 */

/*
 *  QOS structure types for SCCP
 */
#define N_QOS_SEL_SCCP		0x0201
#define N_QOS_OPT_SEL_SCCP	0x0202
#define N_QOS_RANGE_SCCP	0x0203

typedef struct {
	np_ulong n_qos_type;		/* always N_QOS_SEL_SCCP */
	long protocol_class;		/* protocol class 2 or 3 */
	long option_flags;		/* options flags (return option) *//* XXX */
	long importance;		/* importance */
	long sequence_selection;	/* selected SLS value */
	long message_priority;		/* MTP message priority */
} N_qos_sel_sccp_t;

typedef struct {
	np_ulong n_qos_type;		/* always N_QOS_OPT_SEL_SCCP */
	long protocol_class;		/* protocol class 0 or 1 */
} N_qos_opt_sel_sccp_t;

typedef struct {
	np_ulong n_qos_type;		/* always N_QOS_RANGE_SCCP */
	long protocol_classes;		/* protocol class support range */
	long sequence_selection;	/* SLS range */
} N_qos_range_sccp_t;

/*
 *  Protocol Class bit masks for use with N_QOS_RANGE_SCCP protocol_classes
 */
#define N_QOS_PCLASS_0		0x01
#define N_QOS_PCLASS_1		0x02
#define N_QOS_PCLASS_2		0x04
#define N_QOS_PCLASS_3		0x08
#define N_QOS_PCLASS_ALL	0xff

/*
 *  SCCP Address format:
 */

typedef struct sccp_addr {
	ulong ni;			/* network indicator */
	ulong ri;			/* routing indicator */
	ulong pc;			/* point code (-1 not present) */
	ulong ssn;			/* subsystem number (-1 not present) */
	ulong gtt;			/* type of global title */
	ulong tt;			/* translaction type */
	ulong es;			/* encoding scheme */
	ulong nplan;			/* numbering plan */
	ulong nai;			/* nature of address indicator */
	ulong alen;			/* address length */
	uint8_t addr[0];		/* adress digits */
	/* followed by alen address bytes */
} sccp_addr_t;

#define SCCP_MAX_ADDR_LENGTH 32

#define SCCP_RI_DPC_SSN	    0	/* route on DPC/SSN */
#define SCCP_RI_GT	    1	/* route on GT */

#define SCCP_GTTYPE_NONE    0	/* no GT */
#define SCCP_GTTYPE_NAI	    1	/* NAI only */
#define SCCP_GTTYPE_TT	    2	/* TT only */
#define SCCP_GTTYPE_NP      3	/* TT, ES, NPLAN */
#define SCCP_GTTYPE_NP_NAI  4	/* TT, ES, NPLAN and NAI */

/*
 *  SCCP Causes
 */
/*
 *  SCCP Release Causes used in N_DISCON_IND
 */
#define SCCP_RELC_END_USER_ORIGINATED				0x1000
#define SCCP_RELC_END_USER_CONGESTION				0x1001
#define SCCP_RELC_END_USER_FAILURE				0x1002
#define SCCP_RELC_SCCP_USER_ORIGINATED				0x1003
#define SCCP_RELC_REMOTE_PROCEDURE_ERROR			0x1004
#define SCCP_RELC_INCONSISTENT_CONNECTION_DATA			0x1005
#define SCCP_RELC_ACCESS_FAILURE				0x1006
#define SCCP_RELC_ACCESS_CONGESTION				0x1007
#define SCCP_RELC_SUBSYSTEM_FAILURE				0x1008
#define SCCP_RELC_SUBSYSTEM_CONGESTION				0x1009
#define SCCP_RELC_MTP_FAILURE					0x100a
#define SCCP_RELC_NETWORK_CONGESTION				0x100b
#define SCCP_RELC_EXPIRATION_OF_RESET_TIMER			0x100c
#define SCCP_RELC_EXPIRATION_OF_RECEIVE_INACTIVITY_TIMER	0x100d
#define SCCP_RELC_RESERVED					0x100e
#define SCCP_RELC_UNQUALIFIED					0x100f
#define SCCP_RELC_SCCP_FAILURE					0x1010
/*
 *  SCCP Return Causes used in N_UDERROR_IND
 */
#define SCCP_RETC_NO_ADDRESS_TYPE_TRANSLATION			0x2000
#define	SCCP_RETC_NO_ADDRESS_TRANSLATION			0x2001
#define SCCP_RETC_SUBSYSTEM_CONGESTION				0x2002
#define SCCP_RETC_SUBSYSTEM_FAILURE				0x2003
#define SCCP_RETC_UNEQUIPPED_USER				0x2004
#define SCCP_RETC_MTP_FAILURE					0x2005
#define SCCP_RETC_NETWORK_CONGESTION				0x2006
#define SCCP_RETC_UNQUALIFIED					0x2007
#define SCCP_RETC_MESSAGE_TRANSPORT_ERROR			0x2008
#define SCCP_RETC_LOCAL_PROCESSING_ERROR			0x2009
#define SCCP_RETC_NO_REASSEMBLY_AT_DESTINATION			0x200a
#define SCCP_RETC_SCCP_FAILURE					0x200b
#define SCCP_RETC_SCCP_HOP_COUNTER_VIOLATION			0x200c
#define SCCP_RETC_SEGMENTATION_NOT_SUPPORTED			0x200d
#define SCCP_RETC_SEGMENTATION_FAILURE				0x200e

#define SCCP_RETC_MESSAGE_CHANGE_FAILURE			0x20f7
#define SCCP_RETC_INVALID_INS_ROUTING_REQUEST			0x20f8
#define SCCP_RETC_INVALID_INSI_ROUTING_REQUEST			0x20f9
#define SCCP_RETC_UNAUTHORIZED_MESSAGE				0x20fa
#define SCCP_RETC_MESSAGE_INCOMPATIBILITY			0x20fb
#define SCCP_RETC_CANNOT_PERFORM_ISNI_CONSTRAINED_ROUTING	0x20fc
#define SCCP_RETC_REDUNDANT_ISNI_CONSTRAINED_ROUTING_INFO	0x20fd
#define SCCP_RETC_UNABLE_TO_PERFORM_ISNI_IDENTIFICATION		0x20fe
/*
 *  SCCP Reset Causes used in N_RESET_IND/REQ
 */
#define SCCP_RESC_END_USER_ORIGINATED				0x3000
#define SCCP_RESC_SCCP_USER_ORIGINATED				0x3001
#define SCCP_RESC_MESSAGE_OUT_OF_ORDER_INCORRECT_PS		0x3002
#define SCCP_RESC_MESSAGE_OUT_OF_ORDER_INCORRECT_PR		0x3003
#define SCCP_RESC_REMOTE_PROC_ERROR_MESSAGE_OUT_OF_WINDOW	0x3004
#define SCCP_RESC_REMOTE_PROC_ERROR_INCORRECT_PS_AFTER_INIT	0x3005
#define SCCP_RESC_REMOTE_PROC_ERROR_GENERAL			0x3006
#define SCCP_RESC_REMOTE_END_USER_OPERATIONAL			0x3007
#define SCCP_RESC_NETWORK_OPERATIONAL				0x3008
#define SCCP_RESC_ACCESS_OPERATIONAL				0x3009
#define SCCP_RESC_NETWORK_CONGESTION				0x300a
#define SCCP_RESC_NOT_OBTAINABLE				0x300b
#define SCCP_RESC_UNQUALIFIED					0x300c
/*
 *  SCCP Error Causes
 */
#define SCCP_ERRC_LRN_MISMATCH_UNASSIGNED_DEST_LRN		0x4000
#define SCCP_ERRC_LRN_MISMATCH_INCONSISTENT_SOURCE_LRN		0x4001
#define SCCP_ERRC_POINT_CODE_MISMATCH				0x4002
#define SCCP_ERRC_SERVICE_CLASS_MISMATCH			0x4003
#define SCCP_ERRC_UNQUALIFIED					0x4004
/*
 *  SCCP Refusal Causes used in N_DISCON_IND
 */
#define SCCP_REFC_END_USER_ORIGINATED				0x5000
#define SCCP_REFC_END_USER_CONGESTION				0x5001
#define SCCP_REFC_END_USER_FAILURE				0x5002
#define SCCP_REFC_SCCP_USER_ORIGINATED				0x5003
#define SCCP_REFC_DESTINATION_ADDRESS_UNKNOWN			0x5004
#define SCCP_REFC_DESTINATION_INACCESSIBLE			0x5005
#define SCCP_REFC_NETWORK_RESOURCE_QOS_NOT_AVAIL_PERM		0x5006
#define SCCP_REFC_NETWORK_RESOURCE_QOS_NOT_AVAIL_TRANS		0x5007
#define SCCP_REFC_ACCESS_FAILURE				0x5008
#define SCCP_REFC_ACCESS_CONGESTION				0x5009
#define SCCP_REFC_SUBSYSTEM_FAILURE				0x500a
#define SCCP_REFC_SUBSYSTEM_CONGESTION				0x500b
#define SCCP_REFC_EXPIRATION_OF_NC_ESTAB_TIMER			0x500c
#define SCCP_REFC_INCOMPATIBLE_USER_DATA			0x500d
#define SCCP_REFC_RESERVED					0x500e
#define SCCP_REFC_UNQUALIFIED					0x500f
#define SCCP_REFC_SCCP_HOP_COUNTER_VIOLATION			0x5010
#define SCCP_REFC_SCCP_FAILURE					0x5011
#define SCCP_REFC_NO_ADDRESS_TYPE_TRANSLATION			0x5012
#define SCCP_REFC_UNEQUIPPED_USER				0x5013

/*
 *  Unitdata transfer request.
 */
#define N_unitdata_req_t SCCP_unitdata_req_t
typedef struct {
	np_ulong PRIM_type;		/* always N_UNITDATA_REQ */
	np_ulong DEST_length;		/* destination address length */
	np_ulong DEST_offset;		/* destination address offset */
	np_ulong RESERVED_field[2];	/* reserved field for DLPI compat */
	np_ulong SRC_length;		/* source address length *//* XXX */
	np_ulong SRC_offset;		/* source address offset *//* XXX */
	np_ulong QOS_length;		/* QOS parameter set length *//* XXX */
	np_ulong QOS_offset;		/* QOS parameter set offset *//* XXX */
} SCCP_unitdata_req_t;

/*
 *  Unitdata transfer indication
 */
#define N_unitdata_ind_t SCCP_unitdata_ind_t
typedef struct {
	np_ulong PRIM_type;		/* always N_UNITDATA_IND */
	np_ulong SRC_length;		/* source address length */
	np_ulong SRC_offset;		/* source address offset */
	np_ulong DEST_length;		/* destination address length */
	np_ulong DEST_offset;		/* destination address offset */
	np_ulong ERROR_type;		/* return error cause */
	np_ulong QOS_length;		/* QOS parameter set length *//* XXX */
	np_ulong QOS_offset;		/* QOS parameter set offset *//* XXX */
} SCCP_unitdata_ind_t;

/*
 *  Unitdata error indication for CLNS services
 */
#define N_uderror_ind_t SCCP_uderror_ind_t
typedef struct {
	np_ulong PRIM_type;		/* always N_UDERROR_IND */
	np_ulong DEST_length;		/* destination address length */
	np_ulong DEST_offset;		/* destination address offset */
	np_ulong RESERVED_field;	/* reserved for DLPI compatibility */
	np_ulong ERROR_type;		/* error type */
	np_ulong SRC_length;		/* source address length *//* XXX */
	np_ulong SRC_offset;		/* source address offset *//* XXX */
} SCCP_uderror_ind_t;

#ifdef __KERNEL__
/*
 *  N_UNITDATA_REQ   8 - Connection-less data send request
 *  ---------------------------------------------------------------
 */
#define n_unitdata_req sccp_n_unitdata_req
static inline mblk_t *sccp_n_unitdata_req(caddr_t dst_ptr, size_t dst_len,
					  caddr_t src_ptr, size_t src_len, caddr_t qos_ptr, size_t qos_len,
					  mblk_t * dp)
{
	mblk_t *mp;
	N_unitdata_req_t *p;

	if ((mp = allocb(sizeof(*p) + dst_len + src_len + qos_len, BPRI_MED))) {
		mp->b_datap->db_type = M_PROTO;
		p = (N_unitdata_req_t *) mp->b_wptr;
		p->PRIM_type = N_UNITDATA_REQ;
		p->DEST_length = dst_len;
		p->DEST_offset = dst_len ? sizeof(*p) : 0;
		p->SRC_length = src_len;
		p->SRC_offset = src_len ? sizeof(*p) + dst_len : 0;
		p->QOS_length = qos_len;
		p->QOS_offset = qos_len ? sizeof(*p) + dst_len + src_len : 0;
		p->RESERVED_field[0] = 0;
		p->RESERVED_field[1] = 0;
		mp->b_wptr += sizeof(*p);
		bcopy(dst_ptr, mp->b_wptr, dst_len);
		mp->b_wptr += dst_len;
		bcopy(src_ptr, mp->b_wptr, src_len);
		mp->b_wptr += src_len;
		bcopy(qos_ptr, mp->b_wptr, qos_len);
		mp->b_wptr += qos_len;
		mp->b_cont = dp;
	}
	return (mp);
}

/*
 *  N_UNITDATA_IND  20 - Connection-less data receive indication
 *  ---------------------------------------------------------------
 */
#define n_unitdata_ind sccp_n_unitdata_ind
static inline mblk_t *sccp_n_unitdata_ind(caddr_t dst_ptr, size_t dst_len,
					  caddr_t src_ptr, size_t src_len, caddr_t qos_ptr, size_t qos_len,
					  mblk_t * dp)
{
	mblk_t *mp;
	N_unitdata_ind_t *p;

	if ((mp = allocb(sizeof(*p) + dst_len + src_len, BPRI_MED))) {
		mp->b_datap->db_type = M_PROTO;
		p = (N_unitdata_ind_t *) mp->b_wptr;
		p->PRIM_type = N_UNITDATA_IND;
		p->DEST_length = dst_len;
		p->DEST_offset = dst_len ? sizeof(*p) : 0;
		p->SRC_length = src_len;
		p->SRC_offset = src_len ? sizeof(*p) + dst_len : 0;
		p->QOS_length = qos_len;
		p->QOS_offset = qos_len ? sizeof(*p) + dst_len + src_len : 0;
		p->ERROR_type = 0;
		mp->b_wptr += sizeof(*p);
		bcopy(dst_ptr, mp->b_wptr, dst_len);
		mp->b_wptr += dst_len;
		bcopy(src_ptr, mp->b_wptr, src_len);
		mp->b_wptr += src_len;
		bcopy(qos_ptr, mp->b_wptr, qos_len);
		mp->b_wptr += qos_len;
		mp->b_cont = dp;
	}
	return (mp);
}

/*
 *  N_UDERROR_IND   21 - UNITDATA Error Indication
 *  ---------------------------------------------------------------
 */
#define n_uderror_ind sccp_n_uderror_ind
static inline mblk_t *sccp_n_uderror_ind(uint etype,
					 caddr_t dst_ptr, size_t dst_len, caddr_t src_ptr, size_t src_len,
					 mblk_t * dp)
{
	mblk_t *mp;
	N_uderror_ind_t *p;

	if ((mp = allocb(sizeof(*p) + dst_len + src_len, BPRI_MED))) {
		mp->b_datap->db_type = M_PROTO;
		p = (N_uderror_ind_t *) mp->b_wptr;
		p->PRIM_type = N_UDERROR_IND;
		p->ERROR_type = etype;
		p->DEST_length = dst_len;
		p->DEST_offset = dst_len ? sizeof(*p) : 0;
		p->SRC_length = src_len;
		p->SRC_offset = src_len ? sizeof(*p) + dst_len : 0;
		p->RESERVED_field = 0;
		mp->b_wptr += sizeof(*p);
		bcopy(dst_ptr, mp->b_wptr, dst_len);
		mp->b_wptr += dst_len;
		bcopy(src_ptr, mp->b_wptr, src_len);
		mp->b_wptr += src_len;
		mp->b_cont = dp;
	}
	return (mp);
}
#endif

#endif				/* __SS7_SCCP_H__ */


Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/include/ss7/sccp.h

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

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