1219820Sjeff/*-
2219820Sjeff * Copyright (c) 2004 Robert N. M. Watson
3219820Sjeff * All rights reserved.
4219820Sjeff *
5219820Sjeff * Redistribution and use in source and binary forms, with or without
6219820Sjeff * modification, are permitted provided that the following conditions
7219820Sjeff * are met:
8219820Sjeff * 1. Redistributions of source code must retain the above copyright
9219820Sjeff *    notice, this list of conditions and the following disclaimer.
10219820Sjeff * 2. Redistributions in binary form must reproduce the above copyright
11219820Sjeff *    notice, this list of conditions and the following disclaimer in the
12219820Sjeff *    documentation and/or other materials provided with the distribution.
13219820Sjeff *
14219820Sjeff * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15219820Sjeff * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16219820Sjeff * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17219820Sjeff * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18219820Sjeff * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19219820Sjeff * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20219820Sjeff * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21219820Sjeff * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22219820Sjeff * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23219820Sjeff * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24219820Sjeff * SUCH DAMAGE.
25219820Sjeff *
26219820Sjeff * Copyright (c) 1990, 1994 Regents of The University of Michigan.
27219820Sjeff * All Rights Reserved.
28219820Sjeff *
29219820Sjeff * Permission to use, copy, modify, and distribute this software and
30219820Sjeff * its documentation for any purpose and without fee is hereby granted,
31219820Sjeff * provided that the above copyright notice appears in all copies and
32219820Sjeff * that both that copyright notice and this permission notice appear
33219820Sjeff * in supporting documentation, and that the name of The University
34219820Sjeff * of Michigan not be used in advertising or publicity pertaining to
35219820Sjeff * distribution of the software without specific, written prior
36219820Sjeff * permission. This software is supplied as is without expressed or
37219820Sjeff * implied warranties of any kind.
38219820Sjeff *
39219820Sjeff * This product includes software developed by the University of
40219820Sjeff * California, Berkeley and its contributors.
41219820Sjeff *
42219820Sjeff *	Research Systems Unix Group
43219820Sjeff *	The University of Michigan
44219820Sjeff *	c/o Wesley Craig
45219820Sjeff *	535 W. William Street
46219820Sjeff *	Ann Arbor, Michigan
47219820Sjeff *	+1-313-764-2278
48219820Sjeff *	netatalk@umich.edu
49219820Sjeff *
50219820Sjeff * $FreeBSD: releng/10.2/sys/netatalk/ddp_pcb.h 165974 2007-01-12 15:07:51Z rwatson $
51219820Sjeff */
52219820Sjeff
53219820Sjeff#ifndef _NETATALK_DDP_PCB_H_
54219820Sjeff#define	_NETATALK_DDP_PCB_H_
55219820Sjeff
56219820Sjeffint	at_pcballoc(struct socket *so);
57219820Sjeffint	at_pcbconnect(struct ddpcb *ddp, struct sockaddr *addr,
58219820Sjeff	    struct thread *td);
59219820Sjeffvoid	at_pcbdetach(struct socket *so, struct ddpcb *ddp);
60219820Sjeffvoid	at_pcbdisconnect(struct ddpcb *ddp);
61219820Sjeffint	at_pcbsetaddr(struct ddpcb *ddp, struct sockaddr *addr,
62219820Sjeff	    struct thread *td);
63219820Sjeffvoid	at_sockaddr(struct ddpcb *ddp, struct sockaddr **addr);
64219820Sjeff
65219820Sjeff/* Lock macros for per-pcb locks. */
66219820Sjeff#define	DDP_LOCK_INIT(ddp)	mtx_init(&(ddp)->ddp_mtx, "ddp_mtx",	\
67219820Sjeff				    NULL, MTX_DEF)
68219820Sjeff#define	DDP_LOCK_DESTROY(ddp)	mtx_destroy(&(ddp)->ddp_mtx)
69219820Sjeff#define	DDP_LOCK(ddp)		mtx_lock(&(ddp)->ddp_mtx)
70219820Sjeff#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