Checkign in new iproute2
[iproute2.git] / misc / lnstat.c
index 460540e..32ab6a4 100644 (file)
@@ -17,7 +17,7 @@
  */
 
 /* Maximum number of fields that can be displayed */
-#define MAX_FIELDS             64
+#define MAX_FIELDS             128
 
 /* Maximum number of header lines */
 #define HDR_LINES              10
@@ -119,11 +119,19 @@ static int map_field_params(struct lnstat_file *lnstat_files,
                                fps->params[j].lf->file->interval.tv_sec =
                                                                interval;
                                if (!fps->params[j].print.width)
-                                       fps->params[j].print.width = 
+                                       fps->params[j].print.width =
                                                        FIELD_WIDTH_DEFAULT;
-                               j++;
+                               
+                               if (++j >= MAX_FIELDS - 1) {
+                                       fprintf(stderr,
+                                               "WARN: MAX_FIELDS (%d) reached,"
+                                               " truncating number of keys\n",
+                                               MAX_FIELDS);
+                                       goto full;
+                               }
                        }
                }
+       full:
                fps->num = j;
                return 1;
        }
@@ -204,7 +212,7 @@ static int print_hdr(FILE *of, struct table_hdr *th)
        }
        return 0;
 }
-               
+
 
 int main(int argc, char **argv)
 {
@@ -222,10 +230,10 @@ int main(int argc, char **argv)
        static struct field_params fp;
        int num_req_files = 0;
        char *req_files[LNSTAT_MAX_FILES];
-       
+
        /* backwards compatibility mode for old tools */
        basename = strrchr(argv[0], '/');
-       if (basename) 
+       if (basename)
                basename += 1;    /* name after slash */
        else
                basename = argv[0]; /* no slash */
@@ -240,7 +248,7 @@ int main(int argc, char **argv)
                num_req_files = 1;
        }
 
-       while ((c = getopt_long(argc, argv,"Vc:df:h?i:k:s:w:", 
+       while ((c = getopt_long(argc, argv,"Vc:df:h?i:k:s:w:",
                                opts, NULL)) != -1) {
                int i, len = 0;
                char *tmp, *tok;
@@ -256,7 +264,7 @@ int main(int argc, char **argv)
                                req_files[num_req_files++] = strdup(optarg);
                                break;
                        case '?':
-                       case 'h':       
+                       case 'h':
                                usage(argv[0], 0);
                                break;
                        case 'i':
@@ -269,8 +277,13 @@ int main(int argc, char **argv)
                                for (tok = strtok(tmp, ",");
                                     tok;
                                     tok = strtok(NULL, ",")) {
-                                       if (fp.num >= MAX_FIELDS)
+                                       if (fp.num >= MAX_FIELDS) {
+                                               fprintf(stderr, 
+                                                       "WARN: too many keys"
+                                                       " requested: (%d max)\n",
+                                                       MAX_FIELDS);
                                                break;
+                                       }
                                        fp.params[fp.num++].name = tok;
                                }
                                break;
@@ -315,12 +328,12 @@ int main(int argc, char **argv)
 
                if (!map_field_params(lnstat_files, &fp, interval))
                        exit(1);
-       
+
                header = build_hdr_string(lnstat_files, &fp, 80);
                if (!header)
                        exit(1);
 
-               if (interval < 1 ) 
+               if (interval < 1 )
                        interval=1;
 
                for (i = 0; i < count; i++) {
@@ -328,6 +341,7 @@ int main(int argc, char **argv)
                                print_hdr(stdout, header);
                        lnstat_update(lnstat_files);
                        print_line(stdout, lnstat_files, &fp);
+                       fflush(stdout);
                        sleep(interval);
                }
        }