|
|
2c13669 |
--- net-tools-1.60/ifconfig.c.netmask 2001-04-13 20:25:18.000000000 +0200
|
|
|
2c13669 |
+++ net-tools-1.60/ifconfig.c 2004-11-02 15:31:56.454594456 +0100
|
|
|
2c13669 |
@@ -23,6 +23,7 @@
|
|
|
2c13669 |
* 20001008 - Bernd Eckenfels, Patch from RH for setting mtu
|
|
|
2c13669 |
* (default AF was wrong)
|
|
|
2c13669 |
* 20010404 - Arnaldo Carvalho de Melo, use setlocale
|
|
|
2c13669 |
+ * 20040831 - Florin Malita <fmalita@glenayre.com> delayed CIDR netmask
|
|
|
2c13669 |
*/
|
|
|
2c13669 |
|
|
|
2c13669 |
#define DFLT_AF "inet"
|
|
|
2c13669 |
@@ -227,13 +228,13 @@
|
|
|
2c13669 |
|
|
|
2c13669 |
int main(int argc, char **argv)
|
|
|
2c13669 |
{
|
|
|
2c13669 |
- struct sockaddr sa;
|
|
|
2c13669 |
+ struct sockaddr sa, sa_netmask;
|
|
|
2c13669 |
struct sockaddr_in sin;
|
|
|
2c13669 |
char host[128];
|
|
|
2c13669 |
struct aftype *ap;
|
|
|
2c13669 |
struct hwtype *hw;
|
|
|
2c13669 |
struct ifreq ifr;
|
|
|
2c13669 |
- int goterr = 0, didnetmask = 0;
|
|
|
2c13669 |
+ int goterr = 0, didnetmask = 0, donetmask = 0;
|
|
|
2c13669 |
char **spp;
|
|
|
2c13669 |
int fd;
|
|
|
2c13669 |
#if HAVE_AFINET6
|
|
|
2c13669 |
@@ -903,16 +904,16 @@
|
|
|
2c13669 |
/* FIXME: sa is too small for INET6 addresses, inet6 should use that too,
|
|
|
2c13669 |
broadcast is unexpected */
|
|
|
2c13669 |
if (ap->getmask) {
|
|
|
2c13669 |
- switch (ap->getmask(host, &sa, NULL)) {
|
|
|
2c13669 |
+ switch (ap->getmask(host, &sa_netmask, NULL)) {
|
|
|
2c13669 |
case -1:
|
|
|
2c13669 |
usage();
|
|
|
2c13669 |
break;
|
|
|
2c13669 |
case 1:
|
|
|
2c13669 |
if (didnetmask)
|
|
|
2c13669 |
usage();
|
|
|
2c13669 |
-
|
|
|
2c13669 |
- goterr = set_netmask(skfd, &ifr, &sa);
|
|
|
2c13669 |
- didnetmask++;
|
|
|
2c13669 |
+
|
|
|
2c13669 |
+ /* delay setting the CIDR netmask till after setting the addr */
|
|
|
2c13669 |
+ donetmask = 1;
|
|
|
2c13669 |
break;
|
|
|
2c13669 |
}
|
|
|
2c13669 |
}
|
|
|
2c13669 |
@@ -960,6 +961,13 @@
|
|
|
2c13669 |
}
|
|
|
2c13669 |
}
|
|
|
2c13669 |
|
|
|
2c13669 |
+ /* set CIDR netmask */
|
|
|
2c13669 |
+ if (donetmask) {
|
|
|
2c13669 |
+ donetmask = 0;
|
|
|
2c13669 |
+ goterr = set_netmask(skfd, &ifr, &sa_netmask);
|
|
|
2c13669 |
+ didnetmask++;
|
|
|
2c13669 |
+ }
|
|
|
2c13669 |
+
|
|
|
2c13669 |
/*
|
|
|
2c13669 |
* Don't do the set_flag() if the address is an alias with a - at the
|
|
|
2c13669 |
* end, since it's deleted already! - Roman
|