patch-2.4.10 linux/net/irda/irlmp_event.c
Next file: linux/net/irda/irlmp_frame.c
Previous file: linux/net/irda/irlmp.c
Back to the patch index
Back to the overall index
- Lines: 67
- Date:
Thu Sep 13 16:26:52 2001
- Orig file:
v2.4.9/linux/net/irda/irlmp_event.c
- Orig date:
Wed Jul 25 17:10:27 2001
diff -u --recursive --new-file v2.4.9/linux/net/irda/irlmp_event.c linux/net/irda/irlmp_event.c
@@ -150,6 +150,10 @@
{
IRDA_DEBUG(4, __FUNCTION__ "()\n");
+ /* We always cleanup the log (active & passive discovery) */
+ irlmp_do_expiry();
+
+ /* Active discovery is conditional */
if (sysctl_discovery)
irlmp_do_discovery(sysctl_discovery_slots);
@@ -205,10 +209,6 @@
irlap_discovery_request(self->irlap, &irlmp->discovery_cmd);
break;
- case LM_LAP_DISCOVERY_CONFIRM:
- /* irlmp_next_station_state( LMP_READY); */
- irlmp_discovery_confirm(irlmp->cachelog);
- break;
case LM_LAP_CONNECT_INDICATION:
/* It's important to switch state first, to avoid IrLMP to
* think that the link is free since IrLMP may then start
@@ -274,6 +274,12 @@
irlmp_do_lsap_event(lsap, LM_LAP_CONNECT_CONFIRM, NULL);
lsap = (struct lsap_cb*) hashbin_get_next(self->lsaps);
}
+ /* Note : by the time we get there (LAP retries and co),
+ * the lsaps may already have gone. This avoid getting stuck
+ * forever in LAP_ACTIVE state - Jean II */
+ if (HASHBIN_GET_SIZE(self->lsaps) == 0) {
+ irlmp_start_idle_timer(self, LM_IDLE_TIMEOUT);
+ }
break;
case LM_LAP_CONNECT_REQUEST:
/* Already trying to connect */
@@ -288,6 +294,12 @@
irlmp_do_lsap_event(lsap, LM_LAP_CONNECT_CONFIRM, NULL);
lsap = (struct lsap_cb*) hashbin_get_next(self->lsaps);
}
+ /* Note : by the time we get there (LAP retries and co),
+ * the lsaps may already have gone. This avoid getting stuck
+ * forever in LAP_ACTIVE state - Jean II */
+ if (HASHBIN_GET_SIZE(self->lsaps) == 0) {
+ irlmp_start_idle_timer(self, LM_IDLE_TIMEOUT);
+ }
break;
case LM_LAP_DISCONNECT_INDICATION:
irlmp_next_lap_state(self, LAP_STANDBY);
@@ -375,9 +387,15 @@
* must be the one that tries to close IrLAP. It will be
* removed later and moved to the list of unconnected LSAPs
*/
- if (HASHBIN_GET_SIZE(self->lsaps) > 0)
- irlmp_start_idle_timer(self, LM_IDLE_TIMEOUT);
- else {
+ if (HASHBIN_GET_SIZE(self->lsaps) > 0) {
+ /* Make sure the timer has sensible value (the user
+ * may have set it) - Jean II */
+ if(sysctl_lap_keepalive_time < 100) /* 100ms */
+ sysctl_lap_keepalive_time = 100;
+ if(sysctl_lap_keepalive_time > 10000) /* 10s */
+ sysctl_lap_keepalive_time = 10000;
+ irlmp_start_idle_timer(self, sysctl_lap_keepalive_time * HZ / 1000);
+ } else {
/* No more connections, so close IrLAP */
/* We don't want to change state just yet, because
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)