Skip to content

Commit

Permalink
Bluetooth: EWS: remove magic numbers in l2cap
Browse files Browse the repository at this point in the history
Remove magic numbers for FCS, SDU LEN and PSM LEN
when calculating packet payload.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
  • Loading branch information
Andrei Emeltchenko authored and Gustavo F. Padovan committed Oct 17, 2011
1 parent 836be93 commit 03a5121
Showing 1 changed file with 26 additions and 20 deletions.
46 changes: 26 additions & 20 deletions net/bluetooth/l2cap_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -585,7 +585,7 @@ static inline void l2cap_send_sframe(struct l2cap_chan *chan, u32 control)
hlen = L2CAP_ENH_HDR_SIZE;

if (chan->fcs == L2CAP_FCS_CRC16)
hlen += 2;
hlen += L2CAP_FCS_SIZE;

BT_DBG("chan %p, control 0x%8.8x", chan, control);

Expand All @@ -610,8 +610,8 @@ static inline void l2cap_send_sframe(struct l2cap_chan *chan, u32 control)
__put_control(chan, control, skb_put(skb, __ctrl_size(chan)));

if (chan->fcs == L2CAP_FCS_CRC16) {
u16 fcs = crc16(0, (u8 *)lh, count - 2);
put_unaligned_le16(fcs, skb_put(skb, 2));
u16 fcs = crc16(0, (u8 *)lh, count - L2CAP_FCS_SIZE);
put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
}

if (lmp_no_flush_capable(conn->hcon->hdev))
Expand Down Expand Up @@ -1289,8 +1289,10 @@ static void l2cap_streaming_send(struct l2cap_chan *chan)
__put_control(chan, control, skb->data + L2CAP_HDR_SIZE);

if (chan->fcs == L2CAP_FCS_CRC16) {
fcs = crc16(0, (u8 *)skb->data, skb->len - 2);
put_unaligned_le16(fcs, skb->data + skb->len - 2);
fcs = crc16(0, (u8 *)skb->data,
skb->len - L2CAP_FCS_SIZE);
put_unaligned_le16(fcs,
skb->data + skb->len - L2CAP_FCS_SIZE);
}

l2cap_do_send(chan, skb);
Expand Down Expand Up @@ -1339,8 +1341,10 @@ static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u16 tx_seq)
__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);

if (chan->fcs == L2CAP_FCS_CRC16) {
fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
fcs = crc16(0, (u8 *)tx_skb->data,
tx_skb->len - L2CAP_FCS_SIZE);
put_unaligned_le16(fcs,
tx_skb->data + tx_skb->len - L2CAP_FCS_SIZE);
}

l2cap_do_send(chan, tx_skb);
Expand Down Expand Up @@ -1380,8 +1384,10 @@ static int l2cap_ertm_send(struct l2cap_chan *chan)
__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);

if (chan->fcs == L2CAP_FCS_CRC16) {
fcs = crc16(0, (u8 *)skb->data, tx_skb->len - 2);
put_unaligned_le16(fcs, skb->data + tx_skb->len - 2);
fcs = crc16(0, (u8 *)skb->data,
tx_skb->len - L2CAP_FCS_SIZE);
put_unaligned_le16(fcs, skb->data +
tx_skb->len - L2CAP_FCS_SIZE);
}

l2cap_do_send(chan, tx_skb);
Expand Down Expand Up @@ -1491,7 +1497,7 @@ static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct
struct sock *sk = chan->sk;
struct l2cap_conn *conn = chan->conn;
struct sk_buff *skb;
int err, count, hlen = L2CAP_HDR_SIZE + 2;
int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
struct l2cap_hdr *lh;

BT_DBG("sk %p len %d", sk, (int)len);
Expand Down Expand Up @@ -1566,10 +1572,10 @@ static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
hlen = L2CAP_ENH_HDR_SIZE;

if (sdulen)
hlen += 2;
hlen += L2CAP_SDULEN_SIZE;

if (chan->fcs == L2CAP_FCS_CRC16)
hlen += 2;
hlen += L2CAP_FCS_SIZE;

count = min_t(unsigned int, (conn->mtu - hlen), len);
skb = bt_skb_send_alloc(sk, count + hlen,
Expand All @@ -1585,7 +1591,7 @@ static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
__put_control(chan, control, skb_put(skb, __ctrl_size(chan)));

if (sdulen)
put_unaligned_le16(sdulen, skb_put(skb, 2));
put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));

err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
if (unlikely(err < 0)) {
Expand All @@ -1594,7 +1600,7 @@ static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
}

if (chan->fcs == L2CAP_FCS_CRC16)
put_unaligned_le16(0, skb_put(skb, 2));
put_unaligned_le16(0, skb_put(skb, L2CAP_FCS_SIZE));

bt_cb(skb)->retries = 0;
return skb;
Expand Down Expand Up @@ -3180,7 +3186,7 @@ static int l2cap_check_fcs(struct l2cap_chan *chan, struct sk_buff *skb)
hdr_size = L2CAP_ENH_HDR_SIZE;

if (chan->fcs == L2CAP_FCS_CRC16) {
skb_trim(skb, skb->len - 2);
skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
rcv_fcs = get_unaligned_le16(skb->data + skb->len);
our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);

Expand Down Expand Up @@ -3290,7 +3296,7 @@ static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u3
break;

chan->sdu_len = get_unaligned_le16(skb->data);
skb_pull(skb, 2);
skb_pull(skb, L2CAP_SDULEN_SIZE);

if (chan->sdu_len > chan->imtu) {
err = -EMSGSIZE;
Expand Down Expand Up @@ -3783,10 +3789,10 @@ static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
goto drop;

if (__is_sar_start(chan, control) && !__is_sframe(chan, control))
len -= 2;
len -= L2CAP_SDULEN_SIZE;

if (chan->fcs == L2CAP_FCS_CRC16)
len -= 2;
len -= L2CAP_FCS_SIZE;

if (len > chan->mps) {
l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
Expand Down Expand Up @@ -3884,10 +3890,10 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
goto drop;

if (__is_sar_start(chan, control))
len -= 2;
len -= L2CAP_SDULEN_SIZE;

if (chan->fcs == L2CAP_FCS_CRC16)
len -= 2;
len -= L2CAP_FCS_SIZE;

if (len > chan->mps || len < 0 || __is_sframe(chan, control))
goto drop;
Expand Down

0 comments on commit 03a5121

Please sign in to comment.