Path: blob/main/sys/netgraph/bluetooth/include/ng_btsocket_l2cap.h
34814 views
/*1* ng_btsocket_l2cap.h2*/34/*-5* SPDX-License-Identifier: BSD-2-Clause6*7* Copyright (c) 2001-2002 Maksim Yevmenkin <[email protected]>8* All rights reserved.9*10* Redistribution and use in source and binary forms, with or without11* modification, are permitted provided that the following conditions12* are met:13* 1. Redistributions of source code must retain the above copyright14* notice, this list of conditions and the following disclaimer.15* 2. Redistributions in binary form must reproduce the above copyright16* notice, this list of conditions and the following disclaimer in the17* documentation and/or other materials provided with the distribution.18*19* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND20* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE21* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE22* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE23* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL24* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS25* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)26* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT27* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY28* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF29* SUCH DAMAGE.30*31* $Id: ng_btsocket_l2cap.h,v 1.4 2003/03/25 23:53:33 max Exp $32*/3334#ifndef _NETGRAPH_BTSOCKET_L2CAP_H_35#define _NETGRAPH_BTSOCKET_L2CAP_H_3637/*38* L2CAP routing entry39*/4041struct ng_hook;42struct ng_message;4344struct ng_btsocket_l2cap_rtentry {45bdaddr_t src; /* source BD_ADDR */46struct ng_hook *hook; /* downstream hook */47LIST_ENTRY(ng_btsocket_l2cap_rtentry) next; /* link to next */48};49typedef struct ng_btsocket_l2cap_rtentry ng_btsocket_l2cap_rtentry_t;50typedef struct ng_btsocket_l2cap_rtentry * ng_btsocket_l2cap_rtentry_p;5152/*****************************************************************************53*****************************************************************************54** SOCK_RAW L2CAP sockets **55*****************************************************************************56*****************************************************************************/5758#define NG_BTSOCKET_L2CAP_RAW_SENDSPACE NG_L2CAP_MTU_DEFAULT59#define NG_BTSOCKET_L2CAP_RAW_RECVSPACE NG_L2CAP_MTU_DEFAULT6061/*62* Bluetooth raw L2CAP socket PCB63*/6465struct ng_btsocket_l2cap_raw_pcb {66struct socket *so; /* socket */6768u_int32_t flags; /* flags */69#define NG_BTSOCKET_L2CAP_RAW_PRIVILEGED (1 << 0)7071bdaddr_t src; /* source address */72bdaddr_t dst; /* dest address */73uint8_t srctype;/*source addr type*/74uint8_t dsttype;/*source addr type*/75ng_btsocket_l2cap_rtentry_p rt; /* routing info */7677u_int32_t token; /* message token */78struct ng_mesg *msg; /* message */7980struct mtx pcb_mtx; /* pcb mutex */8182LIST_ENTRY(ng_btsocket_l2cap_raw_pcb) next; /* link to next PCB */83};84typedef struct ng_btsocket_l2cap_raw_pcb ng_btsocket_l2cap_raw_pcb_t;85typedef struct ng_btsocket_l2cap_raw_pcb * ng_btsocket_l2cap_raw_pcb_p;8687#define so2l2cap_raw_pcb(so) \88((struct ng_btsocket_l2cap_raw_pcb *)((so)->so_pcb))8990/*91* Bluetooth raw L2CAP socket methods92*/9394#ifdef _KERNEL9596void ng_btsocket_l2cap_raw_abort (struct socket *);97void ng_btsocket_l2cap_raw_close (struct socket *);98int ng_btsocket_l2cap_raw_attach (struct socket *, int, struct thread *);99int ng_btsocket_l2cap_raw_bind (struct socket *, struct sockaddr *,100struct thread *);101int ng_btsocket_l2cap_raw_connect (struct socket *, struct sockaddr *,102struct thread *);103int ng_btsocket_l2cap_raw_control (struct socket *, u_long, void *,104struct ifnet *, struct thread *);105void ng_btsocket_l2cap_raw_detach (struct socket *);106int ng_btsocket_l2cap_raw_disconnect (struct socket *);107int ng_btsocket_l2cap_raw_peeraddr (struct socket *, struct sockaddr *);108int ng_btsocket_l2cap_raw_send (struct socket *, int, struct mbuf *,109struct sockaddr *, struct mbuf *,110struct thread *);111int ng_btsocket_l2cap_raw_sockaddr (struct socket *, struct sockaddr *);112113#endif /* _KERNEL */114115/*****************************************************************************116*****************************************************************************117** SOCK_SEQPACKET L2CAP sockets **118*****************************************************************************119*****************************************************************************/120121#define NG_BTSOCKET_L2CAP_SENDSPACE NG_L2CAP_MTU_DEFAULT /* (64 * 1024) */122#define NG_BTSOCKET_L2CAP_RECVSPACE (64 * 1024)123124/*125* Bluetooth L2CAP socket PCB126*/127128struct ng_btsocket_l2cap_pcb {129struct socket *so; /* Pointer to socket */130131bdaddr_t src; /* Source address */132bdaddr_t dst; /* Destination address */133uint8_t srctype; /*source addr type*/134uint8_t dsttype; /*source addr type*/135136u_int16_t psm; /* PSM */137u_int16_t cid; /* Local channel ID */138uint8_t idtype;139u_int16_t flags; /* socket flags */140#define NG_BTSOCKET_L2CAP_CLIENT (1 << 0) /* socket is client */141#define NG_BTSOCKET_L2CAP_TIMO (1 << 1) /* timeout pending */142143u_int8_t state; /* socket state */144#define NG_BTSOCKET_L2CAP_CLOSED 0 /* socket closed */145#define NG_BTSOCKET_L2CAP_CONNECTING 1 /* wait for connect */146#define NG_BTSOCKET_L2CAP_CONFIGURING 2 /* wait for config */147#define NG_BTSOCKET_L2CAP_OPEN 3 /* socket open */148#define NG_BTSOCKET_L2CAP_DISCONNECTING 4 /* wait for disconnect */149#define NG_BTSOCKET_L2CAP_W4_ENC_CHANGE 5150151u_int8_t cfg_state; /* config state */152#define NG_BTSOCKET_L2CAP_CFG_IN (1 << 0) /* incoming path done */153#define NG_BTSOCKET_L2CAP_CFG_OUT (1 << 1) /* outgoing path done */154#define NG_BTSOCKET_L2CAP_CFG_BOTH \155(NG_BTSOCKET_L2CAP_CFG_IN | NG_BTSOCKET_L2CAP_CFG_OUT)156157#define NG_BTSOCKET_L2CAP_CFG_IN_SENT (1 << 2) /* L2CAP ConfigReq sent */158#define NG_BTSOCKET_L2CAP_CFG_OUT_SENT (1 << 3) /* ---/--- */159uint8_t encryption;160u_int16_t imtu; /* Incoming MTU */161ng_l2cap_flow_t iflow; /* Input flow spec */162163u_int16_t omtu; /* Outgoing MTU */164ng_l2cap_flow_t oflow; /* Outgoing flow spec */165166u_int16_t flush_timo; /* flush timeout */167u_int16_t link_timo; /* link timeout */168169struct callout timo; /* timeout */170171u_int32_t token; /* message token */172ng_btsocket_l2cap_rtentry_p rt; /* routing info */173174struct mtx pcb_mtx; /* pcb mutex */175uint16_t need_encrypt; /*encryption needed*/176177LIST_ENTRY(ng_btsocket_l2cap_pcb) next; /* link to next PCB */178};179typedef struct ng_btsocket_l2cap_pcb ng_btsocket_l2cap_pcb_t;180typedef struct ng_btsocket_l2cap_pcb * ng_btsocket_l2cap_pcb_p;181182#define so2l2cap_pcb(so) \183((struct ng_btsocket_l2cap_pcb *)((so)->so_pcb))184185/*186* Bluetooth L2CAP socket methods187*/188189#ifdef _KERNEL190191void ng_btsocket_l2cap_abort (struct socket *);192void ng_btsocket_l2cap_close (struct socket *);193int ng_btsocket_l2cap_attach (struct socket *, int, struct thread *);194int ng_btsocket_l2cap_bind (struct socket *, struct sockaddr *,195struct thread *);196int ng_btsocket_l2cap_connect (struct socket *, struct sockaddr *,197struct thread *);198int ng_btsocket_l2cap_control (struct socket *, u_long, void *,199struct ifnet *, struct thread *);200int ng_btsocket_l2cap_ctloutput (struct socket *, struct sockopt *);201void ng_btsocket_l2cap_detach (struct socket *);202int ng_btsocket_l2cap_disconnect (struct socket *);203int ng_btsocket_l2cap_listen (struct socket *, int, struct thread *);204int ng_btsocket_l2cap_peeraddr (struct socket *, struct sockaddr *);205int ng_btsocket_l2cap_send (struct socket *, int, struct mbuf *,206struct sockaddr *, struct mbuf *,207struct thread *);208int ng_btsocket_l2cap_sockaddr (struct socket *, struct sockaddr *);209210#endif /* _KERNEL */211212#endif /* _NETGRAPH_BTSOCKET_L2CAP_H_ */213214215