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

Module names in SMIng



HI,

At the last IETF meeting in december, I had several comments on SMIng,
but didn't have the time to present them. One key one is naming of
modules. The language continues with the approach used in SMIv1/2
of assuming that module names are globally unique. There have been
few problems, so far, but the name clash problem only gets worse
as more modules are defined.

I would like to propose a simple fix. It is to require that module
names be defined DNS format and use the DNS name space administration.
(Thus, no new burden is required of IANA.) However, DNS names can
have their ownership lost and reassigned to another entity. This
problem already exists with URIs, and possibly other uses.
Even though this can happen, the advantages outweigh the disadvantages.
By choosing this approach (or similar ones), the following
is achieved with virtually no cost:
 1) unique module names
 2) ease of management of modules in libraries by module compilers,
    editors, and other module tools 


Current module name:
  ucIndentifier - which is an uppercase identifier of 1 to 63
                alphaNum characters and hyphens
  (BY THE WAY the grammar for SMIng in the -04 version does not
   have a definition for ucIdentifier. This is a BUG in the grammar.)

  A module name is used in the following definitions:
       moduleStatement         = moduleKeyword sep ucIdentifier optsep
                                                   ^^^^^^^^^^^^ module name 
                                 "{" stmtsep
                                 *(importStatement stmtsep)
                                 organizationStatement stmtsep
                                 contactStatement stmtsep
                                 descriptionStatement stmtsep
                                 *1(referenceStatement stmtsep)
                                 1*(revisionStatement stmtsep)
                                 *(extensionStatement stmtsep)
                                 *(typedefStatement stmtsep)
                                 *(identityStatement stmtsep)
                                 *(classStatement stmtsep)
                                 "}" optsep ";"

       importStatement         = importKeyword sep ucIdentifier optsep
                                                   ^^^^^^^^^module name
                                 "(" optsep
                                 identifierList optsep
                                 ")" optsep ";"

       qucIdentifier           = *1(ucIdentifier "::") ucIdentifier
                                    ^^^^^^^^^^^^module name

       qlcIdentifier           = *1(ucIdentifier "::") lcIdentifier
                                    ^^^^^^^^^^^^module name
 
  And possibly others. However, the grammar definition could be
  much improved by replacing "ucIndentifier" by "moduleName"
  and adding the grammar definition for moduleName.


New module name:
  moduleName = ucIndentifier 1*("." ucIdentifier) 

An example would be SNMPv2-MIB.IETF.ORG (a conversion of the MIB module
from RFC 1907).

Regards,
/david t. perkins