]> granicus.if.org Git - procps-ng/commitdiff
sysctl: deprecate parameters
authorSami Kerola <kerolasa@iki.fi>
Mon, 13 Feb 2012 20:21:43 +0000 (21:21 +0100)
committerSami Kerola <kerolasa@iki.fi>
Tue, 14 Feb 2012 10:22:15 +0000 (11:22 +0100)
According to arp(7) manual page base_reachable_time and retrans_time
are obsolete since kernel 2.6.12. Based on that the print all listing
will not show these two parameters, and attempt to set them will fail.

Reported-by: Alexandre Cavalcante Alencar <alexandre.alencar@gmail.com>
Bug-Debian: http://bugs.debian.org/599556
Reference: http://www.mail-archive.com/bk-commits-head@vger.kernel.org/msg03396.html
Reference: http://www.opensubscriber.com/message/linux-kernel@vger.kernel.org/7344177.html
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
sysctl.8
sysctl.c

index 37847d655a71349e1b4cf849e9f4ab6d464ec547..d3ceefab16f64135082a20436725353477166184 100644 (file)
--- a/sysctl.8
+++ b/sysctl.8
@@ -62,6 +62,11 @@ given.  Specifying \- as filename means reading data from standard input.
 \fB\-a\fR, \fB\-\-all\fR
 Display all values currently available.
 .TP
+\fB\-\-deprecated\fR
+Include deprecated parameters to
+.B \-\-all
+values listing.
+.TP
 \fB\-b\fR, \fB\-\-binary\fR
 Print value without new line.
 .TP
@@ -126,6 +131,16 @@ Display version information and exit.
 /sbin/sysctl \-a \-\-pattern 'net.ipv4.conf.(eth|wlan)0.arp'
 .br
 /sbin/sysctl \-\-system \-\-pattern '^net.ipv6'
+.SH DEPRECATED PARAMETERS
+The
+.B base_reachable_time
+and
+.B retrans_time
+are deprecated.  The sysctl command does not allow changing values of there
+parameters.  Users who insist to use deprecated kernel interfaces should values
+to /proc file system by other means.  For example:
+.PP
+echo 256 > /proc/sys/net/ipv6/neigh/eth0/base_reachable_time
 .SH FILES
 .I /proc/sys
 .br
index eb570586d83539400bb6ea92ae09db0a4d3f8169..c27fe022737eb89d866fc525e79600db565b1c06 100644 (file)
--- a/sysctl.c
+++ b/sysctl.c
@@ -47,6 +47,12 @@ static bool false = 0;
  */
 static const char PROC_PATH[] = "/proc/sys/";
 static const char DEFAULT_PRELOAD[] = "/etc/sysctl.conf";
+static const char *DEPRECATED[] = {
+       "base_reachable_time",
+       "retrans_time",
+       ""
+};
+static bool IgnoreDeprecated;
 static bool NameOnly;
 static bool PrintName;
 static bool PrintNewline;
@@ -96,6 +102,7 @@ static void __attribute__ ((__noreturn__))
        fputs(_("  -a, --all            display all variables\n"
                "  -A                   alias of -a\n"
                "  -X                   alias of -a\n"
+               "      --deprecated     include deprecated parameters to listing\n"
                "  -b, --binary         print value without new line\n"
                "  -e, --ignore         ignore unknown variables errors\n"
                "  -N, --names          print variable names without values\n"
@@ -275,6 +282,16 @@ static int ReadSetting(const char *restrict const name)
        return rc;
 }
 
+int is_deprecated(char *filename)
+{
+       int i;
+       for (i = 0; strlen(DEPRECATED[i]); i++) {
+               if (strcmp(DEPRECATED[i], filename) == 0)
+                       return 1;
+       }
+       return 0;
+}
+
 /*
  * Display all the sysctl settings
  */
@@ -296,6 +313,8 @@ static int DisplayAll(const char *restrict const path)
                readdir(dp);    /* skip .. */
                while ((de = readdir(dp))) {
                        char *restrict tmpdir;
+                       if (IgnoreDeprecated && is_deprecated(de->d_name))
+                               continue;
                        tmpdir =
                            (char *restrict) xmalloc(strlen(path) +
                                                     strlen(de->d_name) +
@@ -369,6 +388,10 @@ static int WriteSetting(const char *setting)
        outname[equals - name] = 0;
        /* change / to . */
        slashdot(outname, '/', '.');
+       if(is_deprecated(strrchr(outname, '.') + 1)) {
+               xwarnx(_("%s is deprecated, value not set"), outname);
+               goto out;
+        }
 
        if (stat(tmpname, &ts) < 0) {
                if (!IgnoreError) {
@@ -618,10 +641,12 @@ int main(int argc, char *argv[])
        const char *preloadfile = DEFAULT_PRELOAD;
 
        enum {
-               SYSTEM_OPTION = CHAR_MAX + 1
+               DEPRECATED_OPTION = CHAR_MAX + 1,
+               SYSTEM_OPTION
        };
        static const struct option longopts[] = {
                {"all", no_argument, NULL, 'a'},
+               {"deprecated", no_argument, NULL, DEPRECATED_OPTION},
                {"binary", no_argument, NULL, 'b'},
                {"ignore", no_argument, NULL, 'e'},
                {"names", no_argument, NULL, 'N'},
@@ -645,6 +670,7 @@ int main(int argc, char *argv[])
        PrintNewline = true;
        IgnoreError = false;
        Quiet = false;
+       IgnoreDeprecated = true;
 
        if (argc < 2)
                Usage(stderr);
@@ -693,6 +719,9 @@ int main(int argc, char *argv[])
                case 'X':       /* same as -a -x */
                        DisplayAllOpt = true;
                        break;
+               case DEPRECATED_OPTION:
+                       IgnoreDeprecated = false;
+                       break;
                case SYSTEM_OPTION:
                        IgnoreError = true;
                        return PreloadSystem();