1228060Sbapt/* 2228060Sbapt * ng_l2cap_misc.h 3228060Sbapt */ 4228060Sbapt 5228060Sbapt/*- 6228060Sbapt * Copyright (c) Maksim Yevmenkin <m_evmenkin@yahoo.com> 7228060Sbapt * All rights reserved. 8228060Sbapt * 9228060Sbapt * Redistribution and use in source and binary forms, with or without 10228060Sbapt * modification, are permitted provided that the following conditions 11228060Sbapt * are met: 12228060Sbapt * 1. Redistributions of source code must retain the above copyright 13228060Sbapt * notice, this list of conditions and the following disclaimer. 14228060Sbapt * 2. Redistributions in binary form must reproduce the above copyright 15228060Sbapt * notice, this list of conditions and the following disclaimer in the 16228060Sbapt * documentation and/or other materials provided with the distribution. 17228060Sbapt * 18228060Sbapt * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19228060Sbapt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20228060Sbapt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21228060Sbapt * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22228060Sbapt * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23228060Sbapt * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24228060Sbapt * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25228060Sbapt * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26228060Sbapt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27228060Sbapt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28228060Sbapt * SUCH DAMAGE. 29228060Sbapt * 30228060Sbapt * $Id: ng_l2cap_misc.h,v 1.3 2003/09/08 19:11:45 max Exp $ 31228060Sbapt * $FreeBSD$ 32228060Sbapt */ 33228060Sbapt 34228060Sbapt#ifndef _NETGRAPH_L2CAP_MISC_H_ 35228060Sbapt#define _NETGRAPH_L2CAP_MISC_H_ 36228060Sbapt 37228060Sbaptvoid ng_l2cap_send_hook_info (node_p, hook_p, void *, int); 38228060Sbapt 39228060Sbapt/* 40228060Sbapt * ACL Connections 41228060Sbapt */ 42228060Sbapt 43228060Sbaptng_l2cap_con_p ng_l2cap_new_con (ng_l2cap_p, bdaddr_p); 44228060Sbaptvoid ng_l2cap_con_ref (ng_l2cap_con_p); 45228060Sbaptvoid ng_l2cap_con_unref (ng_l2cap_con_p); 46228060Sbaptng_l2cap_con_p ng_l2cap_con_by_addr (ng_l2cap_p, bdaddr_p); 47228060Sbaptng_l2cap_con_p ng_l2cap_con_by_handle (ng_l2cap_p, u_int16_t); 48228060Sbaptvoid ng_l2cap_free_con (ng_l2cap_con_p); 49228060Sbapt 50228060Sbapt/* 51228060Sbapt * L2CAP channels 52228060Sbapt */ 53228060Sbapt 54228060Sbaptng_l2cap_chan_p ng_l2cap_new_chan (ng_l2cap_p, ng_l2cap_con_p, u_int16_t); 55228060Sbaptng_l2cap_chan_p ng_l2cap_chan_by_scid (ng_l2cap_p, u_int16_t); 56228060Sbaptvoid ng_l2cap_free_chan (ng_l2cap_chan_p); 57228060Sbapt 58228060Sbapt/* 59228060Sbapt * L2CAP command descriptors 60228060Sbapt */ 61228060Sbapt 62228060Sbapt#define ng_l2cap_link_cmd(con, cmd) \ 63228060Sbaptdo { \ 64228060Sbapt TAILQ_INSERT_TAIL(&(con)->cmd_list, (cmd), next); \ 65228060Sbapt ng_l2cap_con_ref((con)); \ 66228060Sbapt} while (0) 67228060Sbapt 68228060Sbapt#define ng_l2cap_unlink_cmd(cmd) \ 69228060Sbaptdo { \ 70228060Sbapt TAILQ_REMOVE(&((cmd)->con->cmd_list), (cmd), next); \ 71228060Sbapt ng_l2cap_con_unref((cmd)->con); \ 72228060Sbapt} while (0) 73228060Sbapt 74228060Sbapt#define ng_l2cap_free_cmd(cmd) \ 75228060Sbaptdo { \ 76228060Sbapt KASSERT(!callout_pending(&(cmd)->timo), ("Pending callout!")); \ 77228060Sbapt NG_FREE_M((cmd)->aux); \ 78228060Sbapt bzero((cmd), sizeof(*(cmd))); \ 79228060Sbapt free((cmd), M_NETGRAPH_L2CAP); \ 80228060Sbapt} while (0) 81228060Sbapt 82228060Sbaptng_l2cap_cmd_p ng_l2cap_new_cmd (ng_l2cap_con_p, ng_l2cap_chan_p, 83228060Sbapt u_int8_t, u_int8_t, u_int32_t); 84228060Sbaptng_l2cap_cmd_p ng_l2cap_cmd_by_ident (ng_l2cap_con_p, u_int8_t); 85228060Sbaptu_int8_t ng_l2cap_get_ident (ng_l2cap_con_p); 86228060Sbapt 87228060Sbapt/* 88228060Sbapt * Timeout 89228060Sbapt */ 90228060Sbapt 91228060Sbaptint ng_l2cap_discon_timeout (ng_l2cap_con_p); 92228060Sbaptint ng_l2cap_discon_untimeout (ng_l2cap_con_p); 93228060Sbaptint ng_l2cap_lp_timeout (ng_l2cap_con_p); 94228060Sbaptint ng_l2cap_lp_untimeout (ng_l2cap_con_p); 95228060Sbaptint ng_l2cap_command_timeout (ng_l2cap_cmd_p, int); 96228060Sbaptint ng_l2cap_command_untimeout (ng_l2cap_cmd_p); 97228060Sbapt 98228060Sbapt/* 99228060Sbapt * Other stuff 100228060Sbapt */ 101228060Sbapt 102228060Sbaptstruct mbuf * ng_l2cap_prepend (struct mbuf *, int); 103228060Sbaptng_l2cap_flow_p ng_l2cap_default_flow (void); 104228060Sbapt 105228060Sbapt#endif /* ndef _NETGRAPH_L2CAP_MISC_H_ */ 106228060Sbapt 107228060Sbapt