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/sctp.h


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



#ifndef __SS7_SCTP_H__
#define __SS7_SCTP_H__

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

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

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

/*
 *  QOS structure types for SCTP
 */
#define N_QOS_SEL_SCTP		0x0201
#define N_QOS_OPT_SEL_SCTP	0x0202
#define N_QOS_RANGE_SCTP	0x0203
#define N_QOS_STR_SEL_SCTP	0x0204

typedef struct {
	np_ulong n_qos_type;		/* always N_QOS_SEL_SCTP */
	/* 
	 *  FIXME: more...
	 */
} N_qos_sel_sctp_t;

typedef struct {
	np_ulong n_qos_type;		/* always N_QOS_OPT_SEL_SCTP */
	/* 
	 *  FIXME: more...
	 */
} N_qos_opt_sel_sctp_t;

typedef struct {
	np_ulong n_qos_type;		/* always N_QOS_RANGE_SCTP */
	/* 
	 *  FIXME: more...
	 */
} N_qos_range_sctp_t;

typedef struct {
	np_ulong n_qos_type;		/* always N_QOS_STR_SEL_SCTP */
	long ppi;			/* payload protocol identifier */
	long sid;			/* stream id */
	long ssn;			/* strean sequence number */
	long tsn;			/* transmit sequence number */
} N_qos_str_sel_sctp_t;

#define N_QOS_PPI_IUA
#define N_QOS_PPI_M2UA
#define N_QOS_PPI_M3UA
#define N_QOS_PPI_SUA
#define N_QOS_PPI_TUA

/*
 *  NC data transfer request with options.
 */
#define N_data_req_t SCTP_data_req_t
typedef struct {
	np_ulong PRIM_type;		/* always N_DATA_REQ */
	np_ulong DATA_xfer_flags;	/* data transfer flags */
	np_ulong QOS_length;		/* QOS parameter set length */
	np_ulong QOS_offset;		/* QOS parameter set offset */
} SCTP_data_req_t;
/*
 *  NC expedited data request with options
 */
#define N_exdata_req_t SCTP_exdata_req_t
typedef struct {
	np_ulong PRIM_type;		/* always N_EXDATA_REQ */
	np_ulong QOS_length;		/* QOS parameter set length */
	np_ulong QOS_offset;		/* QOS parameter set offset */
} SCTP_exdata_req_t;
/*
 *  NC data acknowledgement request with options
 */
#define N_datack_req_t SCTP_datack_req_t
typedef struct {
	np_ulong PRIM_type;		/* always N_DATACK_REQ */
	np_ulong QOS_length;		/* QOS parameter set length */
	np_ulong QOS_offset;		/* QOS parameter set offset */
} SCTP_datack_req_t
/*
 *  NC data transfer indication with options
 */
#define N_data_ind_t SCTP_data_ind_t
    typedef struct {
	np_ulong PRIM_type;		/* always N_DATA_IND */
	np_ulong DATA_xfer_flags;	/* data transfer flags */
	np_ulong QOS_length;		/* QOS parameter set length */
	np_ulong QOS_offset;		/* QOS parameter set offset */
} SCTP_data_ind_t;
/*
 *  NC expedited data indication with options
 */
#define N_exdata_ind_t SCTP_exdata_ind_t
typedef struct {
	np_ulong PRIM_type;		/* always N_EXDATA_REQ */
	np_ulong QOS_length;		/* QOS parameter set length */
	np_ulong QOS_offset;		/* QOS parameter set offset */
} SCTP_exdata_ind_t;
/*
 *  NC data acknowledgement indications with options
 */
#define N_datack_ind_t SCTP_datack_ind_t
typedef struct {
	np_ulong PRIM_type;		/* always N_DATACK_IND */
	np_ulong QOS_length;		/* QOS parameter set length */
	np_ulong QOS_offset;		/* QOS parameter set offset */
} SCTP_datack_ind_t;

#ifdef __KERNEL__
/*
 *  N_DATA_REQ	     3 - Connection-Mode data transfer request
 *  ---------------------------------------------------------------
 */
#define n_data_req sctp_data_req
static inline mblk_t *sctp_data_req(uint flags, uint ppi, uint sid, mblk_t * dp)
{
	mblk_t *mp;
	SCTP_data_req_t *p;
	N_qos_str_sel_sctp_t *q;
	if ((mp = allocb(sizeof(*p) + sizeof(*q), BPRI_MED))) {
		mp->b_datap->db_type = M_PROTO;
		p = (SCTP_data_req_t *) mp->b_wptr;
		p->PRIM_type = N_DATA_REQ;
		p->DATA_xfer_flags = flags;
		p->QOS_length = sizeof(*q);
		p->QOS_offset = sizeof(*p);
		mp->b_wptr += sizeof(*p);
		q = (N_qos_str_sel_sctp_t *) mp->b_wptr;
		q->n_qos_type = N_QOS_STR_SEL_SCTP;
		q->ppi = ppi;
		q->sid = sid;
		q->ssn = N_QOS_UNKNOWN;
		q->tsn = N_QOS_UNKNOWN;
		mp->b_wptr += sizeof(*q);
		mp->b_cont = dp;
	}
	return (mp);
}

/*
 *  N_EXDATA_REQ     4 - Expedited data request
 *  ---------------------------------------------------------------
 */
#define n_exdata_req sctp_exdata_req
static inline mblk_t *sctp_exdata_req(uint ppi, uint sid, mblk_t * dp)
{
	mblk_t *mp;
	SCTP_exdata_req_t *p;
	N_qos_str_sel_sctp_t *q;
	if ((mp = allocb(sizeof(*p) + sizeof(*q), BPRI_MED))) {
		mp->b_band = 254;
		mp->b_datap->db_type = M_PROTO;
		p = (SCTP_exdata_req_t *) mp->b_wptr;
		p->PRIM_type = N_EXDATA_REQ;
		p->QOS_length = sizeof(*q);
		p->QOS_offset = sizeof(*p);
		mp->b_wptr += sizeof(*p);
		q = (N_qos_str_sel_sctp_t *) mp->b_wptr;
		q->n_qos_type = N_QOS_STR_SEL_SCTP;
		q->ppi = ppi;
		q->sid = sid;
		q->ssn = N_QOS_UNKNOWN;
		q->tsn = N_QOS_UNKNOWN;
		mp->b_wptr += sizeof(*q);
		mp->b_cont = dp;
	}
	return (mp);
}

/*
 *  N_DATACK_REQ    23 - Data acknowledgement request
 *  ---------------------------------------------------------------
 */
#define n_datack_req sctp_datack_req
static inline mblk_t *sctp_datack_req(uint ppi, uint sid, uint ssn, uint tsn)
{
	mblk_t *mp;
	SCTP_datack_req_t *p;
	N_qos_str_sel_sctp_t *q;
	if ((mp = allocb(sizeof(*p) + sizeof(*q), BPRI_MED))) {
		mp->b_datap->db_type = M_PROTO;
		p = (SCTP_datack_req_t *) mp->b_wptr;
		p->PRIM_type = N_DATACK_REQ;
		p->QOS_length = sizeof(*q);
		p->QOS_offset = sizeof(*p);
		mp->b_wptr += sizeof(*p);
		q = (N_qos_str_sel_sctp_t *) mp->b_wptr;
		q->n_qos_type = N_QOS_STR_SEL_SCTP;
		q->ppi = ppi;
		q->sid = sid;
		q->ssn = ssn;
		q->tsn = tsn;
		mp->b_wptr += sizeof(*q);
	}
	return (mp);
}

/*
 *  N_DATA_IND	    14 - Incoming connection-mode data indication
 *  ---------------------------------------------------------------
 */
#define n_data_ind sctp_data_ind
static inline mblk_t *sctp_data_ind(uint flags, uint ppi, uint sid, uint ssn, uint tsn, mblk_t * dp)
{
	mblk_t *mp;
	SCTP_data_ind_t *p;
	N_qos_str_sel_sctp_t *q;
	if ((mp = allocb(sizeof(*p) + sizeof(*q), BPRI_MED))) {
		mp->b_datap->db_type = M_PROTO;
		p = (SCTP_data_req_t *) mp->b_wptr;
		p->PRIM_type = N_DATA_IND;
		p->DATA_xfer_flags = flags;
		p->QOS_length = sizeof(*q);
		p->QOS_offset = sizeof(*p);
		mp->b_wptr += sizeof(*p);
		q = (N_qos_str_sel_sctp_t *) mp->b_wptr;
		q->n_qos_type = N_QOS_STR_SEL_SCTP;
		q->ppi = ppi;
		q->sid = sid;
		q->ssn = ssn;
		q->tsn = tsn;
		mp->b_wptr += sizeof(*q);
		mp->b_cont = dp;
	}
	return (mp);
}

/*
 *  N_EXDATA_IND    15 - Incoming expedited data indication
 *  ---------------------------------------------------------------
 */
#define n_exdata_ind sctp_exdata_ind
static inline mblk_t *sctp_exdata_ind(uint ppi, uint sid, uint ssn, uint tsn, mblk_t * dp)
{
	mblk_t *mp;
	SCTP_exdata_ind_t *p;
	N_qos_str_sel_sctp_t *q;
	if ((mp = allocb(sizeof(*p) + sizeof(*q), BPRI_MED))) {
		mp->b_band = 254;
		mp->b_datap->db_type = M_PROTO;
		p = (SCTP_exdata_ind_t *) mp->b_wptr;
		p->PRIM_type = N_EXDATA_IND;
		p->QOS_length = sizeof(*q);
		p->QOS_offset = sizeof(*p);
		mp->b_wptr += sizeof(*p);
		q = (N_qos_str_sel_sctp_t *) mp->b_wptr;
		q->n_qos_type = N_QOS_STR_SEL_SCTP;
		q->ppi = ppi;
		q->sid = sid;
		q->ssn = ssn;
		q->tsn = tsn;
		mp->b_wptr += sizeof(*q);
		mp->b_cont = dp;
	}
	return (mp);
}

/*
 *  N_DATACK_IND    24 - Data acknowledgement indication
 *  ---------------------------------------------------------------
 */
#define n_datack_ind sctp_datack_ind
static inline mblk_t *sctp_datack_ind(uint ppi, uint sid, uint ssn, uint tsn)
{
	mblk_t *mp;
	SCTP_datack_ind_t *p;
	N_qos_str_sel_sctp_t *q;
	if ((mp = allocb(sizeof(*p) + sizeof(*q), BPRI_MED))) {
		mp->b_datap->db_type = M_PROTO;
		p = (SCTP_datack_ind_t *) mp->b_wptr;
		p->PRIM_type = N_DATACK_IND;
		p->QOS_length = sizeof(*q);
		p->QOS_offset = sizeof(*p);
		mp->b_wptr += sizeof(*p);
		q = (N_qos_str_sel_sctp_t *) mp->b_wptr;
		q->n_qos_type = N_QOS_STR_SEL_SCTP;
		q->ppi = ppi;
		q->sid = sid;
		q->ssn = ssn;
		q->tsn = tsn;
		mp->b_wptr += sizeof(*q);
	}
	return (mp);
}
#endif

#endif				/* __SS7_SCTP_H__ */


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

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

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