The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/netgraph/bluetooth/l2cap/ng_l2cap_var.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * ng_l2cap_var.h
    3  */
    4 
    5 /*-
    6  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
    7  *
    8  * Copyright (c) 2001 Maksim Yevmenkin <m_evmenkin@yahoo.com>
    9  * All rights reserved.
   10  *
   11  * Redistribution and use in source and binary forms, with or without
   12  * modification, are permitted provided that the following conditions
   13  * are met:
   14  * 1. Redistributions of source code must retain the above copyright
   15  *    notice, this list of conditions and the following disclaimer.
   16  * 2. Redistributions in binary form must reproduce the above copyright
   17  *    notice, this list of conditions and the following disclaimer in the
   18  *    documentation and/or other materials provided with the distribution.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   23  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   30  * SUCH DAMAGE.
   31  *
   32  * $Id: ng_l2cap_var.h,v 1.2 2003/04/28 21:44:59 max Exp $
   33  * $FreeBSD$
   34  */
   35 
   36 #ifndef _NETGRAPH_L2CAP_VAR_H_
   37 #define _NETGRAPH_L2CAP_VAR_H_
   38 
   39 /* MALLOC decalation */
   40 #ifdef NG_SEPARATE_MALLOC
   41 MALLOC_DECLARE(M_NETGRAPH_L2CAP);
   42 #else
   43 #define M_NETGRAPH_L2CAP M_NETGRAPH
   44 #endif /* NG_SEPARATE_MALLOC */
   45 
   46 /* Debug */
   47 #define NG_L2CAP_ALERT  if (l2cap->debug >= NG_L2CAP_ALERT_LEVEL) printf
   48 #define NG_L2CAP_ERR    if (l2cap->debug >= NG_L2CAP_ERR_LEVEL)   printf
   49 #define NG_L2CAP_WARN   if (l2cap->debug >= NG_L2CAP_WARN_LEVEL)  printf
   50 #define NG_L2CAP_INFO   if (l2cap->debug >= NG_L2CAP_INFO_LEVEL)  printf
   51 
   52 /* Wrapper around m_pullup */
   53 #define NG_L2CAP_M_PULLUP(m, s) \
   54         do { \
   55                 if ((m)->m_len < (s)) \
   56                         (m) = m_pullup((m), (s)); \
   57                 if ((m) == NULL) \
   58                         NG_L2CAP_ALERT("%s: %s - m_pullup(%zd) failed\n", \
   59                                 __func__, NG_NODE_NAME(l2cap->node), (s)); \
   60         } while (0)
   61 
   62 /*
   63  * L2CAP signaling command ident's are assigned relative to the connection,
   64  * because there is only one signaling channel (cid == 0x01) for every 
   65  * connection. So up to 254 (0xff - 0x01) L2CAP commands can be pending at the 
   66  * same time for the same connection.
   67  */
   68 
   69 #define NG_L2CAP_NULL_IDENT     0x00        /* DO NOT USE THIS IDENT */ 
   70 #define NG_L2CAP_FIRST_IDENT    0x01        /* dynamically alloc. (start) */ 
   71 #define NG_L2CAP_LAST_IDENT     0xff        /* dynamically alloc. (end) */ 
   72 
   73 /* 
   74  * L2CAP (Node private)
   75  */
   76 
   77 struct ng_l2cap_con;
   78 struct ng_l2cap_chan;
   79 
   80 typedef struct ng_l2cap {
   81         node_p                          node;         /* node ptr */
   82 
   83         ng_l2cap_node_debug_ep          debug;        /* debug level */
   84         ng_l2cap_node_flags_ep          flags;        /* L2CAP node flags */
   85         ng_l2cap_node_auto_discon_ep    discon_timo;  /* auto discon. timeout */
   86 
   87         u_int16_t                       pkt_size;     /* max. ACL packet size */
   88         u_int16_t                       num_pkts;     /* out queue size */
   89         bdaddr_t                        bdaddr;       /* unit BDADDR */
   90 
   91         hook_p                          hci;          /* HCI downstream hook */
   92         hook_p                          l2c;          /* L2CAP upstream hook */
   93         hook_p                          ctl;          /* control hook */
   94 
   95         LIST_HEAD(, ng_l2cap_con)       con_list;     /* ACL connections */
   96 
   97         u_int16_t                       cid;          /* last allocated CID */
   98         u_int16_t                       lecid;          /* last allocated CID for LE */
   99 
  100         LIST_HEAD(, ng_l2cap_chan)      chan_list;    /* L2CAP channels */
  101 } ng_l2cap_t;
  102 typedef ng_l2cap_t *                    ng_l2cap_p;
  103 
  104 /* 
  105  * L2CAP connection descriptor
  106  */
  107 
  108 struct ng_l2cap_cmd;
  109 
  110 typedef struct ng_l2cap_con {
  111         ng_l2cap_p                       l2cap;      /* pointer to L2CAP */
  112 
  113         u_int16_t                        state;      /* ACL connection state */
  114         u_int16_t                        flags;      /* ACL connection flags */
  115 
  116         int32_t                          refcnt;     /* reference count */
  117 
  118         bdaddr_t                         remote;     /* remote unit address */
  119         u_int16_t                        con_handle; /* ACL connection handle */
  120         struct callout                   con_timo;   /* connection timeout */
  121 
  122         u_int8_t                         ident;      /* last allocated ident */
  123         uint8_t                          linktype;
  124         uint8_t                          encryption;
  125 
  126         TAILQ_HEAD(, ng_l2cap_cmd)       cmd_list;   /* pending L2CAP cmds */
  127 
  128         struct mbuf                     *tx_pkt;     /* xmitted L2CAP packet */
  129         int                              pending;    /* num. of pending pkts */
  130 
  131         struct mbuf                     *rx_pkt;     /* received L2CAP packet */
  132         int                              rx_pkt_len; /* packet len. so far */
  133 
  134         LIST_ENTRY(ng_l2cap_con)         next;       /* link */
  135 } ng_l2cap_con_t;
  136 typedef ng_l2cap_con_t *                ng_l2cap_con_p;
  137 
  138 /*
  139  * L2CAP channel descriptor
  140  */
  141 
  142 typedef struct ng_l2cap_chan {
  143         ng_l2cap_con_p                  con;        /* pointer to connection */
  144 
  145         u_int16_t                       state;      /* channel state */
  146 
  147         u_int8_t                        cfg_state;  /* configuration state */
  148 #define NG_L2CAP_CFG_IN                 (1 << 0)    /* incoming cfg path done */
  149 #define NG_L2CAP_CFG_OUT                (1 << 1)    /* outgoing cfg path done */
  150 #define NG_L2CAP_CFG_BOTH               (NG_L2CAP_CFG_IN|NG_L2CAP_CFG_OUT)
  151 
  152         u_int8_t                        ident;      /* last L2CAP req. ident */
  153 
  154         u_int16_t                       psm;        /* channel PSM */
  155         u_int16_t                       scid;       /* source channel ID */
  156         u_int16_t                       dcid;       /* destination channel ID */
  157 
  158         uint16_t                        idtype;
  159         u_int16_t                       imtu;       /* incoming channel MTU */
  160         ng_l2cap_flow_t                 iflow;      /* incoming flow control */
  161 
  162         u_int16_t                       omtu;       /* outgoing channel MTU */
  163         ng_l2cap_flow_t                 oflow;      /* outgoing flow control */
  164 
  165         u_int16_t                       flush_timo; /* flush timeout */
  166         u_int16_t                       link_timo;  /* link timeout */
  167 
  168         LIST_ENTRY(ng_l2cap_chan)       next;       /* link */
  169 } ng_l2cap_chan_t;
  170 typedef ng_l2cap_chan_t *               ng_l2cap_chan_p;
  171 
  172 /*
  173  * L2CAP command descriptor
  174  */
  175 
  176 typedef struct ng_l2cap_cmd {
  177         ng_l2cap_con_p                   con;       /* L2CAP connection */
  178         ng_l2cap_chan_p                  ch;        /* L2CAP channel */
  179 
  180         u_int16_t                        flags;     /* command flags */
  181 #define NG_L2CAP_CMD_PENDING             (1 << 0)   /* command is pending */
  182 
  183         u_int8_t                         code;      /* L2CAP command opcode */
  184         u_int8_t                         ident;     /* L2CAP command ident */
  185         u_int32_t                        token;     /* L2CA message token */
  186 
  187         struct callout                   timo;      /* RTX/ERTX timeout */
  188 
  189         struct mbuf                     *aux;       /* optional data */
  190 
  191         TAILQ_ENTRY(ng_l2cap_cmd)        next;      /* link */
  192 } ng_l2cap_cmd_t;
  193 typedef ng_l2cap_cmd_t *                ng_l2cap_cmd_p;
  194 
  195 #endif /* ndef _NETGRAPH_L2CAP_VAR_H_ */

Cache object: a694a0ef903f002156c8f6400e91dd58


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.