1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * The contents of this file are subject to the terms of the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Common Development and Distribution License (the "License").
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You may not use this file except in compliance with the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * or http://www.opensolaris.org/os/licensing.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * When distributing Covered Code, include this CDDL HEADER in each
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If applicable, add the following below this CDDL HEADER, with the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * fields enclosed by brackets "[]" replaced with your own identifying
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * information: Portions Copyright [yyyy] [name of copyright owner]
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER END
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Use is subject to license terms.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifndef _VCC_H
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define _VCC_H
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#pragma ident "%Z%%M% %I% %E% SMI"
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifdef __cplusplus
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoextern "C" {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/stream.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/ddi.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/sunddi.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/ioctl.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vcc and vntsd exchange information using ioctl commands. When vntsd starts,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * it uses VCC_NUM_CONSOLE to get number of existing ports and
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VCC_CONS_TBL to obtain the table of existing consoles. In this table,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vcc returns information about each of the console ports using vcc_console_t
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * structure. Vntsd then sleeps on polling vcc control port.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * When there is a change in configuration, such as addtion or deletion
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * of a console port, vcc wakes up vntsd via the poll events. Subsequently,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vntsd uses VCC_INQUIRY ioctl to determine the reason for wakeup. In
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * response to the inquiry, vcc provides a vcc_response_t structure
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * containing reason and port number.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If a port is being added or updated (group change), vntsd uses
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VCC_CONS_INFO ioctl with port number to obtain configuration of
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * the port.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If the port is being deleted, vntsd uses VCC_DEL_CONS_OK ioctl to notify
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vcc after its clean up is done. Vcc subsequently tears down
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * its internal configuration and remove the associated TTY minor node.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Only one open is allowd for each vcc port. If vntsd opens a port that is
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * already open, vntsd will use VNTSD_FORCE_CLOSE to take port from other
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * application
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* VCC CNTRL IOCTL */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_IOCTL_CMD ('c' << 8)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_NUM_CONSOLE VCC_IOCTL_CMD | 0x1 /* num of consoles */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_CONS_TBL VCC_IOCTL_CMD | 0x2 /* config table */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_INQUIRY VCC_IOCTL_CMD | 0x3 /* inquiry by vntsd */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_CONS_INFO VCC_IOCTL_CMD | 0x4 /* config */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_CONS_STATUS VCC_IOCTL_CMD | 0x5 /* console status */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_FORCE_CLOSE VCC_IOCTL_CMD | 0x6 /* force to close */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* reasons to wake up vntsd */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef enum {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VCC_CONS_ADDED, /* a port was added */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VCC_CONS_DELETED, /* a port was removed */
7636cb21f250f0485ca6052ffadc80ace93e6358lm VCC_CONS_MISS_ADDED, /* wakeup after an added port was deleted */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* XXX not implemented yet */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VCC_CONS_UPDATED /* a port configuration was changed */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vcc_reason_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * structure that vcc returns to vntsd in response to VCC_CONS_TBL and
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VCC_CONS_INFO ioctl call.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vcc_console {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int cons_no; /* console port number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t tcp_port; /* tcp port for the group */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char domain_name[MAXPATHLEN]; /* domain name */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char group_name[MAXPATHLEN]; /* group name */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char dev_name[MAXPATHLEN];
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vcc_console_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* structure that vcc sends to vntsd in response to wake up inquiry */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vcc_response {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int cons_no; /* console port number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vcc_reason_t reason; /* wake up reason */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vcc_response_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifdef __cplusplus
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif /* _VCC_H */