Re: [IPFIX] WGLC for draft-ietf-ipfix-mib-variable-export-05
Juergen Schoenwaelder <[email protected]> Fri, 18 Apr 2014 18:21:17 +0200
| Newsgroups | gmane.ietf.ipfix |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Apr 15, 2014 at 12:01:11PM +1200, Nevil Brownlee wrote:
>
> Hi all:
>
> Sorry to be a little slow with this - the dust has settled from IETF-89,
> and I've almost managed to catch up.
>
> The WG Last Call for our MIB Variable Export draft starts now,
> and will end on Wednesday, 30 April.
>
> Please read it, and - better still - post reviews of it to the IPFIX list!
>
I have reviewed the document and I believe it is not ready. The main
points:
- Terminology needs to be aligned with SMIv2
- I spotted several errors in the examples
- Major issues with the IE definitions in section 10
- I also believe the introductionary text needs to improve.
/js
I have reviewed draft-ietf-ipfix-mib-export-05 and I think it is not
ready and requires improvements.
1) The introduction contains details of the solution. I think it
should instead contain the motivation and the architectural model
currently in section 2. The new introduction should then be
followed by a terminology section before an overview of the
solution is provided (so that the terminology is defined). This is
primarily text reorganization.
2) I have trouble to understand the Figure "Architectural Overview".
I think this should be removed. Figure 4 is more useful and it is
at the right place in the document.
3) I have terminology issues in several places. For example, RFC 2578
uses the term 'columnar object' for what this document seems to
call 'indexed object'. Why is it useful to call Flow Records Data
Records? Using two terms for the same thing may just adds potential
for confusion. I also think more SMIv2 terms must be imported, such
as MIB module, MIB object, columnar object, ...
4) There is a statement that providing index information for columnar
objects is optional. I have some difficulty to understand why this
is useful. What does "a MIB object is used purely as type
information" mean? How can an exporting process not have access to
index information of a columnar object?
5) The terminology sections says a "MIB Object Identifier" is an ASCII
character string of a certain format but it seems later a BER
encoded representation is used for mibObjectIdentifier. This seems
inconsistent.
6) "exporting a value from a MIB does not imply that the SNMP process
on the device supports that MIB"
Proper wording would be something like this:
"exporting a value of a MIB object defined in a certain MIB module
does not imply that the SNMP prcess on the device supports that
MIB module"
Similarly, "exporting MIBs in IPFIX" should be "exporting values of
MIB objects".
The paragraph on page 9 is also the first occurance of the term
"MIB Field" - without a clear definition what this means.
7) This text needs rewrite:
Since these values are statically defined in the MIB they are not
expected to change frequently. However the additional information
about the MIB may help a Collecting Process that does not have access
to the MIB.
NEW
Type information is statically defined in a MIB module, it is not
expected to change. However, the additional information about the
MIB Object may help a Collecting Process that does not have access
to the MIB module.
8) Is it mibTypeOption of mibSubTypeOption? Both words are used, or
are these different things?
9) I fail to parse/understand these statements:
Forf each of these the options this draft specifies exactly which
mibObjectValue to use.
[...]
If the SYNTAX clause contains a Textual Convention or Subtyping the
mibObjectSyntax Information Element SHOULD be used to export this
detail to the Collecting Process.
10) It escapes me how mibObjectValueSequence and mibObjectValueTable
are used / encoded. And why does the first one use an ASN.1 type
name while the second uses an SMIv2 conceptual term? This seems
inconsistent, either call them mibObjectValueSequence and
mibObjectValueSequenceOf or mibObjectValueRow and
mibObjectValueTable.
11) This text is unclear and needs a rewrite. I think I understand
what you are trying to communicate but the wording needs
improvements. (And it is a MIB module here, not a MIB.)
This holds true even if the data carried inside the mibObjectValue or
mibObjectIdentifier may be related to an enterprise specific MIB.
The OID itself encodes if the Object is in an Enterprise specific MIB
Module.
12) What does "Field Length (mib)" stand for? Is there anything
special or is this just a plain normal "Field Length"? If so, I
would rather remove the "(mib)" annotation.
13) I suggest to replace "more information about MIB indexing, extra
data from the MIB" with "additional information about the MIB
Object definition"
14) Rewrite "... a reference to a MIB that ..." - I think you mean a
MIB Object.
Rewrite "may not have access to the MIB" -> "may not have access to
the MIB module".
And then I am getting lost here:
[..] It also allows the IPFIX Field Types to be extended with
any MIB Variable already defined purely through IPFIX.
It is not clear what is communicated here.
15) Section 4.4.6 has more inaccurate usages of the term "MIB" but
more important, I wonder what actually the OID is that is being
shipped in mibObjectIdentifier. Is it the OID assigned to the
object type definition or is it the OID of the instance of an
object type? Have I overlooked where this is clearly defined?
16) Terminology: "MIB Sequence Object's INDEX clause" -> "INDEX
clause of a conceptual row object".
17) s/then the MIB context MUST/then the context MUST/
MIB context is not a defined term. There are only SNMP contexts.
(Perhaps they should have been MIB contexts but this is a
different story.)
18) s/the exported to export/the exporter to export/
19) Section 4.8 is rather confusing, primarily because the terminology
is not aligned with SMIv2 terminology. This affects almost all
sentences. In SMIv2, terms like "MIB SEQUENCE Objects" do not
exist. SMIv2 calls this a 'conceptual row object'. This section
needs to be rewritten to align with SMIv2 terminology (this means
getting rid of almost all occurrences of 'sequence' (in any
capitalization)). Terms such as "full OID" are ambiguous unless
you say what the OID is supposed to refer to.
The first item in 4.8 talks about ingoring the indexing of
columnar objects and later says "a columnar object may be used
purely as a data type. I have a difficulty to understand how that
would be useful.
On page 33, a paragraph refers to section 7.7. of RFC 2578 and I
am confused what it tries to say here. So far, I assumed that the
OIDs all refer to columnar objects or conceptual row objects and
include no instance identifiers.
I do not understand the last paragraph before section 5.
20) The first enumerated item in Section 5.1 says "flowStartSeconds
from [RFC7012]" but then RFC 7012 does not define this anymore
(but its predecessor RFC 5102 did). Since Section 5.2 has the same
text, the same issue needs to be resolved there.
21) Sections 5.1. and 5.2 both contain references to themselfs "(see
Section 5.x)" which does not seem to make much sense. Last sentence
on page 38: s/this identical/this is identical/
22) I looked up the definition of cpmCPUTotal1minRev and it turns out
that this is a columnar object (which makes sense since you can
have multiple CPUs). Since you do not export information about
which CPU the load value is coming from, how useful is the
information and does this make a good example?
23) Section 5.3. needs a title change. It is about exporting a subset
of a conceptual row. Perhaps something like this:
5.3. Exporting a Conceptual Row: The OSPF Neighbor Sequence
The last sentence on page 40 refers to Table 7 but I assume you
mean Table 5.
24) The BER encoding of 1.3.6.1.2.1.14.10.1 is 06082B060102010E0A01
(10 octets) and not the 22 octets shown in Figure 28.
25) Section 5.4. also needs a better title, e.g.
5.4. Exporting an Augmented Conceptual Row: ifTable and ifXTable
The text in section 5.4 confuses ifXEntry and IfXEntry. A possible
rewrite:
The ifTable defined in the IF-MIB [RFC2863] is augmented by the
ifXTable (defined in the same MIB module). The OID of the
ifEntry is 1.3.6.1.2.1.2.2.1 while the OID of the augmenting
ifXEntry is 1.3.6.1.2.1.31.1.1.1. This example demonstrates how
columnar objects from the base conceptual row and the augmenting
row can be exported in a single mibObjectValueSequence data
record.
26) Why is the Field Length of mibObjectValueOctetString (on page 46)
16 octets? The ifName's restriction is 255 octets. And should this
not be variable length?
27) page 47: s/VLAN=11/VLAN=10/
On page 48, I am surprised that ifType and ifMTU are both 16-bit
fields. Does the template not say they are 4 octets long?
28) Section 5.5. also needs a new title and the terminology used is
wrong as well. Perhaps it is:
5.5. Exporting a Columnar Object: ipIfStatsInForwDatagrams
Please do not write 'ipIfStatsTable SEQUENCE'. The correct SMIv2
term is conceptual table. (And also note that the ASN.1 type of a
table is a SEQUENCE OF and not a SEQUENCE.)
The template in Figure 33 says the interface index is two octets.
This may be true for a certain exporter but may not be generally
true - it may be worth to be explicit about the assumption made
here that all possible interfaces are numbered such that they fit
into 16 bits.
The BER encodings and the corresponding VLEN fields are all wrong
in Figure 35:
1.3.6.1.2.1.4.31.3.1.1 -> 060A2B06010201041F030101 (12 octets)
1.3.6.1.2.1.4.31.3.1.2 -> 060A2B06010201041F030102 (12 octets)
1.3.6.1.2.1.4.31.3.1.12 -> 060A2B06010201041F03010c (12 octets)
29) Section 5.6. needs a better title. This is about a columnar object
where the index information is provided by IPFIX information
elements.
5.6. Exporting a Columnar Object index by IEs: ifOutQLen
s/be done be/be done by/
The text below Table 8 needs to be rewritten, e.g.
The ifOutQLen MIB object defined in the IF-MIB [RFC2863] provides
the length of the output packet queue. This columnar object is
part of the ifEntry conceptual row and indexed by the interface
index (ifIndex).
I am not sure I agree on the second paragraph on page 53. I tend
to believe that the index information must be provided for generic
applications to make sense out of the data.
The BER encoding and the corresponding VLEN in Figure 39 is wrong:
1.3.6.1.2.1.2.2.1.21 -> 06092B0601020102020115 (11 octets)
30) I find the example in section 5.7 rather strange. Why would one
export the ifIndex value using mibSubIdentifier and not by
including the ifIndex proper? There does not seem to be any
savings and this mibSubIdentifier approach of course is only
applicable where the number of sub-identifier is constant for all
conceptual rows. Since I do not see that this approach is needed
nor that it adds any value in terms of more compact encodings,
I would actually prefer this to be removed and perhaps even be
disallowed.
The BER encoding of the ifOutQLen OID is wrong, see above for the
correct value.
(The caption of Figure 44 is kind of strange because it says
"using ifIndex" but then the example is about not using ifIndex
but instead an opaque number.)
This section 5.7. should really be removed I think.
31) In section 5.8,
s/ospfNbarEntry/ospfNbrEntry/
The OID encoding and the VLEN field in Figure 46 is wrong:
1.3.6.1.2.1.14.10.1 -> 06082B060102010E0A01 (10 octets)
RFC 3411 uses '800002b804616263'H as an snmpEngineID in examples.
32) What is the meaning of this:
If a Collecting Process receives a MIB Object Identifier that it
cannot decode, it SHOULD log an error.
What does 'cannot decode' mean? I mean, a simple collector may
just store the records in some file / database. So what is
expected here? And why is it an error and not a warning?
I am also not sure what the last paragraph in section 7 tells me.
What does 'purely semantic information' mean? For me, if you miss
the semantics, the data has no value. But I understand that IPFIX
people have a very different terminology at times.
33) It is unclear to me how the export of conceptual rows deals with
non-existing variables (aka table holes). Is there a mechanism in
IPFIX to indicate that a certain field of a flow record does not
have a value?
Issues with section 10:
a) In the SMIv2, we distinguish between Counter32 and Counter64 and
I think this difference important to capture since the rollover
is different. The I-D seems to map both to mibObjectValueCounter.
b) The descriptions all use the phrase "from a MIB" but I think it
should be "of a MIB object".
c) The SMIv2 type is IpAddress and not IPAddress.
d) The definition of mibObjectValueCounter says "Data Type Semantics:
totalCounter". I think this is wrong since SMIv2 counters do not
start with zero. Furthermore, a Counter32 rolls over after 32-bit
and not after 64-bit (but mibObjectValueCounter is an unsigned64).
e) The definition of mibObjectValueGauge "Data Type Semantics:
totalCounter". I think this is wrong, a Gauge32 is not a counter.
And it might be useful to call this mibObjectValueGauge32.
f) Why did you call mibObjectValueTime not mibObjectValueTimeTicks?
The "Abstract Data Type: dateTimeMilliseconds" also seems to be
wrong since TimeTicks are _not_ measured in milliseconds since
1970-01-01T00:00. You may want to use unsigned32 and spell out the
semantics.
g) mibObjectValueUnsigned used the "Abstract Data Type: unsigned64"
which is wrong since there is only a 32-bit unsigned type in the
SMIv2. I suggest to use unsigned32 and to rename this to
mibObjectValueUnsigned32.
h) The phrase "a complete MIB 'SEQUENCE OF X' or conceptual table
value" reads strange. Similarly, "a MIB SEQUENCE or a row from a
conceptual table" reads strange. Perhaps simply use "a complete
conceptual table" and "a row of a conceptual table".
i) The lest sentence of the Description in 10.1.11 seems to be missing
some words.
j) The description of 10.2.2 is somewhat confusing: "... that serves
as INDEX MIB Objects of Information Elements for a mibField". In
SMIv2, the INDEX is associated with a conceptual row.
k) What does "sampled by SNMP" mean? Do you hook into the
instrumentation or do you access things via the SNMP agent?
l) p74: s/the MIB the Flow/the MIB when the Flow/
(Note that you are talking about a flow here and not about a data
record. I think this is goodness and proves that a new term is not
needed.)
m) Replace the Description in 10.3.4 with this:
Description: The textual name of the MIB module that defines a MIB
Object.
n) I do not understand what mibObjectSyntax would contain for an object
representing a conceptual table or a conceptual row. For say ifEntry,
would it be just "SEQUENCE {
ifIndex InterfaceIndex,
ifDescr DisplayString,
-- lots of stuff left out
}"? And what would it be for the object representing the conceptual
table? Or do you just mean what is literally in the SYNTAX clause,
excluding the referenced ASN.1 type definitions?
For other MIB Objects, do you include subtyping information such as
range of length restrictions? What about named number enumerations
of the BITS construct, you include the whole definition (mind you
that RowStatus is really long).
o) Remove "( also known as snmpEngineID) that" since it is potentially
misleading.
Explanation: Every SNMP engine has a unique snmpEngineID. The
combination of a snmpEngineID value and a context names provides
the SNMP context. Note that an SNMP engine may provide access to a
non-local context, in which case the values of snmpEngineID and
contextEngineID would be different.
--
Juergen Schoenwaelder Jacobs University Bremen gGmbH
Phone: +49 421 200 3587 Campus Ring 1, 28759 Bremen, Germany
Fax: +49 421 200 3103 <http://www.jacobs-university.de/>
_______________________________________________
IPFIX mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/ipfix