What's new

Request: move custom_clientlist, dhcp_staticlist, and dhcp_hostnames from NVRAM to jffs

  • SNBForums Code of Conduct

    SNBForums is a community for everyone, no matter what their level of experience.

    Please be tolerant and patient of others, especially newcomers. We are all here to share and learn!

    The rules are simple: Be patient, be nice, be helpful or be gone!

James Olsen

New Around Here
Is it possible to move custom_clientlist and dhcp_hostnames from NVRAM to jffs in a future enhancement to AsusWrt-Merlin?? I just upgraded my RT-AC68P to AsusWrt-Merlin 384.17 and I'm now getting the following message in the UI:

"Your router is running low on free NVRAM, which might affect its stability.
Review long parameter lists (like DHCP reservations), or consider doing a factory default reset and reconfiguring."

I'm not sure what has increased in the NVRAM usage with this upgrade, perhaps it was somewhat coincidental, but I haven't made any explicit configuration changes lately (my config is pretty old)

My top 10 items in NVRAM taking space are (bytes followed by item):
  1. 1400 custom_clientlist
  2. 1089 sshd_hostkey
  3. 991 sshd_authkeys
  4. 822 dhcp_staticlist
  5. 810 nc_setting_conf
  6. 628 sshd_dsskey
  7. 539 client_info_tmp
  8. 527 rc_support
  9. 357 MULTIFILTER_MAC
  10. 338 sshd_ecdsakey

Related question: what I can I do to free up NVRAM to keep my device functioning, short of deleting data in custom_clientlist, dhcp_staticlist or deleting ssh keys?

Three items that would be nice to move to JFFS storage and in-RAM access are: custom_clientlist, dhcp_staticlist, and dhcp_hostnames because being able to edit these in a text editor would be handy, in addition to freeing up that NVRAM storage.

It just seems like NVRAM in this unit is inadequate unless one doesn't really try to manage the devices on their network.

Is a change like possible, and what are the ramifications (no pun intended) of a change like this if it were to be made?

Thank you for your time
 
Is it possible to move custom_clientlist and dhcp_hostnames from NVRAM to jffs in a future enhancement to AsusWrt-Merlin?? I just upgraded my RT-AC68P to AsusWrt-Merlin 384.17 and I'm now getting the following message in the UI:

"Your router is running low on free NVRAM, which might affect its stability.
Review long parameter lists (like DHCP reservations), or consider doing a factory default reset and reconfiguring."

I'm not sure what has increased in the NVRAM usage with this upgrade, perhaps it was somewhat coincidental, but I haven't made any explicit configuration changes lately (my config is pretty old)

My top 10 items in NVRAM taking space are (bytes followed by item):
  1. 1400 custom_clientlist
  2. 1089 sshd_hostkey
  3. 991 sshd_authkeys
  4. 822 dhcp_staticlist
  5. 810 nc_setting_conf
  6. 628 sshd_dsskey
  7. 539 client_info_tmp
  8. 527 rc_support
  9. 357 MULTIFILTER_MAC
  10. 338 sshd_ecdsakey

Related question: what I can I do to free up NVRAM to keep my device functioning, short of deleting data in custom_clientlist, dhcp_staticlist or deleting ssh keys?

Three items that would be nice to move to JFFS storage and in-RAM access are: custom_clientlist, dhcp_staticlist, and dhcp_hostnames because being able to edit these in a text editor would be handy, in addition to freeing up that NVRAM storage.

It just seems like NVRAM in this unit is inadequate unless one doesn't really try to manage the devices on their network.

Is a change like possible, and what are the ramifications (no pun intended) of a change like this if it were to be made?

Thank you for your time
pretty much all of that is already on jffs in /jffs/nvram/ at least on NG models.
you can move " dhcp_staticlist" to "/jffs/configs/dnsmasq.conf.add" to free some nvram, you can use the Script "dhcpstaticlist.sh" by # Original Author: Xentrk to achieve that.
 
Last edited:
I was just about to type the dnsmasq.conf.add to pay back those who helped me with the exact same solution. Almost had the exact same post. Making this post to add the only other piece of information to add to the puzzle. I too had a very old configuration that suddenly had the "!" warning about low NVRAM. As an FYI, from what I was told, it's not that the new firmware suddenly used more NVRAM, but that the "!" warning threshhold was always there, but that message had only recently been activated in the last version or two fo firmware. The dnsmasq file changed everything for me and my router is streamlined and running great. :D
 
I was just about to type the dnsmasq.conf.add to pay back those who helped me with the exact same solution. Almost had the exact same post. Making this post to add the only other piece of information to add to the puzzle. I too had a very old configuration that suddenly had the "!" warning about low NVRAM. As an FYI, from what I was told, it's not that the new firmware suddenly used more NVRAM, but that the "!" warning threshhold was always there, but that message had only recently been activated in the last version or two fo firmware. The dnsmasq file changed everything for me and my router is streamlined and running great. :D
yea every since I setup over a 100 static ips, I have moved all mine to dnsmasq.conf.add and haven't looked back.
 
Thank you, everyone for the great replies. I've been trying to educate myself on configuring dnsmasq manually through dnsmasq.conf.add and I had a few more questions I hope you will be willing to provide some guidance on.

For replicating static IP assignments and custom DHCP names (to make them human friendly and distinguishable from other devices of the same make/model on the network), are you only utilizing the "dhcp-host=xxx,yyy,zzz" directive? Or do you have other things in your dnsmasq.conf.add that are required to make it work with this new file? If I use dnsmasq.conf.add, do I leave to change anything in the UI configuration regarding the DHCP server (turn anything on and off) in order to use dnsmasq.conf.add? I'm hoping the dnsmasq.conf.add is supplemental to the DHCP configuration in the UI (such as IP pool range, default lease time, etc) and not a full replacement for all those configuration values. (I have enabled jffs scripts)

From what I understand from reading the dnsmasq docs, the IP address field is optional (so I can assign just a dhcp name without a static ip), and likewise the name field is optional if I only want to assign a static ip and leave the name as-is. Is this your interpretation as well?
Some (made-up) examples:
# both assign name and static ip
dhcp-host=00:11:22:33:44:55,Scott Phone,192.168.1.26,24h
# just assign name
dhcp-host=00:11:22:33:44:56,TV,24h
# just assign static ip
dhcp-host=00:11:22:33:44:57,192.168.1.27,24h

What lease time are you guys typically defining, or are you omitting that parameter and leaving that whatever the default lease time is?

Thanks again for the great tips. Looking forward to getting all this set up and working!

--James
 
I can't move Asus's nvram settings.
 
Thanks again everyone.

I was able to create the dnsmasq.conf.add and everything seems to be working as desired in that regard.
 
From what I understand from reading the dnsmasq docs, the IP address field is optional (so I can assign just a dhcp name without a static ip), and likewise the name field is optional if I only want to assign a static ip and leave the name as-is. Is this your interpretation as well?
Some (made-up) examples:
Here are some specific lines in my config, editing out the exact MAC info:

###----- Kwikset devices (50 series)
dhcp-host=68:47:49:AA:AA:AA,KwiksetHaloFront,192.168.1.51,1440

###----- MyQ devices (50 series)
dhcp-host=64:52:99:AA:AA:AA,MyQGarageMain,192.168.1.53,1440
dhcp-host=64:52:99:AB:AA:AA,MyQGarageExtra,192.168.1.54,1440

###----- Honeywell devices (50 series)
dhcp-host=B8:2C:A0:AA:AA:AA,HoneywellHomeUpstairs,192.168.1.55,1440

###----- Arlo devices (60 series)
dhcp-host=A4:11:62:AA:AA:AA,ArloBaseUnit,,192.168.1.61,1440

###----- Ring devices (70 series)
dhcp-host=A4:D5:78:AA:AA:AA,RingChimeProUpstairs,192.168.1.75,1440
dhcp-host=40:BD:32:AB:AA:AA,RingChimeProDownstairs,192.168.1.76,1440
dhcp-host=3C:E1:A1:AC:AA:AA,RingVideoDoorbellPro,192.168.1.77,1440

Hope that helps. Glad to hear it worked for you too! :D
 
Is the custom_clientlist now stored in JFFS? If yes, can I delete the list from nvram to free up some space?
 
Is the custom_clientlist now stored in JFFS? If yes, can I delete the list from nvram to free up some space?
Yes, but deleting only the nvram data could be tricky. If you simply do nvram set custom_clientlist="" it will delete the information now stored in /jffs/nvram.

Are you sure you're talking about data stored in nvram and not just referring to the output of nvram get ?

What do you get from this command? You should see two entries. The first is what's stored in nvram (i.e. nothing other than the variable name) and the second is what's stored in /jffs/nvram.
Code:
# nvram show | grep custom_clientlist
custom_clientlist=
custom_clientlist=<nuc>94:C6:91:1D:47:42>0>0>>
size: 75486 bytes (55586 left)
 
Last edited:
Yes, but deleting only the nvram data could be tricky. If you simply do nvram set custom_clientlist="" it will delete the information now stored in /jffs/nvram.

Are you sure you're talking about data stored in nvram and not just referring to the output of nvram get ?

What do you get from this command? You should see two entries. The first is what's stored in nvram (i.e. nothing other than the variable name) and the second is what's stored in /jffs/nvram.
Code:
# nvram show | grep custom_clientlist
custom_clientlist=
custom_clientlist=<nuc>94:C6:91:1D:47:42>0>0>>
size: 75486 bytes (55586 left)

I get the syntax shown in the third line of your code example. I already successfully trimmed down the number of items in the list using the nvram set command (followed by nvram commit and a reboot), but I'd like to remove all items from the list if they are not needed, i.e., if nvram is no longer used to store these items.
 
I get the syntax shown in the third line of your code example. I already successfully trimmed down the number of items in the list using the nvram set command (followed by nvram commit and a reboot), but I'd like to remove all items from the list if they are not needed, i.e., if nvram is no longer used to store these items.
The variables are still manipulated through the nvram get and set commands. Even if the backing store for a variable has been "moved" into jffs this is transparent to the user. The variable still exists as far as the nvram command is concerned.

What router do you have? I know that the HND routers moved a lot of the big variables into /jffs/nvram, but I don't think that is the case for the older models (e.g. RT-AC68U). That might explain why you don't see two different results from the command above like I do.

At the end of the day you can't get rid of that variable. It's still what's being used by the router regardless of where it's stored.
 
This is for a 2015-era RT-AC68U. nvram is nearly full despite having no long lists of anything in nvram.

I do get nearly same result as what you posted. The only difference is that when I run that command, I only get the second and third items of output in your example, i.e., my result does not include the line containing the output "custom_clientlist=".

The nvram size is down to 65194 bytes. Maybe I should just let it be.
 
Those have already been cleared out. :-(

I just notices that you originally asked whether I have been using the
Code:
nvram get
command. I've been using
Code:
nvram show

Anyhow, I'll live with the current free space. At least there is now 342 bytes of free space. There used to be -8 bytes of free space.
 
Last edited:
So I tried removing the contents of custom_clientlist by using nvram set custom_clientlist="", and that removed the customizations from the router GUI. When I added back some custom client identifications in the GUI client list, the variable in nvram was repopulated. So it appears that custom_clientlist is still part of nvram. Its too bad because that can be a pretty long list.
 
I have an Asus RT-AC68U and found our old thread here because after upgrading to 386.9, I too am getting NVRAM shortage alerts. Been running clean since last posting here in 2020 and no changes other than firmware since then. With the current firmware version running, after a day or so, it seems to lose WiFi causing the need to reboot and repeat the cycle.
I've edited my dnsmasq.conf.add file and commented out most clients to alleviate this. Unfortunately, it didn't seem to make a difference when running the "nvram show" command in this thread.
cavalli@RT-AC68U-59D0:/tmp/home/root# nvram show | grep custom_clientlist
custom_clientlist=<Synology NAS DS920+>...(long list of clients)...
size: 65296 bytes (240 left)
The clients commented out of dnsmasq still seem to show in the nvram show and I have no idea how to remove them. The router was a beast for all the things I do, so would rather find a way to keep using it instead of buying a new one. Advice?
1) Is there some command that helps me undo the past dnsmasq entries to recover NVRAM?
2) Should I downgrade to the prior version of firmware which didn't have this error?
3) Is it time to suck it up and buy an RT-AX86U, or the like? (Rather not be stuck having to buy a new router with every firmware that feature grows).

All help greatly appreciated. Thanks! :D
 
I have an Asus RT-AC68U and found our old thread here because after upgrading to 386.9, I too am getting NVRAM shortage alerts. Been running clean since last posting here in 2020 and no changes other than firmware since then. With the current firmware version running, after a day or so, it seems to lose WiFi causing the need to reboot and repeat the cycle.
I've edited my dnsmasq.conf.add file and commented out most clients to alleviate this. Unfortunately, it didn't seem to make a difference when running the "nvram show" command in this thread.

The clients commented out of dnsmasq still seem to show in the nvram show and I have no idea how to remove them. The router was a beast for all the things I do, so would rather find a way to keep using it instead of buying a new one. Advice?
1) Is there some command that helps me undo the past dnsmasq entries to recover NVRAM?
2) Should I downgrade to the prior version of firmware which didn't have this error?
3) Is it time to suck it up and buy an RT-AX86U, or the like? (Rather not be stuck having to buy a new router with every firmware that feature grows).

All help greatly appreciated. Thanks! :D
With dnsmasq.conf.add you are setting host names and doing it this way will not consume nvram but they will also not appear in the GUI (LAN - DHCP Server). If you have any duplicated settings that appear in both places you can remove the ones in the GUI to free up some nvram space.

custom_clientlist is the nvram variable used to store the client names used by Network Map and the Client List. You can reset it with:
Code:
nvram set custom_clientlist=""
nvram commit
 
Whew! All's well that ends well. Knowing the difference between the host name (internal to dnsmasq.conf.add, no NVRAM space) and the client name (GUI, lots of NVRAM in custom_clientlist) made all the difference. I used smart reference names in dnsmasq.conf.add that show up in the GUI with no effect on NVRAM and cleared out custom_clientlist to have 4136 left from 61400 bytes, completely useable and stable. Here are commands and reference points I stored for my own "Your router is running low on free NVRAM" documentation, in case it helps someone else, as of version 386.9_0, grouped in one place in case others didn't see all these links. Hope that helps! Thanks for all responses. :)

- Removal of old certificate leftovers in NVRAM
* https://www.snbforums.com/threads/asus-rt-ac68u-386-2_6-low-on-free-nvram.73158/#post-695283

- Check custom client list in NVRAM, should be in JFFS/dnsmasq.conf.add
# nvram show | grep custom_clientlist

- Clear custom client list in NVRAM
* https://www.snbforums.com/threads/r...-and-dhcp_hostnames-from-nvram-to-jffs.63886/
# nvram set custom_clientlist=""
# nvram commit

- Show variables using most space in NVRAM
* https://www.snbforums.com/threads/asus-rt-ac68u-386-2_6-low-on-free-nvram.73158/#post-695283
# nvram show | awk '{print length(), $0 | "sort -n -r"}' | cut -d"=" -f 1 | head -n 20

- Show emtpy NVRAM variables
# for line in `nvram show | grep ^[^=]*=$ `; do var=${line%*=}; echo $var; done

- Remove emtpy NVRAM variables
* https://www.snbforums.com/threads/solved-high-nvram-usage.56848/#post-494736
# for line in `nvram show | grep ^[^=]*=$ `; do var=${line%*=}; nvram unset $var; done; nvram commit
<for stability, immediately reboot to restore "necessary" NVRAM variables, even if empty>
 

Latest threads

Sign Up For SNBForums Daily Digest

Get an update of what's new every day delivered to your mailbox. Sign up here!
Top