1cp Makeargs.debug Makeargs
2gdb --directory=$A/src/cmd/dss --directory=$A/src/lib/libdss --directory=$A/src/lib/libast $A/bin/dss core.*
3
4dss provides low level sequential ops that declarative sql typically decomposes to
5
6what happens when the stream hits the db
7
8CX_STRING|CX_SIZE a hack?
9
10convert foo text to binary and compress using the preferred method:
11
12	dss -x foo-txt '{flat foo-bin}|{compress}'
13
14sum f3..fn by f1 and f2
15
16	dss '{sum --by f1 --by f2 f3 ... fn}'
17
18dss -xfoo option to print canonical fixed record size
19
20dss flat add cdb sized records
21
22<DSS>
23	<FIELD>
24		<NAME>name</>
25		<CONSTRAINT>name</>
26		<CONSTRAINT>
27			<NAME></>
28			<MIN>min</>
29		</>
30	</>
31</>
32
33cx needs array support
34cxmap() should check for duplicate/clash values in item list
35and between parts if possible
36
37======================================================
38http://www.research.att.com/~griffin/bgpdump/README.txt
39
40field name aliases
41
42cxparse
43	, not handled right
44	; not handled right
45
46rfc 2280
47
48====================================================
49Proposal for prefix/address set manipulation
50====================================================
51
52We have two distinct types of sets : prefix sets
53and address sets.  Prefix sets are sets of CIDR
54prefixes, while address sets are sets of IP addresses.
55I'll use the following conventions:
56
57A, B, C : prefix sets
58
59X, Y, Z : address sets
60
61Set operations
62==============
63Set operations defined on both (overloaded)
64prefix and address sets.  Each must have
65operands of the same type, and each preserves that type.
66
67union : A+B, X+Y
68intersection : A&B, X&Y
69difference : A-B, X-Y
70
71The negation operator, ~X, is only defined on address sets.
72
73[Note : we could define ~A in the obvious way, but the space
74of all prefixes does not seem to be an interesting one.]
75
76
77Constructors
78==================
79
801) prefix_set {p1 p2 ... pn}   (n>=0, where each pi is a CIDR block)
812) address_set {a1 a2 ... an}   (n>=0, where each ai is an IP address)
82
83
84Basic conversions
85=================
86
87addresses(A) = X
88  X is the address set representing the IP addresses
89  covered by the prefixes in A.
90
91prefixes(X) = A
92  A is the minimal prefix cover of the address space of X.
93
94
95Operations on prefix sets
96=========================
97
98supernets(A) = B
99  B is the subset of A that covers the same space
100  (that is, addresses(supernets(A)) == addresses(A)), but no prefix
101  of B is a subnet of another prefix of B.
102
103longest(A, B) = C
104  C is the subset of prefixes A which are the longest
105  matches for prefixes in B.  That is, p1 is in C iff
106  p1 is in A and there exist p2 in B such that p1 "contains" p2
107  and there is no p3 in A such that p1 contains p3 and p3 contains p2.
108  (Note : it could be that p1 == p2.)
109
110Here are some useful abbreviations :
111
112min_cover(A) = B
113  B is the minimum prefix cover required to cover the same space
114  as covered by A.
115  Is abbreviation for prefixes(addresses(A)).
116
117shortest(A, B) = C
118  C is the subset of prefixes A that are the shortest
119  matches for some prefix in B.
120  An abbreviation for longest(supernets(A), B).
121
122subnets(A) = B
123  B is the set of prefixes in B that are properly
124  contained in other prefixes of B.
125  An abbreviation of A - supernets(A).
126
127
128Operations for extracting prefix sets from BGP tables
129=====================================================
130
131  ... like current, except prefix sets get extracted ...
132
133=================================================
134Some open questions.
135=================================================
136
1370) Are there other basic operators required?
138
1391) Should we add another set type : range set?
140
1412) Do we want to have a set type : route set?
142   This would be a set of BGP routes, perhaps
143   with additional attributes (like timestamp,
144   router name, AS of router).
145