[PATCH 2.6 IrDA] Fix handling of RD:RSP

From: Jean Tourrilhes
Date: Wed Apr 14 2004 - 17:19:15 EST


ir265_rd_rsp_retry.diff :
~~~~~~~~~~~~~~~~~~~~~~~
<Patch from Martin Diehl>
o [CORRECT] Fix handling of RD:RSP to be spec compliant


diff -u -p linux/net/irda/irlap_event.d0.c linux/net/irda/irlap_event.c
--- linux/net/irda/irlap_event.d0.c Wed Apr 7 18:54:24 2004
+++ linux/net/irda/irlap_event.c Wed Apr 7 18:54:33 2004
@@ -2236,6 +2236,14 @@ static int irlap_state_sclose(struct irl
irlap_disconnect_indication(self, LAP_DISC_INDICATION);
break;
case RECV_DM_RSP:
+ /* IrLAP-1.1 p.82: in SCLOSE, S and I type RSP frames
+ * shall take us down into default NDM state, like DM_RSP
+ */
+ case RECV_RR_RSP:
+ case RECV_RNR_RSP:
+ case RECV_REJ_RSP:
+ case RECV_SREJ_RSP:
+ case RECV_I_RSP:
/* Always switch state before calling upper layers */
irlap_next_state(self, LAP_NDM);

@@ -2253,6 +2261,17 @@ static int irlap_state_sclose(struct irl
irlap_disconnect_indication(self, LAP_DISC_INDICATION);
break;
default:
+ /* IrLAP-1.1 p.82: in SCLOSE, basically any received frame
+ * with pf=1 shall restart the wd-timer and resend the rd:rsp
+ */
+ if (info != NULL && info->pf) {
+ del_timer(&self->wd_timer);
+ irlap_wait_min_turn_around(self, &self->qos_tx);
+ irlap_send_rd_frame(self);
+ irlap_start_wd_timer(self, self->wd_timeout);
+ break; /* stay in SCLOSE */
+ }
+
IRDA_DEBUG(1, "%s(), Unknown event %d, (%s)\n", __FUNCTION__,
event, irlap_event[event]);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/