1 /* $NetBSD: bt_proto.c,v 1.1 2006/06/19 15:44:45 gdamore Exp $ */ 2 3 /*- 4 * Copyright (c) 2005 Iain Hibbert. 5 * Copyright (c) 2006 Itronix Inc. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. The name of Itronix Inc. may not be used to endorse 17 * or promote products derived from this software without specific 18 * prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY 24 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 27 * ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #include <sys/cdefs.h> 34 __KERNEL_RCSID(0, "$NetBSD: bt_proto.c,v 1.1 2006/06/19 15:44:45 gdamore Exp $"); 35 36 #include <sys/param.h> 37 #include <sys/domain.h> 38 #include <sys/kernel.h> 39 #include <sys/protosw.h> 40 #include <sys/socket.h> 41 #include <sys/systm.h> 42 43 #include <net/route.h> 44 45 #include <netbt/bluetooth.h> 46 #include <netbt/hci.h> 47 #include <netbt/l2cap.h> 48 #include <netbt/rfcomm.h> 49 #include <netbt/sco.h> 50 51 DOMAIN_DEFINE(btdomain); /* forward declare and add to link set */ 52 53 const struct protosw btsw[] = { 54 { /* raw HCI commands */ 55 SOCK_RAW, &btdomain, 56 BTPROTO_HCI, PR_ADDR | PR_ATOMIC, 57 NULL, NULL, NULL, hci_ctloutput, 58 hci_usrreq, NULL, NULL, NULL, 59 hci_drain, 60 }, 61 #ifdef BLUETOOTH_SCO 62 { /* HCI SCO data (audio) */ 63 SOCK_SEQPACKET, &btdomain, 64 BTPROTO_SCO, PR_CONNREQUIRED | PR_ATOMIC, 65 NULL, NULL, NULL, sco_ctloutput, 66 sco_usrreq, NULL, NULL, NULL, 67 NULL, 68 }, 69 #endif 70 { /* L2CAP Connection Oriented */ 71 SOCK_SEQPACKET, &btdomain, 72 BTPROTO_L2CAP, PR_CONNREQUIRED | PR_ATOMIC | PR_LISTEN, 73 NULL, NULL, NULL, l2cap_ctloutput, 74 l2cap_usrreq, NULL, NULL, NULL, 75 NULL, 76 }, 77 #if 0 78 { /* L2CAP Ping Requests */ 79 SOCK_RAW, &btdomain, 80 BTPROTO_L2CAP, PR_ADDR | PR_ATOMIC, 81 NULL, NULL, NULL, NULL, 82 NULL, NULL, NULL, NULL, 83 NULL, 84 }, 85 { /* L2CAP Connectionless */ 86 SOCK_DGRAM, &btdomain, 87 BTPROTO_L2CAP, PR_ADDR | PR_ATOMIC, 88 NULL, NULL, NULL, NULL, 89 NULL, NULL, NULL, NULL, 90 NULL, 91 }, 92 #endif 93 { /* RFCOMM */ 94 SOCK_STREAM, &btdomain, 95 BTPROTO_RFCOMM, PR_CONNREQUIRED | PR_LISTEN | PR_WANTRCVD, 96 NULL, NULL, NULL, rfcomm_ctloutput, 97 rfcomm_usrreq, NULL, NULL, NULL, 98 NULL, 99 } 100 }; 101 102 struct domain btdomain = { 103 AF_BLUETOOTH, /* family */ 104 "bluetooth", /* name */ 105 NULL, /* init routine */ 106 NULL, /* externalise access rights */ 107 NULL, /* dispose of internalised rights */ 108 btsw, /* protosw */ 109 &btsw[sizeof(btsw)/sizeof(btsw[0])], /* NPROTOSW */ 110 NULL, /* attach to routing table */ 111 32, /* rtoffset */ 112 sizeof(struct sockaddr_bt), /* maxrtkey */ 113 }; 114