[BACK]Return to rfcomm.h CVS log [TXT][DIR] Up to [local] / sys / netbt

Annotation of sys/netbt/rfcomm.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: rfcomm.h,v 1.1 2007/06/01 02:46:11 uwe Exp $  */
        !             2: /*     $NetBSD: rfcomm.h,v 1.3 2007/04/21 06:15:23 plunky Exp $        */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 2006 Itronix Inc.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Written by Iain Hibbert for Itronix Inc.
        !             9:  *
        !            10:  * Redistribution and use in source and binary forms, with or without
        !            11:  * modification, are permitted provided that the following conditions
        !            12:  * are met:
        !            13:  * 1. Redistributions of source code must retain the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer.
        !            15:  * 2. Redistributions in binary form must reproduce the above copyright
        !            16:  *    notice, this list of conditions and the following disclaimer in the
        !            17:  *    documentation and/or other materials provided with the distribution.
        !            18:  * 3. The name of Itronix Inc. may not be used to endorse
        !            19:  *    or promote products derived from this software without specific
        !            20:  *    prior written permission.
        !            21:  *
        !            22:  * THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND
        !            23:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
        !            24:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
        !            25:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY
        !            26:  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
        !            27:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
        !            28:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
        !            29:  * ON ANY THEORY OF LIABILITY, WHETHER IN
        !            30:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        !            31:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            32:  * POSSIBILITY OF SUCH DAMAGE.
        !            33:  */
        !            34: /*-
        !            35:  * Copyright (c) 2001-2003 Maksim Yevmenkin <m_evmenkin@yahoo.com>
        !            36:  * All rights reserved.
        !            37:  *
        !            38:  * Redistribution and use in source and binary forms, with or without
        !            39:  * modification, are permitted provided that the following conditions
        !            40:  * are met:
        !            41:  * 1. Redistributions of source code must retain the above copyright
        !            42:  *    notice, this list of conditions and the following disclaimer.
        !            43:  * 2. Redistributions in binary form must reproduce the above copyright
        !            44:  *    notice, this list of conditions and the following disclaimer in the
        !            45:  *    documentation and/or other materials provided with the distribution.
        !            46:  *
        !            47:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
        !            48:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            49:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            50:  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
        !            51:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            52:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            53:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            54:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            55:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            56:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            57:  * SUCH DAMAGE.
        !            58:  *
        !            59:  * $Id: rfcomm.h,v 1.1 2007/06/01 02:46:11 uwe Exp $
        !            60:  * $FreeBSD: src/sys/netgraph/bluetooth/include/ng_btsocket_rfcomm.h,v 1.4 2005/01/11 01:39:53 emax Exp $
        !            61:  */
        !            62:
        !            63: #ifndef _NETBT_RFCOMM_H_
        !            64: #define _NETBT_RFCOMM_H_
        !            65:
        !            66: #include <sys/types.h>
        !            67:
        !            68: /*************************************************************************
        !            69:  *************************************************************************
        !            70:  **                            RFCOMM                                  **
        !            71:  *************************************************************************
        !            72:  *************************************************************************/
        !            73:
        !            74: #define RFCOMM_MTU_MAX                 32767
        !            75: #define RFCOMM_MTU_MIN                 23
        !            76: #define RFCOMM_MTU_DEFAULT             127
        !            77:
        !            78: #define RFCOMM_CREDITS_MAX             255     /* in any single packet */
        !            79: #define RFCOMM_CREDITS_DEFAULT         7       /* default initial value */
        !            80:
        !            81: #define RFCOMM_CHANNEL_MIN             1
        !            82: #define RFCOMM_CHANNEL_MAX             30
        !            83:
        !            84: /* RFCOMM frame types */
        !            85: #define RFCOMM_FRAME_SABM              0x2f
        !            86: #define RFCOMM_FRAME_DISC              0x43
        !            87: #define RFCOMM_FRAME_UA                        0x63
        !            88: #define RFCOMM_FRAME_DM                        0x0f
        !            89: #define RFCOMM_FRAME_UIH               0xef
        !            90:
        !            91: /* RFCOMM MCC commands */
        !            92: #define RFCOMM_MCC_TEST                        0x08    /* Test */
        !            93: #define RFCOMM_MCC_FCON                        0x28    /* Flow Control on */
        !            94: #define RFCOMM_MCC_FCOFF               0x18    /* Flow Control off */
        !            95: #define RFCOMM_MCC_MSC                 0x38    /* Modem Status Command */
        !            96: #define RFCOMM_MCC_RPN                 0x24    /* Remote Port Negotiation */
        !            97: #define RFCOMM_MCC_RLS                 0x14    /* Remote Line Status */
        !            98: #define RFCOMM_MCC_PN                  0x20    /* Port Negotiation */
        !            99: #define RFCOMM_MCC_NSC                 0x04    /* Non Supported Command */
        !           100:
        !           101: /* RFCOMM modem signals */
        !           102: #define RFCOMM_MSC_FC                  0x02    /* Flow Control asserted */
        !           103: #define RFCOMM_MSC_RTC                 0x04    /* Ready To Communicate */
        !           104: #define RFCOMM_MSC_RTR                 0x08    /* Ready To Receive */
        !           105: #define RFCOMM_MSC_IC                  0x40    /* Incomming Call (RING) */
        !           106: #define RFCOMM_MSC_DV                  0x80    /* Data Valid */
        !           107:
        !           108: /* RPN parameters - baud rate */
        !           109: #define RFCOMM_RPN_BR_2400             0x0
        !           110: #define RFCOMM_RPN_BR_4800             0x1
        !           111: #define RFCOMM_RPN_BR_7200             0x2
        !           112: #define RFCOMM_RPN_BR_9600             0x3
        !           113: #define RFCOMM_RPN_BR_19200            0x4
        !           114: #define RFCOMM_RPN_BR_38400            0x5
        !           115: #define RFCOMM_RPN_BR_57600            0x6
        !           116: #define RFCOMM_RPN_BR_115200           0x7
        !           117: #define RFCOMM_RPN_BR_230400           0x8
        !           118:
        !           119: /* RPN parameters - data bits */
        !           120: #define RFCOMM_RPN_DATA_5              0x0
        !           121: #define RFCOMM_RPN_DATA_6              0x1
        !           122: #define RFCOMM_RPN_DATA_7              0x2
        !           123: #define RFCOMM_RPN_DATA_8              0x3
        !           124:
        !           125: /* RPN parameters - stop bit */
        !           126: #define RFCOMM_RPN_STOP_1              0
        !           127: #define RFCOMM_RPN_STOP_15             1
        !           128:
        !           129: /* RPN parameters - parity enable */
        !           130: #define RFCOMM_RPN_PARITY_NONE         0x0
        !           131:
        !           132: /* RPN parameters - parity type */
        !           133: #define RFCOMM_RPN_PARITY_ODD          0x0
        !           134: #define RFCOMM_RPN_PARITY_EVEN         0x1
        !           135: #define RFCOMM_RPN_PARITY_MARK         0x2
        !           136: #define RFCOMM_RPN_PARITY_SPACE                0x3
        !           137:
        !           138: /* RPN parameters - default line_setting */
        !           139: #define RFCOMM_RPN_8_N_1               0x03
        !           140:
        !           141: /* RPN parameters - flow control */
        !           142: #define RFCOMM_RPN_XON_CHAR            0x11
        !           143: #define RFCOMM_RPN_XOFF_CHAR           0x13
        !           144: #define RFCOMM_RPN_FLOW_NONE           0x00
        !           145:
        !           146: /* RPN parameters - mask */
        !           147: #define RFCOMM_RPN_PM_RATE             0x0001
        !           148: #define RFCOMM_RPN_PM_DATA             0x0002
        !           149: #define RFCOMM_RPN_PM_STOP             0x0004
        !           150: #define RFCOMM_RPN_PM_PARITY           0x0008
        !           151: #define RFCOMM_RPN_PM_PTYPE            0x0010
        !           152: #define RFCOMM_RPN_PM_XON              0x0020
        !           153: #define RFCOMM_RPN_PM_XOFF             0x0040
        !           154:
        !           155: #define RFCOMM_RPN_PM_FLOW             0x3f00
        !           156:
        !           157: #define RFCOMM_RPN_PM_ALL              0x3f7f
        !           158:
        !           159: /* RFCOMM command frame header */
        !           160: struct rfcomm_cmd_hdr
        !           161: {
        !           162:        uint8_t         address;
        !           163:        uint8_t         control;
        !           164:        uint8_t         length;
        !           165:        uint8_t         fcs;
        !           166: } __attribute__ ((__packed__));
        !           167:
        !           168: /* RFCOMM MSC command */
        !           169: struct rfcomm_mcc_msc
        !           170: {
        !           171:        uint8_t         address;
        !           172:        uint8_t         modem;
        !           173:        uint8_t         brk;
        !           174: } __attribute__ ((__packed__));
        !           175:
        !           176: /* RFCOMM RPN command */
        !           177: struct rfcomm_mcc_rpn
        !           178: {
        !           179:        uint8_t         dlci;
        !           180:        uint8_t         bit_rate;
        !           181:        uint8_t         line_settings;
        !           182:        uint8_t         flow_control;
        !           183:        uint8_t         xon_char;
        !           184:        uint8_t         xoff_char;
        !           185:        uint16_t        param_mask;
        !           186: } __attribute__ ((__packed__));
        !           187:
        !           188: /* RFCOMM RLS command */
        !           189: struct rfcomm_mcc_rls
        !           190: {
        !           191:        uint8_t         address;
        !           192:        uint8_t         status;
        !           193: } __attribute__ ((__packed__));
        !           194:
        !           195: /* RFCOMM PN command */
        !           196: struct rfcomm_mcc_pn
        !           197: {
        !           198:        uint8_t         dlci;
        !           199:        uint8_t         flow_control;
        !           200:        uint8_t         priority;
        !           201:        uint8_t         ack_timer;
        !           202:        uint16_t        mtu;
        !           203:        uint8_t         max_retrans;
        !           204:        uint8_t         credits;
        !           205: } __attribute__ ((__packed__));
        !           206:
        !           207: /* RFCOMM frame parsing macros */
        !           208: #define RFCOMM_DLCI(b)                 (((b) & 0xfc) >> 2)
        !           209: #define RFCOMM_TYPE(b)                 (((b) & 0xef))
        !           210:
        !           211: #define RFCOMM_EA(b)                   (((b) & 0x01))
        !           212: #define RFCOMM_CR(b)                   (((b) & 0x02) >> 1)
        !           213: #define RFCOMM_PF(b)                   (((b) & 0x10) >> 4)
        !           214:
        !           215: #define RFCOMM_CHANNEL(dlci)           (((dlci) >> 1) & 0x2f)
        !           216: #define RFCOMM_DIRECTION(dlci)         ((dlci) & 0x1)
        !           217:
        !           218: #define RFCOMM_MKADDRESS(cr, dlci) \
        !           219:        ((((dlci) & 0x3f) << 2) | ((cr) << 1) | 0x01)
        !           220:
        !           221: #define RFCOMM_MKCONTROL(type, pf)     ((((type) & 0xef) | ((pf) << 4)))
        !           222: #define RFCOMM_MKDLCI(dir, channel)    ((((channel) & 0x1f) << 1) | (dir))
        !           223:
        !           224: /* RFCOMM MCC macros */
        !           225: #define RFCOMM_MCC_TYPE(b)             (((b) & 0xfc) >> 2)
        !           226: #define RFCOMM_MCC_LENGTH(b)           (((b) & 0xfe) >> 1)
        !           227: #define RFCOMM_MKMCC_TYPE(cr, type)    ((((type) << 2) | ((cr) << 1) | 0x01))
        !           228:
        !           229: /* RPN macros */
        !           230: #define RFCOMM_RPN_DATA_BITS(line)     ((line) & 0x3)
        !           231: #define RFCOMM_RPN_STOP_BITS(line)     (((line) >> 2) & 0x1)
        !           232: #define RFCOMM_RPN_PARITY(line)                (((line) >> 3) & 0x1)
        !           233:
        !           234: /*************************************************************************
        !           235:  *************************************************************************
        !           236:  **                    SOCK_STREAM RFCOMM sockets                      **
        !           237:  *************************************************************************
        !           238:  *************************************************************************/
        !           239:
        !           240: /* Socket options */
        !           241: #define SO_RFCOMM_MTU          1       /* mtu */
        !           242: #define SO_RFCOMM_FC_INFO      2       /* flow control info (below) */
        !           243: #define SO_RFCOMM_LM           3       /* link mode */
        !           244:
        !           245: /* Flow control information */
        !           246: struct rfcomm_fc_info {
        !           247:        uint8_t         lmodem;         /* modem signals (local) */
        !           248:        uint8_t         rmodem;         /* modem signals (remote) */
        !           249:        uint8_t         tx_cred;        /* TX credits */
        !           250:        uint8_t         rx_cred;        /* RX credits */
        !           251:        uint8_t         cfc;            /* credit flow control */
        !           252:        uint8_t         reserved;
        !           253: };
        !           254:
        !           255: /* RFCOMM link mode flags */
        !           256: #define RFCOMM_LM_AUTH         (1<<0)  /* want authentication */
        !           257: #define RFCOMM_LM_ENCRYPT      (1<<1)  /* want encryption */
        !           258: #define RFCOMM_LM_SECURE       (1<<2)  /* want secured link */
        !           259:
        !           260: #ifdef _KERNEL
        !           261:
        !           262: /* sysctl variables */
        !           263: extern int rfcomm_sendspace;
        !           264: extern int rfcomm_recvspace;
        !           265: extern int rfcomm_mtu_default;
        !           266: extern int rfcomm_ack_timeout;
        !           267: extern int rfcomm_mcc_timeout;
        !           268:
        !           269: /*
        !           270:  * Bluetooth RFCOMM session data
        !           271:  * One L2CAP connection == one RFCOMM session
        !           272:  */
        !           273:
        !           274: /* Credit note */
        !           275: struct rfcomm_credit {
        !           276:        struct rfcomm_dlc               *rc_dlc;        /* owner */
        !           277:        uint16_t                         rc_len;        /* length */
        !           278:        SIMPLEQ_ENTRY(rfcomm_credit)     rc_next;       /* next credit */
        !           279: };
        !           280:
        !           281: /* RFCOMM session data (one L2CAP channel) */
        !           282: struct rfcomm_session {
        !           283:        struct l2cap_channel            *rs_l2cap;      /* L2CAP pointer */
        !           284:        uint16_t                         rs_flags;      /* session flags */
        !           285:        uint16_t                         rs_state;      /* session state */
        !           286:        uint16_t                         rs_mtu;        /* default MTU */
        !           287:
        !           288:        SIMPLEQ_HEAD(,rfcomm_credit)     rs_credits;    /* credit notes */
        !           289:        LIST_HEAD(,rfcomm_dlc)           rs_dlcs;       /* DLC list */
        !           290:
        !           291:        struct timeout                   rs_timeout;    /* timeout */
        !           292:
        !           293:        LIST_ENTRY(rfcomm_session)       rs_next;       /* next session */
        !           294: };
        !           295:
        !           296: LIST_HEAD(rfcomm_session_list, rfcomm_session);
        !           297: extern struct rfcomm_session_list rfcomm_session_active;
        !           298: extern struct rfcomm_session_list rfcomm_session_listen;
        !           299:
        !           300: /* Session state */
        !           301: #define RFCOMM_SESSION_CLOSED          0
        !           302: #define RFCOMM_SESSION_WAIT_CONNECT    1
        !           303: #define RFCOMM_SESSION_OPEN            2
        !           304: #define RFCOMM_SESSION_WAIT_DISCONNECT 3
        !           305: #define RFCOMM_SESSION_LISTEN          4
        !           306:
        !           307: /* Session flags */
        !           308: #define RFCOMM_SESSION_INITIATOR       (1 << 0) /* we are initiator */
        !           309: #define RFCOMM_SESSION_CFC             (1 << 1) /* credit flow control */
        !           310: #define RFCOMM_SESSION_LFC             (1 << 2) /* local flow control */
        !           311: #define RFCOMM_SESSION_RFC             (1 << 3) /* remote flow control */
        !           312: #define RFCOMM_SESSION_FREE            (1 << 4) /* self lock out for free */
        !           313:
        !           314: #define IS_INITIATOR(rs)       ((rs)->rs_flags & RFCOMM_SESSION_INITIATOR)
        !           315:
        !           316: /* Bluetooth RFCOMM DLC data (connection) */
        !           317: struct rfcomm_dlc {
        !           318:        struct rfcomm_session   *rd_session; /* RFCOMM session */
        !           319:        uint8_t                  rd_dlci;    /* RFCOMM DLCI */
        !           320:
        !           321:        uint16_t                 rd_flags;   /* DLC flags */
        !           322:        uint16_t                 rd_state;   /* DLC state */
        !           323:        uint16_t                 rd_mtu;     /* MTU */
        !           324:        int                      rd_mode;    /* link mode */
        !           325:
        !           326:        struct sockaddr_bt       rd_laddr;   /* local address */
        !           327:        struct sockaddr_bt       rd_raddr;   /* remote address */
        !           328:
        !           329:        uint8_t                  rd_lmodem;  /* local modem signls */
        !           330:        uint8_t                  rd_rmodem;  /* remote modem signals */
        !           331:
        !           332:        int                      rd_rxcred;  /* receive credits (sent) */
        !           333:        size_t                   rd_rxsize;  /* receive buffer (bytes, avail) */
        !           334:        int                      rd_txcred;  /* transmit credits (unused) */
        !           335:        int                      rd_pending; /* packets sent but not complete */
        !           336:
        !           337:        struct timeout           rd_timeout; /* timeout */
        !           338:        struct mbuf             *rd_txbuf;   /* transmit buffer */
        !           339:
        !           340:        const struct btproto    *rd_proto;   /* upper layer callbacks */
        !           341:        void                    *rd_upper;   /* upper layer argument */
        !           342:
        !           343:        LIST_ENTRY(rfcomm_dlc)   rd_next;    /* next dlc on session */
        !           344: };
        !           345:
        !           346: /*
        !           347:  * Credit Flow Control works in the following way.
        !           348:  *
        !           349:  * txcred is how many packets we can send. Received credit
        !           350:  * is added to this value, and it is decremented each time
        !           351:  * we send a packet.
        !           352:  *
        !           353:  * rxsize is the number of bytes that are available in the
        !           354:  * upstream receive buffer.
        !           355:  *
        !           356:  * rxcred is the number of credits that we have previously
        !           357:  * sent that are still unused. This value will be decreased
        !           358:  * for each packet we receive and we will add to it when we
        !           359:  * send credits. We calculate the amount of credits to send
        !           360:  * by the cunning formula "(space / mtu) - sent" so that if
        !           361:  * we get a bunch of small packets, we can continue sending
        !           362:  * credits without risking buffer overflow.
        !           363:  */
        !           364:
        !           365: /* DLC flags */
        !           366: #define RFCOMM_DLC_DETACH              (1 << 0) /* DLC to be detached */
        !           367: #define RFCOMM_DLC_SHUTDOWN            (1 << 1) /* DLC to be shutdown */
        !           368:
        !           369: /* DLC state */
        !           370: #define RFCOMM_DLC_CLOSED              0       /* no session */
        !           371: #define RFCOMM_DLC_WAIT_SESSION                1       /* waiting for session */
        !           372: #define RFCOMM_DLC_WAIT_CONNECT                2       /* waiting for connect */
        !           373: #define RFCOMM_DLC_WAIT_SEND_SABM      3       /* waiting to send SABM */
        !           374: #define RFCOMM_DLC_WAIT_SEND_UA                4       /* waiting to send UA */
        !           375: #define RFCOMM_DLC_WAIT_RECV_UA                5       /* waiting to receive UA */
        !           376: #define RFCOMM_DLC_OPEN                        6       /* can send/receive */
        !           377: #define RFCOMM_DLC_WAIT_DISCONNECT     7       /* waiting for disconnect */
        !           378: #define RFCOMM_DLC_LISTEN              8       /* listening DLC */
        !           379:
        !           380: /*
        !           381:  * Bluetooth RFCOMM socket kernel prototypes
        !           382:  */
        !           383:
        !           384: struct socket;
        !           385:
        !           386: /* rfcomm_dlc.c */
        !           387: struct rfcomm_dlc *rfcomm_dlc_lookup(struct rfcomm_session *, int);
        !           388: struct rfcomm_dlc *rfcomm_dlc_newconn(struct rfcomm_session *, int);
        !           389: void rfcomm_dlc_close(struct rfcomm_dlc *, int);
        !           390: void rfcomm_dlc_timeout(void *);
        !           391: int rfcomm_dlc_setmode(struct rfcomm_dlc *);
        !           392: int rfcomm_dlc_connect(struct rfcomm_dlc *);
        !           393: int rfcomm_dlc_open(struct rfcomm_dlc *);
        !           394: void rfcomm_dlc_start(struct rfcomm_dlc *);
        !           395:
        !           396: /* rfcomm_session.c */
        !           397: void rfcomm_init(void);
        !           398: struct rfcomm_session *rfcomm_session_alloc(struct rfcomm_session_list *, struct sockaddr_bt *);
        !           399: struct rfcomm_session *rfcomm_session_lookup(struct sockaddr_bt *, struct sockaddr_bt *);
        !           400: void rfcomm_session_free(struct rfcomm_session *);
        !           401: int rfcomm_session_send_frame(struct rfcomm_session *, int, int);
        !           402: int rfcomm_session_send_uih(struct rfcomm_session *, struct rfcomm_dlc *, int, struct mbuf *);
        !           403: int rfcomm_session_send_mcc(struct rfcomm_session *, int, uint8_t, void *, int);
        !           404:
        !           405: /* rfcomm_socket.c */
        !           406: int rfcomm_usrreq(struct socket *, int, struct mbuf *, struct mbuf *, struct mbuf *);
        !           407: int rfcomm_ctloutput(int, struct socket *, int, int, struct mbuf **);
        !           408:
        !           409: /* rfcomm_upper.c */
        !           410: int rfcomm_attach(struct rfcomm_dlc **, const struct btproto *, void *);
        !           411: int rfcomm_bind(struct rfcomm_dlc *, struct sockaddr_bt *);
        !           412: int rfcomm_sockaddr(struct rfcomm_dlc *, struct sockaddr_bt *);
        !           413: int rfcomm_connect(struct rfcomm_dlc *, struct sockaddr_bt *);
        !           414: int rfcomm_peeraddr(struct rfcomm_dlc *, struct sockaddr_bt *);
        !           415: int rfcomm_disconnect(struct rfcomm_dlc *, int);
        !           416: int rfcomm_detach(struct rfcomm_dlc **);
        !           417: int rfcomm_listen(struct rfcomm_dlc *);
        !           418: int rfcomm_send(struct rfcomm_dlc *, struct mbuf *);
        !           419: int rfcomm_rcvd(struct rfcomm_dlc *, size_t);
        !           420: int rfcomm_setopt(struct rfcomm_dlc *, int, void *);
        !           421: int rfcomm_getopt(struct rfcomm_dlc *, int, void *);
        !           422:
        !           423: #endif /* _KERNEL */
        !           424:
        !           425: #endif /* _NETBT_RFCOMM_H_ */

CVSweb