diff --git a/sbin/ipfw/ipfw.8 b/sbin/ipfw/ipfw.8 index 542724b7a068..39dc69e36c50 100644 --- a/sbin/ipfw/ipfw.8 +++ b/sbin/ipfw/ipfw.8 @@ -13,7 +13,7 @@ .Cm add .Ar rule .Nm -.Op Fl acdeftnNS +.Op Fl acdefnNStT .Brq Cm list | show .Op Ar rule | first-last ... .Nm @@ -54,7 +54,7 @@ .Op Ar number ... .Pp .Nm -.Op Fl cNnqS +.Op Fl cnNqS .Oo .Fl p Ar preproc .Oo @@ -261,7 +261,10 @@ listed. While listing pipes, sort according to one of the four counters (total or current packets or bytes). .It Fl t -While listing, show last match timestamp. +While listing, show last match timestamp (converted with ctime()). +.It Fl T +While listing, show last match timestamp (as seconds from the epoch). +This form can be more convenient for postprocessing by scripts. .El .Pp To ease configuration, rules can be put into a file which is diff --git a/sbin/ipfw/ipfw2.c b/sbin/ipfw/ipfw2.c index 71009db8e7f0..1c6f94e3321c 100644 --- a/sbin/ipfw/ipfw2.c +++ b/sbin/ipfw/ipfw2.c @@ -902,7 +902,9 @@ show_ipfw(struct ip_fw *rule, int pcwidth, int bcwidth) printf("%*llu %*llu ", pcwidth, align_uint64(&rule->pcnt), bcwidth, align_uint64(&rule->bcnt)); - if (do_time) { + if (do_time == 2) + printf("%10u ", rule->timestamp); + else if (do_time == 1) { char timestr[30]; time_t t = (time_t)0; @@ -3667,7 +3669,7 @@ ipfw_main(int oldac, char **oldav) save_av = av; optind = optreset = 0; - while ((ch = getopt(ac, av, "acdefhnNqs:Stv")) != -1) + while ((ch = getopt(ac, av, "acdefhnNqs:STtv")) != -1) switch (ch) { case 'a': do_acct = 1; @@ -3717,6 +3719,10 @@ ipfw_main(int oldac, char **oldav) do_time = 1; break; + case 'T': + do_time = 2; /* numeric timestamp */ + break; + case 'v': /* verbose */ verbose = 1; break;