Subject: [Dime] FW: review of draft-ietf-dime-diameter-api-07.txt

From: "Romascanu, Dan (Dan)" <[email-masked]>
Date: Sun, 24 Aug 2008 12:53:34 +0200

Please find below the Gen-ART review for
draft-ietf-dime-diameter-api-07.txt. 

Please address Francis comments together with the other IETF LC
comments. 

Thanks and Regards,

Dan

-----Original Message-----
From: [email-masked] [mailto:[email-masked]] 
Sent: Thursday, August 21, 2008 12:35 PM
To: [email-masked]
Cc: [email-masked]; [email-masked]; Romascanu, Dan (Dan)
Subject: review of draft-ietf-dime-diameter-api-07.txt

I have been selected as the General Area Review Team (Gen-ART) reviewer
for this draft (for background on Gen-ART, please see
http://www.alvestrand.no/ietf/gen/art/gen-art-FAQ.html).

Please resolve these comments along with any other Last Call comments
you may receive.

Document: draft-ietf-dime-diameter-api-07.txt
Reviewer: Francis Dupont
Review Date: 2008-08-20
IETF LC End Date: 2008-08-08
IESG Telechat date: unknown

Summary: Not Ready

Comments: my main concern is the API as it is described up to section
3.7 is clearly impossible to implement so I strongly suggest to add soon
(in section 2 for instance) some text explaining the document only
specifies the visible/public part of some structures.
Another issue is most of the "include" part is missing.

Detailed comments:
 - 1 page 4: code need only -> code needs only
 - 2.2 page 6: All of the functions -> All functions ?
 - 2.5 page 6: a DTD described it -> a DTD describing it
 - 2 page 6: IMHO this is the right place to explain the structs
  defined in the document are the visible/public part of the
real/internal
  structs with a reference to section 3.7
 - 3.1.12 page 10: if -> when ?
 - 3.1.15 page 12: the header (six, four) is obviously about a previous
  version...
 - 3.1.15 page 12: IMHO you should explain why, despite the name
"flags",
  it is right to use an enumeration here (exclusive values, etc).
 - 3.1.16 page 12: AAAGetDomainInterconnectType() doesn't return
  this type (cf. 3.4.3.7) and it is not AAAGetDomainInternconnectType()
                                                         ^
 - 3.2.3 page 15: this type should be opaque, i.e., the name of the
  fields should be private. This has two consequences:
  * users don't know the names so can't misuse them (they have
   AAAGetFirstAVP() & co)
  * it justifies a bit the *avpList in the next section (in place
   of plain avpList)
 BTW in a traditional double-linked list with tail pointer the  tail is
a ** pointer
 - 3.2.4 page 16: extra *Version fields (unneeded with AAA_IP_ADDR)
 - 3.4.3.7 page 24: type should be a AAADomainInterconnect *
 - 3.4.4.6 page 27: AAAGetCommandCode() must return an AAAReturnCode
  and the return value text be updated to the usual one
 - 3.4.5.4 page 29: occured -> occurred
 - 3.4.5.6 page 30: AAACreateAndAddAVPToList() is underspecified:
  * can be the avpList created when it points to NULL?
   (cf next section)
  * what is the position when the list is not empty?
 - 3.4.5.[67] pages 30 & 31: there is no way to free an AAA_AVP_List
  so what to do if something fails? Obviously there are some use
  restrictions so at least a reference to 3.6 is wellcome
 - 3.4.5.1[45] page 34 (comment): obviously AAAGet{Next,Prev}AVP()
  imply link fields in the real AVP struct!
 - 3.4.6.1 page 36: extra ipVersion field
 - 3.4.6.2 page 36 (comment): again the server id is an internal
  AAAMessage field
 - 3.6 page 38: (for uniformity)
  (char *) ourAddress -> (char *)ourAddress
 - 3.7 page 39: this is a key point but one has to read ~40 pages
  to find it. Note there are other ways to handle public/private
  fields in C (but no highly recommended ways):
   * the sub structure way (document's one)
   * private fields at the end of the definition with a comment
    explaining they are private
   * private fields at the end of the definition protected by a #ifdef
  I prefer the second one (no cast, sizeof() works but it relies
  on the programmer's discipline) but you should simply give the
  choice to implementors
 - 3.9 page 41: 3.1.13 specifies there can be only one first/last,
  for instance:
   AAA_APP_INSTALL_FIRST:  Install this callback as the first callback
      in the chain.  If subsequent callbacks are installed with this
      code, then AAA_ERR_ALREADY_REGISTERED is returned.
  so 3.1.13 and 3.9 are in conflict (note I prefer 3.1.13)
 - 7.2 page 45: where are the DIAM_AVP_* & co defined?
  I am afraid you have to add them...
 - Author's Addresses page 46: please add the Contry (USA? :-)
 - I'd like to have a .h in annex (note the names of the .h and
  of the DLL/library/... are part of the API)

Regards

[email-masked]
_______________________________________________
DiME mailing list
[email-masked]
https://www.ietf.org/mailman/listinfo/dime