Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap_raw.c
Show First 20 Lines • Show All 661 Lines • ▼ Show 20 Lines | if (pcb == NULL) | ||||
return (EINVAL); | return (EINVAL); | ||||
if (ng_btsocket_l2cap_raw_node == NULL) | if (ng_btsocket_l2cap_raw_node == NULL) | ||||
return (EINVAL); | return (EINVAL); | ||||
if (sa == NULL) | if (sa == NULL) | ||||
return (EINVAL); | return (EINVAL); | ||||
if (sa->l2cap_family != AF_BLUETOOTH) | if (sa->l2cap_family != AF_BLUETOOTH) | ||||
return (EAFNOSUPPORT); | return (EAFNOSUPPORT); | ||||
if (sa->l2cap_len != sizeof(*sa)) | if((sa->l2cap_len != sizeof(*sa))&& | ||||
(sa->l2cap_len != sizeof(struct sockaddr_l2cap_compat))) | |||||
return (EINVAL); | return (EINVAL); | ||||
if (bcmp(&sa->l2cap_bdaddr, NG_HCI_BDADDR_ANY, | if (bcmp(&sa->l2cap_bdaddr, NG_HCI_BDADDR_ANY, | ||||
sizeof(sa->l2cap_bdaddr)) != 0) { | sizeof(sa->l2cap_bdaddr)) != 0) { | ||||
mtx_lock(&ng_btsocket_l2cap_raw_rt_mtx); | mtx_lock(&ng_btsocket_l2cap_raw_rt_mtx); | ||||
LIST_FOREACH(rt, &ng_btsocket_l2cap_raw_rt, next) { | LIST_FOREACH(rt, &ng_btsocket_l2cap_raw_rt, next) { | ||||
if (rt->hook == NULL || NG_HOOK_NOT_VALID(rt->hook)) | if (rt->hook == NULL || NG_HOOK_NOT_VALID(rt->hook)) | ||||
Show All 36 Lines | if (pcb == NULL) | ||||
return (EINVAL); | return (EINVAL); | ||||
if (ng_btsocket_l2cap_raw_node == NULL) | if (ng_btsocket_l2cap_raw_node == NULL) | ||||
return (EINVAL); | return (EINVAL); | ||||
if (sa == NULL) | if (sa == NULL) | ||||
return (EINVAL); | return (EINVAL); | ||||
if (sa->l2cap_family != AF_BLUETOOTH) | if (sa->l2cap_family != AF_BLUETOOTH) | ||||
return (EAFNOSUPPORT); | return (EAFNOSUPPORT); | ||||
if (sa->l2cap_len != sizeof(*sa)) | if((sa->l2cap_len != sizeof(*sa))&& | ||||
(sa->l2cap_len != sizeof(struct sockaddr_l2cap_compat))) | |||||
return (EINVAL); | return (EINVAL); | ||||
if (bcmp(&sa->l2cap_bdaddr, NG_HCI_BDADDR_ANY, sizeof(bdaddr_t)) == 0) | if (bcmp(&sa->l2cap_bdaddr, NG_HCI_BDADDR_ANY, sizeof(bdaddr_t)) == 0) | ||||
return (EINVAL); | return (EINVAL); | ||||
mtx_lock(&pcb->pcb_mtx); | mtx_lock(&pcb->pcb_mtx); | ||||
bcopy(&sa->l2cap_bdaddr, &pcb->dst, sizeof(pcb->dst)); | bcopy(&sa->l2cap_bdaddr, &pcb->dst, sizeof(pcb->dst)); | ||||
if (bcmp(&pcb->src, &pcb->dst, sizeof(pcb->src)) == 0) { | if (bcmp(&pcb->src, &pcb->dst, sizeof(pcb->src)) == 0) { | ||||
▲ Show 20 Lines • Show All 441 Lines • ▼ Show 20 Lines | ng_btsocket_l2cap_raw_peeraddr(struct socket *so, struct sockaddr **nam) | ||||
mtx_lock(&pcb->pcb_mtx); | mtx_lock(&pcb->pcb_mtx); | ||||
bcopy(&pcb->dst, &sa.l2cap_bdaddr, sizeof(sa.l2cap_bdaddr)); | bcopy(&pcb->dst, &sa.l2cap_bdaddr, sizeof(sa.l2cap_bdaddr)); | ||||
mtx_unlock(&pcb->pcb_mtx); | mtx_unlock(&pcb->pcb_mtx); | ||||
sa.l2cap_psm = 0; | sa.l2cap_psm = 0; | ||||
sa.l2cap_len = sizeof(sa); | sa.l2cap_len = sizeof(sa); | ||||
sa.l2cap_family = AF_BLUETOOTH; | sa.l2cap_family = AF_BLUETOOTH; | ||||
sa.l2cap_cid = 0; | |||||
sa.l2cap_bdaddr_type = BDADDR_BREDR; | |||||
*nam = sodupsockaddr((struct sockaddr *) &sa, M_NOWAIT); | *nam = sodupsockaddr((struct sockaddr *) &sa, M_NOWAIT); | ||||
return ((*nam == NULL)? ENOMEM : 0); | return ((*nam == NULL)? ENOMEM : 0); | ||||
} /* ng_btsocket_l2cap_raw_peeraddr */ | } /* ng_btsocket_l2cap_raw_peeraddr */ | ||||
/* | /* | ||||
* Send data to socket | * Send data to socket | ||||
Show All 26 Lines | ng_btsocket_l2cap_raw_sockaddr(struct socket *so, struct sockaddr **nam) | ||||
mtx_lock(&pcb->pcb_mtx); | mtx_lock(&pcb->pcb_mtx); | ||||
bcopy(&pcb->src, &sa.l2cap_bdaddr, sizeof(sa.l2cap_bdaddr)); | bcopy(&pcb->src, &sa.l2cap_bdaddr, sizeof(sa.l2cap_bdaddr)); | ||||
mtx_unlock(&pcb->pcb_mtx); | mtx_unlock(&pcb->pcb_mtx); | ||||
sa.l2cap_psm = 0; | sa.l2cap_psm = 0; | ||||
sa.l2cap_len = sizeof(sa); | sa.l2cap_len = sizeof(sa); | ||||
sa.l2cap_family = AF_BLUETOOTH; | sa.l2cap_family = AF_BLUETOOTH; | ||||
sa.l2cap_cid = 0; | |||||
sa.l2cap_bdaddr_type = BDADDR_BREDR; | |||||
*nam = sodupsockaddr((struct sockaddr *) &sa, M_NOWAIT); | *nam = sodupsockaddr((struct sockaddr *) &sa, M_NOWAIT); | ||||
return ((*nam == NULL)? ENOMEM : 0); | return ((*nam == NULL)? ENOMEM : 0); | ||||
} /* ng_btsocket_l2cap_raw_sockaddr */ | } /* ng_btsocket_l2cap_raw_sockaddr */ | ||||
/* | /* | ||||
* Get next token | * Get next token | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 81 Lines • Show Last 20 Lines |