All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/7] Bluetooth: Put Basic Mode to be the default when using SOCK_SEQPACKET
@ 2009-09-29  4:42 Gustavo F. Padovan
  2009-09-29  4:42 ` [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides Gustavo F. Padovan
  2009-09-29  5:00 ` [PATCH 1/7] Bluetooth: Put Basic Mode to be the default when using SOCK_SEQPACKET Marcel Holtmann
  0 siblings, 2 replies; 16+ messages in thread
From: Gustavo F. Padovan @ 2009-09-29  4:42 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: marcel, gustavo

We can't break userspace app that will continue using SOCK_SEQPACKET.
The default mode for SOCK_SEQPACKET is Basic Mode, so when no one
specifies the mode and sk_type is SOCK_SEQPACKET Basic Mode shall be used.

Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
---
 net/bluetooth/l2cap.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index b030125..9d586fb 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -2202,7 +2202,7 @@ static int l2cap_build_conf_req(struct sock *sk, void *data)
 {
 	struct l2cap_pinfo *pi = l2cap_pi(sk);
 	struct l2cap_conf_req *req = data;
-	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_ERTM };
+	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
 	void *ptr = req->data;
 
 	BT_DBG("sk %p", sk);
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides
  2009-09-29  4:42 [PATCH 1/7] Bluetooth: Put Basic Mode to be the default when using SOCK_SEQPACKET Gustavo F. Padovan
@ 2009-09-29  4:42 ` Gustavo F. Padovan
  2009-09-29  4:42   ` [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag Gustavo F. Padovan
  2009-09-29  4:55   ` [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides Marcel Holtmann
  2009-09-29  5:00 ` [PATCH 1/7] Bluetooth: Put Basic Mode to be the default when using SOCK_SEQPACKET Marcel Holtmann
  1 sibling, 2 replies; 16+ messages in thread
From: Gustavo F. Padovan @ 2009-09-29  4:42 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: marcel, gustavo

ERTM entity need to handle state vars, timers and counters to send and
receive I-frames. We initialize all of them to the default values here.

Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
---
 net/bluetooth/l2cap.c |   53 ++++++++++++++++++++++++++++++++----------------
 1 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index 9d586fb..3f9d74b 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -2169,6 +2169,20 @@ static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
 	*ptr += L2CAP_CONF_OPT_SIZE + len;
 }
 
+static inline void l2cap_ertm_init(struct sock *sk) {
+	l2cap_pi(sk)->expected_ack_seq = 0;
+	l2cap_pi(sk)->unacked_frames = 0;
+	l2cap_pi(sk)->buffer_seq = 0;
+	l2cap_pi(sk)->num_to_ack = 0;
+
+	setup_timer(&l2cap_pi(sk)->retrans_timer,
+			l2cap_retrans_timeout, (unsigned long) sk);
+	setup_timer(&l2cap_pi(sk)->monitor_timer,
+			l2cap_monitor_timeout, (unsigned long) sk);
+
+	__skb_queue_head_init(SREJ_QUEUE(sk));
+}
+
 static int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
 {
 	u32 local_feat_mask = l2cap_feat_mask;
@@ -2752,17 +2766,13 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr
 			l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16;
 
 		sk->sk_state = BT_CONNECTED;
-		l2cap_pi(sk)->next_tx_seq = 0;
-		l2cap_pi(sk)->expected_ack_seq = 0;
-		l2cap_pi(sk)->unacked_frames = 0;
-
-		setup_timer(&l2cap_pi(sk)->retrans_timer,
-				l2cap_retrans_timeout, (unsigned long) sk);
-		setup_timer(&l2cap_pi(sk)->monitor_timer,
-				l2cap_monitor_timeout, (unsigned long) sk);
 
+		l2cap_pi(sk)->next_tx_seq = 0;
+		l2cap_pi(sk)->expected_tx_seq = 0;
 		__skb_queue_head_init(TX_QUEUE(sk));
-		__skb_queue_head_init(SREJ_QUEUE(sk));
+		if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM)
+			l2cap_ertm_init(sk);
+
 		l2cap_chan_ready(sk);
 		goto unlock;
 	}
@@ -2841,11 +2851,12 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr
 			l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16;
 
 		sk->sk_state = BT_CONNECTED;
+		l2cap_pi(sk)->next_tx_seq = 0;
 		l2cap_pi(sk)->expected_tx_seq = 0;
-		l2cap_pi(sk)->buffer_seq = 0;
-		l2cap_pi(sk)->num_to_ack = 0;
 		__skb_queue_head_init(TX_QUEUE(sk));
-		__skb_queue_head_init(SREJ_QUEUE(sk));
+		if (l2cap_pi(sk)->mode ==  L2CAP_MODE_ERTM)
+			l2cap_ertm_init(sk);
+
 		l2cap_chan_ready(sk);
 	}
 
@@ -2877,9 +2888,12 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd
 	sk->sk_shutdown = SHUTDOWN_MASK;
 
 	skb_queue_purge(TX_QUEUE(sk));
-	skb_queue_purge(SREJ_QUEUE(sk));
-	del_timer(&l2cap_pi(sk)->retrans_timer);
-	del_timer(&l2cap_pi(sk)->monitor_timer);
+
+	if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM) {
+		skb_queue_purge(SREJ_QUEUE(sk));
+		del_timer(&l2cap_pi(sk)->retrans_timer);
+		del_timer(&l2cap_pi(sk)->monitor_timer);
+	}
 
 	l2cap_chan_del(sk, ECONNRESET);
 	bh_unlock_sock(sk);
@@ -2904,9 +2918,12 @@ static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd
 		return 0;
 
 	skb_queue_purge(TX_QUEUE(sk));
-	skb_queue_purge(SREJ_QUEUE(sk));
-	del_timer(&l2cap_pi(sk)->retrans_timer);
-	del_timer(&l2cap_pi(sk)->monitor_timer);
+
+	if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM) {
+		skb_queue_purge(SREJ_QUEUE(sk));
+		del_timer(&l2cap_pi(sk)->retrans_timer);
+		del_timer(&l2cap_pi(sk)->monitor_timer);
+	}
 
 	l2cap_chan_del(sk, 0);
 	bh_unlock_sock(sk);
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag
  2009-09-29  4:42 ` [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides Gustavo F. Padovan
@ 2009-09-29  4:42   ` Gustavo F. Padovan
  2009-09-29  4:42     ` [PATCH 4/7] Bluetooth: send ReqSeq on I-frames Gustavo F. Padovan
  2009-09-29  4:57     ` [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag Marcel Holtmann
  2009-09-29  4:55   ` [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides Marcel Holtmann
  1 sibling, 2 replies; 16+ messages in thread
From: Gustavo F. Padovan @ 2009-09-29  4:42 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: marcel, gustavo

pi->conn_state is the right place to set states

Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
---
 net/bluetooth/l2cap.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index 3f9d74b..658e27c 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -3433,7 +3433,7 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
 		} else if (rx_control & L2CAP_CTRL_FINAL) {
 			if ((pi->conn_state & L2CAP_CONN_SREJ_ACT) &&
 					pi->srej_save_reqseq == tx_seq)
-				pi->srej_save_reqseq &= ~L2CAP_CONN_SREJ_ACT;
+				pi->conn_state &= ~L2CAP_CONN_SREJ_ACT;
 			else
 				l2cap_retransmit_frame(sk, tx_seq);
 		}
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 4/7] Bluetooth: send ReqSeq on I-frames
  2009-09-29  4:42   ` [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag Gustavo F. Padovan
@ 2009-09-29  4:42     ` Gustavo F. Padovan
  2009-09-29  4:42       ` [PATCH 5/7] Bluetooth: Implement RejActioned flag Gustavo F. Padovan
  2009-09-29  4:58       ` [PATCH 4/7] Bluetooth: send ReqSeq on I-frames Marcel Holtmann
  2009-09-29  4:57     ` [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag Marcel Holtmann
  1 sibling, 2 replies; 16+ messages in thread
From: Gustavo F. Padovan @ 2009-09-29  4:42 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: marcel, gustavo

A ERTM channel can acknowledge received I-frames by sending a I-frame with
the proper ReqSeq value (i.e. ReqSeq is set to ExpectedTxSeq).

Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
---
 include/net/bluetooth/l2cap.h |    1 -
 net/bluetooth/l2cap.c         |    8 ++++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index 9516f4b..327eb57 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -324,7 +324,6 @@ struct l2cap_pinfo {
 
 	__u8		next_tx_seq;
 	__u8		expected_ack_seq;
-	__u8		req_seq;
 	__u8		expected_tx_seq;
 	__u8		buffer_seq;
 	__u8		buffer_seq_srej;
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index 658e27c..ed245c4 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -1329,7 +1329,7 @@ static int l2cap_retransmit_frame(struct sock *sk, u8 tx_seq)
 		tx_skb = skb_clone(skb, GFP_ATOMIC);
 		bt_cb(skb)->retries++;
 		control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
-		control |= (pi->req_seq << L2CAP_CTRL_REQSEQ_SHIFT)
+		control |= (pi->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT)
 				| (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
 		put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
 
@@ -1371,7 +1371,7 @@ static int l2cap_ertm_send(struct sock *sk)
 		bt_cb(skb)->retries++;
 
 		control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
-		control |= (pi->req_seq << L2CAP_CTRL_REQSEQ_SHIFT)
+		control |= (pi->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT)
 				| (pi->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
 		put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
 
@@ -3288,12 +3288,16 @@ static inline int l2cap_data_channel_iframe(struct sock *sk, u16 rx_control, str
 {
 	struct l2cap_pinfo *pi = l2cap_pi(sk);
 	u8 tx_seq = __get_txseq(rx_control);
+	u8 req_seq = __get_reqseq(rx_control);
 	u16 tx_control = 0;
 	u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
 	int err = 0;
 
 	BT_DBG("sk %p rx_control 0x%4.4x len %d", sk, rx_control, skb->len);
 
+	pi->expected_ack_seq = req_seq;
+	l2cap_drop_acked_frames(sk);
+
 	if (tx_seq == pi->expected_tx_seq)
 		goto expected;
 
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 5/7] Bluetooth: Implement RejActioned flag
  2009-09-29  4:42     ` [PATCH 4/7] Bluetooth: send ReqSeq on I-frames Gustavo F. Padovan
@ 2009-09-29  4:42       ` Gustavo F. Padovan
  2009-09-29  4:42         ` [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames Gustavo F. Padovan
  2009-09-29  4:59         ` [PATCH 5/7] Bluetooth: Implement RejActioned flag Marcel Holtmann
  2009-09-29  4:58       ` [PATCH 4/7] Bluetooth: send ReqSeq on I-frames Marcel Holtmann
  1 sibling, 2 replies; 16+ messages in thread
From: Gustavo F. Padovan @ 2009-09-29  4:42 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: marcel, gustavo

RejActioned is used to prevent retransmission when a entity is on the
WAIT_F state. After send a frame with F-bit set the remote entity can
receive I-frames again. Local L2CAP receives the F-bit and start sending
I-frames.

Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
---
 include/net/bluetooth/l2cap.h |    1 +
 net/bluetooth/l2cap.c         |   38 +++++++++++++++++++++++++++++++++++---
 2 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index 327eb57..17a689f 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -374,6 +374,7 @@ struct l2cap_pinfo {
 #define L2CAP_CONN_SEND_PBIT       0x10
 #define L2CAP_CONN_REMOTE_BUSY     0x20
 #define L2CAP_CONN_LOCAL_BUSY      0x40
+#define L2CAP_CONN_REJ_ACT         0x80
 
 #define __mod_retrans_timer() mod_timer(&l2cap_pi(sk)->retrans_timer, \
 		jiffies +  msecs_to_jiffies(L2CAP_DEFAULT_RETRANS_TO));
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index ed245c4..10bf0c4 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -3352,6 +3352,16 @@ expected:
 		return 0;
 	}
 
+	if (rx_control & L2CAP_CTRL_FINAL) {
+		if (pi->conn_state & L2CAP_CONN_REJ_ACT)
+			pi->conn_state &= ~L2CAP_CONN_REJ_ACT;
+		else {
+			sk->sk_send_head = TX_QUEUE(sk)->next;
+			pi->next_tx_seq = pi->expected_ack_seq;
+			l2cap_ertm_send(sk);
+		}
+	}
+
 	pi->buffer_seq = (pi->buffer_seq + 1) % 64;
 
 	err = l2cap_sar_reassembly_sdu(sk, skb, rx_control);
@@ -3388,6 +3398,14 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
 			pi->expected_ack_seq = tx_seq;
 			l2cap_drop_acked_frames(sk);
 
+			if (pi->conn_state & L2CAP_CONN_REJ_ACT)
+				pi->conn_state &= ~L2CAP_CONN_REJ_ACT;
+			else {
+				sk->sk_send_head = TX_QUEUE(sk)->next;
+				pi->next_tx_seq = pi->expected_ack_seq;
+				l2cap_ertm_send(sk);
+			}
+
 			if (!(pi->conn_state & L2CAP_CONN_WAIT_F))
 				break;
 
@@ -3415,10 +3433,24 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
 		pi->expected_ack_seq = __get_reqseq(rx_control);
 		l2cap_drop_acked_frames(sk);
 
-		sk->sk_send_head = TX_QUEUE(sk)->next;
-		pi->next_tx_seq = pi->expected_ack_seq;
+		if (rx_control & L2CAP_CTRL_FINAL) {
+			if (pi->conn_state & L2CAP_CONN_REJ_ACT)
+				pi->conn_state &= ~L2CAP_CONN_REJ_ACT;
+			else {
+				sk->sk_send_head = TX_QUEUE(sk)->next;
+				pi->next_tx_seq = pi->expected_ack_seq;
+				l2cap_ertm_send(sk);
+			}
+		} else {
+			sk->sk_send_head = TX_QUEUE(sk)->next;
+			pi->next_tx_seq = pi->expected_ack_seq;
+			l2cap_ertm_send(sk);
 
-		l2cap_ertm_send(sk);
+			if (pi->conn_state & L2CAP_CONN_WAIT_F) {
+				pi->srej_save_reqseq = tx_seq;
+				pi->conn_state |= L2CAP_CONN_REJ_ACT;
+			}
+		}
 
 		break;
 
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames
  2009-09-29  4:42       ` [PATCH 5/7] Bluetooth: Implement RejActioned flag Gustavo F. Padovan
@ 2009-09-29  4:42         ` Gustavo F. Padovan
  2009-09-29  4:42           ` [PATCH 7/7] Bluetooth: Send ReqSeq on 'SendRRorRNR' function Gustavo F. Padovan
  2009-09-29  4:59           ` [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames Marcel Holtmann
  2009-09-29  4:59         ` [PATCH 5/7] Bluetooth: Implement RejActioned flag Marcel Holtmann
  1 sibling, 2 replies; 16+ messages in thread
From: Gustavo F. Padovan @ 2009-09-29  4:42 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: marcel, gustavo

ReqSeq shall be set to BufferSeq instead of ExpectedTxSeq. BufferSeq gives
real notion of txWindow at sending side (the side sending that I-frame).
It is incremented only when I-frames are pulled by reassembly function.

Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
---
 net/bluetooth/l2cap.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index 10bf0c4..ddf70d6 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -1329,7 +1329,7 @@ static int l2cap_retransmit_frame(struct sock *sk, u8 tx_seq)
 		tx_skb = skb_clone(skb, GFP_ATOMIC);
 		bt_cb(skb)->retries++;
 		control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
-		control |= (pi->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT)
+		control |= (pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
 				| (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
 		put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
 
@@ -1371,7 +1371,7 @@ static int l2cap_ertm_send(struct sock *sk)
 		bt_cb(skb)->retries++;
 
 		control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
-		control |= (pi->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT)
+		control |= (pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
 				| (pi->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
 		put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
 
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 7/7] Bluetooth: Send ReqSeq on 'SendRRorRNR' function
  2009-09-29  4:42         ` [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames Gustavo F. Padovan
@ 2009-09-29  4:42           ` Gustavo F. Padovan
  2009-09-29  5:00             ` Marcel Holtmann
  2009-09-29  4:59           ` [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames Marcel Holtmann
  1 sibling, 1 reply; 16+ messages in thread
From: Gustavo F. Padovan @ 2009-09-29  4:42 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: marcel, gustavo

SendRRorRNR need to acknowledge received I-frames so ReqSeq is set
to BufferSeq on the the outgoing S-frame.

Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
---
 net/bluetooth/l2cap.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index ddf70d6..76a7a19 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -373,6 +373,8 @@ static inline int l2cap_send_rr_or_rnr(struct l2cap_pinfo *pi, u16 control)
 	else
 		control |= L2CAP_SUPER_RCV_READY;
 
+	control |= pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
+
 	return l2cap_send_sframe(pi, control);
 }
 
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides
  2009-09-29  4:42 ` [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides Gustavo F. Padovan
  2009-09-29  4:42   ` [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag Gustavo F. Padovan
@ 2009-09-29  4:55   ` Marcel Holtmann
  2009-09-29  5:15     ` Gustavo F. Padovan
  1 sibling, 1 reply; 16+ messages in thread
From: Marcel Holtmann @ 2009-09-29  4:55 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth, gustavo

Hi Gustavo,

> ERTM entity need to handle state vars, timers and counters to send and
> receive I-frames. We initialize all of them to the default values here.

while this is a good idea. Where is the justification for pushing this
after the merge window?

> Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
> ---
>  net/bluetooth/l2cap.c |   53 ++++++++++++++++++++++++++++++++----------------
>  1 files changed, 35 insertions(+), 18 deletions(-)
> 
> diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
> index 9d586fb..3f9d74b 100644
> --- a/net/bluetooth/l2cap.c
> +++ b/net/bluetooth/l2cap.c
> @@ -2169,6 +2169,20 @@ static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
>  	*ptr += L2CAP_CONF_OPT_SIZE + len;
>  }
>  
> +static inline void l2cap_ertm_init(struct sock *sk) {
> +	l2cap_pi(sk)->expected_ack_seq = 0;

Coding style! The {  belong on the next line.

Regards

Marcel



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag
  2009-09-29  4:42   ` [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag Gustavo F. Padovan
  2009-09-29  4:42     ` [PATCH 4/7] Bluetooth: send ReqSeq on I-frames Gustavo F. Padovan
@ 2009-09-29  4:57     ` Marcel Holtmann
  1 sibling, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2009-09-29  4:57 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth, gustavo

Hi Gustavo,

> pi->conn_state is the right place to set states
> 
> Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
> ---
>  net/bluetooth/l2cap.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
> index 3f9d74b..658e27c 100644
> --- a/net/bluetooth/l2cap.c
> +++ b/net/bluetooth/l2cap.c
> @@ -3433,7 +3433,7 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
>  		} else if (rx_control & L2CAP_CTRL_FINAL) {
>  			if ((pi->conn_state & L2CAP_CONN_SREJ_ACT) &&
>  					pi->srej_save_reqseq == tx_seq)
> -				pi->srej_save_reqseq &= ~L2CAP_CONN_SREJ_ACT;
> +				pi->conn_state &= ~L2CAP_CONN_SREJ_ACT;
>  			else
>  				l2cap_retransmit_frame(sk, tx_seq);
>  		}

clearly a bug, but the commit message is not enough. Describe it in
plain English and not some cryptic way. The patch is easier to
understand the commit message. It should be the other way around.

Regards

Marcel



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 4/7] Bluetooth: send ReqSeq on I-frames
  2009-09-29  4:42     ` [PATCH 4/7] Bluetooth: send ReqSeq on I-frames Gustavo F. Padovan
  2009-09-29  4:42       ` [PATCH 5/7] Bluetooth: Implement RejActioned flag Gustavo F. Padovan
@ 2009-09-29  4:58       ` Marcel Holtmann
  1 sibling, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2009-09-29  4:58 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth, gustavo

Hi Gustavo,

> A ERTM channel can acknowledge received I-frames by sending a I-frame with
> the proper ReqSeq value (i.e. ReqSeq is set to ExpectedTxSeq).

how does this justify for after the merge window? Explain it like I have
no idea about L2CAP ERTM.

Regards

Marcel



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 5/7] Bluetooth: Implement RejActioned flag
  2009-09-29  4:42       ` [PATCH 5/7] Bluetooth: Implement RejActioned flag Gustavo F. Padovan
  2009-09-29  4:42         ` [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames Gustavo F. Padovan
@ 2009-09-29  4:59         ` Marcel Holtmann
  1 sibling, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2009-09-29  4:59 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth, gustavo

Hi Gustavo,

> RejActioned is used to prevent retransmission when a entity is on the
> WAIT_F state. After send a frame with F-bit set the remote entity can
> receive I-frames again. Local L2CAP receives the F-bit and start sending
> I-frames.

same as the other one. Explain why this should be included after the
merge windows has closed.

Regards

Marcel



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames
  2009-09-29  4:42         ` [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames Gustavo F. Padovan
  2009-09-29  4:42           ` [PATCH 7/7] Bluetooth: Send ReqSeq on 'SendRRorRNR' function Gustavo F. Padovan
@ 2009-09-29  4:59           ` Marcel Holtmann
  1 sibling, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2009-09-29  4:59 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth, gustavo

Hi Gustavo,

> ReqSeq shall be set to BufferSeq instead of ExpectedTxSeq. BufferSeq gives
> real notion of txWindow at sending side (the side sending that I-frame).
> It is incremented only when I-frames are pulled by reassembly function.

more explanation in plain English.

Regards

Marcel



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 7/7] Bluetooth: Send ReqSeq on 'SendRRorRNR' function
  2009-09-29  4:42           ` [PATCH 7/7] Bluetooth: Send ReqSeq on 'SendRRorRNR' function Gustavo F. Padovan
@ 2009-09-29  5:00             ` Marcel Holtmann
  0 siblings, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2009-09-29  5:00 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth, gustavo

Hi Gustavo,

> SendRRorRNR need to acknowledge received I-frames so ReqSeq is set
> to BufferSeq on the the outgoing S-frame.

same here :(

Regards

Marcel



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/7] Bluetooth: Put Basic Mode to be the default when using SOCK_SEQPACKET
  2009-09-29  4:42 [PATCH 1/7] Bluetooth: Put Basic Mode to be the default when using SOCK_SEQPACKET Gustavo F. Padovan
  2009-09-29  4:42 ` [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides Gustavo F. Padovan
@ 2009-09-29  5:00 ` Marcel Holtmann
  1 sibling, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2009-09-29  5:00 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth, gustavo

Hi Gustavo,

> We can't break userspace app that will continue using SOCK_SEQPACKET.
> The default mode for SOCK_SEQPACKET is Basic Mode, so when no one
> specifies the mode and sk_type is SOCK_SEQPACKET Basic Mode shall be used.

this one is fine. Applied to my tree.

Regards

Marcel



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides
  2009-09-29  4:55   ` [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides Marcel Holtmann
@ 2009-09-29  5:15     ` Gustavo F. Padovan
  2009-09-29  5:18       ` Marcel Holtmann
  0 siblings, 1 reply; 16+ messages in thread
From: Gustavo F. Padovan @ 2009-09-29  5:15 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: linux-bluetooth

Hi Marcel,

On Tue, Sep 29, 2009 at 1:55 AM, Marcel Holtmann <marcel@holtmann.org> wrot=
e:
> Hi Gustavo,
>
>> ERTM entity need to handle state vars, timers and counters to send and
>> receive I-frames. We initialize all of them to the default values here.
>
> while this is a good idea. Where is the justification for pushing this
> after the merge window?

These patches are bug fixes and implementations of missing parts of ERTM sp=
ec.
For instance, they enable ERTM to transmit in a full duplex among other thi=
ngs.
Also, ERTM isn't enabled on L2CAP, so we aren't introducing any regressions=
 and
ASAP we put this code on mainline more feedback we can get from
possible testers.

Should I put this on the commit message?


>
>> Signed-off-by: Gustavo F. Padovan <gustavo@las.ic.unicamp.br>
>> ---
>> =A0net/bluetooth/l2cap.c | =A0 53 ++++++++++++++++++++++++++++++++------=
----------
>> =A01 files changed, 35 insertions(+), 18 deletions(-)
>>
>> diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
>> index 9d586fb..3f9d74b 100644
>> --- a/net/bluetooth/l2cap.c
>> +++ b/net/bluetooth/l2cap.c
>> @@ -2169,6 +2169,20 @@ static void l2cap_add_conf_opt(void **ptr, u8 typ=
e, u8 len, unsigned long val)
>> =A0 =A0 =A0 *ptr +=3D L2CAP_CONF_OPT_SIZE + len;
>> =A0}
>>
>> +static inline void l2cap_ertm_init(struct sock *sk) {
>> + =A0 =A0 l2cap_pi(sk)->expected_ack_seq =3D 0;
>
> Coding style! The { =A0belong on the next line.

Sorry, :(

>
> Regards
>
> Marcel
>
>
>



--=20
Gustavo F. Padovan
http://padovan.org

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides
  2009-09-29  5:15     ` Gustavo F. Padovan
@ 2009-09-29  5:18       ` Marcel Holtmann
  0 siblings, 0 replies; 16+ messages in thread
From: Marcel Holtmann @ 2009-09-29  5:18 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth

Hi Gustavo,

> >> ERTM entity need to handle state vars, timers and counters to send and
> >> receive I-frames. We initialize all of them to the default values here.
> >
> > while this is a good idea. Where is the justification for pushing this
> > after the merge window?
> 
> These patches are bug fixes and implementations of missing parts of ERTM spec.
> For instance, they enable ERTM to transmit in a full duplex among other things.
> Also, ERTM isn't enabled on L2CAP, so we aren't introducing any regressions and
> ASAP we put this code on mainline more feedback we can get from
> possible testers.
> 
> Should I put this on the commit message?

if it fixes a bug in the current implementation, then that is fine. If
it adds another feature, then it is not acceptable. However if that
feature is mandatory by the specification, then that is a different
story. Make it perfectly clear what you are fixing or adding.

L2CAP has been in the kernel before and so the not introducing a
regression is not a real valid argument. You normally only get that for
new drivers or subsystems.

And forget about the idea with the more testers. After the merge window
that comment is void.

Regards

Marcel



^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2009-09-29  5:18 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-29  4:42 [PATCH 1/7] Bluetooth: Put Basic Mode to be the default when using SOCK_SEQPACKET Gustavo F. Padovan
2009-09-29  4:42 ` [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides Gustavo F. Padovan
2009-09-29  4:42   ` [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag Gustavo F. Padovan
2009-09-29  4:42     ` [PATCH 4/7] Bluetooth: send ReqSeq on I-frames Gustavo F. Padovan
2009-09-29  4:42       ` [PATCH 5/7] Bluetooth: Implement RejActioned flag Gustavo F. Padovan
2009-09-29  4:42         ` [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames Gustavo F. Padovan
2009-09-29  4:42           ` [PATCH 7/7] Bluetooth: Send ReqSeq on 'SendRRorRNR' function Gustavo F. Padovan
2009-09-29  5:00             ` Marcel Holtmann
2009-09-29  4:59           ` [PATCH 6/7] Bluetooth: Fix ReqSeq value on sending I-frames Marcel Holtmann
2009-09-29  4:59         ` [PATCH 5/7] Bluetooth: Implement RejActioned flag Marcel Holtmann
2009-09-29  4:58       ` [PATCH 4/7] Bluetooth: send ReqSeq on I-frames Marcel Holtmann
2009-09-29  4:57     ` [PATCH 3/7] Bluetooth: Fix unset of SrejActioned flag Marcel Holtmann
2009-09-29  4:55   ` [PATCH 2/7] Bluetooth: Initialize variables and timers for both channel's sides Marcel Holtmann
2009-09-29  5:15     ` Gustavo F. Padovan
2009-09-29  5:18       ` Marcel Holtmann
2009-09-29  5:00 ` [PATCH 1/7] Bluetooth: Put Basic Mode to be the default when using SOCK_SEQPACKET Marcel Holtmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.