⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc1076.txt

📁 中、英文RFC文档大全打包下载完全版 .
💻 TXT
📖 第 1 页 / 共 5 页
字号:
   an array.  If an array entry "matches" the filter (i.e., if the filter   produces a "true" result), then it is used by the operation.  A   filter expression is very restricted: it can only compare data   contained in the array element and the comparisons are only against   constants.  Comparisons may be connected by AND, OR and NOT   operators.   The ASN.1 definition of a filter is:       Filter          ::= [APPLICATION 2] CHOICE {                               present         [0] DataPath,                               equal           [1] DataValue,                               greaterOrEqual  [2] DataValue,                               lessOrEqual     [3] DataValue,                               and             [4] SEQUENCE OF Filter,                               or              [5] SEQUENCE OF Filter,                               not             [6] Filter                               }       DataPath        ::= ANY                 -- Path with no value       DataValue       ::= ANY                 -- Single data value   This definition is similar to the filters used in the ISO monitoring   protocol (CMIP) and was derived from that specification.Trewitt & Partridge                                            [Page 22]RFC 1076          HEMS Monitoring and Control Language     November 1988   "DataPath" is the name of a single data item; "DataValue" is the   value of a single data item.  The three comparisons are all of the   form "data OP constant", where "data" is the value from the tree,   "constant" is the value from the filter expression, and "OP" is one   of equal, greater-than-or-equal, or less-than-or-equal.  The last   operation, "present", tests to see if the named item exists in the   data tree.  By its nature, it requires no value, so only a path needs   to be given.   Here is an example of a filter that matches an Interface whose IP   address is 10.1.0.1:       Filter{ equal{ address(10.0.0.51) } }   Note that the name of the data to be compared is relative to the   "InterfaceData" dictionary.   Each operator, when given a filter argument, takes an array   (dictionary containing only one type of item) as its first argument.   In the current example, this would be "Interfaces".  The items in it   are all of type "InterfaceData".  This tag is referred to as the   "iteration tag".   Before a filtered operation is used, BEGIN must be used to put the   array (dictionary) on top of the stack, to establish it as the   context that the filter iterates over.  The general operation of a   filtered operation is then:         1. Iterate over the items in the array.         2. For each element in the array, execute the filter.         3. If the filter succeeds, do the requested operation            (GET/SET/etc.) on the matched element, using the            template/value/path as input to the operation.  At this            point, the execution of the operation is the same as in            the non-filtered case.   This is a model of operation; actual implementations may take   advantage of whatever lookup techniques are available for the   particular table (array) involved.   Therefore, there are three inputs to a filtered operation:         1. The "current dictionary" on the stack.  This is the            array-type dictionary to be searched, set by an earlier            BEGIN.         2. A filter, to test each item in the array.  Each path or            value mentioned in the filter must be named in the contextTrewitt & Partridge                                            [Page 23]RFC 1076          HEMS Monitoring and Control Language     November 1988            of an item in the array, as if it was the current            dictionary.  For example, in the case where a filtered            operation iterates over the set of "InterfaceData" items            in the "Interfaces" array, each value or path in the            filter should name an item in the "InterfaceData"            dictionary, such as "address".         3. A template, path, or value associated with the operation            to be performed.  The leading ASN.1 tag in this must match            the iteration tag.  In the current example where the            filter is searching the "Interfaces" dictionary, the first            tag in the template/tag/value must be "InterfaceData".   The operators which take filters as arguments are:   BEGIN            array path filter   BEGIN   array dict             Find a dictionary in <array> that matches <filter>.  Use             that as the starting point for <path> and push the             dictionary corresponding to <path> onto the stack.  If more             than one dictionary matches <filter>, then any of the             matches may be used.  This specification does not state how             the choice is made.  At least one dictionary must match; it             is an error if there are no matches.  (Perhaps it should be             an error for there to be multiple matches; actual             experience is needed to decide.)   GET          array template filter   GET   array             For each item in <array> that matches <filter>, fill in the             template with values from the data tree and emit the             result.  The first tag of <template> must be equal to the             iteration tag.  Selected parts of matched items are emitted             based upon <template>, just as in a non-filtered GET             operation.   GET-ATTRIBUTES                array template filter   GET-ATTRIBUTES   array             Same as GET, except emit attributes rather than data             values.   SET             array value filter   SET   array             Same as GET, except set the values in <value> rather than             retrieving values.  Several values in the data tree will be             changed if the filter matches more than one item in the             array.   DELETE                array filter   DELETE   array             Delete the entry(s) in <array> that match <filter>.Trewitt & Partridge                                            [Page 24]RFC 1076          HEMS Monitoring and Control Language     November 1988   Notes about filter execution:      - Expressions are executed by inorder tree traversal.      - Since the filter operations are all GETs and comparisons,        there are no side-effects to filter execution, so an        implementation is free to execute only as much of the        filter as required to produce a result (e.g., don't execute        the rest of an AND if the first comparison turns out to be        false).      - It is not an error for a filter to test a data item that        isn't in the data tree.  In this situation, the comparison        just fails (is false).  This means that filters don't need        to test for the existence of optional data before        attempting to compare it.   Here is an example of how filtering would be used to obtain the input   and output packet counts for the interface with IP address 10.0.0.51.       Interfaces BEGIN                      -- dictionary       InterfaceData{ pktsIn, pktsOut }      -- template       Filter{ equal{ address(10.0.0.51) } }       GET       END                                   -- finished with dict   The returned value would be something like:       Interfaces{                             -- BEGIN         InterfaceData{ pktsIn(1345134), pktsOut(1023729) }                                               -- GET       }                                       -- END   The annotations indicate which part of the response is generated by   the different operators in the query.   Here is an example of accessing a table contained within some other   table.  Suppose we want to get at the ARP table for the interface   with IP address 36.8.0.1 and retrieve the entire ARP entry for the   host with IP address 36.8.0.23.  In order to retrieve a single entry   in the ARP table (using a filtered GET), a BEGIN must be used to get   down to the ARP table.  Since the ARP table is contained within the   Interfaces dictionary (an array), a filtered BEGIN must be used.       Interfaces BEGIN                        -- dictionary       InterfaceData{ ARP }                    -- path       Filter{ equal{ address(36.8.0.1) } }    -- filter       BEGIN                                   -- filtered BEGINTrewitt & Partridge                                            [Page 25]RFC 1076          HEMS Monitoring and Control Language     November 1988       -- Now in ARP table for 38.0.0.1; get entry for 38.8.0.23.       addrMap                                 -- whole entry       Filter{ equal{ ipAddr(36.8.0.23) } }    -- filter       GET                                     -- filtered GET       END       END   The result would be:       Interfaces{                             -- first BEGIN         InterfaceData{ ARP{                   -- second BEGIN           addrMap{ ipAddr(36.8.0.23), physAddr(..) } -- from GET         } }                                   -- first END       }                                       -- second END   Note which parts of the output are generated by different parts of   the query.   Here is an example of how the SET operator would be used to shut down   the interface with ip-address 10.0.0.51 by changing its status to   "down".       Interfaces BEGIN                    -- get dictionary       Interface{ Status(down) }           -- value to set       Filter{ equal{ IP-addr(10.0.0.51) } }       SET       END   If the SET is successful, the result would be:       Interfaces{                             -- BEGIN           Interface{ Status(down) }           -- from SET       }                                       -- END8.7 Terminating a Query   A query is implicitly terminated when there are no more ASN.1 objects   to be processed by the interpreter.  For a perfectly-formed query,   the interpreter would be back in the state it was when it started:   the stack would have only the root dictionary on it, and all of the   ASN.1 objects in the result would be terminated.   If there are still "open" ASN.1 objects in the result (caused by   leaving ENDs off of the query), then these are closed, as if a   sufficient number of ENDs were provided.  This condition would be   indicated by the existence of dictionaries other than the root   dictionary on the stack.Trewitt & Partridge                                            [Page 26]RFC 1076          HEMS Monitoring and Control Language     November 1988   If an extra END is received that would pop the root dictionary off of   the stack, the query is terminated immediately.  No error is   generated.9. EXTENDING THE SET OF VALUES   There are two ways to extend the set of values understood by the   query language.  The first is to register the data and its meaning   and get an ASN.1 tag assigned for it.  This is the preferred method   because it makes that data specification available for everyone to   use.   The second method is to use the VendorSpecific application type to   "wrap" the vendor-specific data.  Wherever an implementation defines   data that is not in RFC-1024, the "VendorSpecific" tag should be used   to label a dictionary containing the vendor-specific data.  For   example, if a vendor had some data associated with interfaces that   was too strange to get standard numbers assigned for, they could,   instead represent the data like this:          interfaces {                  interface {                          in-pkts, out-pkts, ...                          VendorSpecific { ephemeris, declination }                          }                  }   In this case, ephemeris and declination correspond to two context-   dependent tags assigned by the vendor for their non-standard data.   If the vendor-specific method is chosen, the private data MUST have   descriptions available through the GET-ATTRIBUTES operator.  Even   with this descriptive ability, the preferred method is to get   standard numbers assigned if possible.10. AUTHORIZATION   This specification does not state what type of authorization system   is used, if any.  Different systems may have needs for different   mechanisms (authorization levels, capability sets, etc.), and some   systems may not c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -