1/*-
2 * Copyright (c) 2004 Robert N. M. Watson
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * Copyright (c) 1990, 1994 Regents of The University of Michigan.
27 * All Rights Reserved.
28 *
29 * Permission to use, copy, modify, and distribute this software and
30 * its documentation for any purpose and without fee is hereby granted,
31 * provided that the above copyright notice appears in all copies and
32 * that both that copyright notice and this permission notice appear
33 * in supporting documentation, and that the name of The University
34 * of Michigan not be used in advertising or publicity pertaining to
35 * distribution of the software without specific, written prior
36 * permission. This software is supplied as is without expressed or
37 * implied warranties of any kind.
38 *
39 * This product includes software developed by the University of
40 * California, Berkeley and its contributors.
41 *
42 *	Research Systems Unix Group
43 *	The University of Michigan
44 *	c/o Wesley Craig
45 *	535 W. William Street
46 *	Ann Arbor, Michigan
47 *	+1-313-764-2278
48 *	netatalk@umich.edu
49 *
50 * $FreeBSD$
51 */
52
53#ifndef _NETATALK_DDP_PCB_H_
54#define	_NETATALK_DDP_PCB_H_
55
56int	at_pcballoc(struct socket *so);
57int	at_pcbconnect(struct ddpcb *ddp, struct sockaddr *addr,
58	    struct thread *td);
59void	at_pcbdetach(struct socket *so, struct ddpcb *ddp);
60void	at_pcbdisconnect(struct ddpcb *ddp);
61int	at_pcbsetaddr(struct ddpcb *ddp, struct sockaddr *addr,
62	    struct thread *td);
63void	at_sockaddr(struct ddpcb *ddp, struct sockaddr **addr);
64
65/* Lock macros for per-pcb locks. */
66#define	DDP_LOCK_INIT(ddp)	mtx_init(&(ddp)->ddp_mtx, "ddp_mtx",	\
67				    NULL, MTX_DEF)
68#define	DDP_LOCK_DESTROY(ddp)	mtx_destroy(&(ddp)->ddp_mtx)
69#define	DDP_LOCK(ddp)		mtx_lock(&(ddp)->ddp_mtx)
70#define	DDP_UNLOCK(ddp)		mtx_unlock(&(ddp)->ddp_mtx)
71#define	DDP_LOCK_ASSERT(ddp)	mtx_assert(&(ddp)->ddp_mtx, MA_OWNED)
72
73/* Lock macros for global pcb list lock. */
74#define	DDP_LIST_LOCK_INIT()	mtx_init(&ddp_list_mtx, "ddp_list_mtx",	\
75				    NULL, MTX_DEF)
76#define	DDP_LIST_LOCK_DESTROY()	mtx_destroy(&ddp_list_mtx)
77#define	DDP_LIST_XLOCK()	mtx_lock(&ddp_list_mtx)
78#define	DDP_LIST_XUNLOCK()	mtx_unlock(&ddp_list_mtx)
79#define	DDP_LIST_XLOCK_ASSERT()	mtx_assert(&ddp_list_mtx, MA_OWNED)
80#define	DDP_LIST_SLOCK()	mtx_lock(&ddp_list_mtx)
81#define	DDP_LIST_SUNLOCK()	mtx_unlock(&ddp_list_mtx)
82#define	DDP_LIST_SLOCK_ASSERT()	mtx_assert(&ddp_list_mtx, MA_OWNED)
83
84#endif /* !_NETATALK_DDP_PCB_H_ */
85