root/usr/src/cmd/bnu/dk.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/*        All Rights Reserved   */


#ident  "%Z%%M% %I%     %E% SMI"

#ifndef _BNU_DK_H
#define _BNU_DK_H

#ifdef DIAL
#define GLOBAL static
#define EXTERN static
#else
#define EXTERN extern
#define GLOBAL
#endif

/*
 *      DATAKIT VCS User Level definitions
 *              @(#)dk.h        2.13+BNU DKHOST 87/06/01
 *
 *      CommKit(R) Software - Datakit(R) VCS Interface Release
 */


/*
 *      ioctl codes
 */

#define DKIODIAL        (('k'<<8)|0)    /* dial out */
#define DKIOCNEW        (('k'<<8)|1)    /* offer a service */
#define DKIOCREQ        (('k'<<8)|2)    /* request service (SU only) */
#define DKIORESET       (('k'<<8)|3)    /* reset interface */
#define DKKMCSET        (('k'<<8)|4)    /* associate logical interface
                                           with physical KMC # */

#define DKIOCSPL        (('s'<<8)|1)    /* splice two circuits together (SU only) */
#define DIOCSWAIT       (('s'<<8)|2)    /* wait for splice to take place */


/*     driver control        */

#define DIOCEXCL        (('d'<<8)|1)    /* exclusive use */
#define DIOCNXCL        (('d'<<8)|2)    /* reset exclusive use */
#define DIOCRMODE       (('d'<<8)|3)    /* set receiver termination modes */
#define DIOCQQABO       (('d'<<8)|4)    /* inquire status of last read */
#define DIOCSIG         (('d'<<8)|5)    /* start short read, signal when done */

#define DIOCXCTL        (('d'<<8)|8)    /* send ctl envelope on next write */
#define DIOCFLUSH       (('d'<<8)|9)    /* flush output */
#define DIOCSETK        (('d'<<8)|10)   /* debug info from kmc xmit&recv */
#define DIOCQSTAT       (('d'<<8)|11)   /* return 3B hw/fw log data */
#define DIOCBSIZE       (('d'<<8)|12)   /* set URP block size */
#define DIOCTIME        (('d'<<8)|13)   /* set stagnation timeout value */
#define DIOCTRAP        (('d'<<8)|14)   /* activate trsave trace for channel */

/*      interface memory read/write codes        */

#define DIOCHWREAD      (('d'<<8)|15)   /* read interface RAM */
#define DIOCHWRITE      (('d'<<8)|16)   /* write interface RAM */

/*      diagnostic control codes        */

#define DIOCDKDGN       (('d'<<8)|17)   /* execute on-line diagnostics */
#define DIOCDGNSET      (('d'<<8)|18)   /* initialize diagnostic mode */
#define DIOCDGNCLR      (('d'<<8)|19)   /* clear diagnostic mode */

/*      3b2/PE codes                    */
#define TCDKIDLD        (('d'<<8)|20)   /* download the PE */
#define TCDKIFCF        (('d'<<8)|21)   /* Force call to function */
#define TCDKIRST        (('d'<<8)|22)   /* Reset the PE board */
#define TCDKISYSG       (('d'<<8)|23)   /*sysgen the PE board */

/* Get info from driver */
#define DIOCINFO        (('d'<<8)|24)   /* get chans per interface*/
#define TCDKIBUG        (('d'<<8)|25)   /*turn debug on on the PE board */
#define DIOOPEN         (('d'<<8)|26)   /* inquire channel open status*/
/*      special codes used by dkxstdio  */

#define DXIOEXIT        (('D'<<8)|'T')  /* process exit code */

/*
 *      structure returned from DIOCQQABO giving receive status
 */
struct dkqqabo {
        short   rcv_resid ;             /* residual length in buffer */
        short   rcv_reason ;            /* set of bits giving reasons */
        short   rcv_ctlchar ;           /* ctl char that finished block */
} ;

/*
 *   receive mode, and completion indicators
 *      also defined in sys/dkit.h
 */

#ifndef DKR_FULL
#define DKR_FULL        01      /* buffer full, normal read done */
#define DKR_CNTL        02      /* read terminated on control character */
#define DKR_ABORT       010     /* receive aborted by higher level command */
#define DKR_BLOCK       040     /* end of block */
#define DKR_TIME        0100    /* end of time limit reached */
#endif



/*
 *      structure passed with ioctl to request a service
 *      actually used as a general-purpose struct to pass
 *      info from a kernel ioctl to user space.
 */
struct diocreq {
        short   req_traffic ;           /* traffic intensity generated */
        short   req_1param ;            /* typ: service requested */
        short   req_2param ;            /* parameter to server */
} ;


/*
 *      values returned from service request
 */
#define req_error       req_traffic
#define req_driver      req_traffic
#define req_chans       req_traffic
#define req_chmin       req_1param


/*
 *      structure received by server when new connection made
 */
struct mgrmsg {
        short   m_chan ;                /* channel number of connection */
        unsigned short  m_tstamp ;      /* time stamp of request */
        char *  m_protocol ;            /* protocol options from user */
        char *  m_origtype ;            /* type of originating device */
        char *  m_parm ;                /* parameter string from user */
        char *  m_uid ;                 /* param from system/user, aka UID */
        char *  m_dial ;                /* dial string entered */
        char *  m_source ;              /* originator, as known to remote node */
        char *  m_lname ;               /* originator, as known to local node */
        char *  m_service ;             /* service type requested by user */
        char *  m_lflag ;               /* L == call from local node,
                                         * R == call from a remote one.   */
        char *  m_srcnode;              /* originating node (last segment)   */
        char *  m_srcmod;               /* originating mod                   */
        char *  m_srcchan;              /* originating channel               */
        char *  m_cflag;                /* call flag: F=first, P=previous    */
        char *  m_errmsg ;              /* possible error msg if m_chan <= 0 */
} ;



/*
 *      routines declared in libdk.a
 */
EXTERN char             *dknamer();
EXTERN char             *dtnamer();
EXTERN char             *dxnamer();
EXTERN char             *dkfcanon(), *dktcanon();
EXTERN char             *dkerr();
EXTERN char             *maphost(), *miscfield();
#ifndef DIAL
EXTERN char             mh_hostname[];
#endif
EXTERN struct mgrmsg    *dkmgr();

EXTERN int              dk_verbose, dk_errno;


/*
 *      structure passed with ioctl to request a splice
 */
struct diocspl {
        short   spl_fdin;               /* the other file descriptor */
        short   spl_un1used;
        short   spl_un2used;
} ;

/*
 * Default file names
 */

#define SRVTAB "/etc/dksrvtab"
#define UIDTAB "/etc/dkuidtab"
#define SRVLOG "/usr/adm/dksrvlog"
#define HOSTAB "/etc/dkhosts"
#define DOTAB  "/usr/lib/dkdotab"

/*
 * Number of longs in the stat array returned by the firmware
 */
#define STATLEN 16

#endif