HOSTAPD Error log
Amit Gupta
amitkgupta09 at gmail.com
Tue Jul 28 14:15:40 EDT 2015
Hi All,
Thanks for your quick response.
Valdis,
I tried with strace stuff, but I faced CPU halt issue. Actually along with
those error logs..sometime I m facing CPU HALT issue after executing
#hostapd -B /etc/hostapd.conf.
Pranay,
I tried your way to debug kernel for finding the root cause of error
log 'Failed
to update rate sets in kernel module'.
But prior to that I started to debugging for
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
those two logs.
Till now I found that before execution of __dev_open(net/core/dev,c) function
for 'wlan0' network interface, 'netif_carrier_off'(net/sched/sch_generic.c)
function get called for 'wlan0',
void netif_carrier_off
<http://lxr.free-electrons.com/ident?v=4.0;i=netif_carrier_off>(struct
net_device <http://lxr.free-electrons.com/ident?v=4.0;i=net_device>
*dev <http://lxr.free-electrons.com/ident?v=4.0;i=dev>)
{
if (!test_and_set_bit
<http://lxr.free-electrons.com/ident?v=4.0;i=test_and_set_bit>(__LINK_STATE_NOCARRIER,
&dev <http://lxr.free-electrons.com/ident?v=4.0;i=dev>->state
<http://lxr.free-electrons.com/ident?v=4.0;i=state>)) {
if (dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>->reg_state
<http://lxr.free-electrons.com/ident?v=4.0;i=reg_state> ==
NETREG_UNINITIALIZED)
return;
atomic_inc
<http://lxr.free-electrons.com/ident?v=4.0;i=atomic_inc>(&dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>->carrier_changes);
linkwatch_fire_event
<http://lxr.free-electrons.com/ident?v=4.0;i=linkwatch_fire_event>(dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>);
}
}
which result into condition checking passed in 'addrconf_qdisc_ok
<http://lxr.free-electrons.com/ident?v=4.0;i=addrconf_qdisc_ok>'*
function.*
In 'net/ipv6/addrconf.c' file
if (event <http://lxr.free-electrons.com/ident?v=4.0;i=event> ==
NETDEV_UP <http://lxr.free-electrons.com/ident?v=4.0;i=NETDEV_UP>) {
if (!addrconf_qdisc_ok
<http://lxr.free-electrons.com/ident?v=4.0;i=addrconf_qdisc_ok>(dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>)) {
*/* device is not ready yet. */*
pr_info
<http://lxr.free-electrons.com/ident?v=4.0;i=pr_info>(*"ADDRCONF(NETDEV_UP):
%s: link is not ready\n"*,
dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>->name
<http://lxr.free-electrons.com/ident?v=4.0;i=name>);
break;
}
in same file:
static inline bool <http://lxr.free-electrons.com/ident?v=4.0;i=bool>
addrconf_qdisc_ok
<http://lxr.free-electrons.com/ident?v=4.0;i=addrconf_qdisc_ok>(const
struct net_device
<http://lxr.free-electrons.com/ident?v=4.0;i=net_device> *dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>) {
return !qdisc_tx_is_noop
<http://lxr.free-electrons.com/ident?v=4.0;i=qdisc_tx_is_noop>(dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>);
}
In include/net/sch_generic.h file
static inline bool <http://lxr.free-electrons.com/ident?v=4.0;i=bool>
qdisc_tx_is_noop
<http://lxr.free-electrons.com/ident?v=4.0;i=qdisc_tx_is_noop>(const
struct net_device
<http://lxr.free-electrons.com/ident?v=4.0;i=net_device> *dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>)
{
unsigned int i <http://lxr.free-electrons.com/ident?v=4.0;i=i>;
for (i <http://lxr.free-electrons.com/ident?v=4.0;i=i> = 0; i
<http://lxr.free-electrons.com/ident?v=4.0;i=i> < dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>->num_tx_queues; i
<http://lxr.free-electrons.com/ident?v=4.0;i=i>++) {
struct netdev_queue
<http://lxr.free-electrons.com/ident?v=4.0;i=netdev_queue> *txq =
netdev_get_tx_queue
<http://lxr.free-electrons.com/ident?v=4.0;i=netdev_get_tx_queue>(dev
<http://lxr.free-electrons.com/ident?v=4.0;i=dev>, i
<http://lxr.free-electrons.com/ident?v=4.0;i=i>);
if (rcu_access_pointer
<http://lxr.free-electrons.com/ident?v=4.0;i=rcu_access_pointer>(txq->qdisc)
!= &noop_qdisc <http://lxr.free-electrons.com/ident?v=4.0;i=noop_qdisc>)
return false
<http://lxr.free-electrons.com/ident?v=4.0;i=false>;
}
return true <http://lxr.free-electrons.com/ident?v=4.0;i=true>;
}
I am still looking to find the cause execution of net_carrier_off function
before execution of __dev_open function for 'wlan0' network interface. This
behavior I am not observing with my other wired and pseudo network
interfaces.
'Failed to update rate sets in kernel module'
This error log may come because of previous issue as wlan0 device is not
active till this point.
One more thing I tried, I cross compiled 'hostapd' version 2.4 for my
target board and executed that on target board.I did not get above
mentioned error log and till now no CPU halt issue.
Previously i was working with hostapd 0.7.3.
So is it like, hostapd old version is not compatible with new linux kernel
version as hostapd 0.7.3 version is running with no issue at linux 3.4.
Any advice and suggestions will be appreciable/helpful.
Thanks,
Amit Gupta
On Fri, Jul 24, 2015 at 11:06 AM, Pranay Srivastava <pranjas at gmail.com>
wrote:
> Hi Amit
>
> On Thu, Jul 23, 2015 at 11:09 PM, <Valdis.Kletnieks at vt.edu> wrote:
> > On Thu, 23 Jul 2015 12:31:18 +0530, Amit Gupta said:
> >
> >> Configuration file: /etc/hostapd.conf
> >> [ 199.672712] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
> >> Failed to update rate sets in kernel module
> >> [ 199.687566] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
> >> Using interface wlan0 with hwaddr 00:0e:8e:38:29:e6 and ssid
> 'test_wifi_2'
> >>
> >>
> >> Eventhough I am getting this error log from user space
> application(hostapd)
> >> code, my wifi device is working fine. But I want to remove this error
> log
> >> and want to know the root cause this error log.
> >
> > My gut reaction is that hostapd is issuing ioctl() calls in the wrong
> order
> > and/or failing to allow a long enough delay or wait for a specific event.
> >
> > I'd recommend running something like:
> >
> > # strace -f hostapd -B /etc/hostapd.conf > /tmp/strace.out 2>&1
>
> The driver gets notified of this change via netlink socks. I also face
> the same issue and so far I found this
>
> Hostapd calls
> --->i802_set_rate_sets
>
> which then creates a nlmsg which is handled in driver as
>
> --driver--
> -->nl80211_set_bss
> --->rdev_change_bss
>
> now change_bss is defined as
>
> ieee80211_change_bss (net/mac80211/cfg.c) unless ofcourse your driver
> provides something else.
>
> There seems to be no error from here.
>
> So maybe it's the send_recv call in hostapd in function
> i802_set_rate_sets? I'll look into it more.
>
> >
> > and go look for what failing call was made just before the write call
> > that output 'Failed to update'. Hopefully, tracing the flow of that
> > call will reveal a kernel code path that output the 'link is not ready'
> > message. Then you'll know what 'if (somecondition)' landed you in that
> > situation.
> >
> > Knowing that, it will become a lot easier to figure out what happened.
> >
> > _______________________________________________
> > Kernelnewbies mailing list
> > Kernelnewbies at kernelnewbies.org
> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> >
>
>
>
> --
> ---P.K.S
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20150728/44af6dde/attachment-0001.html
More information about the Kernelnewbies
mailing list