Module Name: othersrc
Committed By: dyoung
Date: Wed Dec 2 23:39:51 UTC 2015
Modified Files:
othersrc/external/bsd/arfe/dt: Makefile README core.c core.h dec.c
dec.h dt.c hex.c hex.h ipv4.c ipv4.h macaddr.c macaddr.h
portability.h testit
othersrc/external/bsd/arfe/dt/rr: daily-output-2-daily-output-5
daily-output-5-daily-output-2 daily-output-5-daily-output-6
daily-output-6-daily-output-5 daily-output-6-daily-output-7
daily-output-7-daily-output-6 if-re0-if-wm0 if-wm0-if-re0
ifconfig.0-ifconfig.1 ifconfig.0-logger-ifconfig.0
ifconfig.1-ifconfig.0 logger-ifconfig.0-ifconfig.0
netstat-s.0-netstat-s.1 netstat-s.1-netstat-s.0
quack123quack-quack456quack quack456quack-quack123quack
quackabequack-quackdariaquack quackdariaquack-quackabequack
wm0-a-wm0-b wm0-b-wm0-a
othersrc/external/bsd/arfe/it: Makefile README it.c
othersrc/external/bsd/arfe/tt: Makefile README tt.c
othersrc/external/bsd/arfe/tt/tests/1: match transform
Removed Files:
othersrc/external/bsd/arfe/dt/t: abecedarian abracadabra quack123quack
quack456quack quackabequack quackdariaquack
Log Message:
Executive summary: ARFE now understands C-like symbols. I'm using a
different algorithm to figure out where to subdivide the longest common
subsequence search. I'm actually computing an edit distance instead of
the longest common sequence, but the algorithms are duals so there's not
much practical difference. I've discarded some tests, and added at least
one new one.
Qualify %d for ptrdiff_t, %td. Quiets compilation on 64-bit Darwin.
Change the type of the dynamic program cells from size_t to cell_t. For
now, a cell_t is just a struct containing a size_t score.
Add algq(), a routine for finding k such that
lcs(A[1:m/2], B[1:k]) | lcs(A[m/2+1:m], B[k+1:n]) = lcs(A, B).
algq() is based on the function Half(i, j) defined in Jeff Erickson's
([email protected]) lecture notes on advanced dynamic programming.
See http://jeffe.cs.illinois.edu/teaching/algorithms/.
Add to the Makefile (commented out) lines for tracking code coverage.
Use gcov <source file> to see the coverage.
Make the cleandir target remove gcov(1)-related files.
Delete a bunch of dead code and the now unnecessary argument to algc(),
expected_lcs.
We don't need backwards subslices any more, so get rid of that. When
I got rid of the slice_t member `backward' and all of its uses, GCC
inlined clocc_ends_at() with a really bad effect on performance (>10s
on elmendorf for the t/netstat-s.[01] test, instead of <8s). I marked
clocc_ends_at() __noinline for a net performance gain. The gcc version
is (NetBSD nb2 20110806) 4.5.3, btw.
Disable the dbg_assert()s for more reliable performance comparisons.
Rename algq's splitn argument to splitnp since that's my convention
for arguments of that kind.
In algq(), don't get(A, i) m x n times, just get(A, i) m times.
Lightly constify.
Provide __noinline on non-NetBSD systems.
Sprinkle the $ARFE$ keyword.
Rename algc -> findlcs, algq -> findsplitn.
Make Subversion fill $ARFE$ in macaddr.h.
Extract the tags target from {dt,it,tt}/Makefile, put it
in ./Makefile.inc.
We only ever call findsplitn(..., true), so get rid of the do_clocc
argument.
Add an experimental routine, count_records(), that tries to count the
records in its second slice_t argument, using the first slice_t argument
as record template.
Change the class-occurrence (clocc_t) score, clocc_score(), to one plus
the minimum length of the class occurrences, from one plus the product
of the class occurrences' lengths. This speeds things up a bit.
Simplify findsplitn() by pulling common statements out from if-else
branches, et cetera.
In clocc_starts_in_slice_at(), pass the wlenp argument to
clocc_starts_at(). Nothing passed a non-NULL wlenp to
clocc_starts_in_slice_at(), so this doesn't make any functional
difference.
Compute the edit distance instead of the longest common subsequence.
The one algorithm is a dual of the other. I may find it easier to
add to the edit distance algorithm improvements like affine gap
penalties, hence the change.
Snapshot of work in progress. These changes make things quite a bit
slower! Add affine gap penalties.
Bring count_records() in line with findsplitn(), adding affine gap
penalties. Update the instrumentation. Count up the number of gaps
accumulated.
XXX This change makes 'dt netstat-s.0 netstat-s.1' more than twice as
XXX slow as it used to be, owing largely (I think) to the increase in
XXX size of a cell_t, where three ssize_t's track the number of gaps.
Exit with a message and error return code if we run out of slots for
class occurrences. The class-occurrence array is still statically
allocated---yech. I'm going to fix it one of these days, I promise.
Stop detecting occurrences of class "string" (KIND_STRING), which
consisted of the names 'abe', 'ada', and 'daria'. Remove the tests
related to that.
Start detecting occurrences of class "symbol" (KIND_SYMBOL), which
resemble C symbol names: they start with a letter of the alphabet or
underscore. Following characters are letters, numbers, or underscore.
Update tests to match: the netstat and ifconfig tests produce much more
sensible results, now. Delete the 'quack<number>quack' tests, since
the symbol detector matches the entire string, now, and the tests don't
stand for any practical use-case.
Add test #5 to tt, which demonstrates how one can use a symbol in the
match template to match a symbol in the input for reproduction in the
transform template.
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 othersrc/external/bsd/arfe/dt/Makefile \
othersrc/external/bsd/arfe/dt/hex.c othersrc/external/bsd/arfe/dt/hex.h \
othersrc/external/bsd/arfe/dt/ipv4.c othersrc/external/bsd/arfe/dt/ipv4.h
cvs rdiff -u -r1.10 -r1.11 othersrc/external/bsd/arfe/dt/README
cvs rdiff -u -r1.3 -r1.4 othersrc/external/bsd/arfe/dt/core.c \
othersrc/external/bsd/arfe/dt/core.h othersrc/external/bsd/arfe/dt/testit
cvs rdiff -u -r1.1 -r1.2 othersrc/external/bsd/arfe/dt/dec.c \
othersrc/external/bsd/arfe/dt/dec.h \
othersrc/external/bsd/arfe/dt/macaddr.h
cvs rdiff -u -r1.14 -r1.15 othersrc/external/bsd/arfe/dt/dt.c
cvs rdiff -u -r1.4 -r1.5 othersrc/external/bsd/arfe/dt/macaddr.c
cvs rdiff -u -r1.2 -r1.3 othersrc/external/bsd/arfe/dt/portability.h
cvs rdiff -u -r1.2 -r1.3 \
othersrc/external/bsd/arfe/dt/rr/daily-output-2-daily-output-5 \
othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-2 \
othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-6 \
othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-5 \
othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-7 \
othersrc/external/bsd/arfe/dt/rr/daily-output-7-daily-output-6
cvs rdiff -u -r1.4 -r1.5 othersrc/external/bsd/arfe/dt/rr/if-re0-if-wm0 \
othersrc/external/bsd/arfe/dt/rr/if-wm0-if-re0
cvs rdiff -u -r1.5 -r1.6 \
othersrc/external/bsd/arfe/dt/rr/ifconfig.0-ifconfig.1 \
othersrc/external/bsd/arfe/dt/rr/ifconfig.0-logger-ifconfig.0 \
othersrc/external/bsd/arfe/dt/rr/ifconfig.1-ifconfig.0 \
othersrc/external/bsd/arfe/dt/rr/logger-ifconfig.0-ifconfig.0 \
othersrc/external/bsd/arfe/dt/rr/wm0-a-wm0-b \
othersrc/external/bsd/arfe/dt/rr/wm0-b-wm0-a
cvs rdiff -u -r1.1 -r1.2 \
othersrc/external/bsd/arfe/dt/rr/netstat-s.0-netstat-s.1 \
othersrc/external/bsd/arfe/dt/rr/netstat-s.1-netstat-s.0 \
othersrc/external/bsd/arfe/dt/rr/quack123quack-quack456quack \
othersrc/external/bsd/arfe/dt/rr/quack456quack-quack123quack \
othersrc/external/bsd/arfe/dt/rr/quackabequack-quackdariaquack \
othersrc/external/bsd/arfe/dt/rr/quackdariaquack-quackabequack
cvs rdiff -u -r1.1 -r0 othersrc/external/bsd/arfe/dt/t/abecedarian \
othersrc/external/bsd/arfe/dt/t/abracadabra \
othersrc/external/bsd/arfe/dt/t/quack123quack \
othersrc/external/bsd/arfe/dt/t/quack456quack \
othersrc/external/bsd/arfe/dt/t/quackabequack \
othersrc/external/bsd/arfe/dt/t/quackdariaquack
cvs rdiff -u -r1.5 -r1.6 othersrc/external/bsd/arfe/it/Makefile
cvs rdiff -u -r1.8 -r1.9 othersrc/external/bsd/arfe/it/README
cvs rdiff -u -r1.1 -r1.2 othersrc/external/bsd/arfe/it/it.c
cvs rdiff -u -r1.3 -r1.4 othersrc/external/bsd/arfe/tt/Makefile
cvs rdiff -u -r1.5 -r1.6 othersrc/external/bsd/arfe/tt/README
cvs rdiff -u -r1.2 -r1.3 othersrc/external/bsd/arfe/tt/tt.c
cvs rdiff -u -r1.1 -r1.2 othersrc/external/bsd/arfe/tt/tests/1/match \
othersrc/external/bsd/arfe/tt/tests/1/transform
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: othersrc/external/bsd/arfe/dt/Makefile
diff -u othersrc/external/bsd/arfe/dt/Makefile:1.6 othersrc/external/bsd/arfe/dt/Makefile:1.7
--- othersrc/external/bsd/arfe/dt/Makefile:1.6 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/Makefile Wed Dec 2 23:39:51 2015
@@ -1,12 +1,12 @@
-# $ARFE: Makefile 262 2015-10-08 21:47:24Z dyoung $
+# $ARFE: Makefile 294 2015-11-27 16:33:21Z dyoung $
NOMAN=
.include <bsd.own.mk>
-DPINCS+=core.h dec.h hex.h ipv4.h macaddr.h
+DPINCS+=core.h dec.h hex.h ipv4.h macaddr.h sym.h
PROG=dt
-SRCS+=core.c dec.c dt.c hex.c ipv4.c macaddr.c
+SRCS+=core.c dec.c dt.c hex.c ipv4.c macaddr.c sym.c
#CPPFLAGS+=-DHB_DEBUG
-CPPFLAGS+=-DHB_ASSERT
+#CPPFLAGS+=-DHB_ASSERT
DBG+=-g -O3
#DBG+=-g -O0
#COPTS+=-pg
@@ -14,10 +14,13 @@ DBG+=-g -O3
CFLAGS+=-std=c99
WARNS=5
-tags: $(SRCS) $(DPINCS) $(INCS)
- @rm -f $(.OBJDIR)/tags
- @ctags -atwd $(.ALLSRC)
- @sort -o $(.OBJDIR)/tags $(.OBJDIR)/tags
+CLEANFILES+=*.gcda *.gcno
+
+#
+# profiling stuff
+#
+#DBG+=-fprofile-arcs -ftest-coverage
+#LDADD+=-lgcov
test:
@sh $(.CURDIR)/testit
Index: othersrc/external/bsd/arfe/dt/hex.c
diff -u othersrc/external/bsd/arfe/dt/hex.c:1.6 othersrc/external/bsd/arfe/dt/hex.c:1.7
--- othersrc/external/bsd/arfe/dt/hex.c:1.6 Wed Sep 23 19:32:34 2015
+++ othersrc/external/bsd/arfe/dt/hex.c Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: hex.c,v 1.6 2015/09/23 19:32:34 dyoung Exp $ */
-/* $ARFE: hex.c 258 2015-09-23 19:31:17Z dyoung $ */
+/* $NetBSD: hex.c,v 1.7 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: hex.c 264 2015-10-08 22:28:01Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
Index: othersrc/external/bsd/arfe/dt/hex.h
diff -u othersrc/external/bsd/arfe/dt/hex.h:1.6 othersrc/external/bsd/arfe/dt/hex.h:1.7
--- othersrc/external/bsd/arfe/dt/hex.h:1.6 Wed Sep 23 19:32:34 2015
+++ othersrc/external/bsd/arfe/dt/hex.h Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: hex.h,v 1.6 2015/09/23 19:32:34 dyoung Exp $ */
-/* $ARFE: hex.h 258 2015-09-23 19:31:17Z dyoung $ */
+/* $NetBSD: hex.h,v 1.7 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: hex.h 264 2015-10-08 22:28:01Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
Index: othersrc/external/bsd/arfe/dt/ipv4.c
diff -u othersrc/external/bsd/arfe/dt/ipv4.c:1.6 othersrc/external/bsd/arfe/dt/ipv4.c:1.7
--- othersrc/external/bsd/arfe/dt/ipv4.c:1.6 Wed Sep 23 19:32:34 2015
+++ othersrc/external/bsd/arfe/dt/ipv4.c Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: ipv4.c,v 1.6 2015/09/23 19:32:34 dyoung Exp $ */
-/* $ARFE: ipv4.c 258 2015-09-23 19:31:17Z dyoung $ */
+/* $NetBSD: ipv4.c,v 1.7 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: ipv4.c 264 2015-10-08 22:28:01Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
Index: othersrc/external/bsd/arfe/dt/ipv4.h
diff -u othersrc/external/bsd/arfe/dt/ipv4.h:1.6 othersrc/external/bsd/arfe/dt/ipv4.h:1.7
--- othersrc/external/bsd/arfe/dt/ipv4.h:1.6 Wed Sep 23 19:32:34 2015
+++ othersrc/external/bsd/arfe/dt/ipv4.h Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: ipv4.h,v 1.6 2015/09/23 19:32:34 dyoung Exp $ */
-/* $ARFE: ipv4.h 258 2015-09-23 19:31:17Z dyoung $ */
+/* $NetBSD: ipv4.h,v 1.7 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: ipv4.h 264 2015-10-08 22:28:01Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
Index: othersrc/external/bsd/arfe/dt/README
diff -u othersrc/external/bsd/arfe/dt/README:1.10 othersrc/external/bsd/arfe/dt/README:1.11
--- othersrc/external/bsd/arfe/dt/README:1.10 Wed Sep 23 19:32:34 2015
+++ othersrc/external/bsd/arfe/dt/README Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-$ARFE: README 258 2015-09-23 19:31:17Z dyoung $
-$NetBSD: README,v 1.10 2015/09/23 19:32:34 dyoung Exp $
+$ARFE: README 264 2015-10-08 22:28:01Z dyoung $
+$NetBSD: README,v 1.11 2015/12/02 23:39:51 dyoung Exp $
DT---(d)ifferentiate (t)ext---finds a longest common subsequence (LCS)
of two texts where the numbers and IPv4 addresses are "wild": a span
Index: othersrc/external/bsd/arfe/dt/core.c
diff -u othersrc/external/bsd/arfe/dt/core.c:1.3 othersrc/external/bsd/arfe/dt/core.c:1.4
--- othersrc/external/bsd/arfe/dt/core.c:1.3 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/core.c Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: core.c,v 1.3 2015/10/08 22:00:56 dyoung Exp $ */
-/* $ARFE$ */
+/* $NetBSD: core.c,v 1.4 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: core.c 297 2015-12-02 23:16:23Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
@@ -46,6 +46,7 @@
#include "hex.h"
#include "ipv4.h"
#include "macaddr.h"
+#include "sym.h"
union freeslice;
typedef union freeslice freeslice_t;
@@ -55,18 +56,17 @@ union freeslice {
freeslice_t *next;
};
-static const char *names[] = {
- "abe"
- , "ada"
- , "daria"
-};
-
-const size_t no_expected_lcs = SIZE_T_MAX;
-
static bool freeslices_initialized __aligned(COHERENCY_UNIT);
static freeslice_t *first_freeslice __aligned(COHERENCY_UNIT);
static freeslice_t freeslices[2048];
+static const int gap_open = 1, gap_extend = 6;
+static const subcell_t infinity = {
+ .score = SSIZE_MAX / 2
+ , .gaps = SSIZE_MAX / 2
+ , .splitn = 0
+};
+
static void
init_freeslices(void)
{
@@ -111,8 +111,6 @@ newslice(char *buf, size_t buflen)
if (s == NULL)
return NULL;
- s->backward = false;
-
s->first = buf;
s->last = buf + buflen - 1;
@@ -166,7 +164,7 @@ get(const slice_t *s, int i)
{
dbg_assert(0 <= i && i < length(s));
- return (s->backward) ? s->last[-i] : s->first[i];
+ return s->first[i];
}
static inline const char *
@@ -174,25 +172,7 @@ getp(const slice_t *s, int i)
{
dbg_assert(0 <= i && i < length(s));
- return (s->backward) ? &s->last[-i] : &s->first[i];
-}
-
-static void
-extract(const slice_t *s, unsigned int i, unsigned int j, char *o)
-{
- unsigned int k, inc;
- char *p;
-
- inc = (i < j) ? 1 : -1;
- p = o;
-
- for (k = i; ; k += inc) {
- *p++ = get(s, k);
- if (k == j)
- break;
- }
-
- *p = '\0';
+ return &s->first[i];
}
static slice_t *
@@ -201,6 +181,7 @@ subslice(const slice_t *s, int i, int j)
slice_t *ss;
const char *first, *last;
+ dbg_assert(i <= j);
dbg_assert(MAX(i, j) < length(s));
ss = slice_alloc();
@@ -211,15 +192,8 @@ subslice(const slice_t *s, int i, int j)
first = getp(s, i);
last = getp(s, j);
- ss->backward = first > last;
-
- if (ss->backward) {
- ss->first = last;
- ss->last = first;
- } else {
- ss->first = first;
- ss->last = last;
- }
+ ss->first = first;
+ ss->last = last;
return ss;
}
@@ -254,7 +228,7 @@ found:
return true;
}
-static bool
+static bool __noinline
clocc_ends_at(const cloccs_t *o, int last, ssize_t *wlenp, clocc_kind_t *kindp)
{
const clocc_t *occ;
@@ -286,19 +260,16 @@ found:
static int
index_versus_basis(const slice_t *basis, const slice_t *s, int i)
{
- dbg_assert(!basis->backward);
-
return getp(s, i) - getp(basis, 0);
}
static bool
clocc_starts_in_slice_at(const cloccs_t *o, const slice_t *basis,
- const slice_t *s, int i, size_t *wlenp)
+ const slice_t *s, int i, ssize_t *wlenp)
{
const int iprime = index_versus_basis(basis, s, i);
- return (s->backward) ? clocc_ends_at(o, iprime, NULL, NULL)
- : clocc_starts_at(o, iprime, NULL, NULL);
+ return clocc_starts_at(o, iprime, wlenp, NULL);
}
static bool
@@ -307,8 +278,7 @@ clocc_ends_in_slice_at(const cloccs_t *o
{
const int iprime = index_versus_basis(basis, s, i);
- return (s->backward) ? clocc_starts_at(o, iprime, wlenp, kindp)
- : clocc_ends_at(o, iprime, wlenp, kindp);
+ return clocc_ends_at(o, iprime, wlenp, kindp);
}
static chain_t *
@@ -601,6 +571,20 @@ dec_clocc(const scratch_t *scratch, int
}
static chain_t *
+sym_clocc(const scratch_t *scratch, int idx_a, int idx_b)
+{
+ const clocc_t * const a = &scratch->Aoccs.occs[idx_a],
+ * const b = &scratch->Boccs.occs[idx_b];
+ const int column = cloccs_to_column(a, b);
+
+ dbg2_printf("%s @ %d ; %s @ %d -> column %d\n",
+ a->val_u.u_sym, a->column,
+ b->val_u.u_sym, b->column, column);
+
+ return newchain_with_match_idx(strdup(a->val_u.u_sym), column, idx_b);
+}
+
+static chain_t *
clocc(const scratch_t *scratch, int idx_a, int idx_b)
{
const clocc_t * const a = &scratch->Aoccs.occs[idx_a],
@@ -614,6 +598,9 @@ clocc(const scratch_t *scratch, int idx_
(a->qual == b->qual) ? b->qual : QUAL_NONE);
}
+ if (b->kind == KIND_SYM)
+ return sym_clocc(scratch, idx_a, idx_b);
+
if (b->kind == KIND_INTMAX_DEC)
return dec_clocc(scratch, idx_a, idx_b);
@@ -623,9 +610,6 @@ clocc(const scratch_t *scratch, int idx_
if (b->kind == KIND_MACADDR)
return mac_clocc(scratch, idx_a, idx_b);
- if (b->kind == KIND_STRING)
- return newchain(strdup("<word>"), 0);
-
return newchain(strdup("<clocc>"), 0);
}
@@ -636,19 +620,21 @@ empty(void)
}
static inline ssize_t
-clocc_score(ssize_t a, ssize_t b)
+clocc_score(clocc_kind_t kind, ssize_t a, ssize_t b)
{
- return a * b + 1;
+ if (kind == KIND_SYM)
+ return gap_extend * (MAX(a, b) + MIN(a, b)) / 2;
+ return gap_extend * (MIN(a, b) - MAX(a, b)) - gap_open;
}
static void
-algb(const slice_t *A, const slice_t *B, scratch_t *scratch, size_t *LL,
- bool do_clocc)
+findsplitn(const slice_t *A, const slice_t *B, scratch_t *scratch, int splitm,
+ unsigned int *splitnp)
{
const ssize_t m = length(A);
const ssize_t n = length(B);
ssize_t i, j;
- size_t *K[2], *Kclocc, *Kcur, *Kprev, *Ktmp;
+ cell_t *K[2], *Kclocc, *Kcur, *Kprev, *Ktmp;
struct {
clocc_kind_t A, B;
} kind;
@@ -663,8 +649,12 @@ algb(const slice_t *A, const slice_t *B,
/* A copy of the K[] at which a clocc last began. */
Kclocc = scratch->Kclocc;
- for (j = 0; j < n + 1; j++)
- K[0][j] = 0;
+ for (j = 0; j < n + 1; j++) {
+ K[0][j].match = infinity;
+ K[0][j].ins.score = gap_open + j * gap_extend;
+ K[0][j].ins.splitn = 0;
+ K[0][j].del = infinity;
+ }
/* make -1 a valid index on all arrays */
Kprev = K[0] + 1;
@@ -672,12 +662,262 @@ algb(const slice_t *A, const slice_t *B,
Kclocc++;
for (i = 0; i < m; i++) {
- const bool clocc_starts_this_row = do_clocc &&
+ Kprev[-1].match = infinity;
+ Kcur[-1].match = infinity;
+ Kprev[-1].del.score = gap_open + i * gap_extend;
+ Kcur[-1].del.score = gap_open + (i + 1) * gap_extend;
+ Kprev[-1].ins = infinity;
+ Kcur[-1].ins = infinity;
+ const bool clocc_starts_this_row =
+ clocc_starts_in_slice_at(&scratch->Aoccs, scratch->Abasis,
+ A, i, NULL);
+
+ if (clocc_starts_this_row) {
+ dbg_assert(!inside_clocc);
+ dbg_printf("%s: row %zd, clocc starts\n", __func__, i);
+ memcpy(&Kclocc[-1], &Kprev[-1],
+ sizeof(Kclocc[0]) * (n + 1));
+ inside_clocc = true;
+ }
+
+ const bool clocc_ends_this_row = inside_clocc &&
+ clocc_ends_in_slice_at(&scratch->Aoccs, scratch->Abasis,
+ A, i, &wlen.A, &kind.A);
+
+ const char Ai = get(A, i);
+
+ for (j = 0; j < n; j++) {
+
+ struct {
+ ssize_t del, ins, least, match;
+ } cand, candw;
+
+ /* del ^
+ * ins <
+ */
+ cand.match =
+ Kprev[j].match.score + gap_open + gap_extend;
+ cand.del = Kprev[j].del.score + gap_extend;
+ cand.ins = Kprev[j].ins.score + gap_open + gap_extend;
+ cand.least = MIN(cand.match, MIN(cand.del, cand.ins));
+
+ if (i < splitm)
+ Kcur[j].del.splitn = UINT_MAX;
+ else if (i == splitm)
+ Kcur[j].del.splitn = j + 1;
+ else if (cand.least == cand.ins)
+ Kcur[j].del.splitn = Kprev[j].ins.splitn;
+ else if (cand.least == cand.del)
+ Kcur[j].del.splitn = Kprev[j].del.splitn;
+ else /* if (cand.least == cand.match) */
+ Kcur[j].del.splitn = Kprev[j].match.splitn;
+
+ Kcur[j].del.score = cand.least;
+ dbg_printf("%s set K[%zd][%zd].del.score to %zd\n",
+ __func__, i, j, Kcur[j].del.score);
+
+ cand.match =
+ Kcur[j - 1].match.score + gap_open + gap_extend;
+ cand.del = Kcur[j - 1].del.score + gap_open + gap_extend;
+ cand.ins = Kcur[j - 1].ins.score + gap_extend;
+ cand.least = MIN(cand.match, MIN(cand.del, cand.ins));
+
+ if (i < splitm)
+ Kcur[j].ins.splitn = UINT_MAX;
+ else if (i == splitm)
+ Kcur[j].ins.splitn = j + 1;
+ else if (cand.least == cand.ins)
+ Kcur[j].ins.splitn = Kcur[j - 1].ins.splitn;
+ else if (cand.least == cand.del)
+ Kcur[j].ins.splitn = Kcur[j - 1].del.splitn;
+ else /* if (cand.least == cand.match) */
+ Kcur[j].ins.splitn = Kcur[j - 1].match.splitn;
+
+ Kcur[j].ins.score = cand.least;
+ dbg_printf("%s set K[%zd][%zd].ins.score to %zd\n",
+ __func__, i, j, Kcur[j].ins.score);
+
+ cand.match = Kprev[j - 1].match.score;
+ cand.del = Kprev[j - 1].del.score;
+ cand.ins = Kprev[j - 1].ins.score;
+ cand.least =
+ MIN(cand.match, MIN(cand.del, cand.ins));
+
+ if (Ai != get(B, j)) {
+ cand.match += gap_open + gap_extend * 2;
+ cand.del += gap_open + gap_extend * 2;
+ cand.ins += gap_open + gap_extend * 2;
+ cand.least += gap_open + gap_extend * 2;
+ }
+
+ if (clocc_ends_this_row &&
+ clocc_ends_in_slice_at(&scratch->Boccs,
+ scratch->Bbasis, B, j,
+ &wlen.B, &kind.B) &&
+ kind.A == kind.B && /* match kind */
+ wlen.B <= j + 1 /* must not begin outside of B */) {
+ const ssize_t step =
+ clocc_score(kind.A, wlen.A, wlen.B);
+ dbg_printf("%s visits clocc boundary at A[%d] "
+ "and B[%d] step %zu\n", __func__,
+ index_versus_basis(scratch->Abasis, A, i),
+ index_versus_basis(scratch->Bbasis, B, j),
+ step);
+ candw.match =
+ Kclocc[j - wlen.B].match.score + step;
+ candw.del =
+ Kclocc[j - wlen.B].del.score + step;
+ candw.ins =
+ Kclocc[j - wlen.B].ins.score + step;
+ candw.least = MIN(candw.match,
+ MIN(candw.del, candw.ins));
+ } else {
+ candw = cand;
+ }
+ const ssize_t least = MIN(cand.least, candw.least);
+ if (i < splitm)
+ Kcur[j].match.splitn = UINT_MAX;
+ else if (i == splitm)
+ Kcur[j].match.splitn = j + 1;
+ else if (least == cand.ins) {
+ Kcur[j].match.splitn = Kprev[j - 1].ins.splitn;
+ } else if (least == cand.del) {
+ Kcur[j].match.splitn = Kprev[j - 1].del.splitn;
+ } else if (least == cand.match) {
+ Kcur[j].match.splitn =
+ Kprev[j - 1].match.splitn;
+ } else if (least == candw.ins) {
+ Kcur[j].match.splitn =
+ Kclocc[j - wlen.B].ins.splitn;
+ } else if (least == candw.del) {
+ Kcur[j].match.splitn =
+ Kclocc[j - wlen.B].del.splitn;
+ } else /* if (least == candw.match) */ {
+ Kcur[j].match.splitn =
+ Kclocc[j - wlen.B].match.splitn;
+ }
+ Kcur[j].match.score = least;
+ dbg_printf("%s set K[%zd][%zd].match.score to %zu%s\n",
+ __func__, i, j, Kcur[j].match.score,
+ inside_clocc ? "*" : "");
+ }
+ if (clocc_ends_this_row) {
+ dbg_printf("%s: row %zd, clocc ends\n", __func__, i);
+ inside_clocc = false;
+ }
+
+ Ktmp = Kprev;
+ Kprev = Kcur;
+ Kcur = Ktmp;
+ }
+#if 0
+ dbg_assert(Kcur[-1].score == m - 1 && Kprev[-1].score == m);
+#endif
+ const cell_t *c = &Kprev[n - 1];
+ const ssize_t least =
+ MIN(c->match.score, MIN(c->del.score, c->ins.score));
+ if (least == c->ins.score)
+ *splitnp = Kprev[n - 1].ins.splitn;
+ else if (least == c->del.score)
+ *splitnp = Kprev[n - 1].del.splitn;
+ else /* if (least == c->match.score) */
+ *splitnp = Kprev[n - 1].match.splitn;
+}
+
+size_t
+count_records(const slice_t *A, const slice_t *B, scratch_t *scratch)
+{
+ const ssize_t m = length(A);
+ const ssize_t n = length(B);
+ ssize_t i, i0, j;
+ cell_t *K[2], *Kclocc, *Kcur, *Kprev, *Ktmp;
+ struct {
+ clocc_kind_t A, B;
+ } kind;
+ struct {
+ ssize_t A, B;
+ } wlen;
+ bool inside_clocc = false;
+
+ K[0] = scratch->K[0];
+ K[1] = scratch->K[1];
+
+ /* A copy of the K[] at which a clocc last began. */
+ Kclocc = scratch->Kclocc;
+
+ for (j = 0; j < n + 1; j++) {
+ K[0][j].match = infinity;
+
+ K[0][j].ins.score = gap_open + j * gap_extend;
+ K[0][j].ins.gaps = 1;
+ K[0][j].ins.splitn = 0;
+
+ K[0][j].del = infinity;
+ }
+
+ /* make -1 a valid index on all arrays */
+ Kprev = K[0] + 1;
+ Kcur = K[1] + 1;
+ Kclocc++;
+
+ ssize_t prev_gaps = SSIZE_MAX;
+ ssize_t prev_score = SSIZE_MAX;
+ ssize_t prev_diff = SSIZE_MAX;
+ ssize_t prev_avg = SSIZE_MAX;
+ ssize_t prev_avg_diff = 0;
+ size_t nrec = 0;
+
+ for (i0 = i = 0; ; i0++, i++) {
+ Kprev[-1].match = infinity;
+ Kcur[-1].match = infinity;
+ /* TBD: i0, or i? */
+ Kprev[-1].del.score = gap_open + i0 * gap_extend;
+ Kprev[-1].del.gaps = 1;
+ Kcur[-1].del.score = gap_open + (i0 + 1) * gap_extend;
+ Kcur[-1].del.gaps = 1;
+ Kprev[-1].ins = infinity;
+ Kcur[-1].ins = infinity;
+
+ if (i == m) {
+ dbg_assert(!inside_clocc);
+ nrec++;
+ const ssize_t least =
+ MIN(MIN(Kprev[n - 1].del.score,
+ Kprev[n - 1].ins.score),
+ Kprev[n - 1].match.score);
+ ssize_t gaps;
+ int splitn;
+ if (least == Kprev[n - 1].del.score) {
+ splitn = Kprev[n - 1].del.splitn;
+ gaps = Kprev[n - 1].del.gaps;
+ } else if (least == Kprev[n - 1].ins.score) {
+ splitn = Kprev[n - 1].ins.splitn;
+ gaps = Kprev[n - 1].ins.gaps;
+ } else /* if (least == Kprev[n - 1].match.score) */ {
+ splitn = Kprev[n - 1].match.splitn;
+ gaps = Kprev[n - 1].match.gaps;
+ }
+#if 1
+ const ssize_t avg = gaps / nrec;
+ fprintf(stderr, "%s: %zu records, splitn %d, gaps %zu, d gaps %zd, score %zd -> %zd, "
+ "d %zd, dd %zd, avg g / r %zd\n",
+ __func__, nrec, splitn, gaps, gaps - prev_gaps, prev_score, least,
+ least - prev_score, least - prev_score - prev_diff, avg);
+#endif
+ prev_diff = least - prev_score;
+ prev_score = least;
+ prev_avg_diff = avg - prev_avg;
+ prev_avg = avg;
+ prev_gaps = gaps;
+ i = 0;
+ }
+
+ const bool clocc_starts_this_row =
clocc_starts_in_slice_at(&scratch->Aoccs, scratch->Abasis,
A, i, NULL);
if (clocc_starts_this_row) {
- assert(!inside_clocc);
+ dbg_assert(!inside_clocc);
dbg_printf("%s: row %zd, clocc starts\n", __func__, i);
memcpy(&Kclocc[-1], &Kprev[-1],
sizeof(Kclocc[0]) * (n + 1));
@@ -688,12 +928,82 @@ algb(const slice_t *A, const slice_t *B,
clocc_ends_in_slice_at(&scratch->Aoccs, scratch->Abasis,
A, i, &wlen.A, &kind.A);
+ const char Ai = get(A, i);
+
for (j = 0; j < n; j++) {
- size_t u = Kprev[j], ul = Kprev[j - 1], l = Kcur[j - 1];
+ struct {
+ ssize_t del, ins, least, match;
+ } cand, candw;
+
+ /* del ^
+ * ins <
+ */
+ cand.match =
+ Kprev[j].match.score + gap_open + gap_extend;
+ cand.del = Kprev[j].del.score + gap_extend;
+#if 1
+ if (i == 0)
+ cand.del += gap_open;
+#endif
+ cand.ins = Kprev[j].ins.score + gap_open + gap_extend;
+ cand.least = MIN(cand.match, MIN(cand.del, cand.ins));
- if (get(A, i) == get(B, j))
- ul++;
+ if (cand.least == cand.ins) {
+ Kcur[j].del = Kprev[j].ins;
+ Kcur[j].del.gaps++;
+ } else if (cand.least == cand.del) {
+ Kcur[j].del = Kprev[j].del;
+#if 1
+ if (i == 0)
+ Kcur[j].del.gaps++;
+#endif
+ } else /* if (cand.least == cand.match) */ {
+ Kcur[j].del = Kprev[j].match;
+ Kcur[j].del.gaps++;
+ }
+
+ Kcur[j].del.score = cand.least;
+
+ if (i == 0)
+ Kcur[j].del.splitn = j;
+
+ dbg_printf("%s set K[%zd][%zd].del.score to %zd\n",
+ __func__, i, j, Kcur[j].del.score);
+
+ cand.match =
+ Kcur[j - 1].match.score + gap_open + gap_extend;
+ cand.del = Kcur[j - 1].del.score + gap_open + gap_extend;
+ cand.ins = Kcur[j - 1].ins.score + gap_extend;
+ cand.least = MIN(cand.match, MIN(cand.del, cand.ins));
+
+ if (cand.least == cand.ins) {
+ Kcur[j].ins = Kcur[j - 1].ins;
+ } else if (cand.least == cand.del) {
+ Kcur[j].ins = Kcur[j - 1].del;
+ Kcur[j].ins.gaps++;
+ } else /* if (cand.least == cand.match) */ {
+ Kcur[j].ins = Kcur[j - 1].match;
+ Kcur[j].ins.gaps++;
+ }
+
+ Kcur[j].ins.score = cand.least;
+
+ dbg_printf("%s set K[%zd][%zd].ins.score to %zd\n",
+ __func__, i, j, Kcur[j].ins.score);
+
+ cand.match = Kprev[j - 1].match.score;
+ cand.del = Kprev[j - 1].del.score;
+ cand.ins = Kprev[j - 1].ins.score;
+ cand.least =
+ MIN(cand.match, MIN(cand.del, cand.ins));
+
+ if (Ai != get(B, j)) {
+ cand.match += gap_open + gap_extend * 2;
+ cand.del += gap_open + gap_extend * 2;
+ cand.ins += gap_open + gap_extend * 2;
+ cand.least += gap_open + gap_extend * 2;
+ }
if (clocc_ends_this_row &&
clocc_ends_in_slice_at(&scratch->Boccs,
@@ -701,19 +1011,55 @@ algb(const slice_t *A, const slice_t *B,
&wlen.B, &kind.B) &&
kind.A == kind.B && /* match kind */
wlen.B <= j + 1 /* must not begin outside of B */) {
- const size_t step = clocc_score(wlen.A, wlen.B),
- nscore = Kclocc[j - wlen.B] + step;
+ const ssize_t step =
+ clocc_score(kind.A, wlen.A, wlen.B);
dbg_printf("%s visits clocc boundary at A[%d] "
"and B[%d] step %zu\n", __func__,
index_versus_basis(scratch->Abasis, A, i),
index_versus_basis(scratch->Bbasis, B, j),
step);
- Kcur[j] = MAX(MAX(l, u),
- MAX(ul, nscore));
- } else
- Kcur[j] = MAX(MAX(u, ul), l);
- dbg_printf("%s set K[%zd][%zd] to %zu%s\n",
- __func__, i, j, Kcur[j], inside_clocc ? "*" : "");
+ dbg_assert(i != 0);
+ candw.match =
+ Kclocc[j - wlen.B].match.score + step;
+ candw.del =
+ Kclocc[j - wlen.B].del.score + step;
+ candw.ins =
+ Kclocc[j - wlen.B].ins.score + step;
+ candw.least = MIN(candw.match,
+ MIN(candw.del, candw.ins));
+ } else {
+ candw = cand;
+ }
+ const ssize_t least = MIN(cand.least, candw.least);
+ if (least == cand.ins) {
+ Kcur[j].match = Kprev[j - 1].ins;
+ if (i == 0)
+ Kcur[j].match.splitn = j - 1;
+ } else if (least == cand.del) {
+ Kcur[j].match = Kprev[j - 1].del;
+ if (i == 0)
+ Kcur[j].match.splitn = j - 1;
+ } else if (least == cand.match) {
+ Kcur[j].match = Kprev[j - 1].match;
+ if (i == 0)
+ Kcur[j].match.splitn = j - 1;
+ } else if (least == candw.ins) {
+ Kcur[j].match = Kclocc[j - wlen.B].ins;
+ if (i == 0)
+ Kcur[j].match.splitn = j - wlen.B;
+ } else if (least == candw.del) {
+ Kcur[j].match = Kclocc[j - wlen.B].del;
+ if (i == 0)
+ Kcur[j].match.splitn = j - wlen.B;
+ } else /* if (least == candw.match) */ {
+ Kcur[j].match = Kclocc[j - wlen.B].match;
+ if (i == 0)
+ Kcur[j].match.splitn = j - wlen.B;
+ }
+ Kcur[j].match.score = least;
+ dbg_printf("%s set K[%zd][%zd].match.score to %zu%s\n",
+ __func__, i, j, Kcur[j].match.score,
+ inside_clocc ? "*" : "");
}
if (clocc_ends_this_row) {
dbg_printf("%s: row %zd, clocc ends\n", __func__, i);
@@ -724,10 +1070,6 @@ algb(const slice_t *A, const slice_t *B,
Kprev = Kcur;
Kcur = Ktmp;
}
- assert(Kprev[-1] == 0 && Kcur[-1] == 0 && Kclocc[-1] == 0);
- Kprev--;
- for (j = 0; j < n + 1; j++)
- LL[j] = Kprev[j];
}
static const clocc_t *
@@ -853,7 +1195,7 @@ interval_to_clocc_index(cloccs_t *o, int
}
static inline chain_t *
-algc_return(const size_t m, const size_t n, const origin_t origin,
+findlcs_return(const size_t m, const size_t n, const origin_t origin,
size_t *lcsp, size_t lcs, chain_t *c)
{
if (lcsp != NULL) {
@@ -897,22 +1239,16 @@ joinchains(chain_t *ac, chain_t *bc)
}
chain_t *
-algc(const slice_t *A, const slice_t *B, scratch_t *scratch,
- const origin_t origin, const size_t expected_lcs, size_t *lcsp)
+findlcs(const slice_t *A, const slice_t *B, scratch_t *scratch,
+ const origin_t origin, size_t *lcsp)
{
chain_t *c1, *c2, *c;
- unsigned int j, k;
+ unsigned int splitn;
const size_t m = length(A), n = length(B);
struct {
int A, B;
} ivlidx;
- struct {
- size_t topl;
- size_t botr;
- size_t tot;
- } lcs = {.tot = 0};
- const slice_t *B1n;
- slice_t *A1i, *Amip1, *Bn1;
+ slice_t *A1i;
slice_t *B1k, *Aip1m, *Bkp1n;
dbg_printf("%s([%d, %zu], [%d, %zu])\n", __func__,
@@ -920,8 +1256,7 @@ algc(const slice_t *A, const slice_t *B,
origin.j, origin.j + n - 1);
if (n == 0) {
- assert(expected_lcs == no_expected_lcs || 0 == expected_lcs);
- return algc_return(m, n, origin, lcsp, 0, empty());
+ return findlcs_return(m, n, origin, lcsp, 0, empty());
}
clocc_kind_t kind;
@@ -936,106 +1271,43 @@ algc(const slice_t *A, const slice_t *B,
0, n - 1, &start, &end, kind);
if (ivlidx.B != -1) {
- dbg_assert(expected_lcs == no_expected_lcs ||
- (size_t)clocc_score(end - start + 1, m) == expected_lcs);
- return algc_return(m, n, origin, lcsp,
- clocc_score(end - start + 1, m),
+ return findlcs_return(m, n, origin, lcsp,
+ clocc_score(kind, end - start + 1, m),
clocc(scratch, ivlidx.A, ivlidx.B));
}
}
if (m == 1) {
- char A0 = get(A, 0);
+ const char A0 = get(A, 0);
if (ispresent(B, A0)) {
- dbg_assert(expected_lcs == no_expected_lcs ||
- 1 == expected_lcs);
- return algc_return(m, n, origin, lcsp, 1,
+ return findlcs_return(m, n, origin, lcsp, -1,
newchain(strndup(&A0, 1), 0));
}
- assert(expected_lcs == no_expected_lcs || 0 == expected_lcs);
-
- return algc_return(m, n, origin, lcsp, 0, empty());
+ return findlcs_return(m, n, origin, lcsp, 0, empty());
}
const unsigned int i = split_interval(&scratch->Aoccs, origin.i, m);
- A1i = subslice(A, 0, i - 1);
- B1n = B;
- Amip1 = subslice(A, m - 1, i);
- Bn1 = subslice(B, n - 1, 0);
- algb(A1i, B1n, scratch, scratch->L1, true);
- dbg_printf("%s called algb once\n", __func__);
- algb(Amip1, Bn1, scratch, scratch->L2, true);
- dbg_printf("%s called algb twice\n", __func__);
-
- for (k = j = 0; j < n + 1; j++) {
- if (scratch->L1[j] + scratch->L2[n - j] > lcs.tot) {
- k = j;
- lcs.topl = scratch->L1[j];
- lcs.botr = scratch->L2[n - j];
- lcs.tot = lcs.topl + lcs.botr;
- }
- }
- dbg_printf("%s chose k %u (%zu - %u = %zu) lcs %zu\n", __func__,
- k, n, k, n - k, lcs.tot);
-
- assert(k != 0 || lcs.topl == 0);
-
- if (expected_lcs != no_expected_lcs && lcs.tot != expected_lcs) {
- struct {
- char l[12], c, r[12];
- } actx = {.l = "12345.12345", .r = "12345.12345"},
- bctx = {.l = "12345.12345", .r = "12345.12345"};
-
- dbg_printf("%s expected lcs %zu, got %zu + %zu = %zu at "
- "[%d | %d + %u | %d + %zu, %d | %d + %u | %d + %zu]\n",
- __func__, expected_lcs, lcs.topl, lcs.botr, lcs.tot,
- origin.i, origin.i, i - 1, origin.i, m - 1,
- origin.j, origin.j, k, origin.j, n - 1);
-
- extract(A, i - MIN(i, 6), i - MIN(i, 2), actx.l);
- actx.c = get(A, i - 1);
- extract(A, i, MIN(i + 4, m - 1), actx.r);
-
- dbg_printf("%s A context %s [ %c ] %s",
- __func__, actx.l, actx.c, actx.r);
-
- if (k > 0) {
- extract(B, k - MIN(k, 6), k - MIN(k, 2), bctx.l);
- bctx.c = get(B, k - 1);
- extract(B, MIN(k, n - 1), MIN(k + 4, n - 1), bctx.r);
-
- dbg_printf(", B context %s [ %c ] %s\n",
- bctx.l, bctx.c, bctx.r);
- } else
- dbg_printf("\n");
-
- dbg_printf("bailing\n");
- algb(A, B, scratch, scratch->L1, true);
- const slice_t *Am1 = subslice(A, m - 1, 0);
- algb(Am1, Bn1, scratch, scratch->L2, true);
-
- dbg_printf("algb(A, B) -> %zu fwd, -> %zu bwd\n",
- scratch->L1[n], scratch->L2[n]);
- abort();
- }
+ findsplitn(A, B, scratch, i - 1, &splitn);
size_t lcs1, lcs2;
- if (k >= 1) {
- B1k = subslice(B, 0, k - 1);
- c1 = algc(A1i, B1k, scratch, origin, lcs.topl, &lcs1);
+ if (splitn >= 1) {
+ B1k = subslice(B, 0, splitn - 1);
+ A1i = subslice(A, 0, i - 1);
+ c1 = findlcs(A1i, B1k, scratch, origin, &lcs1);
+ slice_free(A1i);
slice_free(B1k);
} else {
lcs1 = 0;
c1 = empty();
}
- if (k < n) {
+ if (splitn < n) {
Aip1m = subslice(A, i, m - 1);
- Bkp1n = subslice(B, k, n - 1);
- c2 = algc(Aip1m, Bkp1n, scratch,
- (origin_t){origin.i + i, origin.j + k}, lcs.botr, &lcs2);
+ Bkp1n = subslice(B, splitn, n - 1);
+ c2 = findlcs(Aip1m, Bkp1n, scratch,
+ (origin_t){origin.i + i, origin.j + splitn}, &lcs2);
slice_free(Bkp1n);
slice_free(Aip1m);
} else {
@@ -1043,11 +1315,8 @@ algc(const slice_t *A, const slice_t *B,
c2 = empty();
}
- slice_free(A1i);
- slice_free(Amip1);
- slice_free(Bn1);
c = joinchains(c1, c2);
- return algc_return(m, n, origin, lcsp, lcs1 + lcs2, c);
+ return findlcs_return(m, n, origin, lcsp, lcs1 + lcs2, c);
}
void
@@ -1060,9 +1329,9 @@ scratch_init(scratch_t *scratch, size_t
scratch->Kclocc = malloc(sizeof(scratch->Kclocc[0]) * (n + 1));
scratch->Abasis = Abasis;
scratch->Bbasis = Bbasis;
- scratch->expected_lcs = SIZE_T_MAX;
}
+#if 0
static int
slicestr(const slice_t *s, const char *t)
{
@@ -1081,19 +1350,51 @@ slicestr(const slice_t *s, const char *t
}
return -1;
}
+#endif
+
+static clocc_t *
+newocc(cloccs_t *o)
+{
+ if (o->noccs >= (int)__arraycount(o->occs)) {
+ errno = ENOMEM;
+ return NULL;
+ }
+ return &o->occs[o->noccs++];
+}
+
+static void
+emit_sym_clocc(sym_detection_t *d, void *arg)
+{
+ cloccs_t *o = arg;
+ clocc_t *occ;
+
+ dbg_printf("found sym %s @ [%d, %d]\n", d->d_chars,
+ d->d_idx.start, d->d_idx.stop);
+
+ if ((occ = newocc(o)) == NULL)
+ err(EXIT_FAILURE, "%s: newocc", __func__);
+
+ occ->column = d->d_column.start;
+ occ->first = d->d_idx.start;
+ occ->last = d->d_idx.stop;
+ occ->kind = KIND_SYM;
+ occ->qual = QUAL_NONE;
+ strlcpy(&occ->val_u.u_sym[0], &d->d_chars[0], sizeof(occ->val_u.u_sym));
+}
static void
emit_mac_clocc(mac_detection_t *d, void *arg)
{
cloccs_t *o = arg;
+ clocc_t *occ;
uint8_t addr[6];
int rc;
dbg_printf("found mac string %s @ [%d, %d]\n", d->d_string,
d->d_idx.start, d->d_idx.stop);
- if (o->noccs >= (int)__arraycount(o->occs))
- return;
+ if ((occ = newocc(o)) == NULL)
+ err(EXIT_FAILURE, "%s: newocc", __func__);
rc = sscanf(d->d_string,
"%" SCNx8 ":%" SCNx8 ":%" SCNx8 ":%" SCNx8 ":%" SCNx8 ":%" SCNx8 "",
@@ -1107,20 +1408,20 @@ emit_mac_clocc(mac_detection_t *d, void
d->d_string, d->d_idx.start, d->d_idx.stop,
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
- o->occs[o->noccs].column = d->d_column.start;
- o->occs[o->noccs].first = d->d_idx.start;
- o->occs[o->noccs].last = d->d_idx.stop;
- o->occs[o->noccs].kind = KIND_MACADDR;
- o->occs[o->noccs].qual = QUAL_NONE;
- memcpy(&o->occs[o->noccs].val_u.u_macaddr[0], &addr[0],
- sizeof(o->occs[o->noccs].val_u.u_macaddr));
- o->noccs++;
+ occ->column = d->d_column.start;
+ occ->first = d->d_idx.start;
+ occ->last = d->d_idx.stop;
+ occ->kind = KIND_MACADDR;
+ occ->qual = QUAL_NONE;
+ memcpy(&occ->val_u.u_macaddr[0], &addr[0],
+ sizeof(occ->val_u.u_macaddr));
}
static void
emit_ipv4_clocc(ipv4_detection_t *d, void *arg)
{
cloccs_t *o = arg;
+ clocc_t *occ;
struct {
uint32_t net;
uint32_t host;
@@ -1130,8 +1431,8 @@ emit_ipv4_clocc(ipv4_detection_t *d, voi
dbg_printf("found ipv4 string %s @ [%d, %d]\n", d->d_string,
d->d_idx.start, d->d_idx.stop);
- if (o->noccs >= (int)__arraycount(o->occs))
- return;
+ if ((occ = newocc(o)) == NULL)
+ err(EXIT_FAILURE, "%s: newocc", __func__);
rc = inet_net_pton(AF_INET, d->d_string, &addr.net, sizeof(addr.net));
@@ -1142,19 +1443,19 @@ emit_ipv4_clocc(ipv4_detection_t *d, voi
dbg_printf("converted ipv4 string %s @ [%d, %d] -> %08" PRIx32 "\n",
d->d_string, d->d_idx.start, d->d_idx.stop, addr.host);
- o->occs[o->noccs].column = d->d_column.start;
- o->occs[o->noccs].first = d->d_idx.start;
- o->occs[o->noccs].last = d->d_idx.stop;
- o->occs[o->noccs].kind = KIND_IPv4;
- o->occs[o->noccs].qual = QUAL_NONE;
- o->occs[o->noccs].val_u.u_ipv4 = addr.host;
- o->noccs++;
+ occ->column = d->d_column.start;
+ occ->first = d->d_idx.start;
+ occ->last = d->d_idx.stop;
+ occ->kind = KIND_IPv4;
+ occ->qual = QUAL_NONE;
+ occ->val_u.u_ipv4 = addr.host;
}
static void
emit_dec_clocc(dec_detection_t *d, void *arg)
{
cloccs_t *o = arg;
+ clocc_t *occ;
intmax_t val, ropval = 0;
char *end, *ropend;
unsigned int log10denom = 0;
@@ -1165,8 +1466,8 @@ emit_dec_clocc(dec_detection_t *d, void
dbg_printf("found decimal string %s @ [%d, %d]\n", d->d_digits,
d->d_idx.start, d->d_idx.stop);
- if (o->noccs >= (int)__arraycount(o->occs))
- return;
+ if ((occ = newocc(o)) == NULL)
+ err(EXIT_FAILURE, "%s: newocc", __func__);
if (d->d_digits[0] == '-') {
next = &d->d_digits[1];
@@ -1192,7 +1493,7 @@ emit_dec_clocc(dec_detection_t *d, void
ropval = strtoimax(end, &ropend, 10);
if (*ropend != '\0' && errno == ERANGE) {
- warnx("%s: over/underflow at %d", __func__,
+ warnx("%s: over/underflow at %td", __func__,
d->d_column.start + end - d->d_digits);
}
for (; end < ropend; end++) {
@@ -1201,20 +1502,20 @@ emit_dec_clocc(dec_detection_t *d, void
}
}
- o->occs[o->noccs].column = d->d_column.start;
- o->occs[o->noccs].first = d->d_idx.start;
- o->occs[o->noccs].last = d->d_idx.stop;
- o->occs[o->noccs].kind = KIND_INTMAX_DEC;
- o->occs[o->noccs].qual = QUAL_NONE;
- o->occs[o->noccs].val_u.u_dec.num = sign * (val * denom + ropval);
- o->occs[o->noccs].val_u.u_dec.log10denom = log10denom;
- o->noccs++;
+ occ->column = d->d_column.start;
+ occ->first = d->d_idx.start;
+ occ->last = d->d_idx.stop;
+ occ->kind = KIND_INTMAX_DEC;
+ occ->qual = QUAL_NONE;
+ occ->val_u.u_dec.num = sign * (val * denom + ropval);
+ occ->val_u.u_dec.log10denom = log10denom;
}
static void
emit_hex_clocc(hex_detection_t *d, void *arg, bool use0x)
{
cloccs_t *o = arg;
+ clocc_t *occ;
intmax_t val;
char *end;
bool allcaps;
@@ -1227,21 +1528,20 @@ emit_hex_clocc(hex_detection_t *d, void
dbg_printf("found hex string %s @ [%d, %d]%s\n", d->d_digits,
d->d_idx.start, d->d_idx.stop, allcaps ? " all CAPS" : "");
- if (o->noccs >= (int)__arraycount(o->occs))
- return;
+ if ((occ = newocc(o)) == NULL)
+ err(EXIT_FAILURE, "%s: newocc", __func__);
val = strtoimax(d->d_digits, &end, 16);
if (*end != '\0' && errno == ERANGE)
warnx("%s: over/underflow at %d", __func__, d->d_column.start);
- o->occs[o->noccs].column = d->d_column.start;
- o->occs[o->noccs].first = d->d_idx.start;
- o->occs[o->noccs].last = d->d_idx.stop;
- o->occs[o->noccs].kind = use0x ? KIND_INTMAX_0xHEX : KIND_INTMAX_HEX;
- o->occs[o->noccs].qual = allcaps ? QUAL_ALLCAPS : QUAL_NONE;
- o->occs[o->noccs].val_u.u_uintmax = val;
- o->noccs++;
+ occ->column = d->d_column.start;
+ occ->first = d->d_idx.start;
+ occ->last = d->d_idx.stop;
+ occ->kind = use0x ? KIND_INTMAX_0xHEX : KIND_INTMAX_HEX;
+ occ->qual = allcaps ? QUAL_ALLCAPS : QUAL_NONE;
+ occ->val_u.u_uintmax = val;
}
static int
@@ -1259,6 +1559,12 @@ clocc_width(const clocc_t *c)
return c->last - c->first + 1;
}
+static int
+clocc_prio(const clocc_t *c)
+{
+ return (c->kind == KIND_SYM) ? 0 : 1;
+}
+
static void
cloccs_dedup(cloccs_t *o)
{
@@ -1274,6 +1580,9 @@ cloccs_dedup(cloccs_t *o)
}
if (clocc_width(r) > clocc_width(l))
*l = *r;
+ else if (clocc_width(l) <= clocc_width(r) &&
+ clocc_prio(r) > clocc_prio(l))
+ *l = *r;
for (j = i + 1; j < o->noccs; j++)
o->occs[j - 1] = o->occs[j];
o->noccs--;
@@ -1312,28 +1621,33 @@ cloccs_init(cloccs_t *o, const slice_t *
hex_parser_t *hex_parser;
ipv4_parser_t *ipv4_parser;
mac_parser_t *mac_parser;
- size_t column, i;
+ sym_parser_t *sym_parser;
+ size_t column;
size_t n = length(s);
unsigned int j;
+ o->noccs = 0;
clocc_htbl_init(&o->htbl);
- o->noccs = 0;
- for (i = 0; i < __arraycount(names); i++) {
- int loc;
+ sym_parser = sym_parser_alloc(emit_sym_clocc, o);
+ if (sym_parser == NULL)
+ goto parse_mac;
- loc = slicestr(s, names[i]);
- if (loc == -1)
- continue;
+ column = 0;
+ for (j = 0; j < n; j++) {
+ char c;
- o->occs[o->noccs].first = loc;
- o->occs[o->noccs].last = loc + strlen(names[i]) - 1;
- o->occs[o->noccs].kind = KIND_STRING;
- dbg_printf("found %s at %d - %d\n",
- names[i], o->occs[o->noccs].first, o->occs[o->noccs].last);
- o->noccs++;
+ c = get(s, j);
+ ++column;
+ sym_parser_drive(sym_parser, j, column, c);
+ if (c == '\n')
+ column = 0;
}
+ sym_parser_drive(sym_parser, n, column + 1, -1);
+
+ sym_parser_free(sym_parser);
+parse_mac:
mac_parser = mac_parser_alloc(emit_mac_clocc, o);
if (mac_parser == NULL)
goto parse_ipv4;
Index: othersrc/external/bsd/arfe/dt/core.h
diff -u othersrc/external/bsd/arfe/dt/core.h:1.3 othersrc/external/bsd/arfe/dt/core.h:1.4
--- othersrc/external/bsd/arfe/dt/core.h:1.3 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/core.h Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: core.h,v 1.3 2015/10/08 22:00:56 dyoung Exp $ */
-/* $ARFE: core.h 262 2015-10-08 21:47:24Z dyoung $ */
+/* $NetBSD: core.h,v 1.4 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: core.h 297 2015-12-02 23:16:23Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
@@ -92,7 +92,6 @@ typedef struct origin {
typedef struct slice {
const char *first;
const char *last;
- bool backward;
} slice_t;
typedef enum {
@@ -102,7 +101,7 @@ typedef enum {
, KIND_INTMAX_0xHEX
, KIND_IPv4
, KIND_MACADDR
- , KIND_STRING
+ , KIND_SYM
} clocc_kind_t;
typedef enum {
@@ -131,6 +130,7 @@ typedef struct clocc {
uintmax_t u_uintmax;
uint32_t u_ipv4;
uint8_t u_macaddr[6];
+ char u_sym[64]; /* XXX don't limit like this */
} val_u;
TAILQ_ENTRY(clocc) bucket;
chainelt_t *match;
@@ -161,23 +161,32 @@ enum {
};
typedef struct clocc_htbl {
- clocc_bucket_t bucket[1024];
+ clocc_bucket_t bucket[4096];
} clocc_htbl_t;
typedef struct cloccs {
int noccs;
- clocc_t occs[1024];
+ clocc_t occs[4096];
clocc_htbl_t htbl;
} cloccs_t;
+typedef struct subcell {
+ ssize_t score;
+ int splitn;
+ ssize_t gaps;
+} subcell_t;
+
+typedef struct cell {
+ subcell_t ins, del, match;
+} cell_t;
+
typedef struct scratch {
size_t *L1; /* n + 1 */
size_t *L2; /* n + 1 */
- size_t *K[2]; /* 2 x (n + 1) */
- size_t *Kclocc; /* n + 1 */
+ cell_t *K[2]; /* 2 x (n + 1) */
+ cell_t *Kclocc; /* n + 1 */
cloccs_t Aoccs, Boccs;
slice_t *Abasis, *Bbasis;
- size_t expected_lcs;
char ipv4_op; /* 'p' for prefix (smallest containing subnet),
* 'l' for copy left argument
*/
@@ -192,17 +201,16 @@ typedef struct scratch {
*/
} scratch_t;
-extern const size_t no_expected_lcs;
-
slice_t *file_to_slice(const char *);
void emit_transformed_text(chain_t *, cloccs_t *, cloccs_t *,
const slice_t *, const slice_t *);
void printchain(chain_t *);
void cloccs_init(cloccs_t *, const slice_t *);
void cloccs_hash(cloccs_t *, const slice_t *);
-chain_t *algc(const slice_t *, const slice_t *, scratch_t *, const origin_t,
- const size_t, size_t *);
+chain_t *findlcs(const slice_t *, const slice_t *, scratch_t *, const origin_t,
+ size_t *);
void scratch_init(scratch_t *, size_t, slice_t *, slice_t *);
ssize_t length(const slice_t *);
+size_t count_records(const slice_t *, const slice_t *, scratch_t *);
#endif /* _CORE_H_ */
Index: othersrc/external/bsd/arfe/dt/testit
diff -u othersrc/external/bsd/arfe/dt/testit:1.3 othersrc/external/bsd/arfe/dt/testit:1.4
--- othersrc/external/bsd/arfe/dt/testit:1.3 Fri Sep 11 01:50:42 2015
+++ othersrc/external/bsd/arfe/dt/testit Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
#!/bin/sh
-# $ARFE: testit 239 2015-09-10 22:49:40Z dyoung $
+# $ARFE: testit 297 2015-12-02 23:16:23Z dyoung $
DT=${OBJDIR:-.}/dt
@@ -19,8 +19,6 @@ while read l r ; do
done <<EOF
netstat-s.0 netstat-s.1
netstat-s.1 netstat-s.0
-abecedarian abracadabra
-abracadabra abecedarian
daily-output-2 daily-output-5
daily-output-5 daily-output-2
daily-output-5 daily-output-6
@@ -31,10 +29,6 @@ ifconfig.0 ifconfig.1
ifconfig.1 ifconfig.0
logger-ifconfig.0 ifconfig.0
ifconfig.0 logger-ifconfig.0
-quack123quack quack456quack
-quack456quack quack123quack
-quackabequack quackdariaquack
-quackdariaquack quackabequack
wm0-a wm0-b
wm0-b wm0-a
if-re0 if-wm0
Index: othersrc/external/bsd/arfe/dt/dec.c
diff -u othersrc/external/bsd/arfe/dt/dec.c:1.1 othersrc/external/bsd/arfe/dt/dec.c:1.2
--- othersrc/external/bsd/arfe/dt/dec.c:1.1 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/dec.c Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: dec.c,v 1.1 2015/10/08 22:00:56 dyoung Exp $ */
-/* $ARFE: dec.c 262 2015-10-08 21:47:24Z dyoung $ */
+/* $NetBSD: dec.c,v 1.2 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: dec.c 264 2015-10-08 22:28:01Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
Index: othersrc/external/bsd/arfe/dt/dec.h
diff -u othersrc/external/bsd/arfe/dt/dec.h:1.1 othersrc/external/bsd/arfe/dt/dec.h:1.2
--- othersrc/external/bsd/arfe/dt/dec.h:1.1 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/dec.h Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: dec.h,v 1.1 2015/10/08 22:00:56 dyoung Exp $ */
-/* $ARFE: dec.h 262 2015-10-08 21:47:24Z dyoung $ */
+/* $NetBSD: dec.h,v 1.2 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: dec.h 264 2015-10-08 22:28:01Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
Index: othersrc/external/bsd/arfe/dt/macaddr.h
diff -u othersrc/external/bsd/arfe/dt/macaddr.h:1.1 othersrc/external/bsd/arfe/dt/macaddr.h:1.2
--- othersrc/external/bsd/arfe/dt/macaddr.h:1.1 Fri Sep 11 01:50:42 2015
+++ othersrc/external/bsd/arfe/dt/macaddr.h Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: macaddr.h,v 1.1 2015/09/11 01:50:42 dyoung Exp $ */
-/* $ARFE$ */
+/* $NetBSD: macaddr.h,v 1.2 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: macaddr.h 286 2015-11-18 05:09:15Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
Index: othersrc/external/bsd/arfe/dt/dt.c
diff -u othersrc/external/bsd/arfe/dt/dt.c:1.14 othersrc/external/bsd/arfe/dt/dt.c:1.15
--- othersrc/external/bsd/arfe/dt/dt.c:1.14 Wed Sep 23 19:32:34 2015
+++ othersrc/external/bsd/arfe/dt/dt.c Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: dt.c,v 1.14 2015/09/23 19:32:34 dyoung Exp $ */
-/* $ARFE: dt.c 258 2015-09-23 19:31:17Z dyoung $ */
+/* $NetBSD: dt.c,v 1.15 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: dt.c 289 2015-11-19 23:51:04Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
@@ -79,8 +79,11 @@ main(int argc, char **argv)
scratch.dec_op = '-';
scratch.hex_op = '&';
- O = algc(left, match, &scratch, (origin_t){0, 0}, no_expected_lcs,
- &lcs);
+#if 0
+ const size_t nrec = count_records(left, match, &scratch);
+ fprintf(stderr, "%zu records\n", nrec);
+#endif
+ O = findlcs(left, match, &scratch, (origin_t){0, 0}, &lcs);
dbg_printf("lcs = %zu\n", lcs);
printchain(O);
Index: othersrc/external/bsd/arfe/dt/macaddr.c
diff -u othersrc/external/bsd/arfe/dt/macaddr.c:1.4 othersrc/external/bsd/arfe/dt/macaddr.c:1.5
--- othersrc/external/bsd/arfe/dt/macaddr.c:1.4 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/macaddr.c Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-/* $NetBSD: macaddr.c,v 1.4 2015/10/08 22:00:56 dyoung Exp $ */
-/* $ARFE: macaddr.c 260 2015-09-23 19:37:44Z dyoung $ */
+/* $NetBSD: macaddr.c,v 1.5 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: macaddr.c 264 2015-10-08 22:28:01Z dyoung $ */
/*-
* Copyright (c) 2014,2015 David Young <[email protected]>
Index: othersrc/external/bsd/arfe/dt/portability.h
diff -u othersrc/external/bsd/arfe/dt/portability.h:1.2 othersrc/external/bsd/arfe/dt/portability.h:1.3
--- othersrc/external/bsd/arfe/dt/portability.h:1.2 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/portability.h Wed Dec 2 23:39:51 2015
@@ -1,7 +1,8 @@
-/* $NetBSD: portability.h,v 1.2 2015/10/08 22:00:56 dyoung Exp $ */
-/* $ARFE: portability.h 261 2015-09-23 19:39:10Z dyoung $ */
+/* $NetBSD: portability.h,v 1.3 2015/12/02 23:39:51 dyoung Exp $ */
+/* $ARFE: portability.h 281 2015-11-18 04:49:11Z dyoung $ */
#ifndef __NetBSD__
+#define __noinline /* */
#define __aligned(__x) /* */
#define __arraycount(__x) (sizeof(__x) / sizeof(__x[0]))
#endif
Index: othersrc/external/bsd/arfe/dt/rr/daily-output-2-daily-output-5
diff -u othersrc/external/bsd/arfe/dt/rr/daily-output-2-daily-output-5:1.2 othersrc/external/bsd/arfe/dt/rr/daily-output-2-daily-output-5:1.3
--- othersrc/external/bsd/arfe/dt/rr/daily-output-2-daily-output-5:1.2 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/rr/daily-output-2-daily-output-5 Wed Dec 2 23:39:51 2015
@@ -7,7 +7,7 @@ Checking subsystem status:
disks:
Filesystem Size Used Avail %Cap iUsed iAvail %iCap Mount
/dev/wd0a 0G 0G -4M 0% 15 -15 0% /
-/dev/wd0f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
+/dev/wd1f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
Index: othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-2
diff -u othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-2:1.2 othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-2:1.3
--- othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-2:1.2 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-2 Wed Dec 2 23:39:51 2015
@@ -1,13 +1,13 @@
-Uptime: 0: 0AM up -3 day, 0:0, 10 users, load averages: -0.13, -0.04, -0.01
+Uptime: 0: 0AM up -3 days, 0:0, 10 users, load averages: -0.13, -0.04, -0.01
Checking subsystem status:
disks:
Filesystem Size Used Avail %Cap iUsed iAvail %iCap Mount
/dev/wd0a 0G 0G 4M 0% -15 15 0% /
-/dev/wd0f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
+/dev/wd1f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
Index: othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-6
diff -u othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-6:1.2 othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-6:1.3
--- othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-6:1.2 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/rr/daily-output-5-daily-output-6 Wed Dec 2 23:39:51 2015
@@ -7,7 +7,7 @@ Checking subsystem status:
disks:
Filesystem Size Used Avail %Cap iUsed iAvail %iCap Mount
/dev/wd0a 0G 0G 0M 0% 4 -4 0% /
-/dev/wd0f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
+/dev/wd1f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
Index: othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-5
diff -u othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-5:1.2 othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-5:1.3
--- othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-5:1.2 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-5 Wed Dec 2 23:39:51 2015
@@ -7,7 +7,7 @@ Checking subsystem status:
disks:
Filesystem Size Used Avail %Cap iUsed iAvail %iCap Mount
/dev/wd0a 0G 0G 0M 0% -4 4 0% /
-/dev/wd0f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
+/dev/wd1f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
Index: othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-7
diff -u othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-7:1.2 othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-7:1.3
--- othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-7:1.2 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/rr/daily-output-6-daily-output-7 Wed Dec 2 23:39:51 2015
@@ -7,7 +7,7 @@ Checking subsystem status:
disks:
Filesystem Size Used Avail %Cap iUsed iAvail %iCap Mount
/dev/wd0a 0G 0G -1M 0% -1 1 0% /
-/dev/wd0f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
+/dev/wd1f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
Index: othersrc/external/bsd/arfe/dt/rr/daily-output-7-daily-output-6
diff -u othersrc/external/bsd/arfe/dt/rr/daily-output-7-daily-output-6:1.2 othersrc/external/bsd/arfe/dt/rr/daily-output-7-daily-output-6:1.3
--- othersrc/external/bsd/arfe/dt/rr/daily-output-7-daily-output-6:1.2 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/dt/rr/daily-output-7-daily-output-6 Wed Dec 2 23:39:51 2015
@@ -7,7 +7,7 @@ Checking subsystem status:
disks:
Filesystem Size Used Avail %Cap iUsed iAvail %iCap Mount
/dev/wd0a 0G 0G 1M 0% 1 -1 0% /
-/dev/wd0f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
+/dev/wd1f 0G 0G 0G 0% 0 0 0% /home/dyoung/pkgobj
Index: othersrc/external/bsd/arfe/dt/rr/if-re0-if-wm0
diff -u othersrc/external/bsd/arfe/dt/rr/if-re0-if-wm0:1.4 othersrc/external/bsd/arfe/dt/rr/if-re0-if-wm0:1.5
--- othersrc/external/bsd/arfe/dt/rr/if-re0-if-wm0:1.4 Fri Sep 11 01:50:43 2015
+++ othersrc/external/bsd/arfe/dt/rr/if-re0-if-wm0 Wed Dec 2 23:39:51 2015
@@ -1,8 +1,8 @@
- 0: flags= 0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
- capabilities=3f80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx>
- enabled=3f80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx>
+re0: flags= 0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
+ capabilities=3f80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx>
+ enabled=3f80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx>
address: 00:00:00:00:00:00
- media: Ethernet autoselect (e)
- status: aie
+ media: Ethernet autoselect (none)
+ status: carrier
inet 0.0.0.0 netmask 0xff000000 broadcast 0.0.0.0
- inet0 fe80::-25:cff:fe00:a080%0 prefixlen 0 scopeid 0x0
+ inet6 fe80::-25:cff:fe00:a080%re0 prefixlen 0 scopeid 0x0
Index: othersrc/external/bsd/arfe/dt/rr/if-wm0-if-re0
diff -u othersrc/external/bsd/arfe/dt/rr/if-wm0-if-re0:1.4 othersrc/external/bsd/arfe/dt/rr/if-wm0-if-re0:1.5
--- othersrc/external/bsd/arfe/dt/rr/if-wm0-if-re0:1.4 Fri Sep 11 01:50:43 2015
+++ othersrc/external/bsd/arfe/dt/rr/if-wm0-if-re0 Wed Dec 2 23:39:51 2015
@@ -1,8 +1,8 @@
- 0: flags= 0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
- capabilities=3f80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP-2CSUM_Tx>
- enabled=3f80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP-2CSUM_Tx>
+wm0: flags= 0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
+ capabilities=3f80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx>
+ enabled=3f80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx>
address: 00:00:00:00:00:00
- media: Ethernet autoselect (e)
- status: cie
+ media: Ethernet autoselect (duplex)
+ status: active
inet 0.0.0.0 netmask 0xff000000 broadcast 0.0.0.0
- inet0 fe80:: 25:cff:fe00:a080%0 prefixlen 0 scopeid 0x0
+ inet6 fe80:: 25:cff:fe00:a080%wm0 prefixlen 0 scopeid 0x0
Index: othersrc/external/bsd/arfe/dt/rr/ifconfig.0-ifconfig.1
diff -u othersrc/external/bsd/arfe/dt/rr/ifconfig.0-ifconfig.1:1.5 othersrc/external/bsd/arfe/dt/rr/ifconfig.0-ifconfig.1:1.6
--- othersrc/external/bsd/arfe/dt/rr/ifconfig.0-ifconfig.1:1.5 Fri Sep 11 01:50:43 2015
+++ othersrc/external/bsd/arfe/dt/rr/ifconfig.0-ifconfig.1 Wed Dec 2 23:39:51 2015
@@ -1,10 +1,10 @@
wm0: flags= 0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
- capabilities=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
- enabled=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
+ capabilities=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
+ enabled=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
address: 00:0a:0b:cd:01:ef
media: Ethernet autoselect ( 0baseT full-duplex)
status: active
input: 61 packets, 5432 bytes, 3 multicasts
output: 30 packets, 3436 bytes, 0 multicasts
inet 10.0.1.17 netmask 0xffffff00 broadcast 10.0.1.255
- inet0 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
+ inet6 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
Index: othersrc/external/bsd/arfe/dt/rr/ifconfig.0-logger-ifconfig.0
diff -u othersrc/external/bsd/arfe/dt/rr/ifconfig.0-logger-ifconfig.0:1.5 othersrc/external/bsd/arfe/dt/rr/ifconfig.0-logger-ifconfig.0:1.6
--- othersrc/external/bsd/arfe/dt/rr/ifconfig.0-logger-ifconfig.0:1.5 Fri Sep 11 01:50:43 2015
+++ othersrc/external/bsd/arfe/dt/rr/ifconfig.0-logger-ifconfig.0 Wed Dec 2 23:39:51 2015
@@ -1,10 +1,10 @@
wm0: flags=0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
-capabilities=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
-enabled=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
+capabilities=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
+enabled=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
address: 00:0a:0b:cd:01:ef
media: Ethernet autoselect (0baseT full-duplex)
status: active
input: 0 packets, 0 bytes, 0 multicasts
output: 0 packets, 0 bytes, 0 multicasts
inet 10.0.1.17 netmask 0xffffff00 broadcast 10.0.1.255
-inet0 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
+inet6 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
Index: othersrc/external/bsd/arfe/dt/rr/ifconfig.1-ifconfig.0
diff -u othersrc/external/bsd/arfe/dt/rr/ifconfig.1-ifconfig.0:1.5 othersrc/external/bsd/arfe/dt/rr/ifconfig.1-ifconfig.0:1.6
--- othersrc/external/bsd/arfe/dt/rr/ifconfig.1-ifconfig.0:1.5 Fri Sep 11 01:50:43 2015
+++ othersrc/external/bsd/arfe/dt/rr/ifconfig.1-ifconfig.0 Wed Dec 2 23:39:51 2015
@@ -1,10 +1,10 @@
wm0: flags= 0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
- capabilities=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
- enabled=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
+ capabilities=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
+ enabled=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
address: 00:0a:0b:cd:01:ef
media: Ethernet autoselect ( 0baseT full-duplex)
status: active
input: -61 packets, -5432 bytes, -3 multicasts
output: -30 packets, -3436 bytes, 0 multicasts
inet 10.0.1.17 netmask 0xffffff00 broadcast 10.0.1.255
- inet0 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
+ inet6 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
Index: othersrc/external/bsd/arfe/dt/rr/logger-ifconfig.0-ifconfig.0
diff -u othersrc/external/bsd/arfe/dt/rr/logger-ifconfig.0-ifconfig.0:1.5 othersrc/external/bsd/arfe/dt/rr/logger-ifconfig.0-ifconfig.0:1.6
--- othersrc/external/bsd/arfe/dt/rr/logger-ifconfig.0-ifconfig.0:1.5 Fri Sep 11 01:50:43 2015
+++ othersrc/external/bsd/arfe/dt/rr/logger-ifconfig.0-ifconfig.0 Wed Dec 2 23:39:51 2015
@@ -1,10 +1,10 @@
wm0: flags=0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
-capabilities=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
-enabled=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
+capabilities=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
+enabled=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
address: 00:0a:0b:cd:01:ef
media: Ethernet autoselect (0baseT full-duplex)
status: active
input: 0 packets, 0 bytes, 0 multicasts
output: 0 packets, 0 bytes, 0 multicasts
inet 10.0.1.17 netmask 0xffffff00 broadcast 10.0.1.255
-inet0 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
+inet6 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
Index: othersrc/external/bsd/arfe/dt/rr/wm0-a-wm0-b
diff -u othersrc/external/bsd/arfe/dt/rr/wm0-a-wm0-b:1.5 othersrc/external/bsd/arfe/dt/rr/wm0-a-wm0-b:1.6
--- othersrc/external/bsd/arfe/dt/rr/wm0-a-wm0-b:1.5 Fri Sep 11 01:50:43 2015
+++ othersrc/external/bsd/arfe/dt/rr/wm0-a-wm0-b Wed Dec 2 23:39:51 2015
@@ -1,12 +1,12 @@
wm0: flags= 0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
- capabilities=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
- enabled=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
+ capabilities=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
+ enabled=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
address: 00:0a:0b:cd:01:ef
media: Ethernet autoselect ( 0baseT full-duplex)
status: active
input: 112 packets, 11380 bytes, 11 multicasts
output: 60 packets, 11440 bytes, 0 multicasts
inet 10.0.1.17 netmask 0xffffff00 broadcast 10.0.1.255
- inet0 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
+ inet6 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
Index: othersrc/external/bsd/arfe/dt/rr/wm0-b-wm0-a
diff -u othersrc/external/bsd/arfe/dt/rr/wm0-b-wm0-a:1.5 othersrc/external/bsd/arfe/dt/rr/wm0-b-wm0-a:1.6
--- othersrc/external/bsd/arfe/dt/rr/wm0-b-wm0-a:1.5 Fri Sep 11 01:50:43 2015
+++ othersrc/external/bsd/arfe/dt/rr/wm0-b-wm0-a Wed Dec 2 23:39:51 2015
@@ -1,12 +1,12 @@
wm0: flags= 0<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 0
- capabilities=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
- enabled=2bf80<TSO0,IP0CSUM_Rx,IP0CSUM_Tx,TCP0CSUM_Rx,TCP0CSUM_Tx,UDP0CSUM_Rx,UDP0CSUM_Tx,TCP0CSUM_Tx,UDP0CSUM_Tx>
+ capabilities=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
+ enabled=2bf80<TSO4,IP4CSUM_Rx,IP4CSUM_Tx,TCP4CSUM_Rx,TCP4CSUM_Tx,UDP4CSUM_Rx,UDP4CSUM_Tx,TCP6CSUM_Tx,UDP6CSUM_Tx>
address: 00:0a:0b:cd:01:ef
media: Ethernet autoselect ( 0baseT full-duplex)
status: active
input: -112 packets, -11380 bytes, -11 multicasts
output: -60 packets, -11440 bytes, 0 multicasts
inet 10.0.1.17 netmask 0xffffff00 broadcast 10.0.1.255
- inet0 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
+ inet6 fe80::20a:bff:fecd:1ef%wm0 prefixlen 0 scopeid 0x1
Index: othersrc/external/bsd/arfe/dt/rr/netstat-s.0-netstat-s.1
diff -u othersrc/external/bsd/arfe/dt/rr/netstat-s.0-netstat-s.1:1.1 othersrc/external/bsd/arfe/dt/rr/netstat-s.0-netstat-s.1:1.2
--- othersrc/external/bsd/arfe/dt/rr/netstat-s.0-netstat-s.1:1.1 Mon Aug 10 21:10:59 2015
+++ othersrc/external/bsd/arfe/dt/rr/netstat-s.0-netstat-s.1 Wed Dec 2 23:39:51 2015
@@ -207,7 +207,7 @@ IPsec ipcomp:
IPcomp histogram:
0 ipcomp input bytes
0 ipcomp output bytes
-ip0:
+ip6:
91 total packets received
0 with size smaller than minimum
0 with data size < data length
@@ -237,7 +237,7 @@ ip0:
hop by hop: 0
TCP: 89
UDP: 0
- ICMP0: 2
+ ICMP6: 2
Mbuf statistics:
0 one mbufs
two or more mbuf:
@@ -250,9 +250,9 @@ ip0:
0 failures of source address selection
91 forward cache hit
0 forward cache miss
-icmp0:
- 0 calls to icmp0_error
- 0 errors not generated because old message was icmp0 or so
+icmp6:
+ 0 calls to icmp6_error
+ 0 errors not generated because old message was icmp6 or so
0 errors not generated because of rate limitation
Output packet histogram:
multicast listener report: 0
@@ -292,7 +292,7 @@ icmp0:
0 router advertisement routes dropped
0 bad redirect messages
0 path MTU changes
-tcp0:
+tcp6:
52 packets sent
48 data packets ( 6672 bytes)
0 data packets ( 0 bytes) retransmitted
@@ -356,7 +356,7 @@ tcp0:
0 successful ECN handshakes
0 packets with ECN CE bit
0 packets ECN ECT(0) bit
-udp0:
+udp6:
0 datagrams received
0 with incomplete header
0 with bad data length field
@@ -450,7 +450,7 @@ IPsec ipcomp:
IPcomp histogram:
0 ipcomp input bytes
0 ipcomp output bytes
-pim0:
+pim6:
0 messages received
0 messages received with too few bytes
0 messages received with bad checksum
@@ -458,7 +458,7 @@ pim0:
0 registers received
0 bad registers received
0 registers sent
-rip0:
+rip6:
0 messages received
0 checksum calculations on inbound
0 messages with bad checksum
Index: othersrc/external/bsd/arfe/dt/rr/netstat-s.1-netstat-s.0
diff -u othersrc/external/bsd/arfe/dt/rr/netstat-s.1-netstat-s.0:1.1 othersrc/external/bsd/arfe/dt/rr/netstat-s.1-netstat-s.0:1.2
--- othersrc/external/bsd/arfe/dt/rr/netstat-s.1-netstat-s.0:1.1 Mon Aug 10 21:10:59 2015
+++ othersrc/external/bsd/arfe/dt/rr/netstat-s.1-netstat-s.0 Wed Dec 2 23:39:51 2015
@@ -207,7 +207,7 @@ IPsec ipcomp:
IPcomp histogram:
0 ipcomp input bytes
0 ipcomp output bytes
-ip0:
+ip6:
-91 total packets received
0 with size smaller than minimum
0 with data size < data length
@@ -237,7 +237,7 @@ ip0:
hop by hop: 0
TCP: -89
UDP: 0
- ICMP0: -2
+ ICMP6: -2
Mbuf statistics:
0 one mbufs
two or more mbuf:
@@ -250,9 +250,9 @@ ip0:
0 failures of source address selection
-91 forward cache hit
0 forward cache miss
-icmp0:
- 0 calls to icmp0_error
- 0 errors not generated because old message was icmp0 or so
+icmp6:
+ 0 calls to icmp6_error
+ 0 errors not generated because old message was icmp6 or so
0 errors not generated because of rate limitation
Output packet histogram:
multicast listener report: 0
@@ -292,7 +292,7 @@ icmp0:
0 router advertisement routes dropped
0 bad redirect messages
0 path MTU changes
-tcp0:
+tcp6:
-52 packets sent
-48 data packets ( -6672 bytes)
0 data packets ( 0 bytes) retransmitted
@@ -356,7 +356,7 @@ tcp0:
0 successful ECN handshakes
0 packets with ECN CE bit
0 packets ECN ECT(0) bit
-udp0:
+udp6:
0 datagrams received
0 with incomplete header
0 with bad data length field
@@ -450,7 +450,7 @@ IPsec ipcomp:
IPcomp histogram:
0 ipcomp input bytes
0 ipcomp output bytes
-pim0:
+pim6:
0 messages received
0 messages received with too few bytes
0 messages received with bad checksum
@@ -458,7 +458,7 @@ pim0:
0 registers received
0 bad registers received
0 registers sent
-rip0:
+rip6:
0 messages received
0 checksum calculations on inbound
0 messages with bad checksum
Index: othersrc/external/bsd/arfe/dt/rr/quack123quack-quack456quack
diff -u othersrc/external/bsd/arfe/dt/rr/quack123quack-quack456quack:1.1 othersrc/external/bsd/arfe/dt/rr/quack123quack-quack456quack:1.2
--- othersrc/external/bsd/arfe/dt/rr/quack123quack-quack456quack:1.1 Mon Aug 10 21:10:59 2015
+++ othersrc/external/bsd/arfe/dt/rr/quack123quack-quack456quack Wed Dec 2 23:39:51 2015
@@ -1 +0,0 @@
-quack333quack
Index: othersrc/external/bsd/arfe/dt/rr/quack456quack-quack123quack
diff -u othersrc/external/bsd/arfe/dt/rr/quack456quack-quack123quack:1.1 othersrc/external/bsd/arfe/dt/rr/quack456quack-quack123quack:1.2
--- othersrc/external/bsd/arfe/dt/rr/quack456quack-quack123quack:1.1 Mon Aug 10 21:10:59 2015
+++ othersrc/external/bsd/arfe/dt/rr/quack456quack-quack123quack Wed Dec 2 23:39:51 2015
@@ -1 +0,0 @@
-quack-333quack
Index: othersrc/external/bsd/arfe/dt/rr/quackabequack-quackdariaquack
diff -u othersrc/external/bsd/arfe/dt/rr/quackabequack-quackdariaquack:1.1 othersrc/external/bsd/arfe/dt/rr/quackabequack-quackdariaquack:1.2
--- othersrc/external/bsd/arfe/dt/rr/quackabequack-quackdariaquack:1.1 Mon Aug 10 21:10:59 2015
+++ othersrc/external/bsd/arfe/dt/rr/quackabequack-quackdariaquack Wed Dec 2 23:39:51 2015
@@ -1 +0,0 @@
-quack<word>quack
Index: othersrc/external/bsd/arfe/dt/rr/quackdariaquack-quackabequack
diff -u othersrc/external/bsd/arfe/dt/rr/quackdariaquack-quackabequack:1.1 othersrc/external/bsd/arfe/dt/rr/quackdariaquack-quackabequack:1.2
--- othersrc/external/bsd/arfe/dt/rr/quackdariaquack-quackabequack:1.1 Mon Aug 10 21:10:59 2015
+++ othersrc/external/bsd/arfe/dt/rr/quackdariaquack-quackabequack Wed Dec 2 23:39:51 2015
@@ -1 +0,0 @@
-quack<word>quack
Index: othersrc/external/bsd/arfe/it/Makefile
diff -u othersrc/external/bsd/arfe/it/Makefile:1.5 othersrc/external/bsd/arfe/it/Makefile:1.6
--- othersrc/external/bsd/arfe/it/Makefile:1.5 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/it/Makefile Wed Dec 2 23:39:51 2015
@@ -2,7 +2,7 @@ NOMAN=
.include <bsd.own.mk>
PROG=it
-SRCS+=core.c dec.c hex.c ipv4.c it.c macaddr.c
+SRCS+=core.c dec.c hex.c ipv4.c it.c macaddr.c sym.c
#CPPFLAGS+=-DHB_DEBUG
CPPFLAGS+=-I$(.CURDIR)/../dt
DBG+=-g -O3
@@ -12,11 +12,6 @@ DBG+=-g -O3
CFLAGS+=-std=c99
WARNS=5
-tags: $(SRCS) $(INCS)
- @rm -f $(.OBJDIR)/tags
- @ctags -atwd $(.ALLSRC)
- @sort -o $(.OBJDIR)/tags $(.OBJDIR)/tags
-
.PATH: $(.CURDIR)/../dt
.include <bsd.prog.mk>
Index: othersrc/external/bsd/arfe/it/README
diff -u othersrc/external/bsd/arfe/it/README:1.8 othersrc/external/bsd/arfe/it/README:1.9
--- othersrc/external/bsd/arfe/it/README:1.8 Wed Sep 23 19:32:34 2015
+++ othersrc/external/bsd/arfe/it/README Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-$ARFE: README 258 2015-09-23 19:31:17Z dyoung $
-$NetBSD: README,v 1.8 2015/09/23 19:32:34 dyoung Exp $
+$ARFE: README 264 2015-10-08 22:28:01Z dyoung $
+$NetBSD: README,v 1.9 2015/12/02 23:39:51 dyoung Exp $
IT---(i)ntegrate (t)ext---is a variation on DT that adds decimal numbers
instead of subtracts, and bitwise-ORs hexadecimal numbers instead of
Index: othersrc/external/bsd/arfe/it/it.c
diff -u othersrc/external/bsd/arfe/it/it.c:1.1 othersrc/external/bsd/arfe/it/it.c:1.2
--- othersrc/external/bsd/arfe/it/it.c:1.1 Tue Sep 22 01:12:09 2015
+++ othersrc/external/bsd/arfe/it/it.c Wed Dec 2 23:39:51 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: it.c,v 1.1 2015/09/22 01:12:09 dyoung Exp $ */
+/* $NetBSD: it.c,v 1.2 2015/12/02 23:39:51 dyoung Exp $ */
/* $ARFE: dt.c 247 2015-09-14 02:52:57Z dyoung $ */
/*-
@@ -79,8 +79,7 @@ main(int argc, char **argv)
scratch.dec_op = '+';
scratch.hex_op = '|';
- O = algc(left, match, &scratch, (origin_t){0, 0}, no_expected_lcs,
- &lcs);
+ O = findlcs(left, match, &scratch, (origin_t){0, 0}, &lcs);
dbg_printf("lcs = %zu\n", lcs);
printchain(O);
Index: othersrc/external/bsd/arfe/tt/Makefile
diff -u othersrc/external/bsd/arfe/tt/Makefile:1.3 othersrc/external/bsd/arfe/tt/Makefile:1.4
--- othersrc/external/bsd/arfe/tt/Makefile:1.3 Thu Oct 8 22:00:56 2015
+++ othersrc/external/bsd/arfe/tt/Makefile Wed Dec 2 23:39:51 2015
@@ -2,7 +2,7 @@ NOMAN=
.include <bsd.own.mk>
PROG=tt
-SRCS+=core.c dec.c hex.c ipv4.c macaddr.c tt.c
+SRCS+=core.c dec.c hex.c ipv4.c macaddr.c sym.c tt.c
#CPPFLAGS+=-DHB_DEBUG
CPPFLAGS+=-DHB_ASSERT
CPPFLAGS+=-I$(.CURDIR)/../dt
@@ -13,11 +13,6 @@ DBG+=-g -O3
CFLAGS+=-std=c99
WARNS=5
-tags: $(SRCS) $(INCS)
- @rm -f $(.OBJDIR)/tags
- @ctags -atwd $(.ALLSRC)
- @sort -o $(.OBJDIR)/tags $(.OBJDIR)/tags
-
test: ${.OBJDIR}/${PROG}
@OBJDIR=${.OBJDIR} sh testit.sh
Index: othersrc/external/bsd/arfe/tt/README
diff -u othersrc/external/bsd/arfe/tt/README:1.5 othersrc/external/bsd/arfe/tt/README:1.6
--- othersrc/external/bsd/arfe/tt/README:1.5 Wed Sep 23 19:32:34 2015
+++ othersrc/external/bsd/arfe/tt/README Wed Dec 2 23:39:51 2015
@@ -1,5 +1,5 @@
-$ARFE: README 258 2015-09-23 19:31:17Z dyoung $
-$NetBSD: README,v 1.5 2015/09/23 19:32:34 dyoung Exp $
+$ARFE: README 264 2015-10-08 22:28:01Z dyoung $
+$NetBSD: README,v 1.6 2015/12/02 23:39:51 dyoung Exp $
TT---(t)ransform (t)ext---transforms its input based on a
match/transform-template pair that exemplifies the changes that should
Index: othersrc/external/bsd/arfe/tt/tt.c
diff -u othersrc/external/bsd/arfe/tt/tt.c:1.2 othersrc/external/bsd/arfe/tt/tt.c:1.3
--- othersrc/external/bsd/arfe/tt/tt.c:1.2 Wed Sep 23 19:32:34 2015
+++ othersrc/external/bsd/arfe/tt/tt.c Wed Dec 2 23:39:51 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: tt.c,v 1.2 2015/09/23 19:32:34 dyoung Exp $ */
+/* $NetBSD: tt.c,v 1.3 2015/12/02 23:39:51 dyoung Exp $ */
/* $ARFE$ */
/*-
@@ -82,8 +82,7 @@ main(int argc, char **argv)
transform = file_to_slice(argv[3]);
cloccs_init(&Toccs, transform);
- O = algc(left, match, &scratch, (origin_t){0, 0}, no_expected_lcs,
- &lcs);
+ O = findlcs(left, match, &scratch, (origin_t){0, 0}, &lcs);
dbg_printf("lcs = %zu\n", lcs);
emit_transformed_text(O, &scratch.Boccs, &Toccs, match, transform);
Index: othersrc/external/bsd/arfe/tt/tests/1/match
diff -u othersrc/external/bsd/arfe/tt/tests/1/match:1.1 othersrc/external/bsd/arfe/tt/tests/1/match:1.2
--- othersrc/external/bsd/arfe/tt/tests/1/match:1.1 Fri Sep 11 01:52:20 2015
+++ othersrc/external/bsd/arfe/tt/tests/1/match Wed Dec 2 23:39:51 2015
@@ -4,6 +4,6 @@ wm0: flags=8843<UP,BROADCAST,RUNNING,SIM
address: 00:0a:0b:cd:01:ef
media: Ethernet autoselect (1000baseT full-duplex)
status: active
- input: 745177 packets, 455120099 bytes, 74377 multicasts
+ input: 745177 packets, 455120099 bytes, 0 multicasts
output: 540500 packets, 121290742 bytes, 253 multicasts
inet 10.0.1.17 netmask 0xffffff00 broadcast 10.0.1.255
Index: othersrc/external/bsd/arfe/tt/tests/1/transform
diff -u othersrc/external/bsd/arfe/tt/tests/1/transform:1.1 othersrc/external/bsd/arfe/tt/tests/1/transform:1.2
--- othersrc/external/bsd/arfe/tt/tests/1/transform:1.1 Fri Sep 11 01:52:20 2015
+++ othersrc/external/bsd/arfe/tt/tests/1/transform Wed Dec 2 23:39:51 2015
@@ -1,3 +1,3 @@
wm0
- 455120099 input bytes in 745177 packets (74377 multicast)
+ 455120099 input bytes in 745177 packets (0 multicast)
121290742 output bytes in 540500 packets (253 multicast)