1/*- 2 * Copyright (c) 2010 Isilon Systems, Inc. 3 * Copyright (c) 2010 iX Systems, Inc. 4 * Copyright (c) 2010 Panasas, Inc. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice unmodified, this list of conditions, and the following 12 * disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#ifndef _LINUX_NET_H_ 30#define _LINUX_NET_H_ 31 32#include <sys/protosw.h> 33#include <sys/socket.h> 34#include <sys/socketvar.h> 35 36static inline int 37sock_create_kern(int family, int type, int proto, struct socket **res) 38{ 39 return -socreate(family, res, type, proto, curthread->td_ucred, 40 curthread); 41} 42 43static inline int 44sock_getname(struct socket *so, struct sockaddr *addr, int *sockaddr_len, 45 int peer) 46{ 47 struct sockaddr **nam; 48 int error; 49 50 nam = NULL; 51 if (peer) { 52 if ((so->so_state & (SS_ISCONNECTED|SS_ISCONFIRMING)) == 0) 53 return (-ENOTCONN); 54 55 error = (*so->so_proto->pr_usrreqs->pru_peeraddr)(so, nam); 56 } else 57 error = (*so->so_proto->pr_usrreqs->pru_sockaddr)(so, nam); 58 if (error) 59 return (-error); 60 *addr = **nam; 61 *sockaddr_len = addr->sa_len; 62 63 free(*nam, M_SONAME); 64 return (0); 65} 66 67static inline void 68sock_release(struct socket *so) 69{ 70 soclose(so); 71} 72 73#endif /* _LINUX_NET_H_ */ 74