t_ksndudat.c revision de8c4a14ec9a49bad5e62b2cfa6c1ba21de1c708
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER START
843e19887f64dde75055cf8842fc4db2171eff45johnlev * The contents of this file are subject to the terms of the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Common Development and Distribution License (the "License").
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You may not use this file except in compliance with the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
843e19887f64dde75055cf8842fc4db2171eff45johnlev * See the License for the specific language governing permissions
843e19887f64dde75055cf8842fc4db2171eff45johnlev * and limitations under the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * When distributing Covered Code, include this CDDL HEADER in each
843e19887f64dde75055cf8842fc4db2171eff45johnlev * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * If applicable, add the following below this CDDL HEADER, with the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * fields enclosed by brackets "[]" replaced with your own identifying
843e19887f64dde75055cf8842fc4db2171eff45johnlev * information: Portions Copyright [yyyy] [name of copyright owner]
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER END
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Use is subject to license terms.
843e19887f64dde75055cf8842fc4db2171eff45johnlev/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab/* All Rights Reserved */
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * University Copyright- Copyright (c) 1982, 1986, 1988
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * The Regents of the University of California
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * All Rights Reserved
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * University Acknowledgment- Portions of this document are derived from
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * software developed by the University of California, Berkeley, and its
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * contributors.
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * TLI-like function to send datagrams over a specified
843e19887f64dde75055cf8842fc4db2171eff45johnlev * transport endpoint.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * 0 on success or positive error code.
843e19887f64dde75055cf8842fc4db2171eff45johnlevt_ksndudata(TIUSER *tiptr, struct t_kunitdata *unitdata, frtn_t *frtn)
843e19887f64dde75055cf8842fc4db2171eff45johnlev * See if Class 0 is required
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * user has supplied their own buffer, all we have to
5d2eda970e48f8985448151c73e699614ce9f357John Levon * do is allocate a class 0 streams buffer and set it
5d2eda970e48f8985448151c73e699614ce9f357John Levon if ((dbp = (mblk_t *)esballoc((uchar_t *)unitdata->udata.buf,
843e19887f64dde75055cf8842fc4db2171eff45johnlev bcopy(unitdata->udata.buf, dbp->b_wptr, unitdata->udata.len);
843e19887f64dde75055cf8842fc4db2171eff45johnlev * user has done it all
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * zero length message.
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * Okay, put the control part in
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * Usually sendto()s are performed with the credential of the caller;
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * in this particular case we specifically use the credential of
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * the opener as this call is typically done in the context of a user
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * process but on behalf of the kernel, e.g., a client connection
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * to a server which is later shared by different users.
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * At open time, we make sure to set fp->f_cred to kcred if such is
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * the case.
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * Note: if the receiver uses SCM_UCRED/getpeerucred the pid will
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * appear as -1.
843e19887f64dde75055cf8842fc4db2171eff45johnlev if (strwaitbuf(msgsz + unitdata->addr.len + unitdata->opt.len,
843e19887f64dde75055cf8842fc4db2171eff45johnlev /* LINTED pointer alignment */
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab bcopy(unitdata->opt.buf, bp->b_wptr + msgsz, unitdata->opt.len);
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * link the two.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Put it to the transport provider.
a576ab5b6e08c47732b3dedca9eaa8a8cbb85720rab * tli_send() always consumes the message.