[PATCH] ir240_discovery_on_demand-2.diff

Jean Tourrilhes (jt@bougret.hpl.hp.com)
Thu, 4 Oct 2001 17:10:26 -0700


ir240_discovery_on_demand-2.diff :
--------------------------------
o [FEATURE] Enable IrDA discovery on demand while in passive mode
- Apply only to IrSock and IrNET
- Was accidentally removed in discovery rework one year ago

diff -u -p linux/include/net/irda/irlmp.d0.h linux/include/net/irda/irlmp.h
--- linux/include/net/irda/irlmp.d0.h Fri Sep 28 11:54:25 2001
+++ linux/include/net/irda/irlmp.h Fri Sep 28 12:52:46 2001
@@ -216,7 +216,7 @@ int irlmp_disconnect_request(struct lsa

void irlmp_discovery_confirm(hashbin_t *discovery_log);
void irlmp_discovery_request(int nslots);
-struct irda_device_info *irlmp_get_discoveries(int *pn, __u16 mask);
+struct irda_device_info *irlmp_get_discoveries(int *pn, __u16 mask, int nslots);
void irlmp_do_expiry(void);
void irlmp_do_discovery(int nslots);
discovery_t *irlmp_get_discovery_response(void);
diff -u -p linux/net/irda/irlmp.d0.c linux/net/irda/irlmp.c
--- linux/net/irda/irlmp.d0.c Fri Sep 28 11:53:13 2001
+++ linux/net/irda/irlmp.c Fri Sep 28 13:45:21 2001
@@ -781,10 +781,6 @@ void irlmp_do_discovery(int nslots)
*/
void irlmp_discovery_request(int nslots)
{
- /* Check if user wants to override the default */
- if (nslots == DISCOVERY_DEFAULT_SLOTS)
- nslots = sysctl_discovery_slots;
-
/* Return current cached discovery log */
irlmp_discovery_confirm(irlmp->cachelog);

@@ -792,21 +788,43 @@ void irlmp_discovery_request(int nslots)
* Start a single discovery operation if discovery is not already
* running
*/
- if (!sysctl_discovery)
+ if (!sysctl_discovery) {
+ /* Check if user wants to override the default */
+ if (nslots == DISCOVERY_DEFAULT_SLOTS)
+ nslots = sysctl_discovery_slots;
+
irlmp_do_discovery(nslots);
- /* Note : we never do expiry here. Expiry will run on the
- * discovery timer regardless of the state of sysctl_discovery
- * Jean II */
+ /* Note : we never do expiry here. Expiry will run on the
+ * discovery timer regardless of the state of sysctl_discovery
+ * Jean II */
+ }
}

/*
- * Function irlmp_get_discoveries (pn, mask)
+ * Function irlmp_get_discoveries (pn, mask, slots)
*
* Return the current discovery log
*
*/
-struct irda_device_info *irlmp_get_discoveries(int *pn, __u16 mask)
+struct irda_device_info *irlmp_get_discoveries(int *pn, __u16 mask, int nslots)
{
+ /* If discovery is not enabled, it's likely that the discovery log
+ * will be empty. So, we trigger a single discovery, so that next
+ * time the user call us there might be some results in the log.
+ * Jean II
+ */
+ if (!sysctl_discovery) {
+ /* Check if user wants to override the default */
+ if (nslots == DISCOVERY_DEFAULT_SLOTS)
+ nslots = sysctl_discovery_slots;
+
+ /* Start discovery - will complete sometime later */
+ irlmp_do_discovery(nslots);
+ /* Note : we never do expiry here. Expiry will run on the
+ * discovery timer regardless of the state of sysctl_discovery
+ * Jean II */
+ }
+
/* Return current cached discovery log */
return(irlmp_copy_discoveries(irlmp->cachelog, pn, mask));
}
diff -u -p linux/net/irda/af_irda.d0.c linux/net/irda/af_irda.c
--- linux/net/irda/af_irda.d0.c Fri Sep 28 13:47:38 2001
+++ linux/net/irda/af_irda.c Fri Sep 28 13:49:22 2001
@@ -637,7 +637,7 @@ static int irda_discover_daddr_and_lsap_
* Note : we have to use irlmp_get_discoveries(), as opposed
* to play with the cachelog directly, because while we are
* making our ias query, le log might change... */
- discoveries = irlmp_get_discoveries(&number, self->mask);
+ discoveries = irlmp_get_discoveries(&number, self->mask, self->nslots);
/* Check if the we got some results */
if (discoveries == NULL)
return -ENETUNREACH; /* No nodes discovered */
@@ -2091,7 +2091,8 @@ static int irda_getsockopt(struct socket
switch (optname) {
case IRLMP_ENUMDEVICES:
/* Ask lmp for the current discovery log */
- discoveries = irlmp_get_discoveries(&list.len, self->mask);
+ discoveries = irlmp_get_discoveries(&list.len, self->mask,
+ self->nslots);
/* Check if the we got some results */
if (discoveries == NULL)
return -EAGAIN; /* Didn't find any devices */
diff -u -p linux/net/irda/irnet/irnet_ppp.d0b.c linux/net/irda/irnet/irnet_ppp.c
--- linux/net/irda/irnet/irnet_ppp.d0b.c Thu Oct 4 16:00:57 2001
+++ linux/net/irda/irnet/irnet_ppp.c Thu Oct 4 16:03:41 2001
@@ -14,7 +14,7 @@
*/

#include "irnet_ppp.h" /* Private header */
-#include <linux/module.h>
+/* Please put other headers in irnet.h - Thanks */

/************************* CONTROL CHANNEL *************************/
/*
@@ -200,7 +200,8 @@ irnet_read_discovery_log(irnet_socket *
__u16 mask = irlmp_service_to_hint(S_LAN);

/* Ask IrLMP for the current discovery log */
- ap->discoveries = irlmp_get_discoveries(&ap->disco_number, mask);
+ ap->discoveries = irlmp_get_discoveries(&ap->disco_number, mask,
+ DISCOVERY_DEFAULT_SLOTS);
/* Check if the we got some results */
if(ap->discoveries == NULL)
ap->disco_number = -1;
diff -u -p linux/net/irda/irnet/irnet_irda.d0b.c linux/net/irda/irnet/irnet_irda.c
--- linux/net/irda/irnet/irnet_irda.d0b.c Thu Oct 4 16:00:44 2001
+++ linux/net/irda/irnet/irnet_irda.c Thu Oct 4 16:02:09 2001
@@ -370,7 +370,8 @@ irnet_discover_daddr_and_lsap_sel(irnet_
DENTER(IRDA_SR_TRACE, "(self=0x%X)\n", (unsigned int) self);

/* Ask lmp for the current discovery log */
- self->discoveries = irlmp_get_discoveries(&self->disco_number, self->mask);
+ self->discoveries = irlmp_get_discoveries(&self->disco_number, self->mask,
+ DISCOVERY_DEFAULT_SLOTS);

/* Check if the we got some results */
if(self->discoveries == NULL)
@@ -426,7 +427,8 @@ irnet_dname_to_daddr(irnet_socket * self
DENTER(IRDA_SR_TRACE, "(self=0x%X)\n", (unsigned int) self);

/* Ask lmp for the current discovery log */
- discoveries = irlmp_get_discoveries(&number, 0xffff);
+ discoveries = irlmp_get_discoveries(&number, 0xffff,
+ DISCOVERY_DEFAULT_SLOTS);
/* Check if the we got some results */
if(discoveries == NULL)
DRETURN(-ENETUNREACH, IRDA_SR_INFO, "Cachelog empty...\n");
@@ -664,7 +666,8 @@ irnet_daddr_to_dname(irnet_socket * self
DENTER(IRDA_SERV_TRACE, "(self=0x%X)\n", (unsigned int) self);

/* Ask lmp for the current discovery log */
- discoveries = irlmp_get_discoveries(&number, 0xffff);
+ discoveries = irlmp_get_discoveries(&number, 0xffff,
+ DISCOVERY_DEFAULT_SLOTS);
/* Check if the we got some results */
if (discoveries == NULL)
DRETURN(-ENETUNREACH, IRDA_SERV_INFO, "Cachelog empty...\n");
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/