Why MAXNICS=${MAXNICS:-6} in rc.inet1.conf?
Code:
############################ I set an ip address and it can't be valid until I ifconfig that. Finally, I found this code in rc.inet1. I want to know why the number is 6? Is it about the performance or any other reason? Thx. |
Pre-vacuum-tube computers take a lot of time to loop through large number of empty setups. This is the evidence of slackware being the oldest surviving Linux distribution.
|
Quote:
|
However high the limit, someone will find it too low.
|
... which is reason to avoid having a arbitrary limit. ;)
A long while ago I wrote myself an rc.inet1 replacement modeled on the OpenBSD approach. It cycles through the interfaces listed on it's args, or if none, the interfaces it finds in /proc/net/dev and if it finds a corresponding /etc/hostname.<interface> file uses that to configure the interface. I find this much easier to work with than the stock rc.inet1 + rc.inet1.conf approach, which has always seemed a little unwieldy to me. The config files looks like this: Code:
root@ws1:~# cat /etc/hostname.eth0 |
Quote:
I think rc.inet1.conf can be scanned to summate amout of the interfaces, but it seems ugly and not KISS. |
GazL, can you post your replacement for rc.inet1?
|
I can remember we've talked about this sort of thing in the past, so I suspect you may have already seen it, but I'll attach it here anyway. It's not particularly sophisticated, but that's why I like it ;)
BTW, if anyone tries it out, don't forget to create a /etc/hostname.lo containing "inet 127.0.0.1" ;) |
Quote:
I have below rc.inet1 and rc.inet1.conf that I use, the IP addresses used are in CIDR notation and the setup no longer uses net masks (ignore the ones in the conf they are not used.) To add extra IP's on an interface you simply separate them with spaces so you could have the following :- Code:
IPADDR[0]="192.168.10.10/24 192.168.10.11/24 192.168.10.12/24 192.168.10.13/24 10.0.0.1/24" http://wildwizard.abnormalpenguin.co...lackware/rc.d/ |
Quote:
|
Suggest to increase to 10 at least, in the default config
It took me almost an hour to again figure out the solution to this problem (previously I knew about this but forgot years ago).
Had to uncomment and set MAXNICS="8" in /etc/rc.d/rc.inet1.conf There are many servers out there which come standard with more than 6 built-in ports. Even my little server (https://www.supermicro.com/en/produc...YS-E300-8D.cfm) has 8 built-in network interfaces. Ideal solution would be for rc.inet1 to deal with any # of interfaces, without having to hardcode a specific #. Failing that, would suggest Slackware to default to 10 interfaces, instead of 6 - that would cover many more servers by default, without "new players" (and old players) falling into this very difficult-to-debug trap. Really got lucky here that I was able to drag out this knowledge from my head that I forgot so long ago. |
This question has come up before.
The problem with trying to handle any number of interfaces is that bash does not have an expansion for providing the highest indices of an array. You can easily determine the number of elements of an array in bash (${#ARRAY[*]}), but lets say you define your interfaces as follows: Code:
IFNAME[0]="eth0" which is perfectly legal syntax in both bash and the rc.inet1.conf file. In order to make sure both the interfaces get assigned, you need to know the highest indices in order to know when to stop processing. You can't just look for an empty definition for IPADDRS and stop there as there are 'holes' in the array where that indices is not defined. You also cannot loop forever just in case someone defined a stupidly high number. And every iteration of the loop costs real time, which undoubtedly slows down rc.inet1 to a point where people would complain that their system takes longer to boot. So, we need somewhere to stop the loop. Historically this was after 6 iterations. When I re-wrote rc.inet1 for 15.0, I kept that "tradition", as is the Slackware way. I also kept in Pat's original comment regarding sending him a picture for the same reason :) I agree that a lot of systems these days are going to have more than 6 interfaces (or more than 6 interface definitions, as virtual interfaces and bonds also count in rc.inet1.conf) and MAXNICS could realistically be set higher these days - Pat may even accept a patch to raise it if you submit one. I kept the tradition of 6. It's really as simple as that. But, setting it too high is going to slow down processing of rc.inet1 during boot. Also, where do you set the value? Everyone and their dog is going to have an opinion on what the value should be - and have arguments as to why it should be that high because their server has X interfaces, when yours only has X-1. So, that's it really. That's the rationale as to why I kept it at 6 - but try your luck with a patch to Pat... Sorry for the long post, but I thought it worthwhile to put this issue to bed once and for all :) |
Quote:
My suggestion for this. Code:
# diff -u3 a/rc.inet1 b/rc.inet1 |
Nice, that'll work :)
I'll create a full patch to do as you suggest and remove the MAXNICS setting from rc.inet1.conf. Hopefully Pat won't mind such a minor change. |
Quote:
Quote:
Code:
$ unset IFNAME |
All times are GMT -5. The time now is 02:49 AM. |