674cb4b09c0706bc1cb658e79f39997d43bad8a0Reza Sabdar * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Use is subject to license terms.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * BSD 3 Clause License
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Copyright (c) 2007, The Storage Networking Industry Association.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Redistribution and use in source and binary forms, with or without
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * modification, are permitted provided that the following conditions
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Redistributions of source code must retain the above copyright
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * notice, this list of conditions and the following disclaimer.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Redistributions in binary form must reproduce the above copyright
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * notice, this list of conditions and the following disclaimer in
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * the documentation and/or other materials provided with the
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * distribution.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Neither the name of The Storage Networking Industry Association (SNIA)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * nor the names of its contributors may be used to endorse or promote
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * products derived from this software without specific prior written
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * permission.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * POSSIBILITY OF SUCH DAMAGE.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* This file contains all the door server code */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* static variables */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* static routines */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarstatic void ndmp_door_server(void *cookie, char *ptr, size_t size,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Statistics used in ndmpstat command
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar "ndmp_door_init: ndmpd service is already running.");
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar if ((ndmp_door_fildes = door_create(ndmp_door_server,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar NDMP_LOG(LOG_DEBUG, "ndmp_door_init: Could not create door.");
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar return (-1);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar NDMP_LOG(LOG_DEBUG, "ndmp_door_init: Can't create %s: %m.",
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar return (-1);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar if (fattach(ndmp_door_fildes, NDMP_DOOR_SVC) < 0) {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar NDMP_LOG(LOG_DEBUG, "ndmp_door_init: fattach failed %m");
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar return (-1);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar NDMP_LOG(LOG_DEBUG, "ndmp_door_init: Door server successfully started");
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar "Service already running: pid %ld", info.di_target);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar/* door server */
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarndmp_door_server(void *cookie, char *ptr, size_t size,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar unsigned int used;
674cb4b09c0706bc1cb658e79f39997d43bad8a0Reza Sabdar NDMP_LOG(LOG_DEBUG, "ndmp_door_server: req_type=%d", req_type);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_door_put_int32(enc_ctx, NDMP_DOOR_SRV_SUCCESS);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_door_put_int32(enc_ctx, NDMP_DOOR_SRV_SUCCESS);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_door_put_int32(enc_ctx, NDMP_DOOR_SRV_SUCCESS);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_door_put_int32(enc_ctx, NDMP_DOOR_SRV_SUCCESS);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar "ndmp_door_server: Invalid request type 0x%x", req_type);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar if ((dec_status = ndmp_door_decode_finish(dec_ctx)) != 0)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar if ((enc_status = ndmp_door_encode_finish(enc_ctx, &used)) != 0)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar ndmp_door_put_int32(enc_ctx, NDMP_DOOR_SRV_ERROR);