148698a83SMaksim Yevmenkin /* 248698a83SMaksim Yevmenkin * ng_btsocket_sco.h 348698a83SMaksim Yevmenkin */ 448698a83SMaksim Yevmenkin 548698a83SMaksim Yevmenkin /*- 64d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 7fe267a55SPedro F. Giffuni * 848698a83SMaksim Yevmenkin * Copyright (c) 2001-2002 Maksim Yevmenkin <m_evmenkin@yahoo.com> 948698a83SMaksim Yevmenkin * All rights reserved. 1048698a83SMaksim Yevmenkin * 1148698a83SMaksim Yevmenkin * Redistribution and use in source and binary forms, with or without 1248698a83SMaksim Yevmenkin * modification, are permitted provided that the following conditions 1348698a83SMaksim Yevmenkin * are met: 1448698a83SMaksim Yevmenkin * 1. Redistributions of source code must retain the above copyright 1548698a83SMaksim Yevmenkin * notice, this list of conditions and the following disclaimer. 1648698a83SMaksim Yevmenkin * 2. Redistributions in binary form must reproduce the above copyright 1748698a83SMaksim Yevmenkin * notice, this list of conditions and the following disclaimer in the 1848698a83SMaksim Yevmenkin * documentation and/or other materials provided with the distribution. 1948698a83SMaksim Yevmenkin * 2048698a83SMaksim Yevmenkin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 2148698a83SMaksim Yevmenkin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2248698a83SMaksim Yevmenkin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2348698a83SMaksim Yevmenkin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2448698a83SMaksim Yevmenkin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2548698a83SMaksim Yevmenkin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2648698a83SMaksim Yevmenkin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2748698a83SMaksim Yevmenkin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2848698a83SMaksim Yevmenkin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2948698a83SMaksim Yevmenkin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3048698a83SMaksim Yevmenkin * SUCH DAMAGE. 3148698a83SMaksim Yevmenkin * 3248698a83SMaksim Yevmenkin * $Id: ng_btsocket_sco.h,v 1.3 2005/10/31 18:08:52 max Exp $ 3348698a83SMaksim Yevmenkin */ 3448698a83SMaksim Yevmenkin 3548698a83SMaksim Yevmenkin #ifndef _NETGRAPH_BTSOCKET_SCO_H_ 3648698a83SMaksim Yevmenkin #define _NETGRAPH_BTSOCKET_SCO_H_ 3748698a83SMaksim Yevmenkin 3848698a83SMaksim Yevmenkin /* 3948698a83SMaksim Yevmenkin * SCO routing entry 4048698a83SMaksim Yevmenkin */ 4148698a83SMaksim Yevmenkin 4248698a83SMaksim Yevmenkin struct ng_hook; 4348698a83SMaksim Yevmenkin struct ng_message; 4448698a83SMaksim Yevmenkin 4548698a83SMaksim Yevmenkin struct ng_btsocket_sco_rtentry { 4648698a83SMaksim Yevmenkin bdaddr_t src; /* source BD_ADDR */ 4748698a83SMaksim Yevmenkin u_int16_t pkt_size; /* mtu */ 4848698a83SMaksim Yevmenkin u_int16_t num_pkts; /* buffer size */ 4948698a83SMaksim Yevmenkin int32_t pending; /* pending packets */ 5048698a83SMaksim Yevmenkin struct ng_hook *hook; /* downstream hook */ 5148698a83SMaksim Yevmenkin LIST_ENTRY(ng_btsocket_sco_rtentry) next; /* link to next */ 5248698a83SMaksim Yevmenkin }; 5348698a83SMaksim Yevmenkin typedef struct ng_btsocket_sco_rtentry ng_btsocket_sco_rtentry_t; 5448698a83SMaksim Yevmenkin typedef struct ng_btsocket_sco_rtentry * ng_btsocket_sco_rtentry_p; 5548698a83SMaksim Yevmenkin 5648698a83SMaksim Yevmenkin /***************************************************************************** 5748698a83SMaksim Yevmenkin ***************************************************************************** 5848698a83SMaksim Yevmenkin ** SOCK_SEQPACKET SCO sockets ** 5948698a83SMaksim Yevmenkin ***************************************************************************** 6048698a83SMaksim Yevmenkin *****************************************************************************/ 6148698a83SMaksim Yevmenkin 6248698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_SENDSPACE 1024 6348698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_RECVSPACE (64 * 1024) 6448698a83SMaksim Yevmenkin 6548698a83SMaksim Yevmenkin /* 6648698a83SMaksim Yevmenkin * Bluetooth SCO socket PCB 6748698a83SMaksim Yevmenkin */ 6848698a83SMaksim Yevmenkin 6948698a83SMaksim Yevmenkin struct ng_btsocket_sco_pcb { 7048698a83SMaksim Yevmenkin struct socket *so; /* Pointer to socket */ 7148698a83SMaksim Yevmenkin 7248698a83SMaksim Yevmenkin bdaddr_t src; /* Source address */ 7348698a83SMaksim Yevmenkin bdaddr_t dst; /* Destination address */ 7448698a83SMaksim Yevmenkin 7548698a83SMaksim Yevmenkin u_int16_t con_handle; /* connection handle */ 7648698a83SMaksim Yevmenkin 7748698a83SMaksim Yevmenkin u_int16_t flags; /* socket flags */ 7848698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_CLIENT (1 << 0) /* socket is client */ 7948698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_TIMO (1 << 1) /* timeout pending */ 8048698a83SMaksim Yevmenkin 8148698a83SMaksim Yevmenkin u_int8_t state; /* socket state */ 8248698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_CLOSED 0 /* socket closed */ 8348698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_CONNECTING 1 /* wait for connect */ 8448698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_OPEN 2 /* socket open */ 8548698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_DISCONNECTING 3 /* wait for disconnect */ 8648698a83SMaksim Yevmenkin 8748698a83SMaksim Yevmenkin struct callout timo; /* timeout */ 8848698a83SMaksim Yevmenkin 8948698a83SMaksim Yevmenkin ng_btsocket_sco_rtentry_p rt; /* routing info */ 9048698a83SMaksim Yevmenkin 9148698a83SMaksim Yevmenkin struct mtx pcb_mtx; /* pcb mutex */ 9248698a83SMaksim Yevmenkin 9348698a83SMaksim Yevmenkin LIST_ENTRY(ng_btsocket_sco_pcb) next; /* link to next PCB */ 9448698a83SMaksim Yevmenkin }; 9548698a83SMaksim Yevmenkin typedef struct ng_btsocket_sco_pcb ng_btsocket_sco_pcb_t; 9648698a83SMaksim Yevmenkin typedef struct ng_btsocket_sco_pcb * ng_btsocket_sco_pcb_p; 9748698a83SMaksim Yevmenkin 9848698a83SMaksim Yevmenkin #define so2sco_pcb(so) \ 9948698a83SMaksim Yevmenkin ((struct ng_btsocket_sco_pcb *)((so)->so_pcb)) 10048698a83SMaksim Yevmenkin 10148698a83SMaksim Yevmenkin /* 10248698a83SMaksim Yevmenkin * Bluetooth SCO socket methods 10348698a83SMaksim Yevmenkin */ 10448698a83SMaksim Yevmenkin 10548698a83SMaksim Yevmenkin #ifdef _KERNEL 10648698a83SMaksim Yevmenkin 10748698a83SMaksim Yevmenkin void ng_btsocket_sco_abort (struct socket *); 10848698a83SMaksim Yevmenkin void ng_btsocket_sco_close (struct socket *); 109cfb1e929SGleb Smirnoff int ng_btsocket_sco_accept (struct socket *, struct sockaddr *); 11048698a83SMaksim Yevmenkin int ng_btsocket_sco_attach (struct socket *, int, struct thread *); 11148698a83SMaksim Yevmenkin int ng_btsocket_sco_bind (struct socket *, struct sockaddr *, 11248698a83SMaksim Yevmenkin struct thread *); 11348698a83SMaksim Yevmenkin int ng_btsocket_sco_connect (struct socket *, struct sockaddr *, 11448698a83SMaksim Yevmenkin struct thread *); 115f277746eSGleb Smirnoff int ng_btsocket_sco_control (struct socket *, u_long, void *, 11648698a83SMaksim Yevmenkin struct ifnet *, struct thread *); 11748698a83SMaksim Yevmenkin int ng_btsocket_sco_ctloutput (struct socket *, struct sockopt *); 11848698a83SMaksim Yevmenkin void ng_btsocket_sco_detach (struct socket *); 11948698a83SMaksim Yevmenkin int ng_btsocket_sco_disconnect (struct socket *); 12048698a83SMaksim Yevmenkin int ng_btsocket_sco_listen (struct socket *, int, struct thread *); 121*0fac350cSGleb Smirnoff int ng_btsocket_sco_peeraddr (struct socket *, struct sockaddr *); 12248698a83SMaksim Yevmenkin int ng_btsocket_sco_send (struct socket *, int, struct mbuf *, 12348698a83SMaksim Yevmenkin struct sockaddr *, struct mbuf *, 12448698a83SMaksim Yevmenkin struct thread *); 125*0fac350cSGleb Smirnoff int ng_btsocket_sco_sockaddr (struct socket *, struct sockaddr *); 12648698a83SMaksim Yevmenkin 12748698a83SMaksim Yevmenkin #endif /* _KERNEL */ 12848698a83SMaksim Yevmenkin 12948698a83SMaksim Yevmenkin #endif /* _NETGRAPH_BTSOCKET_SCO_H_ */ 130