WPA Supplicant not able to listen to events from driver
Arend van Spriel
arend
Sat Feb 7 04:25:14 PST 2015
On 02/06/15 22:24, Naveen Singh wrote:
> Thanks it worked. But looks like every time we load the driver, phy
> index kept on incrementing.
That is expected. If I recall correctly it is a static counter in
cfg80211 that is used for assigning phy index upon wiphy_register call.
Regards,
Arend
> Regards
> Naveen
>
> On Fri, Feb 6, 2015 at 12:47 AM, Arend van Spriel <arend at broadcom.com
> <mailto:arend at broadcom.com>> wrote:
>
> On 02/06/15 04:22, Naveen Singh wrote:
>
> Hi All
> For my system we have cfg80211 built as loadable module. When we
> unload
> our WLAN driver cfg80211 gets unloaded as well.
>
>
> So how is your WLAN driver unloaded. When unloading cfg80211 the
> nl80211 netlink family is unregistered from the kernel probably
> closing all user-space netlink sockets.
>
> If you only 'rmmod' your WLAN driver than supplicant should be fine
> handling it as cfg80211 is not unloaded. If you use 'modprobe -r' it
> will unload dependent modules if their refcount is zero.
>
> Regards,
> Arend
>
> After reloading the
> driver I found that none of the events from driver never makes to
> supplicant. I see that connect command from supplicant makes to
> driver
> but the NL_CONNECT_CMD netlink message from the driver is
> dropped. On
> further debugging I found that the messages are dropped in the
> following
> function sd it does not call *do_one_broadcast*. Looks like all the
> previous bindings were lost. After killing the supplicant and
> restarting
> the supplicant I can see that the subscriptions are updated and
> connection succeeded.
>
> int netlink_broadcast_filtered(__struct sock *ssk, struct
> sk_buff *skb,
> u32 portid,
> u32 group, gfp_t allocation,
> int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data),
> void *filter_data)
> {
> struct net *net = sock_net(ssk);
> struct netlink_broadcast_data info;
> struct sock *sk;
>
> skb = netlink_trim(skb, allocation);
>
> info.exclude_sk = ssk;
> info.net <http://info.net> <http://info.net> = net;
> info.portid = portid;
> info.group = group;
> info.failure = 0;
> info.delivery_failure = 0;
> info.congested = 0;
> info.delivered = 0;
> info.allocation = allocation;
> info.skb = skb;
> info.skb2 = NULL;
> info.tx_filter = filter;
> info.tx_data = filter_data;
>
> /* While we sleep in clone, do not allow to change socket list */
>
> netlink_lock_table();
>
> sk_for_each_bound(sk, &nl_table[ssk->sk_protocol].__mc_list)
> d*o_one_broadcast(sk, &info); ==> This function is not called at
> all as
> it does not find any subscription at all. *
>
> consume_skb(skb);
>
> netlink_unlock_table();
>
> if (info.delivery_failure) {
> kfree_skb(info.skb2);
> return -ENOBUFS;
> }
> consume_skb(info.skb2);
>
> if (info.delivered) {
> if (info.congested && (allocation & __GFP_WAIT))
> yield();
> My feeling is that as cfg80211 gets unloaded as well when driver is
> unloaded, it loses all the subscription and hence none of the
> message
> from driver gets ever delivered to supplicant. But what
> surprises me is
> that although we cannot send messages from driver to supplicant
> it is
> not true in reverse direction. Connect command from supplicant
> lands in
> driver. Has anyone seen something similar? I have a workaround
> right now
> where i restart the supplicant whenever i unload and load the
> driver.
> But I would like to have a cleaner solution.
>
>
> Regards
> Naveen
>
>
>
> _________________________________________________
> HostAP mailing list
> HostAP at lists.shmoo.com <mailto:HostAP at lists.shmoo.com>
> http://lists.shmoo.com/__mailman/listinfo/hostap
> <http://lists.shmoo.com/mailman/listinfo/hostap>
>
>
> _________________________________________________
> HostAP mailing list
> HostAP at lists.shmoo.com <mailto:HostAP at lists.shmoo.com>
> http://lists.shmoo.com/__mailman/listinfo/hostap
> <http://lists.shmoo.com/mailman/listinfo/hostap>
>
>
More information about the Hostap
mailing list