|
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/m3ua/m3ua.c
#ident "@(#) $RCSfile: m3ua.c,v $ $Name: $($Revision: 0.8.2.3 $) $Date: 2003/04/14 12:13:00 $"
static char const ident[] =
"$RCSfile: m3ua.c,v $ $Name: $($Revision: 0.8.2.3 $) $Date: 2003/04/14 12:13:00 $";
#include <linux/config.h>
#include <linux/version.h>
#ifdef MODVERSIONS
#include <linux/modversions.h>
#endif
#include <linux/module.h>
#include <sys/stream.h>
#include <sys/stropts.h>
#include <sys/cmn_err.h>
#include "m3ua.h"
#include "m3ua_data.h"
/*
* M3UA MULTIPLEXOR
* -------------------------------------------------------------------------
* This is a multiplexing driver for M3UA. When M3UA is opened by its control
* stream (typically a ua configuration daemon), it provides a control
* channel for configuration and routing. When opened normally, by a user
* process, it provides an OpenSS7 MTP Provider. OpenSS7 MTP Provider
* streams are I_LINKed and I_PLINKed under the multiplexor for Signalling
* Gateway (SG) Use by the M3UA control stream or M3UA user stream. MTP
* Provider streams can be opened for Application Server (AS) use. Transport
* streams (typically SCTP) are I_LINKed or I_PLINKed under the multiplexor
* for both SG and AS use by the UA/LM control stream.
*/
#define M3UA_DESCRIP "M3UA STREAMS MULTIPLEXING DRIVER."
#define M3UA_COPYRIGHT "Copyright (c) 1997-2002 OpenSS7 Corp. All Rights Reserved."
#define M3UA_DEVICE "Part of the OpenSS7 Stack for LiS STREAMS."
#define M3UA_CONTACT "Brian Bidulock <bidulock@openss7.org>"
#define M3UA_LICENSE "GPL"
#define M3UA_BANNER M3UA_DESCRIP "\n" \
M3UA_COPYRIGHT "\n" \
M3UA_DEVICE "\n" \
M3UA_CONTACT "\n"
#ifdef MODULE
MODULE_AUTHOR(M3UA_CONTACT);
MODULE_DESCRIPTION(M3UA_DESCRIP);
MODULE_SUPPORTED_DEVICE(M3UA_DEVICE);
#ifdef MODULE_LICENSE
MODULE_LICENSE(M3UA_LICENSE);
#endif
#define MODULE_STATIC static
#else
#define MOD_INC_USE_COUNT
#define MOD_DEC_USE_COUNT
#endif
/*
* =========================================================================
*
* STREAMS Definitions
*
* =========================================================================
*/
static struct module_info m3ua_minfo = {
0, /* Module ID number */
"m3ua", /* Module name */
1, /* Min packet size accepted *//* XXX */
512, /* Max packet size accepted *//* XXX */
8 * 512, /* Hi water mark *//* XXX */
1 * 512 /* Lo water mark *//* XXX */
};
static struct qinit m3ua_rinit = {
ua_rput, /* Read put (msg from below) */
ua_rsrv, /* Read queue service */
ua_open, /* Each open */
ua_close, /* Last close */
NULL, /* Admin (not used) */
&m3ua_minfo, /* Information */
NULL /* Statistics */
};
static struct qinit m3ua_winit = {
ua_wput, /* Write put (msg from above) */
ua_wsrv, /* Write queue service */
NULL, /* Each open */
NULL, /* Last close */
NULL, /* Admin (not used) */
&m3ua_minfo, /* Information */
NULL /* Statistics */
};
MODULE_STATIC struct streamtab m3ua_info = {
&m3ua_rinit, /* Upper read queue */
&m3ua_winit, /* Upper write queue */
&m3ua_rinit, /* Lower read queue */
&m3ua_winit /* Lower write queue */
};
/*
* =========================================================================
*
* OPEN and CLOSE
*
* =========================================================================
*/
static dp_t *m3ua_opens_list = NULL;
static lp_t *m3ua_links_list = NULL;
static struct ua_driver m3ua_dinfo = {
M3UA_CMAJOR, /* Major device number */
M3UA_CMINOR, /* Number of minor devices */
sizeof(mtp_t), /* Private structure size */
NULL, /* Current control queue */
&m3ua_lmq_u_ops, /* LMQ User operations */
&m3ua_ss7_u_ops, /* SS7 User operations */
&m3ua_opens_list, /* Opened structures list */
&m3ua_links_list /* LInked structures list */
};
/*
* =========================================================================
*
* LiS MODULE INITIALIZATION
*
* =========================================================================
*/
static m3ua_initialized = 0;
#ifndef LIS_REGISTERED
static inline void m3ua_init(void)
#else
__initfunc(void m3ua_init(void))
#endif
{
if (m3ua_initialized)
return;
m3ua_initialized = 1;
printk(KERN_INFO M2UA_BANNER); /* console splash */
#ifndef LIS_REGISTERED
if (lis_register_strdev(M2UA_CMAJOR, &m3ua_info, M2UA_NMINOR, m3ua_minfo.mi_idname) < 0) {
cmn_err(CE_NOTE, "m3ua: couldn't register driver!\n");
m3ua_minfo.mi_idnum = 0;
}
m3ua_minfo.mi_idnum = M2UA_CMAJOR;
#endif
m3ua_driver = &m3ua_dinfo;
}
#ifndef LIS_REGISTERED
static inline void m3ua_terminate(void)
#else
__initfunc(void m3ua_terminate(void))
#endif
{
if (!m3ua_initialized)
return;
m3ua_initialized = 0;
#ifndef LIS_REGISTERED
if (m3ua_minfo.mi_idnum)
if (lis_unregister_strdev(m3ua_minfo.mi_idnum) < 0)
cmn_err(CE_WARN, "m3ua: couldn't unregister driver!\n");
#endif
m3ua_driver = NULL;
}
/*
* =========================================================================
*
* LINUX KERNEL MODULE INITIALIZATION
*
* =========================================================================
*/
#ifdef MODULE
int init_module(void)
{
m3ua_init();
return (0);
}
void cleanup_module(void)
{
m3ua_terminate();
return;
}
#endif
|
|||||||||||||||||||||||||||
|
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
|
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
|||||||||||||||||||||||||||