dss provides low level sequential ops that declarative sql typically decomposes to
what happens when the stream hits the db
CX_STRING|CX_SIZE a hack?
convert foo text to binary and compress using the preferred method:
dss -x foo-txt '{flat foo-bin}|{compress}'
dss '{sum --by f1 --by f2 f3 ... fn}'
dss -xfoo option to print canonical fixed record size
dss flat add cdb sized records
and between parts if possible
======================================================
====================================================
====================================================
We have two distinct types of sets : prefix sets
and address sets. Prefix sets are sets of CIDR
prefixes, while address sets are sets of IP addresses.
I'll use the following conventions:
Set operations defined on both (overloaded)
prefix and address sets. Each must have
operands of the same type, and each preserves that type.
The negation operator, ~X, is only defined on address sets.
[Note : we could define ~A in the obvious way, but the space
of all prefixes does not seem to be an interesting one.]
1) prefix_set {p1 p2 ... pn} (n>=0, where each pi is a CIDR block)
2) address_set {a1 a2 ... an} (n>=0, where each ai is an IP address)
X is the address set representing the IP addresses
covered by the prefixes in A.
A is the minimal prefix cover of the address space of X.
Operations on prefix sets
=========================
B is the subset of A that covers the same space
(that is, addresses(supernets(A)) == addresses(A)), but no prefix
of B is a subnet of another prefix of B.
C is the subset of prefixes A which are the longest
matches for prefixes in B. That is, p1 is in C iff
p1 is in A and there exist p2 in B such that p1 "contains" p2
and there is no p3 in A such that p1 contains p3 and p3 contains p2.
(Note : it could be that p1 == p2.)
Here are some useful abbreviations :
B is the minimum prefix cover required to cover the same space
Is abbreviation for prefixes(addresses(A)).
C is the subset of prefixes A that are the shortest
matches for some prefix in B.
An abbreviation for longest(supernets(A), B).
B is the set of prefixes in B that are properly
contained in other prefixes of B.
An abbreviation of A - supernets(A).
Operations for extracting prefix sets from BGP tables
=====================================================
... like current, except prefix sets get extracted ...
=================================================
=================================================
0) Are there other basic operators required?
1) Should we add another set type : range set?
2) Do we want to have a set type : route set?
This would be a set of BGP routes, perhaps
with additional attributes (like timestamp,
router name, AS of router).