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