I can understand almost none of my dmesg log output, but this is one message I keep seeing, which I think is related to the bigger issue of my Wifi cutting out every minute or so:

[ 6170.340618] cfg80211: Calling CRDA for country: US
[ 6170.346573] cfg80211: Regulatory domain changed to country: US
[ 6170.346580] cfg80211:  DFS Master region: FCC
[ 6170.346582] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)
[ 6170.346588] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (N/A, 3000 mBm), (N/A)
[ 6170.346591] cfg80211:   (5170000 KHz - 5250000 KHz @ 80000 KHz), (N/A, 1700 mBm), (N/A)
[ 6170.346595] cfg80211:   (5250000 KHz - 5330000 KHz @ 80000 KHz), (N/A, 2300 mBm), (0 s)
[ 6170.346599] cfg80211:   (5735000 KHz - 5835000 KHz @ 80000 KHz), (N/A, 3000 mBm), (N/A)
[ 6170.346602] cfg80211:   (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 4000 mBm), (N/A)

What does this mean? Is this a bad thing? If so, how can I fix it?

2 Answers 2


You could take a look at the manpage, and the link in there - http://wireless.kernel.org/en/developers/Regulatory/

$ apropos CRDA crda (8) - send to the kernel a wireless regulatory domain for a given ISO / IEC 3166 alpha2

output of man crda:

CRDA(8)                                                                  Linux                                                                  CRDA(8)

       crda - send to the kernel a wireless regulatory domain for a given ISO / IEC 3166 alpha2


       crda is the Linux wireless central regulatory domain agent.  crda is intended to be used by udev scripts and should not be run manually unless
       debugging udev scripts.  crda is triggered to run by the kernel by sending a udev event upon a new regulatory domain change. Regulatory domain
       changes are triggered by the wireless kernel subsystem (upon initialization and on reception of country IEs), wireless drivers, or userspace
       (see iw ). Upon a regulatory domain change the kernel sends a udev change event for the regulatory platform. The kernel ignores regulatory
       domains sent to it if it does not expect them. The regulatory domain is read by crda from the regulatory.bin file.

RSA Digital Signature
       If built with openssl or gcrypt support crda will have embedded into it an RSA digital signature which will prevent it from reading corrupted or
       non-authored regulatory.bin files. Authorship is respected by the RSA public key packed into crda.  This specific crda package has been built
       with an RSA public key from John Linville (the Linux wireless kernel maintainer) and as such will only read regulatory.bin files signed by him.
       For further information see the regulatory.bin man page.

       A udev regulatory rule must be put in place in order to receive and parse udev events from the kernel in order to get udev to call crda with the
       passed ISO / IEC 3166 alpha2 country code.  An example udev rule which can be used (usually in /lib/udev/rules.d/85-regulatory.rules ):

       KERNEL=="regulatory*", ACTION=="change", SUBSYSTEM=="platform", RUN+="/sbin/crda"

Environment variable
       Set the COUNTRY environment variable with a specific ISO / IEC 3166 alpha2 country code and then run crda without arguments. This will send a
       regulatory domain for that alpha2 to the kernel.

       iw(8) regulatory.bin(5)


To answer the rest of your question: No, that's not a bad thing. CRDA (not CDRA like in the subject) domain is relevant for choosing the permitted wireless channels for a given country. Not all channels are permitted in all countries.
Example: For Europe, we have channel 12 and 13, which are not permitted in North America.

See also http://en.wikipedia.org/wiki/List_of_WLAN_channels#Interference_concerns

  • 2
    So if I'm not changing regulatory domains, then it shouldn't be changing, right? Because I'm seeing this message very frequently--from a few times a day to a few times a minute. I don't think it should have to recalculate this all the time, should it?
    – Jonathan
    Dec 8, 2014 at 0:44
  • Well, yes it shouldn't change or re-set it that often, granted. Although how would the kernel ensure otherwise that the current CRDA matches your current location? Imagine travelling by plane from Norway to, say North America, with your laptop suspended/hibernated. If it doesn't re-run once you awake the laptop again, how does it re-set the correct CRDA for norway? How do you prevent the conflicts there on channel 12 and 13? Although here it doesn't happen that often - you can check with journalctl -ab | grep -i crda - 2 times in 3 days, seems not much ...
    – doktor5000
    Dec 8, 2014 at 19:56
  • I can imagine that this program would need to verify that my domain hasn't changed, but I still don't think it would need to change the domain (as it seems to be doing with Regulatory domain changed to country: US, and print out 10 messages to dmesg as it's doing so. So it seems like there's a lot of extra stuff being run here.
    – Jonathan
    Dec 8, 2014 at 20:08
  • Check wireless.kernel.org/en/developers/Regulatory/… The extra messages from kernel are only informational and result from that change, there's not a lot more run. Check the documentation.
    – doktor5000
    Dec 8, 2014 at 22:05

I came across a similar issue and it appeared to be down to an old modprobe config file (in /etc/modprobe.d) I had installed a few years ago. Specifically it specified an option for the cfg80211 (WiFi stack module): options cfg80211 ieee80211_regdom="EU"

This is an old option (ieee80211_regdom) whose use is advised against in newer kernels (e.g. 2.6.27 onwards). I commented/removed the option then rebooted and it was fixed. So check to see if any of your modprobe.d files contain config options for cfg80211.

It's also a good idea to make sure that REGDOMAIN is appropriately set in /etc/default/crda. For more details see Linux Wireless Regulatory info.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .