38#include <sys/kernel.h>
39#include <sys/endian.h>
40#include <sys/malloc.h>
76"%s: %s - invalid L2CA_Connect request message size, size=%d\n",
92"%s: %s - unable to send LP_ConnectReq message, error=%d\n",
99 KASSERT((con != NULL),
100(
"%s: %s - could not find connection!\n", __func__,
NG_NODE_NAME(l2cap->
node)));
134 cmd->aux->m_flags |= M_PROTO2;
138 cmd->aux->m_flags |= M_PROTO2;
142 if (
cmd->aux == NULL) {
174"%s: %s - unable to send L2CA_Connect response message. " \
175"Hook is not connected or valid, psm=%d\n",
183 sizeof(*op), M_NOWAIT);
236"%s: %s - invalid L2CA_ConnectRsp request message size, size=%d\n",
258"%s: %s - unexpected L2CA_ConnectRsp request message. " \
259"Channel does not exist, lcid=%d\n",
268"%s: %s - unexpected L2CA_ConnectRsp request message. " \
269"Invalid channel state, state=%d, lcid=%d\n",
286"%s: %s - channel ident and response ident do not match, scid=%d, ident=%d. " \
287"Will use response ident=%d\n",
322 if (
cmd->aux == NULL) {
348"%s: %s - unable to send L2CA_ConnectRsp response message. " \
349"Hook is not connected or valid, psm=%d\n",
357 sizeof(*op), M_NOWAIT);
400"%s: %s - unable to send L2CA_ConnectRsp response message. " \
401"Hook is not connected or valid, psm=%d\n",
409 sizeof(*op), M_NOWAIT);
440"%s: %s - unable to send L2CA_ConnectInd message. " \
441"Hook is not connected or valid, psm=%d\n",
449 sizeof(*ip), M_NOWAIT);
477 struct mbuf *opt = NULL;
478 u_int16_t *
mtu = NULL, *flush_timo = NULL;
485"%s: %s - Invalid L2CA_Config request message size, size=%d\n",
498"%s: %s - unexpected L2CA_Config request message. " \
499"Channel does not exist, lcid=%d\n",
508"%s: %s - unexpected L2CA_Config request message. " \
509"Invalid channel state, state=%d, lcid=%d\n",
555 if (
cmd->aux == NULL) {
591"%s: %s - unable to send L2CA_Config response message. " \
592"Hook is not connected or valid, psm=%d\n",
600 sizeof(*op), M_NOWAIT);
649 struct mbuf *opt = NULL;
650 u_int16_t *
mtu = NULL;
657"%s: %s - invalid L2CA_ConfigRsp request message size, size=%d\n",
671"%s: %s - unexpected L2CA_ConfigRsp request message. " \
672"Channel does not exist, lcid=%d\n",
681"%s: %s - unexpected L2CA_ConfigRsp request message. " \
682"Invalid channel state, state=%d, lcid=%d\n",
700 if (
mtu != NULL || flow != NULL) {
718 if (
cmd->aux == NULL) {
751"%s: %s - unable to send L2CA_ConfigRsp response message. " \
752"Hook is not connected or valid, psm=%d\n",
760 sizeof(*op), M_NOWAIT);
804"%s: %s - Unable to send L2CA_ConfigInd message. " \
805"Hook is not connected or valid, psm=%d\n",
813 sizeof(*ip), M_NOWAIT);
836 ng_l2cap_l2ca_hdr_t *l2ca_hdr = NULL;
843 if (m->m_pkthdr.len <
sizeof(*l2ca_hdr)) {
845"%s: %s - L2CA Data packet too small, len=%d\n",
856 l2ca_hdr = mtod(m, ng_l2cap_l2ca_hdr_t *);
857 token = l2ca_hdr->token;
858 m_adj(m,
sizeof(*l2ca_hdr));
861 if (l2ca_hdr->length != m->m_pkthdr.len) {
863"%s: %s - invalid L2CA Data packet. " \
864"Payload length does not match, length=%d, len=%d\n",
881 "%s: %s - invalid L2CA Data packet. Inavlid channel ID, cid=%d\n",
895"%s: %s - invalid L2CA Data packet. Channel does not exist, cid=%d\n",
903"%s: %s - invalid L2CA Data packet. Invalid channel state, scid=%d, state=%d\n",
945"%s: %s - unable to send L2CA_WriteRsp message. " \
946"Hook is not connected or valid, psm=%d\n",
954 sizeof(*op), M_NOWAIT);
992 ng_l2cap_hdr_t *hdr = NULL;
1003 hdr = mtod(con->
rx_pkt, ng_l2cap_hdr_t *);
1036"%s: %s - unexpected L2CAP data packet. Channel does not exist, cid=%d, idtype=%d\n",
1045"%s: %s - unexpected L2CAP data packet. " \
1046"Invalid channel state, cid=%d, state=%d\n",
1054 if (hdr->length > ch->
imtu) {
1056"%s: %s - invalid L2CAP data packet. " \
1057"Packet too big, length=%d, imtu=%d, cid=%d\n",
1072"%s: %s - unable to send L2CAP data packet. " \
1073"Hook is not connected or valid, psm=%d\n",
1078 M_PREPEND(con->
rx_pkt,
sizeof(uint16_t), M_NOWAIT);
1081 idp = mtod(con->
rx_pkt, uint16_t *);
1102 ng_l2cap_clt_hdr_t c_h;
1111 hdr = mtod(con->
rx_pkt,
struct _clt_pkt *);
1117"%s: %s - invalid L2CAP CLT data packet. Packet too small, length=%d\n",
1126"%s: %s - invalid L2CAP CLT data packet. Packet too big, length=%d, mtu=%d\n",
1133 hdr->c_h.psm = le16toh(hdr->c_h.psm);
1141 switch (hdr->c_h.psm) {
1161"%s: %s - unable to send L2CAP CLT data packet. " \
1162"Hook is not connected or valid, psm=%d\n",
1191"%s: %s - unable to send L2CA_QoSViolationInd message. " \
1192"Hook is not connected or valid, psm=%d\n",
1200 sizeof(*ip), M_NOWAIT);
1227"%s: %s - invalid L2CA_Disconnect request message size, size=%d\n",
1245"%s: %s - unexpected L2CA_Disconnect request message. " \
1246"Channel does not exist, conhandle=%d\n",
1260"%s: %s - unexpected L2CA_Disconnect request message. " \
1261"Channel does not exist, conhandle=%d\n",
1272"%s: %s - unexpected L2CA_Disconnect request message. " \
1273"Channel does not exist, lcid=%d\n",
1283"%s: %s - unexpected L2CA_Disconnect request message. " \
1284"Invalid channel state, state=%d, lcid=%d\n",
1308 if (
cmd->aux == NULL) {
1339"%s: %s - unable to send L2CA_Disconnect response message. " \
1340"Hook is not connected or valid, psm=%d\n",
1348 sizeof(*op), M_NOWAIT);
1379"%s: %s - unable to send L2CA_DisconnectInd message. " \
1380"Hook is not connected or valid, psm=%d\n",
1388 sizeof(*ip), M_NOWAIT);
1488"%s: %s - invalid L2CA_Ping request message size, size=%d\n",
1498"%s: %s - invalid L2CA_Ping request. Echo size is too big, echo_size=%d\n",
1511"%s: %s - unable to send LP_ConnectReq message, error=%d\n",
1518 KASSERT((con != NULL),
1519(
"%s: %s - could not find connection!\n", __func__,
NG_NODE_NAME(l2cap->
node)));
1539 if (
cmd->aux == NULL) {
1563 int error = 0, size = 0;
1568"%s: %s - unable to send L2CA_Ping response message. " \
1569"Hook is not connected or valid\n",
1575 size = (
data == NULL)? 0 :
data->m_pkthdr.len;
1579 sizeof(*op) + size, M_NOWAIT);
1589 if (
data != NULL && size > 0) {
1591 m_copydata(
data, 0, size, (caddr_t) op +
sizeof(*op));
1617"%s: %s - invalid L2CA_GetInfo request message size, size=%d\n",
1633"%s: %s - unable to send LP_ConnectReq message, error=%d\n",
1640 KASSERT((con != NULL),
1641(
"%s: %s - could not find connection!\n", __func__,
NG_NODE_NAME(l2cap->
node)));
1660 if (
cmd->aux == NULL) {
1679 u_int16_t result,
struct mbuf *
data)
1684 int error = 0, size;
1689"%s: %s - unable to send L2CA_GetInfo response message. " \
1690"Hook is not connected or valid\n",
1696 size = (
data == NULL)? 0 :
data->m_pkthdr.len;
1700 sizeof(*op) + size, M_NOWAIT);
1709 if (
data != NULL && size > 0) {
1711 m_copydata(
data, 0, size, (caddr_t) op +
sizeof(*op));
1733 * ng_l2cap_l2ca_enable_clt_op *op = NULL;
1741"%s: %s - invalid L2CA_EnableCLT message size, size=%d\n",
1770 l2cap->
flags &= ~NG_L2CAP_CLT_SDP_DISABLED;
1777 l2cap->
flags &= ~NG_L2CAP_CLT_RFCOMM_DISABLED;
1784 l2cap->
flags &= ~NG_L2CAP_CLT_TCP_DISABLED;
1804 *
sizeof(*op), M_NOWAIT);
1811 * op = (ng_l2cap_l2ca_enable_clt_op *)(msg->
data);
1812 * op->result = result;
#define NG_HOOK_NOT_VALID(hook)
#define NG_NODE_NAME(node)
#define NG_SEND_DATA_ONLY(error, hook, m)
#define NG_HOOK_IS_VALID(hook)
#define NG_SEND_MSG_HOOK(error, here, msg, hook, retaddr)
#define NGM_L2CAP_L2CA_DISCON
#define NGM_L2CAP_L2CA_ENC_CHANGE
ng_l2cap_flow_t * ng_l2cap_flow_p
#define NGM_L2CAP_L2CA_ENABLE_CLT
#define NG_L2CAP_L2CA_IDTYPE_LE
#define NG_L2CAP_CLT_TCP_DISABLED
#define NG_L2CAP_PSM_NOT_SUPPORTED
#define NGM_L2CAP_L2CA_CFG_RSP
#define NGM_L2CAP_L2CA_QOS_IND
#define NG_L2CAP_CLT_RFCOMM_DISABLED
#define NGM_L2CAP_L2CA_WRITE
#define NG_L2CAP_L2CA_IDTYPE_BREDR
#define NG_L2CAP_ECHO_REQ
#define NG_L2CAP_L2CA_IDTYPE_SMP
#define NG_L2CAP_W4_L2CAP_CON_RSP
#define NGM_L2CAP_L2CA_PING
#define NG_L2CAP_FLUSH_TIMO_DEFAULT
#define NGM_L2CAP_L2CA_CFG
#define NGM_L2CAP_L2CA_DISCON_IND
#define NG_L2CAP_INFO_REQ
#define NG_L2CAP_MTU_DEFAULT
#define NGM_L2CAP_L2CA_GET_INFO
#define NG_L2CAP_L2CA_IDTYPE_ATT
#define NGM_L2CAP_L2CA_CFG_IND
#define NG_L2CAP_DISCON_REQ
#define NG_L2CAP_PSM_RFCOMM
#define NG_L2CAP_W4_L2CAP_DISCON_RSP
#define NG_L2CAP_CLT_SDP_DISABLED
#define NGM_L2CAP_L2CA_CON_RSP
#define NGM_L2CAP_L2CA_CON
#define NGM_L2CAP_L2CA_CON_IND
#define NG_L2CAP_MAX_ECHO_SIZE
#define NG_L2CAP_FIRST_CID
#define NG_L2CAP_W4_L2CA_CON_RSP
#define _ng_l2cap_build_cfg_options(_m, _mtu, _flush_timo, _flow)
#define _ng_l2cap_discon_req(_m, _ident, _dcid, _scid)
#define _ng_l2cap_info_req(_m, _ident, _type)
#define _ng_l2cap_cfg_req(_m, _ident, _dcid, _flags, _data)
#define _ng_l2cap_con_rsp(_m, _ident, _dcid, _scid, _result, _status)
#define _ng_l2cap_echo_req(_m, _ident, _data, _size)
#define _ng_l2cap_con_req(_m, _ident, _psm, _scid)
#define _ng_l2cap_cfg_rsp(_m, _ident, _scid, _flags, _result, _data)
int ng_l2cap_lp_con_req(ng_l2cap_p l2cap, bdaddr_p bdaddr, int type)
void ng_l2cap_lp_deliver(ng_l2cap_con_p con)
void ng_l2cap_free_chan(ng_l2cap_chan_p ch)
u_int8_t ng_l2cap_get_ident(ng_l2cap_con_p con)
ng_l2cap_con_p ng_l2cap_con_by_addr(ng_l2cap_p l2cap, bdaddr_p bdaddr, unsigned int type)
ng_l2cap_flow_p ng_l2cap_default_flow(void)
ng_l2cap_cmd_p ng_l2cap_new_cmd(ng_l2cap_con_p con, ng_l2cap_chan_p ch, u_int8_t ident, u_int8_t code, u_int32_t token)
ng_l2cap_chan_p ng_l2cap_chan_by_conhandle(ng_l2cap_p l2cap, uint16_t scid, u_int16_t con_handle)
ng_l2cap_chan_p ng_l2cap_new_chan(ng_l2cap_p l2cap, ng_l2cap_con_p con, u_int16_t psm, int idtype)
ng_l2cap_chan_p ng_l2cap_chan_by_scid(ng_l2cap_p l2cap, u_int16_t scid, int idtype)
#define ng_l2cap_free_cmd(cmd)
#define ng_l2cap_link_cmd(con, cmd)
int ng_l2cap_l2ca_ping_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_cfg_rsp_rsp(ng_l2cap_chan_p ch, u_int32_t token, u_int16_t result)
int ng_l2cap_l2ca_con_rsp(ng_l2cap_chan_p ch, u_int32_t token, u_int16_t result, u_int16_t status)
int ng_l2cap_l2ca_grp_add_member_rsp(ng_l2cap_chan_p ch, u_int32_t token, u_int16_t result)
int ng_l2cap_l2ca_con_rsp_rsp(ng_l2cap_chan_p ch, u_int32_t token, u_int16_t result)
int ng_l2cap_l2ca_grp_add_member_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_discon_ind(ng_l2cap_chan_p ch)
int ng_l2cap_l2ca_cfg_rsp(ng_l2cap_chan_p ch, u_int32_t token, u_int16_t result)
int ng_l2cap_l2ca_receive(ng_l2cap_con_p con)
int ng_l2cap_l2ca_cfg_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_enable_clt(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_cfg_rsp_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_write_rsp(ng_l2cap_chan_p ch, u_int32_t token, u_int16_t result, u_int16_t length)
int ng_l2cap_l2ca_con_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_get_info_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_encryption_change(ng_l2cap_chan_p ch, uint16_t result)
int ng_l2cap_l2ca_write_req(ng_l2cap_p l2cap, struct mbuf *m)
int ng_l2cap_l2ca_grp_rem_member(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_qos_ind(ng_l2cap_chan_p ch)
int ng_l2cap_l2ca_con_rsp_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_ping_rsp(ng_l2cap_con_p con, u_int32_t token, u_int16_t result, struct mbuf *data)
int ng_l2cap_l2ca_clt_receive(ng_l2cap_con_p con)
int ng_l2cap_l2ca_cfg_ind(ng_l2cap_chan_p ch)
int ng_l2cap_l2ca_grp_close(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_con_ind(ng_l2cap_chan_p ch)
int ng_l2cap_l2ca_discon_rsp(ng_l2cap_chan_p ch, u_int32_t token, u_int16_t result)
int ng_l2cap_l2ca_discon_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_grp_get_members(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_grp_create(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_l2ca_get_info_rsp(ng_l2cap_con_p con, u_int32_t token, u_int16_t result, struct mbuf *data)
#define NG_L2CAP_CFG_BOTH
#define NG_L2CAP_M_PULLUP(m, s)
#define NG_L2CAP_NULL_IDENT
#define NG_MKMESSAGE(msg, cookie, cmdid, len, how)
struct ubt_softc __attribute__
ng_l2cap_node_flags_ep flags
struct ng_mesg::ng_msghdr header