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