Dan, I repeat my last mail since there was an error in the sending process:


If I undersand correctly, what you say is that we "count" the times the
signal SCAN_RESULTS gets emitted. Please correct me if I'm wrong.

Also you mention to request two back to back scans at startup. My question
on this is:

- Is the method auto_activate_device (gpointer user_data) the one in charge
of initially activating all interfaces?

- If so, is it here where you say we should use the method
request_wireless_scan twice in order to get two scans scheduled?

You say to reduce the constant SCAN_INTERVAL_MIN to 11, In any case the
initial value of that constant is 0 so I think you mean to increase it,
right?

If the start code for an interface is within auto_activate_device, I don't
see where the initial scans are being requested. What I understand NM does,
is a lot of processes executed in parallel, some of them (or most) triggered
by different signals. What I mean by this is since I don't see any scan
request on auto_activate_device -and I think that here is where the wireless
iface gets activated- I'm assuming that the scan requests are made by
another process running in parallel.

If this is the case, I thought one could -within auto_activate_device- wait
and count the times the SCAN_RESULTS signal gets emitted, and after X
emissions, pass through to get_best_auto_connection.

A pseudocode for this would be something like this:


auto_activate_device (gpointer user_data)
{
    ActivateData *data = (ActivateData *) user_data;
    NMPolicy *policy;
            g_slist_free (iter);
..........
       }
        iter = next;
    }

WHILE SCAN-COUNT < X DO {} /*SCAN-COUNT gets updated in the callback
function of the emitted SCAN_RESULT signal*/

    best_connection = nm_device_get_best_auto_
connection (data->device, connections, &specific_object);
..........

 out:
    /* Remove this call's handler ID */
    policy->pending_activation_checks = g_slist_remove
(policy->pending_activation_checks, data);
    g_object_unref (data->device);
    g_free (data);

    return FALSE;
}

Then in the callback function to the scan_results:

supplicant_iface_scan_results_cb (NMSupplicantInterface *iface,
                                  guint32 num_results,
                                  NMDeviceWifi *self)
{
    priv = getPrivate(self);
    priv->SCAN-COUNT++;/*Defined previously within NMDeviceWIFI*/
    if (num_results == 0) {
        /* ensure that old APs get culled, which otherwise only
         * happens when there are actual scan results to process.
         */
        cull_scan_list (self);
    }
}
----------------------------------------------------------------------------------------------------------


What do you think about this? Am I getting it all wrong?

Thank you very much.


2010/7/29 Franco Miceli <fmic...@plan.ceibal.edu.uy>

> Dan,
>
> If I undersand correctly, what you say is that we "count" the times the
> signal SCAN_RESULTS gets emitted. Please correct me if I'm wrong.
>
> Also you mention to request two back to back scans at startup. My question
> on this is:
>
> - Is the method auto_activate_device (gpointer user_data) the one in charge
> of initially activating all interfaces?
>
> - If so, is it here where you say we should use the method
> request_wireless_scan twice in order to get two scans scheduled?
>
> You say to reduce the constant SCAN_INTERVAL_MIN to 11, In any case the
> initial value of that constant is 0 so I think you mean to increase it,
> right?
>
> If the start code for an interface is within auto_activate_device, I don't
> see where the initial scans are being requested. What I understand NM does,
> is a lot of processes executed in parallel, some of them (or most) triggered
> by different signals. What I mean by this is since I don't see any scan
> request on auto_activate_device -and I think that here is where the wireless
> iface gets activated- I'm assuming that the scan requests are made by
> another process running in parallel.
>
> If this is the case, I thought one could -within auto_activate_device- wait
> and count the times the SCAN_RESULTS signal gets emitted, and after X
> emissions, pass through to get_best_auto_connection.
>
> A pseudocode for this would be something like this:
>
>
> auto_activate_device (gpointer user_data)
> {
>     ActivateData *data = (ActivateData *) user_data;
>     NMPolicy *policy;
>             g_slist_free (iter);
> ..........
>        }
>         iter = next;
>     }
>
> WHILE SCAN-COUNT < X DO {} /*SCAN-COUNT gets updated in the callback
> function of the emitted SCAN_RESULT signal*/
>
>     best_connection = nm_device_get_best_auto_connection (data->device,
> connections, &specific_object);
> ..........
>
>  out:
>     /* Remove this call's handler ID */
>     policy->pending_activation_checks = g_slist_remove
> (policy->pending_activation_checks, data);
>     g_object_unref (data->device);
>     g_free (data);
>
>     return FALSE;
> }
>
> Then in the callback function to the scan_results:
>
> supplicant_iface_scan_results_cb (NMSupplicantInterface *iface,
>                                   guint32 num_results,
>                                   NMDeviceWifi *self)
> {
>     priv = getPrivate(self);
>     priv->SCAN-COUNT++;/*Defined previously within NMDeviceWIFI*/
>     if (num_results == 0) {
>         /* ensure that old APs get culled, which otherwise only
>          * happens when there are actual scan results to process.
>          */
>         cull_scan_list (self);
>     }
> }
>
> ----------------------------------------------------------------------------------------------------------
>
>
> What do you think about this? Am I getting it all wrong?
>
> Thank you very much.
>
> Cheers
>
>
>
>
> 2010/7/28 Dan Williams <d...@redhat.com>
>
>> On Wed, 2010-07-28 at 09:32 -0300, Franco Miceli wrote:
>> > Dan,
>> >
>> > Thanks for your answer. I see what you say. You can request X number
>> > of scans without being sure that the firmware will execute them.
>> >
>> > I understand that to do what I say, that would be mandatory. But in
>> > order to mitigate the problem of not seeing all AP in range at the
>> > start of the autoconnect feature, could one delay the autoconnect
>> > algorithm so that it would wait for several scans to be made?
>>
>> Yes, this could be done.  If you'd like to do a patch for this there are
>> a few ways you could go about it.
>>
>> Since we don't get reliable scan indications, we should just do two
>> back-to-back scans on startup.  The problem is trying to figure out when
>> they are *done*.  That requires both a 10 second timeout after
>> requesting the scan and a 2-second backoff timer that gets reschedule
>> for two more seconds each time a scan result comes in while the 10
>> second timeout timer is active.  If either of the 10-second timeout or
>> the 2-second backoff timer fire, then we increment a 'guint32 num_scans'
>> variable in NMDeviceWifiPrivate.
>>
>> Then, reduce SCAN_INTERVAL_MIN to 11 (so it doesn't overlap with the
>> 10-second backoff timer).
>>
>> Next, put a check in real_get_best_auto_connection() to return NULL if
>> num_scans < 2 (so we do 2 scans before allowing autoconnect).
>>
>> Finally, we need a way to tell NMPolicy to retrigger autoconnect
>> checking, which probably means another signal on NMDeviceInterface
>> called "recheck-autoactivate" that gets emitted when num_scans changes
>> to 2.  The Policy listens to this variable and calls
>> schedule_activate_check() when the signal is emitted.
>>
>> Dan
>>
>> > I say this because I've seen that after just ten seconds of sugar
>> > being started, almost every AP is shown in the neighbour view (sort of
>> > an AP list). If we could delay the time where NM_autoconnect gets
>> > called at startup, I think this could be dealt with.
>> >
>> > I appreciate any feedback you can provide on this topic.
>> >
>> > Thanks once again for your answers.
>> >
>> > Cheers,
>> >
>> >
>> >
>> > 2010/7/28 Dan Williams <d...@redhat.com>
>> >         On Fri, 2010-07-16 at 09:30 -0300, Franco Miceli wrote:
>> >         > So far, trying to get this problem solved, I have made a
>> >         initscript
>> >         > that runs before NM. This script enables the wireless
>> >         interface and
>> >         > performs a couple of scans (iwlist).
>> >         >
>> >         > Doing this (which performs as asked, finding almost all the
>> >         networks
>> >         > in range), doesn't cause any effect on NM. NM still shows
>> >         only a few
>> >         > of the available networks at startup.
>> >         >
>> >         > Is this something that can be dealt with at device autostart
>> >         or
>> >         > something like that. I would really appreciate if anyone
>> >         could point
>> >         > me at any direction, since I'm a bit lost inside the NM
>> >         code. Maybe
>> >         > the function that starts the network interfaces, and/or
>> >         where does NM
>> >         > take the scan results from at startup.
>> >
>> >
>> >         We should probably do more than on initial scan, but there's a
>> >         big
>> >         problem...  WEXT does not really give us any information about
>> >         scan
>> >         outcomes.  Sometimes the drivers and/or firmware will accept
>> >         the scan
>> >         request and then cancel it later due to internal operations.
>> >          And if
>> >         that happens, WEXT doesn't have the ability to notify
>> >         userspace that the
>> >         scan request failed.
>> >
>> >         nl80211/cfg80211 have the ability to make this somewhat
>> >         better, but only
>> >         for drivers that have been ported to cfg80211.  Libertas
>> >         (which the OLPC
>> >         XO-1 uses) is not yet full ported to cfg80211 in the 2.6.35
>> >         kernel.
>> >
>> >         So once we can use cfg80211, even then we need to  make sure
>> >         the drivers
>> >         get fixed up to report internal scan cancellations to
>> >         userspace.  Then
>> >         we need the supplicant to push that notification up to clients
>> >         too.
>> >
>> >         Until then, we can't be sure whether any scan request we send
>> >         to the
>> >         supplicant is actually successfully triggered or not, which
>> >          means we
>> >         don't know whether we need to try again.
>> >
>> >         Dan
>> >
>> >
>> >         > Thanks in advance for any answers anyone can provide.
>> >         >
>> >         > Cheers
>> >         >
>> >         > 2010/7/13 Franco Miceli <fmic...@plan.ceibal.edu.uy>
>> >         >         Hi,
>> >         >
>> >         >         I have the following question: how many scans does
>> >         NM wait
>> >         >         until it calls the autoconnect
>> >         (real_get_best_autoconnection)
>> >         >         feature?
>> >         >
>> >         >         I ask this because the card the hardware I am
>> >         currently
>> >         >         testing (OLPC XO-1) has doesn't report all the
>> >         wireless AP in
>> >         >         range immediately.
>> >         >         That's why I want to either add a waiting period or
>> >         something
>> >         >         like that in order to hold on so that all the AP in
>> >         range are
>> >         >         available for choosing.
>> >         >
>> >         >         In order to do so, I need to know where in the
>> >         source code I
>> >         >         can find the line/s where the autoconnection gets
>> >         called.
>> >         >
>> >         >         If anyone knows where to look for I would really
>> >         appreciate
>> >         >         your feedback.
>> >         >
>> >         >         Thanks for your answers.
>> >         >
>> >         >          Cheers
>> >         >
>> >         >
>> >         >
>> >         > --
>> >         > Ing. Franco Miceli
>> >         > CITS - Plan Ceibal - Investigación & Desarrollo
>> >         > Av. Italia 6201 - Montevideo, Uruguay
>> >         > CP: 11500
>> >         > Tel: (598 2) 601 5773 int.: 2227
>> >
>> >         > _______________________________________________
>> >         > networkmanager-list mailing list
>> >         > networkmanager-list@gnome.org
>> >         > http://mail.gnome.org/mailman/listinfo/networkmanager-list
>> >
>> >
>> >
>> >
>> >
>> > --
>> > Ing. Franco Miceli
>> > CITS - Plan Ceibal - Investigación & Desarrollo
>> > Av. Italia 6201 - Montevideo, Uruguay
>> > CP: 11500
>> > Tel: (598 2) 601 5773 int.: 2227
>>
>>
>>
>
>
> --
> Ing. Franco Miceli
> CITS - Plan Ceibal - Investigación & Desarrollo
> Av. Italia 6201 - Montevideo, Uruguay
> CP: 11500
> Tel: (598 2) 601 5773 int.: 2227
>



-- 
Ing. Franco Miceli
CITS - Plan Ceibal - Investigación & Desarrollo
Av. Italia 6201 - Montevideo, Uruguay
CP: 11500
Tel: (598 2) 601 5773 int.: 2227
_______________________________________________
networkmanager-list mailing list
networkmanager-list@gnome.org
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to