[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Aggregate Attributes



At 04:17 PM 9/20/2001, rpresuhn-lists@dorothy.bmc.com wrote:
>If C is non-divisible, that would imply (to me at least) that
>one would no longer be able to meaningfully access just a or b.

I suppose I'm a little dense, but I find it useful to take general 
statements and try various instantiations of them to make sure I understand 
them.

I propose that there are two obvious cases for aggregation of attributes. 
One, exemplified by the {InetAddressType, InetAddress, 
InetAddressPrefixLength} "tuple" in the INET-ADDRESS-MIB, is a set of 
attributes which together describe a single thing - in this case, an 
internet address or prefix. Another is something much like an SNMP Row or 
Entry: when I want to know what a specific OSPF LSA contains, for example, 
I need to obtain all of the attributes in a given ospfLsdbEntry.

The first example can be argued as indivisible, but I think that falls 
apart pretty quickly. That may be due to "creeping featurism" in its 
design. As the INET-ADDRESS-MIB started out, there was a desire to be able 
to represent IPv4 or IPv6 addresses in the same TC, so that one could 
usefully use the same MIBs for either IPv4 or IPv6. This is essentially 
what was published as RFC 2851. Further work, in 
draft-ietf-ops-rfc2851-update-nn.txt, has expanded that to include

  - the prefix length, so that we can usefully talk about an "IP prefix",
  - zoned addresses, so that a NAT device can talk about which interface
    a given address properly lives on, and
  - DNS names (overlooking the fact that a name and an address are wildly
    different things, a distinction which has made the enum debate with the
    ITU very difficult, as although they have very clear definitions here
    they have a hard time distinguishing between +1-805-964-8007, which is
    a single telephone, and +1-800-484-3667, which is a logical name for the
    same telephone)

I'd happily say that an IP prefix has a type, a length, and a value; I'd 
even say that for zoned addresses, and omit the zone from the length. I'd 
happily say that an IPv4 Address is an instance of an IPv4 Prefix in which 
the Prefix Length is 32 bits; that would get some resistance from folks who 
went on to try to interpret certain MIBs in cases where the Prefix Length 
might be set to something else. When RMON, for example, reports that it 
received a packet from address <foo>, what does it mean for the prefix 
length to be 27 bits?

I'm not at all certain what the prefix length of a DNS name is, especially 
given that it might have both IPv4 and IPv6 instantiations.

Hence, when I look at the InetAddress tuple, I find it hard to say that it 
is indivisible. Its type and value are certainly indivisible. However, the 
prefix length is sometimes indivisible from it, when I am really talking 
about an IP Prefix, and at other times it is nonsensical.

Going on to what SNMP calls "rows", and which are in fact sets of 
attributes describing something bigger, the concept of indivisibility is 
further bothersome. An OSPF LSA is at least partly indivisible, in the 
sense that you really don't know much about any of the parts unless you can 
grasp the whole. The "whole", however, may be a generic link state database 
entry (a generic entry in a database), or a specific link state 
advertisement (something specific that the router advertised). In many 
cases, the single OCTET STRING which contains the content of the LSA is 
unimportant - if you want to know whether everyone has the same LSA and if 
not who has a different one, this is obtainable from the common subset, and 
the content portion doesn't need to be accessed. OSPF itself uses that 
fact, in that when routers are synchronizing databases they send the LSA 
headers to each other and when necessary request transmission of the entire 
LSA. So at least part of the entry, the content-specific part, is indeed 
"divisible" from the rest.

However, when sending the things around, the fact that we might use the 
attributes in different collections is not a particularly good argument for 
making the protocol fully name each individual attribute, as is done in 
SNMP. It is perfectly reasonable to send an aggregate object (such as an 
OSPF LSDB Entry, or an Interface Entry) and itemize the attributes the 
transmission carries using short form names, of the form

         { ospfLsdbEntry
                 { ospfLsdbAreaId, value }
                 { ospfLsdbType, value }
                 { ospfLsdbLsid, value }
                 { ospfLsdbRouterId, value }
                 { ospfLsdbSequence, value }
                 { ospfLsdbAge, value }
                 { ospfLsdbChecksum, value }
                 { ospfLsdbAdvertisement, really large value }
         }

where each of the attribute names is a single integer and the associated 
value is whatever it needs to be. This gets dicey when attributes from 
other tables (ifIndex being a very common example) are pulled in as index 
variables, and argues for the inclusion of an attribute which is "the value 
of ifIndex [or whatever] for this entry"; it could also argue that the 
attribute names need to have the option of being a full OID.

So I think the concept of "indivisibility" isn't all that useful here. The 
obvious examples are indeed divisible, and we have been accessing them 
individually as a standard practice for some time. The thing that is 
important about them is not that, but that we want to be able to 
efficiently move them around, and that we can in fact usefully talk about 
them as separable attributes of a larger object rather than as individual 
items of information.