cfgmaker.txt
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:61k
源码类别:

SNMP编程

开发平台:

C/C++

  1. CFGMAKER(1)                    mrtg                   CFGMAKER(1)
  2. NNAAMMEE
  3.        cfgmaker - Creates mrtg.cfg files (for mrtg-2.13.2)
  4. SSYYNNOOPPSSIISS
  5.        cfgmaker [options] [community@]router [[options] [commu-
  6.        nity@]router ...]
  7. OOPPTTIIOONNSS
  8.         --ifref=nr    interface references by Interface Number (default)
  9.         --ifref=ip                     ... by Ip Address
  10.         --ifref=eth                        ... by Ethernet Number
  11.         --ifref=descr                      ... by Interface Description
  12.         --ifref=name                       ... by Interface Name
  13.         --ifref=type                       ... by Interface Type
  14.         --ifdesc=nr       interface description uses Interface Number (default)
  15.         --ifdesc=ip                        ... uses Ip Address
  16.         --ifdesc=eth                       ... uses Ethernet Number
  17.         --ifdesc=descr                     ... uses Interface Description
  18.         --ifdesc=name                      ... uses Interface Name
  19.         --ifdesc=catname                   ... uses CatOS Interface Name
  20.         --ifdesc=alias                     ... uses Interface Alias
  21.         --ifdesc=type                      ... uses Interface Type
  22.         --if-filter=f     Test every interface against filter f to decide wether
  23.                           or not to include that interface into the collection.
  24.                           Currently f is being evaluated as a Perl expression
  25.                           and it's truth value is used to reject or accept the
  26.                           interface.
  27.                           (Experimental, under development, might change)
  28.         --if-template=templatefile
  29.                           Replace the normal target entries for the interfaces
  30.                           with an entry as specified by the contents in the file
  31.                           templatefile.  The file is supposed to contain Perl
  32.                           code to be executed to generate the lines for the
  33.                           target in the configuration file.
  34.                           (Experimental, under development, might change)
  35.         --host-template=templatefile
  36.                           In addition to creating targets for a host's interfaces
  37.                           do also create targets for the host itself as specified
  38.                           by the contents in the file templatefile.  The file is
  39.                           supposed to contain Perl code to be executed to generate
  40.                           the lines for the host related targets (such as CPU,
  41.                           ping response time measurements etc.) in the config-
  42.                           uration file.
  43.                           (Experimental, under development, might change)
  44.         --global "x: a"   add global config entries
  45.         --no-down         do not look at admin or opr status of interfaces
  46.         --show-op-down    show interfaces which are operatively down
  47.         --zero-speed=spd  use this speed in bits-per-second as the interface
  48.                           speed for all interfaces that return a speed of 0
  49.                           via ifSpeed/ifHighSpeed.  100Mbps = 100000000
  50.         --subdirs=format  give each router its own subdirectory, naming each per
  51.                           "format", in which HOSTNAME and SNMPNAME will be
  52.                           replaced by the values of those items -- for instance,
  53.                           --subdirs=HOSTNAME or --subdirs="HOSTNAME (SNMPNAME)"
  54.         --noreversedns    do not reverse lookup ip numbers
  55.         --community=cmty  Set the default community string to "cmty" instead of
  56.                           "public".
  57.         --enable-ipv6     Enable IPv6 support, if the required libraries are
  58.                           present. Numeric IPv6 addresses must be enclosed
  59.                           in square brackets, e.g. public@[2001:760:4::1]:161
  60.         --use-16bit       Use 16bit SNMP request IDs to query all routers.
  61.         --snmp-options=:[<port>][:[<tmout>][:[<retr>][:[<backoff>][:<ver>]]]]
  62.                           Specify default SNMP options to be appended to all
  63.                           routers following.  Individual fields can be empty.
  64.                           Routers following might override some or all of the
  65.                   options given to --snmp-options.
  66.         --dns-domain=domain
  67.                   Specifies a domain to append to the name of all
  68.                   routers following.
  69.         --nointerfaces    Don't do generate any configuration lines for interfaces,
  70.                           skip the step of gathering interface information and
  71.                           don't run any interface template code.
  72.         --interfaces      Generate configuration lines for interfaces (this is the
  73.                           default).  The main purpose of this option is to negate
  74.                           an --nointerfaces appearing earlier on the command line.
  75.         --help            brief help message
  76.         --man             full documentation
  77.         --version         print the version of cfgmaker
  78.         --output=file     output filename default is STDOUT
  79. DDEESSCCRRIIPPTTIIOONN
  80.        CCffggmmaakkeerr creates MRTG configuration files based on infor-
  81.        mation pulled from a router or another SNMP manageable
  82.        device.
  83.        [_c_o_m_m_u_n_i_t_y@@]_r_o_u_t_e_r
  84.        _C_o_m_m_u_n_i_t_y is the community name of the device you want to
  85.        create a configuration for. If not specified, it defaults
  86.        to 'ppuubblliicc'; you might want to try this first if you do
  87.        not know the community name of a device. If you are using
  88.        the wrong community name you will get no response from the
  89.        device.
  90.        _R_o_u_t_e_r is the DNS name or the IP number of an SNMP-man-
  91.        agable device.  Following the name you can specify 6 fur-
  92.        ther options separated by colons.  The full syntax looks
  93.        like this:
  94.        rroouutteerr[:[pprrtt][:[ttmmoouutt][:[rreettrr][:[bbaacckkooffff][:vveerrss]]]]]
  95.        Of special interest may be the last parameter, vveerrss.  If
  96.        you set this to '2' then your device will be queried with
  97.        SNMP version 2 requests. This allows to poll the 64 bit
  98.        traffic counters in the device and will thus work much
  99.        better with fast interfaces (no more counter overrun).
  100.        Note that the order in which the routers are specified on
  101.        the command line do matter as the same order is used when
  102.        the configuration file is generated.  The first specified
  103.        router has it's configuration lines genrated first, fol-
  104.        lowed by the lines belonging to the next router and so on.
  105.        Note that the first line of the generated cfg file will
  106.        contain all the commandline options you used for generat-
  107.        ing it. This is to allow for the easy 'regeneration' in
  108.        case you want to add newhosts or make some other global
  109.        change.
  110.        CCoonnffiigguurraattiioonn
  111.        Except for the ----oouuttppuutt and ----gglloobbaall options, all options
  112.        affect only the routers following them on the command
  113.        line.  If an option specified earlier on the command line
  114.        reappears later on the command line with another value,
  115.        the new value overrides the old value as far as remaining
  116.        routers are concerned.  This way options might be tailored
  117.        for groups of routers or for individual routers.
  118.        See ----oouuttppuutt and ----gglloobbaall for how their behaviour is
  119.        affected by where or how many times they appear on the
  120.        command line.
  121.        See the EExxaammpplleess below on how to set an option differently
  122.        for multiple routers.
  123.        ----hheellpp
  124.            Print a brief help message and exit.
  125.        ----mmaann
  126.            Prints the manual page and exits.
  127.        ----vveerrssiioonn
  128.            Print the version of cfgmaker.  This should match the
  129.            version of MRTG for which config files are being cre-
  130.            ated.
  131.        ----iiffrreeff nnrr|iipp|eetthh|ddeessccrr|nnaammee
  132.            Select the interface identification method.  Default
  133.            is nnrr which identifies the router interfaces by their
  134.            number.  Unfortunately the interface numbering scheme
  135.            in an SNMP tree can change. Some routers change their
  136.            numbering when new interfaces are added, others change
  137.            thier numbering every full moon just for fun.
  138.            To work around this sad problem MRTG can identify
  139.            interfaces by 4 other properties. None of these works
  140.            for all interfaces, but you should be able to find one
  141.            which does fine for you. Note that especially ethernet
  142.            addrsses can be problematic as some routers have the
  143.            same ethernet address on most of their interface
  144.            cards.
  145.            Select iipp to identify the interface by its IP number.
  146.            Use eetthh to use the ethernet address for identifica-
  147.            tion. Use ddeessccrr to use the Interface description. Or
  148.            use nnaammee to use the Interface name.
  149.            If your chosen method does not allow unique interface
  150.            identification on the device you are querying, ccffgg--
  151.            mmaakkeerr will tell you about it.
  152.        ----iiffddeesscc nnrr|iipp|eetthh|ddeessccrr|nnaammee|ttyyppee|aalliiaass
  153.            Select what to use as the description of the inter-
  154.            face.  The description appears in the "Title[]" prop-
  155.            erty for the target as well as the text header in the
  156.            HTML code defined in the target's "PageTop[]".
  157.            Default is to use nnrr which is just the interface num-
  158.            ber which isn't always useful to the viewer of the
  159.            graphs.
  160.            There are 6 other properties which could be used.  Use
  161.            iipp if you want to use the interface's IP-address.  Use
  162.            eetthh if you want to use the interface's ethernet
  163.            address.  If you want a better description, you can
  164.            use either ddeessccrr, nnaammee or aalliiaass.  Exactly what each of
  165.            these do varies between different equipment so you
  166.            might need to experiment.  For instance, for a serial
  167.            interface on a Cisco router running IOS using nnaammee
  168.            might result in "S0" being the interface description ,
  169.            ddeessccrr might result in "Serial0" and aalliiaass might result
  170.            in "Link to HQ" (provided that is what is used as the
  171.            interface's "description" in the router's configura-
  172.            tion).
  173.            Finally, if you want to describe the interface by it's
  174.            Btype (i.e "ethernetCSMA", "propPointtoPoint" etc) you
  175.            can use ttyyppee.
  176.        ----iiff--ffiilltteerr 'ffiilltteerr--eexxpprreessssiioonn'
  177.            First of all, this is under some developement and is
  178.            experimental.
  179.            Use this if you want to have better control over what
  180.            interfaces gets included into the configuration.  The
  181.            ffiilltteerr--eexxpprreessssiioonn is evaluated as a piece of Perl code
  182.            and is expected to return a truth value.  If true,
  183.            include the interface and if false, exclude the inter-
  184.            face.
  185.            For a further discussion on how these filters work,
  186.            see the section "Details on Filters" below.
  187.        ----iiff--tteemmppllaattee tteemmppllaattee--ffiillee
  188.            First of all, this is under some development and is
  189.            experimental.
  190.            Use this if you want to control what the line for each
  191.            target should look like in the configuration file.
  192.            The contents of the file tteemmppllaattee--ffiillee will be evalu-
  193.            ated as a Perl program which generates the lines using
  194.            certain variables for input and output.
  195.            For a further discussion on how these templates work,
  196.            see the section "Details on Temaplates" below.
  197.        ----hhoosstt--tteemmppllaattee tteemmppllaattee--ffiillee
  198.            First of all, this is under some development and is
  199.            experimental.
  200.            Use this if you want to have some extra targets
  201.            related to the host itself such as CPU utilization,
  202.            ping response time to the host, number of busy modems
  203.            etc.  The contents of the file tteemmppllaattee--ffiillee will be
  204.            evaluated once per host as a Perl program which gener-
  205.            ates the lines using certain variables for input and
  206.            output.
  207.            For a further discussion on how these templates work,
  208.            see the section "Details on Templates" below.
  209.        ----ccoommmmuunniittyy ccoommmmuunniittyy--ssttrriinngg
  210.            Use this to set the community for the routers follow-
  211.            ing on the command line to ccoommmmuunniittyy--ssttrriinngg.  Individ-
  212.            ual routers might overrride this community string by
  213.            using the syntax ccoommmmuunniittyy@@rroouutteerr.
  214.        ----eennaabbllee--iippvv66
  215.            This option enables IPv6 support. It requires the
  216.            appropriate perl modules; if they are not found then
  217.            IPv6 is disabled (see the ipv6 documentation).
  218.            cfgmaker will use IPv6 or IPv4 depending on the tar-
  219.            get. If the target is a numeric address, the protocol
  220.            depends on the type of address. If the target is a
  221.            hostname, cfgmaker will try to resolve the name first
  222.            to an IPv6 address then to an IPv4 address.
  223.            IPv6 numeric addresses must be specified between
  224.            square braces.
  225.            For example:
  226.             cfgmaker --enable-ipv6 [2001:760:4::1]:165:::2
  227.            If the target has both an IPv6 address and an IPv4
  228.            address with the same hostname, cfgmaker first queries
  229.            the target using IPv6 and falls back to IPv4 if it
  230.            fails. This is useful for targets which don't support
  231.            SNMP over IPv6.
  232.        ----uussee--1166bbiitt
  233.            This option forces the use of 16bit SNMP request IDs.
  234.            Some broken SNMP agents do not accept 32bit request
  235.            IDs.  Try to avoid this option as much as possible,
  236.            complain to your agent vendor instead.
  237.        ----ssnnmmpp--ooppttiioonnss  :[ppoorrtt][:[ttiimmeeoouutt][:[rreettrriieess][:[bbaacckk--
  238.        ooffff][:vveerrssiioonn]]]]
  239.            Use this to set the default SNMP options for all
  240.            routers following on the command line.  Individual
  241.            values might be omitted as well as trailing colons.
  242.            Note that routers might override individual (or all)
  243.            values specified by ----ssnnmmpp--ooppttiioonnss by using the syntax
  244.            rroouutteerr[:[ppoorrtt][:[ttiimmeeoouutt][:[rreettrriieess][:[bbaacckkooffff][:vveerr--
  245.            ssiioonn]]]]]
  246.        ----gglloobbaall ""_b_l_a_: _a_b_c""
  247.            Use this to add global options to the generated config
  248.            file.  You can call ----gglloobbaall several times to add mul-
  249.            tiple options.  The line will appear in the configura-
  250.            tion just before the config for the next router
  251.            appearing on the command line.
  252.             --global "workdir: /home/mrtg"
  253.            If you want some default Options you might want to put
  254.             --global "options[_]: growright,bits"
  255.            Specifying ----gglloobbaall after the last router on the com-
  256.            mand line will create a line in the configuration file
  257.            which will appear after all the routers.
  258.        ----nnoorreevveerrsseeddnnss
  259.            Do not try to reverse lookup IP numbers ... a must for
  260.            DNS free environments.
  261.        ----nnoo--ddoowwnn
  262.            Normally cfgmaker will not include interfaces which
  263.            are marked anything but administratively and opera-
  264.            tionally UP. With this switch you get them all.
  265.        ----sshhooww--oopp--ddoowwnn
  266.            Include interfaces which are operatively down.
  267.        ----zzeerroo--ssppeeeedd _s_p_e_e_d
  268.            Assign this speed in bits-per-second to all interfaces
  269.            which return 0 for ifSpeed and ifHighSpeed.  Some
  270.            switches, notably Foundry equipment, return a speed of
  271.            zero for some interfaces.  For example, to have all
  272.            interfaces reporting zero set to 100Mbps, use
  273.            --zero-speed=100000000.
  274.        ----ssuubbddiirrss _f_o_r_m_a_t
  275.            Give each router its own subdirectory for the HTML and
  276.            graphics (or .rrd) files.  The directory name is the
  277.            given _f_o_r_m_a_t string with a couple of pattern replace-
  278.            ments.  The string "HOSTNAME" will be replaced by the
  279.            hostname of the router (however you specified it on
  280.            the ccffggmmaakkeerr commandline -- it may be an actual host-
  281.            name or just an IP address), and "SNMPNAME" will be
  282.            replaced with the device's idea of its own name (the
  283.            same name that appears on the right side of the
  284.            "Title" lines).  For instance, a call like:
  285.             cfgmaker --subdirs=HOSTNAME__SNMPNAME public@10.10.0.18
  286.            would result in the generation of lines looking some-
  287.            thing like:
  288.             Directory[10.10.0.18_1]: 10.10.0.18__fp2200-bothrip-1.3
  289.        ----oouuttppuutt _f_i_l_e
  290.            Write the output from ccffggmmaakkeerr into the file _f_i_l_e. The
  291.            default is to use "STDOUT". ----oouuttppuutt is expected to
  292.            appear only once on the command line. If used multiple
  293.            times, the file specified by the last ----oouuttppuutt will be
  294.            used.
  295.        ----nnooiinntteerrffaacceess
  296.            Don't generate configuration lines for interfaces.
  297.            This makes cfgmaker skip all steps related to inter-
  298.            faces which means it will not do any polling of the
  299.            router to retrieve interface information which speeds
  300.            up the execution of cfgmaker and it will neither run
  301.            any interface templates.
  302.        ----iinntteerrffaacceess
  303.            This makes cfgmaker generate configuration lines for
  304.            interfaces (the default behaviour).
  305.            The main usage of this option is to negate an --noint-
  306.            erfaces appearing earlier on the command line.
  307.        SSNNMMPP VV33 OOppttiioonnss
  308.        CCffggmmaakkeerr supports SNMP V3.  There are optional parameters
  309.        affecting SNMP operation.
  310.        _S_N_M_P_v_3 _A_r_g_u_m_e_n_t_s
  311.        A SNMP context is a collection of management information
  312.        accessible by a SNMP entity.  An item of management infor-
  313.        mation may exist in more than one context and a SNMP
  314.        entity potentially has access to many contexts.  The com-
  315.        bination of a contextEngineID and a contextName unambigu-
  316.        ously identifies a context within an administrative
  317.        domain.  In a SNMPv3 message, the contextEngineID and con-
  318.        textName are included as part of the scopedPDU.  All meth-
  319.        ods that generate a SNMP message optionally take a ----ccoonn--
  320.        tteexxtteennggiinneeiidd and ----ccoonntteexxttnnaammee argument to configure these
  321.        fields.
  322.        Context Engine ID
  323.            The ----ccoonntteexxtteennggiinneeiidd argument expects a hexadecimal
  324.            string representing the desired contextEngineID.  The
  325.            string must be 10 to 64 characters (5 to 32 octets)
  326.            long and can be prefixed with an optional "0x".  Once
  327.            the ----ccoonntteexxtteennggiinneeiidd is specified it stays with the
  328.            object until it is changed again or reset to default
  329.            by passing in the undefined value.  By default, the
  330.            contextEngineID is set to match the authorita-
  331.            tiveEngineID of the authoritative SNMP engine.
  332.        Context Name
  333.            The contextName is passed as a string which must be 0
  334.            to 32 octets in length using the ----ccoonntteexxttnnaammee argu-
  335.            ment.  The contextName stays with the object until it
  336.            is changed.  The contextName defaults to an empty
  337.            string which represents the "default" context.
  338.        _U_s_e_r_-_b_a_s_e_d _S_e_c_u_r_i_t_y _M_o_d_e_l _A_r_g_u_m_e_n_t_s
  339.        The User-based Security Model (USM) used by SNMPv3
  340.        requires that a securityName be specified using the --uusseerr--
  341.        nnaammee argument.  The creation of a Net::SNMP object with
  342.        the version set to SNMPv3 will fail if the ----uusseerrnnaammee
  343.        argument is not present.  The --uusseerrnnaammee argument expects a
  344.        string 1 to 32 octets in length.
  345.        Different levels of security are allowed by the User-based
  346.        Security Model which address authentication and privacy
  347.        concerns.  A SNMPv3 target will derive the security level
  348.        (securityLevel) based on which of the following arguments
  349.        are specified.
  350.        By default a securityLevel of 'noAuthNoPriv' is assumed.
  351.        If the ----aauutthhkkeeyy or ----aauutthhppaasssswwoorrdd arguments are speci-
  352.        fied, the securityLevel becomes 'authNoPriv'.  The ----aauutthh--
  353.        ppaasssswwoorrdd argument expects a string which is at least 1
  354.        octet in length.  Optionally, the ----aauutthhkkeeyy argument can
  355.        be used so that a plain text password does not have to be
  356.        specified in a script.  The ----aauutthhkkeeyy argument expects a
  357.        hexadecimal string produced by localizing the password
  358.        with the authoritativeEngineID for the specific destina-
  359.        tion device.  The "snmpkey" utility included with the
  360.        Net::SNMP  distribution can be used to create the hexadec-
  361.        imal string (see snmpkey).
  362.        Two different hash algorithms are defined by SNMPv3 which
  363.        can be used by the Security Model for authentication.
  364.        These algorithms are HMAC-MD5-96 "MD5" (RFC 1321) and
  365.        HMAC-SHA-96 "SHA-1" (NIST FIPS PUB 180-1).   The default
  366.        algorithm used by the module is HMAC-MD5-96.  This behav-
  367.        ior can be changed by using the ----aauutthhpprroottooccooll argument.
  368.        This argument expects either the string 'md5' or 'sha' to
  369.        be passed to modify the hash algorithm.
  370.        By specifying the arguments ----pprriivvkkeeyy or ----pprriivvppaasssswwoorrdd
  371.        the securityLevel associated with the object becomes
  372.        'authPriv'.  According to SNMPv3, privacy requires the use
  373.        of authentication.  Therefore, if either of these two
  374.        arguments are present and the ----aauutthhkkeeyy or ----aauutthhppaasssswwoorrdd
  375.        arguments are missing, the creation of the object fails.
  376.        The ----pprriivvkkeeyy and ----pprriivvppaasssswwoorrdd arguments expect the same
  377.        input as the ----aauutthhkkeeyy and ----aauutthhppaasssswwoorrdd arguments
  378.        respectively.
  379.        The User-based Security Model described in RFC 3414
  380.        defines a single encryption protocol to be used for pri-
  381.        vacy.  This protocol, CBC-DES "DES" (NIST FIPS PUB 46-1),
  382.        is used by default or if the string 'des' is passed to the
  383.        ----pprriivvpprroottooccooll argument.  By working with the Extended
  384.        Security Options Consortium http://www.snmp.com/eso/, the
  385.        module also supports additional protocols which have been
  386.        defined in draft specifications.  The draft
  387.        http://www.snmp.com/eso/draft-reeder-snmpv3-usm-3desede-00.txt
  388.        defines the support of CBC-3DES-EDE "Triple-DES" (NIST
  389.        FIPS 46-3) in the User-based Security Model.  This proto-
  390.        col can be selected using the ----pprriivvpprroottooccooll argument with
  391.        the string '3desede'.  The draft
  392.        http://www.snmp.com/eso/draft-blumenthal-aes-usm-04.txt
  393.        describes the use of CFB128-AES-128/192/256 "AES" (NIST
  394.        FIPS PUB 197) in the USM. The three AES encryption proto-
  395.        cols, differentiated by their key sizes, can be selected
  396.        by passing 'aescfb128', 'aescfb192', or 'aescfb256' to the
  397.        --pprriivvpprroottooccooll argument.
  398.        DDeettaaiillss oonn FFiilltteerrss
  399.        The purpose of the filters is to decide which interfaces
  400.        to accept and which interfaces to reject.  This decision
  401.        is done for each interface by evaluating the filter
  402.        expression as a piece of Perl code and investigating the
  403.        result of the evaluation.  If true, accept the interface
  404.        otherwise reject it.
  405.        When working with filters, remember that Perl has it's own
  406.        idea of what truth and false is.  The empty string "" and
  407.        the string "0" are false, all other strings are true.
  408.        This further imples that any integer value of 0 is false
  409.        as well as any undef value.  It also implies that all ref-
  410.        erences are considered true.
  411.        As the filter is evaluated as a Perl expression, several
  412.        useful constructs in Perl are worth mentioning:
  413.        Expressions might be grouped by using parentheses "()".
  414.        Expressions might be combined using boolean operators such
  415.        as the following:
  416.        "aanndd" (equivalent with "&&&&")
  417.            Boolean "and" of the two expressions, is only true if
  418.            both expressions are true.  Example: _e_x_p_r_e_s_s_i_o_n_1 aanndd
  419.            _e_x_p_r_e_s_s_i_o_n_2
  420.        "oorr" (equivalent with "||||")
  421.            Boolean "or" of the two expressions, is true if either
  422.            or both expressions are true.  Example: _e_x_p_r_e_s_s_i_o_n_1 oorr
  423.            _e_x_p_r_e_s_s_i_o_n_2
  424.        "nnoott" (equivalent with "!!")
  425.            Boolean negation of a single expression.  Example:
  426.            nnoott _e_x_p_r_e_s_s_i_o_n .  Yet another example: !!_e_x_p_r_e_s_s_i_o_n
  427.        (For more details on this I recommend a book on Perl)
  428.        _P_r_e_d_e_f_i_n_e_d _F_i_l_t_e_r _V_a_r_i_a_b_l_e_s
  429.        To facilitate, there are a number of predefined values
  430.        available to use in the filter.  Note that these variables
  431.        are also available when templates interfaces are evaluated
  432.        (but not host templates).
  433.        Caveat:  All these variables' names begin with a dollar
  434.        sign  ($), which is a syntactic requirement for scalar
  435.        variables in Perl.  The danger here is that the dollar
  436.        sign in many shells is an active character (often used for
  437.        shell variables exactly as in Perl variables) so it is
  438.        important to ensure that the Perl expression isn't evalu-
  439.        ated by the command line shell as shell code before being
  440.        passed to cfgmaker as command line arguments.  In shells
  441.        like Bourne shell, ksh shell or bash shell, placing the
  442.        entire expression within single qoutes will avoid such
  443.        accidental evaluation:
  444.         '--if-filter=($default_iftype && $if_admin)'
  445.        $$iiff__ttyyppee
  446.            This is an integer specifying the interface type as
  447.            per the SNMP standards and as reported by the polled
  448.            device.  A complete list of interface types would be
  449.            impractical for this document , but there are a number
  450.            predefined varables below.  Normally, cfgmaker puts in
  451.            the target's PageTop this iftype value within paran-
  452.            thesis after the name of the interface type. (e.g
  453.            "propPointToPointSerial (22)").
  454.            Here's a list of some of the most common interface
  455.            types by number:
  456.               6 ethernetCsmacd
  457.               7 iso88023Csmacd
  458.               9 iso88025TokenRing
  459.              15 fddi
  460.              19 E1
  461.              20 basicISDN
  462.              21 primaryISDN
  463.              22 propPointToPointSerial
  464.              23 ppp
  465.              24 softwareLoopback
  466.              30 ds3
  467.              32 frame-relay
  468.              33 rs232
  469.              37 atm
  470.              39 sonet
  471.              44 frameRelayService
  472.              46 hssi
  473.              49 aal5
  474.              53 propVirtual
  475.              62 Fast Ethernet (100BaseT)
  476.              63 ISDN & X.25
  477.              69 Full Duplex Fast Ethernet (100BaseFX)
  478.              94 Asymetric Digital Subscriber Loop (ADSL)
  479.             117 Gigabit Ethernet
  480.             134 ATM Sub Interface
  481.        $$ddeeffaauulltt
  482.            True if and only if cfgmaker normally should accepted
  483.            the interface based on the interfaces administrative
  484.            and operational state (taking the flags ----nnoo--ddoowwnn and
  485.            ----sshhooww--oopp--ddoowwnn into account) and it's type (and a few
  486.            other things).
  487.        $$ddeeffaauulltt__iiffssttaattee
  488.            True if and only if cfgmaker would have accepted the
  489.            interface based on it's operational and administrative
  490.            states (also taking into account the presence of the
  491.            flags ----nnoo--ddoowwnn and ----sshhooww--oopp--ddoowwnn).
  492.        $$ddeeffaauulltt__iiffttyyppee
  493.            True if and only if cfgmaker would have accepted the
  494.            interface based on it's type (and a few type specific
  495.            details in addition).
  496.        $$iiff__aaddmmiinn
  497.            True if and only if the interface is in an adminstra-
  498.            tive up state.
  499.        $$iiff__ooppeerr
  500.            True if and only if the interface is in an operational
  501.            up state.
  502.        A number of variables are also predefined to easily decide
  503.        if an interface belong to a certain cathegory or not.
  504.        Below is all those variables listed together with which
  505.        if_type numbers each variable will be true for.  Note that
  506.        some variables refer to other variables as well.
  507.        $$iiff__iiss__eetthheerrnneett
  508.            True for ethernet interfaces (nr 6, 7, 26, 62, 69 and
  509.            117).
  510.        $$iiff__iiss__iissddnn
  511.            True for various ISDN interface types (nr 20, 21, 63,
  512.            75, 76 and 77)
  513.        $$iiff__iiss__ddiiaalluupp
  514.            True for dial-up interfaces such as PPP as well as
  515.            ISDN.  (nr 23, 81, 82 and 108 in addition to the num-
  516.            bers of $$iiff__iiss__iissddnn).
  517.        $$iiff__iiss__aattmm
  518.            True for miscellaneous ATM related interface types (nr
  519.            37, 49, 107, 105, 106, 114 and 134).
  520.        $$iiff__iiss__wwaann
  521.            True for WAN interfaces point to point, Frame Relay
  522.            and High Speed Serial ( 22,32,44,46)
  523.        $$iiff__iiss__llaann
  524.            True for LAN interfaces (8, 9, 11, 15, 26, 55, 59, 60
  525.            and 115 in addition to the numbers of $$iiff__iiss__eetthheerr--
  526.            nneett).
  527.        $$iiff__iiss__ddssll
  528.            True for ADSL, RDSL, HDSL and SDSL (nr 94, 95, 96, 97)
  529.        $$iiff__iiss__llooooppbbaacckk
  530.            True for software loopback interfaces (nr 24)
  531.        $$iiff__iiss__cciissccoovvllaann
  532.            True for Cisco VLAN interfaces (interfaces with the
  533.            word Vlan or VLAN in their ifdescs)
  534.        $$iiff__vvllaann__iidd
  535.            Returns the vlan id associated with a specific port on
  536.            Cisco Catalyst switches under both Catalyst OS and
  537.            IOS.  If it is not a vlan interface, will return
  538.            undef.
  539.        $$iiff__MMTTUU
  540.            Returns the Maximum Transfer Unit associated with a
  541.            specific port.
  542.        Besides that, you can also use the variables defined for
  543.        templates below.  Further, all the variables available in
  544.        cfgmaker is at the scripts disposal even if the use of
  545.        such features is discouraged.  More "shortcuts" in the
  546.        form of variables and functions will be made avaiable in
  547.        the future instead.
  548.        _E_x_a_m_p_l_e_s _o_n _F_i_l_t_e_r_s
  549.        The following filter will not affect which interfaces
  550.        get's included or excluded, it will make cfgmaker behave
  551.        as normally.
  552.         '--if-filter=$default'
  553.        The following filter will make cfgmaker exclude PPP (23)
  554.        interfaces:
  555.         '--if-filter=$default && $if_type!=23'
  556.        The following filter will make cfgmaker behave as usual
  557.        except that it will consider the operational state of an
  558.        interface irrelevant but still reject all interfaces which
  559.        are administratively down.
  560.         '--if-filter=$if_admin && $default_iftype'
  561.        DDeettaaiillss oonn TTeemmppllaatteess
  562.        The contents of the template files are evaluated as a Perl
  563.        program.  A number or Perl variables are available for the
  564.        program to read and others are used to be written to.
  565.        As quite a few of the predefined variables has values
  566.        which are are supposed to be used in HTML code some of
  567.        them have an "HTML-escaped" variant, e.g $html_syslocation
  568.        is the HTML escaped variant of $syslocation.  The HTML
  569.        escaping means that the chars "<", ">" and "&" are
  570.        replaced by "&lt;", "&gt;" and "&amp;" and that newlines
  571.        embedded in the string are prepended with "<BR>" and
  572.        appended with a space character (if a newline is last in
  573.        the string it is not touched).
  574.        _W_r_i_t_a_b_l_e _T_e_m_p_l_a_t_e _V_a_r_i_a_b_l_e_s
  575.        These are the variables available to store the configura-
  576.        tion lines in.  Some of them are initialized prior to the
  577.        evaluation of the template but such content normally is
  578.        comments for inclusion in the final configuration file so
  579.        those variables might be reset to the empty string in the
  580.        template code to eliminate the comments.  The other way
  581.        around is also possible, the contents of these variables
  582.        might be extended with further information for various
  583.        reasons such as debugging etc.
  584.        Once the template has been evaluated, the following hap-
  585.        pens:  if the template is a interface template and the
  586.        actual interface for some reason is rejected and thus
  587.        needs to be commented out, all the lines in the variable
  588.        $$ttaarrggeett__lliinneess are turned into comments by adding a hash
  589.        mark ("#") at their beginning.  Then all the variables
  590.        $$hheeaadd__lliinneess, $$pprroobblleemm__lliinneess , $$ttaarrggeett__lliinneess and $$sseeppaarraa--
  591.        ttoorr__lliinneess are concatenated together to form the lines to
  592.        add to the configuration file.
  593.        $$ttaarrggeett__lliinneess
  594.            This variable is the placeholder for the configuration
  595.            lines created by the template.  $$ttaarrggeett__lliinneess is pre-
  596.            defined to be empty when the template code is evalu-
  597.            ated.
  598.        $$hheeaadd__lliinneess
  599.            This variable is intended to be the placeholder for
  600.            the comment line appearing just before the target in
  601.            the configuration file.  It is initialized with that
  602.            comment line before the evaluation of the template
  603.            code and if the template doesn't modify $$hheeaadd__lliinneess
  604.            during evaluation, the comment will look like usual in
  605.            the config file.
  606.        $$pprroobblleemm__lliinneess
  607.            This variable is intended to be the placholder for the
  608.            comment lines describing any problems which might have
  609.            been encountered when trying to add the target into
  610.            the configuration.  For host templates it's normally
  611.            not used and for those it's predefined as the empty
  612.            string.  For interface templates $$pprroobblleemm__lliinneess is
  613.            predefined with the error description comments which
  614.            cfgmaker normally would use for rejected interfaces or
  615.            as the empty string for accepted interfaces.
  616.            It is possible to test against $$pprroobblleemm__lliinneess to find
  617.            out if an interface will be included or rejected but
  618.            this is not recommended.  Test against $$iiff__ookk instead.
  619.        $$sseeppaarraattoorr__lliinneess
  620.            This variable is the placeholder for the string to use
  621.            as the separator between the code for individual tar-
  622.            gets.  The contents of this variable is put after each
  623.            target (so the lines will appear after the end of the
  624.            last target in the config as well).
  625.        _P_r_e_d_e_f_i_n_e_d _T_e_m_p_l_a_t_e _V_a_r_i_a_b_l_e_s
  626.        All the variables below are available for interface tem-
  627.        plates to use.  For host templates, only those listed
  628.        under "Host and System Variables" are available.
  629.        For interface templates the variables listed under "Prede-
  630.        fined Filter Variables" are also available.
  631.        _H_o_s_t _a_n_d _S_y_s_t_e_m _V_a_r_i_a_b_l_e_s
  632.        $$rroouutteerr__nnaammee
  633.            This is the fully qualified name for the router.  It
  634.            is affected by the following items on the command
  635.            line:  the router name itself and ----ddnnss--ddoommaaiinn.
  636.        $$rroouutteerr__ccoonnnneecctt
  637.            This is the reference string for the router being
  638.            polled.  It is on the form community@router possibly
  639.            followed by some snmp options.  It is affected by the
  640.            following items on the command line:  the router name
  641.            itself, ----ccoommmmuunniittyy, ----ssnnmmpp--ooppttiioonnss and ----ddnnss--ddoommaaiinn.
  642.            (There's no HTML escaped variant available)
  643.        $$ddiirreeccttoorryy__nnaammee
  644.            This variable should contain the directory name as
  645.            cfgmaker normally would use as the value for the
  646.            "Directory[]" directive.  The value is determined by
  647.            the ----ssuubbddiirrss command line option.  If ----ssuubbddiirrss isn't
  648.            specified $$ddiirreeccttoorryy__nnaammee will be the empty string.
  649.            (There's no HTML escaped variant available)
  650.        $$ssyyssccoonnttaacctt
  651.            This variable is the router's SNMP sysContact value.
  652.            (HTML escaped variant: $$hhttmmll__ssyyssccoonnttaacctt)
  653.        $$ssyyssnnaammee
  654.            This variable is the router's SNMP sysName value.  (No
  655.            HTML escaped variant available)
  656.        $$ssyyssllooccaattiioonn
  657.            This variable is the router's SNMP sysLocation value.
  658.            (HTML escaped variant: $$hhttmmll__ssyyssllooccaattiioonn)
  659.        $$ssyyssddeessccrr
  660.            This variable is the router's SNMP sysDescr value.  It
  661.            is normally not used by cfgmaker but might be useful
  662.            in a template.  (HTML escaped variant: $$hhttmmll__ssyyssddeessccrr)
  663.        _I_n_t_e_r_f_a_c_e _T_a_r_g_e_t _R_e_l_a_t_e_d _V_a_r_i_a_b_l_e_s
  664.        $$ttaarrggeett__nnaammee
  665.            This is what cfgmaker normally would use as the the
  666.            name of the target.  The target name is what is found
  667.            within the square brackets, "[]", for target direc-
  668.            tives.  (There's no HTML escaped variant available)
  669.        $$iiff__rreeff
  670.            This the reference string for the interface.  It is
  671.            expected to be used in the "Target[xyz]" directive to
  672.            distinguish what interface to use.  The value of this
  673.            variable is affected by the ----iiffrreeff command line
  674.            option.  It is normally used together with
  675.            $$rroouutteerr__ccoonnnneecctt.  (There's no HTML escaped variant
  676.            available)
  677.        $$iiff__ookk
  678.            This variable is true if the interface is going to be
  679.            included into the configuration file, otherwise false.
  680.            Don't test against other variables such as $$pprroobb--
  681.            lleemm__lliinneess to find out if an interface will be rejected
  682.            or not, use this $$iiff__ookk instead.
  683.        $$ddeeffaauulltt__ttaarrggeett__lliinneess
  684.            This variable contains all the target lines which cfg-
  685.            maker by default outputs for this interface.  It's
  686.            useful if you want to have the "standard target" but
  687.            want to add some extra lines to it by using a tem-
  688.            plate.
  689.        By default cfgmaker uses the following directives for each
  690.        target it generates: Target[], SetEnv[], MaxBytes[],
  691.        Title[], PageTop[] and if there is any directory specified
  692.        also the Directory[] directive.
  693.        To facilitate the creation of templates which generates
  694.        target configs which are similar to the default one, each
  695.        of the above mentioned directive lines have a correspond-
  696.        ing variable containing the line as cfgmaker would have
  697.        output it by default.
  698.        Note that none of these have a HTML escaped variant, text
  699.        in them is HTML escaped where needed.  Also note that they
  700.        do not have any newline at the end.
  701.        $$ddeeffaauulltt__ttaarrggeett__ddiirreeccttiivvee
  702.            This variable contains the default string for the Tar-
  703.            get[] directive line.
  704.        $$ddeeffaauulltt__sseetteennvv__ddiirreeccttiivvee
  705.            This variable contains the default string for the
  706.            SetEnv[] directive line.
  707.        $$ddeeffaauulltt__ddiirreeccttoorryy__ddiirreeccttiivvee
  708.            This variable contains the default string for the
  709.            Directory[] directive line which means it is an empty
  710.            string (with no newline) if there's no directory.
  711.        $$ddeeffaauulltt__mmaaxxbbyytteess__ddiirreeccttiivvee
  712.            This variable contains the default string for the
  713.            MaxBytes[] directive line.
  714.        $$ddeeffaauulltt__ttiittllee__ddiirreeccttiivvee
  715.            This variable contains the default string for the
  716.            Title[] directive line.
  717.        $$ddeeffaauulltt__ppaaggeettoopp__ddiirreeccttiivvee
  718.            This variable contains the default string for the
  719.            PageTop[] directive lines.
  720.        _I_n_t_e_r_f_a_c_e _N_e_t_w_o_r_k _C_o_n_f_i_g_u_r_a_t_i_o_n _V_a_r_i_a_b_l_e_s
  721.        $$iiff__iipp
  722.            This variable should contain the IP-address of the
  723.            interface, if any has been assigned to it.  (There's
  724.            no HTML escaped variant available)
  725.        $$iiffiinnddeexx
  726.            This variable is the SNMP ifIndex for the interface
  727.            which per definition always is an integer.  (There's
  728.            no HTML escaped variant available)
  729.        $$iiff__iinnddeexx
  730.            Equivalent with $$iiffiinnddeexx.
  731.        $$iiff__eetthh
  732.            Contains the ethernet address of the interface, if
  733.            any.  (There's no HTML escaped variant available)
  734.        $$iiff__ssppeeeedd
  735.            This variable is the speed in bytes/second (with pre-
  736.            fixes).  (There's no HTML escaped variant available)
  737.        $$iiff__ssppeeeedd__ssttrr
  738.            This variable is a cooked speed description which is
  739.            either in bits or bytes depending on wether or not the
  740.            bits option is active and also with the proper prefix
  741.            for the speed (k, M, G etc).  (No HTML escaped variant
  742.            available)
  743.        $$iiff__ttyyppee__ddeesscc
  744.            This variable is a textual description of the inter-
  745.            face type.  (HTML escaped variant: $$hhttmmll__iiff__ttyyppee__ddeesscc)
  746.        $$iiff__ttyyppee__nnuumm
  747.            This variable the integer value corresponding to the
  748.            interface type (for a listing for the value for the
  749.            more common interface types, see the section DETAILS
  750.            ON FILTERS above).  (No HTML escaped variant avail-
  751.            able)
  752.        $$iiff__ddnnss__nnaammee
  753.            This is the DNS name for the interface.  (No HTML
  754.            escaped variant available)
  755.        _I_n_t_e_r_f_a_c_e _N_a_m_e_, _D_e_s_c_r_i_p_t_i_o_n _a_n_d _A_l_i_a_s _V_a_r_i_a_b_l_e_s
  756.        It might seem confusing with both _N_a_m_e, _D_e_s_c_r_i_p_t_i_o_n and
  757.        _A_l_i_a_s in this context and to some extent it is.  _N_a_m_e and
  758.        _D_e_s_c_r_i_p_t_i_o_n are usually supported on most equipment but
  759.        how they are used varies, both between manufacturers as
  760.        well as between different cathegories of equipment from
  761.        the same manufacturer.  The _A_l_i_a_s is at least supported by
  762.        Cisco IOS, and that variable contains whatever is used in
  763.        the IOS statement called "description" for the interface
  764.        (not to be confused with the SNMP variables for _D_e_s_c_r_i_p_-
  765.        _t_i_o_n).
  766.        For better control from the command line consider
  767.        $$iiff__ttiittllee__ddeesscc which contents are controlled by the
  768.        ----iiff--ddeessccrr command line option.
  769.        $$iiff__ssnnmmpp__ddeessccrr
  770.            This variable should contain the "raw" description of
  771.            the interface as determined by the SNMP polling of the
  772.            router.  (HTML escaped variant: $$hhttmmll__iiff__ssnnmmpp__ddeessccrr)
  773.        $$iiff__ssnnmmpp__nnaammee
  774.            The "raw" name for the interface as provided by SNMP
  775.            polling.  (HTML escaped variant: $$hhttmmll__iiff__ssnnmmpp__nnaammee)
  776.        $$iiff__ssnnmmpp__aalliiaass
  777.            The "raw" ifAlias for the interface as provided by
  778.            SNMP polling. (HTML escaped variant:
  779.            $$hhttmmll__iiff__ssnnmmpp__aalliiaass)
  780.        $$iiff__cciissccoo__ddeessccrr
  781.            The "raw" CiscolocIfDescr for the interface as pro-
  782.            vided by SNMP polling.  (HTML escaped variant:
  783.            $$hhttmmll__iiff__cciissccoo__ddeessccrr)
  784.        $$iiff__ddeessccrriippttiioonn
  785.            This is the "cooked" description string for the inter-
  786.            face, taking into account the SNMP values found for
  787.            the interface's RDescr, ifAlias and CiscolocIfDescr.
  788.            (HTML escaped variant: $$hhttmmll__iiff__ddeessccrriippttiioonn)
  789.        $$iiff__ttiittllee
  790.            The full string cfgmaker by default would have used
  791.            for the Title[] directive in the configuration as well
  792.            as the content of the topmost H1 tag in the PageTop[].
  793.            Is composed by the contents of $$ddeesscc__pprreeffiixx,
  794.            $$iiff__ttiittllee__ddeesscc and $$ssyyssnnaammee.
  795.            As $$iiff__ttiittllee depends on $$iiff__ttiittllee__ddeesscc, it is possible
  796.            to indirectly control $$iiff__ttiittllee by using the command
  797.            line option ----iiff--ddeessccrr.
  798.            (HTML escaped variant: $$hhttmmll__iiff__ttiittllee)
  799.        $$iiff__ppoorrtt__nnaammee
  800.            If the host is a Cisco Catalyst LAN switch, this vari-
  801.            able is the name of that port.  (No HTML escaped vari-
  802.            ant available)
  803.        $$ddeesscc__pprreeffiixx
  804.            This variable is a prefix of the description of what
  805.            the target is to use in the "Title[]" directive and in
  806.            the H1 section of the "PageTop[]".  Default is "Traf-
  807.            fic analysis for ".  (HTML escaped variant:
  808.            $$hhttmmll__ddeesscc__pprreeffiixx)
  809.        $$iiff__ttiittllee__ddeesscc
  810.            This is the description of the interface normally used
  811.            by cfgmaker as part of the variable $$iiff__ttiittllee.  The
  812.            latter is used as the full string in the "Title[]"
  813.            directove and the H1 section in the PageTop[].
  814.            $$iiff__ttiittllee__ddeesscc is controlled by the command line
  815.            option ----iiff--ddeessccrr which indirectly controls the con-
  816.            tents of $$iiff__ttiittllee
  817.            (HTML escaped variant: $$hhttmmll__iiff__ttiittllee__ddeesscc)
  818.        _H_e_l_p _F_u_n_c_t_i_o_n_s _f_o_r _T_e_m_p_l_a_t_e_s
  819.        The following functions exists to facilitate the writing
  820.        of host and interface templates.
  821.        hhttmmll__eessccaappee((_ss_tt_rr_ii_nn_gg))
  822.            _hh_tt_mm_ll____ee_ss_cc_aa_pp_ee_((_)) takes a string as an argument and
  823.            returns a new string where the following substitutions
  824.            has been done:  the chars "<", ">" and "&" are
  825.            replaced by "&lt;", "&gt;" and "&amp;" and that
  826.            newlines embedded in the string are prepended with
  827.            "<BR>" and appended with a space character (newlines
  828.            at the end of the string are not touched).
  829.        _E_x_a_m_p_l_e _T_e_m_p_l_a_t_e _F_i_l_e_s
  830.        Template Example 1: Eliminating Rejected Targets From
  831.        Appearing
  832.        This template file generates exactly the same configura-
  833.        tion code per interface as cfgmaker does by default, with
  834.        the exception that it eliminates all lines (comments as
  835.        well as config code) for an interface if the interface
  836.        happens to be rejected.
  837.         if(not $problem_lines)
  838.         {
  839.           $target_lines .= <<ECHO;
  840.         Target[$target_name]: $if_ref:$router_connect
  841.         SetEnv[$target_name]: MRTG_INT_IP="$if_ip" MRTG_INT_DESCR="$if_snmp_descr"
  842.         ECHO
  843.           if ($directory_name) {
  844.               $target_lines .= "Directory[$target_name]: $directory_namen";
  845.           }
  846.           $target_lines .= <<ECHO;
  847.         MaxBytes[$target_name]: $if_speed
  848.         Title[$target_name]: $html_desc_prefix$html_if_title_desc -- $sysname
  849.         PageTop[$target_name]: <h1>$html_desc_prefix$html_if_title_desc -- $sysname</h1>
  850.                        <div id="sysdetails">
  851.                                <table>
  852.                                        <tr>
  853.                                                <td>System:</td>
  854.                                                <td>$sysname in $html_syslocation</td>
  855.                                        </tr>
  856.                                        <tr>
  857.                                                <td>Maintainer:</td>
  858.                                                <td>$html_syscontact</td>
  859.                                        </tr>
  860.                                        <tr>
  861.                                                <td>Description:</td>
  862.                                                <td>$html_if_description</td>
  863.                                        </tr>
  864.                                        <tr>
  865.                                                <td>ifType:</td>
  866.                                                <td>$html_if_type_desc ($if_type_num)</td>
  867.                                        </tr>
  868.                                        <tr>
  869.                                                <td>ifName:</td>
  870.                                                <td>$html_if_snmp_name</td>
  871.                                        </tr>
  872.         ECHO
  873.           $target_lines .= <<ECHO if defined $if_port_name;
  874.                                        <tr>
  875.                                                <td>Port Name:</td>
  876.                                                <td>$if_port_name</td>
  877.                                        </tr>
  878.         ECHO
  879.           $target_lines .= <<ECHO;
  880.                                        <tr>
  881.                                                <td>Max Speed:</td>
  882.                                                <td>$if_speed_str</td>
  883.                                        </tr>
  884.         ECHO
  885.           $target_lines .= <<ECHO if $if_ip;
  886.                                        <tr>
  887.                                                <td>Ip:</td>
  888.                                                <td>$if_ip ($if_dns_name)</td>
  889.                                        </tr>
  890.         ECHO
  891.           $target_lines .= <<ECHO;
  892.                                </table>
  893.                        </div>
  894.         ECHO
  895.         } else {
  896.           $head_lines="";
  897.           $problem_lines="";
  898.           $target_lines="";
  899.           $separator_lines="";
  900.         }
  901.        _T_e_m_p_l_a_t_e _E_x_a_m_p_l_e _2_: _S_i_m_p_l_i_e_r _V_e_r_s_i_o_n _o_f _E_x_a_m_p_l_e _1
  902.        Example 1 was partly intended to demonstrate how to cus-
  903.        tomize the generation of interface targets but also to
  904.        provide a hint of how the variables are used in the
  905.        "default" template which one could consider that cfgmaker
  906.        normally uses.
  907.        If you're only intrested in the easiest way of entirely
  908.        eliminating those reject interfaces, the template below
  909.        would do the job as well by using $$ddeeffaauulltt__ttaarrggeett__lliinneess.
  910.         if($if_ok) {
  911.          $target_lines = $default_target_lines;
  912.         } else {
  913.           $head_lines="";
  914.           $problem_lines="";
  915.           $target_lines="";
  916.           $separator_lines="";
  917.         }
  918.        _T_e_m_p_l_a_t_e _E_x_a_m_p_l_e _3_: _C_r_e_a_t_i_n_g _C_P_U _T_a_r_g_e_t_s _f_o_r _H_o_s_t_s
  919.        Below is an example of a host template.
  920.         $head_lines .= <<ECHO;
  921.         #---------------------------------------------------------------------
  922.         ECHO
  923.         my $target_name = $router_name . ".cpu";
  924.         $target_lines .= <<ECHO;
  925.         YLegend[$target_name]: Percentage CPU load
  926.         ShortLegend[$target_name]: %
  927.         Legend1[$target_name]: CPU load in %
  928.         Legend2[$target_name]:
  929.         Legend3[$target_name]: Max Observed CPU load
  930.         Legend4[$target_name]:
  931.         LegendI[$target_name]: &nbsp;CPU Load:
  932.         LegendO[$target_name]:
  933.         WithPeak[$target_name]: ywm
  934.         MaxBytes[$target_name]: 100
  935.         Options[$target_name]: growright, gauge, nopercent
  936.         Title[$target_name]: $router_name CPU load
  937.         Target[$target_name]: 1.3.6.1.4.1.9.2.1.58.0&1.3.6.1.4.1.9.2.1.58.0:$router_connect
  938.         PageTop[$target_name]: <h1>$router_name CPU load</h1>
  939.                        <div>
  940.                                <table>
  941.                                        <tr>
  942.                                                <td>System:</td>
  943.                                                <td>$router_name in $html_syslocation</td>
  944.                                        </tr>
  945.                                        <tr>
  946.                                                <td>Maintainer:</td>
  947.                                                <td>$html_syscontact</td>
  948.                                        </tr>
  949.                                        <tr>
  950.                                                <td>Description:</td>
  951.                                                <td>$html_sysdescr</td>
  952.                                        </tr>
  953.                                        <tr>
  954.                                                <td>Resource:</td>
  955.                                                <td>CPU.</td>
  956.                                        </tr>
  957.                                </table>
  958.                        </div>
  959.         ECHO
  960. EEXXAAMMPPLLEESS
  961.        The first example creates a config file for
  962.        _r_o_u_t_e_r_._p_l_a_c_e_._x_y_z:  the router has the community name _p_u_b_-
  963.        _l_i_c.  Interfaces get identified by their IP number.  Two
  964.        global options get added to the config file.  The config
  965.        file gets redirected to _m_r_t_g_._c_o_n_f.  The '' signs at the
  966.        end of the line mean that this command should be written
  967.        on a single line.
  968.         cfgmaker --global "WorkDir: /home/tobi"           
  969.                  --global "Options[_]: growright,bits"    
  970.                  --ifref=ip                               
  971.                  public@router.place.xyz > mrtg.cfg
  972.        Note: if cfgmaker is not in your path, but you are in the
  973.        directory where cfgmaker is stored, you can start it with
  974.        ./cfgmaker
  975.        The next example creates a config file for four devices:
  976.        _r_o_u_t_e_r_1_._p_l_a_c_e_._x_y_z, _r_o_u_t_e_r_2_._p_l_a_c_e_._x_y_z, _s_w_i_t_c_h_1_._p_l_a_c_e_._x_y_z
  977.        and _s_w_i_t_c_h_2_._p_l_a_c_e_._x_y_z all with the community _p_u_b_l_i_c.
  978.        The two routers will have ----iiffrreeff set to ddeessccrr whilst the
  979.        two switches will use ----iiffrreeff set to nnaammee.  Further the
  980.        routers will use ----iiffddeesscc set to aalliiaass and
  981.        _s_w_i_t_c_h_1_._p_l_a_c_e_._x_y_z will use ----iiffddeesscc set to ddeessccrr whilst
  982.        _s_w_i_t_c_h_2_._p_l_a_c_e_._x_y_z use nnaammee instead.
  983.        Finally, there will be two Options lines inserted in the
  984.        configuration: One will be in the beginning, whilst the
  985.        other will be inserted after the lines related to the two
  986.        routers but before those lines related to the switches.
  987.         cfgmaker --global "WorkDir: /home/tobi"           
  988.                  --global "Options[_]: growright,bits"    
  989.                  --ifref=descr                            
  990.                  --ifdesc=alias                           
  991.                  public@router1.place.xyz                 
  992.                  public@router2.place.xyz                 
  993.                  --global "Options[_]: growright"         
  994.                  --ifref=name                             
  995.                  --ifdesc=descr                           
  996.                  public@switch1.place.xyz                 
  997.                  --ifdesc=name                            
  998.                  public@switch2.place.xyz > mrtg.cfg
  999.        The next example demonstrates how to use the ----ccoommmmuunniittyy,
  1000.        ----ssnnmmpp--ooppttiioonnss and ----ddnnss--ddoommaaiinn to make the command line
  1001.        simpler.  All the equipment will use the community _h_i_d_d_e_n,
  1002.        except for the ppp-server which use community _a_c_c_e_s_s.  All
  1003.        equipment uses these SNMP options: 11ss ttiimmeeoouutt, 11 rreettrryy and
  1004.        SSNNMMPP vveerrssiioonn 22 (bbaacckkooffff and ppoorrtt is unspecified which
  1005.        means they use the default values).  The exception again
  1006.        is the ppp-server which uses SSNNMMPP vveerrssiioonn 11.  Finally, all
  1007.        the equipment is part of the domain _p_l_a_c_e_._x_y_z, except for
  1008.        the ppp-server which is part of the domain
  1009.        _r_e_m_o_t_e_._p_l_a_c_e_._x_y_z.  Note that the latter is achieved simply
  1010.        by specifying the name of the ppp-server to be
  1011.        _p_p_p_-_s_e_r_v_e_r_._rr_ee_mm_oo_tt_ee .
  1012.         cfgmaker --global "WorkDir: /home/tobi"           
  1013.                  --global "Options[_]: growright,bits"    
  1014.                  --dns-domain=place.xyz                   
  1015.                  --community=hidden                       
  1016.                  --snmp-options=::1:1::2                  
  1017.                  router1                                  
  1018.                  router2                                  
  1019.                  router3                                  
  1020.                  router4                                  
  1021.                  router5                                  
  1022.                  switch1                                  
  1023.                  switch2                                  
  1024.                  switch3                                  
  1025.                  switch4                                  
  1026.                  switch5                                  
  1027.                  switch6                                  
  1028.                  switch7                                  
  1029.                  access@ppp-server.remote:::::1 > mrtg.cfg
  1030. SSEEEE AALLSSOO
  1031.        mrtg-reference
  1032. AAUUTTHHOORR
  1033.        Tobias Oetiker <tobi@oetiker.ch> and Jakob Ilves
  1034.        <jakob.ilves@oracle.com>
  1035. LLIICCEENNSSEE
  1036.        GNU General Public License
  1037. CCOOPPYYRRIIGGHHTT
  1038.        Cfgmaker is Copyright 2000 by Tobias Oetiker
  1039.        <tobi@oetiker.ch>
  1040. 2.13.2                      2006-02-03                CFGMAKER(1)